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

使用tzlocal查询时区结果异常:为何纽约时区偏移值不符预期?

为什么tzlocal返回的时区偏移是LMT而不是预期的EDT?

嘿,这个问题其实是因为你误解了tzlocal.get_localzone()返回对象的显示逻辑~

核心原因

tzlocal.get_localzone()返回的是一个包含该时区完整历史规则的DstTzInfo对象,而不是当前时间点的即时时区状态。当你直接打印这个对象时,它默认显示的是该时区在数据库中记录的最早偏移值(也就是LMT,本地平均时间),而不是当前生效的夏令时/标准时间偏移。

如何获取当前时间的正确EDT偏移

你需要用这个时区对象去处理一个具体的时间(比如当前时间),才能看到对应时间点的正确时区偏移。试试这段代码:

import tzlocal
from datetime import datetime

# 获取本地时区对象
tz = tzlocal.get_localzone()
# 获取带时区信息的当前时间
current_time = datetime.now(tz)

print("当前带时区的时间:", current_time)
print("当前时区状态及偏移:", current_time.tzinfo)

运行后你应该会看到类似这样的输出:

当前带时区的时间: 2024-05-20 14:30:00-04:00
当前时区状态及偏移: <DstTzInfo 'America/New_York' EDT-1 day, 20:00:00 DST>

这里的EDT-1 day, 20:00:00其实等价于-04:00的偏移(因为24-20=4),pytz用这种方式来表示相对于UTC的偏移(即UTC+20:00等于本地时间前一天的20点,也就是本地时间=UTC-4小时)。

额外说明

DstTzInfo对象存储了该时区所有的夏令时切换规则、历史偏移变更记录。只有当它和具体的时间戳结合时,才会计算出该时间点对应的正确时区偏移和状态(EDT/EST)。直接打印对象本身只是展示了时区的初始元数据,不是当前生效的状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:17:20