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

为何Python中timestamp()结果较1970-01-01差值多1微秒?

为什么Python中datetime的timedelta与timestamp结果微秒差1?

先看你给出的代码示例:

# 计算时间差得到timedelta
datetime(2514, 5, 30, 1, 53, 4, 986754, tzinfo=dt.timezone.utc) - datetime(1970,1,1, tzinfo=dt.timezone.utc)
# 输出:datetime.timedelta(days=198841, seconds=6784, microseconds=986754)

# 获取时间戳
datetime(2514, 5, 30, 1, 53, 4, 986754, tzinfo=dt.timezone.utc).timestamp()
# 输出:17179869184.986755

两者微秒部分差1,本质就是双精度浮点数的精度限制导致的误差,没有其他隐藏问题,具体原因如下:

  • timedelta通过拆分天数、秒数、微秒数的方式精确存储时间差,所以能准确保留原始的986754微秒信息。
  • timestamp()返回的Unix时间戳(从1970-01-01 UTC到目标时间的总秒数)以双精度浮点数存储。双精度浮点数的有效二进制位数为53位,对应十进制约15-17位有效数字。当时间戳的整数部分已达到10位(如示例中的17179869184),剩余有效位数不足以精确表示所有微秒级的小数部分(需要6位有效数字),此时原始的17179869184.986754会被近似为最接近的可表示浮点数,也就是17179869184.986755。

你可以手动验证这个近似过程:把精确的总微秒数17179869184986754转换成秒后,用双精度浮点数存储时就会出现这种微小偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:00:00