日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
TZFILE(5) FreeBSD ファイルフォーマットマニュアル TZFILE(5)
名称
tzfile -- タイムゾーンの情報
解説
tzset(3) によって使用されるタイムゾーン情報ファイルは、
/usr/share/zoneinfo の下で見つかります。これらのファイルは、インターネッ
ト RFC 8536 で説明されている形式を使用します。各ファイルは、8 ビットバイ
トのシーケンスです。ファイルで、バイナリ整数は、ネットワーク順 (ビックバ
エンディアン、または上位バイトが最初) の 1 つ以上のバイトのシーケンスで表
され、すべてのビットが重要で、符号付きバイナリ整数は、2 の補数を使用して
表され、ブール値は、0 (偽) または 1 (真) のいずれかの 1 バイトのバイナリ
整数によって表されます。形式は、次のフィールドを含む 44 バイトのヘッダで
始まります:
• マジックの 4 バイト ASCII シーケンス ``TZif'' は、タイムゾーン情報
ファイルとしてファイルを識別します。
• ファイルの形式のバージョンを識別するバイト (2021 年現在、ASCII NUL、
``2'', ``3'' または ``4)''。
• 将来の使用のために予約された 0 を含む 15 バイト。
• 次の順序で 6 つの 4 バイト整数値。
tzh_ttisutcnt ファイルに格納されている UT/ローカル指示子の数。(UT
は、世界時間です。)
tzh_ttisstdcnt ファイルに格納された、標準/ウォール指示子の数。
tzh_leapcnt データエントリがファイルに格納されているうるう (閏)
秒の数。
tzh_timecnt データエントリがファイルに格納されている遷移時刻の
数。
tzh_typecnt データエントリがファイルに格納されているローカル時刻
タイプの数 (0 であってはなりません)。
tzh_charcnt ファイルに格納されたタイムゾーン省略形文字列の文字
数。
上記のヘッダは、長さがヘッダの内容に依存する、次のフィールドが続きます:
tzh_timecnt 昇順でソートされた 4 バイトの符号付き整数値。これらの値は、
ネットワークバイト順で書き込まれます。それぞれは、ローカル時
間の計算のための規則が変更される、によって返される) 遷移時間
として使用されます。
tzh_timecnt 1 バイトの符号なし整数値。最後のものを除くそれぞれは、ファイ
ルに記述されているさまざまなタイプのローカル時間タイプのどれ
が、同じインデックス付き遷移時間で始まり、次の遷移時間まで続
くが次の遷移時間を含まない期間に関連付けられているかを示しま
す。(前回のタイプは、以下で説明する POSIX スタイルの TZ 文字
列との整合性チェックのためにのみ存在します。) これらの値は、
次のフィールドへのインデックスとして役に立ちます。
tzh_typecnt ttinfo エントリ、それぞれ次のように定義されています:
struct ttinfo {
int32_t tt_utoff;
unsigned char tt_isdst;
unsigned char tt_desigidx;
};
各構造体は、ネットワークバイト順で tt_utoff のために 4 バイ
トの符号付き整数値として書き込まれ、tt_isdst のための 1 バイ
トのブール値と tt_desigidx のための 1 バイトの値が続きます。
各構造体で、tt_utoff は、UT に追加される秒数を与え、tt_isdst
は、tm_isdst が localtime(3) によって設定するされるべきであ
るかどうかを伝え、tt_desigidx は、ファイルの ttinfo エントリ
に続くタイムゾーンの省略形バイトの配列へのインデックスとして
役に立ちます。指定された文字列が "00" であるなら、ttinfo エ
ントリは、ローカル時間が指定されていないことを示すプレースホ
ルダ (placeholder; 代替物) です。tt_utoff 値は、32 ビットの
クライアントがオーバフローせずに無効にするために、-2**31 と
等しくなることはありません。また、現実的なアプリケーション
で、tt_utoff は、範囲 [-89999, 93599] (すなわち、-25 時間以
上 26 時間未満) です。これは、POSIX で必要な範囲 [-24:59:59,
25:59:59] を既にサポートしている実装によってる簡単なサポート
を許可します。
tzh_charcnt 上記の tt_desigidx 値によってそれぞれインデックス付けされ
た、ヌル文字で終わるバイト文字列であるタイムゾーン指定を表す
バイト。バイト文字列は、一方が他方の接尾辞であるなら、オーバ
ラップするかもしれません。これらの文字列のエンコーディング
は、指定されていません。
tzh_leapcnt ネットワークバイト順で書き込まれた 4 バイト値のペア。各ペア
の最初の値は、うるう秒が発生するか、またはうるう秒のテーブル
の期限切れになる、(time(3) によって返される) 負でないの時刻
を与えます。秒は、与えられた時刻から始まる期間中に適用される
うるう秒の合計数である、補正を指定する符号付き整数です。値の
ペアは、時間によって厳密に昇順でソートされます。各ペアは、最
後のペアが前のペアと同じ補正があるなら、最後のペアは、うるう
秒のテーブルの有効期限を示すことを除いて、正または負のいずれ
かの 1 つのうるう秒を示します。各うるう秒は、UTC カレンダの
月末です。最初のうるう秒の発生時間は負ではなく、その補正が正
である時かつその時に限り正のうるう秒です。最初のうるう秒の後
の各うるう秒のための補正は、正のうるう秒については 1、負のう
るう秒について -1 のいずれかによって以前のうるう秒前のうるう
秒とは異なります。うるう秒のテーブルが空であるなら、うるう秒
の補正は、すべてのタイムスタンプについて 0 です。そうでなけ
れば、最初の発生時刻より前のタイムスタンプについて、うるう秒
の補正は、最初のペアの補正が 1 または -1 であるなら、0 であ
り、そうでなければは不特定です (それは、開始時に切り捨てられ
たファイルでのみ起こるかもしれません)。
tzh_ttisstdcnt
それぞれ 1 バイトのブール値として格納される、standard/wall
(標準/壁) 指示子。それらは、ローカル時間タイプに関連付けられ
た遷移時間が標準時間またはローカル (wall クロック) 時間とし
て指定されたかどうかを伝えます。
tzh_ttisutcnt
それぞれ 1 バイトのブール値として格納される、UT/local 指示
子。それらは、ローカル時間タイプに関連付けられた遷移時間が
UT またはローカル時間として指定されたかどうかを伝えます。
UT/local 指示子が設定されているなら、対応する standard/wall
指示子は、また設定されなければなりません。
standard/wall と UT/local 指示子は、TZif ファイルの遷移時間を、ルールのな
い POSIX スタイルの TZ 文字列を通して指定された別のタイムゾーンに適した遷
移に変換するために設計されました。例えば、TZ="EET2EEST" で TZif ファイル
"EET2EEST" がないとき、考えは、この目的のためにだけに存在する、異なる UT
オフセットをがあるファイル "Europe/Brussels" のコピーである名前がある
TZif ファイルから遷移時間を適応させるということです。POSIX は、この時代遅
れの変換の振る舞いを指定していなくて、デフォルトのルールは、インストール
に依存していて、実装は、2037 年以降のタイムスタンプについてこの機能をサ
ポートするために知られていないので、(例えば) Greek (ギリシャ) 時間を望む
ユーザは、代わりによりよい歴史的なカバレッジのために TZ="Europe/Athens"
を指定し、POSIX 準拠が必要で、古いタイムスタンプが正確に処理される必要が
ないなら、TZ="EET2EEST,M3.5.0/3,M10.5.0/4" でフォールバックします。
localtime(3) 関数は、通常、tzh_timecnt が 0 であるか、または time 引数が
ファイルに記録された最初の遷移時間よりも短いかのいずれかであるなら、ファ
イルの最初の ttinfo 構造体を使用します。
バージョン 2 形式
バージョン 2 形式のタイムゾーンファイルについて、上記のヘッダとデータは、
2 番目のヘッダとデータが続き、8 バイトが、遷移時間、またはうるう秒時間ご
とに使用されることを除いて、形式は同じです (うるう秒のカウントは、4 バイ
トのままです。) 2 番目のヘッダとデータの後に、ファイルに格納された最後の
遷移時間の後のインスタンスの処理に使用するか、ファイルに遷移がないなら、
すべてのインスタンスのために使用する、改行で囲まれた POSIX-TZ-environ
ment-variable-style 文字列が来ます POSIX スタイルの TZ 文字列は、そのよう
なインスタントのための POSIX スタイルの表現がないなら (すなわち、改行の間
に何もありません)、空です。空でないなら、POSIX スタイルの TZ 文字列は、8
バイトデータに存在するなら、最後の遷移時間の後にローカル時間のタイプと一
致しなければなりません。例えば、文字列 ``WET0WEST,M3.5.0,M10.5.0/3'' が与
えられ、次に、最後の遷移時間が 7 月であるなら、遷移のローカル時間のタイプ
は、UT から 1 時間東である、短縮された ``WEST'' である夏時間を指定しなけ
ればなりません。また、少なくとも 1 つの遷移があるなら、時間のタイプ 0
は、最も早い遷移時刻を含まずに、無期限の過去からの期間に関連付けられま
す。
バージョン 3 形式
バージョン 3 形式のタイムゾーンファイルについて、POSIX-TZ スタイルの文字
列は、newtzset(3) で説明されているように、POSIX TZ 形式に 2 つのマイナな
拡張を使用します。最初に、遷移時間の時間の部分は、符号付きで、POSIX で要
求される 0 から 24 までの符号なしの値の代わりに、-167 から 167 の範囲で
す。2 番目に、DST は、1 月 1 日の 00:00 に開始し、12 月 31 日の 24:00 に
夏時間と標準時間の差を加えた時間に終了するなら、1 年中有効です。
バージョン 4 形式
バージョン 4 形式の TZif ファイルについて、最初のうるう秒のレコードは、開
始時の TZif ファイルの切り捨てを表すために、+1 でも -1 でもない補正を持つ
ことができます。また、2 つ以上のうるう秒の遷移が存在し、最後のエントリの
補正が前のものと等しいなら、最後のエントリは、うるう秒の代わりに、うるう
秒のテーブルの期限切れを示します。この有効期限後のタイムスタンプは、将来
のリリースで有効期限後にうるう秒のエントリが追加される可能性が高く、追加
されたうるう秒が有効期限後のタイムスタンプの処理方法が変更されるため、信
頼できません。
相互運用性の考慮事項
将来の形式の変更で、さらにデータが追加されるかもしれません。
バージョン 1 ファイルは、古い形式と見なされ、2038 年以降の遷移時間をサ
ポートしていないため、生成すべきではありません。バージョン 1 のみを理解す
るリーダは、バージョン 1 データブロックの計算された終りを超えるデータを無
視しなければなりません。
バージョン 1 以外で、ライタは、ファイルのデータによって必要とされる最小の
バージョン番号を生成するべきです。例えば、ライタは、うるう秒のテーブルが
期限切れになるか、または開始時に切り捨てられた場合にのみ、バージョン 4
ファイルを生成するべきです。同様に、バージョン 4 ファイルを生成しないライ
タは、遷移時間を正確にモデル化するために TZ 文字列の拡張が必要な場合にの
み、バージョン 3 ファイルを生成するべきです。
バージョン 1 のヘッダとデータブロックによって定義される時刻変更のシーケン
スは、バージョン 2+ のヘッダとデータブロック、とフッタによって定義される
時刻変更の連続したサブシーケンスであるべきです。このガイドラインは、廃止
されかかったバージョン 1 のリーダが、連続したサブシーケンス内のタイムスタ
ンプに関する現在のリーダに同意するために役に立ちます。また、廃止されか
かったリーダをサポートしていないライタが、空間を節約するためにバージョン
1 データブロックで 0 の tzh_timecnt を使用します。
TZif ファイルにうるう秒のテーブルの有効期限が含まれているとき、TZif リー
ダは、有効期限後のタイムスタンプの処理を拒否するか、または (おそらくエ
ラーの表示をつけて) あたかも有効期限が存在しないかのように処理すべきで
す。
タイムゾーンの指定は、英数字 ``'' と ``+'' のセットから 3 文字以上 6 文字
の ASCII 文字で構成するべきです。これは、タイムゾーンの省略形について、
POSIX の要件との互換性のためです。
バージョン 2 以上のファイルを読み込むとき、リーダは、スキップする目的を除
いて、バージョン 1 のヘッダとデータブロックを無視すべきです。
リーダは、ファイルの有効性チェックの一環として、ヘッダとデータブロックの
合計長を計算し、それらがすべて実際のファイルサイズにすべて収まることを
チェックするべきです。
正のうるう秒が発生したとき、リーダは、うるう秒の直前の秒を含むローカルの
分に余分な秒を追加するべきです。UTC オフセットが 60 秒の倍数でないときに
これが起こるなら、うるう秒は、ローカルの分の最後の秒より前に起こり、分の
残りのローカル秒は、通常の 59 の代りに 60 まで数えられます。UTC オフセッ
トは、影響を受けません。
共通の相互運用性の問題
このセクションは、TZif ファイルの読み込み、または書き込みで共通の問題を文
書化しています。これらのほとんどは、古いリーダによって使用する TZif ファ
イルを生成での問題です。このセクションのゴールは、次の通りです:
• TZif ライタが古いまたはバグのある TZif リーダで共通の落とし穴を回避す
るファイルを出力するために、
• TZif リーダが将来の TZif ライタによって生成されたファイルを読み込むと
き、共通の落とし穴を回避するために、
• あらゆる将来の仕様作成者が TZif 形式を変更するとき、どのような種類の
問題が発生するか理解するために、
TZif 形式の新しいバージョンが定義されたとき、設計のゴールは、たとえリーダ
が設計されたものより新しい TZif バージョンであっても、リーダが TZif ファ
イルを正常に使用することができまるようにすることです。完全な互換性が達成
されなかったとき、グリッチ (glitches) をめったに使用されないタイムスタン
プに制限し、古いバージョンのリーダにも役に立つ新しいバージョンのデータを
生成するように設計されたライタで単純な部分的な回避策を許可する試みが行わ
れました。このセクションは、リーダのその他の共通のバグを文書化するのと同
様に、これらの互換性の問題と回避策を文書化することを試みます。
TZif との相互運用性の問題は、次のようなものを含みます:
• いくつかのリーダは、バージョン 1 のデータのみを調べます。部分的な回避
策として、ライタは、できるだけ多くのバージョン 1 データを出力すること
ができます。しかしながら、リーダは、バージョン 1 のデータを無視し、た
とえリーダのネイティブのタイムスタンプが 32 ビットしかなくても、バー
ジョン 2+ のデータを使用するべきです。
• バージョン 2 のために設計されたいくつかのリーダは、TZ のような文字列
で POSIX への拡張を解析することができないので、バージョン 3 以降の
ファイルの最後の遷移の後にタイムスタンプを誤って処理するかもしれませ
ん。部分的な回避策として、ライタは、バージョン 2 のリーダによって遠い
未来のタイムスタンプのみを誤って処理できるように、必要以上の遷移を出
力することができます。
• バージョン 2 のために設計されたいくつかのリーダは、24:00 - 例えば、永
続的な東部夏時間 (Eastern Daylight Time) (-04) を示す、TZ 文字列
``EST5EDT,0/0,J365/25''、以降の遷移で永続的な夏時間をサポートしていま
せん。回避策として、ライタは、東部の 2 つのタイムゾーンを標準時間に置
き換えることができます、例えば、は、1 年間の使用されていない標準時
(XXX, -03) と負の夏時間 (EDT, -04) があるタイムゾーンのための、
``XXX3EDT4,0/0,J365/23''。別の方法として、部分的な回避策として、ライ
タは、次の東のタイムゾーンを標準時間に置き換えることができます - 例え
ば、恒久的な大西洋標準時 (Atlantic Standard Time) (-04) については、
``AST4'' です。
• バージョン 2 または 3 のために設計され、RFC 8536 に厳密に準拠する必要
があるいくつかのリーダは、うるう秒のテーブルが開始時に切り捨てられて
いるか、または有効期限で終了しているバージョン 4 ファイルを拒否しま
す。
• いくつかのリーダは、フッタ (footer) を無視し、代わりに最後の遷移の時
間タイプから将来のタイムスタンプを予測します。部分的な回避策として、
ライタは、必要以上の遷移を出力することができます。
• いくつかのリーダは、常に時間タイプ 0 を選択するとは限らないヒューリス
ティックを使用して時間タイプを推測するという点において、最初の遷移の
前にタイムスタンプのために時間タイプ 0 を使用しません。部分的な回避策
として、ライタは、早い段階でダミー (no-op; 操作なし) の最初の遷移を出
力することができます。
• いくつかのリーダは、-2**31 以上のタイムスタンプがある最初の遷移の前
に、タイムスタンプを誤って処理します。32 ビットのタイムスタンプのみを
サポートするリーダは、この問題が起こりやすくなります、例えば、32 ビッ
トで表現できる一部のみである 64 ビットの遷移を処理するときなどです。
部分的な回避策として、ライタは、タイムスタンプ -2**31 でダミーの遷移
を出力することができます。
• いくつかのリーダは、タイムスタンプが符号付き 64 ビット値が最小である
なら、遷移を誤って処理します。-2**59 未満のタイムスタンプは、推奨され
ません。
• いくつかのリーダは、``<'' または ``>'' を含む POSIX スタイルの TZ 文
字列を誤って処理します。部分的な回避策として、ライタは、アルファベッ
ト文字のみを含むタイムゾーンの省略形について ``<'' または ``>'' を使
用しないようにすることができます。
• 多くのリーダは、非 ASCII 文字を含む時間ゾーンの省略形を誤って処理しま
す。これらの文字は、推奨されません。
• いくつかのリーダは、3 文字未満または 6 文字を超えるゾーンの省略形、ま
たは英数字、``'' と ``+'' 以外の ASCII 文字を含むゾーンの省略形を誤っ
て処理します。これらの省略は、推奨されません。
• いくつかのリーダは、対応する標準時のための UT オフセットよりも小さい
夏時間 UT オフセットを指定する TZif ファイルを誤って処理します。これ
らのリーダは、夏の観測標準時 (IST, +01) と冬季の夏時間 (GMT, +00)、
POSIX TZ 文字列 ``IST1GMT0,M10.5.0,M3.5.0/1'' と等価に使用する Ire
land (アイルランド) のような位置をサポートしていません。部分的な回避
策として、ライタは、POSIX TZ 文字列 ``GMT0IST,M3.5.0/1,M10.5.0'' と等
価なデータを出力することができ、したがって、標準時間と夏時間を入れ替
えます。この回避策は、1 年のどの部分が夏時間を使用しているかを誤認し
ますが、UT オフセットとタイムゾーンの省略形を正しく記録します。
• いくつかのリーダは、UTC オフセットが 60 秒の倍数でないとき、発生する
正のうるう秒について、あいまいなタイムスタンプを生成します。例えば、
UTC オフセット +01:23:45 で、正のうるう秒 78796801 (1972-06-30
23:59:60 UTC) のタイムゾーンで、いくつかのリーダは、78796800 と
78796801 の両方を 01:23:45 にマップし、後者を 01:23:46 にマッピングす
る代わりに、翌日の 01:23:45 ローカル時間にマッピングし、それらは、
78796815 を 01:23:60 の代わりに、01:23:59 にマッピングします。うるう
秒が 1972 年に導入されて以来、行政機関は、そのような UTC オフセットを
観察しないので、これは、まだ実際的な問題ではありませんでした。
いくつかの相互運用性の問題は、主にリーダの開発者への警告としてここにリス
トされる、リーダのバグです。
• いくつかのリーダは、負のタイムスタンプをサポートしていません。分散ア
プリケーションの開発者は、1970 年より前のデータを扱う必要があるなら、
この点を保持するべきです。
• いくつかのリーダは、非負のタイムスタンプがある最初の遷移の前のタイム
スタンプを誤って処理します。負のタイムスタンプをサポートしていない
リーダは、この問題が発生しそうです。
• いくつかのリーダは、``+'', ``'' または数字を含む ``08'' のようなゾー
ンの省略形を誤って扱います。
• いくつかのリーダは、従来の -12 時間から +12 時間の範囲外である UT オ
フセットを誤って処理するため、この範囲外にある Kiritimati (キリチマ
ティ) のような場所をサポートしていません。
• いくつかのリーダは、オフセットを 3600 で整数分割して 0 を取得し、
``+00'' として時間部分を表示するので、UT から [-3599, -1] 秒の範囲の
UT オフセットを誤って処理します。
• いくつかのリーダは、1 時間、15 分、または 1 分の倍数ではない UT オフ
セットを誤って処理します。
関連項目
time(3), localtime(3), tzset(3), tzsetup(8), zic(8), zdump(8)
A. Olson, P. Eggert, and K. Murchison, The Time Zone Information Format
(TZif), RFC 8536, February 2019,
https://datatracker.ietf.org/doc/html/rfc8536
https://doi.org/10.17487/RFC8536.
FreeBSD 13.2 December 15, 2022 FreeBSD 13.2