主要实现两个日期相差多少天、一个日期加上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; }
本文出自 “sunshine225” 博客,请务必保留此出处http://10707460.blog.51cto.com/10697460/1754049
原文:http://10707460.blog.51cto.com/10697460/1754049