2011-09-29 23 views
11

Estoy buscando un método para determinar cuándo comienza o finaliza el horario de verano para una zona horaria dada en un script de Python en el que estoy trabajando.¿Cómo determinar cuándo comienza o finaliza el horario de verano en una ubicación específica en Python?

Sé que pytz puedo convertir las fechas UTC en las que estoy trabajando en localtime, y tomaré DST en cuenta, sin embargo, para esta aplicación en particular, necesito saber el punto del cambio.

¿Alguna sugerencia?

+2

A qué año ? Los puntos de cambio de DST han cambiado en la historia en algunas zonas horarias. – eumiro

+0

Bueno, idealmente me gustaría poder hacerlo por un año arbitrario. Sé que este tipo de información está disponible en la base de datos de Olsen, pero acceder a ella es otro asunto. – Smingos

Respuesta

14

Puede echar un vistazo al miembro _utc_transition_times de la zona horaria que está utilizando.

>>> from pytz import timezone 
>>> tz = timezone("Europe/Paris") 
>>> print tz._utc_transition_times 

[datetime.datetime(1, 1, 1, 0, 0), datetime.datetime(1911, 3, 10, 23, 51, 39), datetime.datetime(1916, 6, 14, 23, 0), datetime.datetime(1916, 10, 1, 23, 0), date 
.... 
datetime.datetime(2037, 3, 29, 1, 0), datetime.datetime(2037, 10, 25, 1, 0)] 

Le dará la lista de las fechas de cambio del horario de verano (inicio y fin del horario de verano).

De acuerdo con el código de tzinfo.py

class DstTzInfo(BaseTzInfo): 
    '''A timezone that has a variable offset from UTC 

    The offset might change if daylight savings time comes into effect, 
    or at a point in history when the region decides to change their 
    timezone definition. 
    ''' 
    # Overridden in subclass 
    _utc_transition_times = None # Sorted list of DST transition times in UTC 
    _transition_info = None # [(utcoffset, dstoffset, tzname)] corresponding 
          # to _utc_transition_times entries 

Así que si se mezcla el _utc_transition_times con _transition_info va a agarrar todas sus informaciones necesarias, fecha, hora y el desplazamiento de aplicar;)

+0

Esto se ve muy bien. No sabía acerca de ese atributo. – eumiro

+0

Lo probaré tan pronto como esté en casa, gracias. ¿Estas fechas marcan el inicio o el final del horario de verano? – Smingos

+0

Para Europa/París, el comienzo del horario de verano es principalmente en marzo, y finaliza en septiembre/octubre. Pero dado que estas fechas son __changes__, puede contar con la posición impar/par en esta lista. – eumiro

Cuestiones relacionadas