【C言語】現在の時間を取得する方法

C言語で現在の時間を取得し、表示する方法を知りたいですか?この記事では、初心者の方でも理解しやすいように、C言語の標準ライブラリを使って現在の時間を取得する方法や、時間をフォーマットして表示する方法について詳しく解説します。

さらに、時間の差を計算したり、時間を加算・減算する方法も紹介します。

目次から探す

現在の時間を取得する方法

C言語では、現在の時間を取得するためにいくつかの標準ライブラリ関数が用意されています。

ここでは、time()localtime()、および gmtime() 関数を使用して現在の時間を取得する方法について詳しく解説します。

time() 関数の使用

time() 関数の基本的な使い方

time() 関数は、現在のカレンダー時間を取得するために使用されます。

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

以下に基本的な使い方を示します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t current_time;
    current_time = time(NULL);
    if (current_time == ((time_t)-1)) {
        printf("現在の時間を取得できませんでした。\n");
        return 1;
    }
    printf("現在の時間(エポックからの秒数): %ld\n", current_time);
    return 0;
}

このプログラムを実行すると、現在の時間がエポック(1970年1月1日)からの秒数として表示されます。

time_t 型の変数に現在の時間を格納する方法

time() 関数を使用して、time_t 型の変数に現在の時間を格納する方法は非常に簡単です。

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

#include <stdio.h>
#include <time.h>
int main() {
    time_t current_time;
    current_time = time(NULL);
    if (current_time == ((time_t)-1)) {
        printf("現在の時間を取得できませんでした。\n");
        return 1;
    }
    printf("現在の時間(エポックからの秒数): %ld\n", current_time);
    return 0;
}

このプログラムでは、time_t 型変数 current_time に現在の時間が格納され、その値が表示されます。

localtime() 関数の使用

localtime() 関数の基本的な使い方

localtime() 関数は、time_t 型の値をローカル時間に変換するために使用されます。

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

以下に基本的な使い方を示します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t current_time;
    struct tm *local_time;
    current_time = time(NULL);
    local_time = localtime(¤t_time);
    if (local_time == NULL) {
        printf("ローカル時間を取得できませんでした。\n");
        return 1;
    }
    printf("現在のローカル時間: %s", asctime(local_time));
    return 0;
}

このプログラムを実行すると、現在のローカル時間が表示されます。

struct tm 型の変数にローカル時間を格納する方法

localtime() 関数を使用して、struct tm 型の変数にローカル時間を格納する方法は以下の通りです。

#include <stdio.h>
#include <time.h>
int main() {
    time_t current_time;
    struct tm local_time;
    current_time = time(NULL);
    local_time = *localtime(¤t_time);
    printf("現在のローカル時間: %d-%02d-%02d %02d:%02d:%02d\n",
           local_time.tm_year + 1900, local_time.tm_mon + 1, local_time.tm_mday,
           local_time.tm_hour, local_time.tm_min, local_time.tm_sec);
    return 0;
}

このプログラムでは、struct tm 型変数 local_time にローカル時間が格納され、その値が表示されます。

gmtime() 関数の使用

gmtime() 関数の基本的な使い方

gmtime() 関数は、time_t 型の値をUTC(協定世界時)に変換するために使用されます。

この関数も、struct tm 型のポインタを返します。

以下に基本的な使い方を示します。

#include <stdio.h>
#include <time.h>
int main() {
    time_t current_time;
    struct tm *utc_time;
    current_time = time(NULL);
    utc_time = gmtime(¤t_time);
    if (utc_time == NULL) {
        printf("UTC時間を取得できませんでした。\n");
        return 1;
    }
    printf("現在のUTC時間: %s", asctime(utc_time));
    return 0;
}

このプログラムを実行すると、現在のUTC時間が表示されます。

struct tm 型の変数にUTC時間を格納する方法

gmtime() 関数を使用して、struct tm 型の変数にUTC時間を格納する方法は以下の通りです。

#include <stdio.h>
#include <time.h>
int main() {
    time_t current_time;
    struct tm utc_time;
    current_time = time(NULL);
    utc_time = *gmtime(¤t_time);
    printf("現在のUTC時間: %d-%02d-%02d %02d:%02d:%02d\n",
           utc_time.tm_year + 1900, utc_time.tm_mon + 1, utc_time.tm_mday,
           utc_time.tm_hour, utc_time.tm_min, utc_time.tm_sec);
    return 0;
}

このプログラムでは、struct tm 型変数 utc_time にUTC時間が格納され、その値が表示されます。

以上が、C言語で現在の時間を取得するための基本的な方法です。

これらの関数を組み合わせることで、さまざまな形式で現在の時間を取得し、表示することができます。

時間のフォーマットと表示

C言語では、取得した時間を人間が読みやすい形式に変換するための関数がいくつか用意されています。

ここでは、strftime()asctime()ctime() の各関数について詳しく解説します。

strftime() 関数の使用

strftime() 関数の基本的な使い方

strftime() 関数は、時間を指定したフォーマットで文字列に変換するための関数です。

この関数を使用することで、日付や時間を自由な形式で表示することができます。

#include <stdio.h>
#include <time.h>
int main() {
    time_t t = time(NULL);
    struct tm *local = localtime(&t);
    char buffer[80];
    // strftime関数を使用してフォーマットを指定
    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local);
    printf("現在のローカル時間: %s\n", buffer);
    return 0;
}

このコードでは、strftime() 関数を使用して現在のローカル時間を YYYY-MM-DD HH:MM:SS 形式で表示しています。

フォーマット指定子の一覧と使用例

strftime() 関数で使用できるフォーマット指定子の一覧を以下に示します。

指定子説明
%Y西暦(4桁)2023
%m月(2桁)01
%d日(2桁)15
%H時(24時間表記、2桁)14
%M分(2桁)30
%S秒(2桁)45
%A曜日(フルスペル)Monday
%a曜日(省略形)Mon
%B月名(フルスペル)January
%b月名(省略形)Jan

例えば、以下のようにフォーマット指定子を組み合わせることで、様々な形式で日付や時間を表示することができます。

strftime(buffer, sizeof(buffer), "%A, %B %d, %Y %H:%M:%S", local);
printf("現在のローカル時間: %s\n", buffer);

asctime() 関数の使用

asctime() 関数の基本的な使い方

asctime() 関数は、struct tm 型の変数を文字列に変換するための関数です。

この関数を使用すると、標準的な形式で日付と時間を表示することができます。

#include <stdio.h>
#include <time.h>
int main() {
    time_t t = time(NULL);
    struct tm *local = localtime(&t);
    // asctime関数を使用して文字列に変換
    printf("現在のローカル時間: %s", asctime(local));
    return 0;
}

このコードでは、asctime() 関数を使用して現在のローカル時間を標準的な形式で表示しています。

struct tm 型の変数を文字列に変換する方法

asctime() 関数は、struct tm 型の変数を引数として受け取り、その内容を Www Mmm dd hh:mm:ss yyyy 形式の文字列に変換します。

例えば、Tue Jan 15 14:30:45 2023 のような形式です。

ctime() 関数の使用

ctime() 関数の基本的な使い方

ctime() 関数は、time_t 型の変数を文字列に変換するための関数です。

この関数を使用すると、time_t 型の変数を標準的な形式で日付と時間に変換して表示することができます。

#include <stdio.h>
#include <time.h>
int main() {
    time_t t = time(NULL);
    // ctime関数を使用して文字列に変換
    printf("現在のローカル時間: %s", ctime(&t));
    return 0;
}

このコードでは、ctime() 関数を使用して現在のローカル時間を標準的な形式で表示しています。

time_t 型の変数を文字列に変換する方法

ctime() 関数は、time_t 型の変数を引数として受け取り、その内容を Www Mmm dd hh:mm:ss yyyy 形式の文字列に変換します。

例えば、Tue Jan 15 14:30:45 2023 のような形式です。

以上が、C言語で現在の時間を取得し、フォーマットして表示するための方法です。

これらの関数を組み合わせることで、様々な形式で時間を表示することができます。

応用編

時間の差を計算する方法

C言語では、時間の差を計算するために difftime() 関数を使用します。

この関数は、2つの time_t 型の変数の差を秒単位で返します。

difftime() 関数の使用例

以下に、difftime() 関数を使用して2つの時間の差を計算する例を示します。

#include <stdio.h>
#include <time.h>
int main() {
    // 現在の時間を取得
    time_t start_time = time(NULL);
    // 5秒待機
    sleep(5);
    // 再度現在の時間を取得
    time_t end_time = time(NULL);
    // 時間の差を計算
    double difference = difftime(end_time, start_time);
    // 結果を表示
    printf("時間の差は %.f 秒です。\n", difference);
    return 0;
}

このプログラムでは、time() 関数を使用して現在の時間を取得し、5秒待機した後に再度現在の時間を取得します。

difftime() 関数を使用して2つの時間の差を計算し、その結果を表示します。

2つの time_t 型の変数の差を計算する方法

時間の加算・減算

C言語では、time_t 型の変数に対して直接加算や減算を行うことができます。

例えば、1時間後の時間を計算する場合は以下のようにします。

#include <stdio.h>
#include <time.h>
int main() {
    // 現在の時間を取得
    time_t current_time = time(NULL);
    // 1時間(3600秒)を加算
    time_t future_time = current_time + 3600;
    // 結果を表示
    printf("現在の時間: %s", ctime(¤t_time));
    printf("1時間後の時間: %s", ctime(&future_time));
    return 0;
}

このプログラムでは、現在の時間に3600秒(1時間)を加算して1時間後の時間を計算し、その結果を表示します。

mktime() 関数の使用例

mktime() 関数を使用すると、struct tm 型の変数を time_t 型に変換することができます。

これにより、時間の加算や減算を行うことができます。

#include <stdio.h>
#include <time.h>
int main() {
    // 現在の時間を取得
    time_t current_time = time(NULL);
    // `struct tm` 型の変数に変換
    struct tm *time_info = localtime(¤t_time);
    // 1日後に設定
    time_info->tm_mday += 1;
    // `time_t` 型に変換
    time_t future_time = mktime(time_info);
    // 結果を表示
    printf("現在の時間: %s", ctime(¤t_time));
    printf("1日後の時間: %s", ctime(&future_time));
    return 0;
}

このプログラムでは、現在の時間を struct tm 型の変数に変換し、1日後に設定してから mktime() 関数を使用して time_t 型に変換します。

その結果を表示します。

struct tm 型の変数を操作して時間を加算・減算する方法

struct tm 型の変数を直接操作することで、時間の加算や減算を行うことができます。

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

#include <stdio.h>
#include <time.h>
int main() {
    // 現在の時間を取得
    time_t current_time = time(NULL);
    // `struct tm` 型の変数に変換
    struct tm *time_info = localtime(¤t_time);
    // 1時間後に設定
    time_info->tm_hour += 1;
    // `time_t` 型に変換
    time_t future_time = mktime(time_info);
    // 結果を表示
    printf("現在の時間: %s", ctime(¤t_time));
    printf("1時間後の時間: %s", ctime(&future_time));
    return 0;
}

このプログラムでは、現在の時間を struct tm 型の変数に変換し、1時間後に設定してから mktime() 関数を使用して time_t 型に変換します。

その結果を表示します。

以上が、C言語で現在の時間を取得し、時間の差を計算する方法や時間の加算・減算を行う方法です。

これらの方法を活用することで、時間に関するさまざまな操作が可能になります。

目次から探す