代码之家  ›  专栏  ›  技术社区  ›  Sixthpoint

LocalDateTime集计算重叠(秒)

  •  1
  • Sixthpoint  · 技术社区  · 6 年前

    我试图确定两组日期重叠的时间(秒)。如果日期不重叠,我的方法将返回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 回复  |  直到 6 年前
        1
  •  2
  •   ernest_k Petronella    6 年前

    你的代码在里面 getDifferenceInSeconds 获取最早的开始时间,但要使用最新的开始时间。您可以更改以下内容:

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

    致:

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