TZSET(3) | Linux Programmer's Manual | TZSET(3) |
tzset, tzname, timezone, daylight - 時刻の変換情報を初期化する
#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 >= 1 ||
_XOPEN_SOURCE || _POSIX_SOURCE
tzname: _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE ||
_POSIX_SOURCE
timezone: _SVID_SOURCE || _XOPEN_SOURCE
daylight: _SVID_SOURCE || _XOPEN_SOURCE
tzset() 関数は TZ 環境変数を用いて tzname 変数を初期化する。 この関数は、タイムゾーンに依存する他の時刻変換関数から自動的に呼び出される。 System V 的な環境では、この関数は変数 timezone (UTC からの西向きの秒数) と daylight (このタイムゾーンにサマータイムに関するルールがなければ 0、 サマータイム期間が一年のどこかにあれば 0 以外) も設定する。
TZ 環境変数が設定されていない場合には、 システムのタイムゾーンが使用される。 ステムのタイムゾーンを設定するには、 tzfile(5) 形式のファイルを /etc/localtime にコピーしたりリンクしたりする。 これらのファイルがあるタイムゾーンデータベースはシステムのタイムゾーンディレクトリ (ファイル の節を参照) に置かれている。
TZ 環境変数が存在しているが、その値が空だったり、 以下に示す形式のどれにもあてはまらない場合は、 協定世界時 (Coordinated Universal Time: UTC) が用いられる。
TZ の値は以下の 2 つの形式のいずれかを取ることができる。 最初の形式は、 使用するタイムゾーンを表す文字列を直接指定する方法である。
この指定方法ではスペースは一切使用しない。 std 文字列はタイムゾーンの名前を指定する。 アルファベットからなる 3 文字以上の文字列でなければならない。 offset 文字列は std の直後に続き、 協定世界時 (UTC) を得るために ローカルな時刻に加えなければならない時間を指定する。 offset は、ローカルタイムゾーンがグリニッジ子午線 (Prime Meridian) の西なら正の値、東なら負の値を取る。 時間 (hour) は 0 から 24 の間でなければならない。 分 (minute) と秒 (second) は 0 から 59 の間でなければならない。
dst 文字列と offset は、 対応するサマータイムゾーンの名前とオフセットを指定する。 オフセットが省略されると、デフォルトでは標準の一時間前となる。
start フィールドはサマータイムが有効になる時刻、 end フィールドは標準に戻る時刻である。 これらのフィールドは以下の形式で指定する。
time フィールドは、ローカルタイムを切り替える時刻を、 変更前のローカルタイムで表したものである。 省略された場合のデフォルトは 02:00:00 である。
ニュージーランドの例である。 ニュージーランドでは、標準のタイムゾーン (NZST) は UTC より 12時間進んでおり、 サマータイム (NZDT) は UTC の 13時間進んでいる。 サマータイムは 10月の第一日曜から 3月の第三日曜までであり、 ローカルタイムの切り替えはデフォルトの 02:00:00 に行われる。
TZ="NZST-12:00:00NZDT-13:00:00,M10.1.0,M3.3.0"
2 番目の形式は、タイムゾーンの情報をファイルから読み込むように指定する。
ファイルの指定 filespec が省略された場合、 もしくは指定された値が解釈できない場合、 協定標準時 (UTC; Coordinated Universal Time) が使用される。 指定された場合、 filespec はタイムゾーン情報を読み出す tzfile(5) 形式のファイルを指定する。 filespec が '/' で始まっていない場合には、 システムタイムゾーンディレクトリからの相対パスで ファイルが指定されたことになる。 コロンが省略された場合には、 上記の TZ の各形式での解釈を試みる。
例を挙げておく。もう一度ニュージーランドの例である。
TZ=":Pacific/Auckland"
上記は現在の標準のファイルの場所だが、 glibc のコンパイル時に変更できる。
SVr4, POSIX.1-2001, 4.3BSD.
daylight 変数は、現在がサマータイムであるかどうかを示しているのではない。 これはいくつかあるアルゴリズムのうちの番号を与える (アルゴリズムについては gettimeofday(2) の tz_dsttime 変数を見よ)。 これはもう何年も使われていないが、SUSv2 では必要とされている。
4.3BSD には char *timezone(zone, dst) というルーチンがあり、これは 最初の引数 (UTC からの西向きの分数) に対応するタイムゾーンの名前を返す。 二番目の引数が 0 の場合は標準の名前が用いられ、 それ以外はサマータイム版の名前が用いられる。
date(1), gettimeofday(2), time(2), ctime(3), getenv(3), tzfile(5)
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2015-01-30 |