在Joda,我们可以使用
计算2个日期时间之间的年份Years.between(dateTime1, dateTime2);
有没有简单的方法可以使用java.time
API在2个时刻之间找到年份而不需要太多逻辑?
ChronoUnit.YEARS.between(instant1, instant2)
失败:
Exception in thread "main" java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Years
at java.time.Instant.until(Instant.java:1157)
at java.time.temporal.ChronoUnit.between(ChronoUnit.java:272)
...
答案 0 :(得分:8)
两个时刻之间的年数被视为undefined(显然 - 我对此感到惊讶),但您可以轻松地将时刻转换为ZonedDateTime
并获得有用的结果:
Instant now = Instant.now();
Instant ago = Instant.ofEpochSecond(1234567890L);
System.out.println(ChronoUnit.YEARS.between(
ago.atZone(ZoneId.systemDefault()),
now.atZone(ZoneId.systemDefault())));
打印:
8
我怀疑你不能直接比较时刻的原因是因为年份边界的位置取决于时区。这意味着ZoneId.systemDefault()
可能不是您想要的! ZoneOffset.UTC
是一个合理的选择,否则如果在您的上下文中有一个更有意义的时区(例如,将会看到结果的用户的时区),您就会想要使用它。