#include <time.h> void tzset (void); extern char *tzname[2]; extern long timezone; extern int daylight;
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
tzset():
_POSIX_C_SOURCE || _XOPEN_SOURCE
tzname:
_POSIX_C_SOURCE || _XOPEN_SOURCE
timezone:
_SVID_SOURCE || _XOPEN_SOURCE
daylight:
_SVID_SOURCE || _XOPEN_SOURCE
TZ 環境変数が設定されていない場合には、 tzname 変数はローカルな壁時計時刻 (wall clock time) に 最も近い値に初期化される。 このローカルな壁時計時刻としては、 システムのタイムゾーンディレクトリ (後述) にある tzfile(5) 形式のファイル localtime で指定されている値が用いられる。 (この際には /etc/localtime もよく用いられる。 これはシステムのタイムゾーンディレクトリにある 適切なファイルへのシンボリックリンクになっている。)
TZ 環境変数が存在しているが、その値が空だったり、 以下に示す形式のどれにもあてはまらない場合は、 協定世界時 (Coordinated Universal Time: UTC) が用いられる。
TZ の値は以下の 3 つの形式のいずれかを取ることができる。 最初の形式はサマータイム (daylight saving time) を持たないローカルタイムゾーンに対して用いる。
std 文字列はタイムゾーンの名前を指定する。 アルファベットからなる 3 文字以上の文字列でなければならない。 offset 文字列は std の直後に続き、 協定世界時 (UTC) を得るために ローカルな時刻に加えなければならない時間を指定する。 offset は、ローカルタイムゾーンがグリニッジ子午線 (Prime Meridian) の西なら正の値、東なら負の値を取る。 時間 (hour) は 0 から 24 の間でなければならない。 分 (minute) と秒 (second) は 0 から 59 の間でなければならない。
2 番目の形式はサマータイムがある場合に用いられる。
指定にはスペースを含めてはならない。 先頭の std と offset は 1 番目の形式と同じで、 標準のタイムゾーンを指定する。 dst 文字列と offset は、 対応するサマータイムゾーンの名前とオフセットを指定する。 オフセットが省略されると、デフォルトでは標準の一時間前となる。
start フィールドはサマータイムが有効になる時刻、 end フィールドは標準に戻る時刻である。 これらのフィールドは以下の形式で指定する。
time フィールドは、ローカルタイムを切り替える時刻を、 変更前のローカルタイムで表したものである。 省略された場合のデフォルトは 02:00:00 である。
ニュージーランドの例である。 ニュージーランドでは、標準のタイムゾーン (NZST) は UTC より 12時間進んでおり、 サマータイム (NZDT) は UTC の 13時間進んでいる。 サマータイムは 10月の第一日曜から 3月の第三日曜までであり、 ローカルタイムの切り替えはデフォルトの 02:00:00 に行われる。
TZ="NZST-12.00:00NZDT-13:00:00,M10.1.0,M3.3.0"
3 番目の形式は、タイムゾーンの情報をファイルから読み込むように指定する。
ファイルの指定 filespec が省略された場合は、 タイムゾーンの情報はシステムタイムゾーンディレクトリの localtime ファイルから読まれる。 最近ではシステムタイムゾーンディレクトリは普通 /usr/share/zoneinfo/localtime である。 このファイルは tzfile(5) 形式で書かれている。 filespec が与えられた場合は、 タイムゾーンの情報をそのファイルから読み込む。このファイルも tzfile(5) 形式で書かれている必要がある。 filespec が '/' で始まらなかった場合には、 システムタイムゾーンディレクトリからの相対パスで ファイルが指定されたことになる。
例を挙げておく。もう一度ニュージーランドの例である。
TZ=":Pacific/Auckland"
このタイムゾーンディレクトリには以下のファイルが含まれる。
localtime ローカルタイムゾーンのファイル posixrules POSIX 式の TZ 書式ルール
/etc/localtime は、 localtime ファイルや、 システムのタイムゾーンディレクトリ中の適切なタイムゾーンファイルへの シンボリックリンクであることが多い。
4.3BSD には char *timezone(zone, dst) というルーチンがあり、これは 最初の引数 (GMT からの西向きの分数) に対応するタイムゾーンの名前を返す。 二番目の引数が 0 の場合は標準の名前が用いられ、 それ以外はサマータイム版の名前が用いられる。