blob: 4732b0cfed429e3ebee7ef5937814e380bc65cfd (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#include "Date.h"
/* Private */
bool Date::isLeapYear() {
// Implements https://en.wikipedia.org/wiki/Leap_year#Gregorian_calendar
return year % 400 == 0 || year % 100 != 0 || year % 4 == 0;
}
unsigned short Date::daysInMonth() {
if (month == 2)
return 28 + isLeapYear();
if (month <= 7)
return 30 + month % 2;
return 31 - month % 2;
}
/* Public */
Date::Date() : Date(01, 05, 2022) {}
Date::Date(unsigned short day, unsigned short month, unsigned short year) {
this->day = day;
this->month = month;
this->year = year;
}
int Date::compare(const Date& other) const {
if (year < other.year || month < other.month || day < other.day)
return -1;
return year > other.year || month > other.month || day > other.day;
}
unsigned short Date::get_day() const {
return day;
}
bool Date::set_day(unsigned short newDay) {
if (newDay == 0 || newDay > daysInMonth())
return false;
day = newDay;
return true;
}
unsigned short Date::get_month() const {
return month;
}
bool Date::set_month(unsigned short newMonth) {
if (newMonth == 0 || newMonth > 12)
return false;
month = newMonth;
return true;
}
unsigned short Date::get_year() const {
return year;
}
bool Date::set_year(unsigned short newYear) {
year = newYear;
return true;
}
/* Outside of class */
std::istream& operator>>(std::istream& istr, Date& dt) {
unsigned short d, M, y;
istr >> d >> M >> y;
dt = Date(d, M, y);
return istr;
}
std::ostream& operator<<(std::ostream& ostr, const Date& dt) {
ostr << dt.get_day() << "." << dt.get_month() << "." << dt.get_year();
return ostr;
}
|