计算两个时间之间相差几天、月、年
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类
业精于勤,大家加油鸭

浙公网安备 33010602011771号