タイムゾーンとは、地球を地理学的に、 イギリスのグリニッジを起点として 15o ごとに分割したものです。 世界の別の場所では今何時なのか、 ということをわかりやすくするために作られました。
近年ではタイムゾーンは、地理学的というよりは、 ずっと政治的なものになっています。 人々は「近くの人たち」と時刻を共有したい場合があるからです。 また省エネルギーの面から、今日では サマータイム (Daylight Savings Time) が利用されており、これもタイムゾーンを変化させます。
タイムゾーンは通常各国の政府や天文機関によって定義され、 3 文字または 4 文字で表記されます。 例は Section 2.2 を見てください。
世界の別の地域で今何時なのかを知りたい場合には、 timezoneconverter.com の web サイトを使うとわかります。
エネルギー節約のため、各国の政府はサマータイムを設けることがあります。 私たちの時計は 1 時間進められ、これによって昼間が長くなったように感じられます。 実際に起きているのは、単にタイムゾーンの変更にすぎません。 基準となる時刻 (UTC) は不変で、 常に同じです。
Linux でサマータイムを自動的に有効・無効にする方法については、 後ほど見ていくことにします。
例をお見せする以上にわかりやすい説明はないでしょう。
Table 1. ブラジルのタイムゾーンと UTC に対する時差
名前と時差 | DST の名前と時差 | 場所 |
---|---|---|
BREST -2:00 | BREDT -1:00 | Fernando de Noronha |
BRST -3:00 | BRDT -2:00 | S竢 Paulo, Rio, Brasilia, Minas Gerais, North East Region, South Region,etc |
BRWST -4:00 | BRWDT -3:00 | West Region |
BRAST -5:00 | BRADT -4:00 | Acre |
US のタイムゾーンについて、このような表をどなたか送っていただけませんか。
Linux システムは GLIBC の動的なタイムゾーンを用いており、 これは /etc/localtime で決まります。 このファイルは、あるゾーン情報ファイルへのリンク (またはそのコピー) です。 ゾーン情報ファイルは通常 /usr/share/zoneinfo ディレクトリ以下に置かれています。
地理学的な観点からいうと、世界には 360o/15o=24 のタイムゾーンだけあれば良いはずです。 しかし物事をわかりやすくするため、 また政治的な変更 (サマータイムなど) にあわせやすくするため、 /usr/share/zoneinfo には数百もの zoneinfo ファイルが置かれています。 それぞれは世界中のあらゆる都市・国などに対応していますが、 完全なものではありません (それは無理でしょう)。
国によっては (ブラジルもそうですが)、 サマータイムの開始する日付が決まっていないこともあります。 ブラジルではサマータイムは年ごとに決定され、夏の 2〜3 か月前に始まります。 この状況をうまく扱うには、zoneinfo ファイルを自分で変更しなければなりません。 zoneinfo ファイルは、以下のようなテキストファイルを zic コマンドでコンパイルすることによって生成されます。
Example 1. ブラジルのゾーン情報のテキストファイル
# Brazil Time Zones # # Brazilian Time Zones are: # BREST: East of Brasilia. Fernando de Noronha. # BRST: Brasilia, S竢 Paulo, Rio, Northeast, South etc # BRWST: West of Brasilia. Mato Grosso, Manaus # BRAST: Acre. # # In daylight saving time, letter 'S' changes to 'D'. # # To install, make: # # # zic Brazil.txt # # Zone files will be installed in /usr/share/zoneinfo (depends on your # distribution). Then, make a symbolic link from your zone to /etc/localtime: # # # ln -sf /usr/share/zoneinfo/Brazil/Brasilia /etc/localtime # # # If you have updates and new standards to this file please send to # # Avi Alkalay <avi @ unix.sh> # # Last update: 18 Nov 2000 # This file is available at http://avi.alkalay.net/linux/zoneinfo/ # # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Brazil 1931 1932 - Oct 3 0:00 1:00 D Rule Brazil 1932 1933 - Mar 31 0:00 0 S Rule Brazil 1949 only - Dec 1 0:00 1:00 D Rule Brazil 1950 only - Apr 30 0:00 0 S Rule Brazil 1950 1952 - Dec 1 0:00 1:00 D Rule Brazil 1951 only - Apr 16 0:00 0 S Rule Brazil 1952 only - Mar 31 0:00 0 S Rule Brazil 1953 only - Feb 28 0:00 0 S Rule Brazil 1963 only - Oct 23 0:00 1:00 D Rule Brazil 1964 only - Mar 1 0:00 0 S Rule Brazil 1965 only - Jan 31 0:00 1:00 D Rule Brazil 1965 only - Mar 31 0:00 0 S Rule Brazil 1965 only - Dec 1 0:00 1:00 D Rule Brazil 1966 1968 - Mar 1 0:00 0 S Rule Brazil 1966 1967 - Nov 1 0:00 1:00 D Rule Brazil 1984 only - Nov 2 0:00 1:00 D Rule Brazil 1985 only - Mar 15 0:00 0 S Rule Brazil 1985 only - Nov 2 0:00 1:00 D Rule Brazil 1986 only - Mar 15 0:00 0 S Rule Brazil 1986 only - Oct 25 0:00 1:00 D Rule Brazil 1987 only - Feb 14 0:00 0 S Rule Brazil 1987 only - Oct 25 0:00 1:00 D Rule Brazil 1988 only - Feb 7 0:00 0 S Rule Brazil 1988 only - Oct 16 0:00 1:00 D Rule Brazil 1989 only - Jan 29 0:00 0 S Rule Brazil 1989 only - Oct 15 0:00 1:00 D Rule Brazil 1990 only - Feb 11 0:00 0 S Rule Brazil 1990 only - Oct 21 0:00 1:00 D Rule Brazil 1991 only - Feb 17 0:00 0 S Rule Brazil 1991 only - Oct 20 0:00 1:00 D Rule Brazil 1992 only - Feb 9 0:00 0 S Rule Brazil 1992 only - Oct 25 0:00 1:00 D Rule Brazil 1993 only - Jan 31 0:00 0 S Rule Brazil 1993 only - Oct 17 0:00 1:00 D Rule Brazil 1994 only - Feb 20 0:00 0 S Rule Brazil 1994 only - Oct 16 0:00 1:00 D Rule Brazil 1995 only - Feb 19 0:00 0 S Rule Brazil 1995 only - Oct 15 0:00 1:00 D Rule Brazil 1996 only - Feb 11 0:00 0 S Rule Brazil 1996 only - Oct 06 0:00 1:00 D Rule Brazil 1997 only - Feb 16 0:00 0 S Rule Brazil 1997 only - Oct 06 0:00 1:00 D Rule Brazil 1998 only - Mar 01 0:00 0 S Rule Brazil 1998 only - Oct 11 0:00 1:00 D Rule Brazil 1999 only - Feb 21 0:00 0 S Rule Brazil 1999 only - Oct 03 0:00 1:00 D Rule Brazil 2000 only - Feb 27 0:00 0 S Rule Brazil 2000 only - Oct 8 0:00 1:00 D Rule Brazil 2001 only - Feb 18 0:00 0 S # Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] Zone Brazil/DeNoronha -2:00 Brazil BRE%sT Zone posix/Brazil/DeNoronha -2:00 Brazil BRE%sT Zone right/Brazil/DeNoronha -2:00 Brazil BRE%sT Zone Brazil/East -2:00 Brazil BRE%sT Zone posix/Brazil/East -2:00 Brazil BRE%sT Zone right/Brazil/East -2:00 Brazil BRE%sT Zone America/Sao_Paulo -3:00 Brazil BR%sT Zone America/Rio_de_Janeiro -3:00 Brazil BR%sT Zone America/Brasilia -3:00 Brazil BR%sT Zone posix/America/Sao_Paulo -3:00 Brazil BR%sT Zone posix/America/Rio_de_Janeiro -3:00 Brazil BR%sT Zone posix/America/Salvador -3:00 Brazil BR%sT Zone posix/America/Brasilia -3:00 Brazil BR%sT Zone posix/Brazil/Central -3:00 Brazil BR%sT Zone posix/Brazil/Brasilia -3:00 Brazil BR%sT Zone posix/Brazil/Sao_Paulo -3:00 Brazil BR%sT Zone posix/Brazil/Salvador -3:00 Brazil BR%sT Zone posix/Brazil/Rio_de_Janeiro -3:00 Brazil BR%sT Zone right/America/Sao_Paulo -3:00 Brazil BR%sT Zone right/America/Rio_de_Janeiro -3:00 Brazil BR%sT Zone right/America/Salvador -3:00 Brazil BR%sT Zone right/America/Brasilia -3:00 Brazil BR%sT Zone right/Brazil/Central -3:00 Brazil BR%sT Zone right/Brazil/Brasilia -3:00 Brazil BR%sT Zone right/Brazil/Sao_Paulo -3:00 Brazil BR%sT Zone right/Brazil/Salvador -3:00 Brazil BR%sT Zone right/Brazil/Rio_de_Janeiro -3:00 Brazil BR%sT Zone Brazil/Central -3:00 Brazil BR%sT Zone Brazil/Brasilia -3:00 Brazil BR%sT Zone Brazil/Sao_Paulo -3:00 Brazil BR%sT Zone Brazil/Rio_de_Janeiro -3:00 Brazil BR%sT Zone Brazil/Salvador -3:00 Brazil BR%sT Zone Brazil/West -4:00 Brazil BRW%sT Zone Brazil/Manaus -4:00 Brazil BRW%sT Zone Brazil/Rondonia -4:00 Brazil BRW%sT Zone Brazil/Roraima -4:00 Brazil BRW%sT Zone Brazil/Mato_Grosso -4:00 Brazil BRW%sT Zone posix/Brazil/Manaus -4:00 Brazil BRW%sT Zone posix/Brazil/Mato_Grosso -4:00 Brazil BRW%sT Zone right/Brazil/Manaus -4:00 Brazil BRW%sT Zone right/Brazil/Mato_Grosso -4:00 Brazil BRW%sT Zone posix/America/Manaus -4:00 Brazil BRW%sT Zone right/America/Manaus -4:00 Brazil BRW%sT Zone Brazil/Acre -5:00 Brazil BRA%sT |
Rule ブロックは タイムゾーンを変更する日付と時刻を定義しています。 一方 Zone ブロックでは、 そのゾーンを管理する Rule を参照しています。
このファイルのコメントでは、 ゾーン情報コンパイラである zic を使ってこれらのタイムゾーンをインストールする方法が説明されています (既にインストール済みになっていると思いますが)。 インストールしたものを有効にするには、そのゾーン情報ファイルを /etc/localtime ファイルからリンク (あるいはコピー) するだけで OK です。 ディストリビューションによっては、より高度な (そしておそらくより望ましい) タイムゾーンの設定方法が存在します。これらは Section 3.1 で説明します。
/etc/localtime が正しい zoneinfo ファイルを指すようにしたら、 既にあなたのコンピュータはそのゾーンの規則に従っており、 サマータイムの変更も自動的に行われます。 時刻を手動で変更する必要はありません。
次に示す一連のコマンドは、 Linux のタイムゾーンに関するメカニズムの動作を示すものです。 これらはすべて 1 分以内に実行されたものです。
bash$ ls -al /etc/localtime lrwxrwxrwx 1 root root 35 May 22 2001 /etc/localtime -> /usr/share/zoneinfo/Brazil/Brasilia bash$ date Fri Mar 29 20:13:38 BRST 2002 bash# ln -sf /usr/share/zoneinfo/GMT /etc/localtime bash$ date Fri Mar 29 23:13:47 GMT 2002 bash# ln -sf /usr/share/zoneinfo/Brazil/Brasilia /etc/localtime bash$ date Fri Mar 29 20:14:03 BRST 2002 |
20:13 に、私は自分のデフォルトであるブラジルのタイムゾーン (BRST) にいました。 ここで私は自分のシステムを GMT に変更し、すると私のシステム時刻は 23:13 になりました! あなたも、自分のいるタイムゾーンがサマータイムに変わったときに、 同様の現象を見ることになります [訳注: 日本国内では無理ですが :-)]。 ただしその規則はすべてタイムゾーンの内部にあるものです (/etc/localtime のリンクが この例のように変わるわけではありません)。
このマシンで動作しているアプリケーション (アクセスログを生成する web サーバなど) は、 この変更を認識します。 したがって Section 1 で述べたとおり、 完全な意味での時刻とは現在の時刻 プラス現在のタイムゾーンである、 という事実を理解することは、開発者にとって非常に重要です。
最後に私は、自分の正しいタイムゾーンに戻しました。