01-06-2023
tz database (с англ. timezone database — база данных часовых поясов) или zoneinfo database (база данных информации о зонах) — совместно собираемая информация о мировых часовых зонах, предназначенная для использования в первую очередь операционными системами и компьютерными программами[2]. Иногда она упоминается как «база данных Олсона» (Olson database), так как была основана Артуром Дэвидом Олсоном (Arthur David Olson)[3]. Редактором и хранителем базы является Пол Эггерт (Paul Eggert)[4].
Её самая известная возможность — унифицированное именование часовых поясов, разработанное Полом Эггертом, такое, как «Америка/Нью-Йорк» и «Европа/Париж»[5]. В базе данных пытаются собрать информацию обо всех исторических часовых поясах и всех их гражданских изменениях начиная с 1970 года, эпохи юникс[6]. Она также включает в себя информацию о переходе на летнее время, и даже запись високосных секунд[7].
Истоки проекта восходят по крайней мере к 1986 году[8]. База данных проекта, а также некоторые исходные файлы, находятся в общественном достоянии[9]. Новые версии базы данных публикуются, как правило, несколько раз в год[10].
Осенью 2011 года компания Astrolabe подала в суд иск по обвинению Олсона и Эггерта в нарушении авторских прав. В связи с этим 6 октября Олсон прекратил доступ к ftp-серверу базы данных и публикацию списка рассылкиhttp://www.iana.org/time-zones. В феврале 2012 года Astrolabe отозвала свой иск, принеся извинения общественности — «Наш судебный иск против мистера Олсона и мистера Эггерта был основан на превратном понимании закона. Теперь мы понимаем, что исторические факты не являются ничьей собственностью и, соответственно, отзываем свою претензию. Мы глубоко сожалеем о проблемах, которые появились из-за нашего иска у мейнтейнеров базы данных TZ и у пользователей интернета»[12].
Содержание |
В базе tzdata содержится детальная информация обо всех часовых поясах во всех регионах мира:
Важной особенностью базы tzdata является то, что она хранит не только текущее состояние всех мировых часовых поясов (то есть текущие правила расчёта локального времени относительно UTC в каждом регионе мира), но все изменения этих правил расчёта локального времени для всех регионов за всё время с начала UNIX-эпохи (1 января 1970 года). Например, если какая-то страна с определённого момента начинает использовать другой часовой пояс, меняет дату перехода на летнее время или отменяет переход, то эта информация сохраняется в tzdata с точностью до секунды, когда это произошло.
Благодаря этой особенности, можно вести точные расчёты времени для разных стран за разные промежутки времени. Например, локальное время:
Поскольку в 2011 году в России был отменён переход на летнее время[13], то в один исторический период часовая зона Москвы соответствовала UTC +03:00, а в другой исторический период та же самая часовая зона соответствовала уже UTC +04:00. База tzdata помогает разрешить подобные неоднозначности, так как там хранится подробная информация о том, когда и как рассчитывалось время в каждом из часовых поясов в каждый из временных периодов с 1970 года.[14]
Временные зоны имеют уникальные имена в форме «Район/Расположение» (Area/Location), например «Америка/Нью-Йорк», чтобы их было легче воспринимать людям. Выбраны англоязычные названия или их эквиваленты, опускается пунктуация и общие суффиксы, пробел заменяется на подчёркивание, используются дефисы.
Район включает имена континентов, океанов и «прочее» (Etc). В набор континентов и океанов входят: Африка, Америка, Антарктика, Северный Ледовитый океан, Азия, Атлантический океан, Австралия, Европа, Индийский океан и Тихий океан.
tz database публикуется как набор текстовых файлов со списком правил и зон переходов в человекочитаемом формате. Для использования эти текстовые файлы компилируются в набор независимых от платформы бинарных файлов для каждой временной зоны. Код включает в себя компилятор под названием zic (zone information compiler), а также код для чтения этих файлов и использования их в стандартных API как localtime()
и mktime()
.
В большинстве UNIX-подобных ОС скомпилированные файлы с описанием часовых зон из пакета tzdata можно найти здесь: /usr/share/zoneinfo/[14].
Версии tzdata нумеруются следующим образом: вначале четырёхзначное число, означающее год выхода этой версии, затем одна буква латинского алфавита по порядку: a, b, c, d и т. д. по мере выхода новых версий tzdata в течение одного года. Например, в 2010 году выходили версии tzdata: 2010a, 2010b, 2010c и далее до версии 2010o. В 2011 году выходили версии tzdata: 2011a, 2011b, 2011c… и далее до 2011n[15].
Код и база данных управляются группой добровольцев. Артур Дэвид Олсон вносит основные изменения в код, а Пол Эггерт — в базу данных. Предложенные изменения высылаются в список рассылки, передающий сообщения в группу Usenet comp.time.tz. Исходные файлы распространяются через FTP-сервер elsie.nci.nih.gov. Обычно эти файлы принимаются от дистрибьюторов программного обеспечения, таких как Debian, компилируются, а затем исходники и бинарные файлы упаковываются как часть раздачи. Конечные пользователи могут или полагаться на процесс обновления своего программного обеспечения, или получить код непосредственно из источника на ftp://elsie.nci.nih.gov/pub/.
CLDR использует UN/LOCODE для определения регионов[16]. Это означает, что идентификаторы ссылаются на страны, чего создатели tz database хотели избежать.
База данных используется для обработки временной зоны и преобразований во многих программных комплексах, включая:
ID базы Олсона также используются в Unicode Common Locale Data Repository (CLDR) и International Components for Unicode (ICU). Например, CLDR Windows → Tzid table maps Microsoft Windows[23].
|
|
---|---|
−12 | −11 | −10 | −9:30 | −9 | −8:30 | −8 | −7 | −6 | −5 | −4:30 | −4 | −3:30 | −3 | −2:30 | −2 | −1 | −0:44 | −0:25 | UTC (0) | +0:20 | +0:30 | +1 | +2 | +3 | +3:30 | +4 | +4:30 | +4:51 | +5 | +5:30 | +5:40 | +5:45 | +6 | +6:30 | +7 | +7:20 | +7:30 | +8 | +8:30 | +8:45 | +9 | +9:30 | +10 | +10:30 | +11 | +11:30 | +12 | +12:45 | +13 | +13:45 | +14 |
|
В некоторых странах северного и южного полушарий используется летнее время (DST). Курсивом выделены часовые пояса, не использующиеся в настоящее время. |
Tz database.