#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;
}
转载于:https://blog.51cto.com/lingdandan/1713432