请你编写一个程序来计算两个日期之间隔了多少天。
日期以字符串形式给出,格式为 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;
}