choose 枚举

time_zonezoned_time 一起使用以指示如何处理不明确或不存在的 local_timesys_time 的转换。

语法

enum class choose { // C++20
    earliest,
    latest
};

成员

元素 说明
earliest 如果时间转换不明确,则使用较早的时间点。
latest 如果时间转换不明确,则使用较晚的时间点。

注解

如果转换的结果是 nonexistent_local_time,则 earliestlatest 中的时间相同。

不明确的转换错误

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

如果 local_time 指定在此“额外”一小时内的时间,则如何转换它并不明确。 是否应将转换后的时间视为该小时发生的“第一次”时间,还是“第二次”? 如果未指定枚举 choose 来指示它应是哪个,则会引发 ambiguous_local_time 异常。

不存在的转换错误

从标准时间转换为夏令时时,会出现不同的问题。 在春季从标准时间转换到夏令时期间,时钟提前一小时。 跳过的一小时消失了,因此,即使看似我们给时间增加了一小时,通过“向前跳”一小时,转换后的一小时实际上是被删除了。

请考虑纽约夏令时的变化,这发生在 3 月的第二个星期天凌晨 2 点。 凌晨 2 点,时钟转换到夏令时,现在显示为凌晨 3:00。 例如,如果转换的 local_time 为凌晨 2:30,则该时间是在“已删除”的时间段内,因此“不存在”,从而引发了 nonexistent_local_time 异常。

要求

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

命名空间:std::chrono

编译器选项:/std:c++latest 是必需的。

另请参阅

to_sys
zoned_time构造函数