名前空間
変種
操作

日付と時間のユーティリティ

提供: cppreference.com
< cpp
 
 
 
日付と時間のユーティリティ
(C++11)
(C++11)
時計
(C++20)
                                                  
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
カレンダー
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
タイムゾーン
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
C スタイルの日付と時間
 

C++ には2種類の時間操作に対するサポートが含まれています。

  • chrono ライブラリ、様々な精度で時間を追跡する柔軟な型のコレクション (std::chrono::time_point など)
  • C スタイルの日付と時間のライブラリ (std::time など)

目次

[編集] std::chrono ライブラリ

chrono ライブラリは3つの主要な型、ユーティリティ関数、一般的な typedef を定義します。

  • 時計
  • 時点
  • 時間

[編集] 時計

時計は開始点 (エポック) と刻み速度から構成されます。 例えば、1970年1月1日のエポックと、1秒の刻みを持つ時計などを定義できます。 C++ ではいくつかの時計が定義されています。

ヘッダ <chrono> で定義
名前空間 std::chrono で定義
システム全体のリアルタイムクロックをベースとする壁時計
(クラス) [edit]
調整されることの決してない単調な時計
(クラス) [edit]
利用可能な最も短い刻み幅を持つ時計
(クラス) [edit]
型が Clock かどうか調べます
(クラステンプレート) (変数テンプレート) [edit]
(C++20)
協定世界時 (UTC) の Clock
(クラス) [edit]
(C++20)
国際原子時 (TAI) の Clock
(クラス) [edit]
(C++20)
GPS 時刻の Clock
(クラス) [edit]
ファイル時刻のために使用される Clock
(typedef) [edit]
(C++20)
ローカルタイムを表す擬似時計
(クラス) [edit]

[編集] 時点

時点は特定の時計のエポックから経過した時間です。

ヘッダ <chrono> で定義
名前空間 std::chrono で定義
時のある一点
(クラステンプレート) [edit]
ある時計の時点を別の時計に変換する方法を定義する特性クラス
(クラステンプレート) [edit]
ある時計の時点を別の時計に変換します
(関数テンプレート) [edit]

[編集] 時間

時間は時の期間であり、何らかの時間単位の刻みの数として定義されます。 例えば「42秒」は1秒の単位を42個刻んだ時間として表すことができます。

ヘッダ <chrono> で定義
名前空間 std::chrono で定義
(C++11)
時の間隔
(クラステンプレート) [edit]

[編集] 時刻

time_of_day は真夜中からの経過時間を表す duration を時、分、秒、および小数点以下の秒 (適用可能であれば) に分解します。 これは主にフォーマットのためのツールです。

ヘッダ <chrono> で定義
名前空間 std::chrono で定義
時刻を表します
(クラステンプレート) [edit]

[編集] カレンダー

ヘッダ <chrono> で定義
名前空間 std::chrono で定義
(C++20)
月の最後の日または曜日を表すタグクラス
(クラス) [edit]
(C++20)
日を表します
(クラス) [edit]
(C++20)
月を表します
(クラス) [edit]
(C++20)
グレゴリオ暦の年を表します
(クラス) [edit]
(C++20)
グレゴリオ暦の曜日を表します
(クラス) [edit]
月の n 回目の weekday を表します
(クラス) [edit]
月の最後の weekday を表します
(クラス) [edit]
(C++20)
特定の month の特定の day を表します
(クラス) [edit]
特定の month の最後の日を表します
(クラス) [edit]
特定の month の n 回目の weekday を表します
(クラス) [edit]
特定の month の最後の weekday を表します
(クラス) [edit]
特定の year の特定の month を表します
(クラス) [edit]
特定の yearmonth および day を表します
(クラス) [edit]
特定の year および month の最後の日を表します
(クラス) [edit]
特定の year および month の n 回目の weekday を表します
(クラス) [edit]
特定の year および month の最後の weekday を表します
(クラス) [edit]
(C++20)
グレゴリオ暦の日付を作成するための便利な構文
(関数) [edit]

[編集] タイムゾーン

ヘッダ <chrono> で定義
名前空間 std::chrono で定義
(C++20)
IANAタイムゾーンデータベースのコピーを表します
(クラス) [edit]
(C++20)
tzdb の連結リストを表します
(クラス) [edit]
グローバルタイムゾーンデータベース情報をアクセスおよび制御します
(関数) [edit]
名前を元に time_zone を探します
(関数) [edit]
現在の time_zone を返します
(関数) [edit]
(C++20)
タイムゾーンを表します
(クラス) [edit]
(C++20)
特定の時点のタイムゾーンに関する情報を表します
(クラス) [edit]
ローカルタイムから UNIX タイムへの変換に関する情報を表します
(クラス) [edit]
(C++20)
曖昧なローカルタイムの解決方法を選択します
(列挙) [edit]
zoned_time によって使用されるタイムゾーンポインタのための特性クラス
(クラステンプレート) [edit]
タイムゾーンと時刻を表します
(クラス) [edit]
(C++20)
閏秒の挿入に関する情報を保持します
(クラス) [edit]
(C++20)
タイムゾーンの代替名を表します
(クラス) [edit]
ローカルタイムが存在しないことを報告するために投げられる例外
(クラス) [edit]
ローカルタイムが曖昧であることを報告するために投げられる例外
(クラス) [edit]

[編集] chrono 入出力

ヘッダ <chrono> で定義
名前空間 std::chrono で定義
(C++20)
ストリーム可能な chrono オブジェクトを挿入のためにフォーマットします
(関数テンプレート) [edit]
(C++20)
ストリームから chrono オブジェクトをパースします
(関数テンプレート) [edit]


[編集] C スタイルの日付と時間のライブラリ

C スタイルの日付と時間の関数 (std::time_t, std::difftime, CLOCKS_PER_SEC など) も提供されます。

[編集]

この例は関数呼び出しの実行時間に関する情報を表示します。

#include <iostream>
#include <chrono>
#include <ctime>
 
long fibonacci(unsigned n)
{
    if (n < 2) return n;
    return fibonacci(n-1) + fibonacci(n-2);
}
 
int main()
{
    auto start = std::chrono::system_clock::now();
    std::cout << "f(42) = " << fibonacci(42) << '\n';
    auto end = std::chrono::system_clock::now();
 
    std::chrono::duration<double> elapsed_seconds = end-start;
    std::time_t end_time = std::chrono::system_clock::to_time_t(end);
 
    std::cout << "finished computation at " << std::ctime(&end_time)
              << "elapsed time: " << elapsed_seconds.count() << "s\n";
}

出力例:

f(42) = 267914296
finished computation at Mon Oct  2 00:59:08 2017
elapsed time: 1.88232s