可以使用Java中的LocalDateTime和Duration类来判断一个时间段是否包含另一个时间段。

假设有两个时间段A和B,其中A的起始时间为startA,结束时间为endA,B的起始时间为startB,结束时间为endB。

  1. 首先,将起始时间和结束时间转换为LocalDateTime对象。
LocalDateTime startALdt = LocalDateTime.ofInstant(startA.toInstant(), ZoneId.systemDefault());
LocalDateTime endALdt = LocalDateTime.ofInstant(endA.toInstant(), ZoneId.systemDefault());
LocalDateTime startBLdt = LocalDateTime.ofInstant(startB.toInstant(), ZoneId.systemDefault());
LocalDateTime endBLdt = LocalDateTime.ofInstant(endB.toInstant(), ZoneId.systemDefault());
  1. 然后,使用Duration类计算出时间段A和时间段B的持续时间。
Duration durationA = Duration.between(startALdt, endALdt);
Duration durationB = Duration.between(startBLdt, endBLdt);
  1. 接着,判断时间段A是否包含时间段B,可以使用Duration类的compareTo方法。
if (durationA.compareTo(durationB) >= 0 && startALdt.compareTo(startBLdt) <= 0 && endALdt.compareTo(endBLdt) >= 0) {
    System.out.println('时间段A包含时间段B');
} else {
    System.out.println('时间段A不包含时间段B');
}

这里使用compareTo方法比较时间段A和时间段B的持续时间,如果时间段A的持续时间大于等于时间段B的持续时间,并且时间段A的起始时间早于等于时间段B的起始时间,时间段A的结束时间晚于等于时间段B的结束时间,那么时间段A包含时间段B。反之,时间段A不包含时间段B。

完整代码如下:

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;

public class Test {

    public static void main(String[] args) {
        Date startA = new Date(1622606400000L); // 2021-06-02 00:00:00
        Date endA = new Date(1622692800000L); // 2021-06-03 00:00:00
        Date startB = new Date(1622653200000L); // 2021-06-02 15:00:00
        Date endB = new Date(1622671200000L); // 2021-06-02 20:00:00

        LocalDateTime startALdt = LocalDateTime.ofInstant(startA.toInstant(), ZoneId.systemDefault());
        LocalDateTime endALdt = LocalDateTime.ofInstant(endA.toInstant(), ZoneId.systemDefault());
        LocalDateTime startBLdt = LocalDateTime.ofInstant(startB.toInstant(), ZoneId.systemDefault());
        LocalDateTime endBLdt = LocalDateTime.ofInstant(endB.toInstant(), ZoneId.systemDefault());

        Duration durationA = Duration.between(startALdt, endALdt);
        Duration durationB = Duration.between(startBLdt, endBLdt);

        if (durationA.compareTo(durationB) >= 0 && startALdt.compareTo(startBLdt) <= 0 && endALdt.compareTo(endBLdt) >= 0) {
            System.out.println('时间段A包含时间段B');
        } else {
            System.out.println('时间段A不包含时间段B');
        }
    }

}
Java 判断时间段包含关系:使用 LocalDateTime 和 Duration 类

原文地址: https://www.cveoy.top/t/topic/oDrC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录