std::chrono:: time_point
|
ヘッダーで定義
<chrono>
|
||
|
template
<
class
Clock,
|
(C++11以降) | |
クラステンプレート
std::chrono::time_point
は時間の一点を表します。これは、
Clock
のエポックからの時間間隔を示す型
Duration
の値を格納しているかのように実装されています。
|
|
(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++11)
(C++20で削除)
(C++11)
(C++11)
(C++11)
(C++11)
(C++20)
|
2つの時間点を比較する
(関数テンプレート) |
|
(C++11)
|
同じクロック上の異なる期間を持つ別の時間点に変換する
(関数テンプレート) |
|
(C++17)
|
時間点を別の時間点に変換し、切り下げを行う
(関数テンプレート) |
|
(C++17)
|
時間点を別の時間点に変換し、切り上げを行う
(関数テンプレート) |
|
(C++17)
|
時間点を別の時間点に変換し、最近接値に丸める(同値の場合は偶数方向)
(関数テンプレート) |
ヘルパークラス
|
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)
|
時間間隔
(クラステンプレート) |
|
(C++20)
|
特定の
year
、
month
、および
day
を表す
(クラス) |