この記事では、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() 関数
を使い分けることで、様々なフォーマットで日時を表示することができます。