Как применять часовые пояса к полям DateTimeFields модели Django
Когда модель Django содержит поле DateTimeField, дата всегда сохраняется в часовом поясе UTC. Если вы добавляете дату, которая имеет часовой пояс, информация переводится и будет получена по-другому. Это происходит даже если TIME_ZONE было установлено в settings.py и дата была создана с помощью timezone.localtime(timezone.now()). Та же проблема возникает, когда дата добавляется динамически, например, с помощью models.DateTimeField(auto_now_add=True) или models.DateTimeField(auto_now=True).
Как я могу получить или сохранить время даты в правильном часовом поясе?
Дата может быть получена в формате UTC, но вы всегда можете преобразовать ее обратно в нужный вам часовой пояс.
from django.conf import settings
from django.utils import timezone
def getTimezone():
return pytz.timezone(settings.TIME_ZONE)
model.myDateTimeField.astimezone(getTimezone()) # Converts UTC to the timezone in settings.py
Если дататайм был сохранен в другом часовом поясе, это не сработает. Не делайте этого.