我已经在网上搜索过,但找不到针对此问题的合适解决方案
OverflowError: mktime argument out of range
导致该异常的代码
t = (1956, 3, 2, 0, 0, 0, 0, 0, 0)
ser = time.mktime(t)
我想知道这个异常的实际原因,有人说日期不在有效范围内,但这对我来说没有任何意义,如果有一个范围,它可能是什么。这取决于我们使用的系统。也想知道这个问题有什么好的解决办法。
Thanks.
time.mktime
调用底层mktime
来自平台的 C 库的函数。例如,您发布的上述代码在 Mac OS X 上非常适合我,尽管它返回负数,因为日期早于 Unix 纪元。所以原因是你的平台mktime
实现可能不支持 Unix 纪元之前的日期。你可以使用Python的datetime
模块来构造一个datetime
与上述日期对应的对象,从另一个中减去它datetime
代表 Unix 纪元的对象并使用计算出的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
Update:如果您使用的是 Python 2.7 或更高版本,您可以简单地使用print diff.total_seconds()
正如下面查德·米勒的评论所述。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)