class Date { public: Date(int y = 1, int m = 1, int d = 1) { if (y <= 0 || m <= 0 || m > 12 || d <= 0 || d > getday(y, m)) { _y = 1; _m = 1; _d = 1; } else { _y = y; _m = m; _d = d; } } int getday(int y,int m) { static int _day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; int day = _day[m]; if (m == 2&&((y%4==0&&y%100!=0)||y%400==0)) day++; return day; } Date& operator+=(int day) { _d += day; while (_d > getday(_y, _m)) { _d -= getday(_y, _m); _m++; if (_m == 13) { _y++; _m = 1; } } return *this; } Date operator+(int day) { Date copy(*this); copy += day; return copy; } bool operator==(const Date& d) { return _y == d._y && _m == d._m && _d == d._d; } bool operator!=(const Date& d) { return !(*this== d); } Date operator-(int day) { Date ret(*this); ret -= day; return ret; } int operator-(const Date& d) { //計算相減問題轉換爲,小日期加天數等於大日期 //本身天數就是相減天數 Date max = *this;//假設原來的日期大 Date min = d; int flag = 1; if (max < min) { max = d; min = *this; flag = -1; } int day_n =0; while (min < max) { min+=1; day_n++; } return day_n*flag; //返回值爲正表示當前比傳進來的日期大,反之小 } Date& operator-=(int day) { _d -= day; while (_d<0) { if (_d < 0) _m--; if (_m == 0) { _y--; _m = 12; } //if (_y < 0) _d += getday(_y,_m); } return *this; } bool operator>(const Date& d) { if (_y > d._y) return true; else if (_y == d._y) { if (_m > d._m) return true; else if (_m == d._m) { if (_d > d._d) return true; } } return false; } bool operator<(const Date& d) { /*if (_y < d._y) return true; else if (_y == d._y) { if (_m < d.m) return true; else if (_m == d._m) { if (_d < d._d) return true; } } return false;*/ return !(*this > d||*this==d); } bool operator<=(const Date& d) { return !(*this > d); } bool operator>=(const Date& d) { return (*this > d || *this == d); //return !(*this < d); } private: int _y; int _m; int _d; };