Python pytz: Konvertiere lokale Zeit in utc. Localize scheint nicht zu konvertieren

8

Ich habe eine Datenbank, die datetime als UTC speichert. Ich muss zu einer bestimmten Zeit nach Informationen suchen, aber das Datum und die Uhrzeit werden in einer lokalen Zeit angegeben, sagen wir "Europa / Kopenhagen". Ich gebe diese als:

%Vor%

Also muss ich diese in UTC umwandeln, damit ich sie in der Datenbank nachschlagen kann. Ich möchte dies mit pytz tun. Ich schaue auf localize :

%Vor%

Aber ich bin verwirrt über localize() . Geht das davon aus, dass das Jahr usw. mir in Ortszeit gegeben wird? Oder geht es davon aus, dass sie in UTC angegeben werden und sie jetzt in Ortszeit umgerechnet haben?

print t gibt mir:

%Vor%

So scheint es, dass es angenommen hat, dass das ursprüngliche Jahr usw. in utc war; Stunden sind jetzt 13 + 1 statt 13. Was soll ich stattdessen tun? Ich habe die Pytz-Dokumentation gelesen und das macht es mir nicht klarer. Es wird oft erwähnt, dass die Dinge schwierig sind, also bin ich mir nicht sicher, ob pytz diese Probleme löst. Und ich weiß nicht immer, ob die Beispiele mir Dinge zeigen, die funktionieren oder Dinge, die nicht funktionieren.

Ich habe versucht zu normalisieren:

%Vor%

Das gibt mir das gleiche Ergebnis wie print t.

EDIT: Mit den oben angegebenen Zahlen für das Jahr usw. sollte es mit Informationen in der Datenbank für 2012-12-2 12:01 übereinstimmen. (da Kopenhagen an diesem Tag + 1 ist)

    
user984003 12.11.2012, 14:56
quelle

2 Antworten

16

localize() hängt die Zeitzone an eine naive datetime.datetime -Instanz in der lokalen Zeitzone an.

Wenn Sie datetime-Werte in einer lokalen Zeitzone haben, lokalisieren Sie diese Zeitzone, und verwenden Sie dann .astimezone() , um den Wert in UTC zu konvertieren:

%Vor%

Beachten Sie, dass Sie dies nicht tun müssen, datetime objects mit einer Zeitzone kann verglichen werden; Sie werden beide für den Test auf UTC normalisiert:

%Vor%     
Martijn Pieters 12.11.2012, 15:03
quelle
0

Wenn Sie wissen, dass die eingehende Zeitdarstellung in der Zeitzone Europe/Copenhagen liegt, können Sie sie zunächst als zeitzonensensitiv erstellen:

%Vor%

Sie können dies dann in UTC mit:

"umwandeln" %Vor%

Dies ist jedoch möglicherweise nicht notwendig, abhängig davon, wie gut Ihre Datenbanktreiber sind. t und t_utc repräsentieren denselben Zeitpunkt , und Code mit gutem Verhalten sollte sie synonym behandeln. Das (year, month, day, hour, minute, second, …) Tupel ist lediglich eine für Menschen lesbare Darstellung dieses Zeitpunkts in einer bestimmten Zeitzone und einem bestimmten Kalendersystem.

    
millimoose 12.11.2012 15:09
quelle

Tags und Links