2 个瞬间之间的 Java 年

问题描述 投票:0回答:1

在 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)
        ...
java datetime java-8 date-difference java.time.instant
1个回答
14
投票

两个瞬间之间的年数被认为是 未定义,但您可以将瞬间转换为

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
通常是一个合理的选择,否则,如果有一个时区在您的上下文中更有意义(例如,将看到结果的用户的时区),您会想要使用它。

© www.soinside.com 2019 - 2024. All rights reserved.