日期和时间库

来自cppreference.com
< 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 输入/输出 (C++20 起)

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

[编辑] 注解

功能特性测试 标准 功能特性
__cpp_lib_chrono 201510L (C++17) std::chrono::durationstd::chrono::time_point 进行舍入的函数
201611L (C++17) std::chrono::durationstd::chrono::time_point 所有成员函数的 constexpr
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 finish{std::chrono::steady_clock::now()};
    const std::chrono::duration<double> elapsed_seconds = finish - start;
 
    std::cout << "Fibonacci(42):" << fb << "\n经过时间:";
//  std::cout << elapsed_seconds.count() << "s\n"; // C++20 前
    std::cout << elapsed_seconds << '\n'; // C++20 的 chrono::duration operator<<
 
    // 打印 UTC 和本地时间。
    const auto tp_utc{std::chrono::system_clock::now()};
    std::cout << "当前时间(UTC)为:" << tp_utc << "\n当前时间(本地)为:"
              << std::chrono::current_zone()->to_local(tp_utc) << '\n';
}

可能的输出:

Fibonacci(42):267914296
经过时间:0.728532s
当前时间(UTC)为:2025-02-10 06:22:39.420666960
当前时间(本地)为:2025-02-10 09:22:39.420666960