我有两个约会:
LocalDate date1 = LocalDate.now().minusDays(40);
LocalDate date2 = LocalDate.now();
我想弄清楚我可以选择的最大的时间单位是什么来定义2之间的差异(天、月、年),并得到它的数字。对我来说,我认为完美的解决方案是,如果java.time
api的Duration
也有toMonthsPart
和toYearsPart
,因为它有toDaysPart
。我可以这样做:
Duration dif = Duration.between(date1, date2);
long daysPart = dif.toDaysPart();
if (daysPart > 0) {
return ChronoUnit.DAYS.between(date1, date2);
}
long monthPart = dif.getMonthsPart();
if (monthPart > 0) {
return ChronoUnit.MONTHS.between(date1, date2);
}
long yearPart = dif.getYearsPart();
if (yearPart > 0) {
return ChronoUnit.YEARS.between(date1, date2);
}
throw new Exception("no difference");
但是在API中没有这样的方法。是否有其他包可以提供此功能,或者您是否知道实现我的目标的其他方法?
TL;DR
用Period
代替Duration
。
:
import java.time.LocalDate;
import java.time.Period;
class Main {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate fortyDaysAgo = today.minusDays(40);
Period period = Period.between(fortyDaysAgo, today);
System.out.println(period);
System.out.printf("%d year(s) %d month(s) %d day(s)%n", period.getYears(), period.getMonths(),
period.getDays());
}
}
示例运行的输出:
P1M9D
0 year(s) 1 month(s) 9 day(s)
<<p>在线演示/kbd>从Trail: Date Time了解更多关于现代Date-Time API的信息.