Namespaces
Variants

std::chrono:: time_point

From cppreference.net
ヘッダーで定義 <chrono>
template <

class Clock,
class Duration = typename Clock :: duration

> class time_point ;
(C++11以降)

クラステンプレート std::chrono::time_point は時間の一点を表します。これは、 Clock のエポックからの時間間隔を示す型 Duration の値を格納しているかのように実装されています。

Clock は、 Clock の要件を満たさなければならない または std::chrono::local_t でなければならない (C++20以降)

(C++23まで)

目次

メンバー型

説明
Clock clock
この時間点が測定されるクロック
(typedef)
Duration duration
エポックからの時間を測定するために使用される std::chrono::duration
(typedef)
duration::rep rep
デュレーションのティック数を表す算術型
(typedef)
duration::period period
デュレーションのティック周期を表す std::ratio
(typedef)

メンバー関数

新しいtime pointを構築する
(public member function)
クロックの開始からの経過時間としてtime pointを返す
(public member function)
指定されたdurationでtime pointを変更する
(public member function)
durationをインクリメントまたはデクリメントする
(public member function)
[static]
最小のdurationに対応するtime pointを返す
(public static member function)
[static]
最大のdurationに対応するtime pointを返す
(public static member function)

非メンバー関数

時間点を含む加算および減算演算を実行する
(関数テンプレート)
(C++11) (C++11) (C++20で削除) (C++11) (C++11) (C++11) (C++11) (C++20)
2つの時間点を比較する
(関数テンプレート)
同じクロック上の異なる期間を持つ別の時間点に変換する
(関数テンプレート)
時間点を別の時間点に変換し、切り下げを行う
(関数テンプレート)
時間点を別の時間点に変換し、切り上げを行う
(関数テンプレート)
時間点を別の時間点に変換し、最近接値に丸める(同値の場合は偶数方向)
(関数テンプレート)

ヘルパークラス

std::common_type トレイトの特殊化
(クラステンプレートの特殊化)
std::chrono::time_point のハッシュサポート
(クラステンプレートの特殊化)

#include <algorithm>
#include <chrono>
#include <ctime>
#include <iomanip>
#include <iostream>
void slow_motion()
{
    static int a[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
    // Γ(13) == 12! の順列を生成:
    while (std::ranges::next_permutation(a).found) {}
}
int main()
{
    using namespace std::literals; // リテラル接尾辞を有効化(例: 24h, 1ms, 1s)
    const std::chrono::time_point<std::chrono::system_clock> now =
        std::chrono::system_clock::now();
    const std::time_t t_c = std::chrono::system_clock::to_time_t(now - 24h);
    std::cout << "24時間前の時刻は "
              << std::put_time(std::localtime(&t_c), "%F %T.\n") << std::flush;
    const std::chrono::time_point<std::chrono::steady_clock> start =
        std::chrono::steady_clock::now();
    std::cout << "異なるクロックは比較できません: \n"
                 "  システム時刻: " << now.time_since_epoch() << "\n"
                 "  ステディ時刻: " << start.time_since_epoch() << '\n';
    slow_motion();
    const auto end = std::chrono::steady_clock::now();
    std::cout
        << "低速計算の所要時間は "
        << std::chrono::duration_cast<std::chrono::microseconds>(end - start) << " ≈ "
        << (end - start) / 1ms << "ms ≈ " // 上記とほぼ同等の形式ですが、
        << (end - start) / 1s << "s.\n";  // ミリ秒と秒をそれぞれ使用
}

出力例:

24時間前の時刻は 2021-02-15 18:28:52.
異なるクロックは比較できません:
  システム時刻: 1666497022681282572ns
  ステディ時刻: 413668317434475ns
低速計算の所要時間は 2090448µs ≈ 2090ms ≈ 2s.

関連項目

(C++11)
時間間隔
(クラステンプレート)
特定の year month 、および day を表す
(クラス)