2014-05-23 10 views
5

Ich arbeite mit einem Datensatz mit Zeitstempeln aus zwei verschiedenen Zeitzonen. Unten ist, was ich versuche zu tun:Berechne Zeit in einer anderen Zeitzone in Python

1.Create ein Zeitobjekt t1 aus einer Zeichenfolge;

2.Stellen Sie die Zeitzone für t1 ein;

3. Geben Sie die Zeit t2 in einer anderen Zeitzone ein.

import time 
s = "2014-05-22 17:16:15" 
t1 = time.strptime(s, "%Y-%m-%d %H:%M:%S") 
#Set timezone for t1 as US/Pacific 
#Based on t1, calculate the time t2 in a different time zone 
#(e.g, Central European Time(CET)) 

Alle Antworten/Kommentare werden geschätzt ..!

Antwort

3

Verwenden datetime und pytz

import datetime 
import pytz 
pac=pytz.timezone('US/Pacific') 
cet=pytz.timezone('CET') 
s = "2014-05-22 17:16:15" 
t1 = datetime.datetime.strptime(s, "%Y-%m-%d %H:%M:%S") 
pacific = pac.localize(t1) 
cet_eur = pacific.astimezone(cet) 
print pacific 
print cet_eur 

2014-05-22 17:16:15-07:00 
2014-05-23 02:16:15+02:00 

Ich glaube, Sie datetime.timetuple wollen

Return ein time.struct_time wie durch time.localtime() zurückgegeben wird. Die Stunden, Minuten und Sekunden sind 0 und das DST-Flag ist -1. d.timetuple() ist gleichbedeutend mit time.struct_time ((d.Jahr, d.Monat, d.Tag, 0, 0, 0, d.Wochentag(), yday, -1)), wobei Yday = d.toordinal() - date (d.Jahr, 1, 1) .toordinal() + 1 ist die Tagesnummer des laufenden Jahres, beginnend mit 1 für den 1. Januar.

print datetime.date.timetuple(t1) 
    time.struct_time(tm_year=2014, tm_mon=5, tm_mday=22, tm_hour=17, tm_min=16, tm_sec=15, tm_wday=3, tm_yday=142, tm_isdst=-1) 

, die einen schnellen Entwurf ist aber die pytz docs haben viele gute und klare Beispiele

+0

Danke, Padraic! Das funktioniert perfekt. Gibt es eine schnelle Möglichkeit, das datetime.datetime-Objekt in ein time.struct_time-Objekt zu konvertieren? Ich habe viele Beispiele gesehen, um anders herum zu machen. – jinlong

+0

@jinlong keine Sorge, ich habe meine Antwort bearbeitet. –

+0

Hallo Padraic, nochmals vielen Dank! Das datetime.date.timetuple() funktioniert, außer dass es die Zeitinformation (d. H. H: M: S) verwirft, also schlage ich vor, die Antwort zu datetime.datetime.timetuple() zu ändern. – jinlong

Verwandte Themen