【C言語】現在の日時を両方とも取得する方法

この記事では、time() 関数localtime() 関数を使って現在の日時を取得し、strftime() 関数printf() 関数を使ってその日時を表示する方法をわかりやすく解説します。

初心者の方でも理解できるように、サンプルコードとその実行結果を交えて説明しますので、ぜひ参考にしてください。

目次から探す

現在の日時を取得する手順

C言語で現在の日時を取得する方法について解説します。

現在の日時を取得するためには、標準ライブラリの関数を使用します。

具体的には、time() 関数localtime() 関数を使います。

以下にその手順を詳しく説明します。

time() 関数の使用

まず、現在の時刻を取得するために time() 関数を使用します。

この関数は、1970年1月1日からの経過秒数を返します。

time_t 型の変数を宣言

time() 関数の戻り値を受け取るためには、time_t 型の変数を宣言します。

time_t は、時刻を表すためのデータ型です。

#include <stdio.h>
#include <time.h>
int main() {
    time_t current_time; // time_t 型の変数を宣言
    return 0;
}

time() 関数で現在の時刻を取得

次に、time() 関数を使って現在の時刻を取得し、先ほど宣言した time_t 型の変数に格納します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t current_time; // time_t 型の変数を宣言
    current_time = time(NULL); // 現在の時刻を取得
    printf("Current time in seconds since Epoch: %ld\n", current_time);
    return 0;
}

このコードを実行すると、1970年1月1日からの経過秒数が表示されます。

localtime() 関数の使用

time() 関数で取得した時刻は、エポックタイム(1970年1月1日からの経過秒数)です。

これを人間が理解しやすい形式に変換するために、localtime() 関数を使用します。

struct tm 型の変数を宣言

localtime() 関数は、struct tm 型のポインタを返します。

この構造体には、年、月、日、時、分、秒などの情報が含まれています。

#include <stdio.h>
#include <time.h>
int main() {
    time_t current_time; // time_t 型の変数を宣言
    struct tm *local_time; // struct tm 型の変数を宣言
    return 0;
}

localtime() 関数でローカル時間に変換

time() 関数で取得した時刻を localtime() 関数に渡し、ローカル時間に変換します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t current_time; // time_t 型の変数を宣言
    struct tm *local_time; // struct tm 型の変数を宣言
    current_time = time(NULL); // 現在の時刻を取得
    local_time = localtime(¤t_time); // ローカル時間に変換
    printf("Current local time: %d-%02d-%02d %02d:%02d:%02d\n",
           local_time->tm_year + 1900, // 年は1900年からの経過年数
           local_time->tm_mon + 1, // 月は0から始まるので+1
           local_time->tm_mday, // 日
           local_time->tm_hour, // 時
           local_time->tm_min, // 分
           local_time->tm_sec); // 秒
    return 0;
}

このコードを実行すると、現在のローカル時間が「年-月-日 時:分:秒」の形式で表示されます。

例えば、 2023-10-05 14:30:45 のように表示されます。

以上が、C言語で現在の日時を取得する手順です。

次に、取得した日時を表示する方法について解説します。

現在の日時を表示する方法

現在の日時を取得した後、それを人間が読みやすい形式で表示する方法について説明します。

C言語では、strftime() 関数printf() 関数を使って日時をフォーマットして表示することができます。

strftime() 関数の使用

フォーマット指定子の説明

strftime() 関数は、日時を指定したフォーマットで文字列に変換するために使用されます。

この関数では、以下のようなフォーマット指定子を使って日時の各部分を指定します。

フォーマット指定子説明
%Y西暦(4桁)
%m月(01-12)
%d日(01-31)
%H時(00-23)
%M分(00-59)
%S秒(00-59)
%A曜日(完全な名前)
%a曜日(短縮形)
%B月(完全な名前)
%b月(短縮形)

strftime() 関数の使い方

strftime() 関数を使って日時をフォーマットする方法を以下に示します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t t = time(NULL); // 現在の時刻を取得
    struct tm *local = localtime(&t); // ローカル時間に変換
    char buffer[80];
    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local); // フォーマットして文字列に変換
    printf("現在の日時: %s\n", buffer); // フォーマットされた日時を表示
    return 0;
}

このコードでは、strftime() 関数を使って現在の日時を YYYY-MM-DD HH:MM:SS の形式でフォーマットし、printf() 関数で表示しています。

printf() 関数での表示

struct tm のメンバを直接表示

struct tm 構造体のメンバを直接使って日時を表示する方法もあります。

以下にその例を示します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t t = time(NULL); // 現在の時刻を取得
    struct tm *local = localtime(&t); // ローカル時間に変換
    printf("現在の日時: %d-%02d-%02d %02d:%02d:%02d\n",
           local->tm_year + 1900, // 年は1900年からの経過年数
           local->tm_mon + 1,     // 月は0から始まるので+1
           local->tm_mday,        // 日
           local->tm_hour,        // 時
           local->tm_min,         // 分
           local->tm_sec);        // 秒
    return 0;
}

このコードでは、struct tm 構造体の各メンバを直接使って日時を表示しています。

年は1900年からの経過年数であるため、tm_year に1900を加えています。

また、月は0から始まるため、tm_mon に1を加えています。

フォーマット指定子を使った表示

printf() 関数のフォーマット指定子を使って日時を表示する方法もあります。

以下にその例を示します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t t = time(NULL); // 現在の時刻を取得
    struct tm *local = localtime(&t); // ローカル時間に変換
    printf("現在の日時: %04d-%02d-%02d %02d:%02d:%02d\n",
           local->tm_year + 1900, // 年は1900年からの経過年数
           local->tm_mon + 1,     // 月は0から始まるので+1
           local->tm_mday,        // 日
           local->tm_hour,        // 時
           local->tm_min,         // 分
           local->tm_sec);        // 秒
    return 0;
}

このコードでは、printf() 関数のフォーマット指定子を使って日時を表示しています。

年は4桁、月と日は2桁で表示するようにフォーマット指定子を設定しています。

以上が、C言語で現在の日時を取得し、表示する方法です。

strftime() 関数printf() 関数を使い分けることで、様々なフォーマットで日時を表示することができます。

目次から探す