我正在尝试保存两个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);
}