命名空间
变体
操作

日期和时间库

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

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

目录

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

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

(自 C++20 起)

[编辑] 时钟

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

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

[编辑] 时间点

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

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

[编辑] 时长

时长由一段时间跨度组成,定义为某个时间单位的若干个时钟节拍。例如,“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 使用的时区指针的 traits 类
(类模板) [编辑]
表示时区和时间点
(类) [编辑]
包含有关闰秒插入的信息
(类) [编辑]
闰秒插入信息
(类) [编辑]
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) 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