ホームC言語Tips集日付・時刻 ≫ 2つの時刻の差を求める

C言語Tips集 - 2つの時刻の差を求める

C言語で 2 つの時刻の差を求めるには以下の 2 種類の方法があります.

  1. difftime 関数を使用する
  2. clock 関数でプロセッサ時間を 2 回取得して差分を求める

difftime 関数を使用して 2 つの時刻の差を求める

#include <time.h>
double difftime(
    time_t time1,
    time_t time0
);

difftime 関数は,2 つの暦時刻の差 (time1 - time0) を求め,その差を秒単位で返す関数です.
なお,一般に time1 と time2 は time 関数を使って取得します.具体的には以下のように記述します.

double diff;
clock_t time1, time0;

/* 暦時刻を取得 */
time0 = time(NULL);

/* 処理 */

/* 処理後の暦時刻を取得 */
time1 = time(NULL);

/* 差分を求める */
diff = difftime(time1, time0);

clock 関数を使用して 2 つの時刻の差を求める

#include <time.h>
clock_t clock(void);

clock 関数はそのプログラムの実行にだけ関連した処理系定義の時点から,そのプログラムで使用したプロセッサ時間を処理系の最良の近似で返す関数です.

clock 関数の呼び出しに失敗した場合,この関数は (clock_t)-1 を返します.

2 つの時刻の差を求めるには clock 関数を 2 回呼び出し,差分を求めます.具体的には以下のように記述します.

double diff;
clock_t start, stop;

/* プロセッサ時間を取得 */
start = clock();

/* 処理 */

/* 処理後のプロセッサ時間を取得 */
stop = clock();

/* 差分を求める */
diff = (double)(stop - start) / CLOCKS_PER_SEC;

C言語サンプルプログラム

以下に difftime 関数と clock 関数を使用して 2 つの時刻の差を求めるサンプルプログラムを示します.

/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* functions */
void gain_time(void);

/* main */
int main(void) {
    clock_t start, stop;
    double diff;

    /* -------- difftime を使う -------- */
    /* 暦時刻を取得 */
    start = time(NULL);
    /* 時間稼ぎ */
    gain_time();
    /* 時間稼ぎ後の暦時刻を取得 */
    stop = time(NULL);
    /* 差分を求める */
    diff = difftime(stop, start);
    /* 差分を表示 */
    printf("difftime 関数 で計測: %.3f[sec]\n", diff);

    /* -------- clock を使う -------- */
    /* プロセス時間を取得 */
    start = clock();
    /* 時間稼ぎ */
    gain_time();
    /* 時間稼ぎ後のプロセス時間を取得 */
    stop = clock();
    /* 差分を求める */
    diff = (double)(stop - start) / CLOCKS_PER_SEC;
    /* 差分を表示 */
    printf("clock 関数 で計測: %.3f[sec]\n", diff);

    return EXIT_SUCCESS;
}

/* 時間稼ぎ */
void gain_time(void) {
    int i, j;
    for ( i = 0; i <= 100000; i++ ) {
        for ( j = 0; j <= 10000; j++ );
        if ( i % 10000 == 0 ) {
            putchar('-');
        }
    }
    printf("\n");
}

実行例

サンプルプログラムの実行結果は以下のようになります.

-----------
difftime 関数 で計測: 2.000[sec]
-----------
clock 関数 で計測: 1.953[sec]

※ 結果は実行環境により異なります.

Cプログラマの必読書

たくさんあるC言語関連の書籍の中でも特に役に立った本です.よかったら参考にしてみてください.

C実践プログラミング 第3版

C言語の実践的参考書.少々値段は張りますが初心者を脱しようとしている人は絶対に読むべきです.
文法だけでなく,コーディングスタイルやデバッグなど文字通り「実践的」なことが書かれているので非常にためになります. オライリーの本は,読みにくい本が多いのですが本書はとても読みやすくオススメです.


C言語ポインタ完全制覇 (標準プログラマーズライブラリ)

ポインタの解説書としては最高の書籍です.
この1冊でポインタを完全に理解することができます.全くの初学者が読むには敷居が高いですが,入門書を読み終えた後に読むと非常に有益です.

日付・時刻の取得