class Date(){
public:
Date(int year, int month, int day){
date_year = year;
date_month = month;
date_day = day;
}
bool IsLeap() const{
if (date_year % 4 == 0) {
if (date_year % 100 == 0) {
if (date_year % 400 == 0) {
return true;
}
else return false;
}
else return true;
}
return false;
}
string ToString() const{
string_day = to_string(date_day);
string_month = to_string(date_month);
string_year = to_string(date_year);
if (date_day < 10){
string_day = "0" + string_day;
}
if (date_month < 10){
string_month = "0" + string_month;
}
if (date_year < 10){
string_year = "000" + string_year;
} else if (date_year >= 10 && date_year < 100){
string_year = "00" + string_year;
} else if (date_year >= 100 && date_year < 1000){
string_year = "0" + string_year;
}
return string_day + "." + string_month + "." + string_year;
}
Date DaysLater(int days) const {
if (date_day + days == date_day){
return {date_year, date_month, date_day};
} else {
while (days > 0){
days--;
if (date_month == 2 && date_day == 28){
if ({date_year, date_month, date_day}.IsLeap()){
date_day++;
}
} else if (date_month == 12 && date_day == 31){
date_day = 1;
date_month = 1;
date_year++;
} else if (date_day < count_of_days[date_month]){
date_day++;
} else{
date_day = 1;
date_month++;
}
}
}
return {date_year, date_month, date_day};
}
int DaysLeft(const Date& date) const {
int counter = 0;
while (date_year != date.date_year && date_month != date.date_month && date_day != date.date_day){
if (date_month == 2 && date_day == 28){
if ({date_year, date_month, date_day}.IsLeap()){
counter++;
date_day++;
}
} else if (date_month == 12 && date_day == 31){
date_day = 1;
date_month = 1;
date_year++;
counter++;
} else if (date_day < count_of_days[date_month]){
date_day++;
counter++;
} else{
date_day = 1;
date_month++;
counter++;
}
}
return counter;
}
private:
int date_year;
int date_month;
int date_day;
int[12] count_of_days = {31,28,31,30,31,30,31,31,30,31,30,31};
}