2011-09-20 7 views
7

Así que actualmente tienen una línea de código que se parece a esto:DST Pitón y hora Detección Zona después de la adición

 t1 = datetime(self.year, self.month, self.day, self.hour, self.minute, self.second) 
     ... 
     t2 = timedelta(days=dayNum, hours=time2.hour, minutes=time2.minute, seconds=time2.second) 
     sumVal = t1 + t2 

Me gustaría que el resultado de tomar en cuenta cualquier DST afecta que pueda ocurrir (como si estoy en 11/4/2012 00:30 AM y agrego 3 horas, obtendría 02:30 AM, debido a una caída para el horario de verano). He analizado el uso de pytz y python-dateutil, y ninguno de ellos parece ser compatible con esto, o al menos no lo admite sin un archivo separado que contiene todas las zonas horarias. El truco es que los tiempos pueden no estar necesariamente en el mismo huso horario que el sistema actual, o incluso estar en el pasado. Estoy seguro de que hay una manera simple de hacer esto (o esperaría que fuera de Python), pero nada parece ser lo que necesito en este momento. ¿Algunas ideas?

Respuesta

5

Quizás pytz 's método normalize es lo que busca:

import datetime as dt 
import pytz 

tz=pytz.timezone('Europe/London') 
t1 = dt.datetime(2012,10,28,0,30,0) 
t1=tz.localize(t1) 
t2 = dt.timedelta(hours=3) 
sumVal = t1 + t2 

sumVal permanece en BST:

print(repr(sumVal)) 
# datetime.datetime(2012, 10, 28, 3, 30, tzinfo=<DstTzInfo 'Europe/London' BST+1:00:00 DST>) 

Después de la normalización, sumVal está en GMT:

sumVal = tz.normalize(sumVal) 
print(repr(sumVal)) 
# datetime.datetime(2012, 10, 28, 2, 30, tzinfo=<DstTzInfo 'Europe/London' GMT0:00:00 STD>) 

Nota, para Londres, el horario de verano la transición ocurre en 2012-10-28 02:00:00.

Cuestiones relacionadas