utc_clock

协调世界时 (UTC)(有时称为格林威治标准时间 (GMT) 或 Zulu 时间)时钟。 根据时区,按照 UTC 时间调整本地时间。

语法

class utc_clock; // C++20

备注

此时钟测量自 1970 年 1 月 1 日(星期四)00:00:00 以来的时间。 此时钟考虑到了闰秒,是世界各地的民用时间的基础。

UTC 时间速率基于国际原子时 (TAI),后者使用原子钟跟踪时间。 但是,偶尔会向 UTC 时间加一个闰秒,使 UTC 时间与 UT1(太阳时)之间的差异保持在 +- 0.9 秒的范围内。

原子钟获得的时间与跟踪地球旋转所获得的时间之间存在差异。 这是因为地球的旋转速度不规律,通常以每 1.5 年大约一秒的速度减慢(不过有时地球的旋转速度会提高)。 闰秒调整使 UTC 跟踪时间保持在每天(平均时长)一秒内。

到本文撰写时为止,自 1972 年开始实施插入闰秒的做法以来,已增加了 27 闰秒。 国际地球自转和参考系统服务 (IERS) 决定何时增加闰秒。 增加闰秒称为“闰秒插入”。 如果插入闰秒,则时间在接近午夜时会从 23 小时 59 分 59 秒跳到 23 小时 59 分 60 秒(插入的闰秒),然后跳到 0 小时 0 分 0 秒(午夜)。 从历史上看,在 6 月 30 日或 12 月 31 日增加过闰秒。

根据定义,UTC 时间在开始时落后于 TAI(原子时间)10 秒。 1972 年为 TAI 时间增加了 10 秒,以计入在该时间点累积的闰秒。 鉴于自那时以来又插入了 27 闰秒,UTC 时间目前落后于 TAI(原子钟)时间 37 秒。

成员

名称 描述
from_sys 静态。 将 sys_time 转换为 utc_time
now 静态。 返回当前 时间。
to_sys 静态。 将 utc_time 转换为 sys_time

非成员

“属性” 描述
from_stream 使用指定格式从给定流分析 utc_time
get_leap_second_info 获取 leap_second_info,它指示所提供的时间是否指定插入了闰秒的时间。 它还包括 1970 年 1 月 1 日和指定持续时间之间所有闰秒的总和。
operator<< utc_time 输出到给定流。

便利类型别名

名称 描述
utc_clock::duration 在 Microsoft 的实现中,它是 duration<system_clock::rep, system_clock::period> 的同义词。 它表示以 100 纳秒为单位测量的持续时间。
utc_clock::period Microsoft 的实现将此定义为 system_clock::period 的同义词。 它以秒(100 纳秒)为单位表示持续时间中每个计时周期之间的时间。
utc_clock::rep 用于表示此时钟的 utc_clock::duration 中的整数单位的类型 (long long) 的同义词。
utc_clock::time_point time_point<utc_clock> 的同义词。 用于表示此时钟的 time_point

相关

名称 描述
utc_seconds using utc_seconds = utc_time<seconds>; 的同义词
utc_time template<class Duration> using utc_time = time_point<utc_clock, Duration>; 的同义词;表示 utc_clocktime_point。 指定持续时间。 在 std::chrono 中定义

公共常量

“属性” 描述
[utc_clock::is_steady constant](#is_steady_constant) 指示时钟类型是否为稳定。 其值为 false

要求

标头:<chrono>(从 C++20 开始)

命名空间:std::chrono

编译器选项:/std:c++latest

from_sys

sys_time 转换为 utc_time 的静态方法。

template<class Duration>
static utc_time<common_type_t<Duration, seconds>>
from_sys(const sys_time<Duration>& t);

参数

t
要转换的 sys_time

返回值

一个 utc_time,设置为最接近 sys_timet 的时间。 如果不存在直接映射,则返回闰秒插入期间的 time_point,以及在插入闰秒之前 sys_time 的最后一个可表示的值。

to_sys

utc_time 转换为 sys_time 的静态方法。

template<class Duration>
static sys_time<common_type_t<Duration, seconds>>
to_sys(const utc_time<Duration>& t);

参数

t
要转换的 utc_time

返回值

sys_time,设置为与 t 等效的时间点。 如果直接映射不存在,则它是插入闰秒之前最后一个可表示的值,前提是 t 表示插入闰秒的时间点。 增加闰秒称为“闰秒插入”。 如果插入闰秒,则时间在接近午夜时会从 23 小时 59 分 59 秒跳到 23 小时 59 分 60 秒(插入的闰秒),然后跳到 0 小时 0 分 0 秒(午夜)。 过去在 6 月 30 日或 12 月 31 日增加过闰秒。

is_steady

指定时钟类型是否为稳定的静态值。 在 Microsoft 的实现中,is_steady_constantfalse。 由于 utc_clock 不稳定,因此不能可靠地使用此时钟获取事件之前的时间、事件之后的时间,以及使它们相减以获取事件的持续时间,因为在该时间期间时钟可能会调整。

static const bool is_steady = false;

now

返回当前 UTC 时间的静态方法。 返回的时间包括闰秒。

static time_point now() noexcept;

返回值

表示当前时间的 time_point 对象。 返回的时间点实际为 from_sys(system_clock::now())

另请参阅

<chrono>
file_clock class
gps_clock class
high_resolution_clock
local_t 结构
steady_clock 结构
system_clock 结构
tai_clock
头文件引用