【发布时间】:2023-02-25 02:13:04
【问题描述】:
考虑以下:
from datetime import datetime
import pytz
new_years_in_new_york = datetime(
year=2020,
month=1,
day=1,
hour=0,
minute=0,
tzinfo = pytz.timezone('US/Eastern'))
我现在有一个 datetime 对象,代表纽约的 1 月 1 日午夜。奇怪的是,如果我使用 pytz 将其转换为 UTC,我会得到一个奇怪的日期时间几分钟:
new_years_in_new_york.astimezone(pytz.utc)
# datetime.datetime(2020, 1, 1, 4, 56, tzinfo=<UTC>)
请注意,在纽约的午夜,在 pytz,是4:56在协调世界时。在 Stack Overflow 的其他地方,我了解到这是因为 pytz uses your /usr/share/zoneinfo 数据,它使用当地时间在标准化之前考虑时区。这可以在这里显示:
pytz.timezone('US/Eastern')
# <DstTzInfo 'US/Eastern' LMT-1 day, 19:04:00 STD>
看到那个LMK-1 day, 19:04:00 STD了吗?那是本地平均时间偏移量,不是我想要的偏移量,它是美国/东部时间不是在夏令时期间。
有没有一种方法可以强制 pytz 使用当前基于当前日期的标准偏移量集?在 2020 年新年,它应该只是 UTC-5。如果我提供的日期是在夏令时期间,我会想要 UTC-4。我很困惑为什么 pytz 会对 2020 年的日期使用基于 LMT 的偏移量。
【问题讨论】:
-
这正是你不应该再使用 pytz 的原因。请改用标准库 zoneinfo。
-
@WolfgangKuehn 但
zoneinfo是否反过来制造同样的问题?例如,如果我尝试获取 1850 年某个日期的偏移量,它会提供今天的偏移量吗?我认为pytz的localize做对了。 -
@WolfgangKuehn 请忽略我的问题,我在网上找到了一个 Python 3.9 版本并玩了
zoneinfo。它确实会根据应用日期调整utcoffset。
标签: python datetime timezone pytz