c++实现计算两个日期相差的天数

本文介绍了C++函数isreasonabe用于判断日期合理性,isleapyear检测闰年,以及countday函数计算两个日期之间的总天数,包括闰年的特殊处理。
摘要由CSDN通过智能技术生成

#include<iostream>
using namespace std;
bool isreasonabe(int fy,int fm,int fd,int sy,int sm,int sd){
    if(fy<sy)
    return false;
    if(fy==sy){
        if(fm<sm)
        return false;
        if(fm==sm){
            if(fd<sd)
            return false;
        }
    }
    return true;
}
bool isleapyear(int x){
    if((x%4==0&&x%100!=0)||(x%400==0))
    return true;
    else
    return false; 
}
int countday(int sy,int sm,int sd,int ey,int em,int ed){
    int sum=0;
    int yeardays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    if(ey-sy==0){
        if(isleapyear(ey))
        yeardays[2]=29;
        for(int i=sm;i<em;i++){
            if(i==sm)
            sum=yeardays[i]-sd;
            else 
            sum+=yeardays[i];
        }
        sum+=ed;
        if(sm==em&&sum==0)
        sum=ed-sd;
    }else{
        for(int i=sy;i<ey;i++){
            if(isleapyear(i))
            sum+=366;
            else
            sum+=365;
        }
        if(isleapyear(sy))
        yeardays[2]=29;
        for(int i=1;i<sm;i++){
        sum-=yeardays[i];
    }
        sum-=sd;
        if(isleapyear(ey))
        yeardays[2]=29;
        else
        yeardays[2]=28;
        for(int i=1;i<em;i++){
        sum=sum+yeardays[i];
    }
    sum+=ed;
    }
    return sum; 
}

int main(){
    int fy,fm,fd,sy,sm,sd;
    while(cin>>fy>>fm>>fd>>sy>>sm>>sd){
    if(isreasonabe(fy,fm,fd,sy,sm,sd)){
        cout<<countday(sy,sm,sd,fy,fm,fd)<<endl; 
    }else
    cout<<-1*countday(fy,fm,fd,sy,sm,sd)<<endl;
}
}
 

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值