std::chrono::time_point
来自cppreference.com
<tbody>
</tbody>
| 在标头 <chrono> 定义
|
||
template< class Clock, class Duration = typename Clock::duration > class time_point; |
(C++11 起) | |
类模板 std::chrono::time_point 表示时间中的一个点。它被实现成如同存储一个 Duration 类型的值,指定自 Clock 的纪元起始开始的时间间隔。
|
|
(C++23 前) |
成员类型
| 类型 | 描述 |
Clock clock |
此时间点计量所用的时钟 (typedef) |
Duration duration |
用于计量从纪元起时间的 std::chrono::duration 类型 (typedef) |
duration::rep rep |
表示时长的滴答次数的算术类型 (typedef) |
duration::period period |
表示时长的滴答周期的 std::ratio 类型 (typedef) |
成员函数
| 构造新的 time_point (公开成员函数) | |
| 返回以其时钟起点开始的时长表示的时间点 (公开成员函数) | |
| 以给定的 duration 修改 time_point (公开成员函数) | |
| 自增或自减 duration (公开成员函数) | |
[静态] |
返回对应最小时长的时间点 (公开静态成员函数) |
[静态] |
返回对应最大时长的时间点 (公开静态成员函数) |
非成员函数
(C++11) |
实现涉及时间点的加法和减法运算 (函数模板) |
(C++11)(C++11)(C++20 移除)(C++11)(C++11)(C++11)(C++11)(C++20) |
比较两个时间点 (函数模板) |
(C++11) |
转换时间点为同一时钟上拥有不同时长的另一时间点 (函数模板) |
| 转换 time_point 到另一个,向下取整 (函数模板) | |
| 转换 time_point 到另一个,向上取整 (函数模板) | |
| 转换 time_point 到另一个,就近取整,偶数优先 (函数模板) |
辅助类
| 特化 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 (类) |