我正在尝试保存两个LocalDateTimes之间的差异。所以实际上,我正在寻找像Period这样的课程,它允许我将日期保存为时间(因为Period只允许我保存日期)。
什么课可以让我这样做?
答案 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);
}