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')