Python | mktime溢出错误

Swi*_*tch 18 python

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

OverflowError: mktime argument out of range
Run Code Online (Sandbox Code Playgroud)

导致此异常的代码

 t = (1956, 3, 2, 0, 0, 0, 0, 0, 0)
 ser = time.mktime(t)
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Tam*_*más 21

time.mktimemktime从平台的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
Run Code Online (Sandbox Code Playgroud)

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

  • 打印 diff.total_seconds() (2认同)