[C言語] 現在時刻を画面に表示する方法

C言語で現在時刻を画面に表示するには、標準ライブラリのtime.hを使用します。

まず、time_t型の変数を宣言し、time()関数を使って現在の時刻を取得します。

次に、localtime()関数を用いてtm構造体に変換し、strftime()関数を使ってフォーマットを指定して文字列に変換します。

最後に、printf()関数を使ってフォーマットされた時刻を画面に表示します。

この記事でわかること
  • C言語で現在時刻を表示する基本的なプログラムの作成方法
  • 時刻取得におけるエラーハンドリングの実装方法
  • ユーザー入力による時刻フォーマットの変更方法
  • 時刻を活用したログ記録やタイマー、スケジューリングの実装例

目次から探す

現在時刻を表示するプログラム

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関数を使って現在の時刻を取得し、指定した時間と一致した場合にタスクを実行します。

よくある質問

time.hライブラリはどのようにインクルードしますか?

time.hライブラリは、C言語で時刻を扱うための標準ライブラリです。

プログラムで使用するには、#include <time.h>と記述します。

これにより、時刻を取得したり、フォーマットを変更したりするための関数を利用できるようになります。

現在時刻をUTCで表示するにはどうすればいいですか?

現在時刻をUTC(協定世界時)で表示するには、gmtime()関数を使用します。

time()関数で取得した時刻をgmtime()に渡すことで、UTC形式のstruct tmを取得できます。

例:struct tm* utcTime = gmtime(&currentTime);

その後、strftime()関数を使ってフォーマットを指定して表示します。

時刻を取得する際の注意点はありますか?

時刻を取得する際には、以下の点に注意が必要です:

  • システム依存性: 時刻の取得はシステムの時計に依存するため、システムの設定によって異なる場合があります。
  • タイムゾーン: localtime()関数はシステムのタイムゾーン設定に依存します。

異なるタイムゾーンでの動作を考慮する必要があります。

  • エラーチェック: time()localtime()などの関数は、失敗する可能性があるため、エラーチェックを行うことが重要です。

まとめ

C言語で現在時刻を表示する方法とその応用例について学びました。

基本的な時刻の取得から、ログ記録、タイマー、スケジューリングまで、時刻を活用するさまざまな方法を紹介しました。

これを機に、時刻を活用したプログラムを作成し、実際のプロジェクトに応用してみてください。

  • URLをコピーしました!
目次から探す