命名空间
变体
操作

日期和时间库

来自 cppreference.cn
< cpp
 
 
日期和时间库
 

C++ 支持两种时间操作

目录

[编辑] Chrono 库 (自 C++11 起)

chrono 库定义了几种主要类型以及实用函数和常用 typedef

(C++20 起)

[编辑] 时钟

时钟由起始点(或纪元)和滴答速率组成。例如,时钟可能有一个纪元是 1970 年 1 月 1 日,并且每秒滴答一次。C++ 定义了几种时钟类型

定义于头文件 <chrono>
定义在命名空间 std::chrono
系统范围实时时钟的挂钟时间
(类) [编辑]
永不调整的单调时钟
(类) [编辑]
可用最短滴答周期的时钟
(类) [编辑]
确定一个类型是否是 时钟
(类模板) (变量模板)[编辑]
(C++20)
用于协调世界时 (UTC) 的 时钟
(类) [编辑]
(C++20)
用于国际原子时 (TAI) 的 时钟
(类) [编辑]
(C++20)
用于 GPS 时间的 时钟
(类) [编辑]
用于 文件时间时钟
(typedef) [编辑]
(C++20)
表示本地时间的伪时钟
(类) [编辑]

[编辑] 时间点

时间点是自特定时钟纪元以来经过的时长。

定义于头文件 <chrono>
定义在命名空间 std::chrono
时间中的一个点
(类模板) [编辑]
定义如何将一个时钟的时间点转换为另一个时钟的时间点的特性类
(类模板) [编辑]
将一个时钟的时间点转换为另一个时钟的时间点
(函数模板) [编辑]

[编辑] 时长

时长由一段时间跨度组成,定义为某个时间单位的某个滴答数。例如,“42 秒”可以由 42 个 1 秒时间单位的滴答组成的时长表示。

定义于头文件 <chrono>
定义在命名空间 std::chrono
(C++11)
时间间隔
(类模板) [编辑]

[编辑] 时间 (自 C++20 起)

hh_mm_ss 将表示自午夜以来经过的时间的时长拆分为小时、分钟、秒和适用的小数秒。它主要是一个格式化工具。

定义于头文件 <chrono>
定义在命名空间 std::chrono
(C++20)
表示一天中的时间
(类模板) [编辑]
在 12 小时/24 小时格式之间转换一天中的时间
(函数) [编辑]

[编辑] 日历 (自 C++20 起)

定义于头文件 <chrono>
定义在命名空间 std::chrono
(C++20)
表示月份中 最后一天 或最后一周日的标签类
(类) [编辑]
(C++20)
表示月份中的一天
(类) [编辑]
(C++20)
表示年份中的一个月
(类) [编辑]
(C++20)
表示公历中的一年
(类) [编辑]
(C++20)
表示公历中的一周中的一天
(类) [编辑]
表示月份中的第 n 个 weekday
(类) [编辑]
表示月份中的最后一个 weekday
(类) [编辑]
(C++20)
表示特定 month 中的特定 day
(类) [编辑]
表示特定 month 的最后一天
(类) [编辑]
表示特定 month 中的第 n 个 weekday
(类) [编辑]
表示特定 month 中的最后一个 weekday
(类) [编辑]
表示特定 year 中的特定 month
(类) [编辑]
表示特定的 yearmonthday
(类) [编辑]
表示特定 yearmonth 的最后一天
(类) [编辑]
表示特定 yearmonth 中的第 n 个 weekday
(类) [编辑]
表示特定 yearmonth 中的最后一个 weekday
(类) [编辑]
(C++20)
格里高利历日期创建的传统语法
(函数) [编辑]

[编辑] 时区 (自 C++20 起)

定义于头文件 <chrono>
定义在命名空间 std::chrono
(C++20)
描述 IANA 时区数据库 的副本
(类) [编辑]
(C++20)
表示 tzdb 的链表
(类) [编辑]
访问和控制全局时区数据库信息
(函数) [编辑]
根据名称定位 time_zone
(函数) [编辑]
返回当前的 time_zone
(函数) [编辑]
(C++20)
表示一个时区
(类) [编辑]
(C++20)
表示特定时间点关于时区的信息
(类) [编辑]
表示有关本地时间到 UNIX 时间转换的信息
(类) [编辑]
(C++20)
选择如何解决模糊的本地时间
(枚举) [编辑]
用于 zoned_time 所使用的时区指针的特性类
(类模板) [编辑]
表示时区和时间点
(类) [编辑]
包含有关闰秒插入的信息
(类) [编辑]
闰秒插入信息
(类) [编辑]
utc_time 对象获取闰秒插入信息
(函数模板) [编辑]
表示时区的别名
(类) [编辑]
报告本地时间不存在时抛出的异常
(类) [编辑]
报告本地时间模糊时抛出的异常
(类) [编辑]

[编辑] 字面量 (自 C++14 起)

定义于头文件 <chrono>
在内联命名空间 std::literals::chrono_literals 中定义
表示特定年份的 std::chrono::year 字面量
(函数) [编辑]
表示月份中某天的 std::chrono::day 字面量
(函数) [编辑]
表示小时的 std::chrono::duration 字面量
(函数) [编辑]
表示分钟的 std::chrono::duration 字面量
(函数) [编辑]
表示秒的 std::chrono::duration 字面量
(函数) [编辑]
表示毫秒的 std::chrono::duration 字面量
(函数) [编辑]
表示微秒的 std::chrono::duration 字面量
(函数) [编辑]
表示纳秒的 std::chrono::duration 字面量
(函数) [编辑]

[编辑] Chrono I/O (自 C++20 起)

定义于头文件 <chrono>
定义在命名空间 std::chrono
(C++20)
从流解析 chrono 对象
(函数模板) [编辑]

[编辑] 注意

特性测试 标准 特性
__cpp_lib_chrono 201510L (C++17) std::chrono::durationstd::chrono::time_point 的舍入函数
201611L (C++17) constexpr 用于 std::chrono::durationstd::chrono::time_point 的所有成员函数
201907L (C++20) 日历时区
202306L (C++26) std::chrono 值类的 哈希 支持

[编辑] C 风格日期和时间库

还提供了 C 风格的日期和时间函数,例如 std::time_tstd::difftimeCLOCKS_PER_SEC

[编辑] 示例

#include <chrono>
#include <iostream>
 
long Fibonacci(unsigned n)
{
    return n < 2 ? n : Fibonacci(n - 1) + Fibonacci(n - 2);
}
 
int main()
{
    // Measures and displays an execution time of a function call.
    const auto start{std::chrono::steady_clock::now()};
    const auto fb{Fibonacci(42)};
    const auto finish{std::chrono::steady_clock::now()};
    const std::chrono::duration<double> elapsed_seconds{finish - start};
 
    std::cout << "Fibonacci(42): " << fb << "\nElapsed time: ";
//  std::cout << elapsed_seconds.count() << "s\n"; // Before C++20
    std::cout << elapsed_seconds << '\n'; // C++20's chrono::duration operator<<
 
    // Prints UTC and local time.
    const auto tp_utc{std::chrono::system_clock::now()};
    std::cout << "Current time 'UTC' is: " << tp_utc << "\n"
                 "Current time 'Local' is: "
              << std::chrono::current_zone()->to_local(tp_utc) << '\n';
}

可能的输出

Fibonacci(42): 267914296
Elapsed time: 0.728532s
Current time 'UTC' is: 2025-02-10 06:22:39.420666960
Current time 'Local' is: 2025-02-10 09:22:39.420666960