日期之間隔幾天

第一種方法,使用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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容