[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言語で現在時刻を表示する方法とその応用例について学びました。
基本的な時刻の取得から、ログ記録、タイマー、スケジューリングまで、時刻を活用するさまざまな方法を紹介しました。
これを機に、時刻を活用したプログラムを作成し、実際のプロジェクトに応用してみてください。
 
![[C言語] 年月日から曜日を求める方法を解説](https://af-e.net/wp-content/uploads/2024/08/thumbnail-4747.png)
![[C言語] 現在時刻をマイクロ秒で取得する方法【Windows/UNIX】](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2583.png)
![[C言語] ミリ秒の数値を時間に変換する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2589.png)
![[C言語] 現在時刻を文字列として取得する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2588.png)
![[C言語] 現在時刻を取得する方法【Windows/UNIX】](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2586.png)
![[C言語] Windows環境で現在時刻をミリ秒単位で取得する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2585.png)
![[C言語] 現在時刻をミリ秒単位で取得する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2584.png)
![[C言語] 日時を扱う方法をわかりやすく解説](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2597.png)
![[C言語] 時間を時分秒に変換する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2596.png)
![[C言語] 2つの時間の大小を比較する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2595.png)
![[C言語] 時間を足し算したあとの時刻を取得する](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2594.png)
![[C言語] 現在の時間を取得する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2593.png)