Python3.7 datetime.timestamp()返回值偏差两分钟问题求解
问题原因说明
核心异常来源
你遇到的时间计算偏差,本质是pytz时区对象的使用方式不符合其设计逻辑导致的。
- pytz的官方设计中,并不推荐、也不支持直接将pytz时区实例作为
tzinfo参数传入datetime()构造函数。直接传入时,pytz无法针对你指定的具体日期匹配对应时间实际生效的UTC偏移,只会返回时区存储的某段历史本地平均时间(LMT)的偏移值,而非2021年3月实际执行的法定时区偏移。 - 这层偏移差最终直接影响了
timestamp()方法的计算结果:你构造的带时区datetime对象,实际用了比2021年3月中欧标准时间(UTC+1)更小的偏移值,换算成UTC时间后就会比你预期的10:30:15多出2分多的差值,刚好对应你看到的10:32:15的计算结果。
正确的pytz使用方式
不要在构造datetime时直接传入pytz的时区对象,应该先生成不带时区信息的原生时间对象,再通过pytz时区自带的localize()方法绑定时区,让pytz自动匹配对应日期的正确UTC偏移:
import datetime import pytz # 先生成不带时区的原生时间 naive_dt = datetime.datetime( year=2021, month=3, day=3, hour=11, minute=30, second=15, microsecond=0 ) # 用localize方法绑定时区,自动匹配对应日期的正确偏移 prg_timezone = pytz.timezone("Europe/Prague") dt = prg_timezone.localize(naive_dt) # 此时调用dt.timestamp()得到的时间戳,换算成UTC就是预期的2021-03-03 10:30:15
内容的提问来源于stack exchange,提问作者RebeeStill
相关产品推荐
相关产品推荐

