std::chrono::time_point

来自cppreference.com
< cpp‎ | chrono
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
初等字符串转换
(C++17)
(C++17)
 
日期和时间工具
时间点
time_point
(C++11)
(C++20)
时长
(C++11)
时钟
(C++11)      
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
当天时刻
(C++20)(C++20)
(C++20)(C++20)
(C++20)

日历
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)(C++20)
时区
(C++20)
(C++20)
(C++20)
chrono I/O
(C++20)
C 风格日期和时间
 
 
在标头 <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 类型
rep Rep,表示时期的计次数的算术类型
period Period,表示时期周期的 std::ratio 类型

成员函数

构造新的 time_point
(公开成员函数)
返回表示为从其时钟起点开始的时间点
(公开成员函数)
以给定的 duration 修改 time_point
(公开成员函数)
自增或自减 duration
(公开成员函数)
[静态]
返回对应最小时长的时间点
(公开静态成员函数)
[静态]
返回对应最大时长的时间点
(公开静态成员函数)

非成员函数

实施涉及时间点的加法和减法运算
(函数模板)
(C++11)(C++11)(C++20 中移除)(C++11)(C++11)(C++11)(C++11)(C++20)
比较两个时间点
(函数模板)
转换时间点为同一时钟上拥有不同时长的另一时间点
(函数模板)
转换 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};
    // 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)
时间区间
(类模板)
表示特定的 yearmonthday
(类)