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

この記事では、基本的なtime()関数の使い方から、localtime()strftime()を使って時刻をフォーマットする方法、さらには特定のタイムゾーンでの時刻表示やファイルへの書き込み方法まで、初心者にもわかりやすく解説します。

目次から探す

現在時刻を取得する方法

C言語で現在時刻を取得するためには、標準ライブラリのtime.hを使用します。

このライブラリには、現在時刻を取得するための関数がいくつか用意されています。

その中でも、time()関数は最も基本的な関数です。

以下では、time()関数の使い方とその戻り値について詳しく説明します。

time()関数の使い方

time()関数の基本的な使い方

time()関数は、現在のカレンダー時刻を取得するために使用されます。

この関数は、引数としてtime_t型のポインタを受け取りますが、引数をNULLにすることもできます。

以下に、time()関数の基本的な使い方を示します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t current_time;
    
    // 現在時刻を取得
    current_time = time(NULL);
    
    // 取得した時刻を表示
    printf("現在時刻(エポックタイム):%ld\n", current_time);
    
    return 0;
}

このコードでは、time()関数を使用して現在時刻を取得し、その結果をcurrent_time変数に格納しています。

time(NULL)とすることで、現在時刻をエポックタイム(1970年1月1日00:00:00 UTCからの経過秒数)として取得できます。

time()関数の戻り値とその意味

time()関数の戻り値は、time_t型の値です。

この値は、エポックタイム(1970年1月1日00:00:00 UTCからの経過秒数)を表します。

エポックタイムは、UNIXシステムや多くのプログラミング言語で標準的に使用される時刻の表現方法です。

例えば、time()関数が返す値が1672531199であれば、これは1970年1月1日00:00:00 UTCから1672531199秒経過した時刻を意味します。

この値を人間が読める形式に変換するためには、後述するlocaltime()関数strftime()関数を使用します。

以下に、time()関数の戻り値を表示する例を示します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t current_time;
    
    // 現在時刻を取得
    current_time = time(NULL);
    
    // 取得した時刻を表示
    printf("現在時刻(エポックタイム):%ld\n", current_time);
    
    return 0;
}

このコードを実行すると、現在時刻がエポックタイムとして表示されます。

エポックタイムは、他の時刻形式に変換するための基礎となる値です。

次のセクションでは、このエポックタイムを人間が読める形式に変換する方法について説明します。

現在時刻を人間が読める形式に変換する方法

C言語で現在時刻を取得するだけでは、得られるのはエポックタイム(1970年1月1日からの経過秒数)です。

このままでは人間が読める形式ではないため、これを変換する必要があります。

ここでは、localtime()関数strftime()関数を使って、エポックタイムを人間が読める形式に変換する方法を解説します。

localtime()関数の使い方

localtime()関数の基本的な使い方

localtime()関数は、エポックタイムを人間が読める形式に変換するための関数です。

この関数は、time_t型の値を受け取り、struct tm型のポインタを返します。

struct tmは、年、月、日、時、分、秒などの情報を含む構造体です。

以下に、localtime()関数の基本的な使い方を示します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t now;
    struct tm *local;
    // 現在時刻を取得
    time(&now);
    // 現在時刻を人間が読める形式に変換
    local = localtime(&now);
    // 結果を表示
    printf("現在時刻: %d-%02d-%02d %02d:%02d:%02d\n",
           local->tm_year + 1900, local->tm_mon + 1, local->tm_mday,
           local->tm_hour, local->tm_min, local->tm_sec);
    return 0;
}

struct tm型のメンバーの説明

struct tmは、以下のメンバーを持つ構造体です。

メンバー名説明
tm_secint秒(0-60)
tm_minint分(0-59)
tm_hourint時(0-23)
tm_mdayint日(1-31)
tm_monint月(0-11、0が1月)
tm_yearint年(1900年からの経過年数)
tm_wdayint曜日(0-6、0が日曜日)
tm_ydayint年内の通算日(0-365)
tm_isdstint夏時間(サマータイム)のフラグ(正の値なら夏時間)

strftime()関数の使い方

strftime()関数の基本的な使い方

strftime()関数は、struct tm型のデータを指定したフォーマットで文字列に変換するための関数です。

この関数を使うことで、日付や時刻を自由な形式で表示することができます。

以下に、strftime()関数の基本的な使い方を示します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t now;
    struct tm *local;
    char buffer[80];
    // 現在時刻を取得
    time(&now);
    // 現在時刻を人間が読める形式に変換
    local = localtime(&now);
    // フォーマットを指定して文字列に変換
    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local);
    // 結果を表示
    printf("現在時刻: %s\n", buffer);
    return 0;
}

フォーマット指定子の一覧と使用例

strftime()関数で使用できるフォーマット指定子は以下の通りです。

指定子説明
%Y年(4桁)2023
%m月(2桁)01
%d日(2桁)01
%H時(2桁、24時間表記)14
%M分(2桁)30
%S秒(2桁)45
%A曜日(フルスペル)Monday
%a曜日(省略形)Mon
%B月名(フルスペル)January
%b月名(省略形)Jan
%pAM/PMPM

以下に、いくつかの使用例を示します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t now;
    struct tm *local;
    char buffer[80];
    // 現在時刻を取得
    time(&now);
    // 現在時刻を人間が読める形式に変換
    local = localtime(&now);
    // フォーマットを指定して文字列に変換
    strftime(buffer, sizeof(buffer), "%A, %B %d, %Y %I:%M:%S %p", local);
    // 結果を表示
    printf("現在時刻: %s\n", buffer);
    return 0;
}

このコードでは、現在時刻が Monday, January 01, 2023 02:30:45 PM のように表示されます。

フォーマット指定子を組み合わせることで、自由な形式で日付や時刻を表示することができます。

実際のコード例

ここでは、実際にC言語を使って現在時刻を取得し、画面に表示するコード例を紹介します。

まずは基本的なコードから始め、その後にフォーマットを指定して表示する方法を説明します。

現在時刻を取得して表示する基本的なコード

まず、現在時刻を取得して表示する基本的なコードを見てみましょう。

このコードでは、time()関数localtime()関数を使用して現在時刻を取得し、asctime()関数を使って人間が読める形式に変換して表示します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t now; // 現在時刻を格納する変数
    struct tm *local; // 現在時刻を人間が読める形式に変換するための構造体
    // 現在時刻を取得
    time(&now);
    // 現在時刻を人間が読める形式に変換
    local = localtime(&now);
    // 現在時刻を表示
    printf("現在時刻: %s", asctime(local));
    return 0;
}

このコードを実行すると、以下のような出力が得られます。

現在時刻: Wed Oct  4 14:55:02 2023

フォーマットを指定して表示するコード

次に、strftime()関数を使って現在時刻をフォーマット指定して表示する方法を紹介します。

strftime()関数を使うことで、日付や時刻の表示形式を自由にカスタマイズできます。

#include <stdio.h>
#include <time.h>
int main() {
    time_t now; // 現在時刻を格納する変数
    struct tm *local; // 現在時刻を人間が読める形式に変換するための構造体
    char buffer[80]; // フォーマットされた時刻を格納するためのバッファ
    // 現在時刻を取得
    time(&now);
    // 現在時刻を人間が読める形式に変換
    local = localtime(&now);
    // フォーマットを指定して現在時刻をバッファに格納
    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local);
    // フォーマットされた現在時刻を表示
    printf("現在時刻: %s\n", buffer);
    return 0;
}

このコードを実行すると、以下のような出力が得られます。

現在時刻: 2023-10-04 14:55:02

このように、strftime()関数を使うことで、日付や時刻の表示形式を自由にカスタマイズすることができます。

以下に、strftime()関数で使用できる主なフォーマット指定子を示します。

フォーマット指定子説明
%Y西暦(4桁)
%m月(01-12)
%d日(01-31)
%H時(00-23)
%M分(00-59)
%S秒(00-59)
%A曜日(完全な名前)
%a曜日(短縮形)
%B月(完全な名前)
%b月(短縮形)

これらの指定子を組み合わせることで、様々な形式で現在時刻を表示することができます。

応用例

現在時刻を特定のタイムゾーンで表示する方法

C言語で現在時刻を特定のタイムゾーンで表示するには、環境変数を利用する方法があります。

環境変数TZを設定することで、localtime()関数が異なるタイムゾーンの時刻を返すようになります。

以下に、特定のタイムゾーン(例:ニューヨーク時間)で現在時刻を表示するコード例を示します。

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main() {
    // 環境変数TZを設定(ニューヨーク時間)
    setenv("TZ", "America/New_York", 1);
    tzset(); // タイムゾーン情報を更新
    time_t now = time(NULL);
    struct tm *local = localtime(&now);
    // 時刻を表示
    printf("ニューヨークの現在時刻: %d-%02d-%02d %02d:%02d:%02d\n",
           local->tm_year + 1900, local->tm_mon + 1, local->tm_mday,
           local->tm_hour, local->tm_min, local->tm_sec);
    return 0;
}

このコードでは、setenv()関数を使って環境変数TZを設定し、tzset()関数でタイムゾーン情報を更新しています。

その後、localtime()関数を使ってニューヨーク時間の現在時刻を取得し、表示しています。

現在時刻をファイルに書き込む方法

現在時刻をファイルに書き込む方法も非常に簡単です。

fopen()関数でファイルを開き、fprintf()関数で時刻をファイルに書き込みます。

以下に、現在時刻をファイルに書き込むコード例を示します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t now = time(NULL);
    struct tm *local = localtime(&now);
    // ファイルを開く(書き込みモード)
    FILE *file = fopen("current_time.txt", "w");
    if (file == NULL) {
        perror("ファイルを開けませんでした");
        return 1;
    }
    // 時刻をファイルに書き込む
    fprintf(file, "現在時刻: %d-%02d-%02d %02d:%02d:%02d\n",
            local->tm_year + 1900, local->tm_mon + 1, local->tm_mday,
            local->tm_hour, local->tm_min, local->tm_sec);
    // ファイルを閉じる
    fclose(file);
    printf("現在時刻をファイルに書き込みました。\n");
    return 0;
}

このコードでは、fopen()関数current_time.txtというファイルを開き、fprintf()関数で現在時刻をファイルに書き込んでいます。

最後に、fclose()関数でファイルを閉じています。

これらの応用例を使うことで、C言語での時刻操作がさらに便利になります。

特定のタイムゾーンでの時刻表示や、時刻のログをファイルに保存するなど、実際のアプリケーションで役立つ機能を簡単に実装できます。

目次から探す