在python中将字符串转换为datetime对象

时间:2018-11-20 09:39:57

标签: python

我正在运行以下代码

import datetime
d =datetime.datetime.strptime('2018-11-20T09:12:01.7511709Z', '%Y-%m-%d %H:%M:%S.%f')

我有一个例外

ValueError("time data '2018-11-20T09:12:01.7511709Z' does not match format '%Y-%m-%d %H:%M:%S.%f'",))

这里的代码有什么问题。请帮忙。

4 个答案:

答案 0 :(得分:2)

好像您需要将微秒截断到小数点后6位(文档似乎支持此操作:https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior

以下工作正常:

import datetime
d = datetime.datetime.strptime('2018-11-20T09:12:01.751171Z', '%Y-%m-%dT%H:%M:%S.%fZ')

如果您想正确舍入微秒,请尝试以下操作:

import datetime


time_string = '2018-11-20T09:12:01.7511709Z'
date_time, microseconds = time_string.split('.')
microseconds = microseconds[:-1]
rounding = len(microseconds) - 6
divisor = 10 ** rounding
new_micros = int(round(int(microseconds) / divisor, 0))
time_string = date_time + '.' + str(new_micros) + 'Z'
d = datetime.datetime.strptime(time_string, '%Y-%m-%dT%H:%M:%S.%fZ')

答案 1 :(得分:2)

%f伪指令接受1到6位数字,请尝试省略输入的最后两位数字:

datetime.datetime.strptime('2018-11-20T09:12:01.7511709Z'[:-2], '%Y-%m-%dT%H:%M:%S.%f')

答案 2 :(得分:0)

您可以使用诸如dateutil之类的第三方库来执行微秒级截断(尽管不是四舍五入):

from dateutil import parser

print(parser.parse('2018-11-20T09:12:01.7511709Z'))

datetime.datetime(2018, 11, 20, 9, 12, 1, 751170, tzinfo=tzutc())

答案 3 :(得分:0)

也是最简单的方法:

from datetime import datetime
str(datetime.now())
  

'2018-11-20 14:58:05.329281'