搜档网
当前位置:搜档网 › 日期计算

日期计算

#include #include #include using namespace std; class date { protected: int year,month,day; public: date(int y=2000,int m=1,int d=1); int isLeapYear(); date rihe(int n); friend int richa(date & d1,date & d2); friend int cal_day(int n); friend int cal_month(int n); friend ostream & operator<<(ostream & o,const date & d); }; date::date(int y,int m,int d) { year=y;month=m;day=d; } //构造函数 int date::isLeapYear() { if(year%4==0 || year%400==0) { return 1; } else { return 0; } } //判断一个年份是否为闰年,是就返回1,不是就返回0
date date::rihe(int n) { int m,sum1; m=n/365; n=n-365*m; for(int i=year;i<=year+m;i++) { if(i%4==0 || i%400==0) { n--; } } if(isLeapYear() && month>2) { n++; } sum1=cal_day(month-1)+day; if(n<(365-sum1)) { month=cal_month(sum1+n); day=sum1+n-cal_day(month-1); } else { m++; n=n-(365-sum1); month=cal_month(n); day=n-cal_day(month-1); } return date(year+m,month,day); } //原来日期加上n天得到新的日期 int richa(date & d1,date & d2) { int sum=0,sum1,sum2;
for(int i=d1.year;i<=d2.year;i++) { if(i%4==0 || i%400==0) { sum++; } } if(d1.isLeapYear() && d1.month>2) { sum--; } if( d2.isLeapYear() && d2.month<3) { sum--; } sum1=365-(d1.day+cal_day(d1.month-1)); sum2=d2.day+cal_day(d2.month-1); sum=sum+sum1+sum2+(d2.year-d1.year-1)*365; return sum; } //计算两个日期的差 int cal_day(int n) { int sum=0; if(n==1){sum=31;} else if(n==2){sum=59;} else if(n==3){sum=90;} else if(n==4){sum=120;} else if(n==5){sum=151;} else if(n==6){sum=181;} else if(n==7){sum=212;} else if(n==8){sum=243;} else if(n==9){sum=273;} else if(n==10){sum=304;} else if(n==11){sum=334;}

else{sum=365;} return sum; } //判断一年的前n个月的日期总和,不分闰年与非闰年 int cal_month(int n) { int m=0; if(n>0 && n<=31){m=1;} else if(n>=32 && n<=59){m=2;} else if(n>=60 && n<=90){m=3;} else if(n>=91 && n<=120){m=4;} else if(n>=121 && n<=151){m=5;} else if(n>=152 && n<=181){m=6;} else if(n>=182 && n<=212){m=7;} else if(n>=213 && n<=243){m=8;} else if(n>=244 && n<=273){m=9;} else if(n>=274 && n<=304){m=10;} else if(n>=305 && n<=334){m=11;} else{m=12;} return m; } //判断一年的前n天在哪个月,不分闰年与非闰年 ostream & operator<<(ostream & o,const date & d)//常引用 { o<

endl; return; } void wdate::show_time() { cout<d1.show_date_and_time(); d2.show_date_and_time(); cout<

相关主题