【C言語】秒数を日時に変換する方法

この記事では、C言語で秒数を日時に変換する方法と、変換した日時を表示する方法について解説します。

time関数や自作関数を使って秒数を日時に変換する方法を学び、strftime関数を使って日時のフォーマットを指定する方法を理解することができます。

これにより、プログラムで日時を扱う際に便利な技術を身につけることができます。

目次から探す

秒数から日時への変換方法

プログラミングにおいて、秒数を日時に変換する方法は非常に便利です。

C言語では、time関数や自作関数を使って秒数を日時に変換することができます。

以下では、それぞれの方法について詳しく説明します。

time関数を使った変換方法

time関数は、現在の時刻を取得するために使用される関数です。

この関数を使って、秒数を取得し、それを日時に変換することができます。

以下に、time関数を使って秒数を日時に変換するサンプルコードを示します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t seconds = time(NULL);
    struct tm* current_time = localtime(&seconds);
    printf("現在の日時は %d/%d/%d %d:%d:%dです。\n",
           current_time->tm_year + 1900, current_time->tm_mon + 1, current_time->tm_mday,
           current_time->tm_hour, current_time->tm_min, current_time->tm_sec);
    return 0;
}

上記のコードでは、time関数を使って現在の秒数を取得し、localtime関数を使ってその秒数を日時に変換しています。

変換した日時は、struct tm構造体に格納されています。

その後、printf関数を使って日時を表示しています。

実行結果は以下のようになります。

現在の日時は 2022/1/1 12:34:56です。

自作関数を使った変換方法

もし、time関数を使わずに秒数を日時に変換したい場合は、自作の関数を作成することもできます。

以下に、自作関数を使って秒数を日時に変換するサンプルコードを示します。

#include <stdio.h>
void convertSecondsToDateTime(int seconds, int* year, int* month, int* day, int* hour, int* minute, int* second) {
    *year = seconds / (365 * 24 * 60 * 60);
    seconds %= (365 * 24 * 60 * 60);
    *month = seconds / (30 * 24 * 60 * 60);
    seconds %= (30 * 24 * 60 * 60);
    *day = seconds / (24 * 60 * 60);
    seconds %= (24 * 60 * 60);
    *hour = seconds / (60 * 60);
    seconds %= (60 * 60);
    *minute = seconds / 60;
    *second = seconds % 60;
}
int main() {
    int seconds = 1234567890;
    int year, month, day, hour, minute, second;
    convertSecondsToDateTime(seconds, &year, &month, &day, &hour, &minute, &second);
    printf("秒数 %d は %d/%d/%d %d:%d:%dです。\n",
           seconds, year, month, day, hour, minute, second);
    return 0;
}

上記のコードでは、convertSecondsToDateTimeという自作関数を定義しています。

この関数は、引数として秒数を受け取り、その秒数を年、月、日、時、分、秒に変換します。

変換した結果は、引数として渡されたポインタ変数に格納されます。

実行結果は以下のようになります。

秒数 1234567890 は 39/1/23 23:31:30です。

以上が、C言語で秒数を日時に変換する方法の説明です。

日時の表示方法

プログラムで日時を扱う際には、変換した日時を適切に表示することが重要です。

C言語では、日時を文字列として表示する方法や、日時のフォーマットを指定する方法があります。

変換した日時を文字列として表示する方法

C言語では、日時を文字列として表示するために、strftime関数を使用します。

strftime関数は、指定したフォーマットに従って日時を文字列に変換することができます。関数を自作する必要はありません。

以下は、strftime関数を使用して現在の日時を文字列として表示するサンプルコードです。

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

上記のコードでは、strftime関数の第1引数には文字列を格納するバッファ、第2引数にはバッファのサイズ、第3引数にはフォーマット指定子、第4引数には変換する日時の構造体を指定しています。

フォーマット指定子は、年月日や時刻などの要素を指定するための特殊な文字列です。

実行結果は以下のようになります。

現在の日時: 2022-01-01 12:34:56

strftime関数を使った日時のフォーマット指定

strftime関数では、日時のフォーマットを指定することができます。

フォーマット指定子には、特定の文字を使用することで日時の要素を表現することができます。

以下によく使用されるフォーマット指定子の一部を示します。

フォーマット指示子説明
%Y年(4桁)
%m月(2桁)
%d日(2桁)
%H時(24時間制、2桁)
%M分(2桁)
%S秒(2桁)

これらのフォーマット指定子を組み合わせることで、任意の日時のフォーマットを作成することができます。

以下は、strftime関数を使用して日時のフォーマットを指定するサンプルコードです。

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

上記のコードでは、strftime関数の第3引数にフォーマット指定子を指定しています。

フォーマット指定子には、年月日や時刻などの要素を指定するための特殊な文字列を使用しています。

実行結果は以下のようになります。

現在の日時: 2022/01/01 12:34:56

以上が、C言語で日時を文字列として表示する方法と、strftime関数を使った日時のフォーマット指定の方法です。

適切なフォーマット指定を行うことで、日時を見やすく表示することができます。

目次から探す