2010-10-24 10 views
5

Tengo problemas para entender la conversión entre la zona horaria "Etc/GMT-5" y UTC en pytz.pytz y 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'>) 

Todo está bien hasta ahora, pero entonces trato de convertir eso a UTC:

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

Así que me parece que cuando la conversión de 10:00 GMT-5 a UTC consigo 05:00? Esperaría que Pytz me diera las 15:00 en su lugar.

¿Qué me estoy perdiendo?

EDIT: He confirmado que la conversión de zona horaria de la zona horaria de Estados Unidos/Oriente trabaja del mismo modo que cabe esperar:

>>> 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: He confirmado que cuando uso Etc/GMT +5 Tengo 15:00, que es lo que esperaría obtener de Etc/GMT-5. ¿Es esto un error de pytz?

Respuesta

10

Aparentemente es algo de POSIX. De Wikipedia:

Para ajustarse al estilo POSIX, aquellas zonas que comienzan con "Etc/GMT" tienen su signo invertido de lo que la mayoría de la gente espera. En este estilo, las zonas al oeste de GMT tienen un signo positivo y las del este tienen un signo negativo.

+0

¡Has vencido a mi propia respuesta en 23 segundos! :) –

0

This bug report explica este comportamiento. Aparentemente saben que todo está invertido, pero eso se debe a que cualquier otra cosa podría romper la compatibilidad.

Cuestiones relacionadas