如何判断两个时间段是否重叠是一个经常遇到的问题。Java提供了多种方式来实现该功能,本篇文章将为大家介绍其中比较常用的两种方案。
方案一:使用Date类和if语句
- 将两个时间段的起始时间和结束时间分别用Date类表示,并存储在变量中。在Java中,可以使用SimpleDateFormat类将字符串转换为日期类型。
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date start1 = format.parse("2021-06-01 09:00:00");
Date end1 = format.parse("2021-06-01 12:00:00");
Date start2 = format.parse("2021-06-01 11:00:00");
Date end2 = format.parse("2021-06-01 14:00:00");
- 判断两个时间段是否重叠。具体实现是判断其中一个时间段的起始时间是否在另一个时间段内,或者另一个时间段的结束时间是否在该时间段内。如果是,则表示这两个时间段存在重叠。
if ((start1.after(start2) && start1.before(end2)) ||
(end1.after(start2) && end1.before(end2)) ||
(start2.after(start1) && start2.before(end1)) ||
(end2.after(start1) && end2.before(end1))) {
System.out.println("两个时间段存在重叠");
} else {
System.out.println("两个时间段不存在重叠");
}
完整代码如下:
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) throws Exception {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date start1 = format.parse("2021-06-01 09:00:00");
Date end1 = format.parse("2021-06-01 12:00:00");
Date start2 = format.parse("2021-06-01 11:00:00");
Date end2 = format.parse("2021-06-01 14:00:00");
if ((start1.after(start2) && start1.before(end2)) ||
(end1.after(start2) && end1.before(end2)) ||
(start2.after(start1) && start2.before(end1)) ||
(end2.after(start1) && end2.before(end1))) {
System.out.println("两个时间段存在重叠");
} else {
System.out.println("两个时间段不存在重叠");
}
}
}
输出结果为:两个时间段存在重叠。
方案二:使用Joda-Time库
Joda-Time是一个广泛用于时间和日期操作的Java库。它提供了比Java标准库更丰富的日期和时间类,并且提供了许多有用的功能,如处理时区、计算日期间隔等。对于判断时间段是否重叠的问题,使用Joda-Time库可以简化代码。
- 导入Joda-Time库。
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.9</version>
</dependency>
- 将两个时间段的起始时间和结束时间分别用DateTime类表示,并存储在变量中。在Joda-Time库中,使用DateTimeFormat类将字符串转换为日期类型。
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
...
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime start1 = formatter.parseDateTime("2021-06-01 09:00:00");
DateTime end1 = formatter.parseDateTime("2021-06-01 12:00:00");
DateTime start2 = formatter.parseDateTime("2021-06-01 11:00:00");
DateTime end2 = formatter.parseDateTime("2021-06-01 14:00:00");
- 判断两个时间段是否重叠。调用DateTime类的isBefore()、isAfter()方法,可以方便地比较两个日期的大小。如果两个时间段存在重叠,则返回true,否则返回false。
if (start1.isBefore(end2) && end1.isAfter(start2)) {
System.out.println("两个时间段存在重叠");
} else {
System.out.println("两个时间段不存在重叠");
}
完整代码如下:
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime start1 = formatter.parseDateTime("2021-06-01 09:00:00");
DateTime end1 = formatter.parseDateTime("2021-06-01 12:00:00");
DateTime start2 = formatter.parseDateTime("2021-06-01 11:00:00");
DateTime end2 = formatter.parseDateTime("2021-06-01 14:00:00");
if (start1.isBefore(end2) && end1.isAfter(start2)) {
System.out.println("两个时间段存在重叠");
} else {
System.out.println("两个时间段不存在重叠");
}
}
}
输出结果为:两个时间段存在重叠。
以上就是使用Java判断两个时间段是否重叠的两种方案,根据实际情况选择适合自己的方案。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 判断两个时间段是否重叠的案例 - Python技术站