[C言語] 現在の日付と時刻を両方とも取得する方法
C言語で現在の日付と時刻を取得するには、標準ライブラリのtime.hを使用します。
まず、time_t型の変数を宣言し、time()関数を使って現在の時刻を取得します。
次に、localtime()関数を用いてtm構造体に変換し、これにより年、月、日、時、分、秒といった詳細な情報を得ることができます。
これらの情報をフォーマットして表示することで、現在の日付と時刻を取得できます。
現在の日時を取得する手順
C言語で現在の日時を取得するには、標準ライブラリの関数を利用します。
ここでは、time()、localtime()、gmtime() の各関数を使って、現在の日時を取得する方法を解説します。
time() 関数の使い方
time()関数は、現在の時刻を取得するための基本的な関数です。
この関数は、1970年1月1日からの経過秒数を返します。
以下に、time()関数の使い方を示します。
#include <stdio.h>
#include <time.h>
int main() {
    // 現在の時刻を取得
    time_t currentTime;
    currentTime = time(NULL);
    // 経過秒数を表示
    printf("現在の時刻(1970年1月1日からの秒数): %ld\n", currentTime);
    return 0;
}現在の時刻(1970年1月1日からの秒数): 1672531199このプログラムは、time()関数を使って現在の時刻を取得し、その結果を秒数として表示します。
time()関数は、引数に NULL を渡すことで、現在の時刻を取得します。
localtime() 関数でローカル時間を取得する
localtime()関数は、time()関数で取得した時刻をローカル時間に変換します。
以下に、localtime()関数を使ってローカル時間を取得する方法を示します。
#include <stdio.h>
#include <time.h>
int main() {
    // 現在の時刻を取得
    time_t currentTime;
    currentTime = time(NULL);
    // ローカル時間に変換
    struct tm *localTime;
    localTime = localtime(¤tTime);
    // ローカル時間を表示
    printf("ローカル時間: %d-%02d-%02d %02d:%02d:%02d\n",
           localTime->tm_year + 1900,
           localTime->tm_mon + 1,
           localTime->tm_mday,
           localTime->tm_hour,
           localTime->tm_min,
           localTime->tm_sec);
    return 0;
}ローカル時間: 2023-10-05 14:30:45このプログラムは、localtime()関数を使って time_t型の時刻をローカル時間に変換し、年、月、日、時、分、秒の形式で表示します。
gmtime() 関数でUTC時間を取得する
gmtime()関数は、time()関数で取得した時刻を協定世界時(UTC)に変換します。
以下に、gmtime()関数を使ってUTC時間を取得する方法を示します。
#include <stdio.h>
#include <time.h>
int main() {
    // 現在の時刻を取得
    time_t currentTime;
    currentTime = time(NULL);
    // UTC時間に変換
    struct tm *utcTime;
    utcTime = gmtime(¤tTime);
    // UTC時間を表示
    printf("UTC時間: %d-%02d-%02d %02d:%02d:%02d\n",
           utcTime->tm_year + 1900,
           utcTime->tm_mon + 1,
           utcTime->tm_mday,
           utcTime->tm_hour,
           utcTime->tm_min,
           utcTime->tm_sec);
    return 0;
}UTC時間: 2023-10-05 05:30:45このプログラムは、gmtime()関数を使って time_t型の時刻をUTC時間に変換し、年、月、日、時、分、秒の形式で表示します。
gmtime()関数は、ローカル時間ではなく、世界標準時を取得する際に使用します。
日時のフォーマット
C言語では、日時を人間が読みやすい形式にフォーマットするために、strftime()関数を使用します。
この関数を使うことで、様々な形式で日時を表示することが可能です。
strftime() 関数で日時をフォーマットする
strftime()関数は、日時を指定したフォーマットに従って文字列に変換します。
以下に、strftime()関数の基本的な使い方を示します。
#include <stdio.h>
#include <time.h>
int main() {
    // 現在の時刻を取得
    time_t currentTime;
    currentTime = time(NULL);
    // ローカル時間に変換
    struct tm *localTime;
    localTime = localtime(¤tTime);
    // フォーマットされた日時を格納する文字列
    char formattedDate[100];
    // 日時をフォーマット
    strftime(formattedDate, sizeof(formattedDate), "%Y-%m-%d %H:%M:%S", localTime);
    // フォーマットされた日時を表示
    printf("フォーマットされた日時: %s\n", formattedDate);
    return 0;
}フォーマットされた日時: 2023-10-05 14:30:45このプログラムは、strftime()関数を使って、struct tm型の日時を指定したフォーマットで文字列に変換し、表示します。
日時フォーマットの指定方法
strftime()関数では、フォーマット指定子を使って日時の表示形式を指定します。
以下は、主なフォーマット指定子の一覧です。
| フォーマット指定子 | 説明 | 
|---|---|
| %Y | 西暦4桁 | 
| %m | 月(01-12) | 
| %d | 日(01-31) | 
| %H | 時(00-23) | 
| %M | 分(00-59) | 
| %S | 秒(00-59) | 
| %A | 曜日(完全な名前) | 
| %B | 月名(完全な名前) | 
これらの指定子を組み合わせることで、様々な形式で日時をフォーマットできます。
よく使われるフォーマット例
以下は、strftime()関数でよく使われる日時フォーマットの例です。
| フォーマット例 | 説明 | 
|---|---|
| %Y-%m-%d %H:%M:%S | 2023-10-05 14:30:45 | 
| %A, %B %d, %Y | Thursday, October 05, 2023 | 
| %d/%m/%Y %I:%M:%S %p | 05/10/2023 02:30:45 PM | 
| %Y年%m月%d日 %H時%M分 | 2023年10月05日 14時30分 | 
これらのフォーマットを使用することで、用途に応じた日時の表示が可能になります。
strftime()関数を活用することで、日時を柔軟にフォーマットし、ユーザーにとって見やすい形で表示することができます。
日時の表示方法
C言語では、取得した日時を表示するために、様々な方法があります。
ここでは、printf()関数や puts()関数を使った表示方法、そして日時を文字列として扱う方法について解説します。
printf() 関数で日時を表示する
printf()関数は、フォーマット指定子を使って、日時を整形して表示するための基本的な関数です。
以下に、printf()関数を使って日時を表示する方法を示します。
#include <stdio.h>
#include <time.h>
int main() {
    // 現在の時刻を取得
    time_t currentTime;
    currentTime = time(NULL);
    // ローカル時間に変換
    struct tm *localTime;
    localTime = localtime(¤tTime);
    // `printf()` 関数で日時を表示
    printf("現在の日時: %d-%02d-%02d %02d:%02d:%02d\n",
           localTime->tm_year + 1900,
           localTime->tm_mon + 1,
           localTime->tm_mday,
           localTime->tm_hour,
           localTime->tm_min,
           localTime->tm_sec);
    return 0;
}現在の日時: 2023-10-05 14:30:45このプログラムは、printf()関数を使って、struct tm型の日時をフォーマットし、年、月、日、時、分、秒の形式で表示します。
puts() 関数を使った簡単な表示
puts()関数は、文字列を表示するための簡単な方法です。
strftime()関数を使って日時を文字列に変換し、その結果を puts()関数で表示することができます。
#include <stdio.h>
#include <time.h>
int main() {
    // 現在の時刻を取得
    time_t currentTime;
    currentTime = time(NULL);
    // ローカル時間に変換
    struct tm *localTime;
    localTime = localtime(¤tTime);
    // フォーマットされた日時を格納する文字列
    char formattedDate[100];
    // 日時をフォーマット
    strftime(formattedDate, sizeof(formattedDate), "%Y-%m-%d %H:%M:%S", localTime);
    // `puts()` 関数で日時を表示
    puts(formattedDate);
    return 0;
}2023-10-05 14:30:45このプログラムは、strftime()関数でフォーマットした日時を puts()関数で表示します。
puts()関数は、改行付きで文字列を表示するため、簡単な出力に適しています。
日時を文字列として扱う方法
日時を文字列として扱うことで、他の文字列操作関数と組み合わせて、より柔軟な処理が可能になります。
以下に、日時を文字列として扱う方法を示します。
#include <stdio.h>
#include <time.h>
#include <string.h>
int main() {
    // 現在の時刻を取得
    time_t currentTime;
    currentTime = time(NULL);
    // ローカル時間に変換
    struct tm *localTime;
    localTime = localtime(¤tTime);
    // フォーマットされた日時を格納する文字列
    char formattedDate[100];
    // 日時をフォーマット
    strftime(formattedDate, sizeof(formattedDate), "%Y-%m-%d %H:%M:%S", localTime);
    // 文字列として扱う例
    char message[150];
    strcpy(message, "現在の日時は ");
    strcat(message, formattedDate);
    strcat(message, " です。");
    // 結果を表示
    puts(message);
    return 0;
}現在の日時は 2023-10-05 14:30:45 です。このプログラムは、strftime()関数でフォーマットした日時を文字列として扱い、strcpy() や strcat()関数を使って他の文字列と結合しています。
これにより、日時を含むメッセージを作成することができます。
応用例
C言語で日時を扱う際には、基本的な取得や表示だけでなく、応用的な操作も可能です。
ここでは、日時の差を計算する方法や、タイムゾーンを考慮した日時の取得について解説します。
日時の差を計算する
日時の差を計算することで、2つの日時間の経過時間を求めることができます。
difftime()関数を使うことで、簡単に秒単位での差を計算できます。
difftime() 関数の使い方
difftime()関数は、2つの time_t型の時刻の差を秒単位で計算します。
以下に、difftime()関数の基本的な使い方を示します。
#include <stdio.h>
#include <time.h>
int main() {
    // 2つの時刻を設定
    time_t startTime, endTime;
    startTime = time(NULL);
    // 例として、5秒待機
    sleep(5);
    endTime = time(NULL);
    // `difftime()` 関数で差を計算
    double difference = difftime(endTime, startTime);
    // 結果を表示
    printf("経過時間: %.0f 秒\n", difference);
    return 0;
}経過時間: 5 秒このプログラムは、difftime()関数を使って、2つの時刻の差を秒単位で計算し、表示します。
日時の差を秒単位で計算する
difftime()関数を使うことで、日時の差を秒単位で簡単に計算できます。
これにより、イベントの経過時間や、特定の期間の長さを測定することが可能です。
タイムゾーンの考慮
プログラムが異なるタイムゾーンで動作する場合、タイムゾーンを考慮した日時の取得が重要です。
C言語では、環境変数を使ってタイムゾーンを設定し、日時を取得することができます。
タイムゾーンの設定方法
タイムゾーンは、環境変数 TZ を設定することで変更できます。
以下に、タイムゾーンを設定する方法を示します。
#include <stdio.h>
#include <time.h>
int main() {
    // タイムゾーンを設定
    setenv("TZ", "Asia/Tokyo", 1);
    tzset();
    // 現在の時刻を取得
    time_t currentTime;
    currentTime = time(NULL);
    // ローカル時間に変換
    struct tm *localTime;
    localTime = localtime(¤tTime);
    // 結果を表示
    printf("東京の現在の日時: %d-%02d-%02d %02d:%02d:%02d\n",
           localTime->tm_year + 1900,
           localTime->tm_mon + 1,
           localTime->tm_mday,
           localTime->tm_hour,
           localTime->tm_min,
           localTime->tm_sec);
    return 0;
}東京の現在の日時: 2023-10-05 14:30:45このプログラムは、setenv()関数を使ってタイムゾーンを Asia/Tokyo に設定し、tzset()関数でその設定を反映させています。
タイムゾーンを考慮した日時の取得
タイムゾーンを考慮することで、異なる地域の日時を正確に取得することができます。
これにより、グローバルなアプリケーションでの日時管理が容易になります。
タイムゾーンを適切に設定することで、ユーザーの地域に応じた日時を表示することが可能です。
まとめ
C言語での日時の取得と表示方法について、基本から応用までを解説しました。
time()、localtime()、gmtime()、strftime() などの関数を使いこなすことで、日時を柔軟に扱うことができます。
これらの知識を活用して、日時を正確に管理し、プログラムの信頼性を向上させましょう。
 
![[C言語] 年月日から曜日を求める方法を解説](https://af-e.net/wp-content/uploads/2024/08/thumbnail-4747.png)
![[C言語] 現在時刻をマイクロ秒で取得する方法【Windows/UNIX】](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2583.png)
![[C言語] ミリ秒の数値を時間に変換する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2589.png)
![[C言語] 現在時刻を文字列として取得する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2588.png)
![[C言語] 現在時刻を画面に表示する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2587.png)
![[C言語] 現在時刻を取得する方法【Windows/UNIX】](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2586.png)
![[C言語] Windows環境で現在時刻をミリ秒単位で取得する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2585.png)
![[C言語] 現在時刻をミリ秒単位で取得する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2584.png)
![[C言語] 日時を扱う方法をわかりやすく解説](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2597.png)
![[C言語] 時間を時分秒に変換する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2596.png)
![[C言語] 2つの時間の大小を比較する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2595.png)
![[C言語] 時間を足し算したあとの時刻を取得する](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2594.png)