問題出現
begin = time.mktime(time.strptime('1970-01-01 00:00:00', '%Y-%m-%d %H:%M:%S'))
系統提示:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: mktime argument out of range
問題分析
- mktime()是localtime()的反函數,localtime根據秒數返回時間戳
- 它的參數是struct_time或完整的9個元組,它返回一個浮點數,可以視爲從最早時間戳開始的描述。
- Windows中時間戳是有範圍的,參考官方文檔,只要不在這個範圍內,使用時就會報錯
- 文檔中提到不能早於midnight, January 1, 1970,不能晚於23:59:59 January 18, 2038
問題解決
使用以下命令找到windows中最早的時間戳
>>> time.localtime(0)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
可以發現,時間戳是從1970年1月1日早上8點開始的,於是將開始時的代碼修改如下即可正常運行
begin = time.mktime(time.strptime('1970-01-01 00:00:00', '%Y-%m-%d %H:%M:%S'))
另外,在查詢時發現,該問題在windows系統中會出現,而在Linux系統中則不會出現。