You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python datetime指定pytz tzinfo时US/Eastern时区偏移异常

异常根因

这是pytz库的经典误用问题,和运行设备无关:
pytz的时区对象存储了对应地区全历史周期的所有UTC偏移记录,不能直接作为tzinfo参数传入datetime构造函数。直接传参时,pytz不会根据传入的日期时间自动匹配对应时段的偏移规则,只会默认加载该时区最早的历史偏移值——US/Eastern对应的最早偏移是1883年美国标准化时区之前的纽约本地平太阳时偏移,数值恰好为-4小时56分,这就是输出异常偏移的核心原因。

正确编码方式
  • 若继续使用pytz库,需先生成无时区信息的naive时间对象,再通过pytz时区实例的localize()方法绑定时区,该方法会自动根据时间点匹配对应的冬/夏令时偏移:
import pytz
from datetime import datetime

tz = pytz.timezone("US/Eastern")
# 先构造不带时区的原生时间
naive_dt = datetime(2021, 5, 5, 9, 30, 0)
# 通过localize绑定时区,自动匹配正确偏移
dt = tz.localize(naive_dt)
print(dt)
# 输出结果:2021-05-05 09:30:00-04:00

注意:如果需要做跨时区转换,不要直接修改datetime的tzinfo属性,统一使用astimezone()方法完成转换,避免偏移计算错误。

  • 如果使用Python 3.9及以上版本,可直接使用标准库内置的zoneinfo模块替代pytz,该模块不存在上述误用问题,支持直接将时区对象传入tzinfo参数构造时间:
from datetime import datetime
from zoneinfo import ZoneInfo

dt = datetime(2021, 5, 5, 9, 30, 0, tzinfo=ZoneInfo("US/Eastern"))
print(dt)
# 输出结果:2021-05-05 09:30:00-04:00

内容的提问来源于stack exchange,提问作者Serge Neff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:21:25