如何解决Python报错OverflowError: mktime argument out of range?
报错原因
time.mktime() 接收的是本地时区的struct_time对象,转换为对应时间戳时,如果你所处时区早于UTC(比如东八区),1970-01-01 00:00:00 本地时间对应的UTC时间会早于时间戳起始点(UTC 1970-01-01 00:00:00),Windows、32位系统不支持负时间戳,就会触发范围溢出错误。
解决方案
方案1:使用UTC时区转换(推荐)
如果你要转换的时间本身是UTC时间,改用calendar.timegm()处理,该函数默认按UTC时区计算,不会出现溢出问题:import time import calendar begin = calendar.timegm(time.strptime('1970-01-01 00:00:00', '%Y-%m-%d %H:%M:%S'))方案2:使用带时区的datetime转换(Python3.3+支持)
给datetime对象显式指定UTC时区后调用timestamp()方法:from datetime import datetime, timezone dt = datetime.strptime('1970-01-01 00:00:00', '%Y-%m-%d %H:%M:%S').replace(tzinfo=timezone.utc) begin = dt.timestamp()方案3:异常捕获降级处理
如果需要处理本地时区的时间,无法确定输入范围时,直接捕获溢出异常做降级:import time try: begin = time.mktime(time.strptime('1970-01-01 00:00:00', '%Y-%m-%d %H:%M:%S')) except OverflowError: # 自定义溢出后的处理逻辑,比如设置默认值为0 begin = 0
内容的提问来源于stack exchange,提问作者jiadong
相关产品推荐
相关产品推荐

