题目来源:
leetcode题目,网址:1360. 日期之间隔几天 - 力扣(LeetCode)
解题思路:
计算两日期与较小日期当年的1月1日间隔多少天,然后计算差值即可。
解题代码:
class Solution {
public int daysBetweenDates(String date1, String date2) {
int res=0;
if(date1.equals(date2)){
return 0;
}else if(date1.compareTo(date2)>0){
String temp=date2;
date2=date1;
date1=temp;
}
int year1=Integer.parseInt(date1.substring(0,4));
int year2=Integer.parseInt(date2.substring(0,4));
int month1=Integer.parseInt(date1.substring(5,7));
int month2=Integer.parseInt(date2.substring(5,7));
int day1=Integer.parseInt(date1.substring(8,10));
int day2=Integer.parseInt(date2.substring(8,10));
for(int i=year1;i<year2;i++){
res+=365;
if(isLunarYear(i))
res+=1;
}
res-=dayOfYear(day1,month1,year1);
res+=dayOfYear(day2,month2,year2);
return res;
}
public int dayOfYear(int day,int month,int year){
int res=0;
int[] normalMonth=new int[]{31,28,31,30,31,30,31,31,30,31,30,31};
for(int i=1;i<month;i++){
res+=normalMonth[i-1];
if(i==2 && isLunarYear(year)){
res+=1;
}
}
res+=day;
return res;
}
public boolean isLunarYear(int year){
return (year%4==0&&year%100!=0) || year%400==0;
}
}
总结:
官方题解给出两种解法。第一种是将日期转化为距离1971年1月1日的天数,然后求差值。第二种是优化解法,也是计算距离1971年1月1日的天数,但通过4年一闰,百年不闰,四百年闰这一规律直接计算因闰年多出来的天数。