Classe ambiguous_local_time
Cette exception est levée lors de la tentative de conversion d’un local_time
en un sys_time
et le résultat peut être l’une des deux fois et ni l’un ni l’autre n’a choose::earliest
choose::latest
été spécifié pour régler l’ambiguïté.
Syntaxe
class ambiguous_local_time : public runtime_error; // C++20
Notes
Pendant la transition de l’heure d’été à l’heure standard à l’automne, les horloges gagnent essentiellement une heure supplémentaire. Cela peut être déroutant parce que la transition vers le temps standard signifie perdre une heure ? En revenant une heure, l’heure avant la transition sera répétée après l’ajustement de l’horloge pour l’heure standard. Considérez le changement de l’heure standard à New York, qui se produit le premier dimanche en novembre à 2h00. Tout d’abord, 1h00 va. À 2h00, l’horloge passe à l’heure standard, c’est donc à nouveau 1h00. Cela signifie que le temps entre 1h et 2h sera « répété », ajoutant effectivement une heure.
Si une local_time
heure spécifiée pendant cette heure « supplémentaire », il n’est pas clair comment la convertir. L’heure convertie doit-elle être traitée comme la « première » fois que cette heure se produit, ou la « seconde » ? Si l’énumération choose
n’est pas spécifiée pour indiquer ce qu’elle doit être, vous obtiendrez une ambiguous_local_time
exception.
Ce problème n’existe pas lors de la conversion de l’heure standard en heure d’été. Dans ce cas, un problème différent peut survenir. Pour plus d'informations, consultez nonexistent_local_time
.
L’exemple suivant montre une conversion ambiguë.
Exemple : 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
Membres
Nom | Description |
---|---|
Constructeur | Construire un ambiguous_local_time . |
what |
Obtient une chaîne qui décrit la nature de l’ambiguïté. |
Spécifications
En-tête :<chrono>
(depuis C++20)
Espace de noms :std::chrono
Option du compilateur :/std:c++latest
Constructeurs
Construit un objet ambiguous_local_time
.
template<class Duration>
ambiguous_local_time(const local_time<Duration>& tp, const local_info& i);
Paramètres
tp
Ce local_time
qui n’a pas pu être converti.
i
Informations sur la tentative de conversion. Pour plus d'informations, consultez local_info
.
Notes
En règle générale, vous ne créez pas cette exception. Elle est levée par des fonctions qui convertissent un local_time
sys_time
en .
what
Obtient une chaîne décrivant les détails de l’ambiguïté.
[[nodiscard]] virtual const char* what() const noexcept;
Valeur retournée
Chaîne décrivant l’ambiguïté. Par exemple :
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
Voir aussi
<chrono>
to_sys
nonexistent_local_time
Informations de référence sur les fichiers d’en-tête
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour