|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
year_month_day::ok | ||||
| Nonmember functions | ||||
| Helper classes | ||||
constexprbool ok()constnoexcept; | (since C++20) | |
Checks if thisyear_month_day object represents a valid calendar date.
true if thisyear_month_day object represents a valid calendar date, that is, the stored year, month, and day values are all valid and the stored day value is within the number of days in the given year and month. Otherwisefalse.
constexprbool std::chrono::year_month_day::ok()constnoexcept{return year().ok()&& month().ok()&& day().ok()&& day()<=(year()/month()/std::chrono::last).day();} |
#include <chrono> int main(){constexprauto ymd1{std::chrono::day(1)/std::chrono::July/2020}; static_assert(ymd1.ok()); constexprauto ymd2{std::chrono::year(2020)/7/42}; static_assert(not ymd2.ok()); constexprauto ymd3{std::chrono::February/29/2020};// ok, leap year static_assert(ymd3.ok()); constexprauto ymd4= ymd3+std::chrono::years{1};// bad, not a leap year static_assert(ymd4==std::chrono::February/29/2021 and not ymd4.ok()); // to fix the bad date we may want to snap to the last day of the month:ifconstexpr(!ymd4.ok()){constexprauto ymd= ymd4.year()/ymd4.month()/std::chrono::last; static_assert(ymd==std::chrono::February/28/2021 and ymd.ok());} // or we may want to overflow to the next month:ifconstexpr(!ymd4.ok()){constexprauto st=std::chrono::sys_time<std::chrono::days>{ymd4};constexprauto ymd=std::chrono::year_month_day{st}; static_assert(ymd==std::chrono::March/1/2021 and ymd.ok());}}