pytz, Django 1.5 и postgres: проблемы с часовым поясом DST

Я создал сайт событий с Django 1.5.4 и postgres 9.1. Время только что изменилось для "отступления", и все данные даты / времени, введенные администраторами до изменения времени, теперь отстают на час.

В моих настройках Django у меня есть TIME_ZONE = 'America/Chicago' а также USE_TZ = True, Сайт событий предназначен для небольшого города в центральном часовом поясе США. Сервер и база данных также установлены для этого часового пояса. Просматривая базу данных, я могу сказать, какие события произошли до изменения, потому что все они говорят "-05" в конце, а те, которые введены после "-06". Хотя, насколько я понимаю, postgres должен сохранять временные метки как UTC, даже если он отображает их со смещением.

Чтобы отобразить данные, я вытаскиваю их из базы данных через ORM Джанго, затем использую astimezone в дату начала каждого вхождения, вот так:

LOCAL_TZ = pytz.timezone(settings.TIME_ZONE)


def upcoming_week(start=None):
    if not start:
        start = date.today()
    plus7 = start + timedelta(days=6)
    occurs = models.Occurrence.objects.between(start, plus7) \
                   .select_related('event', 'event__location', 'event__priority')
    return (start, plus7, occurs)


def upcoming_week_by_date(start=None):
    start, plus7, occurs = upcoming_week()
    _occurs_by_date = defaultdict(list)
    for o in occurs:
        dt = o.start.astimezone(LOCAL_TZ)
        _occurs_by_date[dt.date()].append(o)
    occurs_by_date = _occurs_by_date.items()
    occurs_by_date.sort()
    return (start, plus7, occurs_by_date)

Этот конкретный фрагмент кода используется для упорядочения событий по дате на домашней странице, и события всех дней, которые должны начинаться в полночь, теперь отображаются в предыдущий день. Время также отображается как "11 вечера", и это отрисовывается Django (не обработанный мной с помощью pytz).

У меня также есть код, который преобразует вхождения в json для использования в javascript и использует astimezone так же, как и выше, и все события (созданные до изменения времени) также показывают на час раньше.

Я использую форк Eventtools здесь: https://github.com/FirelightWebware/glamkit-eventtools, и время показывает правильно в админке.

Обновление: только изменения, созданные до изменения времени и произошедшие после изменения времени, отключаются на час. Так что технически все работает правильно, так как они были созданы в другом часовом поясе, настройка имеет некоторый смысл. Таким образом, вопрос заключается в том, есть ли способ создать до изменения времени события, которые должны произойти после изменения времени, с правильным временем? На данный момент я должен сказать администраторам создавать только вхождения до изменения времени, а затем после изменения времени создавать больше вхождений. Что смешно.

0 ответов

Другие вопросы по тегам