Namespaces
Variants
Views
Actions

std::chrono::year_month_day::ok

From cppreference.com
 
 
Utilities library
General utilities
Relational operators (deprecated in C++20)
Integer comparison functions
(C++20)(C++20)(C++20)
(C++20)
Swap and type operations
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Common vocabulary types
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)

Elementary string conversions
(C++17)
(C++17)
Stacktrace
 
Date and time utilities
(C++11)
(C++11)
Time of day
(C++20)



(C++20)(C++20)(C++20)(C++20)
Clocks
(C++20)
                                             
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
Calendars
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
Time zones
(C++20)
(C++20)
(C++20)
(C++20)
C-style date and time
 
 
constexpr bool ok() const noexcept;
(since C++20)

Checks if this year_month_day object represents a valid calendar date.

[edit] Return value

true if this year_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. Otherwise false.

[edit] Possible implementation

constexpr bool std::chrono::year_month_day::ok() const noexcept {
    return year().ok() && month().ok() && day().ok() &&
           day() <= (year()/month()/std::chrono::last).day();
}

[edit] Example

#include <iostream>
#include <chrono>
 
int main()
{
    std::cout << std::boolalpha;
 
    constexpr auto ymd1 {std::chrono::day(1)/std::chrono::July/2020};
    std::cout << (ymd1.ok()) << ' ';
    constexpr auto ymd2 {std::chrono::year(2020)/7/42};
    std::cout << (ymd2.ok()) << ' ';
    constexpr auto ymd3 {std::chrono::February/29/2020}; // leap year
    std::cout << (ymd3.ok()) << '\n';
}

Output:

true false true