Tz database

Time Zone Databaseとは、IANAが管理している、世界各地域の標準時や常用時の時間帯情報を収録したデータベースである。主にコンピュータ・プログラムやオペレーティングシステムでの利用を意図している。tz、tzdb、tzdata、zoneinfo databaseなどとも呼ばれる。

元々は、アーサー・デイヴィッド・オルソンが開始したプロジェクトであり、1980年代より複数のボランティアにより更新され続けていた。その事にちなみOlson databaseとも呼ばれる。2011年10月14日よりICANNのIANAが管理することとなった。ポール・エッガートと Tim Parenti が現在のTime Zone Databaseの編集者兼管理者である。

最も目に付く特徴は、ポール・エッガートにより設計されたタイムゾーンの統一的命名規則である。例えば、"America/New_York}}"や"Europe/Paris}}"というような表記法である。データベースは、歴史的なタイムゾーンならびに1970年のUNIXエポックタイムからの、全ての常用時の変更を記録するよう企図されている。また、夏時間のような標準時の変化を示す//遷移//情報も含まれ、閏秒でさえも記録されている。

1. 歴史
-----

1.1. プロジェクトの起源
--------------

プロジェクトの起源は少なくとも1986年にまで遡る。データベース構築のためタイムゾーンや夏時間の履歴を調査するのに現在も使用している重要な情報源は、トーマス・G・シャンクスにより"ACS publications"から1978年以降数版刊行されているアトラス、The American Atlas並びにシャンクスとリック・ポッテンジャーによるThe International Atlasである。幾つかの参照用ソースコードも含め、プロジェクトのデータベースはパブリックドメインに置かれている。概ね年に数回、変更が必要となる場合にデータベースの新版が公開される。

1.2. 訴訟
-------

2011年9月30日、本データベースの著作権侵害を巡ってアストロレーブがオルソンおよびエッガードの2名を提訴した。その結果、2011年10月6日、tz databaseの維持管理並びに頒布の停止がオルソンより発表された。同時にメーリングリストの閉鎖も発表され、最新のアーカイブが配置されていたNIH内のFTPサイトの運営は停止した。オルソンのメールによると、「今回の閉鎖はtz databaseに関連する民事訴訟が同年9月30日に提起され」訴訟係属にある為と述べている。一方アメリカ合衆国マサチューセッツ地区連邦地方裁判所に提出された申立訴状によると、原告は"//ACS Atlas//"のデータを自社ソフトウェアに利用する企業、アストロレーブであり、「tz databaseがアストロレーブが持つ著作権を侵害した」と主張している。

訴状によると、本件は先に述べた通りtz databaseが参考として使用している2つのアトラス、//The American Atlas//と//The International Atlas//をtz databaseメンテナが著作物として利用したか否かという点が主な争点となる。とりわけ「tzメーリングリスト・アーカイブ」並びに当該データベースと共に維持管理されているいくつかの「補助的な連結収集物」に、アトラスの「データ」が「無断転載」されたと原告は主張している。しかし、当該データベース自体は実際には申立の対象としてはなっていない。この申立ではタイムゾーン・データの経年変化を記録する「編集物」のみが関係しており、現行のtz databaseの全世界のタイムゾーンを記録したテーブルは対象となっていない。

tz databaseは、構成ファイルのコメント・テキストを見れば分かる通り、タイムゾーン・データの利用の程度を検証できるよう、当該アトラスを含む情報源を明らかに参照している。このアトラスはtz databaseの構築に都合の良い情報源の一つである。そして当該データベースにアトラスから複製された「事実に基づくデータ」が多く含まれている。著作権は通常「事実」に付随するものではないが、「創作的表現」に対しては発生し得るものであり、当該データベースは当該アトラスの断片を引用したのではなく、主としてタイムゾーン・データを独自の形式で「複製した」のであり、一目見て訴訟申立の根拠は薄弱であると批判されている。加えて、タイムゾーン・データベース全体としても「著作性」はない。その理由は、たとえタイムゾーン・データをアトラスに纏め上げるのに著しい作業量を伴うとしても、アトラスに掲載された情報は完全な事実の収集であり、それ故創作性は無い  からである、と米国著作権法のあり方から見て通常結論付けられる。

2012年2月22日にアストロレーブはタイムゾーンデータが歴史的事実であることを認め、訴訟を取り下げた。

1.3. IANAの管理前
-------------

tz databaseのコードとデータベース本体は、ボランティア集団により管理されていた。アーサー・デイヴィッド・オルソンはコードへ、ポール・エッガートはデータベースに、それぞれ最も多くの変更を加えた人物である。提案された変更点は、tzメーリングリストに送付される。このメーリングリストは、Usenetニュースグループのcomp.time.tzにゲートウェイを提供している。ソースコードはFTPサーバのelsie.nci.nih.govを経由して頒布される。一般に、これらのファイルはDebianのようなソフトウェア・ディストリビューターに採用され、事前コンパイルを行い、ソースコードとバイナリパッケージがディストリビューションの一部として収録される。エンドユーザーは、いくらか遅延を伴うものの、これらソフトウェア・ディストリビューションのアップデート手続きを頼りにするか、直接 ftp://elsie.nci.nih.gov/pub/ からソースコードを入手して、バイナリファイルを自分でビルドするかどちらかの手段をとることができる。

その当時の管理から、類似の方針を基にIANAによる管理へと移行する計画がIETFにより策定された。これはHTTPベースの通信プロトコルを利用する仕組みを持つとされる。

訴訟提起に基づき、オリジナルの頒布用FTPサーバとメーリングリストは閉鎖された。2011年10月7日、ICANNの有志によりメーリングリストのアーカイブが複製され、一時的に仮メーリングリストが開設された。このメーリングリストは引き続きタイムゾーンのメンテナンスの為に利用される。2011年10月14日、IETFから要請を受け、正式にICANNが管理を引き継ぐと発表した。IETF議長ラス・ハウズリーは、商用システムを含む様々なソフトウェアでtz databaseが使用されている以上、管理が滞ることで起こりえる影響は計り知れない」と述べている。

1.4. IANAへの管理移行
---------------

2011年10月14日、本データベースの管理はICANNのIANAへと引き継がれた。IANAはウェブページにて、著作権侵害の申立を受けているデータも含む完全なデータベースのコピーをオンライン上で公開しており、データベースの管理に関する現行ならびに今後の計画も同時に発表した。BCP 175  により Time Zone Database の管理の方法が規定されている。タイムゾーン・コンパイラ等のツールと生テキストのデータベース本体双方がIANA管理下のFTPサーバで頒布されている。

2. データ構造
--------

2.1. ファイルフォーマット
---------------

Time Zone Database はテキストファイルとして公開される。そのファイルは、人が可読な形式であり、ルールとタイムゾーンの遷移情報が一覧化されている。

利用に当たっては、プラットフォーム独立なバイナリファイルにコンパイルされる。バイナリファイルはタイムゾーン毎に1つずつ生成される。参照用ソースコードにはzicと呼ばれるコンパイラが付属しており、同時に、関数localtimeやmktimeといった標準的なAPIを利用してコンパイル済みデータを読み込んだり、利用することができるコードも付属している。これらタイムゾーンの標準的なAPIは標準Cライブラリをはじめとして多くのライブラリに採用されている。とりわけ標準CライブラリはTime Zone Databaseの標準時データをテキスト生データからタイムゾーンコンパイラでコンパイルしてからデータをロードする。GNU Cライブラリとその派生物ではTime Zone Databaseのzicを改変したものを収録している。

Unix系システムでは、オペレーティングシステム・インストール時もしくは、適宜ユーザの指示によりシステム時刻の標準時を指定できる。概ねUTCまたはシステムが設置されている地域の標準時などその他任意の標準時を指定できる。設定の後システムは前述の通りタイムゾーン・テキストをコンパイルする。よってこの場合Time Zone Databaseのアップグレードを行う度にコンパイルし直す必要があるが、概ね現代的なパッケージ管理システムは標準CライブラリもしくはTime Zone Databaseを含むパッケージのアップグレード時に自動的に生テキストデータを再コンパイルする。組み込みLinuxなどのメモリの少ない環境では、コンパイル処理に時間がかかるため、コンパイル済みのパッケージを利用する場合もある。Debian 6.0などではこの方法を採用している。

2.2. タイムゾーンの定義
--------------

Time Zone Database において「タイムゾーン」とは、1970年以来ずっと地域内の全ての時計が合っているような、国における地域のことである。この定義は、一貫した地方時を持つ地理的地域とまず最初に関係がある。これはグリニッジ子午線からの一貫した差分と関係がある他の定義とは異なる。それゆえ、Time Zone Databaseにより定義された各タイムゾーンは、場合によってはUTCからの時間の差分を複数持つ。典型的には、標準時と夏時間双方が同一のタイムゾーンに含まれる。

2.3. タイムゾーンの命名規則
----------------

タイムゾーンは人間が理解しやすいようにするため、例えば"America/New_York"といったような"//地域/////地名//"形式の固有の名称を持っている。また、その選択は英語名もしくはそれと等価な名前を利用するようになっており、名称の句読点や共通の接尾辞は省かれる。アンダースコアはスペースの代わりに利用される。地名部分におけるハイフンはそのまま用いられる。

2.3.1. 地域
---------

「//地域//」とは、大陸名、大洋名、もしくは"//Etc//"という特殊な名前のいずれかを指す。大陸名と大洋名一式には現在、次が含まれる。アフリカ、アメリカ、南極、北極、アジア、大西洋、オーストラリア、ヨーロッパ、インド、太平洋。

"Etc"という特殊な地域は、幾つかの管理されるタイムゾーン、とりわけUTCを表す"Etc/UTC"のために使用される。POSIX形式、SUSに従うため、"Etc/GMT"を始めとするこれらのタイムゾーン名は、多くの人の予想とは正反対となる符号を持つ。この形式では、タイムゾーン名の符号に関して、GMTから見て西側のタイムゾーンは、正の符号、東側は負の符号を持つ。例えば、Time Zone Databaseのタイムゾーン名"Etc/GMT-14"はGMTから14時間進んでいる、換言すれば、UTCから14時間分東のタイムゾーンに位置する。すなわち、UTC+14と同じタイムゾーンを指している。

2.3.2. 地名
---------

「//地名//」とは、該当地方内の特定の地名を指し、大抵都市や小規模な島嶼に当たる。このスキームにおいては国名は使用されない。主な理由として、政治的な変更や国境変更は頻繁にあるため国名を利用するスキームではデータの更新作業が煩雑になることが挙げられる。大都市の名前はより永続的な傾向がある。しかしながら、データベースの管理者は、ISO 3166-1 alpha-2国名コードのそれぞれにおいて、少なくとも1つのタイムゾーンを含むようにしており、そして、データベースへのユーザインタフェースの多くはこのことを利用している。加えて、将来タイムゾーンが変更された際に地域が異なるタイムゾーンに分断されないように地名の選択は地理的にコンパクトになるよう望まれている。

通常、地名には、全体のタイムゾーンを代表するある地方の人口の最も大きい都市が選択される。しかしながら、幅広く知られている名前やより曖昧ではない名前を持つその他の都市が存在する場合、そちらが選択される可能性がある。date=April 2010}}都市名が変更されたという場合においては、旧名と新規の名称双方が同じデータベース・エントリを指し示すようにするため、将来のバージョンにおいて「別名」date=April 2010}}を作成するという慣習がある。

時には「//地名//」がそれ自身、複合的な名称で表現される場合がある。"America/Indiana/Indianapolis"というタイムゾーンがそのような例である。このような3段階形式の名称は現在、"America/Argentina/..."、"America/Kentucky/..."、"America/Indiana/..."、そして"America/North_Dakota/..."以下のゾーンにのみ存在する。

選択された地名は完全なその地域の代表となる。そのため、すべての都市名がその名にちなんで命名されるタイムゾーンを持つとは限らない。例えば、"America/Boston"というタイムゾーンは存在しない。更に、現時点で所属するタイムゾーンが同一であるが互いに異なる都市は、歴史的な意味で別名が付けられている場合や、または同じタイムゾーンに属するが異なる別々の都市が歴史的な意味で異なる国に分断された場合により、たとえ現時点ではタイムゾーンが一致しているにもかかわらず、将来異なるタイムゾーン名を持つ可能性もある。

2010年5月1日、アーサー・デイヴィッド・オルソンは地名の文字数の限度を14に定めることを述べている。その理由は例えばバイア・デ・バンデラスのような地名から"de"を削り、識別子を"Bahia_Banderas"のみに限定することを正当化するためである。

2.3.3. 表記例
----------



2.4. 各タイムゾーンのデータ格納
------------------

大抵は標準時と夏時間の遷移のことを指すが、UTCからの複数の時間差分を持つ各タイムゾーン向けに、Time Zone Database は時刻の遷移を正確に記録している。このフォーマットは、遷移の日時の変化も適宜調節できる。

2.4.1. zone1970.tab
-------------------

zone1970.tab はライセンスがパブリックドメインの Time Zone Database のファイルの1つである。かつては zone.tab が使われていたが、現在は zone1970.tab の方を使うことが推奨されており過去との互換性のために zone.tab が残されている。zone1970.tab にはタイムゾーンが一覧で記述されている。2014年7月19日までの zone.tab には、列、行が表す区分はファイル内のコメントに次のように記述されていた。

This file contains a table with the following columns:
1. ISO 3166 2-character country code. See the file `iso3166.tab'.
2. Latitude and longitude of the zone's principal location
in ISO 6709 sign-degrees-minutes-seconds format,
either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
first latitude , then longitude .
3. Zone name used in value of TZ environment variable.
4. Comments; present if and only if the country has multiple rows.
Columns are separated by a single tab.
The table is sorted first by country, then an order within the country that
 makes some geographical sense, and
 puts the most populous zones first, where that does not contradict .参考訳:

当ファイルは次の各列要素から成る表で構成される:
1. ISO 3166 2-文字による国名コード。詳しくはファイル`iso3166.tab'を見よ。
2. タイムゾーンの主要都市の緯度、経度をISO 6709の
符号-度-分-秒フォーマットで表記。
フォーマットは+-DDMM+-DDDMMまたは+-DDMMSS+-DDDMMSSのいずれかを選択。
始めに北回りを正の符号にとる緯度、続いて東回りを正の符号にとる経度を記載。
3. 環境変数TZの値に含まれるタイムゾーン名を記述。
4. コメント; 該当する国の記述が複数の行に渡る場合に限り記載。
各列要素は単一のタブで区切られる。
表の各行のデータは国名によってまず区分けられ、続いて、次の順序に従い各国のデータを並べ替える。
 幾つかの地理的な意義による、かつ
 最大の人口を持つゾーンを先頭に配置する。ただしと矛盾しないようにすること。

3. 区域
-----

3.1. 1970年以後での複数国に及ぶタイムゾーン
--------------------------

1970年以後において、2つの国に及ぶ地域を含むタイムゾーンが2つ存在する。tzdataはISO 3166-1の規格通りの国ならびに国名コードの定義に従っている。

Asia/Aden - 1990年まではこのタイムゾーンは2つの国、北イエメン 、イエメン・アラブ共和国と南イエメンに分かれていた。
Europe/Berlin - 1990年まではこのタイムゾーンは西ドイツと東ドイツに分かれていた。

3.2. 1970年以前のデータ
----------------

1970年より以前のデータに関しては、地域のタイムゾーンを同定する都市名を修正するよう注意を払っている。しかし、必ずしも地域全体でそのような修正が必要とは限らない。なぜなら1970年時点からの標準時を区別する場合にのみ、新しい地域が作成されるからである。

例えば、1963年10月23日から1963年12月9日までブラジル、ミナスジェライス州、エスピリトサント州、リオデジャネイロ州、サンパウロ州は夏時間制度を採用していた。しかし、1970年からの標準時はこの地域全体では同一であったため、タイムゾーンAmerica/Sao_Pauloを分割する要求は却下された。

ドイツ時間の例では、トライゾーン内でベルリンと異なる夏時間を採用していた1945年に関しては、タイムゾーンEurope/Berlinは正しい時刻を示していないとされる。

3.3. 誤情報
--------

かつて誤ったタイムゾーンが含まれていたケースがあった。とりわけ日本標準時における誤りについては、記事"日本標準時#South Ryukyu Islands時間"等を参照されたい。これは前述した//The International Atlas//の第3版に誤った記述が含まれていたため起こった。

4. 利用法と拡張
---------

4.1. タイムゾーンの境界
--------------

経緯度に基づく地理的な「境界線」の情報はTime Zone Databaseの一部ではない。しかしながら、境界線に関する情報は存在し、エリック・ミュラーが、Time Zone Databaseに収録されている「タイムゾーンに関する『境界線』」をベクター図形のイメージに表現したものを一般に公開している。このベクター図形を利用すると、地球上の経緯度上の各地点に位置づけられる、Time Zone Database上のタイムゾーンを決定できる。

4.2. その他の標準の利用
--------------

CLDRはUN/LOCODEを地域同定に利用している。この実装は全ての識別子が国家を参照しており、Time Zone Databaseの開発元が避けたいと思っている事項も含まれている。

4.3. ソフトウェアシステムにおける利用
---------------------

Time Zone Database は多くのコンピュータシステム上でタイムゾーン処理とタイムゾーン変換のために利用されている。以下のような例が挙げられる。

オペレーティングシステム
Microsoft Windows 以外のほとんどのOSで使われている。マイクロソフトは独自に時間帯の情報収集を行っている。航空業界も独自のIATAタイムゾーンがある。
Unix系
BSDの派生システム、とりわけBSDの子孫と呼ばれる、FreeBSD、NetBSD、OpenBSD、DragonFly BSD。またmacOSも含まれる。これらのOSはTime Zone Databaseが処理するコードをOS固有の「TZ POSIX API実装」として参照している。
GNU Cライブラリとそれを利用するシステム。例えばGNUオペレーティングシステム  と大部分のLinuxディストリビューション、その他BeOS、Haiku、Nexenta OS、Cygwin。
System V Release 4の派生システム、例えばSolarisとUnixWare。
IBM AIX 6.1以降。
Tru64
UNICOS/mp
IRIX
OpenVMS プログラミング言語
Java Runtime Environment。2002年の1.4リリースより利用している。
Perlモジュールである、DateTime::TimeZone、DateTime::LeapSecondが2003年より利用している。
PHPは2005年の5.1.0リリースより採用している。
Pythonは dateutil や pytz などのパッケージ。
.NET Frameworkは、Windows 以外では IANA の Time Zone Database が使われている。Windows では TimeZoneConverter や zoneinfoなどのライブラリ。
Embarcadero Delphi用モジュールのdelphi-tzdb。 その他ソフトウェア
Oracle Database。2004年の10gリリースから採用している。
PostgreSQL。2005年のリリース8.0から採用している。
ファームウェア内で利用するIP clocks、その他組み込みソフトウェア。その他、Olson timezone IDというものがユニコードコンソーシアムのCLDR並びにICUで利用されている。例えば、「CLDR Windows → Tzid」テーブルは、Microsoft Windows time zone IDsから標準的Olson名へのマッピングを行う。

5. 実例
-----

5.1. Unix系システム
--------------

Linuxディストリビューションをはじめとする多くのUnix系システムにおいて、タイムゾーンデータが格納されている標準的なディレクトリパスは/usr/share/zoneinfo/である。ファイルの形式識別用コマンドであるfile は、次の実行例のように、バイナリ形式のタイムゾーンファイル内部からデータを読み出し、人間が理解しやすいテキスト形式で表示する機能をサポートしている。

Unix系システムにおいて、環境変数TZにTime Zone Databaseのタイムゾーンを指定しdateコマンドの出力結果が変化する様子を示す。シェルのロケールは日本に指定されているものとする。またOSのインストール時に指定したタイムゾーンは日本標準時であるものとする。タイムゾーン設定はGNU Cライブラリでは/etc/localtimeファイルに保存され、コンパイル済みタイムゾーンデータは/usr/share/zoneinfoディレクトリ以下に保存されることが多いとされる。

dateコマンドは引数に何も指定しないで実行した場合、デフォルトではシステム時刻と/etc/localtimeのシステム・タイムゾーン設定を検知し両者を表示する。 日本標準時を明示的に指定する場合は以下となる。フランスは中央ヨーロッパ時間を採用している。TZに指定した場合の結果は以下となる。 フランスでは4月は夏時間施行期間であるため、3ヶ月後は、POSIX形式では、グリニッジ子午線の西回りを正の符号で表記する。符号に注意せよ。 TZに無効な文字列を指定した場合、すべて協定世界時であると見なされる。 よくある間違いはTZにJSTと指定してしまうことである。これだとTZにUTCを指定した場合と同じになってしまう。POSIXのTZ環境変数の表記に合わせるならば、JST-9と指定しなければならない。tz databaseの作者はtz databaseが利用できる環境ならば、このようなPOSIX表記を利用せずとも、最初に挙げたAsia/Tokyo}}のような〈大州〉/〈地域〉}}表記を利用した方が誤りを軽減できると述べている。

6. 脚注
-----

6.1. 注釈
-------

6.2. 出典
-------

7. 関連項目
-------

標準時
夏時間
システム時刻
UNIX時間
環境変数 - Unix系システムの環境変数TZには、現在のシステム時刻のタイムゾーンが設定される。デフォルトではOSインストール時に指定した標準時が設定されている。
date  - 時刻表示コマンド。環境変数TZを変更することで、時刻を任意のタイムゾーンで表示できる。
Unix系システムではTime Zone Databaseと以下のハードウェア、ソフトウェアを組み合わせることでシステム時刻を常に正しい時刻に同期できる。それぞれハードウェア的な時刻とソフトウェア的時刻をうまく利用してシステム全体の時刻を管理している。Microsoft Windowsオペレーティングシステムでも同様の仕組みを持っている。
リアルタイムクロック  - Time Zone Databaseが利用するオペレーティングシステム・クロックとは別個に保持しているハードウェア内部のクロック。GNU/Linuxなどでは、util-linuxコマンドなどでOSブートアップ時にRTCを読み出し、OSのシステム時刻を設定する。シャットダウン時には今度は逆にhwclockがシステム時刻をRTCに書き込む。
Network Time Protocol , NTPサーバ - ネットワーク経由の時刻同期プロトコル、時刻同期サーバ。外部の信頼できるNTPサーバに、システムで運用するNTPデーモンがアクセスする、または時刻同期コマンドを利用することでシステム時刻を正しい時刻に同期できる。

8. 外部リンク
--------

8.1. IANA管理下のリソース
-----------------

[1] - 公式ホームページ
[2] - GitHub上のソースコード
[3] - メーリングリスト
[ftp://ftp.iana.org/tz/ IANA管理下のFTPサーバ]

8.2. オルソン・エッガート管理によるかつてのリソース
----------------------------

[4] - オルソン・エッガートが管理していたかつての tz database のホームページ

8.3. その他
--------

[5]。
[6]。
[7]。
[8]。