我想写一个函数,它接受一个字符串,并返回True
,如果它是一个有效的ISO-8601日期时间 - 精确到微秒,包括时区偏移量 - 否则为False
。在Python中验证ISO-8601 datetime字符串?
我发现otherquestions提供解析日期时间字符串的方式不同,但我想只有ISO-8601格式的情况下返回True
。解析不会帮助我,除非我可以让它为与ISO-8601不匹配的格式引发错误。
(我在别处使用nice arrow库在我的代码使用arrow
会欢迎的解决方案。)
编辑:看来,一个通用的解决方案,以“这是字符串有效的ISO 8601 datetime“在公共Python日期时间程序包中不存在。
因此,为了使这个问题更窄,更具体,更交代,我会满足于一个格式字符串,将这种形式验证的时间字符串:
'2016-12-13T21:20:37.593194+00:00'
目前我使用:
format_string = '%Y-%m-%dT%H:%M:%S.%f%z'
datetime.datetime.strptime(my_timestamp, format_string)
这给:
ValueError: time data '2016-12-13T21:20:37.593194+00:00' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'
的问题似乎在于用的UTC结肠fset(+00:00
)。如果我使用不带冒号的偏移量(例如'2016-12-13T21:20:37.593194+0000'
),则按预期正确解析。这显然是因为datetime
的%z
标记does not respect the UTC offset form that has a colon,只有表格没有,即使both are valid per the spec。
格式是足够严格单单通过艰难的方式验证它并不难。 –
而你已经尝试......究竟是什么? – jonrsharpe
你看过PyPI上的'iso8601'包吗? –