2009-09-14 19 views
18

Estoy leyendo el no tan completo pytz documentation y estoy atrapado en comprender una parte de él.pytz: ¿Por qué se necesita normalizar al convertir zonas horarias?

La conversión entre zonas horarias también necesita una atención especial. Esto también necesita usar el método normalize para asegurar que la conversión sea correcta.

>>> utc_dt = utc.localize(datetime.utcfromtimestamp(1143408899)) 
>>> utc_dt.strftime(fmt) 
'2006-03-26 21:34:59 UTC+0000' 
>>> au_tz = timezone('Australia/Sydney') 
>>> au_dt = au_tz.normalize(utc_dt.astimezone(au_tz)) 
>>> au_dt.strftime(fmt) 
'2006-03-27 08:34:59 EST+1100' 
>>> utc_dt2 = utc.normalize(au_dt.astimezone(utc)) 
>>> utc_dt2.strftime(fmt) 
'2006-03-26 21:34:59 UTC+0000' 

yo probamos este mismo ejemplo y sin usando normalize y resultó exactamente igual. En mi opinión, este ejemplo realmente no explica por qué tenemos que usar normalize al convertir entre datetime objetos en diferentes zonas horarias.

¿Alguien por favor, dame un ejemplo (como la anterior), donde el resultado es diferente cuando no se utiliza normalize.

Gracias

+0

see [¿Sigue siendo necesario normalizar al convertir a zonas horarias locales?] (Https://answers.launchpad.net/pytz/+question/249229) – jfs

Respuesta

8

De la documentación pytz:

Además, si se realiza la aritmética de fechas en tiempos locales que cruzan las fronteras DST, los resultados pueden estar en una zona horaria incorrecta (es decir, restar 1 minuto. desde 2002-10-27 1:00 EST y se obtiene 2002-10-27 0:59 EST en lugar de la correcta 2002-10-27 1:59 EDT). Se proporciona un método normalize() para corregir esto. Lamentablemente, estos problemas no se pueden resolver sin modificar la implementación de Python datetime.

+2

esta cita no explica por qué necesitaría 'tz.normalizar() 'después de' .astimezone (tz) 'llamada – jfs

+4

[se confirma] (https://answers.launchpad.net/pytz/+question/249229): *" Al convertir entre zonas horarias, '.astimezone()' debería ser todo lo que se necesita. "* es decir, no necesita' tz.normalize() 'después de' .astimezone (tz) '. – jfs

6

Los documentos dicen que normalizan se utiliza como una alternativa para problemas de horario de verano:

Además, si se realiza la aritmética de fechas en tiempos locales que cruzan las fronteras DST, los resultados pueden estar en una zona horaria incorrecta (es decir, reste 1 minuto de 2002-10-27 1:00 EST y obtiene 2002-10-27 0:59 EST en lugar del correcto 2002-10-27 1:59 EDT). Se proporciona un método normalize() para corregir esto.

Se usa para corregir algunos casos de bordes que involucran DST. Si no está utilizando zonas horarias DST (por ejemplo, UTC), entonces no es necesario utilizar normalizar.

Si no lo usa, su conversión podría ser de una hora de baja bajo ciertas circunstancias.

+0

Sí, de hecho es un problema relacionado con el horario de verano. –

Cuestiones relacionadas