1. 程式人生 > 其它 >計算兩個時間之間相差幾天、月、年

計算兩個時間之間相差幾天、月、年

ChronoUnit類
//獲取當前時間(2021-06-22)
        LocalDate today = LocalDate.now();
        //將String轉LocalDateTime
        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate collectTimeDate = LocalDate.parse("2021-05-01",df);
        //判斷相差多少天
        log.info("ChronoUnit====相差{}年,相差{}月,相差{}天",
                ChronoUnit.YEARS.between(collectTimeDate,today),
                ChronoUnit.MONTHS.between(collectTimeDate,today),
                ChronoUnit.DAYS.between(collectTimeDate,today));

注意:若呼叫獲取時、分、秒、半天方法皆報錯

結果:

//獲取當前時間(2021-06-22 17:27:03)
        LocalDateTime today = LocalDateTime.now();
        //將String轉LocalDateTime
        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime collectTimeDate = LocalDateTime.parse("2021-05-01 16:40:23",df);
        
//判斷相差多少天 log.info("ChronoUnit====相差{}年,相差{}月,相差{}天", ChronoUnit.YEARS.between(collectTimeDate,today), ChronoUnit.MONTHS.between(collectTimeDate,today), ChronoUnit.DAYS.between(collectTimeDate,today)); log.info("ChronoUnit====相差{}小時,相差{}分鐘,相差{}秒", ChronoUnit.HOURS.between(collectTimeDate,today), ChronoUnit.MINUTES.between(collectTimeDate,today), ChronoUnit.SECONDS.between(collectTimeDate,today)); log.info(
"ChronoUnit====相差{}半天",ChronoUnit.HALF_DAYS.between(collectTimeDate,today));

結果:

Period類

//獲取當前時間(2021-06-22)
        LocalDate todayDate = LocalDate.now();
        //將String轉LocalDateTime
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate lastDate = LocalDate.parse("2021-05-01",dtf);
        //判斷相差多少天
        log.info("Period====相差{}年,相差{}月,相差{}天",
                Period.between(lastDate,todayDate).getYears(),
                Period.between(lastDate,todayDate).getMonths(),
                Period.between(lastDate,todayDate).getDays());

注意:Period.between方法只接收LocalDate型別的傳參

結果:

從結果中可看到,兩個時間本是相差52天,但此處只顯示相差21天;因為此處只用兩者的日相減,不管年份和月份

Duration類

//獲取當前時間(2021-06-22 17:27:03)
        LocalDateTime currentDate = LocalDateTime.now();
        //將String轉LocalDateTime
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime date = LocalDateTime.parse("2021-05-01 16:40:23",formatter);

        log.info("Duration====相差{}天,相差{}小時,相差{}分鐘",
                Duration.between(date,currentDate).toDays(),
                Duration.between(date,currentDate).toHours(),
                Duration.between(date,currentDate).toMinutes());

結果:

以下這種會報錯:

//獲取當前時間(2021-06-22)
        LocalDate currentDate = LocalDate.now();
        //將String轉LocalDate
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate date = LocalDate.parse("2021-05-01",formatter);
        //判斷相差多少天
        log.info("Duration====相差{}天", Duration.between(date,currentDate).toDays());

結果:

綜上,推薦使用ChronoUnit類