こんにちは、もがちゃんです。
今回は、C言語で2つの日付時間情報からその差を取得したい時に良く利用するdifftimeの使い方を簡単なサンプルプログラムとともに説明します。
目次
difftimeの項目
#include <time.h>
double difftime(time_t time1, time_t time0);
difftimeの説明
difftimeは、2つの日付時間情報の差分(time1 – time0)を秒単位で返します。
difftime関数は、二つの暦時刻の差、すなわち,time1-time0を計算する。
JISX3010 プログラム言語C
time1
日付時間差を求めたい日付時間情報を指定します。(被減数)
time0
日付時間差を求めたい日付時間情報を指定します。(減数)
返却値
time1 – time0の結果を秒単位で返します。
difftimeの使い方サンプル
difftimeを使用して日付時間情報の差を求めて出力する簡単なサンプルプログラムを紹介します。
サンプルプログラムと実行結果
#include <stdio.h>
#include <time.h>
int main(void) {
fprintf(stdout, "program start!\n");
char buffer[256];
// 減数日付時間情報を取得
time_t t0 = time(NULL);
fprintf(stdout, "t0:%s", ctime(&t0));
/* 時間稼ぎのためのループ */
for (long l = 1; l <= 10000000; l++) {
sprintf(buffer, "loop [%08ld]", l);
}
fprintf(stdout, "%s\n", buffer);
// ここまでのプロセッサ時間を取得して出力する
clock_t t = clock();
fprintf(stdout, "プロセッサ時間:[%ld],秒数:[%f]\n", (long) t, (double) t / CLOCKS_PER_SEC);
// 被減数日付時間情報を取得
time_t t1 = time(NULL);
fprintf(stdout, "t1:%s", ctime(&t1));
// 日付時間の差分を取得
double diff = difftime(t1,t0);
fprintf(stdout, "時間差(秒):[%f], 時間差(分):[%f], 時間差(時):[%f]\n", diff, diff / 60, diff / (60 * 60));
}
処理時間の計測などに使用するならclockを使用した方が精度の高い情報が得られますが、そこまで精度にこだわらなければ(秒単位程度で計測する位なら)difftimeを使用して処理時間を計測することも可能です。
difftimeの使い方まとめ
- difftimeは秒単位の差分を返すので、処理時間計測など精度が要求される場合の時間差取得には向いていない。
- difftimeは秒単位の差分を返すので、分単位や時間単位、日単位での差分を知りたい場合は、秒単位で取得した時間差を変換すれば良い。
- mktimeと合わせて使用する事で特定の日付時間情報との差を求めることができる。