我一直在网上搜索,找不到适合这个问题的解决方案
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.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
Run Code Online (Sandbox Code Playgroud)
更新:如果您使用的是Python 2.7或更高版本,您可以print diff.total_seconds()
在Chad Miller的评论中使用如下所述.
归档时间: |
|
查看次数: |
12152 次 |
最近记录: |