在Python中将日期字符串转换为日期时间对象时,微秒部分会丢失。

3

我有一个日期字符串:

dtstr = '2010-12-19 03:44:34.778000'

我想将它转换为日期时间对象,所以我按照以下步骤进行:
import time
from datetime import datetime

dtstr = '2010-12-19 03:44:34.778000'
format = "%Y-%m-%d %H:%M:%S.%f"
datetime.fromtimestamp(time.mktime(time.strptime(dtstr,format)))

但是返回的是:datetime.datetime(2010, 12, 19, 3, 44, 34)而不是datetime.datetime(2010, 12, 19, 3, 44, 34,778000)。为什么微秒部分被省略了?我该如何得到datetime.datetime(2010, 12, 19, 3, 44, 34,778000)?请帮忙,谢谢。

可能是 https://dev59.com/93RB5IYBdhLWcg3wLUq3 的重复问题。 - Chris Gregg
2个回答

7
from datetime import datetime

dtstr = '2010-12-19 03:44:34.778000'
format = "%Y-%m-%d %H:%M:%S.%f"
a = datetime.strptime(dtstr,format)
print a.microsecond

time 处理的是自 Unix 纪元以来的秒数,因此使用 time 会丢失微秒。直接使用 datetime.strptime


2
time.strptime返回的time.struct_time对象不会存储毫秒数:
In [116]: time.strptime(dtstr,"%Y-%m-%d %H:%M:%S.%f",)
Out[116]: time.struct_time(tm_year=2010, tm_mon=12, tm_mday=19, tm_hour=3, tm_min=44, tm_sec=34, tm_wday=6, tm_yday=353, tm_isdst=-1)

但是 dt.datetime.strptime 返回的 datetime 对象确实会存储毫秒:

In [117]: import datetime as dt

In [118]: dt.datetime.strptime(dtstr,"%Y-%m-%d %H:%M:%S.%f")
Out[118]: datetime.datetime(2010, 12, 19, 3, 44, 34, 778000)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接