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

Python如何创建指定时区的datetime?为何偏移为-04:56而非-04:00?

问题:纽约时区datetime实例偏移为何是-04:56而非预期的-04:00?

你的代码及输出

代码:

import pytz
from datetime import datetime as dt
targettz = pytz.timezone('America/New_York')
d1 = dt(2024, 1, 1, 7, 40, 0, tzinfo=targettz)
d1.isoformat()

输出:

'2024-01-01T07:40:00-04:56'

原因解析

直接把pytz的时区对象传给datetime的tzinfo参数是错误用法。pytz的时区对象包含该地区历史时区偏移数据(比如纽约早年使用的西经74度本地平太阳时,偏移正好是-04:56),而标准库datetime构造器不会根据传入的日期自动匹配正确的时区规则,只会读取时区对象的默认基础偏移值,这就导致了不符合预期的结果。

另外需要纠正一个误区:2024年1月1日纽约处于冬令时(EST),正确偏移应该是-05:00;-04:00是夏令时(EDT)的偏移,通常在每年3月到11月生效。

正确实现方式

方式1:使用pytz的localize方法

pytz专门提供了localize方法来为datetime对象绑定正确的时区规则:

import pytz
from datetime import datetime as dt

targettz = pytz.timezone('America/New_York')
d1 = targettz.localize(dt(2024, 1, 1, 7, 40, 0))
print(d1.isoformat())  # 输出:'2024-01-01T07:40:00-05:00'

方式2:使用Python3.9+标准库zoneinfo(推荐)

Python3.9及以上版本引入了标准库zoneinfo,无需依赖第三方库,用法更直观且避免pytz的这类问题:

from zoneinfo import ZoneInfo
from datetime import datetime as dt

d1 = dt(2024, 1, 1, 7, 40, 0, tzinfo=ZoneInfo('America/New_York'))
print(d1.isoformat())  # 输出:'2024-01-01T07:40:00-05:00'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:57:05