標準
標準/拡張機能 |
C/C++ |
依存項目 |
POSIX.1
XPG4
XPG4.2
z/OS® UNIX
Single UNIX Specification、バージョン 3
|
両方 |
|
形式
#define _POSIX_SOURCE
#include <time.h>
void tzset(void);
機能説明
tzset() 関数は、環境変数 TZ の値を使用して、ctime()、localtime()、mktime()、および strftime() が使用する時間変換情報を設定します。TZ が環境にないか、正しくない場合
には、時間変換情報は LC_TOD ロケール・カテゴリーから
取得されます。
tzset() も、次のとおり外部変数
tzname を
設定します。
extern char *tzname[2] = {"std", "dst"};
ここで、std と dst は標準時間帯名と
サマータイム時間帯名で、それぞれ TZ または LC_TOD ローカル・
カテゴリーで指定されます。
tzset() は、ctime()、localtime()、mktime()、setlocale()、および strftime() によって呼び出されます。また、これは明示的にアプリケーション・プログラムによっても
呼び出せます。
tzset() が認識する TZ 値の形式は、次のとおりです。
stdoffset[dst[offset][,rule]]
- std と dst
- 3 バイト未満は指示しませんが、TZNAME_MAX を超えるバイト数
も指示しません。これらは、標準 (std) 時間帯と
サマータイム (dst) 時間帯を指定するバイト数です。TZNAME_MAX を
超えるバイト数が std または dst に指定された
場合には、tzset() は TZNAME_MAX バイト数まで切り捨てます。std のみが
必要です。dst が欠落している場合には、サマータイム時間はこのロケールに適用されません。英大文字と
英小文字は、明示的に許可されています。先行コロン (:)
または数字、コンマ (,)、マイナス (-)、プラス (+)、および NULL 文字を除く文字は、これらのフィールドでの表示が
許可されています。これらの文字の意味は指定されていません。
- offset
- 協定世界時 (UTC) に到着するために、現地時間に追加する必要がある値を示します。
offset は次の形式です。hh[:mm[:ss]] 分 (mm) と
秒 (ss) はオプショナルです。時間 (hh) は必要で、単一数字でも可能です。
offset は std の後に続いている必要が
あります。offset が dst に続いていない場合には、サマータイム時間は標準時間より 1 時間進んでいると
想定されます。1 つ以上の数字を使用できます。値は常に 10 進数と解釈されます。時間は 0 と 24 の間で
ある必要があります。分と秒 (あれば) は 0 と 59 の間
である必要があります。標準時間 offset と
サマータイム時間 offset との差は 0 より大きいか
等しくなければなりませんが、差は 24 時間より小さくなる必要があります。これらの範囲以外の値を使用すると、tzset() は
時間変換情報のために TZ 環境変数ではなく LC_TOD カテゴリーを
使用することになります。offset の前にマイナス (-) が付いていると、本初子午線の東の時間帯を意味します。 offset の前にプラス (+) を付けるかどうかはオプションで、これは本初子午線の西の時間帯を意味します。
- rule
- サマータイム時間へ変更する時点および標準時間に戻る時点を
指示します。規則は次の形式になっています。date[/time],date[/time]
最初の日付は標準時間からサマータイム時間への変更が行われた
時点を説明し、2 番目の日付はその逆が行われた時点を説明して
います。各時間フィールドは、現行の現地時間で他の時間帯に変更される
時点を説明しています。
日付の形式は、次のいずれかになっている必要があります。
- Jn
- ユリウス日 n (1≤n≤365)。 うるう日は計算に
入れません。すなわち、うるう年を含むすべての年で、2 月 28 は 59 日目で、3 月 1 日は 60 日目です。その時々に 2 月 29 日を明示的に引用できません。
- n
- ゼロを基礎とするユリウス日 (0≤n≤365)。 うるう日は
計算され、2 月 29 日を引用できます。
- Mm.n.d
- 1 年の m 月の第 n 週の d 番目の日 (0≤d≤6) (1≤n≤5 および 1≤m≤12。ここで週 5 は「m 月の最後の d 日」を意味し、
これは第 4 週または第 5 週に見られます)。週 1 は、d 曜日が見られる最初の週です。ゼロ日は日曜日です。
時間はオフセットと同じ形式になっています。ただし、先行符号、負符号 (-) または正符号 (+) は許可されます。時間が
指定されていない場合には、デフォルトは 02:00:00 です。
TZ でまたは LC_TOD カテゴリーで dst が指定され、rule が指定されていない場合には、サマータイム時間開始日付のデフォルトは M4.1.0 で、サマータイム時間終了日付のデフォルトは M10.5.0 です。
XPG4 の特殊な動作: tzset() 関数は、外部変数 timezone を 協定世界時 (UTC) とローカル標準時間との間の差 (秒数) に設定します。サマータイム変換を使用中の時間帯に適用してはならない場合には、tzset() は外部変数 daylight を 0 に設定します。そうでない場合には、ゼロ以外に設定します。
外部変数 timezone と daylight はプロセスに
対してグローバルなので、これらはマルチスレッド・アプリケーションまたは DLL から実行している
アプリケーションでは使用できません。ランタイム・ライブラリーは、これらの外部変数のスレッド特定の
バージョンのアドレスを戻す 2 つの特殊関数、__tzone() と
__dlght() を提供します。
POSIX C の特殊な動作: スレッド化されたアプリケーションによって
初期処理スレッド (IPT) から呼び出されると、tzset() 関数だけ
が TZ 環境変数を解析します。
注: この関数は時間帯情報に依存します。以下から時間帯情報が
提供されます。
- POSIX(ON) と TZ が正確に定義さ
れている場合は、TZ 環境変数。POSIX(OFF) と _TZ が正確に定義さ
れている場合は、_TZ 環境変数。
- POSIX(OFF) または TZ が定義されない場合には、現行ロケールの LC_TOD カテゴリー。
- TZ も _TZ も定義されない場合、時間帯情報について現行ロケールの値が照会されます。TZ も _TZ も定義されず、LC_TOD 時間帯情報が現行ロケールに存在しない場合、デフォルト値が現地時間に適用されます。POSIX プログラムでは単にデフォルトで協定世界時 (UTC) になりますが、非 POSIX プログラムでは、システム・クロックの設定に基づいて UTC からのオフセットを確立します。
現地時間を処理するための時間帯のカスタマイズについて詳しくは、「z/OS XL C/C++ プログラミング・ガイド」の『時間帯のカスタマイズ』を参照してください。
時間帯外部変数 tzname、timezone、および
daylight を宣言することで、フィーチャー・テストは time.h 内で保護されます。
戻り値
tzset() は、値を戻しません。
設定される errno 値はありません。
例
CELEBT17 ⁄* CELEBT17
This example set time conversion information for
Eastern Standard and Eastern Daylight Savings Time in the
United States.
*⁄
#define _POSIX_SOURCE
#include <env.h>
#include <time.h>
int main(void)
{
setenv("TZ", "EST5EDT", 1);
tzset();
}