存储两个本地日期时间值之间的差异



我正在尝试保存两个LocalDateTimes之间的差异。所以实际上,我正在寻找一个像 Period 这样的类,它允许我将日期保存为时间(因为 Period 只允许我保存日期)。

什么班级会让我这样做?

正确的方法是按时间单位分解差异,如本答案所示。


另一种选择是将日期差异保存在时间段内,将时差保存在持续时间中,但在某些情况下,这可能会导致负单位:

LocalDateTime now = LocalDateTime.now();
LocalDateTime before = now.minusMonths(1).minusDays(5).minusHours(2).minusMinutes(30);
Period p = Period.between(before.toLocalDate(), now.toLocalDate());
Duration d = Duration.between(before.toLocalTime(), now.toLocalTime());
System.out.println(p + " + " + d);

输出:P1M5D + PT2H30M

极端情况:如果before = now.minusMonths(1).plusDays(1).plusMinutes(30);,持续时间为负 30 分钟。这不容易解决,因为做一个直观的:

if (d.isNegative()) {
  p = p.minusDays(1);
  d = d.plusDays(1);
}

在其他情况下可以返回负天数。

我认为您应该在 millis 中转换它们,然后进行减法。

LocalDateTime a, b;
long timeInMillis = Math.abs(a.toDateTime().getMillis() - b.toDateTime().getMillis());

然后,您将以毫秒为单位获得周期。

 @Test
    public void durationTest(){
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime nowMinus5s = now.minusSeconds(5);
        assertThat(Duration.between(now, nowMinus5s).getSeconds()).isEqualTo(-5);
    }

相关内容

  • 没有找到相关文章

最新更新