主要实现两个日期相差多少天、一个日期加上X天后的日期
#include<iostream>
using namespace std;
class Date
{
public:
void Display()
{
cout<<_year<<"-"<<_month<<"-"<<_day<<endl;
}
Date(size_t year=1900,size_t month=1,size_t day=1)
:_year(year)
,_month(month)
,_day(day)
{
/*_year=year;
_month=month;
_day=day;*/
//若非法,把日期赋值为1900-1-1
if(Cheak()==0)
{
cout<<"日期不合法"<<endl;
system("pause");
exit(0);
}
}
//得到每个月多少天
size_t Day(size_t year,size_t month)
{
size_t i=0;
size_t a1[]={1,3,5,7,8,10,12};
size_t a2[]={4,6,9,11};
size_t len1=sizeof(a1)/sizeof(a1[0]);
size_t len2=sizeof(a2)/sizeof(a2[0]);
if(month==2)
{
if((year%400==0)||(year%4==0)&&(year%100!=0))
{
return 29;
}
else
{
return 28;
}
}
else
{
for(;i<len1;i++)
{
if(month==a1[i])
{
return 31;
}
}
for(;i<len2;i++)
{
if(month==a1[i])
{
return 30;
}
}
}
}
bool Cheak()
{
if(_year==0||_month==0||_month>12||_day==0||_day>Day(_year,_month))
{
return false;
}
else
{
return true;
}
}
//判断两个日期的大小
int operator >(const Date& d)
{
if(_year>d._year)
return 1;
else if(_year<d._year)
return -1;
else
{
if(_month>d._month)
return 1;
else if(_month<d._month)
return -1;
else
{
if(_day>d._day)
return 1;
else if(_day<d._day)
return -1;
else
return 0;
}
}
}
//闰年天数
size_t YearNum(size_t year)
{
if((year%4==0)&&(year%100!=0)||(year%400==0))
return 366;
else
return 365;
}
//相减后返回值
size_t subtract(Date d1,Date d2)
{
int sub=0;
size_t i=d2._month;
if(d1._day>d2._day)
sub=d1._day-d2._day;
else
{
sub=d1._day+Day(d1._year,d1._month-1)-d2._day;
if(d1._month==1)
{
d1._month=12;
d1._year--;
}
else
{
d1._month--;
}
sub=d1._day+Day(d1._year,d1._month)-d2._day;
}
if(d1._month<d2._month)
{
d1._year--;
}
while(i!=d1._month)
{
sub+=Day(d2._year,i);
if(i==12)
{
i=0;
}
i++;
}
for(i=d2._year;i<d1._year;i++)
{
sub+=(d1._year-d2._year)*YearNum(i);
}
return sub;
}
//两个日期相差多少天
size_t operator-(const Date& d)
{
Date x1=*this;
Date x2=d;
if((x1>x2)==0)
return 0;
else if((x1>x2)==1)
{
return subtract(x1,x2);
}
else
{
return subtract(x2,x1);
}
}
//日期加X天后的日期
Date NewDate(size_t num)
{
if(_day+num<=Day(_year,_month))
_day+=num;
else
{
while(_day>Day(_year,_month))
{
_day=num-Day(_year,_month)-_day;
if(_month==12)
{
_month=1;
_year--;
}
else
_month++;
}
}
}
private:
size_t _year;
size_t _month;
size_t _day;
};
int main()
{
Date d(2012,2,35);
d.Display();
system("pause");
return 0;
}
转载于:https://blog.51cto.com/10707460/1754049