2011-09-20 5 views
7

J'ai donc actuellement une ligne de code qui ressemble à ceci:Python DST et le fuseau horaire de détection après addition

 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 

Je voudrais que le résultat à prendre en compte toute DST affecte qui pourrait se produire (par exemple si je suis au 11/4/2012 00:30 AM et ajoute 3 heures, j'obtiendrais 02:30, en raison d'une retombée pour DST). J'ai regardé en utilisant pytz et python-dateutil, et aucun d'entre eux ne semble soutenir ceci, ou au moins ne pas le supporter sans un fichier séparé qui contient tous les fuseaux horaires. Le kicker est que les temps ne sont pas nécessairement dans le même fuseau horaire que le système actuel, ou même dans le passé. Je suis sûr qu'il y a un moyen simple de le faire (ou je m'attendrais à ça en Python), mais rien ne semble être ce dont j'ai besoin en ce moment. Des idées?

Répondre

5

Peut-être pytz méthode de normalize est ce que vous cherchez:

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 reste en BST:

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

Après la normalisation, sumVal est GMT:

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

Note, pour Londres, le DST la transition se produit à 2012-10-28 02:00:00.

Questions connexes