2011-09-20 37 views
7

więc obecnie mam linię kodu, który wygląda tak:Python DST & Time Strefa wykrywania po dodaniu

 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 

chciałbym do rezultatu, który ma brać pod uwagę wszelkie DST wpływa które mogą wystąpić (takich jak jeśli jestem w dniu 11.4.2012 r. 00:30 i dodaję 3 godziny, dostanę 02:30, ze względu na powrót do DST). Przyjrzałem się używaniu pytz i python-dateutil i żadne z nich nie obsługuje tego, lub przynajmniej nie obsługuje go bez osobnego pliku zawierającego wszystkie strefy czasowe. Kicker jest taki, że czasy niekoniecznie muszą znajdować się w tej samej strefie czasowej co obecny system, a nawet być w przeszłości. Jestem pewien, że jest prosty sposób na zrobienie tego (lub spodziewam się tak z Pythona), ale nic nie wydaje mi się teraz potrzebne. Jakieś pomysły?

Odpowiedz

5

Może pytz „s normalize metody jest to, czego szukasz:

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 pozostaje w BST:

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

Po normalizacji, sumVal jest w GMT:

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

Uwaga, dla Londynu, DST przejście następuje pod adresem 2012-10-28 02:00:00.

Powiązane problemy