[C言語] 現在時刻を画面に表示する方法
C言語で現在時刻を画面に表示するには、標準ライブラリのtime.h
を使用します。
まず、time_t
型の変数を宣言し、time()
関数を使って現在の時刻を取得します。
次に、localtime()
関数を用いてtm
構造体に変換し、strftime()
関数を使ってフォーマットを指定して文字列に変換します。
最後に、printf()
関数を使ってフォーマットされた時刻を画面に表示します。
現在時刻を表示するプログラム
C言語で現在時刻を表示する方法について解説します。
ここでは、基本的なプログラムの例から、エラーハンドリング、ユーザー入力によるフォーマット変更までを順に説明します。
基本的なプログラムの例
まずは、C言語で現在時刻を表示する基本的なプログラムを紹介します。
このプログラムでは、time.h
ライブラリを使用して現在時刻を取得し、表示します。
#include <stdio.h>
#include <time.h>
int main() {
// 現在時刻を取得
time_t currentTime;
time(¤tTime);
// 現在時刻を文字列に変換
char* timeString = ctime(¤tTime);
// 現在時刻を表示
printf("現在時刻: %s", timeString);
return 0;
}
現在時刻: Thu Oct 12 14:23:45 2023
このプログラムは、time()関数
を使って現在の時刻を取得し、ctime()関数
で人間が読みやすい形式に変換して表示します。
エラーハンドリングの実装
次に、エラーハンドリングを追加したプログラムを紹介します。
time()関数
やctime()関数
が失敗した場合に備えて、エラーチェックを行います。
#include <stdio.h>
#include <time.h>
int main() {
// 現在時刻を取得
time_t currentTime;
if (time(¤tTime) == ((time_t)-1)) {
fprintf(stderr, "時刻の取得に失敗しました。\n");
return 1;
}
// 現在時刻を文字列に変換
char* timeString = ctime(¤tTime);
if (timeString == NULL) {
fprintf(stderr, "時刻の変換に失敗しました。\n");
return 1;
}
// 現在時刻を表示
printf("現在時刻: %s", timeString);
return 0;
}
このプログラムでは、time()関数
が失敗した場合にエラーメッセージを表示し、プログラムを終了します。
また、ctime()関数
が失敗した場合も同様にエラーメッセージを表示します。
ユーザー入力によるフォーマット変更
最後に、ユーザーが入力したフォーマットで時刻を表示するプログラムを紹介します。
ここでは、strftime()関数
を使用して、ユーザーが指定したフォーマットで時刻を表示します。
#include <stdio.h>
#include <time.h>
int main() {
// 現在時刻を取得
time_t currentTime;
struct tm* localTime;
if (time(¤tTime) == ((time_t)-1)) {
fprintf(stderr, "時刻の取得に失敗しました。\n");
return 1;
}
localTime = localtime(¤tTime);
if (localTime == NULL) {
fprintf(stderr, "ローカル時刻の取得に失敗しました。\n");
return 1;
}
// ユーザーにフォーマットを入力してもらう
char format[100];
printf("時刻のフォーマットを入力してください (例: %%Y-%%m-%%d %%H:%%M:%%S): ");
fgets(format, sizeof(format), stdin);
// フォーマットに従って時刻を表示
char formattedTime[100];
if (strftime(formattedTime, sizeof(formattedTime), format, localTime) == 0) {
fprintf(stderr, "フォーマットされた時刻の生成に失敗しました。\n");
return 1;
}
printf("フォーマットされた時刻: %s\n", formattedTime);
return 0;
}
このプログラムでは、ユーザーが入力したフォーマットに従って時刻を表示します。
strftime()関数
を使用することで、様々なフォーマットで時刻を表示することが可能です。
応用例:時刻を使ったプログラム
現在時刻を取得する方法を学んだところで、次にその応用例をいくつか紹介します。
時刻を使ったプログラムは、ログの記録やタイマー、スケジューリングなど、さまざまな場面で活用できます。
ログファイルに時刻を記録する
プログラムの実行状況を記録するために、ログファイルに時刻を記録する方法を紹介します。
これにより、プログラムの動作を後から確認することができます。
#include <stdio.h>
#include <time.h>
void logMessage(const char* message) {
FILE* logFile = fopen("log.txt", "a");
if (logFile == NULL) {
fprintf(stderr, "ログファイルを開けませんでした。\n");
return;
}
// 現在時刻を取得
time_t currentTime;
time(¤tTime);
char* timeString = ctime(¤tTime);
// ログメッセージをファイルに書き込む
fprintf(logFile, "[%s] %s\n", timeString, message);
fclose(logFile);
}
int main() {
logMessage("プログラムが開始されました。");
// 他の処理
logMessage("プログラムが終了しました。");
return 0;
}
このプログラムは、logMessage関数
を使ってログファイルにメッセージと時刻を記録します。
fopen関数
でファイルを開き、fprintf関数
でメッセージを書き込みます。
時刻を使ったタイマーの実装
次に、時刻を使って簡単なタイマーを実装する方法を紹介します。
指定した秒数が経過したことを知らせるタイマーを作成します。
#include <stdio.h>
#include <time.h>
void startTimer(int seconds) {
printf("%d秒のタイマーを開始します...\n", seconds);
time_t startTime = time(NULL);
while (1) {
time_t currentTime = time(NULL);
if (difftime(currentTime, startTime) >= seconds) {
printf("タイマーが終了しました。\n");
break;
}
}
}
int main() {
startTimer(5); // 5秒のタイマー
return 0;
}
このプログラムは、startTimer関数
を使って指定した秒数のタイマーを開始します。
difftime関数
を使って経過時間を計算し、指定した時間が経過したらメッセージを表示します。
時刻を使ったスケジューリング
最後に、時刻を使って特定の時間に処理を実行するスケジューリングの例を紹介します。
ここでは、毎日特定の時間にメッセージを表示するプログラムを作成します。
#include <stdio.h>
#include <time.h>
void scheduleTask(int hour, int minute) {
printf("毎日 %02d:%02d にタスクを実行します。\n", hour, minute);
while (1) {
time_t currentTime = time(NULL);
struct tm* localTime = localtime(¤tTime);
if (localTime->tm_hour == hour && localTime->tm_min == minute) {
printf("タスクを実行します。\n");
// タスクの処理をここに記述
sleep(60); // 1分待機して次の実行を防ぐ
}
}
}
int main() {
scheduleTask(14, 30); // 毎日14:30にタスクを実行
return 0;
}
このプログラムは、scheduleTask関数
を使って毎日指定した時間にタスクを実行します。
localtime関数
を使って現在の時刻を取得し、指定した時間と一致した場合にタスクを実行します。
まとめ
C言語で現在時刻を表示する方法とその応用例について学びました。
基本的な時刻の取得から、ログ記録、タイマー、スケジューリングまで、時刻を活用するさまざまな方法を紹介しました。
これを機に、時刻を活用したプログラムを作成し、実際のプロジェクトに応用してみてください。