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 表示时间中的一个点。其实现方式如同存储一个 Duration 类型的值,该值表示自 Clock 纪元起始点开始的时间间隔。

Clock 必须满足 Clock 要求 或为 std::chrono::local_t (C++20 起)

(C++23 前)

目录

成员类型

类型 描述
Clock clock
测量此时间点所用的时钟
(类型别名)
Duration duration
用于测量自纪元起时间的 std::chrono::duration 类型
(类型别名)
duration::rep rep
表示时长计次次数的算术类型
(类型别名)
duration::period period
表示时长计次周期的 std::ratio 类型
(类型别名)

成员函数

构造新的时间点
(公开成员函数)
返回自时钟起点起的时间点作为时长
(公开成员函数)
通过给定时长修改时间点
(公开成员函数)
递增或递减时长
(公开成员函数)
[static]
返回对应最短时长的时间点
(公开静态成员函数)
[static]
返回对应最长时长的时间点
(公开静态成员函数)

非成员函数

对时间点执行加减运算
(函数模板)
(C++11) (C++11) (removed in C++20) (C++11) (C++11) (C++11) (C++11) (C++20)
比较两个时间点
(函数模板)
将时间点转换为同一时钟上具有不同时长的另一个时间点
(函数模板)
将时间点转换为另一个时间点,向下取整
(函数模板)
将时间点转换为另一个时间点,向上取整
(函数模板)
将时间点转换为另一个时间点,四舍五入到最接近的值,平局时取偶
(函数模板)

辅助类

特化 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
(类)