6

重複の可能性:
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'
>>> 

「America/Edmonton」と「US/Eastern」は同じタイムゾーン(17:00:00 STD)である必要があります。言うまでもなく、16:26:00は意味がありません。

- アップデート -

上記は、ジョンスキートの答えの文脈で理にかなっています。しかし、私がこれを行うと、物事は奇妙になります:

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

ナイーブな日付を作成しました。'America / Edmonton'私のタイムゾーンなので、手動で設定しようとしています。

>>> 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時間のオフセット(「US/Eastern」と「America/Edmonton」の違い)が得られますが、3時間26分(2時間プラス1時間26分:D)になります。

挿入timezone('US/Mountain')すると、で正しい結果が生成されastimezone()ます。'America/Edmonton'を使用して認識可能な日時を作成することも正しく機能します。

4

2 に答える 2

11

pytzのドキュメントには、タイムゾーンから直接日時を作成することはすべての場合に機能するとは限らず、代わりに次のことを行うように指示されていることが明示されています。

d2 = timezone('America/Edmonton').localize(d)
于 2012-10-09T22:50:51.847 に答える
3

2012c TZDB データを見ると、アメリカ/エドモントンのルール セットは次のようになります。

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

Python 出力がどの日付/時刻のオフセット/名前を表示しようとしているかは明確ではありませんが、1900 のようなものだと思われます。 33:52 であり、略語とも一致します。

そのため、タイム ゾーン データに問題がないことは十分にありえますが、例として奇妙な日付/時刻を表示することを選択しているだけです。(正直なところ、タイムゾーンの文字列出力が時間を表示することはまったく意味がありません...)

于 2012-10-09T21:48:00.653 に答える