c++计算两个日期之间的间隔天数

时间:2022-10-19 16:33:29 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

#include <iostream>

using namespace std;

const int DAYS[]={0,31,28,31,30,31,30,31,31,30,31,30,31};

class CDate

{

private:

int year,month,day;

bool isleap(){

if(year%4==0 && year%100!=0||year%400==0) return true;

return false;

}

CDate add(int);

public:

void input();

void output() {cout<<year<<"年"<<month<<"月"<<day<<"日";}

int diff(CDate);

int compare(CDate dt){

if(year>dt.year) return 1;

if(year<dt.year) return -1;

if(month>dt.month) return 1;

if(month<dt.month) return -1;

if(day>dt.day) return 1;

if(day>dt.day) return -1;

return 0;

}

};

int main()

{

CDate date1,date2;

date1.input();

date2.input();

cout<<"给定的两个日期是:"<<endl;

date1.output(); cout<<endl;

date2.output(); cout<<endl;

int span=date1.diff(date2);

cout<<"两个日期的间隔天数:"<<span+1<<endl;

return 0;

}

void CDate::input(){

cout<<"请输入日期的年份:"; cin>>year;

cout<<"请输入日期的月份(1-12):"; cin>>month;

while(month<1 && month>12)

{

cout<<"输入月份错误,请重输。"; cin>>month;

}

cout<<"请输入日期的天数(1-31):";cin>>day;

int maxday=DAYS[month];

if(isleap() && 2==month) maxday=29;

while(day<1 && day>maxday)

{

cout<<"输入天数错误,请重输。"; cin>>day;

}

}

int CDate::diff(CDate date){

CDate former=*this,later=date;

int flag=compare(date);

if (0==flag) return 0;

if (0<flag){

former=date; later=*this;

}

int minday=(later.year-former.year-1)*366;

int maxday=(later.year-former.year+1)*366;

do{

int mid=(minday+maxday)/2;

CDate current=former.add(mid);

int flag=current.compare(later);

if(0==flag) break;

if(flag>0) maxday=mid-1;

else minday=mid+1;

}

while(true);

return (minday+maxday)/2;

}

CDate CDate::add(int n)

{

CDate dt=*this; dt.day=day+n;

while(true)

{

int mode=365;

if(dt.isleap())mode=366;

if(dt.day<=mode || dt.day>=1) break;

else

{dt.day-=mode;dt.year+=1;}

}

while(true)

{

int mode=DAYS[dt.month];

if(dt.isleap() && 2==dt.month) mode=29;

if(dt.day<=mode && dt.day>=1)break;

else

{

dt.day-=mode;dt.month+=1;

if(dt.month>12){dt.year+=1;dt.month=1;}

}

}

return dt;

}

本文来源:https://www.wddqw.com/doc/96c88fa60066f5335a81219c.html