Pregunta

Estoy leyendo la documentación de pytz no tan completa y estoy atascado en comprender una parte de ella. .

  

La conversión entre zonas horarias también necesita atención especial. Esto también debe usar el método de normalización para garantizar 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'

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

¿Podría alguien darme un ejemplo (como el de arriba) donde el resultado difiere cuando no se usa normalize .

Gracias

¿Fue útil?

Solución

De la documentación de pytz:

  

Además, si realiza la aritmética de fechas en horas locales que cruzan los límites del horario de verano, los resultados pueden estar en una zona horaria incorrecta (es decir, restar 1 minuto de 2002-10-27 1:00 EST y obtendrá 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. Lamentablemente, estos problemas no se pueden resolver sin modificar la implementación de fecha y hora de Python.

Otros consejos

Los documentos dicen que normalizar se usa como una solución para los problemas de horario de verano:

  

Además, si realiza la aritmética de fechas en horas locales que cruzan los límites del horario de verano, los resultados pueden estar en una zona horaria incorrecta (es decir, restar 1 minuto de 2002-10-27 1:00 EST y obtendrá 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.

Por lo tanto, se utiliza para corregir algunos casos extremos que involucran DST. Si no está usando zonas horarias DST (por ejemplo, UTC), entonces no es necesario usar normalizar.

Si no lo usa, su conversión podría potencialmente estar fuera de una hora bajo ciertas circunstancias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top