Я буду использовать ваш пример:
Например, Америка / Детройт и Америка / Нью-Йорк находятся в восточном часовом поясе.Почему эти два местоположения не разделяют одно имя часового пояса?
В TZDB запись Zone
для America/New_York
выглядит следующим образом:
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/New_York -4:56:02 - LMT 1883 Nov 18 12:03:58
-5:00 US E%sT 1920
-5:00 NYC E%sT 1942
-5:00 US E%sT 1946
-5:00 NYC E%sT 1967
-5:00 US E%sT
В то время как запись Zone
для America/Detroit
выглядит следующим образом:
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Detroit -5:32:11 - LMT 1905
-6:00 - CST 1915 May 15 2:00
-5:00 - EST 1942
-5:00 US E%sT 1946
-5:00 Detroit E%sT 1973
-5:00 US E%sT 1975
-5:00 - EST 1975 Apr 27 2:00
-5:00 US E%sT
Чтобы полностью расшифровать это, также необходимы записи Rule
для US
, NYC
и Detroit
(здесь я не буду копировать / вставлять, но вы можете перейти по ссылкам).
Как вы можете видеть, у Детройта были отличия от Нью-Йорка, последний из которых был в 1975 году, когда Детройт начал переход на летнее время немного позже, чем в большей части восточного часового пояса (27 апреля, показанное здесь, против 23 февраля , заданногоПравило US ).
С тех пор, однако, они были одинаковыми. Правила TZDB требуют уникальной зоны для областей, которые были согласованы с 1970 года, и эти области имеют отклонения в 1973 и 1975 годах, поэтому им требуются уникальные идентификаторы зон.
Можно увидеть эту разницу вJavaScript, например, так:
var d = new Date("1975-03-01T00:00:00.000Z"); // Midnight UTC on March 1st
d.toLocaleString("en-US", {timeZone: "America/New_York"}) //=> "2/28/1975, 8:00:00 PM"
d.toLocaleString("en-US", {timeZone: "America/Detroit"}) //=> "2/28/1975, 7:00:00 PM"
Конечно, если в вашем приложении вы никогда не имеете дело с датами, уходящими в далекое прошлое, тогда вы можете просто использовать America/New_York
для представления восточной части США.часовой пояс и пропустите America/Detroit
(и несколько других) - но это полностью ваше решение.
Вам также может быть интересно прочитать файл Theory в tzdbсам, который объясняет концепции и принципы базы данных часовых поясов более подробно.