local_info 结构

为有关将 local_time 转换为 sys_time 的结果的时区信息提供一个低级别接口。

语法

struct local_info;

成员

Function 说明
result 描述转换结果的代码。
first, second 转换的结果。

成员常量

名称 说明
unique 0 转换结果是唯一的。
nonexistent 1 没有要作为 local_time 转换目标的对应 sys_time
ambiguous 2 转换结果不明确。

非成员

函数 说明
operator<< local_info 输出到流。

result

local_time 转换到 sys_time 的结果。

int result;

返回值

结果可以是以下值之一:

  • unique:表示 local_time 已成功转换到 sys_time
  • nonexistent:没有从 local_timesys_time 的映射。
  • ambiguouslocal_time 在从夏令时到标准时间之间的转换期间出现,因此可以被转换为两个 sys_time 值。

注解

若要了解如何基于 result 设置 firstsecond,请参阅以下有关 firstsecond 的部分。

first, second

提供将 local_time 转换到 sys_time 的结果。

sys_seconds begin;
sys_seconds end;

返回值

firstsecond 是基于 result 设置的,如下所示:

result first second
unique 包含转换为 sys_timelocal_time 零初始化
nonexistent 结束于 local_time 之前的 sys_info 开始于 local_time 之后的 sys_info
ambiguous 结束于 local_time 之后的 sys_info 开始于 local_time 之前的 sys_info

ambiguous 结果代码

在秋季从夏令时转换到标准时间期间,时钟实质上会获得额外的一小时。 这可能令人困惑,因为转换到标准时间不是意味着失去了一小时吗? 通过回退一小时,在时钟调整为标准时间后,将重复转换前的一小时。 考虑纽约标准时间的变更,该变更发生在 11 月的第一个星期天凌晨 2:00。 首先,凌晨 1:00 过去了。 凌晨 2 点,时钟转换为标准时间,所以现在又是凌晨 1:00。 这意味着凌晨 1 点到 2 点之间的时间将“重复”,从而实际上增加了一小时。 有关示例,请参见 ambiguous_local_time

如果 local_time 指定在此“额外”一小时内的时间,则如何转换它并不明确。 是否应将转换后的时间视为该小时发生的“第一次”时间,还是“第二次”? 如果未指定枚举 choose 来指示应该如何选择,result 应设置为 ambiguousfirstsecond 将反映 local_time 可被转换到的时间的两种选择。

nonexistent 结果代码

在春季从标准时间转换到夏令时期间,时钟实质上会丢失一小时。 这可能令人困惑,因为转换到夏令时不是意味着增加了一小时吗? 通过“向前跳”一小时,转换后的一小时被有效删除。 请考虑纽约夏令时的变化,这发生在 3 月的第二个星期天凌晨 2 点。 凌晨 2 点,时钟转换到夏令时,现在显示为凌晨 3:00。 例如,如果转换的 local_time 为凌晨 2:30,则该时间是在“已删除”的时间段内,因此 result 应该具有 nonexistent 代码。 有关示例,请参见 nonexistent_local_time

示例:获取 local_info

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std::chrono;

int main()
{
    const auto& timeZoneDatabase = get_tzdb();
    const auto& currentZone = timeZoneDatabase.current_zone();

    local_time<system_clock::duration> lt = currentZone->to_local(system_clock::now());

    auto localInfo = currentZone->get_info(lt);

    std::cout << "local_time: " << lt << "\n";
    std::cout << localInfo << "\n";

    return 0;
}
local_time: 2021-09-08 15:37:57.6853963
result: unique, first: (begin: 2021-03-14 10:00:00, end: 2021-11-07 09:00:00, offset: -25200s, save: 60min, abbrev: PDT)

要求

标头<chrono>

命名空间std::chrono

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

<chrono>
ambiguous_local_time 异常
choose enum
file_clock
high_resolution_clock
local_t 结构
non_existent 异常
system_clock 结构
tai_clock
utc_clock
头文件引用