#include <time.h> void tzset(void); extern char *tzname[2]; extern long timezone; extern int daylight;
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
tzset():
_POSIX_C_SOURCE
tzname:
_POSIX_C_SOURCE
timezone, daylight:
_XOPEN_SOURCE
|| /* glibc >= 2.19: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _SVID_SOURCE
このタイムゾーンが "America/New_York" のような地理的タイムゾーンである場合、tzset() 機能はこれらの変数を未指定の値に初期化します(下記参照)。
TZ 環境変数が設定されていない場合には、 システムのタイムゾーンが使用されます。システムのタイムゾーンを設定するには、 tzfile(5) 形式のファイルを /etc/localtime にコピーしたりリンクしたりします。これらのファイルがあるタイムゾーンデータベースは、システムのタイムゾーンディレクトリ (ファイル の節を参照) に置かれています。
TZ 環境変数が存在しているが、その値が空だったり、 以下に示す形式のどれにもあてはまらない場合は、 協定世界時 (Coordinated Universal Time: UTC) が用いられます。
空でない値 TZ は、2 つの形式のいずれかになります。どちらの形式でも、前にコロンを付けることができますが、コロンは無視されます。最初の形式は、使用するタイムゾーンを直接表す文字列です:
std offset[dst[offset][,start[/time],end[/time]]]
この指定方法ではスペースは一切使用しません。 std 文字列はタイムゾーンの省略形を指定します。アルファベットからなる 3 文字以上の文字列でなければなりません。小なり記号 (<) と大なり記号 (>) で囲むと、プラス (+) 記号、マイナス (-) 記号、および数字が含まれるように文字セットが拡張されます。 offset 文字列は std の直後に続き、 協定世界時 (UTC) を得るために ローカルな時刻に追加する時間を指定します。offset は、ローカルタイムゾーンがグリニッジ子午線 (Prime Meridian) の西なら正の値、東なら負の値を取ります。時間 (hour) は 0 から 24 の間で、分 (minute) と秒 (second) は 0 から 59 の間でなければなりません。
[+|-]hh[:mm[:ss]]
dst 文字列と offset は、 対応するサマータイムゾーンの名前とオフセットを指定します。オフセットが省略されると、デフォルトでは標準の一時間前となります。
start フィールドはサマータイムが有効になる時刻、 end フィールドは標準に戻る時刻です。これらのフィールドは以下の形式で指定します。
The time fields specify when, in the local time currently in effect, the change to the other time occurs. They use the same format as offset except that the hour can be in the range [-167,~ 167] to represent times before and after the named day. If omitted, the default is 02:00:00.
ニュージーランドの例です。ニュージーランドでは、標準のタイムゾーン (NZST) は UTC より 12時間進んでおり、 サマータイム (NZDT) は UTC の 13時間進んでいます。サマータイムは 9月の最終日曜から 4月最初の日曜までであり、ローカルタイムの切り替えの既定値は 02:00:00 です。
TZ="NZST-12:00:00NZDT-13:00:00,M9.5.0,M4.1.0/3"
2番目---または "geographic"---形式は、タイムゾーン情報をファイルから読み込むように指定します:
filespec
filespec は、タイムゾーン情報を読み出す tzfile(5) 形式のファイルを指定します。filespec が '/' で始まらない場合、ファイル指定はシステムのタイムゾーンディレクトリから相対的になります。指定されたファイルの読み込みや解釈ができない場合は、協定世界時 (UTC) が使用されます。ただし、filespec 形式は将来拡張される可能性があるため、アプリケーションは UTC を表すランダムな TZ 値に依存すべきではありません。
例を挙げます。もう一度ニュージーランドの例です:
TZ="Pacific/Auckland"
上記は現在の標準のファイルの場所ですが、 glibc のコンパイル時に変更できます。
| インターフェース | 属性 | 値 |
|
tzset() | Thread safety | MT-Safe env locale |
4.3BSD には char *timezone(zone, dst) というルーチンがあり、これは 最初の引数 (UTC からの西向きの分数) に対応するタイムゾーンの名前を返します。 二番目の引数が 0 の場合は標準の名前が用いられ、それ以外はサマータイム版の名前が用いられます。