Python使用pytz设置不同时区生成Unix时间戳不一致问题求解
问题原因及解决方案
核心原因
你遇到的差值问题是pytz库的特有使用问题:
- pytz的时区对象不能直接传入
datetime构造函数的tzinfo参数使用。pytz存储了对应时区所有历史时期的UTC偏移规则,直接赋值给tzinfo时,不会自动适配你指定日期对应的偏移量,只会调用该时区的基准偏移值(2021年美国东部时区预期偏移为UTC-5,而你代码中实际生效的是早年间的UTC-4:56偏移,刚好差240秒,和你输出的差值完全匹配)。 - 你代码里创建的
start1对象实际上并未对应你预期的UTC 21点,因此时间戳存在差异。
修复方案
使用pytz时区对象的localize()方法,给原生无时区的datetime绑定对应日期的正确偏移:
import pytz from datetime import datetime start = datetime(2021, month=1, day=30, hour=21, minute=0, second=0, tzinfo=pytz.utc) # 先创建无时区的datetime,再用localize绑定时区 naive_eastern = datetime(2021, month=1, day=30, hour=16, minute=0, second=0) start1 = pytz.timezone('US/Eastern').localize(naive_eastern) print(start.timestamp()) print(start1.timestamp())
运行后两个输出均为1612040400.0,符合预期。
补充说明
如果你使用Python 3.9及以上版本,推荐使用标准库自带的zoneinfo替代pytz,zoneinfo的时区对象可以直接传入tzinfo参数使用,不存在上述兼容问题。
内容的提问来源于stack exchange,提问作者kun
相关产品推荐
相关产品推荐

