Jak ustawić strefę czasową w Django?

139

W settings.pypliku mojego projektu django mam następującą linię:

TIME_ZONE = 'UTC'

Ale chcę, aby moja aplikacja działała w strefie czasowej UTC + 2, więc zmieniłem ją na

TIME_ZONE = 'UTC+2'

Daje błąd ValueError: Incorrect timezone setting: UTC+2. Jak to zrobić we właściwy sposób?

Dzięki!

jeff
źródło

Odpowiedzi:

28

Aby uzyskać zestaw wszystkich prawidłowych nazw stref czasowych (identyfikatorów) z bazy danych tz , możesz użyć pytzmodułu w Pythonie :

>>> 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'})
jfs
źródło
1
Warto również zauważyć, że istnieje krótsza lista stref czasowych, z wyłączeniem przestarzałych z pytz.common_timezones.
vmonteco
11

Wybierz prawidłową strefę czasową z bazy danych tzinfo . Mają one zwykle postać npAfrica/Gaborne IUS/Eastern

Znajdź to, które pasuje do najbliższego miasta lub tego, które ma Twoją strefę czasową, a następnie ustaw wartość TIME_ZONEna.

Crast
źródło
4

Prawidłowe wartości timeZone są oparte na bazie danych tz (strefa czasowa) używanej przez Linuksa i inne systemy Unix. Wartości są ciągami (xsd: ciąg) w postaci „ Obszar / lokalizacja ”, w których:

Obszar to nazwa kontynentu lub oceanu. Obszar obecnie obejmuje:

  • Afryka
  • Ameryka (zarówno Ameryka Północna, jak i Południowa)
  • Antarktyda
  • Arktyczny
  • Azja
  • atlantycki
  • Australia
  • Europa
  • Etc (strefa administracyjna. Na przykład „Etc / UTC” oznacza uniwersalny czas koordynowany).
  • indyjski
  • Pacyfik

Lokalizacja to miasto, wyspa lub inna nazwa regionalna.

Nazwy stref i skróty danych wyjściowych są zgodne z konwencją UNIX POSIX (interfejs przenośnego systemu operacyjnego), która używa znaków dodatnich (+) na zachód od Greenwich i znaków ujemnych (-) na wschód od Greenwich, co jest przeciwieństwem tego, czego się ogólnie oczekuje. Na przykład „Etc / GMT + 4” oznacza 4 godziny za czasem UTC (to znaczy na zachód od Greenwich), a nie 4 godziny przed UTC (uniwersalny czas koordynowany) (na wschód od Greenwich).

Oto lista wszystkich prawidłowych stref czasowych

Możesz zmienić strefę czasową w swoim settings.py w następujący sposób

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Kolkata'

USE_I18N = True

USE_L10N = True

USE_TZ = True
ANFAS PV
źródło
2

Znalazłem to pytanie, próbując zmienić strefę czasową w settings.pypliku mojego projektu Django na Wielką Brytanię.

Korzystając z bazy danych tz w rozwiązaniu jfs znalazłem odpowiedź:

    TIME_ZONE = 'Europe/London'
znak
źródło
1
  1. Zmień TIME_ZONE na lokalną strefę czasową i zachowaj USE_TZ jako True w „setting.py”:

    TIME_ZONE = 'Azja / Szanghaj'

    USE_I18N = True

    USE_L10N = True

    USE_TZ = True

  2. Spowoduje to zapisanie i przechowywanie obiektu datetime jako UTC w wewnętrznej bazie danych.

  3. Następnie użyj tagu szablonu, aby przekonwertować czas UTC w szablonie interfejsu użytkownika w następujący sposób:

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

lub zwięźle użyj filtrów szablonów :

                <td> 
                    {% load tz %}
                    {{ message.log_date | localtime | time:'H:i:s' }}
                </td>
  1. Możesz sprawdzić więcej szczegółów w oficjalnym dokumencie: Domyślna strefa czasowa i aktualna strefa czasowa

    Gdy obsługa stref czasowych jest włączona, Django przechowuje informacje o dacie i godzinie w bazie danych w formacie UTC, wykorzystuje wewnętrznie obiekty daty i godziny uwzględniające strefy czasowe i tłumaczy je na strefę czasową użytkownika końcowego w szablonach i formularzach.

Freman Zhang
źródło
1

Uniwersalne rozwiązanie oparte na obsłudze nazw TZ 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'

+/- jest celowo przełączane.

Punnerud
źródło
0
  1. pobierz najnowszy plik pytz (pytz-2019.3.tar.gz) z:

    https://pypi.org/simple/pytz/
  2. skopiuj i wypakuj go do site_packageskatalogu w swoim projekcie

  3. w cmd przejdź do wyodrębnionego folderu i uruchom:

    python setup.py install
  4. TIME_ZONE = 'Etc/GMT+2' lub nazwa kraju

S.Rasool Mirtalebi
źródło