gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:38:11 25 4
gpt4 key购买 nike

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

最佳答案

getDifferenceInSeconds 中的代码获取了最早的开始时间,但您想使用最晚的开始时间。您可以更改以下内容:

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

收件人:

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

关于java - LocalDateTime 设置以秒为单位计算重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51802823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com