命名空间
变体
操作

日期和时间实用程序

来自 cppreference.com
< cpp
 
 
实用程序库
语言支持
类型支持 (基本类型,RTTI)
库特性测试宏 (C++20)
动态内存管理
程序实用程序
协程支持 (C++20)
可变参数函数
调试支持
(C++26)
三方比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用实用程序
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中已弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型操作
(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)

 
日期和时间实用程序
 

C++ 包含对两种类型的时间操作的支持

  • chrono 库,一个灵活的类型集合,用于跟踪具有不同精度的时间(例如 std::chrono::time_point)。
  • C 样式日期和时间库(例如 std::time)。

内容

[编辑] std::chrono

chrono 库定义了 三个(直到 C++20) 五个(自 C++20 起) 主要类型以及实用程序函数和常见类型定义

  • 时钟,
  • 时间点,
  • 持续时间,
  • 日历日期,
  • 时区信息.
(自 C++20 起)

[编辑] 时钟

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

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

[编辑] 时间点

时间点是自特定时钟的纪元起经过的时间跨度。

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

[编辑] 持续时间

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

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

[编辑] 一天中的时间

hh_mm_ss 将表示自午夜开始经过的时间的持续时间拆分为小时、分钟、秒和小数秒(如果适用)。它主要是一个格式化工具。

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

[编辑] 日历

在头文件 <chrono> 中定义
在命名空间 std::chrono 中定义
(C++20)
表示一个月中的最后一个日期或星期几的标记类
(类) [编辑]
(C++20)
表示一个月中的某一天
(类) [编辑]
(C++20)
表示一年中的某个月
(类) [编辑]
(C++20)
表示公历中的某一年
(类) [编辑]
(C++20)
表示公历中的某一周
(类) [编辑]
表示一个月中的第 n 个weekday
(类) [编辑]
表示一个月中的最后一个weekday
(类) [编辑]
(C++20)
表示特定day 的特定month
(类) [编辑]
表示特定month 的最后一天
(类) [编辑]
表示特定month 中的第 n 个weekday
(类) [编辑]
表示特定month 中的最后一个weekday
(类) [编辑]
表示特定month 的特定year
(类) [编辑]
表示特定的yearmonthday
(类) [编辑]
表示特定yearmonth 的最后一天
(类) [编辑]
表示特定yearmonth 中的第 n 个weekday
(类) [编辑]
表示特定yearmonth 中的最后一个weekday
(类) [编辑]
(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 对象中获取闰秒插入信息
(函数模板) [编辑]
表示时区的备用名称
(类) [编辑]
抛出异常以报告本地时间不存在
(类) [编辑]
抛出异常以报告本地时间不明确
(类) [编辑]

[编辑] 字面量

在头文件 <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

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

[编辑] 备注

特性测试 Std 特性
__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()
{
    const auto start{std::chrono::steady_clock::now()};
    const auto fb{Fibonacci(42)};
    const auto end{std::chrono::steady_clock::now()};
    const std::chrono::duration<double> elapsed_seconds{end - 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<<
}

可能的输出

Fibonacci(42): 267914296
Elapsed time: 0.791429s