Python 如何解析以“Z”结尾的日期时间?

Python 如何解析以“Z”结尾的日期时间?,python,python-3.x,Python,Python 3.x,我有以下日期时间字符串s: 2017-10-18T04:46:53.553472514Z 我这样比较: t = datetime.strptime(s, '%Y-%m-%dT%H:%M:%SZ') 如何修复ValueError:时间数据'2017-10-18T04:46:53.553472514Z'与格式不匹配'%Y-%m-%dT%H:%m:%SZ'我认为您应该使用dateutil.parser模块 In [23]: s = "2017-10-18T04:46:53.553472514Z"

我有以下日期时间字符串
s

2017-10-18T04:46:53.553472514Z

我这样比较:

t = datetime.strptime(s, '%Y-%m-%dT%H:%M:%SZ')

如何修复ValueError:时间数据
'2017-10-18T04:46:53.553472514Z'
与格式不匹配
'%Y-%m-%dT%H:%m:%SZ'
我认为您应该使用dateutil.parser模块

In [23]: s = "2017-10-18T04:46:53.553472514Z"

In [24]: import dateutil.parser as p

In [25]: p.parse(s)
Out[25]: datetime.datetime(2017, 10, 18, 4, 46, 53, 553472, tzinfo=tzutc())
理论上,

t = datetime.strptime(s, '%Y-%m-%dT%H:%M:%S.%fZ')
将是正确的格式字符串,因为你也有分数秒。但它们需要微秒。您的时间可能是纳秒,因为
%f
最多只需要6位数字

所以你需要这样做:

t = datetime.datetime.strptime(s.split(".")[0], '%Y-%m-%dT%H:%M:%S')
t = t + datetime.timedelta(microseconds=int(s.split(".")[1][:-1])/1000)

print (t)

这是可行的,但它将纳秒转换为微秒。如果这不好,那么你需要做些别的事情

datetime
是另一个Python内置模块,它被一个更好的额外模块完全取代:

您只需执行以下操作:

import arrow
dt = arrow.get('2017-10-18T04:46:53.553472514Z').datetime
您的日期字符串是标准化的ISO格式,它将被解析,甚至不提供格式字符串。解析的
df
将是:

datetime.datetime(2017,10,18,4,46,53553472,tzinfo=tzutc())

或者保留
箭头
对象,以防您想要保持额外的精度

我喜欢


格式字符串中没有
t
和秒的分数。已更新我的question@KlausD. 如何将分数添加到
“%Y-%m-%dT%H:%m:%SZ”
?您的日期时间字符串是ISO8601格式的。
import mx.DateTime as dt
dt.DateTimeFrom('2017-10-18T04:46:53.553472514Z')