Come impostare il fuso orario in Django?


139

Nel settings.pyfile del mio progetto django , ho questa riga:

TIME_ZONE = 'UTC'

Voglio che la mia app venga eseguita nel fuso orario UTC + 2, quindi l'ho cambiata in

TIME_ZONE = 'UTC+2'

Dà l'errore ValueError: Incorrect timezone setting: UTC+2. Qual è il modo corretto di farlo?

Grazie!

Risposte:



28

Per ottenere un set di tutti i nomi di fuso orario (id) validi dal database tz , è possibile utilizzare il pytzmodulo 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
Vale anche la pena notare che esiste un elenco più breve di fuso orario, esclusi quelli deprecati pytz.common_timezones.
vmonteco,

11

Scegli un fuso orario valido dal database tzinfo . Tendono a prendere la forma ad es. Africa/GaborneEUS/Eastern

Trova quello che corrisponde alla città più vicina a te, o quello che ha il tuo fuso orario, quindi imposta il valore di TIME_ZONEaffinché corrisponda.


4

I valori di timeZone validi si basano sul database tz (fuso orario) utilizzato da Linux e altri sistemi Unix. I valori sono stringhe (xsd: string) nel formato " Area / Posizione ", in cui:

L'area è un nome di continente o oceano. L'area attualmente include:

  • Africa
  • America (sia Nord America che Sud America)
  • Antartide
  • artico
  • Asia
  • atlantico
  • Australia
  • Europa
  • Etc (zona amministrativa. Ad esempio, "Etc / UTC" rappresenta Coordinated Universal Time.)
  • indiano
  • Pacifico

La posizione è la città, l'isola o un altro nome regionale.

I nomi delle zone e le abbreviazioni di output aderiscono alle convenzioni UNIX POSIX (interfaccia del sistema operativo portatile), che utilizza segni positivi (+) a ovest di Greenwich e segni negativi (-) a est di Greenwich, che è l'opposto di quanto generalmente previsto. Ad esempio, "Etc / GMT + 4" corrisponde a 4 ore dietro UTC (ovvero a ovest di Greenwich) anziché a 4 ore avanti rispetto a UTC (Coordinated Universal Time) (ad est di Greenwich).

Ecco un elenco di tutti i fusi orari validi

È possibile modificare il fuso orario in settings.py come segue

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Kolkata'

USE_I18N = True

USE_L10N = True

USE_TZ = True

2

Ho trovato questa domanda cercando di cambiare il fuso orario del mio progetto Django settings.pynel Regno Unito.

Usando il database tz nella soluzione di jfs ho trovato la risposta:

    TIME_ZONE = 'Europe/London'

1
  1. Cambia TIME_ZONE nel fuso orario locale e tieni USE_TZ su True in "setting.py":

    TIME_ZONE = "Asia / Shanghai"

    USE_I18N = True

    USE_L10N = True

    USE_TZ = True

  2. Ciò scriverà e memorizzerà l'oggetto datetime come UTC nel database back-end.

  3. Quindi utilizzare il tag modello per convertire l'ora UTC nel modello frontend in quanto tale:

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

oppure utilizza i filtri modello in modo conciso:

                <td> 
                    {% load tz %}
                    {{ message.log_date | localtime | time:'H:i:s' }}
                </td>
  1. È possibile controllare ulteriori dettagli nel documento ufficiale: fuso orario predefinito e fuso orario corrente

    Quando il supporto per i fusi orari è abilitato, Django archivia le informazioni sul datetime in UTC nel database, utilizza internamente oggetti datetime con riconoscimento del fuso orario e li traduce nel fuso orario dell'utente finale in modelli e moduli.


1

Soluzione universale, basata sul supporto del nome TZ di 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'

+/- viene commutato intenzionalmente.


0
  1. scarica l'ultimo file pytz (pytz-2019.3.tar.gz) da:

    https://pypi.org/simple/pytz/
  2. copiarlo ed estrarlo nella site_packagesdirectory sul tuo progetto

  3. in cmd vai alla cartella estratta ed esegui:

    python setup.py install
  4. TIME_ZONE = 'Etc/GMT+2' o nome del paese

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.