python | mktime 溢出错误

标签 python

我已经在网上搜索过,找不到适合这个问题的解决方案

OverflowError: mktime argument out of range

导致这个异常的代码

 t = (1956, 3, 2, 0, 0, 0, 0, 0, 0)
 ser = time.mktime(t)

我想知道这个异常的真正原因,有人说日期不在有效范围内,但对我来说没有任何意义,如果有一个范围,它可能是什么。这取决于我们使用的系统。也想知道这个问题的好的解决方案。

谢谢。

最佳答案

time.mktime 从平台的 C 库调用底层 mktime 函数。例如,您发布的上述代码在 Mac OS X 上对我来说效果很好,尽管它返回一个负数,因为日期早于 Unix 纪元。所以原因是您平台的 mktime 实现可能不支持 Unix 纪元之前的日期。您可以使用 Python 的 datetime 模块构造一个与上述日期对应的 datetime 对象,从另一个代表 Unix 纪元的 datetime 对象中减去它,然后使用计算的 timedelta 对象获取自纪元以来的秒数:

from datetime import datetime
epoch = datetime(1970, 1, 1)
t = datetime(1956, 3, 2)
diff = t-epoch
print diff.days * 24 * 3600 + diff.seconds

更新:如果您使用的是 Python 2.7 或更高版本,您可以简单地使用 print diff.total_seconds(),如下面 Chad Miller 的评论所述。

关于 python | mktime 溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2518706/

相关文章:

python - "Element click intercepted"尝试单击复选框时出错

python - 如何更新最新的sqlite3帖子?

python 和 sll/Exchange 2007 : No suitable authentication method found

python - 打印 CatBoost 超参数

python - 在特定的一个数据集上出现此错误

python - mypy:无类型装饰器使函数 "my_method"无类型

python - 当且仅当标题字符串中包含 '20' 时,遍历每个数据帧标题并将 int month 更新为 str month

python - [...] 是什么意思作为 python 中的输出?

python - 在运行时添加 gRPC 服务程序并为客户端提供接口(interface)

python - 用户(威胁参与者)可以更改 Flask session 数据吗?