1360. 日期之间隔几天

请你编写一个程序来计算两个日期之间隔了多少天。

日期以字符串形式给出,格式为 YYYY-MM-DD,如示例所示。

 

示例 1:

输入:date1 = "2019-06-29", date2 = "2019-06-30"
输出:1

示例 2:

输入:date1 = "2020-01-15", date2 = "2019-12-31"
输出:15

 

提示:

  • 给定的日期是 1971 年到 2100 年之间的有效日期。

 

#include<iostream>
#include<algorithm>
using namespace std;

class Solution {
public:
    int year(char a,char b,char c,char d){
        int aa = a-'0',bb=b-'0',cc=c-'0',dd=d-'0';
        return aa*1000+bb*100+cc*10+dd;
    }
    int monthOrDay(char a,char b){
        int aa=a-'0',bb=b-'0';
        return aa*10+bb;
    }
    bool is(int year){
        if((year % 4==0&&year%100!=0)||year%400==0){
            return true;
        }return false;
    }
    int Sum(int year ,int month ,int day){
        int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
        int sum=0;
        for(int i=0;i<year;i++){
            if(is(i)){
                sum+=366;
            }else{
                sum+=365;
            }
        }
        for(int i=1;i<month;i++){
            sum+=m[i];
        }
        sum+=day;
        if(is(year)&&month>2){
            sum+=1;
        }
        return sum;
    }
    int daysBetweenDates(string date1, string date2) {
        int year1 = year(date1[0], date1[1], date1[2], date1[3]);
        int year2 = year(date2[0], date2[1], date2[2], date2[3]);
        int month1 = monthOrDay(date1[5], date1[6]);
        int month2 = monthOrDay(date2[5], date2[6]);
        int day1 = monthOrDay(date1[8], date1[9]);
        int day2 = monthOrDay(date2[8], date2[9]);
        int sum1 = Sum(year1, month1, day1);
        int sum2 = Sum(year2, month2, day2);
        return max(sum1,sum2)-min(sum1,sum2);
    }
};
int main(){
    freopen("D:\\YJ.txt","r",stdin);
    string date1,date2;
    cin>>date1>>date2;
    Solution solution;
    int days =  solution.daysBetweenDates(date1, date2);
    cout<<days;
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值