日期类的运算

主要实现两个日期相差多少天、一个日期加上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;
}


你可能感兴趣的:(public)