[C言語] 現在時刻をprintf関数で画面に表示する方法
C言語で現在時刻を表示するには、time.hヘッダーファイルを使用します。
まず、time_t型の変数を宣言し、time()関数を使って現在の時刻を取得します。
次に、localtime()関数を用いてtm構造体に変換し、strftime()関数でフォーマットを指定して文字列に変換します。
最後に、printf()関数を使ってフォーマットされた時刻を画面に表示します。
現在時刻を取得する方法
C言語で現在時刻を取得するには、標準ライブラリを活用します。
ここでは、time関数、localtime関数、gmtime関数を使って、現在時刻を取得する方法を解説します。
time関数の使い方
time関数は、現在の時刻を取得するための基本的な関数です。
この関数は、1970年1月1日からの経過秒数を返します。
以下に、time関数の使い方を示します。
#include <stdio.h>
#include <time.h>
int main() {
    // 現在の時刻を取得
    time_t currentTime;
    currentTime = time(NULL);
    // 経過秒数を表示
    printf("現在の時刻(1970年からの経過秒数): %ld\n", currentTime);
    return 0;
}現在の時刻(1970年からの経過秒数): 1672531199このプログラムは、time関数を使って現在の時刻を取得し、1970年1月1日からの経過秒数として表示します。
time関数は、引数にNULLを渡すことで、現在の時刻を取得します。
localtime関数とgmtime関数の違い
localtime関数とgmtime関数は、time_t型の時刻を人間が読みやすい形式に変換するために使用されます。
これらの関数の違いは、時刻をどのタイムゾーンで解釈するかにあります。
| 関数名 | タイムゾーン | 
|---|---|
| localtime | ローカルタイムゾーン | 
| gmtime | 協定世界時(UTC) | 
- localtime関数は、システムのローカルタイムゾーンに基づいて時刻を変換します。
- gmtime関数は、協定世界時(UTC)に基づいて時刻を変換します。
現在時刻をtm構造体に変換する
tm構造体は、年月日や時分秒などの詳細な時刻情報を格納するための構造体です。
localtime関数やgmtime関数を使って、time_t型の時刻をtm構造体に変換できます。
以下に、localtime関数を使って現在時刻をtm構造体に変換する例を示します。
#include <stdio.h>
#include <time.h>
int main() {
    // 現在の時刻を取得
    time_t currentTime;
    struct tm *localTime;
    currentTime = time(NULL);
    localTime = localtime(¤tTime);
    // 年月日と時分秒を表示
    printf("現在の時刻: %d年%d月%d日 %d時%d分%d秒\n",
           localTime->tm_year + 1900,
           localTime->tm_mon + 1,
           localTime->tm_mday,
           localTime->tm_hour,
           localTime->tm_min,
           localTime->tm_sec);
    return 0;
}現在の時刻: 2023年10月5日 14時30分45秒このプログラムは、localtime関数を使ってtime_t型の時刻をtm構造体に変換し、詳細な時刻情報を表示します。
tm_yearは1900年からの年数、tm_monは0から始まる月を表すため、それぞれに適切な補正を行っています。
printf関数で時刻を表示する
C言語で時刻を表示する際には、printf関数を使用してフォーマットを指定し、見やすい形で出力することができます。
ここでは、printf関数の基本的な使い方から、フォーマット指定子の活用方法、具体的な時刻のフォーマット例を紹介します。
printf関数の基本的な使い方
printf関数は、指定したフォーマットに従って文字列を出力するための関数です。
基本的な使い方は以下の通りです。
#include <stdio.h>
int main() {
    // 文字列を表示
    printf("こんにちは、世界!\n");
    // 整数を表示
    int number = 42;
    printf("整数: %d\n", number);
    // 浮動小数点数を表示
    double pi = 3.14159;
    printf("円周率: %.2f\n", pi);
    return 0;
}このプログラムでは、printf関数を使って文字列、整数、浮動小数点数を表示しています。
%dは整数、%.2fは小数点以下2桁までの浮動小数点数を表すフォーマット指定子です。
フォーマット指定子の活用
printf関数では、フォーマット指定子を使って出力形式を細かく制御できます。
以下に、よく使われるフォーマット指定子を示します。
| フォーマット指定子 | 説明 | 
|---|---|
| %d | 整数 | 
| %f | 浮動小数点数 | 
| %s | 文字列 | 
| %c | 文字 | 
| %ld | long型の整数 | 
| %x | 整数を16進数で表示 | 
| %02d | 2桁の整数(ゼロ埋め) | 
これらの指定子を組み合わせることで、時刻を見やすく表示することができます。
時刻のフォーマット例
時刻を表示する際には、tm構造体のメンバーを使って、printf関数でフォーマットを指定します。
以下に、時刻を「YYYY年MM月DD日 HH時MM分SS秒」の形式で表示する例を示します。
#include <stdio.h>
#include <time.h>
int main() {
    // 現在の時刻を取得
    time_t currentTime;
    struct tm *localTime;
    currentTime = time(NULL);
    localTime = localtime(¤tTime);
    // フォーマットを指定して時刻を表示
    printf("現在の時刻: %04d年%02d月%02d日 %02d時%02d分%02d秒\n",
           localTime->tm_year + 1900,
           localTime->tm_mon + 1,
           localTime->tm_mday,
           localTime->tm_hour,
           localTime->tm_min,
           localTime->tm_sec);
    return 0;
}現在の時刻: 2023年10月05日 14時30分45秒このプログラムでは、%04dや%02dを使って、年を4桁、月日や時分秒を2桁で表示しています。
これにより、ゼロ埋めされた見やすい形式で時刻を出力できます。
応用例
C言語で時刻を表示する際には、基本的なフォーマットに加えて、さまざまな応用が可能です。
ここでは、日付と時刻をカスタムフォーマットで表示する方法、24時間表記と12時間表記の切り替え、タイムゾーンを考慮した時刻表示について解説します。
日付と時刻をカスタムフォーマットで表示する
時刻の表示形式は、用途に応じてカスタマイズすることができます。
以下に、日付と時刻を YYYY/MM/DD HH:MM:SS の形式で表示する例を示します。
#include <stdio.h>
#include <time.h>
int main() {
    // 現在の時刻を取得
    time_t currentTime;
    struct tm *localTime;
    currentTime = time(NULL);
    localTime = localtime(¤tTime);
    // カスタムフォーマットで時刻を表示
    printf("現在の時刻: %04d/%02d/%02d %02d:%02d:%02d\n",
           localTime->tm_year + 1900,
           localTime->tm_mon + 1,
           localTime->tm_mday,
           localTime->tm_hour,
           localTime->tm_min,
           localTime->tm_sec);
    return 0;
}このプログラムでは、スラッシュ(/)やコロン(:)を使って、日付と時刻をカスタムフォーマットで表示しています。
24時間表記と12時間表記の切り替え
時刻を24時間表記から12時間表記に切り替えることも可能です。
以下に、12時間表記で時刻を表示し、午前・午後を示す例を示します。
#include <stdio.h>
#include <time.h>
int main() {
    // 現在の時刻を取得
    time_t currentTime;
    struct tm *localTime;
    currentTime = time(NULL);
    localTime = localtime(¤tTime);
    // 12時間表記で時刻を表示
    int hour = localTime->tm_hour;
    char *am_pm = hour >= 12 ? "午後" : "午前";
    hour = hour % 12;
    if (hour == 0) hour = 12; // 0時は12時と表示
    printf("現在の時刻: %s %02d:%02d:%02d\n",
           am_pm,
           hour,
           localTime->tm_min,
           localTime->tm_sec);
    return 0;
}このプログラムでは、tm_hourを12で割った余りを使って12時間表記に変換し、午前・午後を示す文字列を追加しています。
タイムゾーンを考慮した時刻表示
タイムゾーンを考慮して時刻を表示するには、gmtime関数を使ってUTC時刻を取得し、必要に応じてタイムゾーンのオフセットを適用します。
以下に、UTC時刻を表示する例を示します。
#include <stdio.h>
#include <time.h>
int main() {
    // 現在の時刻を取得
    time_t currentTime;
    struct tm *utcTime;
    currentTime = time(NULL);
    utcTime = gmtime(¤tTime);
    // UTC時刻を表示
    printf("UTC時刻: %04d-%02d-%02d %02d:%02d:%02d\n",
           utcTime->tm_year + 1900,
           utcTime->tm_mon + 1,
           utcTime->tm_mday,
           utcTime->tm_hour,
           utcTime->tm_min,
           utcTime->tm_sec);
    return 0;
}このプログラムでは、gmtime関数を使ってUTC時刻を取得し、表示しています。
タイムゾーンのオフセットを適用する場合は、tm_hourにオフセットを加減算することで対応できます。
まとめ
C言語で現在時刻を取得し、表示する方法について学びました。
time_t型を使った時刻の取得から、printf関数によるフォーマット指定まで、基本的な操作を理解することができました。
これを機に、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言語] 現在時刻を画面に表示する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2587.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)