Запросы по часовому поясу против местоположения

Момент времени-часового пояса имеет метод momnet.tz, который принимает два параметра:

  • конкретное время
  • название часового пояса

Возвращает сдвиг времени (в UTC), который был в заданном часовом поясе в данное время. Хорошо.

Вопрос, который беспокоит меня:

  • все ли места, которые в настоящее время принадлежат определенному часовому поясу, были в прошлом и принадлежали к этой зоне?
  • поэтому не возможно, что если два местоположения, даже в настоящее время принадлежащие определенному часовому поясу, в прошлом (даже после 1970 года) имели фактически разные часовые пояса (переход на UTC).
  • Возможно ли в принципе запросить у tz-db конкретное местоположение, а не имя часового пояса.

Был бы признателен, если бы кто-то мог устранить мои сомнения.

1 ответ

Решение

Момент-часовой пояс использует данные из базы данных часовых поясов IANA (она же называется TZDB, zoneinfo или из базы данных Olson). На большинство ваших вопросов отвечают эти данные, а не сам момент-часовой пояс. Вы обнаружите, что другие реализации (для других языков, платформ и т. Д.) Имеют аналогичное поведение.

Существует много информации о том, как работает tzdb, в файле теории в самом tzdb и в Википедии, но я посмотрю, смогу ли я ответить на ваши конкретные вопросы:

все ли места, которые в настоящее время принадлежат определенному часовому поясу, были в прошлом и принадлежали к этой зоне?

TZDB назначает часовые пояса на основе городов (поскольку они менее подвержены изменениям во времени, чем другие региональные границы). Как правило, один город в данном регионе, часы которого были выровнены с 1970 года, будет выбран для представления времени в этом регионе.

Когда другая часть этого региона меняет свои часы по-другому, чем остальная часть региона, создается новый часовой пояс, и в этом регионе выбирается новый город для представления зоны. Мы называем это "разделением зоны". Время до разделения в обеих зонах будет совпадать (кроме записи LMT), а время на разделении и вперед будет отклоняться. Не имеет значения, если в какой-то момент в будущем время в этих регионах снова выровняется. Сейчас есть две зоны, и они будут существовать, потому что они отклонялись в некоторый момент в прошлом.

поэтому не возможно, что если два местоположения, даже в настоящее время принадлежащие определенному часовому поясу, в прошлом (даже после 1970 года) имели фактически разные часовые пояса (переход на UTC).

Если в регионе имеется отдельная история хронометража, то будут две разные записи о часовых поясах. Поэтому, когда вы говорите "местоположения", если вы имеете в виду два разных города со своими именами часовых поясов в TZDB, то по определению они не принадлежат одному и тому же часовому поясу. Например, Europe/Moscow а также Europe/Volgograd оба в настоящее время в UTC+3 круглый год без летнего времени. Однако в начале 1992 года Москва показала UTC+3, а Волгоград - UTC+4. Их истории до этого отклоняются еще дальше.

С другой стороны, если вы говорите о местоположении, на которое нет конкретной ссылки в TZDB, то существует презумпция выравнивания. Например, Сиэтл находится в тихоокеанском часовом поясе США, все из которых представлены America/Los_Angeles, Потому что нет уникального America/SeattleДанные показывают, что Сиэтл не имеет уникальной истории часовых поясов, чем Лос-Анджелес.

Это сказало - было несколько очень незначительных крайних случаев, которые возникли в прошлом, когда маленький город, который находится на границе между двумя часовыми поясами, должен был выбирать между какой зоной наблюдать. Также случилось так, что небольшой город с одной стороны границы решил неофициально следовать часовому поясу в соседнем более крупном городе на другой стороне границы. Эти изменения иногда упоминаются в списке обсуждения tzdb, но редко регистрируются в данных как отдельная зона.

В этих крайних случаях имейте в виду, что TZDB отслеживает только города, а не региональные границы, которые могут разделять города или поселки. Для этого вам придется перейти на другой источник данных. Лучший из известных мне - это проект Эвана Сироки, построивший границы часовых поясов.

Возможно ли в принципе запросить у tz-db конкретное местоположение, а не имя часового пояса.

Вы должны быть более конкретными о том, что вы подразумеваете под "местоположением". Если вы имеете в виду координаты широты / долготы - тогда данные о строителе часового пояса и проектах, которые их используют, являются маршрутом. Они помогут вам определить идентификатор tzdb, который вы затем сможете использовать с моментным поясом или другими библиотеками.

Другие вопросы по тегам