← Verbal Voyager · разборы

Время, которое держалось на совпадении

Скрытая ошибка настройки, из-за которой при переезде сервера все занятия молча сдвинулись бы на четыре часа.

коммиты: 273aa96

Симптом

Ученики из Москвы, Лондона, Новосибирска и США видели расписание по саратовскому времени.

Причина

База создавалась с хранением времени в UTC, а позже проект переключили на локальное время без пояса (USE_TZ = False). Всё работало только потому, что часовой пояс сессии PostgreSQL случайно совпадал с поясом школы.

Смена настроек базы или переезд сдвинули бы все даты без единой ошибки в логах. Новое поле даты создало бы колонку другого типа, и схема стала бы неоднородной.

Решение

Хранение времени с поясом, вывод в поясе конкретного пользователя через middleware, границы дня и месяца считаются от пояса пользователя, а не сервера.

Проверка

Тесты на три пояса с разным смещением: Саратов, Новосибирск, тихоокеанское время США.

Следующий разборКалендарь и баг, который живёт три дня в месяц