Python中strftime、gmtime转换时间戳结果错误,datetime模块报年份超出范围的问题
Python中strftime、gmtime转换时间戳结果错误,datetime模块报年份超出范围的问题
嗨,我一眼就瞅出问题所在啦!你用的这个时间戳是毫秒级的,但Python里time和datetime模块的默认方法都是处理秒级时间戳的,这就是为啥会得到离谱的5万多年份,甚至直接报错年份超出范围~
问题根源
你的时间戳1569332262000后面多了三个0,是毫秒数。而time.gmtime()、datetime.fromtimestamp()这些函数,默认要求传入的是以秒为单位的时间戳。直接传毫秒的话,相当于把时间往后推了1000倍,年份自然就跑到5万多年后,超出Python日期模块的处理范围,报错也就在情理之中了。
修复方法很简单,把时间戳转成秒级就行:
1. 用time模块的修复代码
import time epoch_time = 1569332262000 # 把毫秒转成秒,转成浮点数或整数都可以 epoch_seconds = epoch_time / 1000 print(time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(epoch_seconds)))
运行后就能得到和你截图里一致的正确结果:2019-09-24 10:17:42
2. 用datetime模块的修复代码
from datetime import datetime epoch_time = 1569332262000 epoch_seconds = epoch_time / 1000 # 如果你要本地时间,用这个 local_value = datetime.fromtimestamp(epoch_seconds) print(f"本地时间:{local_value:%Y-%m-%d %H:%M:%S}") # 如果要和截图一致的UTC时间,用这个 utc_value = datetime.utcfromtimestamp(epoch_seconds) print(f"UTC时间:{utc_value:%Y-%m-%d %H:%M:%S}")
这样就不会再报ValueError: year 51700 is out of range的错误了,结果完全符合预期。
小提示
现在很多前端工具、API返回的时间戳都是毫秒级的,以后遇到时间转换异常,先检查下时间戳的单位是秒还是毫秒,差三个0结果可是天差地别哦😉
备注:内容来源于stack exchange,提问作者Zeeshan Anjum
相关产品推荐
相关产品推荐

