我原以为接下来的两个会给出相同的结果,但他们没有。为什么会这样?你知道吗
版本:
pytz==2018.5
python-dateutil==2.7.3
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
(正确)
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
(这是错误的)
你发现了一个bug in ^{} ,我现在已经报告了fixed。你知道吗
这个错误是由于在
dateutil
中如何计算跃迁的“壁时间”的问题引起的,当时区的基偏移量在DST期间发生变化时,这些假设是不成立的。稍微扩展一下你的例子:您可以看到} ,而} 。
dateutil
总是正确地计算日期和时间,但是当isoformat
调用utcoffset
时,偏移量的更改提前1小时发生。这是因为astimezone
在引擎盖下调用^{isoformat
调用^{dateutil
以UTC和本地时间存储转换时间,UTC时间用于fromutc
,本地时间用于utcoffset
、dst
和tzname
。这个bug涉及到在DST->;DST转换(非常罕见)期间计算转换的“墙时间”时对DST的过度补偿,这就是它不影响astimezone
的原因。你知道吗底线-您正确地使用了
pytz
和dateutil
,这个错误将在下一个版本中修复。你知道吗注意:这个答案是在我找到错误的原因和修复之后编辑的。你知道吗
相关问题 更多 >
编程相关推荐