C++ 日付 & 時刻
C++ 標準ライブラリには、いわゆる日付型は用意されていません。C++ は C 言語の日付と時刻を操作するための構造体と関数を継承しています。日付と時刻に関連する関数や構造体を使用するには、C++ プログラムで <ctime> ヘッダーファイルを参照する必要があります。
時間に関連する型は4つあります:clock_t、time_t、size_tとtm。型 clock_t、size_t、time_t はシステム時間と日付を何らかの整数として表現できます。
構造体型tm日付と時刻を C の構造体として保存します。tm 構造体の定義は次のとおりです:
struct tm {
int tm_sec; // 秒、通常は 0 から 59 まで、ただし 61 まで許容
int tm_min; // 分、範囲は 0 から 59
int tm_hour; // 時、範囲は 0 から 23
int tm_mday; // 月内の日、範囲は 1 から 31
int tm_mon; // 月、範囲は 0 から 11
int tm_year; // 1900 年からの年数
int tm_wday; // 週内の日、範囲は 0 から 6、日曜日から数える
int tm_yday; // 年内の日、範囲は 0 から 365、1 月 1 日から数える
int tm_isdst; // 夏時間
};
以下は C/C++ における日付と時刻に関する重要な関数です。これらの関数はすべて C/C++ 標準ライブラリの一部であり、各関数の詳細は C++ 標準ライブラリで確認できます。
| 番号 | 関数 & 説明 |
|---|---|
| 1 | time_t time(time_t *time); この関数はシステムの現在のカレンダー時刻を返します。1970 年 1 月 1 日からの経過秒数です。システムに時刻がない場合は -1 を返します。 |
| 2 | char *ctime(const time_t *time); ローカル時刻を表す文字列へのポインタを返します。形式は次のとおりです: Www Mmm dd hh:mm:ss yyyy\n\0 ここで:
戻り値の例: "Tue Jul 29 19:12:15 2025\n\0" |
| 3 | struct tm *localtime(const time_t *time); この関数は、ローカル時刻を表すtm構造体へのポインタを返します。 |
| 4 | clock_t clock(void); この関数は、プログラムの実行開始(通常はプログラムの先頭)からのプロセッサクロックが使用する時間を返します。時間が利用できない場合は -1 を返します。 |
| 5 | char * asctime ( const struct tm * time ); この関数は、time が指す構造体に格納されている情報を含む文字列へのポインタを返します。戻り値の形式は "day month date hours:minutes:seconds year\n\0" です。 |
| 6 | struct tm *gmtime(const time_t *time); この関数は、tm 構造体である time へのポインタを返します。協定世界時(UTC)またはグリニッジ標準時(GMT)とも呼ばれる時刻で表されます。 |
| 7 | time_t mktime(struct tm *time); この関数は、time が指す構造体に格納されている時刻に相当するカレンダー時刻を返します。 |
| 8 | double difftime ( time_t time2, time_t time1 ); この関数は、time1 と time2 の間の差の秒数を返します。 |
| 9 | size_t strftime(); この関数は、日付と時刻を指定した形式にフォーマットするために使用できます。 |
現在の日付と時刻
次の例では、現在のシステムの日付と時刻を取得します。ローカル時刻と協定世界時(UTC)を含みます。
例
#include <iostream>
#include <ctime>
using namespace std;
int main( )
{
// 現在のシステムの現在の日付/時刻に基づく
time_t now = time(0);
// now を文字列形式に変換
char* dt = ctime(&now);
cout << "ローカルの日付と時刻:" << dt << endl;
// now を tm 構造体に変換
tm *gmtm = gmtime(&now);
dt = asctime(gmtm);
cout << "UTC の日付と時刻:"<< dt << endl;
}
上記のコードがコンパイルおよび実行されると、次の結果が生成されます:
本地日期和时间:Sat Jan 8 20:07:41 2011 UTC 日期和时间:Sun Jan 9 03:07:41 2011
構造体 tm を使った時間のフォーマット
tm構造体は、C/C++ で日付と時刻に関連する操作を処理する際に特に重要です。tm 構造体は、日付と時刻を C の構造体として保存します。ほとんどの時間関連関数は tm 構造体を使用します。次の例では、tm 構造体とさまざまな日付・時刻関連関数を使用しています。
構造体の使用を練習する前に、C の構造体について基本的な理解が必要であり、アロー -> 演算子を使用して構造体メンバーにアクセスする方法を理解している必要があります。
例
#include <iostream>
#include <ctime>
using namespace std;
int main( )
{
// 現在のシステムの現在の日付/時刻に基づく
time_t now = time(0);
cout << "1970 年から現在までの経過秒数:" << now << endl;
tm *ltm = localtime(&now);
// tm 構造体の各構成要素を出力
cout << "年:"<< 1900 + ltm->tm_year << endl;
cout << "月:"<< 1 + ltm->tm_mon<< endl;
cout << "日:"<< ltm->tm_mday << endl;
cout << "時刻:"<< ltm->tm_hour << ":";
cout << ltm->tm_min << ":";
cout << ltm->tm_sec << endl;
}
上記のコードがコンパイルおよび実行されると、次の結果が生成されます:
1970 到目前时间:1503564157 年: 2017 月: 8 日: 24 时间: 16:42:37その他の拡張