サイトマップ / C言語講座>出入り口>総目次>目次:時刻と時間>ある時刻からの経過時間
[現在時刻と年月日と曜日を表示]←このソース→[ビットシフト]
/* 今回も時間の話です。西暦 2000 年1月1日からの秒数を計算して、表示します。 */
/* 今回使う標準ライブラリ関数は、mktime( ) と difftime( ) です。mktime( ) は localtime( ) の逆の働きをします。つまり時間を表す構造体 struct tm を、西暦 1970 年1月1日からの経過秒数に変換します。
#include <time.h> time_t mktime(struct tm *timeptr); 例:time = mktime(&date);
時間を表す構造体 struct tm は前回も示しましたが、もう一度下記に示します。
struct tm { int tm_sec; // 秒 int tm_min; // 分 int tm_hour; // 時 int tm_mday; // 日 int tm_mon; // 月( 1月=0 ) int tm_year; // 西暦年 - 1900 int tm_wday; // 曜日( 日=0 ) int tm_yday; // 日(年を通して) int tm_isdst; // サマータイムフラグ };
時間を表す構造体 struct tm のフィールドのうち、tm_wday と tm_yday については、間違った値が設定されていても、それを無視して正しい値を設定します。従って、これらの値を設定する必要はありません。
設定する必要のあるフィールドを示します。下記の例では構造体を、西暦 2000 年1月1日に設定します。
tm_sec = 0 // 秒 tm_min = 0 // 分 tm_hour = 0 // 時 tm_mday = 1 // 日 tm_mon = 0; // 月( 1月=0) tm_year = 100 // 西暦年 - 1900 tm_isdst = -1 // サマータイムフラグ
difftime( ) は、二つの time_t 型の時間の差を返します。difftime( ) は、 time1 と time0 の時間差をdouble 型で、秒単位で返します。
#include <time.h> double difftime(time_t time1, time_t time0); 例:x = difftime(time1, time0);
ソースプログラムでは struct tm に、西暦 2000 年1月1日を設定し、それをmktime( ) で、time_t 型の時間に変換し、difftime( ) で現在の時間との差を求めます。 */
#include <stdio.h> #include <time.h> void main(void); void main(void) { time_t timer; struct tm *now; struct tm y2k; time_t present, at2k; double from2k; /* 日付と時刻を表示 */ timer = time(NULL); now = localtime(&timer); printf("%s\n", asctime(now)); /* 西暦 2000 年1月1日を構造体に設定 */ y2k.tm_sec = 0; /* 秒 */ y2k.tm_min = 0; /* 分 */ y2k.tm_hour = 0; /* 時 */ y2k.tm_mday = 1; /* 日 */ y2k.tm_mon = 0; /* 月 ( 1月=0 ) */ y2k.tm_year = 100; /* 西暦年 - 1900 */ y2k.tm_isdst = -1; /* サマータイムフラグ */ /* 西暦 1970 年1月1日から西暦 2000 年1月1日までの 経過秒数がat2k に入る */ at2k = mktime(&y2k); /* 西暦 1970 年1月1日からの経過秒数 */ present = time(NULL); /* 西暦 2000 年1月1日からの経過秒数 */ from2k = difftime(present, at2k); /* 西暦 2000 年1月1日からの経過秒数を表示 */ printf("%8.0lf sec from Jan 1 2000\n",from2k); } |
[現在時刻と年月日と曜日を表示]←このソース→[ビットシフト]
/* (C) 2000- YFプロ. All Rights Reserved. */ 提供:C言語講座−それ自体コンパイルできる教材を使った講座です−