So fügen Sie wöchentliche Zeittasks in Bezug auf Sommerzeitzonen hinzu

8

Ich möchte Wochen (oder Tage oder Monate oder Jahre) zu lokalisierten Datetime-Objekten hinzufügen oder abziehen. Das Problem ist, dass der naive Ansatz aufgrund von Sommerzeitzonen zu 1-stündigen Verschiebungen führt.

2014-03-27 12:00 ist kurz vor dem Wechsel von Winter zu Sommerzeit. Wenn ich ein Zeitdelta von einer Woche zu diesem Datum hinzufüge, das zum Beispiel in der Zeitzone Europa / Berlin lokalisiert ist, wird das Ergebnis 2014-04-03 13:00 sein. Ich möchte die gleiche Stunde des Tages, 2014-04-03 12:00 haben. Ich habe eine Lösung gefunden:

%Vor%

Ich habe mich gefragt, ob es eine allgemeinere / bessere Lösung gibt. Gibt es Bibliotheken, die das lösen könnten? Dies scheint ein ziemlich häufiges Problem zu sein.

    
davidn 10.07.2014, 09:46
quelle

1 Antwort

14

timedelta(days=7) bedeutet 7 Tage, wie in 7*24 Stunden - nicht "Sonnentage". Wenn Sie einem zeitzonenbewussten Datetime 7 Tage hinzufügen, erhalten Sie eine Datetime, die 7 Tage später ist - unabhängig davon, wie diese Datetime in der Zeitzone dargestellt ist.

Es scheint, dass Sie das Delta wirklich auf die Zeit anwenden möchten, die Sie angegeben haben, Ignorieren Zeitzonendetails. Beachten Sie den Unterschied:

%Vor%

Wenn möglich, wenden Sie die Deltas auf die Datumsangaben an, bevor sie lokalisiert werden.

    
goncalopp 10.07.2014, 10:45
quelle