You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.10中timedelta.microseconds疑似返回毫秒的疑问

关于Python 3.10中timedelta.microseconds属性的误解

这不是命名bug,是你对该属性的定义理解有误。

timedelta的microseconds属性返回的是时间差中不足1秒的部分,以微秒为单位的余数,而非整个时间差的总微秒数。看你的例子:
输出的delta是0:00:03.003650,也就是3秒加上0.003650秒——而0.003650秒换算成微秒就是3650(因为1秒=1,000,000微秒),所以delta.microseconds返回3650是完全正确的微秒值,并非毫秒。你觉得像毫秒只是巧合,刚好这个余数除以1000后和sleep的3秒数值接近。

另外,timedelta的几个核心属性都是“余数”概念:

  • seconds:时间差中不足1天的部分,以秒为单位的余数(你的例子中是3秒,符合预期)
  • microseconds:时间差中不足1秒的部分,以微秒为单位的余数(范围0~999999)

如果需要获取整个时间差的总微秒/毫秒数,应该用total_seconds()方法转换:

# 总微秒数
total_micro = delta.total_seconds() * 1_000_000
# 总毫秒数
total_milli = delta.total_seconds() * 1_000

对应你的代码,补充这些计算后的输出会更清晰:

import sys
from datetime import datetime, timedelta
from time import sleep

print(sys.version)
start: datetime = datetime.now()
sleep(3)
end: datetime = datetime.now()
delta: timedelta = (end - start)
print(delta)
print(f"delta.microseconds(不足1秒的微秒余数): {delta.microseconds}")
print(f"总微秒数: {delta.total_seconds() * 1_000_000:.0f}")
print(f"总毫秒数: {delta.total_seconds() * 1_000:.3f}")
print(f"delta.seconds(不足1天的秒余数): {delta.seconds}")

输出示例(数值会有微小波动):

3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0]
0:00:03.003650
delta.microseconds(不足1秒的微秒余数): 3650
总微秒数: 3003650
总毫秒数: 3003.650
delta.seconds(不足1天的秒余数): 3

Python的timedelta确实没有直接提供milliseconds属性,因为通过total_seconds()或对microseconds做简单换算就能得到需要的数值。

内容的提问来源于stack exchange,提问作者Mena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:07:31