解決OverflowError: mktime argument out of range

問題出現

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系統中則不會出現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章