存储两个 LocalDateTime 值之间的差异

Storing difference between two LocalDateTime values

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

什么 class 让我这样做?

我认为你应该将它们都转换为毫秒然后进行减法。

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);
    }

正确的方法是按时间单位分解差异,如this answer


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

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);
}

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