Пользователь
14 октября 2011 в 14:40

Администрирование → Tzdata — глобальная база знаний о часовых поясах

Если нам где-либо (например, в каких-то приложениях) требуется работать не только с универсальным временем UTC, но и с местным временем в различных точках Земли, то здесь встаёт вопрос о необходимости некой базы знаний о том, как вычисляется локальное время относительно UTC в различных регионах мира.

Многие Unix-like системы для хранения информации обо всех мировых часовых поясах используют базу tzdata (она же tz database, она же zoneinfo database, она же Olson database — в честь Артура Олсона, основателя этой базы знаний).

Впервые начал собирать эту базу Артур Дэвид Олсон (Arthur David Olson), позже к этому проекту подключились и другие участники. Сейчас же основным коммитером новой информации в базу tzdata является Пол Эггерт (Paul Eggert), а Артур Олсон сейчас занимается разработкой и поддержкой утилит для работы с локальным временем и данными о часовых поясах (пакет tzcode).

В базе tzdata содержится детальная информация обо всех часовых поясах во всех регионах мира:
— координатная привязка основных населённых пунктов, характеризующих часовой пояс;
— смещение локального времени в различных регионах относительно универсального времени UTC;
— указано, в каких регионах применяется летнее время (DST), насколько оно смещается относительно стандартного, указаны точные даты и время переключения на летнее время и обратно в различных регионах в различные периоды;
— информация о високосных секундах (leap seconds).

Важной особенностью базы tzdata является то, что она не просто хранит текущее состояние всех мировых часовых поясов (т.е. текущие правила расчёта локального времени относительно UTC в каждом регионе мира), она ещё хранит все изменения этих правил расчёта локального времени для всех регионов за всё время с начала Unix-эпохи (1 января 1970). Допустим, какая-то страна своим политическим решением перешла в другой часовой пояс — эта информация есть в tzdata с точностью до секунды, когда это произошло; какая-то страна изменила дату перехода на летнее время — эта информация есть в tzdata с точностью до секунды, когда это произошло; какая-то страна отменила переход на летнее время — эта информация есть в tzdata с точностью до секунды, когда это произошло и т.д.

Благодаря этой особенности, можно вести точные расчёты времени для разных стран за разные промежутки времени.

Например, локальное время:
2010-12-01 14:00 (MSK) — соответствует 2010-12-01 11:00 (UTC)
2011-12-01 14:00 (MSK) — соответствует 2011-12-01 10:00 (UTC)
Казалось бы, одинаковое название часового пояса и одинаковое локальное время (только год разный). Но в один исторический период часовая зона MSK соответствовала UTC+03:00, а в другой исторический период та же самая часовая зона MSK соответствовала уже UTC+04:00.
И благодаря базе tzdata все эти неоднозначности легко решаются, т.к. там хранится подробная информация о том, когда и как рассчитывалось время в каждом из часовых поясов в каждый из временных периодов (с 1970 года).

Если иметь только текущее состояние всех часовых зон (без исторической памяти), то подобные неоднозначности локальных часовых зон никогда не разрешить. И база tzdata как раз и решает задачу сбора и консолидации всей этой информации о часовых поясах со всего мира.

Информация об исчислении времени в различных регионах мира для базы tzdata собирается совместно участниками opensource-сообщества со всего мира, затем присланная информация проверяется, обсуждается, уточняется, консолидируется и в итоге коммитится в файлы tzdata. Исходники tzdata содержат всю информацию обо всех часовых поясах в текстовом человекочитаемом виде с комментариями и пояснениями. Далее эти текстовые файлы компилируются (утилитой zic) и в системах используются уже в скомпилированном бинарном виде. Причём скомпилированные файлы tzdata, хоть и бинарные, но они не содержат исполняемого кода и платформонезависимы. В большинстве unix-подобных ОС скомпилированные файлы с описанием часовых зон из пакета tzdata можно найти здесь: /usr/share/zoneinfo/

Название часовых поясов в базе tzdata указывается в формате Area/Location (Регион/Город), например, Europe/Moscow, Europe/Minsk, Asia/Omsk, Asia/Magadan, America/New_York и т.д.
Полный список мировых локаций (с координатной привязкой), с которыми проассоциированы мировые часовые пояса, можно найти в файле zone.tab, который обычно находится в директории tzdata: /usr/share/zoneinfo/zone.tab

Официальные ресурсы проекта tzdata:
HTTP: http://cs.ucla.edu/~eggert/tz/
FTP:: ftp://elsie.nci.nih.gov/pub/
(FTP-сервер временно закрыт на время судебного разбирательства).

Файлы проекта tzdata на официальных серверах ICANN:
HTTP: http://www.iana.org/time-zones
FTP: ftp://ftp.iana.org/tz/
Rsync: rsync://rsync.iana.org/tz/

Временные зеркала проекта tzdata:
HTTP:
http://www.twinsun.com/tz/tz-link.htm
http://tzmirror.appealingapps.de/
http://tzmirror.sunbase.org/
http://www.mailstation.de/tzmirror/
http://www.foo.be/mirrors/tzmirror/
http://www.localhost.lu/mirrors/tzmirror/
FTP:
ftp://tzmirror.appealingapps.de
ftp://munnari.oz.au/pub

Информация, собранная в tzdata, распространяется свободно для всех желающих без каких-либо лицензионных ограничений (public domain). Любой может свободно взять (как в исходниках, так и в бинарном виде) и использовать её в своих приложениях/библиотеках/сервисах. И многие разработчики/вендоры дистрибутивов ОС (в частности Linux/BSD/MacOS) и различного ПО именно так и делают.

В мире opensource (да и не только) база tzdata де-факто является стандартным источником информации обо всех мировых часовых поясах и истории их изменений. Базу tzdata используют все GNU/Linux-дистрибутивы, BSD-системы (FreeBSD, NetBSD, OpenBSD, DragonFly BSD), Solaris, UnixWare, AIX (6.1 и выше), Cygwin а также Mac OS X и некоторые другие unix-like дистрибутивы. Мобильные ОС: Android, Apple iOS, Maemo/MeeGo тоже используют tzdata. Кроме того, данные из tzdata используется в ряде СУБД: MySQL, Oracle DB, PostgreSQL и др., а также в различных языках, фреймворках, библиотеках, модулях: PHP5, Perl (модули DateTime::TimeZone и DateTime::LeapSecond), Python (модуль pytz), GNU C Library (glibc), .NET Framework (модуль zoneinfo), Java Runtime Environment и др.

Благодаря единой глобальной базе знаний tzdata, каждому разработчику ОС и ПО не нужно самостоятельно собирать и поддерживать внутри своего проекта в актуальном состоянии информацию о мировых часовых поясах. Все её получают из единого источника, и везде она идентична (если вовремя обновлять tzdata).

Версии tzdata нумеруются следующим образом. Сначала четырёхзначное число, означающее год выхода этой версии, а потом одна буква латинского алфавита по порядку: a, b, c, d… и т.д. по мере выхода новых версий tzdata в течение одного года. Например, в 2010 году выходили версии tzdata: 2010a, 2010b, 2010c… и далее до версии 2010o. В 2011 году выходили версии tzdata: 2011a, 2011b, 2011c… и далее до 2011l (на день написания этой статьи это пока последняя версия tzdata).

Если вы используете какой-либо Linux-дистрибутив, который вы регулярно обновляете из репозиториев, то скорее всего последняя версия пакета tzdata уже установлена у вас в системе.
Даты выхода нескольких недавних релизов tzdata на примере Ubuntu:
12 сентября 2011 — исходники tzdata обновились до версии 2011j;
14 сентября 2011 — пакет tzdata обновился до версии 2011j в апстриме Ubuntu (Debian Unstable);
20 сентября 2011 — пакет tzdata 2011j поступил в основной репозиторий Ubuntu;
26 сентября 2011 — исходники tzdata обновились до версии 2011k;
26 сентября 2011 — пакет tzdata обновился до версии 2011k в апстриме Ubuntu (Debian Unstable);
04 октября 2011 — пакет tzdata 2011k поступил в основной репозиторий Ubuntu;
10 октября 2011 — исходники tzdata обновились до версии 2011l (на момент написания статьи пакетов под Ubuntu ещё не было).

В Linux-дистрибутивах с пакетными менеджерами можете просто посмотреть версию текущего установленного пакета tzdata. Например, в Debian/Ubuntu это можно сделать командой:
dpkg -s tzdata |grep Version

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

Правовые трудности проекта tzdata


30 сентября 2011 — в федеральный суд США в Бостоне поступил гражданский иск по поводу незаконного использования в tzdata информации, взятой из программных продуктов «ACS Atlas»/«ACS International Atlas»/«ACS American Atlas», которые компания Astrolabe, Inc. распространяла под коммерческой лицензией, и на которые она имеет интеллектуальные права.
Истец по этому делу: компания Astrolabe, Inc.
Ответчики: Артур Дэвид Олсон и Пол Эггерт (мейнтейнеры и координаторы проекта tzdata).
(топик на Хабре об этом)

6 октября 2011 — Артур Девид Олсон в списках рассылки проекта tzdata (Newsgroups: gmane.comp.time.tz) сообщил, что в связи с этим судебным преследованием он вынужден на всякий случай до решения суда остановить работу официального FTP-сервера со всеми файлами проекта tzdata.
Сразу после этого другие участники проекта tzdata открыли несколько временных HTTP/FTP-зеркал, чтобы доступ к этим файлам всё же мог получить любой желающий (см. выше временные зеркала проекта tzdata)

14 октября 2011 — международная организация ICANN выпустила пресс-релиз (PDF), в котором сообщила, что они получили предложение поддержать проект TZ Database (tzdata) и объявили, что они берут на себя поддержку проекта tzdata пока на временной основе.
Будущее развитие и поддержка единой глобальной стандартизованной базы часовых зон будет регламентироваться документом, который уже разрабатывается IETF. С черновиком этого документа можно ознакомиться здесь:
tools.ietf.org/html/draft-lear-iana-timezone-database-04

Судебное разбирательство по этому делу ещё не закончено (на момент написания этой статьи).

 
CC BY License logo
Автор статьи: Роман Тик <ya.roman.tik {аt} yandex.ru>
Текст статьи распространяется на условиях лицензии «Creative Commons Attribution 3.0 Unported» (CC BY 3.0). Вы можете свободно копировать, редактировать и использовать в любых целях этот текст при обязательном указании авторства.
Роман Тик @roman_tik
карма
0,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Администрирование

Комментарии (12)

  • +2
    Спасибо!

    Обновил статью на Википедии: ru.wikipedia.org/w/index.php?title=Tz_database&stable=0
  • 0
    А ведь недавно был топик, в котором говорилось, что «TZ database» закрыта по судебному иску. Или я что-то не так понял?
    • 0
      Закрыт их фтп-сервер на время судебного разбирательства
      • +2
        то есть сам… эээ… сервис продолжает работать? За лин-сервера можно не бояться?
        • 0
          Так нет же никакого онлайн-сервиса сервиса. Есть просто репозиторий, в котором собирается и накапливаются информация о мировых часовых поясах. Мейнтейнеры Linux-дистрибутивов по мере обновления этой информации берут её оттуда, компилируют и распространяют в виде пакетов как обновления своих Linux-дистрибутивов.

          Представьте, что вдруг выключат один из серверов, на котором хранится репозиторий Ubuntu. От этого же у всех на компьютерах Ubuntu вдруг не прекратит работать. И вы не будете переживать за работоспособность Linux-компьютеров. С выключением сервера tzdata то же самое.
        • 0
          Пакет — он «оффлайновый». За сверкой какую зону когда использовать он каждый раз в сеть не лезет — все хранится локально в скомпилированном виде.
          Из-за того, что закрыт сервер могут быть проблемы только с выпуском очередных версия проекта. На работоспособности серверов, которые используют данный проект это никак не скажется.
          • 0
            да я знаю что оффлайновый ) Просто по сути это сервис — без регулярного выпуска обновлений установленный пакет может быстро потерять актуальность, что не есть хорошо.
            • +1
              Вообще в работоспособности проекта tzdata и в его копирайтной независимости заинтересованы далеко не только какая-то кучка энтузиастов. Ведь tzdata используют такие IT-гиганты, как IBM, Oracle, Red Hat, Google, Apple и многие другие.

              И если вдруг иск против мейнтейнеров tzdata будет удовлетворён, ничто же не помешает этим копирайтным тролям из Astrolabe, Inc. троллить всевозможные IT-компании с требованием выплатить им денег или удалить tzdata из своих дистрибутивов.

              Было бы неплохо, если бы кто-то из IT-гигантов наконец взял tzdata под своё покровительство, предоставил бы юристов для отбивания атак копирайтных троллей. Параллельно переписал бы «спорные части» текстов tzdata на основе открытых свободных источников (с сылками на таковые). Ну и ещё опционально можно было бы передать координирование проекта tzdata под юрисдикцию какой-нибудь международной организации по стандартизации.
    • +1
      > А ведь недавно был топик, в котором говорилось, что «TZ database»
      > закрыта по судебному иску. Или я что-то не так понял?

      В этой статье есть ссылка на тот топик.

      Действительно Артур Девид Олсон в списках рассылки проекта tzdata (Newsgroups: gmane.comp.time.tz) 6 октября 2011 сообщил, что 30 сентября 2011 в федеральный суд США в Бостоне поступил гражданский иск по поводу незаконного использования в tzdata информации, взятой из программных продуктов «ACS Atlas»/«ACS International Atlas»/«ACS American Atlas», которые компания Astrolabe, Inc. распространяла под коммерческой лицензией, и на которые она имеет интеллектуальные права.

      Истец по этому делу: компания Astrolabe, Inc.
      Ответчики: Артур Дэвид Олсон и Пол Эггерт (мейнтейнеры и координаторы проекта tzdata).

      С документами по этому судебному делу (в формате PDF) можно ознакомиться здесь:
      ia600700.us.archive.org/26/items/gov.uscourts.mad.139342/
      Там в частности есть исковое заявление.

      В связи с предъявленными обвинениями он был вынужден пока отключить FTP-сервер проекта на всякий случай до решения суда.
      Впрочем, данные с этого FTP сейчас доступны на зеркалах, сделанных другими участниками проекта tzdata:
      ftp://tzmirror.appealingapps.de
      ftp://munnari.oz.au/pub

      Чем там дело закончится, пока неясно. Судебных слушаний ещё не было.
  • 0
    Спасибо, хороший и подробный рассказ. А то многие во время обсуждения суда с Артуром Дэвидом Олсоном считали, что это просто список всех таймзон.
    • 0
      > считали, что это просто список всех таймзон.

      Ну это только те, кто не читает комментарии ;)
  • 0
    Возможно, администраторов систем, использующих glibc, заинтересует это: bugs.gentoo.org/show_bug.cgi?id=386071

    % time ./test
    Fri Oct 7 16:02:51 2011

    ./test 3.91s user 0.00s system 99% cpu 3.917 total
    % sudo cp /tmp/goodzone /usr/share/zoneinfo/Europe/Moscow
    % time ./test
    Fri Oct 7 16:03:07 2011

    ./test 1.13s user 0.00s system 99% cpu 1.139 total

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