为何Python中datetime.fromtimestamp(0)返回1点而非00:00
原因说明
datetime.fromtimestamp() 默认返回的是运行环境本地时区对应的时间,而非UTC标准时间。你得到1970-01-01 01:00:00的结果,说明你当前运行Python的环境时区被设置为UTC+1偏移(东一区,例如中欧冬季时间等):Unix时间戳0对应的UTC基准时间是1970-01-01 00:00:00,叠加+1小时的时区偏移后,本地时间恰好是凌晨1点,和Unix时间的定义没有冲突。
验证方式
你可以运行如下代码查看当前环境的时区偏移配置:
import time # 返回值为UTC时间减去本地时间的秒数差,UTC+1时区非夏令时阶段会返回-3600,即本地时间比UTC早3600秒(1小时) print(time.timezone)
获取UTC基准时间的正确写法
如果需要拿到时间戳0对应的UTC时间,不要使用无参数的默认fromtimestamp()调用,可选择以下两种方式:
- 传入UTC时区参数,返回带时区信息的时间对象:
from datetime import datetime, timezone print(datetime.fromtimestamp(0, tz=timezone.utc)) # 固定输出:1970-01-01 00:00:00+00:00 - 调用专门的UTC时间转换方法,返回无时区信息的朴素时间对象:
from datetime import datetime print(datetime.utcfromtimestamp(0)) # 固定输出:1970-01-01 00:00:00
注意:所有未显式传入时区参数的
fromtimestamp()调用,都会自动读取系统的时区配置做转换,这是方法本身的设计逻辑,既不是Python的bug,也没有违背Unix时间的定义。
内容的提问来源于stack exchange,提问作者Aleksejs Fomins
相关产品推荐
相关产品推荐

