日期和时间工具
来自cppreference.com
                    
                                        
                    < cpp
                    
                                                            
                    C++ 包含对二类时间操作的支持:
-  
chrono库,以各种精度跟踪时间的类型的灵活汇集(如 std::chrono::time_point )。 - C 风格日期和时间工具(如 std::time )。
 
std::chrono 库
chrono 库定义三种主要类型以及工具函数和常用 typedef 。
- 时钟
 - 时长
 - 时间点
 
时钟
时钟由起点(或纪元)及计次频率组成。例如,时钟可以拥有 1970 年 1 月 1 日的纪元,和每一秒的计次。 C++ 定义数种时钟类型:
|   定义于头文件  
<chrono>  | |
|   定义于命名空间  
std::chrono | |
|    (C++11)  | 
  来自系统范畴实时时钟的挂钟时间  (类)  | 
|    (C++11)  | 
  决不会调整的单调时钟  (类)  | 
|    (C++11)  | 
  拥有可用的最短嘀嗒周期的时钟  (类)  | 
|    (C++20)  | 
  确定类型是否为时钟 (Clock)    (类模板) (变量模板)  | 
|    (C++20)  | 
  协调世界时 (UTC) 的时钟 (Clock)   (类)  | 
|    (C++20)  | 
  国际原子时 (TAI) 的时钟 (Clock)   (类)  | 
|    (C++20)  | 
  GPS 时间的时钟 (Clock)   (类)  | 
|    (C++20)  | 
  用于文件时间的时钟 (Clock)   (typedef)  | 
|    (C++20)  | 
  表示本地时间的伪时钟  (类)  | 
时间点
时间点是从特定时钟的纪元开始经过的时间时长。
|   定义于头文件  
<chrono>  | |
|   定义于命名空间  
std::chrono | |
|    (C++11)  | 
  时间中的点  (类模板)  | 
|    (C++20)  | 
  定义如何转换一个时钟的时间点为另一个的特性类  (类模板)  | 
|    (C++20)  | 
  转换一个时钟的时间点为另一个  (函数模板)  | 
时长
时长由时间跨度组成,定义为某时间单位的某个计次数。例如,“ 42 秒”可表示为由 42 个 1 秒时间点位的计次所组成的时长。
|   定义于头文件  
<chrono>  | |
|   定义于命名空间  
std::chrono | |
|    (C++11)  | 
  时间区间  (类模板)  | 
当天时刻
time_of_day 尽可能地将表示自午夜起经过的时长分割成时、分、秒和秒的小数部分。它主要是一个格式化工具。
|   定义于头文件  
<chrono>  | |
|   定义于命名空间  
std::chrono | |
|    (C++20)  | 
  表示一日中的时间  (类模板)  | 
|    (C++20)  | 
   在 12 时和 24 时格式当天时刻之间翻译  (函数)  | 
日历
|   定义于头文件  
<chrono>  | |
|   定义于命名空间  
std::chrono | |
|    (C++20)  | 
  指示一个月中最后日期或星期的标签类  (类)  | 
|    (C++20)  | 
  表示月之日期  (类)  | 
|    (C++20)  | 
  表示年之月份  (类)  | 
|    (C++20)  | 
  表示格里高利历中的年  (类)  | 
|    (C++20)  | 
  表示格里高利历中星期之日  (类)  | 
|    (C++20)  | 
  表示月份的第 n 个 weekday  (类)  | 
|    (C++20)  | 
  表示月份的最后一个 weekday  (类)  | 
|    (C++20)  | 
  表示特定 month 的特定 day  (类)  | 
|    (C++20)  | 
  表示特定 month 的最后一日  (类)  | 
|    (C++20)  | 
  表示特定 month 的第 n 个 weekday  (类)  | 
|    (C++20)  | 
  表示特定 month 的最后一个 weekday  (类)  | 
|    (C++20)  | 
  表示特定 year 的特定 month  (类)  | 
|    (C++20)  | 
  表示特定的 year 、 month 和 day   (类)  | 
|    (C++20)  | 
  表示特定 year 和 month 的最后一日  (类)  | 
|    (C++20)  | 
  表示特定 year 和 month 的第 n 个 weekday  (类)  | 
|    (C++20)  | 
  表示特定 year 和 month 的最后一个 weekday  (类)  | 
|    (C++20)  | 
  创建格里高利历日期的约定语法  (函数)  | 
时区
|   定义于头文件  
<chrono>  | |
|   定义于命名空间  
std::chrono | |
|    (C++20)  | 
  描述 IANA 时区数据库的副本  (类)  | 
|    (C++20)  | 
  表示 tzdb 的链表  (类)  | 
|   访问和控制全球时区数据库信息  (函数)  | |
|    (C++20)  | 
  定位基于其名称的 time_zone  (函数)  | 
|    (C++20)  | 
  返回当前的 time_zone  (函数)  | 
|    (C++20)  | 
  表示时区  (类)  | 
|    (C++20)  | 
  表示在特定时间点的关于时区的信息  (类)  | 
|    (C++20)  | 
  表示关于从本地时间转换到 UNIX 时间的信息  (类)  | 
|    (C++20)  | 
  选择应如何解析歧义的本地时间  (枚举)  | 
|    (C++20)  | 
  zoned_time 所用的时区指针的特性类  (类模板)  | 
|    (C++20)  | 
  表示时区和时间点  (类)  | 
|    (C++20)  | 
  含有关于插入闰秒的信息  (类)  | 
|    (C++20)  | 
  表示时区的替用名  (类)  | 
|    (C++20)  | 
  抛出以报告本地时间不存在的异常  (类)  | 
|    (C++20)  | 
  抛出以报告本地时间有歧义的异常  (类)  | 
 chrono I/O 
|   定义于头文件  
<chrono>  | |
|   定义于命名空间  
std::chrono | |
|    (C++20)  | 
  从流分析 chrono 对象 (函数模板)  | 
C 风格日期与时间库
亦提供 C 风格日期与时间函数,例如 std::time_t 、 std::difftime 和 CLOCKS_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::chrono::duration<double> elapsed_seconds = std::chrono::duration<double>(end-start); std::cout << "elapsed time: " << elapsed_seconds.count() << "s\n"; }
可能的输出:
f(42) = 267914296 elapsed time: 2.25517s