名前
tzfile - タイムゾーンの情報
書式
#include <tzfile.h>
説明
tzset(3) によって用いられるタイムゾーン情報のファイルは、 識別のための magic 文字列 "TZif" で始まり、 将来のための 16 バイトの予約領域が続き、 long 型の 4 バイトの値が 6 個続く。 この値は「標準」バイトオーダー (高位バイトが先に書かれる) で記述される。これらの値は、順に以下のようなものである。
tzh_ttisgmtcnt | |
ファイルに記述されている UTC/local インジケータ (indicator) の個数。 | |
tzh_ttisstdcnt | |
ファイルに記述されている standard/wall インジケータの個数。 | |
tzh_leapcnt | |
ファイルに記述されている閏秒データの個数。 | |
tzh_timecnt | |
ファイルに記述されている「遷移時間 (transition time)」データの個数。 | |
tzh_typecnt | |
ファイルに記述されている「ローカル時間型 (local time types)」データの個数 (0 であってはいけない)。 | |
tzh_charcnt | |
ファイルに記述されている「タイムゾーン略式文字列 (time zone abbreviation string)」の個数。 | |
struct ttinfo { long tt_gmtoff; int tt_isdst; unsigned int tt_abbrind; };
それぞれの構造体は、 4 バイトの long 型の値 tt_gmtoff、 1 バイトの値 tt_isdst, 1 バイトの値 tt_abbrind から構成される。 それぞれの構造体において、 tt_gmtoff は UTC に加えるべき秒数を与え、 tt_isdst は tm_isdst を localtime(3) にセットすべきかどうかを示し、 tt_abbrind はファイル中で ttinfo 構造体 (配列) のあとに置かれる タイムゾーン略式文字列の配列に対するインデックスである。
次には 4 バイト値のペアである tzh_leapcnt が (複数個) 続く。標準バイトオーダーで記述される。 それぞれのペアの最初の値は閏秒の起きた時刻を ( time(2) の返す形式で) 与え、二番目の値はその時刻に加えるべき閏秒数の 全秒数を与える。これらのペアは時刻の古い順に記述する。
次には tzh_ttisstdcnt が置かれる。これは standard/wall インジケータで、それぞれ 1 バイトの 値を保管する。これらはローカル時間のタイプに関連づけられた遷移時間が 標準時刻 (standard time) と壁時計時刻 (wall clock time) の どちらで指定されているかを示す。またこの値は、 POSIX スタイルのタイムゾーン環境変数を処理するときに タイムゾーンファイルが使われるときにも利用される。
最後に tzh_ttisgmtcnt が置かれる。これは UTC/local インジケータで、それぞれ 1 バイトの 値を保管する。これらはローカル時間のタイプに関連づけられた遷移時間が UTC とローカル時刻のどちらで指定されているかを示す。またこの値は、 POSIX スタイルのタイムゾーン環境変数を処理するときに タイムゾーンファイルが使われるときにも利用される。
localtime は、 tzh_timeout が 0 であるか time 引数がファイルに記録されていた最初の遷移時刻 よりも小さい場合には、 ファイルに最初に現れる標準時刻の ttinfo 構造体を使う (または標準時刻の構造体がない場合は、単に最初の ttinfo 構造体を使う)。