tzfile - ファイルのフォーマットと規約の説明 - Linux コマンド集 一覧表
名前
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)」の個数。
上記のヘッダに続いて tzh_timecnt という 4 バイトの long 型の値が (複数個) 続く。昇順で保管されている。 これらの値は「標準」バイトオーダーで記述されている。 それぞれは遷移時間 ( time (2)が返す値) として用いられ、 それぞれにおいてローカル時間の計算ルールが変更される。 次に来るのは tzh_timecnt で、これは "unsigned char" 型の 1 バイトの値である (複数個続くこともある)。 この値は、ファイルで記述されている異なったタイプの「ローカル時間」が、 それぞれ同じようにインデックスされた遷移時間のどれに関連づけられて いるかを示す。 これらの値は ttinifo 構造体の配列に対するインデックスとして提供されている。 ttinfo 構造体はファイル中で次の位置に置かれる。 この構造体は以下のように定義されている:
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 構造体を使う)。