LocalDateTime设置以秒为单位计算重叠

时间:2018-08-11 18:58:33

标签: java algorithm

我正在尝试确定两组日期重叠的时间(以秒为单位)。如果日期不重叠,则我的方法将返回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;
}

1 个答案:

答案 0 :(得分:2)

getDifferenceInSeconds中添加代码会获得最早的开始时间,但是您想使用最新的开始时间。您可以更改以下内容:

LocalDateTime minStartTime = 
     (startTime2.isBefore(startTime1) ? startTime2 : startTime1);

收件人:

LocalDateTime maxStartTime = 
     startTime2.isAfter(startTime1) ? startTime2 : startTime1;