choose
enum
Se usa con time_zone
y para indicar cómo controlar una conversión ambigua o inexistente zoned_time
local_time
.sys_time
Sintaxis
enum class choose { // C++20
earliest,
latest
};
Miembros
Elemento | Descripción |
---|---|
earliest |
Si una conversión de tiempo es ambigua, usa el punto de tiempo anterior. |
latest |
Si una conversión de tiempo es ambigua, usa el punto de tiempo posterior. |
Comentarios
Si el resultado de la conversión es nonexistent_local_time
, el tiempo en earliest
y latest
son los mismos.
Error de conversión ambiguo
Durante la transición del horario de verano a la hora estándar en el otoño, los relojes básicamente obtienen una hora adicional. Esto puede resultar confuso porque la transición al tiempo estándar significa perder una hora. Al retroceder una hora, la hora anterior a la transición se repetirá después de que el reloj se ajuste para la hora estándar. Considere el cambio a la hora estándar en Nueva York, que ocurre el primer domingo de noviembre a las 2:00. En primer lugar, pasa la 1:00. A las 2:00, el reloj pasa a la hora estándar, por lo que ahora es la 1:00 de nuevo. Esto significa que el tiempo comprendido entre la 1:00 y las 2:00 se "repetirá", agregando eficazmente una hora.
Si un local_time
especifica una hora durante esta hora "adicional", no está claro cómo convertirla. ¿Debe tratarse el tiempo convertido como la "primera" vez que se produce esa hora o la "segunda"? Si no se especifica la enumeración choose
para indicar cuál debe ser, obtendrá una excepción de ambiguous_local_time
.
Error de conversión inexistente
Al convertir de horario estándar al horario de verano, puede surgir un problema diferente. Durante la transición de la hora estándar al horario de verano en la primavera, los relojes avanzan por una hora. La hora omitida desaparece, por lo que aunque parezca que hemos agregado una hora a la hora, al "reenviar" una hora, se quita la hora siguiente a la transición.
Considere el cambio en el horario de verano en Nueva York, que sucede el segundo domingo de marzo a las 2:00. A las 2:00, el reloj pasa al horario de verano y ahora muestra las 3:00. Si el objeto local_time
que se convierte es de 2:30 a. m., por ejemplo, ese tiempo es durante el período que se "quitó" y así es "inexistente", lo que da como resultado una excepción nonexistent_local_time
.
Requisitos
Encabezado: <chrono>
(desde C++20)
Espacio de nombres: std::chrono
Opción del compilador: /std:c++latest
no es necesaria.