为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

GCT1015 2021-06-28 12:52:16
我试图确定两组日期重叠的秒数。如果日期不重叠,我的方法将返回 0。@Testpublic 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;}
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

那么你里面的代码getDifferenceInSeconds得到最早的开始时间,但你想使用最晚的开始时间。您可以更改以下内容:

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

至:

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


查看完整回答
反对 回复 2021-07-14
  • 1 回答
  • 0 关注
  • 353 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信