TZFILE(5) | FreeBSD File Formats Manual | TZFILE(5) |
名称
tzfile — タイムゾーンの情報書式
#include "/usr/src/lib/libc/stdtime/tzfile.h"解説
tzset(3) によって使用されるタイムゾーン情報ファイルは、タイムゾーン情報ファイルを識別するためのマジック文字列“TZif
”で始まり、(2005 年現在、 ASCII NUL または '2' のいずれかの) ファイルの形式のバージョンを識別する文字が続き、今後の使用のために予約された 0 を含む 15 バイトが続き、 (値の上位バイトが最初に書き込まれる) ``標準'' バイト順序で書き込まれた 4 つの 4 バイトが続きます。これらの値を順序に従い、以下に示します。
- tzh_ttisgmtcnt
- ファイルに格納された、UTC/ローカル指示子の数。
- tzh_ttisstdcnt
- ファイルに格納された、標準/ウォール指示子の数。
- tzh_leapcnt
- ファイルに格納された、閏秒データの数。
- tzh_timecnt
- ファイルに格納された ``遷移時刻'' データの数。
- tzh_typecnt
- ファイルに格納された ``ローカルタイム型'' データの数 (0 であってはなりません)。
- tzh_charcnt
- ファイルに格納された ``タイムゾーン省略形文字列'' の文字数。
上記のヘッダに続いて、 4 バイト long 型の値が tzh_timecnt 個、昇順に並びます。値は、``標準'' バイト順序で格納されます。それぞれ、ローカルタイム計算方法が変わる遷移時刻 ( time(3) で返される形式) として使用されます。続いて、1 バイト unsigned char 型の値が tzh_timecnt 個続きます。このそれぞれは、同一インデックスの遷移時刻に、ファイル中のどの ``ローカルタイム'' 型が対応するかを示します。これらの値は、次にファイルに現れる ( tzh_typecnt エントリがある) 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(3) で返される形式) です。 2 番目の値は、指定された時刻以降に適用される閏秒の 合計 です。値のペアは、時刻の昇順で格納されます。
その後に、1 バイト値の標準/ウォールの指示子が tzh_ttisstdcnt 個格納されています。これらは、ローカルタイム型に関する遷移時刻が標準時刻で指定されているのか、それともウォールクロックの時刻で指定されているのかを示します。この情報は、POSIX スタイルのタイムゾーン環境変数を扱う際に、タイムゾーンファイルを使用するときに使用します。
最後に、複数の tzh_ttisgmtcnt UTC/ローカル指示子があり、それぞれ 1 バイト値として格納されます。これらは、ローカル時刻タイプと関連付けられた遷移時刻が UTC とローカル時刻のどちらで指定されているかを示し、タイムゾーンファイルが POSIX スタイルタイムゾーン環境変数を扱うときに使用されます。
tzh_timecnt
が 0 の場合もしくは時刻引数がファイル中の最初の遷移時刻以前の場合、 localtime は、ファイル中の最初の標準時間の ttinfo
構造体を使用します (標準時間の構造体が無い場合には、単に最初の ttinfo
構造体を使用します)。
バージョン 2 形式のタイムゾーンファイルに関して、上記のヘッダとデータは、 2 番目のヘッダとデータが続き、各トランジッションタイム、または閏秒時間毎に使用される 8 バイトを除いて、形式は、同じです。 2 番目のヘッダとデータは、囲まれた改行 (newline-enclosed) が来た後に、 (そのような瞬間のための POSIX 表現がないなら、改行の間に何もなしで) ファイル中に格納された最後のトランジッションタイムの後に瞬間の取り扱いで使用される POSIX-TZ-environment-variable-style 文字列。訳注: 原文の意味不明。
September 13, 1994 | FreeBSD |