Работая программистом я много провозился с разбирательством, почему то или иное время показывается не так, как надо. И это при том, что я никогда не работал с программным обеспечением, которое должно поддерживать несколько временных зон. Зона всегда одна, московская.

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

Сначала я определился, что время оно более менее одно, если не учитывать вращение земли и атомные часы. Наверно, это важно в космических приложениях, но для меня достаточно, что есть универсальное время UTC.

Грубо говоря, это количество секунд с начала 1970 года в определенной точке Земли, так как год наступает в разное время в разных точках. Владивосток празднует Новый Год на 9 часов раньше Москвы. Количество пройденных секунд с той секунды, когда 1970 год на Гринвическом Меридиане наступил во всем мире одинаковое. С ним легко работать и никаких разночтений быть не может. Правда, для других временных зон его не удобно читать, поэтому при отображении универсального времени пользователю его надо конвертировать в локальное время. Поняв это я довольно быстро согласовал время в моей программе:

  • При заливке московского локального времени, я удостоверился что оно корректно конвертируется в универсальное время
  • Проверил, что в базе хранится универсальное время
  • Серверную обработку настроил на работу с универсальным временем, так как отступы от начала дня задавались часами по Москве, поменял вычисление представлений локального времени
  • Поправил клиент, чтобы он отрисовывал Московское время

Чтобы не путаться, нужно помнить что есть одно универсальное время. А путаница с временами проистекает исключительно из разных представлений универсального времени.