¿Cómo configurar la zona horaria en Django?

139

En el settings.pyarchivo de mi proyecto django , tengo esta línea:

TIME_ZONE = 'UTC'

Pero quiero que mi aplicación se ejecute en la zona horaria UTC + 2, así que la cambié a

TIME_ZONE = 'UTC+2'

Da el error ValueError: Incorrect timezone setting: UTC+2. ¿Cuál es la forma correcta de hacer esto?

¡Gracias!

jeff
fuente

Respuestas:

228

Aquí está la lista de zonas horarias válidas:

http://en.wikipedia.org/wiki/List_of_tz_database_time_zones

Puedes usar

TIME_ZONE = 'Europe/Istanbul'

para UTC + 02: 00

Selcuk
fuente
3
En realidad, eso es justo la mitad del año cuando el horario de verano no está activado. Puede usar África / Mbabane para UTC + 2 todo el año
Chris SH
28

Para obtener un conjunto de todos los nombres de zona horaria (id) válidos de la base de datos tz , puede usar el pytzmódulo en 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'})
jfs
fuente
1
También vale la pena señalar que hay una lista más corta de zonas horarias, sin incluir las obsoletas pytz.common_timezones.
vmonteco
11

Elija una zona horaria válida de la base de datos tzinfo . Tienden a tomar la forma, por ejemplo, Africa/GaborneyUS/Eastern

Encuentre la que coincida con la ciudad más cercana a usted, o la que tenga su zona horaria, luego establezca su valor TIME_ZONEpara que coincida.

Crast
fuente
4

Los valores válidos de timeZone se basan en la base de datos tz (zona horaria) utilizada por Linux y otros sistemas Unix. Los valores son cadenas (xsd: cadena) en la forma " Área / Ubicación ", en la que:

El área es un nombre de continente u océano. El área actualmente incluye:

  • África
  • América (América del Norte y América del Sur)
  • Antártida
  • Ártico
  • Asia
  • atlántico
  • Australia
  • Europa
  • Etc (zona administrativa. Por ejemplo, "Etc / UTC" representa el Tiempo Universal Coordinado).
  • indio
  • Pacífico

La ubicación es la ciudad, isla u otro nombre regional.

Los nombres de zona y las abreviaturas de salida se adhieren a las convenciones de UNIX POSIX (interfaz de sistema operativo portátil), que usa signos positivos (+) al oeste de Greenwich y signos negativos (-) al este de Greenwich, que es lo contrario de lo que generalmente se espera. Por ejemplo, "Etc / GMT + 4" corresponde a 4 horas detrás de UTC (es decir, al oeste de Greenwich) en lugar de 4 horas antes de UTC (hora universal coordinada) (al este de Greenwich).

Aquí hay una lista de todas las zonas horarias válidas

Puede cambiar la zona horaria en su settings.py de la siguiente manera

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Kolkata'

USE_I18N = True

USE_L10N = True

USE_TZ = True
ANFAS PV
fuente
2

Encontré esta pregunta buscando cambiar la zona horaria en el settings.pyarchivo de mi proyecto Django al Reino Unido.

Usando la base de datos tz en la solución de jfs, encontré la respuesta:

    TIME_ZONE = 'Europe/London'
marca
fuente
1
  1. Cambie TIME_ZONE a su zona horaria local y mantenga USE_TZ como True en 'setting.py':

    TIME_ZONE = 'Asia / Shanghai'

    USE_I18N = Verdadero

    USE_L10N = Verdadero

    USE_TZ = Verdadero

  2. Esto escribirá y almacenará el objeto datetime como UTC en la base de datos de back-end.

  3. Luego use la etiqueta de plantilla para convertir la hora UTC en su plantilla de interfaz como tal:

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

o utilice los filtros de plantilla de forma concisa:

                <td> 
                    {% load tz %}
                    {{ message.log_date | localtime | time:'H:i:s' }}
                </td>
  1. Puede consultar más detalles en el documento oficial: zona horaria predeterminada y zona horaria actual

    Cuando el soporte para zonas horarias está habilitado, Django almacena la información de fecha y hora en UTC en la base de datos, utiliza objetos de fecha y hora con reconocimiento de zona horaria internamente y los traduce a la zona horaria del usuario final en plantillas y formularios.

Freman Zhang
fuente
1

Solución universal, basada en el soporte de nombres TZ de 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'

+/- se cambia intencionalmente.

Punnerud
fuente
0
  1. descargue el último archivo pytz (pytz-2019.3.tar.gz) desde:

    https://pypi.org/simple/pytz/
  2. cópielo y extráigalo al site_packagesdirectorio en su proyecto

  3. en cmd ve a la carpeta extraída y ejecuta:

    python setup.py install
  4. TIME_ZONE = 'Etc/GMT+2' o nombre del país

S.Rasool Mirtalebi
fuente