Ответ 1
Сначала убедитесь, что вы знакомы с документацией Django о часовых поясах, установите USE_TZ = True
и установите pytz
.
Я не совсем понимаю, откуда твое свидание. Если он поступает с сервера как часть их данных (то есть он представляет собой время измерения приливов), он должен быть либо в UTC, либо вам нужно будет знать часовой пояс, который они используют. Если вы создаете его, то самое простое - просто использовать django.utils.timezone.now()
(который возвращает дату и время с учетом часового пояса) при создании экземпляра модели.
Если вам действительно нужно создать его вручную, как вы описали, следуйте инструкциям здесь или используйте make_aware()
:
from django.utils.timezone import make_aware
naive = datetime(loc_year, loc_month, loc_date, loc_hour, loc_minute)
make_aware(naive) # current timezone, or...
make_aware(naive, timezone=pytz.timezone("Europe/Helsinki")) # ...specific timezone
текущий часовой пояс будет часовым поясом по умолчанию (как определено параметром TIME_ZONE
), если вы не использовали activate()
, чтобы указать другой. Часовой пояс по умолчанию может совпадать или не совпадать с часовым поясом системы сервера. Получение системного часового пояса в формате, понятном pytz
, обсуждается в этом ответе.
Наконец, обеспечение того, чтобы пользователи видели время, преобразованное в их локальный часовой пояс, нетривиально, как обсуждалось здесь:
Текущий часовой пояс является эквивалентом текущей локали для переводов. Однако нет эквивалента HTTP-заголовка Accept-Language, который Django мог бы использовать для автоматического определения часового пояса пользователя. Вместо этого Django предоставляет функции выбора часового пояса. Используйте их для построения логики выбора часового пояса, которая имеет смысл для вас.
Смотрите примеры там для руководства.