请你编写一个程序来计算两个日期之间隔了多少天。
日期以字符串形式给出,格式为 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 年之间的有效日期。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-days-between-two-dates
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
判断两个日期之间相隔天数
转成天,就是 365*年+闰年数+当年的天数
int isleap(int y){
return y%4==0 && y%100!=0 || y%400==0;
}
int tab[]={-1,31,28,31,30,31,30,31,31,30,31,30,31};
int getdate1(char *date){
int y,m,d,r=0;
sscanf(date, "%d-%d-%d", &y,&m,&d);
for(int i=1970; i<y;i++)
if(isleap(i)) r+= 366;
else r+= 365;
for(int i=1;i<m;i++){
r+=tab[i];
if(i==2 && isleap(y)) r+=1;
}
r+=d;
return r;
}
#define intfabs(x) ((x)<0?-(x):(x))
int daysBetweenDates(char * date1, char * date2){
return intfabs(getdate1(date1)-getdate1(date2) );
}
作者:ni-jin-tian-zhen-hao-kan-2
链接:https://leetcode-cn.com/problems/number-of-days-between-two-dates/solution/fen-bie-ji-suan-liang-ri-qi-xiang-dui-yu-1970nian-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Solution {
public:
int day_diff(int year_start, int month_start, int day_start
, int year_end, int month_end, int day_end)
{
int y2, m2, d2;
int y1, m1, d1;
m1 = (month_start + 9) % 12;
y1 = year_start - m1/10;
d1 = 365*y1 + y1/4 - y1/100 + y1/400 + (m1*306 + 5)/10 + (day_start - 1);
m2 = (month_end + 9) % 12;
y2 = year_end - m2/10;
d2 = 365*y2 + y2/4 - y2/100 + y2/400 + (m2*306 + 5)/10 + (day_end - 1);
return (d2 - d1);
}
int daysBetweenDates(string date1, string date2) {
int y1,y2,m1,m2,d1,d2;
y1=stoi(date1.substr(0,4));
y2=stoi(date2.substr(0,4));
m1=stoi(date1.substr(5,2));
m2=stoi(date2.substr(5,2));
d1=stoi(date1.substr(8,2));
d2=stoi(date2.substr(8,2));
return abs(day_diff(y1,m1,d1,y2,m2,d2));
}
};
这道题梳理清楚之后无所谓啦。
主要是第二种这个比较巧妙。