2009-05-04 2 views
3

Derzeit besteht meine Methode darin, einen Kontextprozessor zu erstellen, der dann standortweit eingefügt wird. Wie auch immer, ich habe bemerkt, dass ich Probleme habe, die Änderungen der Sommerzeit berücksichtigen. Ich lebe außerhalb der USA BTW und mein Server ist in den USA, aber seine Zeitzone ist auf meine festgelegt. Da wir jedoch die Sommerzeit nicht berücksichtigen, ist es immer eine Stunde vor meiner lokalen Zeit.Was ist der beste Weg, genaue aktuelle Uhrzeit und Datum in Django anzuzeigen?

Irgendeine Idee, wie man das erklären kann? Ich habe in der Vergangenheit timedelta -1 verwendet, aber irgendwie fühle ich nicht das ist die richtige Lösung.

Antwort

5

Die Zeitzone, die Sie auf dem Server festgelegt haben, sollte in Ihrer Django App keine Rolle spielen. Django gibt die Zeit zurück, die auf der Einstellung Ihrer TIME_ZONE-Variable in Ihrer settings.py-Datei basiert, und nicht darauf, was Sie auf dem Server festgelegt haben. Ein Server kann beispielsweise mehrere Django-betriebene Websites mit jeweils separaten Zeitzoneneinstellungen bedienen.

Siehe: http://docs.djangoproject.com/en/dev/ref/settings/#time-zone.

Stellen Sie sicher, dass Sie Ihre TIME_ZONE-Variable auf den Namen Zoneinfo (dh Amerika/Belize) statt nur GMT-6 setzen, da dies nicht für die Sommerzeit berücksichtigt wird. Mit dem Namen Zoneinfo gibt Django die Sommerzeit-bewusste Version der Zeit zurück. Richten Sie das also richtig ein, und Sie sollten in der Lage sein, die gewünschte Zeitzone in Ihrer Django-App zu finden.

{% now h:ia %} 

Das wird die Zeit in einem Format wie 9:30 Uhr zurückgeben.

+2

In diesem Fall sollte seine Zeitzone wahrscheinlich Amerika/Belize sein – Powerlord

+0

Ah, richtig. Ich werde es ändern :) –

+0

perfekt! hat wunderbar funktioniert, und ich denke, das ist so, wie es sein sollte ... ist das nicht django süß? – Rasiel

1

Wenn der Server auf Ihre Zeitzone eingestellt ist und Sie wollen Zeit in Ihrer Zeitzone angezeigt werden, sollten Sie nur in der Lage sein, etwas zu verwenden wie:

{% now M d, Y h-ia %} 

so etwas wie zu geben: 23. Januar 2009 9: 21 Uhr

Siehe http://docs.djangoproject.com/en/dev/ref/templates/builtins/

+0

danken Ihnen dies half auch einstellen, wie ich aus irgendeinem Grund nicht bemerkt hatte, die jetzt Template Filter – Rasiel

0

Es klingt wie, während die Zeit zu Zeit festgelegt wird, ist die Zeitzone nicht.

Wenn dies ein Linux-Server, wird die Zeitzone von der Datei gesteuert /etc/localtime

Dies ist eigentlich ein symbolischer Link auf einer der Zeitzone Dateien in /usr/share/zoneinfo. Der Standardwert ist wahrscheinlich so etwas wie /usr/share/zoneinfo/America/New_York, aber Sie können es, indem Sie die zu /usr/share/zoneinfo/America/Belize * ändern folgend:

ln -sf /usr/share/zoneinfo/America/Belize /etc/localtime 

Die Lage etwas anders sein wird, wenn Sie ein anderes * nichts OS verwenden. Beispiel: Solaris verfügt über Zeitzonendateien in /usr/share/lib/zoneinfo

Dies setzt voraus, dass Sie Root-Zugriff auf den Computer haben, da Sie Zugriff auf die Systemuhr haben.

* Ihr Standort ist in Ihrem Profil als Belize aufgeführt, falls Sie sich gefragt haben, wo ich das gefunden habe.

+0

Wie oben erwähnt, verwendet Django nicht die Serverzeit, aber danke trotzdem – Rasiel

+1

Ich hatte diese Antwort nach dem Aufheben der anderen Antwort gelöscht, aber dann dachte ich "Vielleicht wird das für jemanden trotzdem nützlich sein" und löschte es. – Powerlord

0

Wenn Sie nur das Datum und die Uhrzeit auf der Clientseite anzeigen möchten, können Sie einfach Javascript verwenden, das Datum und Uhrzeit des Clientcomputers verwendet.

Es mag Gründe geben, warum du das nicht machen willst, aber ich dachte, ich würde es trotzdem rauswerfen.

+0

danke aber nein, ich möchte die Zeit in meinem Land anzeigen. – Rasiel

1

Mit Django 1.4, können Sie jetzt die django.utils.timezone verwenden, um die aktuelle Zeitzone für einen bestimmten Benutzer

Verwandte Themen