【C言語】time.hで日付や時刻を扱う簡単な方法【標準ライブラリ】
目次
- time.hとは
- 現在の時刻を取得する
- 時刻をフォーマットして表示する
- 経過時間を測定する
- time_t型の活用
- struct tm構造体の活用
- 時刻の変換
- システム時間を取得・変更する
- 実用的な活用例
time.hとは
C言語の標準ライブラリ time.h
は、時間や日付を扱うためのヘッダーファイルです。
主な機能には、現在の時刻の取得、経過時間の測定、時刻のフォーマット、時刻の変換などがあります。
現在の時刻を取得する
time()
関数を使用すると、現在の時刻を取得できます。
取得される時刻は「UNIX時間(1970年1月1日00:00:00 UTCからの秒数)」で表されます。
#include <stdio.h>
#include <time.h>
int main() {
time_t now = time(NULL);
printf("現在の時刻(UNIX時間): %ld\n", now);
return 0;
}
時刻をフォーマットして表示する
ctime()
や strftime()
を使うと、時刻を可読形式に変換できます。
#include <stdio.h>
#include <time.h>
int main() {
time_t now = time(NULL);
printf("現在の時刻: %s", ctime(&now));
return 0;
}
より柔軟なフォーマットが必要な場合は strftime()
を使います。
#include <stdio.h>
#include <time.h>
int main() {
time_t now = time(NULL);
struct tm *local = localtime(&now);
char buffer[80];
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local);
printf("フォーマットされた時刻: %s\n", buffer);
return 0;
}
経過時間を測定する
difftime()
を使うと、2つの時刻の差を求められます。
#include <stdio.h>
#include <time.h>
int main() {
time_t start = time(NULL);
// 何か時間のかかる処理(例: 5秒待つ)
sleep(5);
time_t end = time(NULL);
double elapsed = difftime(end, start);
printf("経過時間: %.2f秒\n", elapsed);
return 0;
}
time_t型の活用
time_t
は時刻を表す型で、UNIX時間を格納します。
これを使って時刻の保存や比較ができます。
struct tm構造体の活用
struct tm
は日付や時刻を詳細に分解するための構造体です。
localtime()
や gmtime()
を使って変換できます。
#include <stdio.h>
#include <time.h>
int main() {
time_t now = time(NULL);
struct tm *local = localtime(&now);
printf("年: %d\n", local->tm_year + 1900);
printf("月: %d\n", local->tm_mon + 1);
printf("日: %d\n", local->tm_mday);
return 0;
}
時刻の変換
mktime()
を使うと、struct tm
を time_t
に変換できます。
#include <stdio.h>
#include <time.h>
int main() {
struct tm t = {0};
t.tm_year = 2024 - 1900;
t.tm_mon = 5 - 1;
t.tm_mday = 20;
time_t time_value = mktime(&t);
printf("UNIX時間: %ld\n", time_value);
return 0;
}
システム時間を取得・変更する
clock()
を使うと、プログラムのCPU時間を取得できます。
#include <stdio.h>
#include <time.h>
int main() {
clock_t start = clock();
// 何か処理をする(例: ループ)
for (volatile int i = 0; i < 100000000; i++);
clock_t end = clock();
double elapsed = (double)(end - start) / CLOCKS_PER_SEC;
printf("CPU時間: %.6f秒\n", elapsed);
return 0;
}
実用的な活用例
- ログのタイムスタンプを記録
- 実行時間を測定して最適化
- 一定時間ごとに処理を実行
- 日付に基づくファイル管理
C言語の time.h
を活用すると、さまざまな時間関連の処理が可能になります。
基本的な時刻取得やフォーマットから、経過時間の計測、システム時間の操作まで、用途に応じて使い分けてください。