Проблема
Если в БД хранить время без зоны (
timestamp), то каждый клиент интерпретирует его по своему часовому поясу (или вообще неверно). Решение: хранить все времена в UTC (единая глобальная шкала). При показе: брать временную зону пользователя (из профиля, геолокации) и преобразовывать.Почему B оптимально
Универсальность: данные внутри системы всегда согласованы.
Миграция: если текущие записи трактовались как местное время (например, московское), нужно точно знать, в какой зоне они были сохранены, и преобразовать их в UTC (обратимая операция).
Альтернативы
A – преобразовать в
timestamptz, но это полумера.C – избыточно, сложно.
D – неприемлемо для международных систем.
Реальный пример
Booking.com хранит даты заезда в UTC, а показывает в локали пользователя.
Требования
Все временные метки в БД –
TIMESTAMP WITH TIME ZONE или timestamp в UTC.Конвертация происходит на уровне представления.