[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言語での時刻操作をさらに深め、実際のプログラムに応用してみましょう。