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

3 投票
2 回答
989 浏览
提问于 2025-04-16 22:45

我有一个日期字符串:

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)

请帮忙,谢谢!

2 个回答

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)
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

撰写回答