在datetime字符串中设置精度为毫秒:Python

时间:2017-04-15 07:30:37

标签: python

我有一个日期时间字符串" 2017-02-14T18:21:14.080 + 05:30"。 我使用的代码是

from dateutil.parser import parse
print parse("2017-02-14T18:21:14.080+05:30")

我得到的datetime.datetime对象是

2017-02-14 18:21:14.080000+05:30

无论如何,python允许我将时区信息前显示的毫秒值的精度设置为3,以便将输出设为

2017-02-14 18:21:14.080+05:30

1 个答案:

答案 0 :(得分:0)

没有内置方法要求Python以毫秒显示日期。 您必须进行一些字符串操作才能获得所需的结果:

from dateutil.parser import parse
import datetime as DT
date = parse("2017-02-14T18:21:14.080+05:30")
microsecond = date.microsecond
millisecond = int(round(microsecond/1000))
print(str(date).replace('.{:06d}'.format(microsecond), 
                        '.{:03d}'.format(millisecond)))

产量

2017-02-14 18:21:14.080+05:30

有关解决方案,请参阅this post 讨论如何将微秒转换为毫秒。注意其中之一 难点是date.microsecond可能会返回少于6的数字 数字,如果微秒为0,在某些操作系统上,str(date)可能drop the microseconds altogether)。这个 这就是为什么以前采取了一些痛苦来将微秒格式化为6位数 替换为格式为3位的毫秒。

使用上面的代码,在一个操作系统上,当零时减去微秒,没有 将显示毫秒。如果您希望始终显示毫秒格式化 到3位小数,你必须从头开始构建日期字符串:

from dateutil.parser import parse
import datetime as DT
date = parse("2017-02-14T18:21:14.080+05:30")
microsecond = date.microsecond
millisecond = round(microsecond/1000)
utcoffset = date.strftime('%z')
utcoffset_string = '{}:{}'.format(utcoffset[:-2], utcoffset[-2:])
print('{}{}{}'.format(date.strftime('%Y-%m-%dT%H:%M:%S'), 
                      '.{:03d}'.format(millisecond),
                      utcoffset_string))