重複の可能性:
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'を使用して認識可能な日時を作成することも正しく機能します。