JAVA中如何计算两个日期相差天数
JavaApi文档中有:Date,Calendar,这些在之前的版本中就有,在JAVA8之后,引入java.time包,解决了原Date,Calendar存在的一些问题。
文章共555字 · 阅读需要大约2分钟
一键AI生成摘要,助你高效阅读
问答
·
最近在工作中遇见一个小需求,要求计算两个日期之间相差几天,翻了翻API文档,发现没有直接可以用到的方法,因此通过梳理得到以下几中方法。
JavaApi文档中有:Date,Calendar,这些在之前的版本中就有,在JAVA8之后,引入java.time包,解决了原Date,Calendar存在的一些问题。
毫秒值计算:
通过两个日期相差的毫秒数计算,一天的毫秒数 24 * 60 * 60 * 1000。
long now = new Date().getTime();
long old = new SimpleDateFormat("yyyyMMdd").parse("20230101").getTime();
long betweenDays = (now - old)/24/60/60/ 1000;
System.out.println(betweenDays);
这样计算固然简单,但遇到一些精度要求高的就会出现精度问题。
Period类:
在Period类中,between用于计算两日期之间相差的天数,月数,年数。
public static Period between(LocalDate startDateInclusive,
LocalDate endDateExclusive)
获得一个Period ,包括两个日期之间的年数,月份和日期
但我们想要的是获取两个日期之间的天数,因此使用这个方法的局限性就在于两个日期必须是同年同月。
Period between = Period.between(LocalDate.of(2022, 6, 1),
LocalDate.of(2023, 7, 30));
System.out.println("years:"+between.getYears());
System.out.println("months:"+between.getMonths());
System.out.println("days:"+between.getDays());
但这个方法的好处是可以很明确的看到两个日期相差的年月日,缺点就是不能获取直接的天数。那么有没有之间计算两个日期相差天数的工具类?
ChronoUnit类:
ChronoUnit类中有个方法,可以直接计算两个日期相差的天数。
LocalDate beginDate = LocalDate.of(2023, 1, 1);
LocalDate nowDate = LocalDate.of(2023, 12, 31);
long betweenDays = ChronoUnit.DAYS.between(beginDate, nowDate);
System.out.println(betweenDays);
一般情况下我们用的是Date,要用上述方法需要将Date转为LocalDate。
LocalDate localDate =
new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
这样就可依靠JAVA原生的API计算两日期之间相差的天数,没有跨年跨月的限制。
更多推荐
已为社区贡献1条内容
所有评论(0)