in

python: ¿hay una lista de zonas horarias de Pytz?

apple touch icon@2

EDITAR: Le agradecería que no votara más esta respuesta. Esta respuesta es incorrecto, pero prefiero retenerlo como nota histórica. Si bien es discutible si la interfaz de pytz es propensa a errores, puede hacer cosas que dateutil.tz no puede hacer, especialmente con respecto al horario de verano en el pasado o en el futuro. Honestamente he registrado mi experiencia en un artículo. «Zonas horarias en Python».


Si está en una plataforma similar a Unix, le sugiero que evite pytz y mire solo en / usr / share / zoneinfo. dateutil.tz puede utilizar la información allí.

El siguiente fragmento de código muestra el problema que pytz puede dar. Me sorprendió cuando lo descubrí por primera vez. (Curiosamente, el pytz instalado por yum en CentOS 7 no presenta este problema).

import pytz
import dateutil.tz
from datetime import datetime
print((datetime(2017,2,13,14,29,29, tzinfo=pytz.timezone('Asia/Shanghai'))
     - datetime(2017,2,13,14,29,29, tzinfo=pytz.timezone('UTC')))
     .total_seconds())
print((datetime(2017,2,13,14,29,29, tzinfo=dateutil.tz.gettz('Asia/Shanghai'))
     - datetime(2017,2,13,14,29,29, tzinfo=dateutil.tz.tzutc()))
     .total_seconds())

-29160.0
-28800.0

Es decir, la zona horaria creada por pytz es para la verdadera hora local, en lugar de la hora local estándar que la gente observa. Shanghai cumple con +0800, no +0806 como sugiere pytz:

pytz.timezone('Asia/Shanghai')
<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>

EDITAR: Gracias al comentario y voto negativo de Mark Ransom, ahora sé que estoy usando pytz de manera incorrecta. En resumen, no se supone que debe pasar el resultado de pytz.timezone(…) para datetime, pero debe pasar el datetime a su localize método.

A pesar de su argumento (y mi mal por no leer la documentación de pytz con más atención), me quedaré con esta respuesta. Estaba respondiendo a la pregunta de una manera (cómo enumerar las zonas horarias admitidas, aunque no con pytz), porque creía que pytz no proporcionaba una solución correcta. Aunque mi creencia era incorrecta, esta respuesta todavía proporciona cierta información, en mi humilde opinión, que es potencialmente útil para las personas interesadas en esta pregunta. De Pytz correcto La forma de hacer las cosas es contraintuitiva. Diablos, si el tzinfo creado por pytz no debe ser utilizado directamente por datetime, debería ser de un tipo diferente. La interfaz de Pytz está simplemente mal diseñada. El enlace proporcionado por Mark muestra que muchas personas, no solo yo, han sido engañadas por la interfaz de pytz.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

curriculum vitae

Comunicación de empleo

K688JGbvPfZYwZoEvvumwQ 1200 80

Caballo fantasma de Tsushima: ¿Qué semental deberías elegir al comienzo del juego?