Python 在 32 位系统中从时间戳创建日期时发生溢出错误

Python OverflowError creating date from timestamp in 32bit system

所以我尝试使用 RaspberryPi4 运行 Debian Buster 中的 python 内置 datetime 模块对时间戳进行简单转换。

转换在我的笔记本电脑(64 位 Debian)中运行良好,但在 Debian 中出现 OverflowError。下面是 2 个示例。

有人知道这个问题的简单解决方法吗? 谢谢!

在 64 位 Debian 系统中:

$ python3 -c "from datetime import datetime; d=datetime.fromtimestamp(int("-11486707200")); print(d.year)"
1606

在 RasbberryPi(32 位)Raspbian 系统中:

$ python3 -c "from datetime import datetime; d=datetime.fromtimestamp(int("-11486707200")); print(d.year)"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
OverflowError: timestamp out of range for platform time_t

假设 -11486707200 是自纪元(Unix 时间)以来的秒数,您可以尝试将其作为 timedelta 添加到纪元;

from datetime import datetime, timedelta, timezone

d = datetime.fromtimestamp(0, tz=timezone.utc) + timedelta(seconds=-11486707200)
print(d.year)
>>> 1606

这在我测试 Python 3.7.9 32 位时有效。请注意,Raspberry Pi4 CPU 具有 64 位架构,因此在这个意义上它不是“32 位系统”。不确定这是否是 Pi 的问题,但我无法通过测试来确定。所以如果它仍然存在,也许问 here.