(Ich bin neu in Python und Google App Engine, bitte vergib mir, wenn meine Fragen einfach scheinen).Python tzinfo und Tageslicht
Ich habe eine höllische Zeit versucht, mehrere Benutzer Zeitzonen in meiner Google App Engine-Anwendung zu verwalten.
Hier sind meine Einschränkungen:
- Wenn ein Benutzer die Zeit an einem Eingang betritt, wird es Ortszeit (einschließlich DST, wenn angebracht) sein.
- Wenn ein Benutzer die Uhrzeit nicht eingibt, muss das System sie in ihrer Ortszeit eingeben (einschließlich der Sommerzeit, falls zutreffend).
- Wenn das Datum und die Uhrzeit für den Benutzer angezeigt werden, müssen sie in ihrer Ortszeit (einschließlich DST, wenn angebracht) sein
ich, dass die Zeit verstehen intern als UTC mit einem Tzinfo Objekt gespeichert werden und dass Die App Engine speichert die Modelle mit UTC-Zeit.
Ich dachte vorher, ich hätte das alles ausgearbeitet, indem ich den Benutzer gebeten habe, seine Zeitzone in seinen Einstellungen anzugeben. Dann würde ich einfach ihre Voreinstellungen laden und diese TZInfo zu jedem Datetime-Objekt in Bezug auf diesen Benutzer hinzufügen.
Unsere kürzliche Sommerzeit hat es jedoch gebrochen. Es stellt sich heraus, dass ich das dst() in meinen tzinfo-Objekten nicht korrekt implementiert habe. Wie ich es verstehe, muss ich feststellen, ob DST gerade eingeschaltet ist, und wenn ja, dann gebe den korrekten Offset für die TZInfo zurück.
Das Problem ist, ich habe keine Ahnung, wie zu bestimmen, ob die Zeitzone der Zeitzone aktuell ist oder nicht. Fehle ich etwas Offensichtliches?
Momentan verwende ich Dateutil zum Parsen usw.Es gibt zwei Probleme damit, 1) es benötigt eine Datei, die ich brauche, um die Tzinfos zu erstellen und 2) die Bestimmung der Sommerzeit basiert auf der Zeit von Google App Engine, nicht auf der Zeit des Benutzers (unter Verwendung eines Browsers) . – mawcs
Ich dachte, dass die Datei mit dem Paket geliefert wurde ... es schien dort zu sein, als ich gerade die Distribution heruntergeladen habe. –
In der Tat, um aktuelle Zeit zu berechnen, oder um eine Zeit zu konvertieren, benötigt es die Zeit, DST und Zeitzone des Servers/Herkunft TZ, um den Offset gegen das Ziel TZ zu bestimmen ... aber es ist möglich, eine bestimmte Zeit instanziieren (dh: 16.00 Uhr, im Gegensatz zu "jetzt") in einem TZ ohne Bezug auf die Uhr des Servers. –