Frage

(I bin neu in Python und Google App Engine, bitte verzeihen Sie mir, wenn meine Fragen grundlegende scheinen).

Ich habe eine verdammt gute Zeit versucht, mehrere Benutzerzeitzonen in meiner Google App Engine-Anwendung zu verwalten.

Hier sind meine Einschränkungen:

  1. Wenn ein Benutzer die Zeit an einem Eingang betritt, wird es Ortszeit (einschließlich DST, wenn angebracht) sein.
  2. Wenn ein Benutzer nicht die Zeit eingeben, muss das System sie in ihrer lokalen Zeit für sie eingeben (einschließlich DST, wenn zutreffend).
  3. Wenn das Datum und die Uhrzeit für den Benutzer angezeigt werden, müssen sie in ihrer Ortszeit (einschließlich DST, wenn zutreffend)
  4. sein

Ich verstehe, dass die Zeit wird intern als UTC mit einem Tzinfo Objekt gespeichert werden und dass die App Engine werden die Modelle mit UTC-Zeit speichern.

Ich dachte vorher hatte ich das alles, indem er den Benutzer ausgearbeitet, um ihre Zeitzone in ihren Präferenzen angegeben. Dann würde ich einfach ihre Vorlieben laden und diese Tzinfo auf alle Datetime-Objekte in Bezug in den betreffenden Benutzer.

Aber unsere letzte Sommerzeit brach es. Es stellt sich heraus, dass ich nicht richtig dst () in meinem Tzinfo Objekt implementiert hatte. Wie ich es verstehe, muss ich feststellen, ob DST aktuell ist, und wenn ja, geben Sie die richtige für den Tzinfo versetzt.

Das Problem ist, habe ich keine Ahnung, wie zu bestimmen, ob die Sommerzeit der Zeitzone aktuell ist oder nicht. Bin ich etwas fehlt offensichtlich?

War es hilfreich?

Lösung

Wenn Sie können, ich würde empfehlen, einen Blick auf das python-dateutil Paket mit, die tz hat Objekte für alle Zeitzonen-pre gebaut, darunter DST-Offset-Informationen. Ich glaube nicht, dass es eine Möglichkeit, „nur wissen“, wenn DST eingeschaltet ist oder nicht, ohne Daten zur Unterstützung ... es Datum für die meisten Zeitzonen gefahren ist (oder zumindest die Zeitzonen DST unterstützen), und die Daten ändern sich je nach lokalen Brauch, Politik und alle möglichen Dinge.

http://labix.org/python-dateutil

Andere Tipps

Ich sehe einige Probleme hier.

Wenn der Benutzer die Zeit eintritt, tritt sie es in der lokalen Zeitzone, aber woher wissen Sie, welche ist es? Europa / Vilnius oder Europa / Madrid? Oder vielleicht Australien / Melbourne? Wenn Sie nicht die Zeitzone wissen, das Datum / Zeit wird „naiv“.

Die einzige Zeitzone-Datenbank, die in Betracht gezogen wird geeignete und präzise (den Zustand des ständigen Wandels unter Berücksichtigung) ist Olson Zeitzone db, für Python als pytz Paket. Es ermöglicht eine einfache Daten / Zeiten zwischen Zeitzonen konvertieren: zuerst vom Benutzer Datum / Uhrzeit und Zeitzone Sie nehmen, Datum / Uhrzeit in Benutzers Zeitzone lokalisieren dann nehmen Sie es als utc, bereit, Ihre Datenbank zu speichern. Display ist umgekehrt:. Erhält Datum / Zeit aus der Datenbank lokalisieren in utc, dann als Benutzer Zeitzone anzeigen

Und das letzte, was: es gibt nicht so etwas wie automatische DST Transformation . Im Fall mehrdeutiger Daten / Zeiten müssen Sie im Voraus wissen, in welcher Zeitzone der Zeit eingegeben wird. Das ist unsere menschliche Wirklichkeit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top