Como definir o fuso horário no Django?


139

No settings.pyarquivo do meu projeto django , tenho esta linha:

TIME_ZONE = 'UTC'

Mas quero que meu aplicativo seja executado no fuso horário UTC + 2, então mudei para

TIME_ZONE = 'UTC+2'

Dá o erro ValueError: Incorrect timezone setting: UTC+2. Qual é a maneira correta de fazer isso?

Obrigado!

Respostas:



28

Para obter um conjunto de todos os nomes válidos de fuso horário (ids) do banco de dados tz , você pode usar o pytzmódulo em 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
Também vale a pena notar que existe uma lista mais curta de fuso horário, sem incluir os obsoletos pytz.common_timezones.
vmonteco

11

Escolha um fuso horário válido no banco de dados tzinfo . Eles tendem a assumir a forma, por exemplo, Africa/GaborneeUS/Eastern

Encontre o que corresponde à cidade mais próxima de você ou a que possui seu fuso horário e defina seu valor TIME_ZONEcomo correspondente.


4

Os valores válidos de timeZone são baseados no banco de dados tz (timezone) usado pelo Linux e outros sistemas Unix. Os valores são cadeias (xsd: cadeia) no formato " Área / localização ", nas quais:

Área é um nome de continente ou oceano. A área atualmente inclui:

  • África
  • América (América do Norte e América do Sul)
  • Antártica
  • ártico
  • Ásia
  • atlântico
  • Austrália
  • Europa
  • Etc (zona administrativa. Por exemplo, "Etc / UTC" representa o Tempo Universal Coordenado).
  • indiano
  • Pacífico

Localização é a cidade, ilha ou outro nome regional.

Os nomes das zonas e as abreviações de saída seguem as convenções UNIX do POSIX (interface do sistema operacional portátil), que usam sinais positivos (+) a oeste de Greenwich e sinais negativos (-) a leste de Greenwich, que é o oposto do que geralmente é esperado. Por exemplo, "Etc / GMT + 4" corresponde a 4 horas atrás do UTC (ou seja, oeste de Greenwich) e não 4 horas antes do UTC (Tempo Universal Coordenado) (leste de Greenwich).

Aqui está uma lista de todos os fusos horários válidos

Você pode alterar o fuso horário em settings.py da seguinte maneira

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Kolkata'

USE_I18N = True

USE_L10N = True

USE_TZ = True

2

Eu encontrei esta pergunta procurando alterar o fuso horário no settings.pyarquivo do meu projeto Django para o Reino Unido.

Usando o banco de dados tz na solução do jfs, encontrei a resposta:

    TIME_ZONE = 'Europe/London'

1
  1. Altere o TIME_ZONE para o seu fuso horário local e mantenha USE_TZ como True em 'setting.py':

    TIME_ZONE = 'Ásia / Xangai'

    USE_I18N = Verdadeiro

    USE_L10N = Verdadeiro

    USE_TZ = Verdadeiro

  2. Isso gravará e armazenará o objeto datetime como UTC no banco de dados back-end.

  3. Em seguida, use a tag template para converter a hora UTC no seu modelo de front-end da seguinte maneira:

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

ou use os filtros de modelo de forma concisa:

                <td> 
                    {% load tz %}
                    {{ message.log_date | localtime | time:'H:i:s' }}
                </td>
  1. Você pode verificar mais detalhes no documento oficial: Fuso horário padrão e fuso horário atual

    Quando o suporte a fusos horários está ativado, o Django armazena informações de data e hora no UTC no banco de dados, usa objetos de data e hora com reconhecimento de fuso horário internamente e os converte no fuso horário do usuário final em modelos e formulários.


1

Solução universal, baseada no suporte ao nome TZ do 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'

+/- é intencionalmente alternado.


0
  1. baixe o arquivo pytz mais recente (pytz-2019.3.tar.gz) em:

    https://pypi.org/simple/pytz/
  2. copie e extraia-o para o site_packagesdiretório do seu projeto

  3. no cmd, vá para a pasta extraída e execute:

    python setup.py install
  4. TIME_ZONE = 'Etc/GMT+2' ou nome do país

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.