web-dev-qa-db-ja.com

pytzによる日時とタイムゾーンの変換-驚異的な動作

タイムゾーン対応のdatetimeオブジェクトをUTCに変換してから、元のタイムゾーンに戻そうとしています。次のスニペットがあります

t = datetime(
    2013, 11, 22, hour=11, minute=0,
    tzinfo=pytz.timezone('Europe/Warsaw')
)

今ipythonで:

In [18]: t
Out[18]: datetime.datetime(
    2013, 11, 22, 11, 0, tzinfo=<DstTzInfo 'Europe/Warsaw' WMT+1:24:00 STD>
)

次に、UTCへの変換とその逆の変換を試みます。私は同じ表現を期待しています:

In [19]: t.astimezone(pytz.utc).astimezone(pytz.timezone('Europe/Warsaw'))
Out[19]: datetime.datetime(
    2013, 11, 22, 10, 36, tzinfo=<DstTzInfo 'Europe/Warsaw' CET+1:00:00 STD>
)

それでもOut[18]およびOut[19]異なります。どうしたの?

23
yakxxx

ドキュメント http://pytz.sourceforge.net/ には、「残念ながら、標準のdatetimeコンストラクターのtzinfo引数を使用しても、多くのタイムゾーンでpytzが機能しない」と記載されています。コード:

t = datetime(
    2013, 5, 11, hour=11, minute=0,
    tzinfo=pytz.timezone('Europe/Warsaw')
)

これに従って動作しないので、代わりにlocalizeメソッドを使用する必要があります。

t = pytz.timezone('Europe/Warsaw').localize(
        datetime(2013, 5, 11, hour=11, minute=0))
51
James K