【发布时间】:2019-02-07 18:10:06
【问题描述】:
我原以为以下两个会给出相同的结果,但事实并非如此。为什么会这样?
版本:
pytz==2018.5
python-dateutil==2.7.3
示例 1:pytz
import datetime
import pytz
tz = pytz.timezone('Pacific/Apia')
today_utc = datetime.datetime(2011, 12, 30, 9, 59,
tzinfo=datetime.timezone.utc)
today_tz = today_utc.astimezone(tz)
print(today_tz.isoformat())
打印2011-12-29T23:59:00-10:00(正确)
示例 2:dateutil
import datetime
import dateutil.tz
tz = dateutil.tz.gettz('Pacific/Apia')
today_utc = datetime.datetime(2011, 12, 30, 9, 59,
tzinfo=datetime.timezone.utc)
today_tz = today_utc.astimezone(tz)
print(today_tz.isoformat())
打印2011-12-29T23:59:00+14:00(这是错误的)
【问题讨论】:
-
为什么说-10是对的,+14是不对的? This page 说 Pacific/Apia 通常是 UTC+13,而 DST 是 UTC+14。
-
因为 2011-12-29 是-10。他们改变了时区。见timeanddate.de/stadt/zeitzone/samoa/apia
-
lol 没想到...所以,您期望 dateutil 应该能够根据日期更改时区。也许它根本不这样做。
-
@zvone 所有偏移量取决于日期
-
@zvone 好吧,可能是这样。但我想从某人那里听到/在这里获得参考。目前,我假设我只是以错误的方式使用 dateutil 。如果它不能处理同一时区内的偏移量变化(我之前措辞很糟糕),那就太糟糕了。它经常发生。
标签: python datetime pytz python-dateutil