2010-10-24 8 views
5

Ich habe Probleme, die Umwandlung zwischen der "Etc/GMT-5" Zeitzone und UTC in Pytz zu verstehen.pytz und Etc/GMT-5

>>> 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'>) 

Alles ist so weit in Ordnung, aber dann versuche ich das zu UTC zu konvertieren:

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

mir also, dass es scheint, als von 10:00 GMT-5 in UTC Umwandlung ich 05:00 Uhr? Ich würde erwarten, dass Pytz mir stattdessen 15:00 Uhr geben würde.

Was fehlt mir?

EDIT: Ich habe bestätigt, dass Zeitzone Umwandlung für die US/Eastern Zeitzone funktioniert genauso, wie ich erwarten würde:

>>> 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>) 

EDIT 2: Ich habe bestätigt, dass, wenn ich Etc/GMT +5 Ich bekomme 15:00, was ich von Etc./ GMT-5 erwarte. Ist das ein Pytz-Käfer?

Antwort

10

Dies ist offenbar eine POSIX-Sache. Von Wikipedia:

Um mit dem POSIX-Stil zu entsprechen, müssen diese Zonen beginnend mit „Etc/GMT“ ihr Vorzeichen umgekehrt von dem, was die meisten Leute erwarten. In diesem Stil haben die Zonen westlich von GMT ein positives Vorzeichen und die Ostvorposten ein negatives Vorzeichen.

+0

Sie haben meine eigene Antwort um 23 Sekunden geschlagen! :) –

0

This bug report erklärt dieses Verhalten. Anscheinend wissen sie, dass alles umgekehrt ist, aber das liegt daran, dass alles andere die Kompatibilität zerstören würde.