题目描述
请你编写一个程序来计算两个日期之间隔了多少天。
日期以字符串形式给出,格式为 YYYY-MM-DD,如示例所示。
输入格式
字符串。
输出格式
字符串。
输入/输出样例
输入1
"2020-02-15", "2019-12-31"
输出1
46
说明/提示
给定的日期是 1980 年到 2100 年之间的有效日期
//代码如下:
/*
解析日期
计算从固定日期出发的时间1980 1 1
*/
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#define leap(year) (year%4==0&&year%100!=0)||(year%400==0)
using namespace std;
int data[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int caclulate(int YYYY,int MM,int DD){
//计算到达固定日期的天数
int res=0;
int sumyear=0;
//计算整年的天数
for(int i=1;i<=12;i++){
sumyear+=data[i];}
//处理年数
for(int i=1980;i<YYYY;i++){
if(leap(i))
res+=(sumyear+1);
else
res+=sumyear;}
//处理月数
for(int i=1;i<MM;i++){
res+=data[i];
}
//处理天数
for(int i=1;i<=DD;i++){
res+=1;
}
//处理闰年
if((leap(YYYY))&&MM>2)res++;
return res;
}
//解析字符串
vector<int> produce(char *str){
char *token=strtok(str,"-");
//分割字符串函数
vector<int> num;
while(token){
num.push_back(stoi(token));
token=strtok(NULL,"-");}
return num;
}
int main(){
int temp[2];
int i=0;
while(1){
char riqi[11];
if(scanf("%s",riqi)!=1)
break;
vector<int> num=produce(riqi);
temp[i++]=caclulate(num[0],num[1],num[2]);
}
cout<<abs(temp[1]-temp[0])<<endl;
return 0;
}