Переключение 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.

См. документацию по Django 4.2.

Вернуться на верх