Связь UTC и местного времени
Числовое смещение определяется как местное время минус UTC. Отсюда местное время равно UTC плюс смещение. Если результат выходит за пределы суток, изменяется календарная дата.
Обозначение Z означает UTC. Само время без даты и без смещения не определяет момент однозначно: запись «23:30» не сообщает, в каком часовом поясе она дана.
Для хранения разбора удобно разделять момент начала, выраженный в UTC, и отображаемую местную дату. Это разные поля, хотя они описывают один момент.
| Исходные данные | Операция | Результат |
|---|---|---|
| 2025-07-10 01:30 Z; смещение −4 часа | 01:30 + (−4:00) | 2025-07-09 21:30 |
Разбор перехода через полночь
Вымышленный пример: начало игры указано как 2025-07-10 01:30 Z, а заданное смещение равно −4 часа. Местное время рассчитывается так: 01:30 + (−4:00) = 21:30 предыдущего дня. Поэтому местная дата равна 2025-07-09.
Если в карточке игры нужна бейсбольная дата по этому заданному местному времени, записывают 2025-07-09. Значение UTC при этом не исправляют и не заменяют местным: оба значения можно хранить рядом с явными обозначениями UTC и смещения.
- Проверьте, что исходное время содержит дату и обозначение UTC либо явное смещение.
- Возьмите заданное числовое смещение «местное время минус UTC».
- Прибавьте смещение к UTC.
- Если расчёт пересёк полночь, измените дату на предыдущую или следующую.
- Сохраните исходный UTC-момент, применённое смещение и полученную местную дату отдельно.
Почему нельзя подставлять город без данных
Числовое смещение в расчёте должно быть задано в исходных данных. Источник о представлении времени не содержит каталога актуальных смещений для городов и не позволяет выводить их по названию площадки.
Поэтому фраза «матч был в городе X» недостаточна для пересчёта, если нет даты, времени и смещения. В таком случае местную дату следует оставить неизвестной, а не вычислять её предположительно.
