java 判断两个时间段是否重叠的案例

如何判断两个时间段是否重叠是一个经常遇到的问题。Java提供了多种方式来实现该功能,本篇文章将为大家介绍其中比较常用的两种方案。

方案一:使用Date类和if语句

  1. 将两个时间段的起始时间和结束时间分别用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");
  1. 判断两个时间段是否重叠。具体实现是判断其中一个时间段的起始时间是否在另一个时间段内,或者另一个时间段的结束时间是否在该时间段内。如果是,则表示这两个时间段存在重叠。
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库可以简化代码。

  1. 导入Joda-Time库。
<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.10.9</version>
</dependency>
  1. 将两个时间段的起始时间和结束时间分别用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");
  1. 判断两个时间段是否重叠。调用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判断两个时间段是否重叠的两种方案,根据实际情况选择适合自己的方案。

阅读剩余 57%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 判断两个时间段是否重叠的案例 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • STRUTS+AJAX+JSP 请求到后台乱码问题解决方法

    针对 “STRUTS+AJAX+JSP 请求到后台乱码问题解决方法” 这个问题,我们需要分几个步骤来进行讲解。 步骤一:字符集设置 在 web.xml 文件中配置字符集编码为 UTF-8,以支持中文等特殊字符的传输。 <web-app> <filter> <filter-name>encodingFilter</fi…

    Java 2023年6月15日
    00
  • 使用Maven 搭建 Spring MVC 本地部署Tomcat的详细教程

    使用Maven 搭建 Spring MVC 本地部署Tomcat的详细教程 本文将详细讲解如何使用Maven搭建Spring MVC,并将其部署到本地的Tomcat服务器上。我们将提供两个示例来说明如何实现这一过程。 实现步骤 下面是实现Maven搭建Spring MVC并部署到本地Tomcat服务器的详细步骤: 步骤一:创建Maven项目 首先,我们需要创…

    Java 2023年5月17日
    00
  • java启动jar包将日志打印到文本的简单操作

    下面我来为您详细讲解如何通过 Java 启动 Jar 包并将日志打印到文本的简单操作攻略。 简介 在 Java 中,我们可以通过 log4j、logback 等成熟的日志框架来记录日志。而在启动 Jar 包时,如果想将程序运行过程中产生的日志打印到文本,可以在启动命令中加入 log4j 配置文件,并指定日志文件的输出路径。 操作步骤 1. 编写 log4j …

    Java 2023年5月26日
    00
  • Struts2数据输入验证教程详解

    Struts2数据输入验证教程详解 什么是数据输入验证 在应用程序中,数据输入验证是一项重要的任务。它可以确保应用程序接受有效的、可靠的和正确的数据。数据输入验证通常采用静态和动态验证技术,在前台和后台进行验证。 静态验证技术用于验证数据格式是否为正确的格式,比如数字、日期等。而动态验证技术则用于验证数据是否是符合业务规则和逻辑的,例如输入的身份证号码必须符…

    Java 2023年5月20日
    00
  • HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天

    HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天 什么是WebSocket WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信的目标是在Web浏览器和服务器之间建立实时或双向通信,并且可以通过原生浏览器WebSocket API与服务器进行交互。HTML5引入了WebSocket协议以便于实…

    Java 2023年6月2日
    00
  • 使用JDBC工具类实现简单的登录管理系统

    使用JDBC工具类实现简单的登录管理系统需要以下步骤: 准备工作 在项目中引入JDBC依赖,如使用Maven引入jdbc依赖: <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> &l…

    Java 2023年6月16日
    00
  • Java实现通讯录管理系统项目

    下面我会给您详细讲解 Java 实现通讯录管理系统项目的完整攻略,步骤如下: 1. 确定所需技术栈 在开始之前,我们需要明确该项目需要用到哪些技术栈,Java 实现通讯录管理系统项目需要用到的技术栈包括: Java 语言基础 面向对象编程思想 Java 集合框架 文件 I/O 2. 设计通讯录管理系统的数据结构 在这一步骤中,我们需要通过数据结构来描述通讯录…

    Java 2023年5月24日
    00
  • 详解直接访问WEB-INF目录下的JSP页面的方法

    访问WEB-INF目录下的JSP页面需要通过Servlet进行转发,访问该目录下的资源时,URL地址栏中的文件名必须为Servlet指定的地址。下面是详解直接访问WEB-INF目录下的JSP页面的攻略。 第一步:编写Servlet 为了把WEB-INF目录中的JSP页面暴露出来,首先需要编写一个Servlet。在此Servlet的doGet方法中,可以获取到…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部