PHP笔记网

革命尚未成功,同志仍须努力下载JDK17

作者:Albert.Wen  添加时间:2023-07-01 00:49:00  修改时间:2024-12-02 21:14:57  分类:07.Java基础  编辑

常见的错误做法!!!

比如获取相差月:使用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 天

【注意】

在实际的使用中要区分要这两种情况,否则将会出现问题。