第一種方法,使用jdk的localdate,效率比較低
public int daysBetweenDates(String date1, String date2) throws Exception {
LocalDate localDate1 = LocalDate.parse(date1, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LocalDate localDate2 = LocalDate.parse(date2, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
return Math.abs((int) (localDate1.toEpochDay() - localDate2.toEpochDay()));
}
效率如下

image.png
第二種方法看到領(lǐng)扣大佬寫的
class Solution {
public static int daysBetweenDates(String date1, String date2) {
String max = getMaxDate(date1, date2);
String min = max.equals(date1) ? date2 : date1;
int year1 = Integer.parseInt(getYear(max));
int month1 = Integer.parseInt(getMonth(max));
int day1 = Integer.parseInt(getDay(max));
int year2 = Integer.parseInt(getYear(min));
int month2 = Integer.parseInt(getMonth(min));
int day2 = Integer.parseInt(getDay(min));
int[] leapYearMonthHasDays = new int[]{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int[] notLeapYearMonthHasDays = new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int yearMinus = year1 - year2;
if (yearMinus == 0) {
if (month1 == month2) {
return day1 - day2;
}
int diffDays = day1;
for (int mon = month2 + 1; mon < month1; mon++) {
if (isLeapYear(year1)) {
diffDays += leapYearMonthHasDays[mon - 1];
} else {
diffDays += notLeapYearMonthHasDays[mon - 1];
}
}
if (isLeapYear(year2)) {
diffDays += leapYearMonthHasDays[month2 - 1] - day2;
} else {
diffDays += notLeapYearMonthHasDays[month2 - 1] - day2;
}
return diffDays;
} else {
int diffDays = day1;
for (int mon = 1; mon < month1; mon++) {
if (isLeapYear(year1)) {
diffDays += leapYearMonthHasDays[mon - 1];
} else {
diffDays += notLeapYearMonthHasDays[mon - 1];
}
}
if (isLeapYear(year2)) {
diffDays += leapYearMonthHasDays[month2 - 1] - day2;
} else {
diffDays += notLeapYearMonthHasDays[month2 - 1] - day2;
}
for (int mon = month2 + 1; mon <= 12; mon++) {
if (isLeapYear(year2)) {
diffDays += leapYearMonthHasDays[mon - 1];
} else {
diffDays += notLeapYearMonthHasDays[mon - 1];
}
}
for (int year = year2 + 1; year < year1; year++) {
if (isLeapYear(year)) {
diffDays += 366;
} else {
diffDays += 365;
}
}
return diffDays;
}
}
public static String getMaxDate(String date1, String date2) {
int year1 = Integer.parseInt(getYear(date1));
int month1 = Integer.parseInt(getMonth(date1));
int day1 = Integer.parseInt(getDay(date1));
int year2 = Integer.parseInt(getYear(date2));
int month2 = Integer.parseInt(getMonth(date2));
int day2 = Integer.parseInt(getDay(date2));
if (year1 > year2) {
return date1;
} else if (year1 == year2) {
if (month1 > month2) {
return date1;
} else if (month1 == month2) {
if (day1 > day2) {
return date1;
}
return date2;
} else {
return date2;
}
} else {
return date2;
}
}
public static boolean isLeapYear(int year) {
return year % 400 == 0 ? true : (year % 4 == 0 && year % 100 != 0 ? true : false);
}
public static String getYear(String date) {
return date.substring(0, 4);
}
public static String getMonth(String date) {
return date.substring(5, 7);
}
public static String getDay(String date) {
return date.substring(8);
}
}
效率如下

image.png