我正在尝试确定两组日期重叠的时间(以秒为单位)。如果日期不重叠,则我的方法将返回0。
@Test
public void calculateOverlapInSeconds() {
LocalDateTime now = LocalDateTime.now();
// Larger window of time
LocalDateTime startTime1 = now.minusSeconds(15);
LocalDateTime endTime1 = now.plusSeconds(15);
// Smaller window of time
LocalDateTime startTime2 = now.minusSeconds(5);
LocalDateTime endTime2 = now.plusSeconds(5);
long i = getOverlapInSeconds(startTime2, endTime2, startTime1, endTime1);
Assert.assertEquals(i, 10);
}
我试图关注这篇文章:https://wmfexcel.com/2014/10/25/how-to-calculate-number-of-overlapping-days-for-two-periods/
public long getDifferenceInSeconds(LocalDateTime startTime2, LocalDateTime endTime2, LocalDateTime startTime1, LocalDateTime endTime1) {
LocalDateTime minStartTime = (startTime2.isBefore(startTime1) ? startTime2 : startTime1);
LocalDateTime minEndTime = (endTime2.isBefore(endTime1) ? endTime2 : endTime1);
long seconds = minStartTime.until(minEndTime, ChronoUnit.SECONDS);
return seconds > 0 ? seconds : 0;
}
这当前不起作用。如何计算两个日期集之间以秒为单位的时间重叠?
更新后的工作代码:
public long getDifferenceInSeconds(LocalDateTime startTime2, LocalDateTime endTime2, LocalDateTime startTime1, LocalDateTime endTime1) {
LocalDateTime maxStartTime =
startTime2.isAfter(startTime1) ? startTime2 : startTime1;
LocalDateTime minEndTime = (endTime2.isBefore(endTime1) ? endTime2 : endTime1);
long seconds = maxStartTime.until(minEndTime, ChronoUnit.SECONDS);
return seconds > 0 ? seconds : 0;
}
答案 0 :(得分:2)
在getDifferenceInSeconds
中添加代码会获得最早的开始时间,但是您想使用最新的开始时间。您可以更改以下内容:
LocalDateTime minStartTime =
(startTime2.isBefore(startTime1) ? startTime2 : startTime1);
收件人:
LocalDateTime maxStartTime =
startTime2.isAfter(startTime1) ? startTime2 : startTime1;