我已经在网上搜索过,找不到适合这个问题的解决方案
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/