【问题标题】:Java Years between 2 Instants2 个瞬间之间的 Java 年
【发布时间】:2017-11-15 04:52:47
【问题描述】:

在 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】:

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

【讨论】:

    猜你喜欢
    • 2018-12-25
    • 2022-10-07
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2011-08-11
    • 2019-11-11
    相关资源
    最近更新 更多