我有以下日期时间字符串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'
答案 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)
import mx.DateTime as dt
dt.DateTimeFrom('2017-10-18T04:46:53.553472514Z')