「Tz database」の版間の差分
Exec second (会話 | 投稿記録) en:tz database (2011年5月3日 (火) 18:17 UTC) より翻訳。 |
(相違点なし)
|
2011年5月8日 (日) 15:41時点における版
作者 | アーサー・デイヴィッド・オルソン(Arthur David Olson) |
---|---|
開発元 | ポール・エッガート(Paul Eggert)、アーサー・デイヴィッド・オルソン |
最新版 |
2011g
/ 2011年4月25日 |
最新評価版 |
N/A
/ N/A |
リポジトリ | |
対応OS | Unix系 |
サポート状況 | 開発中 |
種別 | データベース |
ライセンス | パブリックドメインソフトウェア |
公式サイト | Sources for Time Zone and Daylight Saving Time Data |
tz database(略称はtzdata、別名zoneinfo databaseとも呼ばれる)とは、世界各地域の標準時(time zone、タイムゾーン)情報を共同収録したデータである。主にコンピュータ・プログラムやオペレーティングシステムでの利用を意図している[1]。またデータベースの作成に貢献したアーサー・デイヴィッド・オルソン(Arthur David Olson)にちなみOlson databaseとも呼ばれる[2]。ポール・エッガート(Paul Eggert)はtz databaseの編集者兼管理者である[3]。
最も目に付く特徴は、ポール・エッガートにより設計されたタイムゾーンの統一的命名規則である。例えば、"America/New_York"(en)や"Europe/Paris"(en)というような表記法である[4]。データベースは、歴史的なタイムゾーンならびに1970年のUNIX時間からの、民間における全ての変更を記録するよう企図されている[5]。また、夏時間のような標準時からの遷移も含まれ、閏秒でさえも記録されている[6]。
歴史
プロジェクトの起源は少なくとも1986年にまで遡る[8]。幾つかの参照用ソースコードも含め、プロジェクトのデータベースはパブリックドメインに置かれている[9]。概ね年に数回、変更が必要となる場合にデータベースの新版が公開される[10]。
タイムゾーンの定義
tz databaseの内部定義において、「タイムゾーン」("time zone")とは、1970年から完全に認可を受けた地方時を持つ任意の国家地域または準国家地域のことである[11]。この定義は、一貫した地方時を持つ地理的地域とまず最初に関係がある。これはグリニッジ子午線からの一貫した差分と関係がある他の定義とは異なる。それゆえ、tz databaseにより定義された各タイムゾーンは、場合によってはUTCからの時差が複数あることを示し、また通常標準時と夏時間双方が同一のタイムゾーンに含まれる。
タイムゾーンの命名規則
タイムゾーンは人間が理解しやすいようにするため、例えば"America/New_York"といったような"地域/地名"形式の固有の名称を持っている。また、その選択は英語名もしくはそれと等価な名前を利用するようになっており、名称の句読点や共通の接尾辞は省かれる。アンダースコアはスペースの代わりに利用される。ハイフンも同様に代替文字として利用される。
地域
「地域」("Area")とは、大陸名、大洋名、もしくは"Etc"という特殊な名前のいずれかを指す。大陸名と大洋名一式には現在、次が含まれる。アフリカ(Africa)、アメリカ(America)、南極(Antarctica)、北極(Arctic)、アジア(Asia)、大西洋(Atlantic)、オーストラリア(Australia)、ヨーロッパ(Europe)、インド(Indian)、太平洋(Pacific)。
"Etc"という特殊な地域は、幾つかの管理されるタイムゾーン、とりわけUTCを表す"Etc/UTC"のために使用される。POSIX形式、SUS[12]に従うため、"Etc/GMT"を始めとするこれらのタイムゾーンは、多くの人の予想とは正反対となる符号を持つ。この形式では、GMTから見て西側のタイムゾーンは、正の符号、東側は負の符号を持つ[13][14]。
地名
「地名」("Location")とは、該当地方内の特定の地名を指し、大抵都市や小規模な島嶼に当たる。このスキームにおいては国名は使用されない。主な理由として、政治的な変更や国境変更は頻繁にあるため国名を利用するスキームではデータの更新作業が煩雑になることが挙げられる。大都市の名前はより永続的な傾向がある。しかしながら、データベースの管理者は、ISO 3166-1 alpha-2国名コードのそれぞれにおいて、少なくとも1つのタイムゾーンを含むようにしており、そして、データベースへのユーザインタフェースの多くはこのことを利用している。加えて、将来タイムゾーンが変更された際に地域が異なるタイムゾーンに分断されないように地名の選択は地理的にコンパクトになるよう望まれている。[要出典]
通常、地名には、全体のタイムゾーンを代表するある地方の人口の最も大きい都市が選択される。しかしながら、幅広く知られている名前やより曖昧ではない名前を持つその他の都市が存在する場合、そちらが選択される可能性がある。[要出典]都市名が変更されたという場合においては、旧名と新規の名称双方が同じデータベース・エントリを指し示すようにするため、将来のバージョンにおいて「別名」("alias", エイリアス)[要出典]を作成するという慣習がある。
時には「地名」がそれ自身、複合的な名称で表現される場合がある。"America/Indiana/Indianapolis"(en)というタイムゾーンがそのような例である。このような3段階形式の名称は現在、"America/Argentina/..."、"America/Kentucky/..."、"America/Indiana/..."、そして"America/North_Dakota/..."以下のゾーンにのみ存在する。
選択された地名は完全なその地域の代表となる。そのため、すべての都市名がその名にちなんで命名されるタイムゾーンを持つとは限らない。例えば、"America/Boston"というタイムゾーンは存在しない。更に、現時点で所属するタイムゾーンが同一であるが互いに異なる都市は、歴史的な意味で別名が付けられている場合(例えば、同じ標準時である"America/Detroit"と"America/New_York"の違い)や、または同じタイムゾーンに属するが異なる別々の都市が歴史的な意味で異なる国に分断された場合(例えば、旧チェコスロバキアの分裂による"Europe/Prague"と"Europe/Bratislava"の違い)により、たとえ現時点ではタイムゾーンが一致しているにも関わらず、将来異なるタイムゾーン名を持つ可能性もある。
誤った標準時
tz databaseにはかつて誤ったタイムゾーンが含まれていたケースがあった。とりわけ日本標準時における誤りについては、記事"日本標準時#South Ryukyu Islands時間"等[15]を参照せよ。
各標準時のデータ格納
大抵は標準時と夏時間の遷移のことを指すのだが、UTCからの複数の時差を持つ各タイムゾーンにおいて、tz databaseは遷移時の時刻を正確に記録している。同様にこのフォーマットは、遷移の日時の変化を適宜調節できる。
Zone.tab
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 (+ is north), then longitude (+ is east). # 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 # (1) makes some geographical sense, and # (2) puts the most populous zones first, where that does not contradict (1).
参考訳:
# 当ファイルは次の各列要素から成る表(テーブル)で構成される: # 1. ISO 3166 2-文字による国名コード。詳しくはファイル`iso3166.tab'を見よ。 # 2. タイムゾーンの主要都市の緯度、経度をISO 6709の # 符号-度-分-秒フォーマットで表記。 # 「度」以下は+-DDMM+-DDDMMまたは+-DDMMSS+-DDDMMSSのいずれかで記載。 # 始めに北回りを正の符号にとる緯度、続いて東回りを正の符号にとる経度を記載。 # 3. 環境変数TZの値に指定するタイムゾーン名を記述。 # 4. コメント; 該当する国の記述が複数の行に渡る場合に限り記載。 # # 各列要素は単一のタブで区切られる。 # 表の各行のデータは国名によってまず区分けられ、続いて、次の順序に従い各国のデータを並べ替える。 # (1) 幾つかの地理的な意義による、かつ # (2) 最大の人口を持つゾーンを先頭に配置する。ただし(1)と矛盾しないようにすること。
1970年以前のデータ
1970年より以前のデータに関しては、地域のタイムゾーンを同定する都市名を修正するよう注意を払っている。しかし、必ずしも地域全体でそのような修正が必要とは限らない。なぜなら1970年時点からの標準時を区別する場合にのみ、新しい地域が作成されるからである。
例えば、1963年10月23日から1963年12月9日までブラジル、ミナスジェライス州、エスピリトサント州、リオデジャネイロ市、サンパウロ市は夏時間制度を採用していた。しかし、1970年からの標準時はこの地域全体では同一であったため、タイムゾーンAmerica/Sao_Paulo(en)を分割する要求は却下された[16]。
ドイツにおける時刻(Time in Germany)の例では、1945年のトライゾーン下のベルリンは夏時間に移行しなかったため、以後、タイムゾーンEurope/Berlin(en)は正しい時間間隔を示していないとされる。[要出典]
ファイルフォーマット
tz databaseはテキストファイルとして公開される。そのファイルは、人が可読な形式であり、ルールとタイムゾーンの遷移情報が一覧化されている。利用に当たっては、プラットフォーム独立なバイナリファイルにコンパイルされる。バイナリファイルはタイムゾーン毎に1つずつ生成される。参照用ソースコードにはzic(zone information compiler)[17]と呼ばれるコンパイラが付属しており、同時に、関数localtime()
や
mktime()
といった標準的なAPIを利用してコンパイル済みデータを読み込んだり、利用することができるコードも付属している。これらタイムゾーンの標準的なAPIは標準Cライブラリをはじめとして多くのライブラリに採用されている。とりわけ標準Cライブラリはtz databaseの標準時データをテキスト生データからタイムゾーンコンパイラでコンパイルしてからデータをロードする。前述のzicは現在では参照用ソースコードには同梱されておらず[18]、各ライブラリ毎に収録されている。GNU Cライブラリ(glibc)とその派生物では同様のタイムゾーン・コンパイラを収録している[19]。GNU/LinuxシステムやBSD系システムでは、オペレーティングシステム・インストール時もしくは、適宜ユーザの指示によりシステム時刻の標準時を指定できる[20]。概ねUTCまたはシステムが設置されている地域の標準時などその他任意の標準時を指定できる。設定の後システムは前述の通りタイムゾーン・テキストをコンパイルする。よってこの場合tz databaseのアップグレードを行う度にコンパイルし直す必要があるが、概ね現代的なパッケージ管理システムはCライブラリもしくはtz databaseを含むパッケージのアップグレード時に自動的に生テキストデータを再コンパイルする。組み込みLinuxなどのメモリの少ない環境では、コンパイル処理に時間がかかるため、コンパイル済みのパッケージを利用する場合もある。Debian 6.0(コードネーム; squeeze)などではこの方法を採用している。
管理
tz databaseのコードとデータベース本体は、ボランティア集団により管理されている。アーサー・デイヴィッド・オルソンはコードへ、ポール・エッガートはデータベースに、それぞれ最も多くの変更を加えた人物である。提案された変更点は、tzメーリングリストに送付される。このメーリングリストは、Usenetニュースグループのcomp.time.tzにゲートウェイを提供している。ソースコードはFTPサーバのelsie.nci.nih.gov
を経由して頒布される。一般に、これらのファイルはDebianのようなソフトウェア・ディストリビューターに採用され、事前コンパイルを行い、ソースコードとバイナリパッケージがディストリビューションの一部として収録される。エンドユーザーは、いくらか遅延を伴うものの、これらソフトウェア・ディストリビューションのアップデート手続きを頼りにするか、直接 ftp://elsie.nci.nih.gov/pub/ からソースコードを入手して、バイナリファイルを自分でビルドするかどちらかの手段をとることができる。
現在の管理から将来、類似の方針を基にIANAによる管理へと移行する計画が策定中である[21]。これはHTTPベースの通信プロトコルを利用する仕組みを持つとされる[22]。
その他の標準の利用
CLDRはUN/LOCODE(en)を地域同定に利用している[23]。この実装は全ての識別子が国家を参照しており、tz databaseの開発元が避けたいと思っている事項も含まれている。
ソフトウェア・システムにおける利用
tz databaseは多くのコンピュータシステム上でタイムゾーン処理とタイムゾーン変換のために利用されている。以下のような例が挙げられる。
- BSDの派生システム、とりわけBSDの子孫と呼ばれる、FreeBSD、NetBSD、OpenBSD、DragonFly BSD。またMac OS Xも含まれる。
- GNU Cライブラリとそれを利用するシステム。例えばGNUオペレーティングシステム(GNU Hurd)と大部分のLinuxディストリビューション[24]、その他BeOS、Haiku、Nexenta OS、Cygwin。
- System V Release 4の派生システム、例えばSolarisとUnixWare。
- IBM AIX 6.1以降[25][26](初期のAIXのバージョン、とりわけAIX 5.2時点ではzoneinfoは含まれていた[27]。これはMySQLのようなサードパーティーアプリケーションのサポートのためである[28]。しかし実際にはそれは利用不可能だった[27][29])。
- その他幾つかのUNIXシステム、例を挙げると、Tru64とUNICOS/mpである(IRIXも未だ維持されてはいるが、もはや出荷されていない)。
- UNIXではないものとしては、OpenVMSが利用している。
- Java Runtime Environment。2002年の1.4リリースより利用している。
- Perlモジュールである、DateTime::TimeZone[30]、DateTime::LeapSecond[31]が2003年より利用している。
- PHPは2005年の5.1.0リリースより採用している。
- Pythonモジュールである、pytz[32]。
- Microsoft .NET Frameworkモジュールのzoneinfo[33]。
- Oracle Database。2004年の10gリリースから採用している[34]。
- PostgreSQL。2005年のリリース8.0から採用している。
- ファームウェア内で利用するIP clocks、その他組み込みソフトウェア。
その他、Olson timezone IDというものがユニコードコンソーシアムのCLDR並びにInternational Components for Unicode(ICU)で利用されている。例えば、「CLDR Windows → Tzid」テーブルは、Microsoft Windows time zone IDsから標準的Olson名へのマッピングを行う[35]。
実例
環境変数TZにtz databaseのタイムゾーンを指定してdateコマンドの出力結果が変化する様子を示す。シェルのロケールは日本(例: 環境変数LANG=ja_JP.UTF-8など)に指定されているものとする。またOSのインストール時に指定したタイムゾーンは日本標準時であるものとする。タイムゾーン設定はGNU Cライブラリでは/etc/localtimeファイルに保存され、コンパイル済みタイムゾーンデータは/usr/share/zoneinfoディレクトリ以下に保存されることが多いとされる。
システム時刻は以下となる。
$ date 2011年 1月 1日 土曜日 12:00:00 JST
日本標準時を明示的に指定する場合は以下となる。
$ TZ=Asia/Tokyo date 2011年 1月 1日 土曜日 12:00:00 JST $ TZ=Japan date 2011年 1月 1日 土曜日 12:00:00 JST
フランスは中央ヨーロッパ時間(CET)を採用している。TZに指定した場合の結果は以下となる。
$ TZ=Europe/Paris date 2011年 1月 1日 土曜日 04:00:00 CET
フランスでは4月は夏時間施行期間であるため、
$ TZ=Europe/Paris date -d '3 months' 2011年 4月 1日 金曜日 05:00:00 CEST
POSIX形式では、グリニッジ子午線の西回りを正の符号で表記する。符号に注意せよ。
$ TZ=Etc/GMT-9 date 2011年 1月 1日 土曜日 12:00:00 GMT-9 $ TZ=Etc/GMT+9 date 2010年 12月 31日 金曜日 18:00:00 GMT+9
TZに無効な文字列を指定した場合、すべて協定世界時であると見なされる。
$ TZ=foo date 2011年 1月 1日 土曜日 03:00:00 foo
よくある間違いはTZにJSTと指定してしまうことである。少なくともtz databaseにはJSTというデータは含まれていない。従って、TZに誤ってJSTと指定してしまうと無効な文字列と認識され、協定世界時を指定したと見なされるので注意が必要である。
$ TZ=JST date 2011年 1月 1日 土曜日 03:00:00 JST
脚注
- ^ Eggert, Paul; Olson, Arthur David (2007年11月29日). “Sources for time zone and daylight saving time data”. 2007年12月3日閲覧。
- ^ Olson, Arthur David (16 December 1986). "Resolved timezone issue? Other issues. New ctime manual page". tz (Mailing list).
- ^
Eggert, Paul (2005-01). "Re: FW: IANA time zone registration - proposal". tz (Mailing list).
{{cite mailing list}}
:|date=
の日付が不正です。 (説明) - ^ Eggert, Paul (20 October 1993). "proposal for time zone names". tz (Mailing list).
- ^ Olson, Arthur David (18 March 1987). "Re: ist of issues". tz (Mailing list).
- ^ Devine, Bob (2 June 1988). "leap seconds; [0-60] is ok". tz (Mailing list).
- ^ Mueller, Erik. “A map of the TZ timezones of the world”. 2011年4月10日閲覧。
- ^ Olson, Arthur David (24 November 1986). "seismo!elsie!tz ; new versions of time zone stuff". tz (Mailing list).
- ^ Eggert, Paul (11 November 1995). "questions and comments on http://tycho.usno.navy.mil/tzones.html". tz (Mailing list).
- ^ “zoneinfo tzcode and tzdata archives (FTP)”. 2007年10月30日閲覧。
- ^ Theoryという名前のテキストファイルが"tzcode"頒布物の中に含まれている。tzcode2007h.tar.gz 2007年10月1日参照。
- ^ “The Single UNIX ® Specification, Version 2 - Environment Variables”. pubs.opengroup.org. 2011年4月14日閲覧。 “TZ Timezone information.[...]”
- ^ “Manpage of TZSET”. JM Project. 2011年4月14日閲覧。
- ^ tz databaseのソースアーカイブ内にあるテキストファイル"etcetera"などを参照。バージョン2011gで確認。
- ^ “日本の標準時”. www.sat.t.u-tokyo.ac.jp. 2011年4月10日閲覧。
- ^ Olson, Arthur David (6 January 2010). "RE: little nuance in brazil 1963". tz (Mailing list). 2011年5月5日閲覧。
- ^ “Man page of ZIC”. JM Project. 2011年4月10日閲覧。
- ^ tz databaseのソースアーカイブを参照。バージョン2011gで確認。
- ^ “zic.c”. sourceware.org (2009年6月15日). 2011年5月5日閲覧。
- ^ “TimeZoneChanges - Debian Wiki”. Debian (2009年10月31日). 2011年5月6日閲覧。
- ^ P. Eggert (2011年1月27日). “IANA Procedures for Maintaining the Timezone Database - draft-lear-iana-timezone-database-02”. tools.ietf.org. 2011年5月6日閲覧。
- ^ Takao Hotta (2011年3月4日). “これからのタイムゾーン・データベース(tzdata)の管理方法”. yebo-blog.blogspot.com. 2011年5月6日閲覧。
- ^ “Unicode Locale Extension (‘u’) for BCP 47”. cldr.unicode.org. 2011年5月6日閲覧。
- ^ “Package: tzdata”. Debian. 2011年4月10日閲覧。
- ^ “Olson time zone support and setup”. AIX 7.1 information. IBM. 2011年3月12日閲覧。
- ^ “Managing the Time Zone Variable”. IBM (2007年2月2日). 2011年3月11日閲覧。
- ^ a b “AIX O/S updated to support 2007 Daylight Saving Time change”. IBM (2007年10月18日). 2011年3月12日閲覧。
- ^ “2007 daylight savings time changes for Unix”. Academic Computing and Communications Center, University of Illinois at Chicago (2007年2月25日). 2008年3月18日閲覧。
- ^ Wickremasinghe, Christopher (2009年3月30日). “Introduction of daylight saving time in Western Australia 2006”. AIX Wiki. IBM. 2011年3月11日閲覧。
- ^ “DateTime-TimeZone”. search.cpan.org (2011年4月25日). 2011年5月6日閲覧。
- ^ “DateTime”. search.cpan.org (2011年5月3日). 2011年5月6日閲覧。
- ^ “Python Package Index : pytz”. pypi.python.org (2011年4月1日). 2011年5月6日閲覧。
- ^ “ZoneInfo (tz database / Olson database) .NET API - Home”. zoneinfo.codeplex.com. 2011年5月6日閲覧。
- ^ Oracle Database Globalization Support Guide 10g Release 1 (10.1): Chapter 4, Section "Choosing a Time Zone File". Oracle Corporation. (June 2004). pp. 4–14. Part No. B10749-02 2011年5月6日閲覧。
- ^ “Windows → Tzid”. Unicode Consortium (2007年11月12日). 2008年2月17日閲覧。[リンク切れ]
関連項目
- システム時刻
- UNIX時間
- 環境変数 - Unix系システムの環境変数TZには、現在のシステム時刻のタイムゾーンが設定される。デフォルトではOSインストール時に指定した標準時が設定されている。
- date (UNIX) - 時刻表示コマンド。環境変数TZを変更することで、時刻を任意のタイムゾーンで表示できる。
- Microsoft WindowsやUnix系システムではtz databaseと以下のハードウェア、ソフトウェアを組み合わせることでシステム時刻を常に正しい時刻に同期できる。
- リアルタイムクロック (Real-time clock, RTC) - tz databaseの管理によるオペレーティングシステム・クロックとは別個に指定されるハードウェア内部のクロック。GNU/Linuxシステムなどでは、hwclock(en)コマンドなどでシステムクロックをRTCに書き込める。
- Network Time Protocol (NTP), NTPサーバ - ネットワーク経由の時刻同期プロトコル、時刻同期サーバ。これを利用することでオペレーティングシステムのクロックを正しい時刻に同期できる。
参考
- "tz mailing list"。FTPサーバリソース<ftp://elsie.nci.nih.gov/pub/tzarchive.gz>にてこれらメーリングリスト・メッセージのアーカイブが利用可能である。
外部リンク
- ITU LEGAL TIME 2011 - ITU-T策定の標準時。
- tz databaseホームページ。
- tz mailing listアーカイブ。
- 現行のtzソース並びに生データファイル。
- 現行のマルチフォーマット用コンパイル済みtz data。
- 旧版のソースコード一式。タイムゾーン・コンパイラがtz databaseに含まれていたころの頒布物である。現在ではタイムゾーン・コンパイラは各ライブラリ毎に実装されている。
- PHPが利用するtz-groupによる、tz-zonesのリスト。
- SQLフォーマットに変換済みのtz database。
- Windows標準のフォーマットに変換したOlsonデータベース。
- “A literary appreciation of the Olson/Zoneinfo/tz database” - ジョン・ウデル(Jon Udell)による評価。