Namespaces
Variants

Date and time library

From cppreference.net

C++は2種類の時間操作のサポートを含みます:

目次

Chrono ライブラリ (C++11以降)

chrono ライブラリは、いくつかの主要な型と、ユーティリティ関数、一般的なtypedefを定義しています:

(C++20以降)

クロック

クロックは開始点(またはエポック)とティックレートで構成されます。例えば、クロックは1970年1月1日をエポックとし、毎秒ティックする場合があります。C++はいくつかのクロックタイプを定義しています:

ヘッダーで定義 <chrono>
名前空間で定義 std::chrono
システム全体のリアルタイムクロックからの壁時計時間
(クラス)
調整されることのない単調クロック
(クラス)
利用可能な最短のティック周期を持つクロック
(クラス)
型が 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)
あるクロックの時間点を別のクロックに変換する
(関数テンプレート)

期間

期間は、ある時間単位のいくつかのティック数として定義される、時間のスパンで構成されます。例えば、「42秒」は、1秒の時間単位の42ティックで構成される期間によって表現できます。

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

(注:元のテキストに翻訳対象となる実際のコンテンツが含まれていないため、HTML構造のみを保持しています。実際の翻訳対象テキストが タグ内に存在する場合、その内容を日本語に翻訳します)

時刻 (C++20以降)

hh_mm_ss は、深夜からの経過時間を表す期間を、時間、分、秒、および該当する場合は小数秒に分割します。主にフォーマットツールとして機能します。

ヘッダーで定義 <chrono>
名前空間で定義 std::chrono
(C++20)
時刻を表現する
(クラステンプレート)
12時間/24時間形式の時刻を相互変換する
(関数)

カレンダー (since C++20)

ヘッダーで定義 <chrono>
名前空間 std::chrono で定義
(C++20)
月の 最終 日または曜日を示すタグクラス
(クラス)
(C++20)
月の日を表す
(クラス)
(C++20)
年の月を表す
(クラス)
(C++20)
グレゴリオ暦の年を表す
(クラス)
(C++20)
グレゴリオ暦における曜日を表す
(クラス)
月のn th weekday を表す
(クラス)
月の最後の weekday を表す
(クラス)
(C++20)
特定の day と特定の month を表す
(クラス)
特定の month の最終日を表す
(クラス)
特定の month のn th weekday を表す
(クラス)
特定の month の最後の weekday を表す
(クラス)
(C++20)
特定の month と特定の year を表す
(クラス)
特定の year month 、および day を表す
(クラス)
特定の year month の最終日を表す
(クラス)
特定の year month のn th weekday を表す
(クラス)
特定の year month の最終 weekday を表す
(クラス)
(C++20)
グレゴリオ暦の日付作成における従来の構文
(関数)

タイムゾーン (C++20以降)

ヘッダーで定義 <chrono>
名前空間で定義 std::chrono
(C++20)
IANAタイムゾーンデータベース のコピーを記述する
(クラス)
(C++20)
tzdb のリンクリストを表す
(クラス)
グローバルなタイムゾーンデータベース情報にアクセスおよび制御する
(関数)
名前に基づいて time_zone を検索する
(関数)
現在の time_zone を返す
(関数)
(C++20)
タイムゾーンを表す
(クラス)
(C++20)
特定の時点におけるタイムゾーンの情報を表す
(クラス)
(C++20)
ローカル時刻からUNIX時刻への変換に関する情報を表す
(クラス)
(C++20)
曖昧なローカル時刻の解決方法を選択する
(列挙型)
zoned_time で使用されるタイムゾーンポインタの特性クラス
(クラステンプレート)
(C++20)
タイムゾーンと時点を表す
(クラス)
閏秒挿入に関する情報を含む
(クラス)
閏秒挿入情報
(クラス)
utc_time オブジェクトから閏秒挿入情報を取得する
(関数テンプレート)
タイムゾーンの代替名を表す
(クラス)
ローカル時刻が存在しないことを報告するためにスローされる例外
(クラス)
ローカル時刻が曖昧であることを報告するためにスローされる例外
(クラス)

リテラル (C++14以降)

ヘッダーで定義 <chrono>
インライン名前空間で定義 std::literals::chrono_literals
特定の年を表す std::chrono::year リテラル
(関数)
月の日を表す std::chrono::day リテラル
(関数)
時間を表す std::chrono::duration リテラル
(関数)
分を表す std::chrono::duration リテラル
(関数)
秒を表す std::chrono::duration リテラル
(関数)
ミリ秒を表す std::chrono::duration リテラル
(関数)
マイクロ秒を表す std::chrono::duration リテラル
(関数)
ナノ秒を表す 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