На типичном *nix-ящике (в /user/share/zoneinfo) находится более тысячи файлов часовых поясов. Многие из них различаются только историческими датами, которые имеют мало отношения к программам, которые заботятся только о недавних датах - или даже только о текущем времени. Но, несмотря на это, естьявляютсяих тонна, и совершенно законно выбрать любой из них в качестве часового пояса для вашей системы, а также использовать любой из них для определенной программы или оболочки, установив переменную окружения TZ. Они все допустимы.
А еще есть файл zone.tab (/usr/share/zoneinfo/zone.tab). В нем перечислено всего лишь чуть больше 400 часовых поясов (414 в моей системе). В нем отсутствуетмногочасовых поясов. Итак, вопрос в том, почему? Почему они не все там? И поскольку они не все там, как решается, какие из них туда поместить?
zone.tab включает код страны, а также долготу и широту для каждого часового пояса, который он перечисляет (что, предположительно, является причиной существования файла), а невсечасовые пояса действительно имеют их (например, UTC не имеет их, и их нет в zone.tab), поэтому ясно, что неткаждыйЧасовой пояс может быть указан в zone.tab. Но почему не все из них, которые соответствуют реальному городу или региону (как большинство из них), указаны в файле? Почему только 414 вместо 1000+, которые фактически доступны?
решение1
Тема под названиемПовторный призыв к включению zone.tabпредлагает некоторое объяснение того, zone.tab
для чего используется.
Его основное применение, по-видимому, заключается в отображении карты городов и их местоположений, что позволяет пользователю выбрать свой часовой пояс, нажав на ближайший к нему город.
Учитывая это, ему не нужно знать все псевдонимы для каждого города, достаточно знать один предпочтительный способ его обозначения. (Но, похоже, он всегда включает по крайней мере один город в каждой стране.)
Остальные псевдонимы для каждой зоны хранятся вtzdataисходный код.
Например, backward
файл имеет
Link Asia/Kolkata Asia/Calcutta
чтобы люди могли использовать как новое, так и старое написание.
Все остальные файлы /usr/share/zoneinfo
сгенерированы из этого исходного кода с использованием zic
.
Но ведь не существует более 600 псевдонимов, так в чем же разница?
Обычно генерируется три версии каждого часового пояса: posix
, right
, и версия часового пояса вашей системы по умолчанию.
$ cd /usr/share/zoneinfo
$ find right -type f | wc -l
581
$ find posix -type f | wc -l
581
$ find . \( -name posix -o -name right \) -prune -o -type f | wc -l
586
Thetzcode Makefile
показывает, как они генерируются, и упоминает причину их появления: posix
игнорирует дополнительные секунды, right
включает их.
Смотрите также:
решение2
По следующей ссылкеhttp://en.wikipedia.org/wiki/Tz_database
База данных часовых поясов в настоящее время поддерживается Управлением по распределению адресов в Интернете.