std::chrono::year_month_day:: ok
From cppreference.net
<
cpp
|
chrono
|
year month day
C++
Date and time library
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
std::chrono::year_month_day
| Member functions | ||||
|
year_month_day::ok
|
||||
| Nonmember functions | ||||
| Helper classes | ||||
|
constexpr
bool
ok
(
)
const
noexcept
;
|
(depuis C++20) | |
Vérifie si cet objet
year_month_day
représente une date calendaire valide.
Valeur de retour
true
si cet objet
year_month_day
représente une date calendaire valide, c'est-à-dire que les valeurs stockées pour l'année, le mois et le jour sont toutes valides et que la valeur du jour stockée se situe dans le nombre de jours du mois et de l'année donnés. Sinon
false
.
Implémentation possible
constexpr bool std::chrono::year_month_day::ok() const noexcept { return year().ok() && month().ok() && day().ok() && day() <= (year()/month()/std::chrono::last).day(); } |
Exemple
Exécuter ce code
#include <chrono> int main() { constexpr auto ymd1 {std::chrono::day(1)/std::chrono::July/2020}; static_assert(ymd1.ok()); constexpr auto ymd2 {std::chrono::year(2020)/7/42}; static_assert(not ymd2.ok()); constexpr auto ymd3 {std::chrono::February/29/2020}; // ok, année bissextile static_assert(ymd3.ok()); constexpr auto ymd4 = ymd3 + std::chrono::years{1}; // incorrect, pas une année bissextile static_assert(ymd4 == std::chrono::February/29/2021 and not ymd4.ok()); // pour corriger la date incorrecte nous pouvons nous aligner sur le dernier jour du mois : if constexpr (!ymd4.ok()) { constexpr auto ymd = ymd4.year()/ymd4.month()/std::chrono::last; static_assert(ymd == std::chrono::February/28/2021 and ymd.ok()); } // ou nous pouvons déborder vers le mois suivant : if constexpr (!ymd4.ok()) { constexpr auto st = std::chrono::sys_time<std::chrono::days>{ymd4}; constexpr auto ymd = std::chrono::year_month_day{st}; static_assert(ymd == std::chrono::March/1/2021 and ymd.ok()); } }