...

/

Validation of Date

Validation of Date

Learn how to verify whether or not a date is valid.

We'll cover the following...

Assume you have a calendar date such as year(2100)/2/29. Your first question may be: Is this date valid?

Check if a date is valid

The various calendar types in C++20 have a function ok. This function returns true if the date is valid.

Press + to interact
#include <iostream>
#include "date.h"
int main() {
std::cout << std::boolalpha << '\n';
using namespace date;
std::cout << "Valid days" << '\n';
day day31(31);
day day32 = day31 + days(1);
std::cout << " day31: " << day31 << "; ";
std::cout << "day31.ok(): " << day31.ok() << '\n';
std::cout << " day32: " << day32 << "; ";
std::cout << "day32.ok(): " << day32.ok() << '\n';
std::cout << '\n';
std::cout << "Valid months" << '\n';
month month1(1);
month month0(0);
std::cout << " month1: " << month1 << "; ";
std::cout << "month1.ok(): " << month1.ok() << '\n';
std::cout << " month0: " << month0 << "; ";
std::cout << "month0.ok(): " << month0.ok() << '\n';
std::cout << '\n';
std::cout << "Valid years" << '\n';
year year2020(2020);
year year32768(-32768);
std::cout << " year2020: " << year2020 << "; ";
std::cout << "year2020.ok(): " << year2020.ok() << '\n';
std::cout << " year32768: " << year32768 << "; ";
std::cout << "year32768.ok(): " << year32768.ok() << '\n';
std::cout << '\n';
std::cout << "Leap Years" << '\n';
constexpr auto leapYear2016{year(2016)/2/29};
constexpr auto leapYear2020{year(2020)/2/29};
constexpr auto leapYear2024{year(2024)/2/29};
std::cout << " leapYear2016.ok(): " << leapYear2016.ok() << '\n';
std::cout << " leapYear2020.ok(): " << leapYear2020.ok() << '\n';
std::cout << " leapYear2024.ok(): " << leapYear2024.ok() << '\n';
std::cout << '\n';
std::cout << "No Leap Years" << '\n';
constexpr auto leapYear2100{year(2100)/2/29};
constexpr auto leapYear2200{year(2200)/2/29};
constexpr auto leapYear2300{year(2300)/2/29};
std::cout << " leapYear2100.ok(): " << leapYear2100.ok() << '\n';
std::cout << " leapYear2200.ok(): " << leapYear2200.ok() << '\n';
std::cout << " leapYear2300.ok(): " << leapYear2300.ok() << '\n';
std::cout << '\n';
std::cout << "Leap Years" << '\n';
constexpr auto leapYear2000{year(2000)/2/29};
constexpr auto leapYear2400{year(2400)/2/29};
constexpr auto leapYear2800{year(2800)/2/29};
std::cout << " leapYear2000.ok(): " << leapYear2000.ok() << '\n';
std::cout << " leapYear2400.ok(): " << leapYear2400.ok() << '\n';
std::cout << " leapYear2800.ok(): " << leapYear2800.ok() << '\n';
std::cout << '\n';
}

I check in the program if a given day ...