Вопрос про часовые пояса и UTC
Что-то я нигде не могу найти конкретный ответ на не очень конкретный вопрос.
Я понимаю, что такое UTC - это время по Гринвичу - нулевой меридиан, причем он не подвергается никаким летним/зимним переводам времени и так далее.
Все источники говорят о том, что нужно работать и сохранять время в UTC, что как бы логично. Но есть один нюанс.
К примеру, начало и конец события привязаны к локальному времени, так как весь ресторанный бизнес работает по локальному времени. Да и учеба тоже. Обычно когда переводят время на летнее/зимнее никто расписание не меняет (кроме животноводства)
И вот, рассмотрим 2 варианта:
1) Если храним время начала мероприятия в локальном времени - мы должны постоянно проверять локальное время с сохраненным, потому как просто таймер поставить невозможно - программа не знает когда в будущем будет переход на зимнее/летнее время. Тип проверки: сравнение времен в каждом цикле программы. Недостаток: можно получить ошибку при переносе программы в другую локацию.
2) Если храним время начала мероприятия в UTC, который был сформирован при текущем зимнем времени (можно использовать и сравнение в каждом цикле и таймер), то если на момент начала мероприятия уже будет летнее время - будет смещение. Тип проверки: сравнение времен в каждом цикле программы / отсчет таймера в каждом цикле программы. Недостаток: можно получить смещение при переходе на летнее/зимнее время.
В итоге вопрос: нужно хранить и время и именно название часового пояса (никакие там offset) ?
Это такой уточняющий вопрос. Просто я прочитал чью-то работу и мне показалось, что там все таки толком не уточнили, каким же образом требуется правильно сохранять время. Потому что выражение "в локальном времени + оффсэт" - не говорит вообще ни о чем. На одном меридиане может быть несколько государств, со своими правилами перехода на летнее/зимнее время.
- Все базы данных сохраняют только Timestamp который базируется на настройке самой базы данных. А что если у меня в базе хранятся разные времена для разных поясов?
- Если все-таки хранение смещения по меридиану не спасает от всяких "хотелок" отдельных стран, которые могут смещать время как угодно им вздумается - то каким образом происходит точное хранение таких правил, и кто гарантирует, что с момента записи таких данных - не произойдет изменение внутри этих правил?
Наверное я просто зануда и любой скажет "что ты прикопался к 1 часу". Но возникает вопрос - а как же банковская система? Договора, юристы, иски, какие тогда временные метки ставят в серьезных договорах, где 1 час все-таки решает многое?
Просто конкретно меня это волнует по той причине, что я пытаюсь выяснить "паттерн" по которому эта проблема решается. И соответствовать этому паттерну, чтобы быть в синхроне с другими программами. Чтобы поведение программы было прогнозируемым и так далее.