Clase ambiguous_local_time
Esta excepción se produce al intentar convertir un local_time
en un sys_time
y el resultado puede ser uno de los dos horarios, y no se especificóchoose::earliest
ni choose::latest
para resolver la ambigüedad.
Sintaxis
class ambiguous_local_time : public runtime_error; // C++20
Comentarios
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
.
Este problema no existe al convertir de la hora estándar al horario de verano. En ese caso, puede surgir un problema diferente. Para obtener información detallada, vea nonexistent_local_time
.
En el ejemplo siguiente se muestra una conversión ambigua.
Ejemplo: ambiguous_local_time
#include <chrono>
#include <iostream>
using namespace std::chrono;
int main()
{
try
{
// The following will throw an exception because converting 1:30am local time to system time could be interpreted as either
// 1:30 AM EDT or 1:30 AM EST. Which to choose isn't specified for the conversion, so an ambiguous_local_time
// exception is thrown.
auto zt = zoned_time{"America/New_York", local_days{Sunday[1]/November/2016} + 1h + 30min};
} catch (const ambiguous_local_time& e)
{
std::cout << e.what() << '\n';
}
return 0;
}
2016-11-06 01:30:00 is ambiguous. It could be
2016-11-06 01:30:00 EDT == 2016-11-06 05:30:00 UTC or
2016-11-06 01:30:00 EST == 2016-11-06 06:30:00 UTC
Miembros
Nombre | Descripción |
---|---|
Constructor | Construcción de un ambiguous_local_time . |
what |
Obtiene una cadena que describe la naturaleza de la ambigüedad. |
Requisitos
Encabezado: <chrono>
(desde C++20)
Espacio de nombres: std::chrono
Opción del compilador: /std:c++latest
Constructores
Construye un objeto ambiguous_local_time
.
template<class Duration>
ambiguous_local_time(const local_time<Duration>& tp, const local_info& i);
Parámetros
tp
El local_time
que no se pudo convertir.
i
Información sobre el intento de la conversión. Para obtener información detallada, vea local_info
.
Comentarios
Normalmente, no creará esta excepción. Se produce mediante funciones que convierten un local_time
en un sys_time
.
what
Obtiene una cadena que describe los detalles de la ambigüedad.
[[nodiscard]] virtual const char* what() const noexcept;
Valor devuelto
Una cadena que describe la ambigüedad. Por ejemplo:
2016-11-06 01:30:00 is ambiguous. It could be
2016-11-06 01:30:00 EDT == 2016-11-06 05:30:00 UTC or
2016-11-06 01:30:00 EST == 2016-11-06 06:30:00 UTC
Consulte también
<chrono>
to_sys
nonexistent_local_time
Referencia de archivos de encabezado