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

我试图确定两组日期重叠的秒数。如果日期不重叠,我的方法将返回 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;

}

这目前不起作用。如何计算 2 个日期集之间的时间重叠(以秒为单位)?


更新的工作代码:


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;

}


GCT1015
浏览 361回答 1
1回答

噜噜哒

那么你里面的代码getDifferenceInSeconds得到最早的开始时间,但你想使用最晚的开始时间。您可以更改以下内容:LocalDateTime minStartTime =       (startTime2.isBefore(startTime1) ? startTime2 : startTime1);至:LocalDateTime maxStartTime =       startTime2.isAfter(startTime1) ? startTime2 : startTime1;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java