#pragma once
#include <string>
class Date {
private:
int year, month, day;
public:
Date(int y, int m, int d){
day = d;
month = m;
year = y;
}
bool IsLeap() const {
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
return true;
}
return false;
}
std::string ToString() const {
std::string s0 = ".";
std::string s1 = std::to_string(day);
if (day < 10) {
s1 = "0" + s1;
}
std::string s2 = std::to_string(month);
if (month < 10) {
s2 = "0" + s2;
}
std::string s3 = std::to_string(year);
while (s3.length() < 4) {
s3 = "0" + s3;
}
std::string s = s1 + s0 + s2 + s0 + s3;
return s;
}
Date DaysLater(int days) const {
int months[12], d(day), m(month-1), y(year);
months[0] = 31, months[1] = 28, months[2] = 31;
months[3] = 30, months[4] = 31, months[5] = 30;
months[6] = 31, months[7] = 31, months[8] = 30;
months[9] = 31, months[10] = 30, months[11] = 31;
while (days > 0) {
months[1] = 28;
if (y % 4 == 0) {
months[1] = 29;
}
if (d < months[m]) {
d += 1;
} else if (d == months[m]) {
if (m + 1 == 11) {
y += 1;
}
m = (m + 1) % 12;
d = 1;
}
days -= 1;
}
return Date(y, m + 1, d);
}
int DaysLeft(const Date& date) const {
int months[12], d(day), m(month-1), y(year), d_(0);
months[0] = 31, months[1] = 28, months[2] = 31;
months[3] = 30, months[4] = 31, months[5] = 30;
months[6] = 31, months[7] = 31, months[8] = 30;
months[9] = 31, months[10] = 30, months[11] = 31;
while (date.day!= d || date.month-1 != m || date.year != y) {
months[1] = 28;
if (y % 4 == 0) {
months[1] = 29;
}
if (d < months[m]) {
d += 1;
} else if (d == months[m]) {
if (m + 1 == 11) {
y += 1;
}
m = (m + 1) % 12;
d = 1;
}
d_ += 1;
}
return d_;
}
};