<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 结构 |
介绍有关 duration 和 time_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_zone 和 time_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 时间或间隔类型,例如 day 、month 、weekday 、year 等。 |
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_clock 的 time_point 。 你需要指定 Duration ,例如 file_time<seconds> ft; 。 |
gps_seconds |
gps_time<seconds>; 的同义词。秒数,由与 gps_clock 关联的 time_point 表示。 |
gps_time |
time_point<gps_clock, Duration> 的同义词。 表示 gps_clock 的 time_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_time 与 time_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_clock 的 time_point 。 |
utc_seconds |
utc_time<seconds>; 的同义词 |
utc_time |
time_point<utc_clock, Duration> 的同义词。 你需要提供 Duration ,例如 utc_time<seconds> ut; 。 表示 utc_clock 的 time_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;