Переключение Django USE_TZ на True
У меня есть сайт, который довольно старый (начинался на Django 1.6), но со временем был обновлен и сейчас находится на Django 4.2. На нем всегда были USE_TZ=False
и TIME_ZONE='America/Chicago'
.
У нас много критических дат (подписки, записи о покупках и т. д.), многие из которых поступают из внешних веб-хуков от нашего платежного процессора.
Я хочу добавить еще одно приложение Django, но оно требует USE_TZ=True
. Кто-нибудь знает, что может произойти, если я включу его? Я включил его в своей среде разработки и не вижу никаких очевидных проблем, но не могу легко воспроизвести веб-крючки, которые я получаю, и ежедневные задачи, которые широко используют вычисления даты. Где мне следует искать проблемы?
Я не совсем понимаю, о чем вы спрашиваете. Что конкретно вы имеете в виду под словом «включить»? Включить что?
Если вы хотите переключиться с True
на False
или наоборот для вашего USE_TZ
. Вы можете зайти в настройки Django и изменить его на False
. Но я считаю, что по умолчанию стоит значение True.
Не уверен, что это тот ответ, который вы ищете, ваш вопрос несколько расплывчатый.
Вы можете установить USE_TZ = True
, так как это обеспечивает согласованность при работе с датами в разных регионах, что, я полагаю, вам и нужно.
Когда USE_TZ
имеет значение False
, Django будет хранить все даты в вашей настройке TIME_ZONE
. Когда USE_TZ
имеет значение True
, настройка TIME_ZONE
становится часовым поясом по умолчанию, который Django будет использовать для отображения дат в шаблонах и для интерпретации дат, введенных в формах.
Если вы используете PostgreSQL, то при хранении он преобразует время дат из временной зоны соединения в UTC, а при получении - из UTC во временную зону соединения. Это означает, что вы можете свободно переключаться между USE_TZ = False
и USE_TZ = True
. Временная зона соединения с базой данных будет установлена в TIME_ZONE
или UTC
соответственно, так что Django получит корректные времена дат во всех случаях. Вам не нужно выполнять никаких преобразований данных.
Но другие бэкенды хранят даты без информации о часовом поясе. Если вы переключитесь с USE_TZ = False
на USE_TZ = True
, вам придется преобразовывать данные из местного времени в UTC - что не является детерминированным, если ваше местное время имеет DST.