サイトマップ / 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言語講座−それ自体コンパイルできる教材を使った講座です−