PYTZ“美国/埃德蒙顿偏移错误[复制](PYTZ 'America/Edmonton

2019-09-23 20:34发布

可能重复:
奇怪的时区问题与pytz

这似乎是错误的:

>>> import pytz
>>> z1 = timezone('America/Edmonton')
>>> z2 = timezone('US/Mountain')
>>> z1
<DstTzInfo 'America/Edmonton' LMT-1 day, 16:26:00 STD>
>>> z2
<DstTzInfo 'US/Mountain' MST-1 day, 17:00:00 STD>
>>> pytz.VERSION
'2012f'
>>> 

“美国/埃德蒙顿”和“美国/东方”应该是相同的时区(17:00:00 STD)。 且不说16点26分00秒没有任何意义。

- 更新 -

上述使得乔恩斯基特的答案的情况下感。 然而,事情就变得奇怪当我这样做:

>>> d = datetime.now()
>>> d
datetime.datetime(2012, 10, 9, 15, 21, 41, 644706)

我创建了一个天真的日期。 由于“美国/埃德蒙顿” 我的时区,我试图将其手动设置:

>>> d2 = d.replace(tzinfo=timezone('America/Edmonton'))
>>> d2
datetime.datetime(2012, 10, 9, 15, 21, 41, 644706, tzinfo=<DstTzInfo 'America/Edmonton' LMT-1 day, 16:26:00 STD>)

这应该不会有任何改变,因为这是正确的TZ。 然而:

>>> d2.astimezone(timezone('US/Eastern'))
datetime.datetime(2012, 10, 9, 18, 55, 41, 644706, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)

这应该给我2个小时(“美国/东方”和“美洲/埃德蒙顿”之间的差值)偏移,但它给了我3小时26分(也就是2个小时加上 1小时26分钟:d)

插入timezone('US/Mountain')产生正确的结果在astimezone() 创建具有“美国/埃德蒙顿”的认识还日期时间将正常工作。

Answer 1:

该用于pytz文件明确表示,直接从一个时区创建日期时间将在所有情况下无法正常工作,并指导您这样做,而不是执行以下操作:

d2 = timezone('America/Edmonton').localize(d)


Answer 2:

纵观2012c TZDB数据,这里是为美国/埃德蒙顿设定的规则:

Zone America/Edmonton    -7:33:52 -       LMT   1906 Sep
                         -7:00    Edm     M%sT  1987
                         -7:00    Canada  M%sT

目前尚不清楚对我的Python输出正试图向您展示了偏移/名称是什么日期/时间,但我怀疑它的东西,就像1900 -在这种情况下,16点26分00秒有一定的道理与-7偏移: 33:52,这将匹配的缩写,太。

所以它是时区的数据是罚款完全可行的,它只是选择向您展示一个奇怪的日期/时间作为一个例子。 (这是没有意义,我认为一个时区的字符串输出将显示一个时候都,说实话......)



文章来源: PYTZ 'America/Edmonton' offset wrong [duplicate]