TZSET(3)

名称
tzset, tzsetwall - 時間変換情報の初期化

書式
#include <time.h> void tzset(void) void tzsetwall(void)

解説
tzset() 関数は、ライブラリルーチン localtime(3) により使用される 時間変換情報を初期化します。環境変数 TZ は、この変換をどのように行うかを指定します。

環境に TZ が現れていない場合は、 tzfile(5) 形式のファイル /etc/localtime により指定されたローカル壁時計時間に最も近い近似値が用いられます。

環境に TZ が現れているがその値が null ストリングである場合には、 世界標準時刻 (UTC) が用いられます ( うるう秒補正なしで )。

環境に TZ が現れ、その値がコロン (‘’) で始まる場合は、それ以降の値が tzfile(5) 形式ファイルのパス名として用いられ、そこから時間変換情報が読み 込まれます。パス名の最初のキャラクタがスラッシュ (‘/’) である場合は、それは 絶対パス名として用いられます。それ以外の場合は、そのパス名はシステムの 時間変換情報ディレクトリに対する相対パス名として用いられます。

その値がコロンで始まらない場合は、それはまず ( 上に 説明したように ) 時間変換情報の読み取り用ファイルのパス名として 用いられます。そのファイルが読めない場合は、その値は時間変換情報の 直接的仕様 ( 形式は下に説明 ) であると解釈されます。

環境変数 TZ が tzfile(5) 形式ファイルを指定しておらず、直接的仕様と解釈できない場合は、 UTC が用いられます。

tzsetwall() 関数は、ローカル壁時計時間に最も近い近似値を返すように調整を行います。

仕様形式 TZ を時間変換情報の仕様として直接使う場合は、次のようなシンタックスを 持つ必要があります ( 空白は読みやすくするために入れてあります ):

std offset [ dst [ offset] [, rule]]

ここで：

std と dst
    標準時間帯 ( std ) または夏時間帯 ( dst ) の指示子である 3 以上のバイト。必要なのは std のみです。 dst がない場合は、この地域では 夏時間が適用されません。大文字と小文字の区別は明示的に許可されます。先頭の コロン (‘’), 小数点、コンマ (‘’),, マイナス (‘-’), プラス (‘+’), および ASCII NUL 以外のキャラクタであれば使えます。

offset
    世界標準時を計算するためにローカル時間に加えるべき値を示します。 offset は、次のような形式を持ちます:

        hh [
        :mm
        [
        :ss
        ]
        ]

    分 (mm) および秒 (ss) を付けるのは任意です。時 は必要で、 1 桁の数字でも構いません。 std に続く offset は必要です。 dst の後に offset がない場合は、夏時間は標準時間よりも 1 時間進むものとみなします。 1 桁 以上の数字が使えます。値は常に十進数であると解釈されます。 時は 0 から 24 までの間、 また分 ( および秒 ) を指定する場合は 0 から 59 までの間でなければなりません。 先頭に (‘-’) が付いている場合は、時間帯は本初子午線の東となります。それ以外の 場合は、西となります ( 任意で先頭に (‘+’) を付けて指定しても構いません ) 。

rule
    いつ夏時間に変更するか、またいつ夏時間から元に戻すかを示します。 rule は次のような形式を持ちます:

    date/time,date/time

    ここで、最初の date は標準時間から夏時間への変更がいつ起きるかを表し、 2 番目の date はいつ元に戻すかを表します。それぞれの time フィールドは、 現在のローカル時間からもう一方の時間への変更をいつ行うかを表します。

    date の形式は、次のいずれかです:

    J n ユリウス日 n (1 n 365)。 うるう日は数えません。 すなわち、 うるう年を含めたすべての年で 2 月 28 日は 59 日目、 3 月 1 日は 60 日目になります。ときどきやってくる 2 月 29 日を明示的に 参照することはできません。

    n   0 を基準にしたユリウス日 (0 n 365 )。 うるう日は数えられ、 2 月 29 日を参照することは可能です。

    M m.n.d
        ある年の m 番目の月の第 n 週の d (0 d 6 ) 番目の曜日 (1 n 5), (1 m 12)。 ここで、第 5 週とは 第 4 週目または第 5 週目に起きる “ 第 m 月の最後の d 番目の日 ” を意味します。第 1 週は、 d 番目の日が起きる最初の週です。第 0 日は日曜日です。

        time は、先頭の符号 (‘-’) または (‘+’) が許されないこと以外は、 offset と同じ形式を持ちます。 time を与えない場合は、 02:00:00 がデフォルト値となります。

    TZ 仕様に rule がない場合は、システム時間変換情報ディレクトリの中の tzfile(5) 形式ファイル posixrules により指定された規則が用いられ、標準時間および夏時間の UTC からのオフセットは TZ の offset 値で指定された値により置き換えられます。

System V Release 3.1 との互換性を持たせるため、 rule を残りの仕様から区別するためにセミコロン (‘’); を使うこともできます。

ファイル
/etc/localtime
    ローカル時間帯ファイル
/usr/share/zoneinfo
    時間帯ディレクトリ
/usr/share/zoneinfo/posixrules
    POSIX スタイルの TZ に関する規則
/usr/share/zoneinfo/GMT
    UTC うるう秒

/usr/share/zoneinfo/GMT ファイルが存在しない場合は、 UTC うるう秒は /usr/share/zoneinfo/posixrules からロードされます。

参照
date(1), gettimeofday(2), ctime(3), getenv(3), time(3), tzfile(5)

歴史
tzset() および tzsetwall() 関数は、最初に 4.4BSD に現れました。