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

C言語で現在時刻を表示するには、time.hヘッダーファイルを使用します。

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

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

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

この記事でわかること
  • time関数を使った現在時刻の取得方法
  • localtimeとgmtime関数の違いと使い方
  • printf関数を用いた時刻のフォーマット表示
  • 24時間表記と12時間表記の切り替え方法
  • タイムゾーンを考慮した時刻表示の実践方法

目次から探す

現在時刻を取得する方法

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文字
%ldlong型の整数
%x整数を16進数で表示
%02d2桁の整数(ゼロ埋め)

これらの指定子を組み合わせることで、時刻を見やすく表示することができます。

時刻のフォーマット例

時刻を表示する際には、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にオフセットを加減算することで対応できます。

よくある質問

なぜtime_t型を使うのですか?

time_t型は、C言語で時刻を表現するための標準的なデータ型です。

この型は、1970年1月1日からの経過秒数を表すため、時刻の計算や比較が容易になります。

time_t型を使うことで、システム間での時刻の一貫性を保ち、標準ライブラリの関数と互換性を持たせることができます。

printf関数で時刻を表示する際の注意点は?

printf関数で時刻を表示する際には、以下の点に注意が必要です。

  • フォーマット指定子を正しく使用すること。

例えば、年は%04d、月や日は%02dを使ってゼロ埋めを行うと見やすくなります。

  • tm構造体のメンバーは0から始まるものがあるため、適切な補正を行うこと。

例えば、tm_monは0から11の範囲であるため、表示時には1を加算します。

  • ローカルタイムとUTCの違いを理解し、必要に応じてlocaltimegmtimeを使い分けること。

他の言語とC言語の時刻表示の違いは?

C言語と他のプログラミング言語では、時刻の扱い方にいくつかの違いがあります。

  • C言語は、低レベルな操作が可能で、時刻を秒単位で扱うtime_t型を使用します。

他の言語では、より高レベルなデータ型やライブラリが提供されていることが多く、日時の操作が簡単に行える場合があります。

  • C言語では、標準ライブラリを使って時刻を取得し、フォーマットを指定して表示する必要があります。

他の言語では、組み込みのメソッドや関数で簡単にフォーマットを指定できることが多いです。

  • タイムゾーンの扱いについても、C言語では手動でオフセットを計算する必要がある場合がありますが、他の言語ではタイムゾーンを考慮した日時操作がサポートされていることが多いです。

まとめ

C言語で現在時刻を取得し、表示する方法について学びました。

time_t型を使った時刻の取得から、printf関数によるフォーマット指定まで、基本的な操作を理解することができました。

これを機に、C言語での時刻操作をさらに深め、実際のプログラムに応用してみましょう。

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