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判断两个时间段是否重叠的两种方案,根据实际情况选择适合自己的方案。

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

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

相关文章

  • Java Maven高级之插件开发详解

    Java Maven高级之插件开发详解 什么是Maven插件 Maven插件是Maven框架中的一种机制,它通过扩展Maven的功能来满足个性化的需求。本质上,Maven插件就是一个打包好的jar包,它定义了自己的goal,当我们执行Maven命令时,可以通过指定goal来触发插件的执行。 Maven插件的类型 Maven插件可以分为两种:build插件和r…

    Java 2023年5月20日
    00
  • Java下载文件的四种方式详细代码

    下面我将为您详细讲解Java下载文件的四种方式和完整代码。 一、使用Java自带的URL类进行文件下载 使用Java自带的URL类可以方便地进行文件下载,步骤如下: 创建一个URL对象,指定需要下载的文件链接。 打开 URL 连接,获取 InputStream 对象,用于读取远程文件流。 创建文件输出流对象,用于保存下载的文件。 读取远程文件并将其写入到本地…

    Java 2023年5月20日
    00
  • Java中从键盘输入多个整数的方法

    题目:Java中从键盘输入多个整数的方法 为了方便解释,我们假设从键盘读入的多个整数用空格隔开,并且输入的整数个数是不确定的。 我们可以通过如下步骤实现从键盘输入多个整数: 导入Scanner类 在Java中,从键盘读取数据需要使用java.util包中的Scanner类。因此,我们需要在文件开头加上以下语句: import java.util.Scanne…

    Java 2023年5月26日
    00
  • Nginx负载均衡以及动静分离的原理与配置

    Nginx是一个高性能的Web服务器和反向代理服务器,可以用于负载均衡和动静分离。本文将讲解Nginx负载均衡及动静分离的原理和配置方法,内容包括以下几个方面: 负载均衡原理及方法 动静分离原理及方法 Nginx配置示例 1. 负载均衡原理及方法 负载均衡主要用于分摊用户请求到多个服务器上,以提高吞吐量、降低延迟和避免单点故障。Nginx基于反向代理实现负载…

    Java 2023年5月20日
    00
  • 使用Spring Boot搭建Java web项目及开发过程图文详解

    下面我会为您详细讲解使用SpringBoot搭建JavaWeb项目及开发过程。本文将按照以下步骤详细展开: 环境准备及SpringBoot的简介 创建一个简单的SpringBoot项目 开发一个简单的RESTful接口 创建一个数据库,并通过MyBatis实现与之交互 使用Thymeleaf模板引擎开发前端页面 部署及运行项目 环境准备及SpringBoot…

    Java 2023年5月15日
    00
  • Hibernate 的原理与配置

    Hibernate是一个面向对象的Java持久化框架,它的目的是简化数据访问,并提供更好的对象封装性和查询性能。本文将讲解Hibernate的原理与配置,包括Hibernate的核心概念、Hibernate工作流程、Hibernate配置文件以及示例代码。 Hibernate的核心概念 Session:Session代表与数据库的一个会话,它包含了一系列的操…

    Java 2023年5月20日
    00
  • java递归算法实例分析

    Java递归算法实例分析 递归是一种常见的算法,用于解决许多数学问题、算法问题、数据结构问题等。相比于非递归算法,递归算法的代码通常更加简单易懂。本文将介绍Java中的递归算法,并通过示例说明如何使用它。 什么是递归 递归是指在函数定义中使用函数自身的方法。简单点说,就是一个函数不断地调用它自己来实现某个功能。递归函数必须有一个结束条件,否则就会陷入无限循环…

    Java 2023年5月19日
    00
  • Java JDK 1.8 lambda的用法详解

    以下是”Java JDK 1.8 lambda的用法详解”的完整攻略。 Java JDK 1.8 lambda的用法详解 什么是Lambda表达式 在Java JDK 1.8中,加入了一种新的语言特性——Lambda表达式。Lambda表达式可以将函数作为方法传递或将代码作为方法来处理,并且可以使代码更加简洁易读。 Lambda表达式常用于处理集合或数组中的…

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