<chrono>

包括标准标头 <chrono>,定义表示和操作持续时间及时刻的类和函数。

从 Visual Studio 2015 开始,steady_clock 的实现已更改,以便满足 C++ 标准对稳定性和单一性的需求:

  • steady_clock 现在基于 QueryPerformanceCounter()
  • high_resolution_clock 现在是 steady_clock 的 typedef。在 Microsoft C++ 实现中,steady_clock::time_point 现在是 chrono::time_point<steady_clock>typedef。 但是,其他实现不一定是这样。

要求

标头<chrono>

区域立法机构偶尔会对时区进行更改,而国际标准机构指定何时应考虑新的闰秒。 这些更改的数据库已添加到 Windows 10。 具体而言:

功能 客户端版本 服务器版本
闰秒数据库更新 Windows 10 版本 1809 或更高版本 Windows Server 2019 或更高版本
时区支持 Windows 10 版本 1903/19H1 或更高版本 Windows Server 2022 或更高版本

在较旧版本的 Windows 上使用时区设施会导致运行时错误。

命名空间:std

日历类型

名称 描述
common_type 结构 介绍有关 durationtime_point 实例化的类模板 common_type 的专用化。
day 一个月中的某一天。 例如,一个月的第 25 天。
duration 时间间隔。
duration_values 结构 提供 duration 模板参数 Rep 的特定值。
hh_mm_ss duration 拆分为小时:分钟:秒。
last_spec 用于指示一个月内的最后一个项,例如一个月中一周的最后一个星期几(2020 年 2 月的最后一个星期二)或一个月的最后一天(2019 年 4 月的最后一天)。
leap_second 插入的闰秒的日期和值。
leap_second_info 结构 get_leap_second_info 返回的数据。
month 一年中的一个月。 例如,7月。
month_day 特定月份的特定日期。 例如,7 月 30 日。
month_day_last 一个月的最后一天。
month_weekday 特定月份的第 n 个工作日。
month_weekday_last 特定月份的第 n 个工作日。
time_point 时间点。
weekday 星期几。
weekday_last 一个月的最后一个工作日。
weekday_indexed 将星期几与表示该月工作日的索引相结合。
year 公历年份。
year_month 年和月。 未指定日期。
year_month_day 年、月、日。
year_month_day_last 特定年份和月份的最后一天。
year_month_weekday 特定年份、月份和该月的第 n 个工作日。
year_month_weekday_last 特定年份、月份和该月的最后一个工作日。

时钟

名称 描述
file_clock 用于 std::filesystem::file_time_type 的时钟的别名,用于表达文件时间戳。
gps_clock 采用 GPS 时间的时钟。 测量从 1980 年 1 月第一个星期日的 00:00:00 UTC 开始的时间。
high_resolution_clock 结构 具有纳米秒刻度周期的时钟。
local_t 结构 用作 time_point 模板自变量的伪时钟,用于指示 time_point 表示本地时间。
steady_clock 结构 steady 时钟。 此时钟是测量时间间隔的首选。
system_clock 结构 基于系统实时时钟的时钟。
tai_clock 从 1958 年 1 月 1 日星期四 00:00:00 开始的国际原子时间 (TAI)。 此时钟不考虑闰秒。
utc_clock 测量自 1970 年 1 月 1 日(星期四)00:00:00 UTC 以来的时间。 此时钟考虑到了闰秒,是世界各地使用的时间标准。

时区

名称 描述
choose 一个枚举,指定如何将 local_time 的不明确转换解析为 sys_time
local_info 为有关将 local_time 转换为 sys_time 的结果的时区信息提供一个低级别接口。
sys_info 为有关将 sys_time 转换为 local_time 的结果的时区信息提供一个低级别接口。
time_zone 特定地理区域的所有时区转换。
time_zone_link time_zone 的替代名称。
tzdb 结构 表示时区数据库的副本。
tzdb_list 时区数据库的单一实例列表。
zoned_time 具有指定精度的 time_zonetime_point 的配对。
zoned_traits 结构 用于将其他默认时区与 zoned_time 相关联,并选择将自定义名称映射到该默认时区。

异常

名称 描述
ambiguous_local_time local_time 转换为 sys_time 且结果不明确时引发的错误。
nonexistent_local_time local_time 转换为 sys_time 且结果为不存在的时间时引发的错误。

函数

名称 描述
ceil(duration) 作为指定类型返回 duration 对象的 ceil
ceil(time_point) 作为指定类型返回 time_point 对象的 ceil
clock_cast time_point 从一个时钟转换为另一个时钟的等效 time_point
duration_cast duration 对象转换为指定类型。
floor(duration) 作为指定类型返回 duration 对象的 floor
floor(time_point) 作为指定类型返回 time_point 对象的 floor
from_stream() 使用指定格式将输入流分析为其中一个 std::chrono 时间或间隔类型,例如 daymonthweekdayyear 等。
get_leap_second_info 获取 leap_second_info 结构
is_am hours 对象是否为 AM。
is_pm hours 对象是否为 PM。
locate_zone 获取指定时区。
make12 以 12 小时制返回 hours
make24 以 24 小时制返回 hours
round(duration) 返回舍入为指定类型的 duration 对象。
round(time_point) 返回舍入为指定类型的 time_point 对象。
time_point_cast time_point 对象转换为指定类型。

与时区相关

名称 描述
current_zone 获取当前时区。
get_tzdb 获取第一个时区数据库条目。
get_tzdb_list 获取时区数据库条目列表。
reload_tzdb 获取更新的时区数据库条目。
remote_version 检查是否有更新的时区数据库条目。

运算符

名称 描述
operator- 减去或否定各种 <chrono> 对象。
operator!= 与各种 <chrono> 对象一起使用的不等运算符。
operator modulo 用于对 duration 对象进行取模操作的运算符。
operator* duration 对象的乘法运算符。
operator/ duration 对象的除法运算符。
operator/ 提供用于创建日历日期的语法。
operator+ 添加到各种 <chrono> 对象。
operator< 确定各种 <chrono> 对象是否小于另一个对象。
operator<= 确定各种 <chrono> 对象是否小于或等于另一个对象。
operator== 确定各种 <chrono> 对象之间是否相等。
operator> 确定各种 <chrono> 对象是否大于另一个对象。
operator>= 确定各种 <chrono> 对象是否大于或等于另一个对象。

Typedef

有关在以下 typedef 中使用的比率类型的详细信息,请参阅 <ratio>

便利 duration 类型

名称 描述
typedef duration<long long, nano> nanoseconds; 刻度周期为十亿分之一 (1/1,000,000,000) 秒的 duration 类型的同义词。
typedef duration<long long, micro> microseconds; 刻度周期为一百万分之一 (1/1,000,000) 秒的 duration 类型的同义词。
typedef duration<long long, milli> milliseconds; 刻度周期为千分之一 (1/1,000) 秒的 duration 类型的同义词。
typedef duration<long long> seconds; 时钟周期为 1 秒的 duration 类型的同义词。
typedef duration<int, ratio<60>> minutes; 时钟周期为 1 分钟的 duration 类型的同义词。
typedef duration<int, ratio<3600>> hours; 时钟周期为 1 小时的 duration 类型的同义词。

便利 time_point 类型

名称 描述
file_time time_point<file_clock, Duration> 的同义词。 表示 file_clocktime_point。 你需要指定 Duration,例如 file_time<seconds> ft;
gps_seconds gps_time<seconds>; 的同义词。秒数,由与 gps_clock 关联的 time_point 表示。
gps_time time_point<gps_clock, Duration> 的同义词。 表示 gps_clocktime_point。 你需要指定 Duration,例如 gps_time<milliseconds> gps;
local_days local_time<days> 的同义词。 天数计数,由与任何时区都不关联的 time_point 表示。
local_seconds local_time<seconds> 的同义词。
local_time time_point<local_t, Duration> 的同义词。 表示尚未与时区关联的本地时间的 time_point。 你需要指定 Duration,例如 local_time<seconds> lt;local_time 是某个地方的本地时间。 这不是计算机时钟的当前本地时间。 仅当将 local_timetime_zone 配对时,才能获得可转换为 UTC 时间点或特定时区时间的时间点。
sys_days sys_time<days> 的同义词。 自 system_clock 纪元以来的天数,由与 system_clock 关联的 time_point 表示。
sys_seconds sys_time<seconds> 的同义词。 自 system_clock 纪元(1970 年 1 月 1 日 00:00:00 UTC )的非闰秒计数,由与 system_clock 关联的 time_point 表示。
sys_time time_point<system_clock, Duration> 的同义词。 你需要指定 Duration,例如 sys_time<seconds> st;。 表示从 system_clock::now() 返回的 time_point。 它表示 Unix 时间,与 UTC 时间接近。
tai_seconds tai_time<seconds> 的同义词。 秒计数,由与 tai_clock 关联的 time_point 表示。
tai_time time_point<tai_clock, Duration> 的同义词。 你需要提供 Duration,例如 tai_time<seconds> tt;。 表示 tai_clocktime_point
utc_seconds utc_time<seconds>; 的同义词
utc_time time_point<utc_clock, Duration> 的同义词。 你需要提供 Duration,例如 utc_time<seconds> ut;。 表示 utc_clocktime_point

类型特征

名称 描述
clock_time_conversion 一个特征,指定如何将 time_point 从一个时钟转换为另一个时钟。
is_clock 检查类型是否为时钟。
treat_as_floating_point 检查 duration 是否可以转换为另一个具有不同刻度周期的 duration

文字

(C++11)<chrono> 标头定义了以下用户定义的文本,利用这些文本,可更方便地使用代码、增大代码类型的安全性和提高代码的可维护性。 这些文本在 literals::chrono_literals 内联命名空间中定义,并且在 std::chrono 存在于范围中时也存在于范围中。

声明 说明
hours operator "" h(unsigned long long Val) 指定整数值形式的小时数。
duration<double, ratio<3600>> operator "" h(long double Val) 指定浮点值形式的小时数。
minutes (operator "" min)(unsigned long long Val) 指定整数值形式的分钟数。
duration<double, ratio<60>> (operator "" min)( long double Val) 指定浮点值形式的分钟数。
seconds operator "" s(unsigned long long Val) 指定整数值形式的分钟数。
duration<double> operator "" s(long double Val) 指定浮点值形式的描述。
milliseconds operator "" ms(unsigned long long Val) 指定整数值形式的毫秒数。
duration<double, milli> operator "" ms(long double Val) 指定浮点值形式的毫秒数。
microseconds operator "" us(unsigned long long Val) 指定整数值形式的微秒数。
duration<double, micro> operator "" us(long double Val) 指定浮点值形式的微秒数。
nanoseconds operator "" ns(unsigned long long Val) 指定整数值形式的纳秒数。
duration<double, nano> operator "" ns(long double Val) 指定浮点值形式的纳秒数。

下面的示例演示了如何使用 <chrono> 文本:

constexpr auto day = 24h;
constexpr auto week = 24h* 7;
constexpr auto my_duration_unit = 108ms;

另请参阅

头文件引用