C++ 参考手册

位置:首页 > C++ 参考手册 > 日期和时间工具

C++ 包含对二类时间操作的支持:

std::chrono

chrono 库定义三种主要类型以及工具函数和常用 typedef 。

  • 时钟
  • 时长
  • 时间点

时钟

时钟由起点(或纪元)及计次频率组成。例如,时钟可以拥有 1970 年 1 月 1 日的纪元,和每一秒的计次。 C++ 定义数种时钟类型:

定义于头文件 <chrono>
定义于命名空间 std::chrono
来自系统范畴实时时钟的挂钟时间
(类)
决不会调整的单调时钟
(类)
拥有可用的最短嘀嗒周期的时钟
(类)
确定类型是否为时钟 (Clock)
(类模板) (变量模板)
(C++20)
协调世界时 (UTC) 的时钟 (Clock)
(类)
(C++20)
国际原子时 (TAI) 的时钟 (Clock)
(类)
(C++20)
GPS 时间的时钟 (Clock)
(类)
用于文件时间时钟 (Clock)
(typedef)
(C++20)
表示本地时间的伪时钟
(类)

时间点

时间点是从特定时钟的纪元开始经过的时间时长。

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

时长

时长由时间跨度组成,定义为某时间单位的某个计次数。例如,“ 42 秒”可表示为由 42 个 1 秒时间点位的计次所组成的时长。

定义于头文件 <chrono>
定义于命名空间 std::chrono
(C++11)
时间区间
(类模板)

当天时刻

time_of_day 尽可能地将表示自午夜起经过的时长分割成时、分、秒和秒的小数部分。它主要是一个格式化工具。

定义于头文件 <chrono>
定义于命名空间 std::chrono
表示一日中的时间
(类模板)

日历

定义于头文件 <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)
创建格里高利历日期的约定语法
(函数)

时区

定义于头文件 <chrono>
定义于命名空间 std::chrono
(C++20)
描述 IANA 时区数据库的副本
(类)
(C++20)
表示 tzdb 的链表
(类)
访问和控制全球时区数据库信息
(函数)
定位基于其名称的 time_zone
(函数)
返回当前的 time_zone
(函数)
(C++20)
表示时区
(类)
(C++20)
表示在特定时间点的关于时区的信息
(类)
表示关于从本地时间转换到 UNIX 时间的信息
(类)
(C++20)
选择应如何解析歧义的本地时间
(枚举)
zoned_time 所用的时区指针的特性类
(类模板)
表示时区和时间点
(类)
(C++20)
含有关于插入闰秒的信息
(类)
(C++20)
表示时区的替用名
(类)
抛出以报告本地时间不存在的异常
(类)
抛出以报告本地时间有歧义的异常
(类)

chrono I/O

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

C 风格日期与时间库

亦提供 C 风格日期与时间函数,例如 std::time_tstd::difftimeCLOCKS_PER_SEC

示例

此示例显式关于函数调用执行时间的信息:

#include <iostream>
#include <chrono>
 
long fibonacci(unsigned n)
{
    if (n < 2) return n;
    return fibonacci(n-1) + fibonacci(n-2);
}
 
int main()
{
    auto start = std::chrono::steady_clock::now();
    std::cout << "f(42) = " << fibonacci(42) << '\n';
    auto end = std::chrono::steady_clock::now();
 
    std::cout << "finished computation at " << std::ctime(&end_time)
              << "elapsed time: " << elapsed_seconds.count() << "s\n";
}

可能的输出:

f(42) = 267914296
elapsed time: 1.88232s