Wie stelle ich die Zeitzone in Django ein?


136

In der settings.pyDatei meines Django-Projekts habe ich folgende Zeile:

TIME_ZONE = 'UTC'

Ich möchte jedoch, dass meine App in der Zeitzone UTC + 2 ausgeführt wird. Deshalb habe ich sie in geändert

TIME_ZONE = 'UTC+2'

Es gibt den Fehler ValueError: Incorrect timezone setting: UTC+2. Was ist der richtige Weg, dies zu tun?

Vielen Dank!

Antworten:



27

Um einen Satz aller gültigen Zeitzone Namen (ids) Suche von der tz - Datenbank , könnten Sie verwenden pytzModul in Python :

>>> import pytz # $ pip install pytz
>>> pytz.all_timezones_set
LazySet({'Africa/Abidjan',
         'Africa/Accra',
         'Africa/Addis_Ababa',
         'Africa/Algiers',
         'Africa/Asmara',
         'Africa/Asmera',
         ...
         'UTC',
         'Universal',
         'W-SU',
         'WET',
         'Zulu'})

1
Es ist auch erwähnenswert, dass es eine kürzere Liste von Zeitzonen gibt, ohne veraltete mit pytz.common_timezones.
Vmonteco

11

Wählen Sie eine gültige Zeitzone aus der tzinfo-Datenbank . Sie neigen dazu, die Form anzunehmen, zB Africa/GaborneundUS/Eastern

Suchen Sie diejenige, die der Stadt in Ihrer Nähe entspricht, oder diejenige, die Ihre Zeitzone hat, und stellen Sie dann Ihren Wert so ein TIME_ZONE, dass er übereinstimmt.


4

Gültige Zeitzonenwerte basieren auf der von Linux und anderen Unix-Systemen verwendeten tz-Datenbank (Zeitzonendatenbank). Die Werte sind Zeichenfolgen (xsd: Zeichenfolge) in der Form " Bereich / Ort ", in der:

Das Gebiet ist ein Kontinent oder ein Ozeanname. Der Bereich umfasst derzeit:

  • Afrika
  • Amerika (sowohl Nordamerika als auch Südamerika)
  • Antarktis
  • Arktis
  • Asien
  • atlantisch
  • Australien
  • Europa
  • Etc (Verwaltungszone. Zum Beispiel steht "Etc / UTC" für die koordinierte Weltzeit.)
  • indisch
  • Pazifik

Ort ist die Stadt, die Insel oder ein anderer regionaler Name.

Die Zonennamen und Ausgabeabkürzungen entsprechen den UNIX-Konventionen von POSIX (Portable Operating System Interface), bei denen positive (+) Vorzeichen westlich von Greenwich und negative (-) Vorzeichen östlich von Greenwich verwendet werden, was das Gegenteil von dem ist, was allgemein erwartet wird. Zum Beispiel entspricht „Etc / GMT + 4“ 4 Stunden hinter UTC (dh westlich von Greenwich) und nicht 4 Stunden vor UTC (koordinierte Weltzeit) (östlich von Greenwich).

Hier ist eine Liste aller gültigen Zeitzonen

Sie können die Zeitzone in Ihrer settings.py wie folgt ändern

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Kolkata'

USE_I18N = True

USE_L10N = True

USE_TZ = True

2

Ich habe diese Frage gefunden, um die Zeitzone in der settings.pyDatei meines Django-Projekts nach Großbritannien zu ändern .

Unter Verwendung der tz-Datenbank in der jfs-Lösung fand ich die Antwort:

    TIME_ZONE = 'Europe/London'

1
  1. Ändern Sie die TIME_ZONE in Ihre lokale Zeitzone und behalten Sie USE_TZ in 'settings.py' als True bei:

    TIME_ZONE = 'Asien / Shanghai'

    USE_I18N = True

    USE_L10N = True

    USE_TZ = True

  2. Dadurch wird das datetime-Objekt als UTC in die Backend-Datenbank geschrieben und gespeichert.

  3. Verwenden Sie dann das Vorlagen-Tag , um die UTC-Zeit in Ihrer Frontend-Vorlage als solche zu konvertieren:

                <td> 
                    {% load tz %}
                    {% get_current_timezone as tz %}
                    {% timezone tz %}
                        {{ message.log_date | time:'H:i:s' }}
                    {% endtimezone %} 
                </td>

oder verwenden Sie die Vorlagenfilter kurz :

                <td> 
                    {% load tz %}
                    {{ message.log_date | localtime | time:'H:i:s' }}
                </td>
  1. Weitere Details finden Sie im offiziellen Dokument: Standardzeitzone und aktuelle Zeitzone

    Wenn die Unterstützung für Zeitzonen aktiviert ist, speichert Django Datums- / Uhrzeitinformationen in UTC in der Datenbank, verwendet zeitzonenbezogene Datums- / Uhrzeitobjekte intern und übersetzt sie in Vorlagen und Formularen in die Zeitzone des Endbenutzers.


1

Universelle Lösung, basierend auf der TZ - Namensunterstützung von Django :

UTC-2 = 'Etc/GMT+2'
UTC-1 = 'Etc/GMT+1'
UTC = 'Etc/GMT+0'
UTC+1 = 'Etc/GMT-1'
UTC+2 = 'Etc/GMT-2'

+/- wird absichtlich umgeschaltet.


0
  1. Laden Sie die neueste Pytz-Datei (pytz-2019.3.tar.gz) herunter von:

    https://pypi.org/simple/pytz/
  2. Kopieren Sie es und extrahieren Sie es in das site_packagesVerzeichnis Ihres Projekts

  3. Gehen Sie in cmd zum extrahierten Ordner und führen Sie Folgendes aus:

    python setup.py install
  4. TIME_ZONE = 'Etc/GMT+2' oder Ländername

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.