#include<iostream> using namespace std; class Date { public: Date(int year , int month , int day ,int after_day) :_year(year) , _month(month) , _day(day) { Add_day(_year,_month,_day,after_day); } Date(int year, int month, int day) :_year(year) , _month(month) , _day(day) {} bool operator=(Date &d) { _year = d._year, _month = d._month, _day = d._day; } bool operator>(Date &d)//比较两个日期的大小 { if (_year > d._year) { return true; } else if (_year < d._year) { return false; } else { if (_month>d._month) { return true; } else if (_month<d._month) { return false; } else { if (_day>d._day) { return true; } else { return false; } } } } int operator-(Date &d) { int _month_tmp,d_month_tmp; _month_tmp = _month; d_month_tmp=d._month; int ret = 0; int count = 0; if (_year != d._year) { int _year_tmp, d_year_tmp; _year_tmp = _year; d_year_tmp = d._year; if (_year_tmp < d_year_tmp) { while (_year_tmp != d_year_tmp) { if ((_year_tmp % 400 == 0) || ((_year_tmp % 4 == 0) && (_year_tmp % 100 != 0))) { count += 366; } else { count += 365; } _year_tmp++; } if (_month>=2) count -= 1; count *= (-1); } else if (_year_tmp > d_year_tmp) { int _year_tmp, d_year_tmp; _year_tmp = _year; d_year_tmp = d._year; while (d_year_tmp != _year_tmp) { if ((d_year_tmp % 400 == 0) || ((d_year_tmp % 4 == 0) && (d_year_tmp % 100 != 0))) { count += 366; } else { count += 365; } d_year_tmp++; } if (_month>=2) count -= 1; } } if (_month_tmp == d_month_tmp) { return(count+_day - d._day); } while (_month_tmp != d_month_tmp) { if (_month_tmp < d_month_tmp) { count -= Every_month(d._year, _month_tmp); _month_tmp++; } else if (_month_tmp >= d_month_tmp) { count += Every_month(d._year, d_month_tmp); d_month_tmp++; } } if (_day >d._day) { count += _day - d._day;; } else if (_day <= d._day) { count += _day - d._day; } return count; } int Every_month(int year, int month)//返回该年所对应月份的天数 { if (month<1 || month>12) { exit(0); } if (month == 2) { if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0))) { return 29; } else { return 28; } } else if (month == 4 || month == 6 || month == 9 || month == 11) { return 30; } else if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { return 31; } } void Add_day(int& year, int& month, int& day, int& after_day) { while (after_day>0) { int count = Every_month(year, month); if (after_day - count > 0) { if (month == 12) { year++; month = 0; } month++; after_day -= count; } else if (after_day - count < 0) { if (day + after_day <= count) { day += after_day; break; } else { day = day + after_day - count; if (month == 12) { year++; month = 0; } month++; break; } } else { if (month == 12) { year++; month = 0; } month++; break; } } } void Display(char*p,int n) { cout <<p<<"之后的"<<n<<"天后是:"<< _year << "-" << _month << "-" << _day << endl; } ~Date() { } private: int _year; int _month; int _day; }; void Test1()//计算某个日期的几天后的日期 { Date d1(2015, 12, 15, 138); d1.Display("d1",138); } void Test2()//计算两个日期相差的天数 { Date d2(1990, 3, 17); Date d3(2017, 1, 1); int ret=d2 - d3; cout << "d2比d3多"<<ret<<"天"<< endl; } Date Test3()//比较日期大小 { Date d4(2015, 4, 5); Date d5(2015, 9, 4); bool ret=d4 > d5; if (ret != 0) { cout << "d4>d5" << endl; return d4; } else { cout << "d5>d4" << endl; return d5; } } int main() { Test1(); Test2(); Test3(); system("pause"); return 0; }
原文:http://lingdandan.blog.51cto.com/10697032/1713432