admin管理员组文章数量:1595878
记录一线上问题,编辑会员卡信息,有效期截止时间由2022-04-17修改为2023-04-18,操作成功之后显示剩余的有效天数为24天,实际上怎么也得有三百多天.之前本地测试一直没有问题,现将定位过程记录一下.
本地复测之后发现计算的是24天,果然有问题.
Period period = Period.between(LocalDate.now(), LocalDate.parse("2023-03-14",DateTimeFormatter.ofPattern(DateTimeUtil.PATTERN_THREE)));
System.out.println(String.valueOf(period.getDays()));
// 输出获取间隔日天数为24
看一下实现的源码发现问题所在,确实还是用之前没有了解清楚api的用法.Period.between(LocalDate startDateInclusive, LocalDate endDateExclusive)
最终调用的是LocalDate.java中until(ChronoLocalDate endDateExclusive)
,源码如下:
Period.between计算两个日期间隔是按照年月日来计算,可以理解为2023-03-14和2022-04-18差0年,10个月,24天;故此处天数非换算后的天数。
可以使用LocalDate.java中until(Temporal endExclusive, TemporalUnit unit)
进行替换
LocalDate nowLocalDate = LocalDate.now();
LocalDate localDate = LocalDate.of(2023, 03, 14);
long until = nowLocalDate.until(localDate, ChronoUnit.DAYS);
System.out.println(until ); //获取间隔的天数为330
总结:时间计算间隔可以使用LocalDate中until的两个方法进行处理。
Period until(ChronoLocalDate endDateExclusive);
long until(Temporal endExclusive, TemporalUnit unit)
前者支持年月日同一维度同时统计(相差几年几个月几天);后者支持指定单位(按年或按月或按天)分别统计,后者更加灵活。
简单记录一下,希望对遇到这种问题的同学有所帮助,欢迎评论区留言点赞!
版权声明:本文标题:jdk8时间间隔计算Period.between与LocalDate.until区别 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728236765a1150509.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论