Я делаю это, используя pytz действительные имена часовых поясов.Я настроил свой список так, чтобы он отражал только те, которые мне нужны, то есть
TIMEZONES = (
'Canada/Atlantic',
'Canada/Central',
'Canada/Eastern',
'Canada/Mountain',
'Canada/Pacific',
)
Затем у меня есть класс местоположения, который устанавливает часовой пояс в виде поля Char следующим образом:
class Location(models.Model):
....
time_zone = models.CharField(max_length=100, blank=True, null=True, choices=TIMEZONES) # 64 min
....
Уведомление Iустановите пустое & null в True, чтобы сделать поле необязательным.Посмотрите на django-timezone-field fields.py для дальнейших идей.
Чтобы использовать это в моем коде с pytz, я импортирую часовой пояс:
from pytz import timezone
import datetime
from locations.models import Location # my object that has the time_zone field
loc = Location.objects.get(pk=1) #get existing location or your object that has time_zone field
utc = pytz.utc
some_utc_date = datetime.datetime(2002, 10, 27, 6, 0, 0).replace(tzinfo=utc) #tz aware
some_date.astimezone(timezone(loc.time_zone))
Замените datetime.datetime (2002, 10, 27, 6, 0, 0) на поле даты и времени, соответствующее вашему местоположению или конкретному объекту с полем time_zone.В моем случае я храню все свои поля даты в формате UTC в коллекции MongoDB.Когда я получаю данные и хочу создать удобочитаемый вывод, я использую описанный выше метод для отображения даты в выводе.Вы также можете создать собственный тег для обработки этого в шаблонах.Подробнее см. pytz doc.