Date and time library
C++は2種類の時間操作のサポートを含みます:
- chronoライブラリ - 様々な精度で時間を追跡する柔軟な型のコレクション(例: std::chrono::time_point )。
- Cスタイル日時ライブラリ (例: std::time )。
目次 |
Chrono ライブラリ (C++11以降)
chrono
ライブラリは、いくつかの主要な型と、ユーティリティ関数、一般的なtypedefを定義しています:
| (C++20以降) |
クロック
クロックは開始点(またはエポック)とティックレートで構成されます。例えば、クロックは1970年1月1日をエポックとし、毎秒ティックする場合があります。C++はいくつかのクロックタイプを定義しています:
|
ヘッダーで定義
<chrono>
|
|
|
名前空間で定義
std::chrono
|
|
|
(C++11)
|
システム全体のリアルタイムクロックからの壁時計時間
(クラス) |
|
(C++11)
|
調整されることのない単調クロック
(クラス) |
|
(C++11)
|
利用可能な最短のティック周期を持つクロック
(クラス) |
|
(C++20)
|
型が
Clock
かどうかを判定する
(クラステンプレート) (変数テンプレート) |
|
(C++20)
|
Clock
協定世界時(UTC)用のクロック
(クラス) |
|
(C++20)
|
Clock
国際原子時(TAI)用のクロック
(クラス) |
|
(C++20)
|
Clock
GPS時間用のクロック
(クラス) |
|
(C++20)
|
Clock
ファイル時間
に使用されるクロック
(typedef) |
|
(C++20)
|
ローカル時間を表す疑似クロック
(クラス) |
タイムポイント
タイムポイントは、特定のクロックのエポックから経過した時間の長さです。
|
ヘッダーで定義
<chrono>
|
|
|
名前空間で定義
std::chrono
|
|
|
(C++11)
|
時間の一点
(クラステンプレート) |
|
(C++20)
|
あるクロックの時間点を別のクロックに変換する方法を定義する特性クラス
(クラステンプレート) |
|
(C++20)
|
あるクロックの時間点を別のクロックに変換する
(関数テンプレート) |
期間
期間は、ある時間単位のいくつかのティック数として定義される、時間のスパンで構成されます。例えば、「42秒」は、1秒の時間単位の42ティックで構成される期間によって表現できます。
|
ヘッダーで定義
<chrono>
|
|
|
名前空間で定義
std::chrono
|
|
|
(C++11)
|
時間間隔
(クラステンプレート) |
(注:元のテキストに翻訳対象となる実際のコンテンツが含まれていないため、HTML構造のみを保持しています。実際の翻訳対象テキストが タグ内に存在する場合、その内容を日本語に翻訳します)
時刻 (C++20以降)
hh_mm_ss
は、深夜からの経過時間を表す期間を、時間、分、秒、および該当する場合は小数秒に分割します。主にフォーマットツールとして機能します。
|
ヘッダーで定義
<chrono>
|
|
|
名前空間で定義
std::chrono
|
|
|
(C++20)
|
時刻を表現する
(クラステンプレート) |
|
(C++20)
|
12時間/24時間形式の時刻を相互変換する
(関数) |
カレンダー (since C++20)
|
ヘッダーで定義
<chrono>
|
|
|
名前空間
std::chrono
で定義
|
|
|
(C++20)
|
月の
最終
日または曜日を示すタグクラス
(クラス) |
|
(C++20)
|
月の日を表す
(クラス) |
|
(C++20)
|
年の月を表す
(クラス) |
|
(C++20)
|
グレゴリオ暦の年を表す
(クラス) |
|
(C++20)
|
グレゴリオ暦における曜日を表す
(クラス) |
|
(C++20)
|
月のn
th
weekday
を表す
(クラス) |
|
(C++20)
|
月の最後の
weekday
を表す
(クラス) |
|
(C++20)
|
特定の
day
と特定の
month
を表す
(クラス) |
|
(C++20)
|
特定の
month
の最終日を表す
(クラス) |
|
(C++20)
|
特定の
month
のn
th
weekday
を表す
(クラス) |
|
(C++20)
|
特定の
month
の最後の
weekday
を表す
(クラス) |
|
(C++20)
|
特定の
month
と特定の
year
を表す
(クラス) |
|
(C++20)
|
特定の
year
、
month
、および
day
を表す
(クラス) |
|
(C++20)
|
特定の
year
と
month
の最終日を表す
(クラス) |
|
(C++20)
|
特定の
year
と
month
のn
th
weekday
を表す
(クラス) |
|
(C++20)
|
特定の
year
と
month
の最終
weekday
を表す
(クラス) |
|
(C++20)
|
グレゴリオ暦の日付作成における従来の構文
(関数) |
タイムゾーン (C++20以降)
|
ヘッダーで定義
<chrono>
|
|
|
名前空間で定義
std::chrono
|
|
|
(C++20)
|
IANAタイムゾーンデータベース
のコピーを記述する
(クラス) |
|
(C++20)
|
tzdb
のリンクリストを表す
(クラス) |
|
グローバルなタイムゾーンデータベース情報にアクセスおよび制御する
(関数) |
|
|
(C++20)
|
名前に基づいて
time_zone
を検索する
(関数) |
|
(C++20)
|
現在の
time_zone
を返す
(関数) |
|
(C++20)
|
タイムゾーンを表す
(クラス) |
|
(C++20)
|
特定の時点におけるタイムゾーンの情報を表す
(クラス) |
|
(C++20)
|
ローカル時刻からUNIX時刻への変換に関する情報を表す
(クラス) |
|
(C++20)
|
曖昧なローカル時刻の解決方法を選択する
(列挙型) |
|
(C++20)
|
zoned_time
で使用されるタイムゾーンポインタの特性クラス
(クラステンプレート) |
|
(C++20)
|
タイムゾーンと時点を表す
(クラス) |
|
(C++20)
|
閏秒挿入に関する情報を含む
(クラス) |
|
(C++20)
|
閏秒挿入情報
(クラス) |
|
(C++20)
|
utc_time
オブジェクトから閏秒挿入情報を取得する
(関数テンプレート) |
|
(C++20)
|
タイムゾーンの代替名を表す
(クラス) |
|
(C++20)
|
ローカル時刻が存在しないことを報告するためにスローされる例外
(クラス) |
|
(C++20)
|
ローカル時刻が曖昧であることを報告するためにスローされる例外
(クラス) |
リテラル (C++14以降)
|
ヘッダーで定義
<chrono>
|
|
|
インライン名前空間で定義
std::literals::chrono_literals
|
|
|
(C++20)
|
特定の年を表す
std::chrono::year
リテラル
(関数) |
|
(C++20)
|
月の日を表す
std::chrono::day
リテラル
(関数) |
|
(C++14)
|
時間を表す
std::chrono::duration
リテラル
(関数) |
|
(C++14)
|
分を表す
std::chrono::duration
リテラル
(関数) |
|
(C++14)
|
秒を表す
std::chrono::duration
リテラル
(関数) |
|
(C++14)
|
ミリ秒を表す
std::chrono::duration
リテラル
(関数) |
|
(C++14)
|
マイクロ秒を表す
std::chrono::duration
リテラル
(関数) |
|
(C++14)
|
ナノ秒を表す
std::chrono::duration
リテラル
(関数) |
Chrono I/O (since C++20)
|
ヘッダで定義
<chrono>
|
|
|
名前空間で定義
std::chrono
|
|
|
(C++20)
|
chrono
オブジェクトをストリームから解析する
(関数テンプレート) |
注記
| 機能テスト マクロ | 値 | 規格 | 機能 |
|---|---|---|---|
__cpp_lib_chrono
|
201510L
|
(C++17) | std::chrono::duration および std::chrono::time_point の丸め関数 |
201611L
|
(C++17) | constexpr 対応( std::chrono::duration および std::chrono::time_point の全メンバ関数) | |
201907L
|
(C++20) | カレンダー および タイムゾーン | |
202306L
|
(C++26) |
std::chrono
値クラスに対する
ハッシュ
サポート
|
Cスタイルの日付と時刻ライブラリ
また、Cスタイルの日付・時間関数も提供されています。例えば std::time_t 、 std::difftime 、そして CLOCKS_PER_SEC などです。
例
#include <chrono> #include <iostream> long Fibonacci(unsigned n) { return n < 2 ? n : Fibonacci(n - 1) + Fibonacci(n - 2); } int main() { // 関数呼び出しの実行時間を計測して表示 const auto start{std::chrono::steady_clock::now()}; const auto fb{Fibonacci(42)}; const auto finish{std::chrono::steady_clock::now()}; const std::chrono::duration<double> elapsed_seconds{finish - start}; std::cout << "Fibonacci(42): " << fb << "\nElapsed time: "; // std::cout << elapsed_seconds.count() << "s\n"; // C++20以前 std::cout << elapsed_seconds << '\n'; // C++20のchrono::duration operator<< // UTCと現地時間を表示 const auto tp_utc{std::chrono::system_clock::now()}; std::cout << "Current time 'UTC' is: " << tp_utc << "\n" "Current time 'Local' is: " << std::chrono::current_zone()->to_local(tp_utc) << '\n'; }
出力例:
Fibonacci(42): 267914296 Elapsed time: 0.728532s Current time 'UTC' is: 2025-02-10 06:22:39.420666960 Current time 'Local' is: 2025-02-10 09:22:39.420666960