std::chrono::time_point
来自cppreference.com
工具库
日期和时间工具
时间点 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
时长 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
时钟 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
当天时刻 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
日历 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
时区 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
chrono I/O |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(C++20)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
C 风格日期和时间 |
std::chrono::time_point
成员函数 | ||||
(C++20)(C++20)
|
||||
非成员函数 | ||||
(C++17)
|
||||
(C++17)
|
||||
(C++17)
|
||||
辅助类 | ||||
(C++26)
|
在标头
<chrono>
定义
|
||
template<
class Clock, |
(C++11 起) | |
类模板 std::chrono::time_point
表示时间中的一个点。它被实现成如同存储一个 Duration
类型的自
Clock
的纪元起始开始的时间间隔的值。
|
(C++23 前) |
成员类型
成员类型 | 定义 |
clock
|
Clock ,此时间点在此时钟上计量
|
duration
|
Duration ,用于计量从纪元起时间的 std::chrono::duration 类型
|
rep
|
Rep ,表示时期的计次数的算术类型
|
period
|
Period ,表示时期周期的 std::ratio 类型
|
成员函数
构造新的 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)
|
转换时间点为同一时钟上拥有不同时长的另一时间点 (函数模板) |
(C++17)
|
转换 time_point 到另一个,向下取整 (函数模板) |
(C++17)
|
转换 time_point 到另一个,向上取整 (函数模板) |
(C++17)
|
转换 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}; // Generate Γ(13) == 12! permutations: while (std::ranges::next_permutation(a).found) {} } int main() { using namespace std::literals; // 允许用 24h、1ms、1s 代替对应的 // std::chrono::hours(24) 等等 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 (类) |