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

为何1970年前的datetime调用timestamp()在MacOS正常Windows报错?

差异根因

这个跨平台表现不一致的核心原因是操作系统底层时间API的支持范围不同,和Python版本逻辑无关:

  • MacOS属于类Unix系统,底层时间函数原生支持1970年1月1日UTC(Unix时间纪元起点)之前的时间点,这类早于纪元的时间会返回负的时间戳值,你在Mac上得到的-31539600.0就是1969年1月1日距离纪元点的准确秒数差,运行完全符合预期。
  • Windows系统的原生时间接口不支持1970年1月1日UTC之前的时间转换,Python在Windows环境下调用.timestamp()方法时会直接调用系统底层能力,传入早于纪元的datetime对象时就会抛出OSError: [Errno 22] Invalid argument错误,属于系统层面的限制。
跨平台兼容写法

如果需要代码同时在MacOS、Windows环境下正常处理1970年之前的时间,可以绕过系统原生接口,手动计算时间戳:

from datetime import datetime, timezone

# 以UTC时区的Unix纪元为基准做计算,避免本地时区带来的误差
unix_epoch = datetime(1970, 1, 1, tzinfo=timezone.utc)
target_date = datetime(1969, 1, 1, tzinfo=timezone.utc)
timestamp = (target_date - unix_epoch).total_seconds()

如果使用的是不带时区信息的本地时间datetime对象,计算前需要先补上对应本地时区的偏移配置,否则计算结果会和原生.timestamp()的返回值存在偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:18:18