Light C | ← → 目次 索引 |
clock_t clock( void ); [OS]
プログラム起動の瞬間から経過した時間を取得します。clock() / CLOCKS_PER_SEC が秒数になります。Light C の場合、clock() はミリ秒単位の値を返します。
time_t time( time_t* ptr ); [OS]
現在の時刻を time_t 型で取得します。ptr に NULL 以外を使用すると、*ptr に戻り値と同じ値が設定されます。
Light C では、time_t は long として定義されており、グリニッジ標準時間 (ロンドン時間、GMT) 1970/1/1 00:00:00 からの経過秒数を表します。これは多くのコンパイラで採用されている方法です。この time_t では、1970/1/1 から 2038/1/18 までの日時を表すことができます。
struct tm* gmtime( time_t* ptr );
ptr で指定された time_t 値を tm 構造体に変換します。gmtime ではグリニッジ標準時間 (ロンドン時間)、localtime ではローカル時間 (Light C では日本時間) が tm 構造体に格納されます。指定する time_t 値は、通常 time() で取得します。
tm 構造体には、次のメンバがあります。これは ISO/JIS/ANSI の規定です。
struct tm* localtime( time_t* ptr );
struct tm { | ||
int tm_sec; | // 秒 (0-59) | |
int tm_min; | // 分 (0-59) | |
int tm_hour; | // 時 (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; | // 年通算日 (0-365) | |
int tm_isdst; | // 季節時間フラグ (-1) | |
}; |
gmtime と localtime が返す値は、ライブラリ内部の単一の静的な tm 構造体へのポインタです。そのため、これらの関数 (または ctime) を再び呼び出すと、最初の戻り値の内容が変化します。返された tm 値を確実に保存するには、返されたポインタをそのまま保存するのではなく、次のように tm 構造体の内容をコピーしてください。
time_t t = time( NULL ); | |
struct tm tim = *localtime( &t ); |
time とは異なり、gmtime と localtime は OS の API を呼び出さないため、OS には依存しません。Light C (および多くのコンパイラ) の gmtime と localtime は、1970/1/1 00:00:00 GMT からの経過秒数を表す time_t 値を、ISO/JIS/ANSI 規定の tm 構造体に変換します。
time_t mktime( struct tm* tim );
tm 構造体で示されたローカル時間 (日本時間) を time_t 値に変換します。localtime の逆の関数です。
char* ctime( time_t* ptr );
char* asctime( struct tm* tim );
日時を文字列に変換します。日時は、ctime では time_t へのポインタで、asctime では tm 構造体へのポインタで指定します。 次のような 25 文字 (末尾の 0 を入れて 26 バイト) の文字列が返されます。
Wed Aug 10 01:12:48 1999\n |
ライブラリ内部の静的な領域へのポインタが返されるため、これらの関数を再び呼び出すと、最初の戻り値の内容が変化します。
size_t strftime( char* buf, size_t len, char* form, struct tm* tim );
日時 tim を書式 form に従って文字列化し、最大 len-1 バイトまで buf に格納します。文字列の末尾には 0 が付加されます。変換後の文字列の長さが len-1 以下の場合は文字列の長さが返され、長さが超えた場合は 0 が返されます。
form には、sprintf と同様の形式で書式を指定します。ただし、使用できる変換指定子が異なります。strftime では、次の変換指定子を使用できます。
指定子 | 出力例 | 説明 |
---|---|---|
%a, %A | 水 | 曜日 (処理系依存) |
%b, %B | 8 月 | 月 (処理系依存) |
%c | 99-08-04 13:35:52 | 日付および時刻 (処理系依存) |
%d | 07 | 2 桁の日付 (01 〜 31) |
%H | 07 | 2 桁の時間 (00 〜 23) |
%I | 07 | 2 桁の時間 (00 〜 11) |
%j | 077 | 3 桁の年通算日 (001 〜 366) |
%m | 07 | 2 桁の月 (01 〜 12) |
%M | 07 | 2 桁の分 (00 〜 59) |
%p | AM | 午前と午後の区別 (処理系依存) |
%S | 07 | 2 桁の秒 (00 〜 59) |
%U | 07 | 日曜日を週の先頭とした年通算週 (00 〜 53) |
%w | 06 | 日曜日を 0 とした 1 桁の曜日 (0 〜 6) |
%W | 07 | 月曜日を週の先頭とした年通算週 (00 〜 53) |
%x | 99-08-04 | 日付 (処理系依存) |
%X | 13:35:52 | 時刻 (処理系依存) |
%y | 99 | 西暦下 2 桁 |
%Y | 1999 | 西暦年 |
%Z | TOKYO | 時間帯の名前 (処理系依存) |
%% | % | % 自体 |
double difftime( time_t t1, time_t t2 );
時間の秒単位の差 (t1 - t2) を double 値で返します。
Copyright © Tama Software Ltd, 1999-2012. | ← → 目次 索引 |