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
相关产品推荐
相关产品推荐

