|
|
gp_mktime(3c)
名前
gp_mktime()-tm 構造体をカレンダー時間に変換します。
形式
#include <time.h>
time_t gp_mktime (struct tm *timeptr);
機能説明
gp_mktime() は、timeptr が指す tm 構造体で表現される時間をカレンダー時間 (1970 年 1 月 1 日から数えた秒数) に変換します。
tm 構造体の形式は次の通りです。
struct tm {
int tm_sec; /* seconds after the minute [0, 61] */
int tm_min; /* minutes after the hour [0, 59] */
int tm_hour; /* hour since midnight [0, 23] */
int tm_mday; /* day of the month [1, 31] */
int tm_mon; /* months since January [0, 11] */
int tm_year; /* years since 1900 */
int tm_wday; /* days since Sunday [0, 6] */
int tm_yday; /* days since January 1 [0, 365] */
int tm_isdst; /* flag for daylight savings time */
};
gp_mktime() は、カレンダー時間を計算する以外に、指定された tm 構造体を正規化します。構造体の tm_wday メンバと tm_yday メンバの元の値は無視され、他のメンバの元の値は、構造体の定義で示される範囲に制限されません。正常終了の場合、tm_wday および tm_yday の値は適切に設定されます。他のメンバは指定されたカレンダー時間を表すように設定されますが、それらの値は、正しい範囲内に収まるように強制されます。tm_mday の最終的な値は、tm_mon および tm_year が決まるまで設定されません。
構造体の各メンバの元の値は、決められた範囲よりも大きくても小さくてもかまいません。たとえば、tm_hour が -1 なら、深夜 12 時の 1 時間前、tm_mday が 0 ならその月の 1 日前、tm_mon が -2 なら、tm_year の 1 月の 2 ヵ月を意味します。
tm_isdst が正の場合、元の値は代替タイムゾーンに基づいていると見なされます。代替タイムゾーンが計算されたカレンダー時間に対して有効でないことが判明すると、各メンバはメイン・タイムゾーンに調整されます。同様に、tm_isdst がゼロの場合、元の値はメイン・タイムゾーンであると見なされ、メイン・タイムゾーンが有効でなければ代替タイムゾーンに変換されます。tm_isdst が負の場合、正しいタイムゾーンが判断され、各メンバは調整されません。
ローカル・タイムゾーンの情報は、あたかも gp_mktime() が tzset() を呼び出したかのように使われます。
gp_mktime() は、特定のカレンダー時間を返します。カレンダー時間を表現できない場合、この関数は値 (time_t)-1 を返します。
マルチスレッドのアプリケーションのスレッドは、TPINVALIDCONTEXT を含むどんなコンテキスト状態でも、gp_mktime() を呼び出すことができます。
使用例
2001 年 7 月 4 日は何曜日か?
#include <stdio.h>
#include <time.h>
static char *const wday[] = {
"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday", "-unknown-"
};
struct tm time_str;
/*...*/
time_str.tm_year = 2001 - 1900;
time_str.tm_mon = 7 - 1;
time_str.tm_mday = 4;
time_str.tm_hour = 0;
time_str.tm_min = 0;
time_str.tm_sec = 1;
time_str.tm_isdst = -1;
if (gp_mktime(time_str) == -1)
time_str.tm_wday=7;
printf("%s\en", wday[time_str.tm_wday]);
注意事項
tm 構造体の tm_year は、1970 年以降でなければなりません。1970 年 1 月 1 日の 00:00:00 UTC より前、または 2038 年 1 月 19 日の 03:14:07 UTC より後のカレンダー時間を表現することはできません。
移植性
コンパイル・システムが ANSI C の mktime() 関数をすでに提供しているシステムでは、gp_mktime() は mktime() を呼んで、変換を行うだけです。それ以外の場合、変換は直接 gp_mktime() の内部で行われます。
後者の場合、TZ 環境変数が設定されていなければなりません。多くのインストレーションでは、TZ は、ユーザがログオンする際にデフォルトで正しい値に設定されることに注意してください。TZ のデフォルト値は GMT0 です。TZ の形式は次の通りです。
stdoffset[dst[offset],[start[time],end[time]]]
start および end には、これらの省略可能なフィールドが与えられなかった場合、実装依存のデフォルトが使用されます。
time は、offset と同じ形式で、違いは先頭の符号 ("-" または "+") が許されることです。time が与えられなかった場合のデフォルトは 02:00:00 です。
関連項目
UNIX システムのリファレンス・マニュアルの ctime(3c)とgetenv(3c)、timezone(4)
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|