10

「Etc/GMT-5」タイムゾーンとUTC(pytz)の間の変換を理解するのに問題があります。

>>> dt = datetime(2009, 9, 9, 10, 0) # September 9 2009, 10:00
>>> gmt_5 = pytz.timezone("Etc/GMT-5")
>>> gmt_5.localize(dt)
datetime.datetime(2009, 9, 9, 10, 0, tzinfo=<StaticTzInfo 'Etc/GMT-5'>)

これまでのところすべて問題ありませんが、それをUTCに変換しようとしています。

>>> gmt_5.localize(dt).astimezone(pytz.utc)
datetime.datetime(2009, 9, 9, 5, 0, tzinfo=<UTC>)

だから私には、GMT-5の10:00からUTCに変換すると05:00になるように見えますか?代わりに、pytzが15:00をくれると思います。

私は何が欠けていますか?

編集:米国/東部のタイムゾーンのタイムゾーン変換が期待どおりに機能することを確認しました:

>>> eastern = pytz.timezone("US/Eastern")
>>> eastern.localize(dt)
datetime.datetime(2009, 9, 9, 10, 0, tzinfo=...) # Too long
>>> pytz.utc.normalize(eastern.localize(dt).astimezone(pytz.utc))
datetime.datetime(2009, 9, 9, 14, 0, tzinfo=<UTC>)

編集2: Etc / GMT + 5を使用すると、15:00を取得することを確認しました。これは、Etc/GMT-5から取得することを期待しています。これはpytzのバグですか?

4

2 に答える 2

16

これは明らかにPOSIXのことです。ウィキペディアから:

POSIXスタイルに準拠するために、「Etc / GMT」で始まるゾーンでは、ほとんどの人が期待するものとは符号が逆になっています。このスタイルでは、GMTの西のゾーンには正の符号があり、東のゾーンには負の符号があります。

于 2010-10-24T16:27:30.073 に答える
0

このバグレポートでは、この動作について説明しています。どうやら彼らはそれがすべて反転していることを知っていますが、それは他のものが互換性を壊すからです。

于 2010-10-24T16:27:53.153 に答える