サイトマップ / C言語講座出入り口総目次目次:時刻と時間>ある時刻からの経過時間

青い直線

ある時刻からの経過時間

青い直線

[現在時刻と年月日と曜日を表示]←このソース→[ビットシフト]

/* 今回も時間の話です。西暦 2000 年1月1日からの秒数を計算して、表示します。 */

/* mktime( ) */

/* 今回使う標準ライブラリ関数は、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( )

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

青い直線

サイトマップ / C言語講座出入り口総目次目次:時刻と時間>ある時刻からの経過時間