Как установить часовой пояс в Джанго?

139

В settings.pyфайле моего проекта Django у меня есть эта строка:

TIME_ZONE = 'UTC'

Но я хочу, чтобы мое приложение работало в часовом поясе UTC + 2, поэтому я изменил его на

TIME_ZONE = 'UTC+2'

Это дает ошибку ValueError: Incorrect timezone setting: UTC+2. Как правильно это сделать?

Спасибо!

Джефф
источник

Ответы:

228

Вот список допустимых часовых поясов:

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

Ты можешь использовать

TIME_ZONE = 'Europe/Istanbul'

для UTC + 02: 00

Сельчук
источник
3
На самом деле это верно только полгода, когда летнее время не включено. Вы можете использовать Африку / Мбабане для UTC + 2 года
Крис SH
28

Чтобы получить набор всех допустимых имен часовых поясов (идентификаторов) из базы данных tz , вы можете использовать pytzмодуль в 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
источник
1
Стоит также отметить, что существует более короткий список часовых поясов, не считая устаревших pytz.common_timezones.
vmonteco
11

Выберите действительный часовой пояс из базы данных tzinfo . Они имеют тенденцию принимать форму, например, Africa/GaborneиUS/Eastern

Найдите тот, который соответствует ближайшему к вам городу, или тот, в котором есть ваш часовой пояс, затем установите для него значение, TIME_ZONEсоответствующее.

Crast
источник
4

Допустимые значения timeZone основаны на базе данных tz (timezone), используемой Linux и другими системами Unix. Значения представляют собой строки (xsd: string) в форме « Площадь / Местоположение », в которой:

Площадь - это название континента или океана. Площадь в настоящее время включает в себя:

  • Африка
  • Америка (как Северная Америка, так и Южная Америка)
  • Антарктида
  • Арктический
  • Азия
  • Атлантика
  • Австралия
  • Европа
  • Etc (административная зона. Например, «Etc / UTC» представляет собой Всемирное координированное время.)
  • индийский
  • миролюбивый

Местоположение - это город, остров или другое региональное название.

Имена зон и выходные сокращения соответствуют соглашениям PIX (интерфейс переносимой операционной системы) UNIX, в которых используются положительные (+) знаки к западу от Гринвича и отрицательные (-) знаки к востоку от Гринвича, что противоположно тому, что обычно ожидается. Например, «Etc / GMT + 4» соответствует 4 часам за UTC (то есть к западу от Гринвича), а не за 4 часа до UTC (Всемирное координированное время) (к востоку от Гринвича).

Вот список всех действительных часовых поясов

Вы можете изменить часовой пояс в вашем settings.py следующим образом

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Kolkata'

USE_I18N = True

USE_L10N = True

USE_TZ = True
АНФАС П.В.
источник
2

Я нашел этот вопрос, пытаясь изменить часовой пояс в settings.pyфайле моего проекта Django на Великобританию.

Используя базу данных tz в решении jfs, я нашел ответ:

    TIME_ZONE = 'Europe/London'
отметка
источник
1
  1. Измените TIME_ZONE на ваш местный часовой пояс и сохраните USE_TZ как True в 'setting.py':

    TIME_ZONE = 'Азия / Шанхай'

    USE_I18N = True

    USE_L10N = True

    USE_TZ = True

  2. Это запишет и сохранит объект datetime в формате UTC в серверной базе данных.

  3. Затем используйте шаблон тега, чтобы преобразовать время UTC в шаблон веб-интерфейса следующим образом:

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

или используйте шаблоны фильтров кратко:

                <td> 
                    {% load tz %}
                    {{ message.log_date | localtime | time:'H:i:s' }}
                </td>
  1. Вы можете проверить более подробную информацию в официальном документе: часовой пояс по умолчанию и текущий часовой пояс

    Когда поддержка часовых поясов включена, Django сохраняет информацию о дате и времени в формате UTC в базе данных, внутренне использует объекты даты и времени с учетом часового пояса и переводит их в часовой пояс конечного пользователя в шаблонах и формах.

Фреман Чжан
источник
1

Универсальное решение, основанное на поддержке имени 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'

+/- намеренно переключается.

Punnerud
источник
0
  1. загрузить последний файл pytz (pytz-2019.3.tar.gz) из:

    https://pypi.org/simple/pytz/
  2. скопируйте и распакуйте его в site_packagesкаталог вашего проекта

  3. в cmd перейдите в извлеченную папку и запустите:

    python setup.py install
  4. TIME_ZONE = 'Etc/GMT+2' или название страны

С.Расул Мирталеби
источник