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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
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<int diff(CDate);
int compare(CDate dt){
if(year>dt.year) return 1;
if(yearif(month>dt.month) return 1;
if(monthif(day>dt.day) return 1;
if(day>dt.day) return -1;
return 0;
}

};

int main()
{
CDate date1,date2;
date1.input();
date2.input();
cout<<"给定的两个日期是:"<date1.output(); cout<date2.output(); cout<int span=date1.diff(date2);
cout<<"两个日期的间隔天数:"<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 (0former=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=pare(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;
}

相关文档
最新文档