常见的错误做法!!!
比如获取相差月:使用Period.between(date1,date2).getMonth()
LocalDate date1 = LocalDate.of(2022,2,10); LocalDate date2 = LocalDate.of(2022,3,8); LocalDate date3 = LocalDate.of(2022,1,20); LocalDate date4 = LocalDate.of(2020,1,20); System.out.println(Period.between(date1, date2).getMonths()); System.out.println(Period.between(date3, date1).getMonths()); System.out.println(Period.between(date4, date1).getMonths());
输出值:0 0 0
,显然不是我们想要的。
正确做法
LocalDate date1 = LocalDate.of(2022, 2, 10); LocalDate date2 = LocalDate.of(2020, 1, 20); //年差 int years = date1.getYear() - date2.getYear(); //月差 int months = years * 12 + (date1.getMonthValue() - date2.getMonthValue()); //天差 long days = date1.toEpochDay() - date2.toEpochDay(); System.out.println(years); System.out.println(months); System.out.println(days);
startDate.until(endDate, ChronoUnit.DAYS))
示例1:这是获取两个指定日期天数间隔的逻辑
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate oneDay= LocalDate.parse("2022-07-23", dateTimeFormatter); LocalDate twoDay= LocalDate.parse("2022-06-23", dateTimeFormatter); long until = twoDay.until(oneDay, ChronoUnit.DAYS); System.out.println(until); //得到的结果是30
示例2:这是获取一个指定日期和当前时间天数间隔的逻辑
LocalDate now = LocalDate.now(); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate oneDay= LocalDate.parse("2022-06-23", dateTimeFormatter); long until = oneDay.until(now, ChronoUnit.DAYS); System.out.println(until);
JDK 8 如何通过 LocalDate 计算两个日期相差的天数
JDK 8 提供了新的日期类 LocalDate
,通过 LocalDate
可以轻松的对日期进行操作,在实际的开发过程中也会经常需要计算两个日期相差的天数。
一个简单的示例:
// 指定转换格式 DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate startDate = LocalDate.parse("2019-03-01",fmt); LocalDate endDate = LocalDate.parse("2020-04-02",fmt); System.out.println("总相差的天数:" + startDate.until(endDate, ChronoUnit.DAYS)); System.out.println("总相差的月数:" + startDate.until(endDate, ChronoUnit.MONTHS)); System.out.println("总相差的年数:" + startDate.until(endDate, ChronoUnit.YEARS));
输出结果:
总相差的天数:398 总相差的月数:13 总相差的年数:1
【拓展】
使用 LocalDate
自带的 until()
方法计算的是总的相差的年数、月数与天数,如果想年月日单独计算的就要使用 Period 类,比如上面的 2019-03-01
与 2020-04-02
的日期差为: 1 年 1 个月 1 天
,相关代码如下:
//指定转换格式 DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate startDate = LocalDate.parse("2019-03-01", fmt); LocalDate endDate = LocalDate.parse("2020-04-02", fmt); Period period = Period.between(startDate, endDate); System.out.println("相差:"+period.getYears() + " 年 " + period.getMonths() + " 个月 " + period.getDays() + " 天");
输出结果:
相差:1 年 1 个月 1 天
【注意】
在实际的使用中要区分要这两种情况,否则将会出现问题。