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.
所以我尝试使用 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.