choose
枚举
与 time_zone
和 zoned_time
一起使用以指示如何处理不明确或不存在的 local_time
到 sys_time
的转换。
enum class choose { // C++20
earliest,
latest
};
元素 | 说明 |
---|---|
earliest |
如果时间转换不明确,则使用较早的时间点。 |
latest |
如果时间转换不明确,则使用较晚的时间点。 |
如果转换的结果是 nonexistent_local_time
,则 earliest
和 latest
中的时间相同。
不明确的转换错误
在秋季从夏令时转换到标准时间期间,时钟实质上会获得额外的一小时。 这可能令人困惑,因为转换到标准时间不是意味着失去了一小时吗? 通过回退一小时,在时钟调整为标准时间后,将重复转换前的一小时。 考虑纽约标准时间的变更,该变更发生在 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
是必需的。