为何Win10下Python3.7+执行datetime.fromtimestamp(0).timestamp()抛异常?
Windows下Python datetime.fromtimestamp(0).timestamp()报错原因解析
这不是Bug,是Windows系统与Python时间处理逻辑的差异导致的,具体原因如下:
- 时间戳0对应的是UTC时间1970-01-01 00:00:00,
datetime.fromtimestamp(0)会将该UTC时间转换为本地时区的datetime对象。比如系统时区是UTC-5(美国东部时间),转换后得到1969-12-31 19:00:00;如果是UTC+8(北京时间),得到1970-01-01 08:00:00。 - 调用
timestamp()方法时,需要将本地datetime对象转回UTC时间戳。但Windows底层系统API不支持处理1970年1月1日之前的本地时间转换,若所在时区的本地时间早于1970-01-01(比如西时区),就会触发OSError: [Errno 22] Invalid argument异常。
如果要实现「时间戳0转datetime再转回时间戳得到0.0」的预期效果,应该用UTC时间处理:
import datetime datetime.datetime.utcfromtimestamp(0).timestamp() # 返回0.0
内容的提问来源于stack exchange,提问作者user862989
相关产品推荐
相关产品推荐

