C言語のきほん「現在の日付と時刻を表示しよう」

スポンサーリンク
C言語

今回は、「現在の日付と時刻を表示する」プログラムをご紹介しよう。

なお、本プログラムは、
 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言語 中級編 柴田 望洋(著)

コメント

タイトルとURLをコピーしました