Java 判断时间段包含关系:使用 LocalDateTime 和 Duration 类
可以使用Java中的LocalDateTime和Duration类来判断一个时间段是否包含另一个时间段。
假设有两个时间段A和B,其中A的起始时间为startA,结束时间为endA,B的起始时间为startB,结束时间为endB。
- 首先,将起始时间和结束时间转换为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());
- 然后,使用Duration类计算出时间段A和时间段B的持续时间。
Duration durationA = Duration.between(startALdt, endALdt);
Duration durationB = Duration.between(startBLdt, endBLdt);
- 接着,判断时间段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');
}
}
}
原文地址: https://www.cveoy.top/t/topic/oDrC 著作权归作者所有。请勿转载和采集!