如何解析以`Z`结尾的日期时间?

时间:2017-10-24 09:09:35

标签: 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'

不匹配

4 个答案:

答案 0 :(得分:2)

理论上,

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)

这可以工作,但它会将纳秒转换为微秒。如果这不好,那么你需要做一些其他事情。

答案 1 :(得分:0)

我认为你应该使用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())

答案 2 :(得分:0)

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

你可以这样做:

import arrow
dt = arrow.get('2017-10-18T04:46:53.553472514Z').datetime

您的日期字符串采用标准化的ISO格式,即使不提供格式字符串也会进行解析。解析后的df将是:

  

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

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

答案 3 :(得分:0)

我喜欢mx.DateTime module

import mx.DateTime as dt
dt.DateTimeFrom('2017-10-18T04:46:53.553472514Z')