存储两个LocalDateTime值之间的差异

时间:2015-06-13 13:26:28

标签: java datetime java-8 java-time

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

什么课可以让我这样做?

3 个答案:

答案 0 :(得分:1)

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

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

然后,您将获得以毫秒为单位的时间段。

答案 1 :(得分:1)

正确的方法是按时间单位分解差异,例如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);
}

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

答案 2 :(得分:0)

 @Test
    public void durationTest(){
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime nowMinus5s = now.minusSeconds(5);

        assertThat(Duration.between(now, nowMinus5s).getSeconds()).isEqualTo(-5);
    }