C++ の日付と時刻


C++ 標準ライブラリは、いわゆる日付型を提供しません。 C++ は、日付と時刻の操作に関して C 言語の構造と関数を継承します。日付と時刻に関連する関数と構造体を使用するには、C++ プログラムで <ctime> ヘッダー ファイルを参照する必要があります。

時間に関連するタイプには、 Clock_t、time_t、size_ttm の 4 つがあります。タイプ 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++ 標準ライブラリで確認できます。

シリアル番号関数と説明
1time_t time(time_t *time);
この関数は、システムの現在のカレンダー時刻、1 月 1 日からの経過秒数を返します。 1970 年。システムに時間がない場合は、.1 が返されます。
2char *ctime(const time_t *time);
これは、文字列 日 月 年 時:分:秒 年 の形式で現地時間を表す文字列ポインタを返します。

現在の日付と時刻

以下の例では、現地時間と協定世界時 (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 構造体の基本を理解し、arrow -> 演算子を使用して構造体のメンバーにアクセスする方法を知っておく必要があります。

#include <iostream>
#include <ctime>

using namespace std;

int main( )
{
   // 基于当前系统的当前日期/时间
   time_t now = time(0);

   cout << "Number of sec since January 1,1970:" << now << endl;

   tm *ltm = localtime(&now);

   // 输出 tm 结构的各个组成部分
   cout << "Year: "<< 1900 + ltm->tm_year << endl;
   cout << "Month: "<< 1 + ltm->tm_mon<< endl;
   cout << "Day: "<<  ltm->tm_mday << endl;
   cout << "Time: "<< 1 + ltm->tm_hour << ":";
   cout << 1 + ltm->tm_min << ":";
   cout << 1 + ltm->tm_sec << endl;
}

上記のコードをコンパイルして実行すると、次の結果が生成されます:

Number of sec since January 1, 1970:1294548238
Year: 2011
Month: 1
Day: 8
Time: 22: 44:59