bea ホーム | 製品 | dev2dev | support | askBEA
BEA Logo Tuxedo
 ドキュメントのダウンロード   サイトマップ   用語集 
検索
0

Tuxedo C リファレンス

 Previous Next Contents View as PDF  

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; /* その分からの秒数 [0, 61] */
int tm_min; /* その時間からの分数 [0, 59] */
int tm_hour; /* 深夜 12 時 からの時間数 [0, 23] */
int tm_mday; /* その月の日付 [1, 31] */
int tm_mon; /* 1 月からの月数 [0, 11] */
int tm_year; /* 1900 年からの年数 */
int tm_wday; /* 日曜日からの日数 [0, 6] */
int tm_yday; /* 1 月 1 日からの日数 [0, 365] */
int tm_isdst; /* 夏時間のフラグ */
};

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]]]

std および dst

標準 (std) および夏時間 (dst) のタイムゾーンを表す 3 バイト以上の文字です。std だけが必須です。dst が無い場合、このロケールには夏時間は適用されません。大文字と小文字をどちらでも使用できます。先頭のコロン (:)、数字、コンマ (,)、マイナス (-)、またはプラス (+) 以外のすべての文字が使用できます。

offset

協定世界時 (UTC) を得るためにローカル時間に加算しなければならない値を表します。offset の形式は次の通りです。hh[:mm[:ss]]。分 (mm) と秒 (ss) は省略可能です。時間 (hh) は必須で、一つの数字でもかまいません。std の次の offset は必須です。dst の次に offset が無ければ、夏時間は標準時間の 1 時間先であると見なされます。一つ以上の数字を使用でき、値は常に十進数として解釈されます。時間は 0 から 24 の間でなければならず、分 (および秒) は、もしあれば、0 から 59 の間でなければなりません。範囲外の値は、予期できない動作を引き起こす場合があります。先頭に &dlq;-&drq; がつくと、タイムゾ“ニッジ子午”ります。それ以外の場合、タイムゾーンは西にあります (省略可能な &dlq;+&drq; 符号で示してもかま“”art/timeend/time

いつ夏時間に変更し、いつ戻すかを示します。ここで、start/time は、いつ標準時間から夏時間への変更が発生しするかを示し、end/time は、逆の変更がいつ起こるかを示します。それぞれの time フィールドは、ローカル時間で、いつ変更が行われるかを示します。

startend の形式は次のうちのどれかです。

Jn

ユリウス日 n (1 < n > 365)。うるう日は含まれません。つまり、すべての年で 2 月 28 日が 59 日目で、3 月 1 日が 60 日目です。2 月 29 日があってもそれを指定することはできません。

n

ゼロ・ベースのユリウス日 (0 < n > 365)。うるう日が含まれるので、2 月 29 日を指定することができます。

Mm.n.d

その年の m 月の n 週 (1 < n < 5、1 m < 12) の d 番目の日(0 < d < 6)です。ただし、週 5 は、4 週目または 5 週目に発生する「m 月の最後の d 日」を意味します。週 1 は、d 番目の日が発生する最初の週です。日 0 (ゼロ) は、日曜日です。

start および end には、これらの省略可能なフィールドが与えられなかった場合、実装依存のデフォルトが使用されます。

time は、offset と同じ形式で、違いは先頭の符号 (&dlq;-&drq; または“rq;) ”ことです。time が与えられなかった場合のデフォルトは 02:00:00 です。

関連項目

UNIX システムのリファレンス・マニュアルの ctime(3c) とgetenv(3c)、timezone(4)

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy