今回は、「現在の日付と時刻を表示する」プログラムをご紹介しよう。
なお、本プログラムは、
Windows 11 Home(23H2)上で、Visual Studio Code(1.93.1)を使用して作成し、gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0で コンパイルしている。
//現在の日付・時刻を表示(その1)
#include <time.h>
#include <stdio.h>
//日付・時刻を表示する関数
void put_date(const struct tm *timer)
{
char *wday_name[] = {"日","月","火","水","木","金","土"};
printf("%4d年%02d月%02d日(%s)%02d時%02d分%02d秒",
timer->tm_year + 1900,
timer->tm_mon + 1,
timer->tm_mday,
wday_name[timer->tm_wday],
timer->tm_hour,
timer->tm_min,
timer->tm_sec
);
}
int main(void)
{
time_t current;
struct tm *timer;
time(¤t);
timer = localtime(¤t);
printf("現在の日付・時刻は");
put_date(timer);
printf("です\n");
return 0;
}
実行結果
現在の日付・時刻は2024年10月10日(木)18時35分51秒です
現在の時刻を暦時刻として取得するのがtime関数である。
この関数は、暦時刻を求めた上で、その暦時刻を引数timerが指すオブジェクトに格納すると同時に、返却値としても戻す。
ただし、暦時刻time_t型は、コンピューターにとっては計算しやすくても、人が直感的には理解できない。
そこで、提供されるのが、tm構造体型である。
暦時刻の値を要素別の時刻に変換するのが、localtime関数である。
main関数では、time関数によってtime_t型の暦時刻として現在の時刻を取得し、それを要素別の時刻であるtm構造体に変換する。
その結果を渡された関数put_dateは、要素別の暦時刻を西暦で表示する。
その際、tm_yearには、1900を、tm_monには1を加える。
曜日を表すtm_wdayは、日曜日から土曜日が0から6に対応しており、配列wday_nameを利用して日本語文字列に変換して表示する。
(参考)新・明解C言語 中級編 柴田 望洋(著)
コメント