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

yizhihongxing

如何判断两个时间段是否重叠是一个经常遇到的问题。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连接mysql底层封装详解

    Java连接MySQL是Java Web开发中最重要的一个环节。为了方便开发,我们通常会使用Maven或Gradle等构建工具引入一些常用的Java数据库连接库,如JDBC或MyBatis等。这些库本质上都是对Java JDBC API的封装,它们封装了大量的底层API,使我们能够更加方便地操作数据库。本文将围绕着Java连接MySQL展开,对其底层封装进行…

    Java 2023年5月19日
    00
  • 关于JDBC的简单封装(实例讲解)

    下面我将详细讲解“关于JDBC的简单封装(实例讲解)”的完整攻略。 1. JDBC 简介 Java Database Connectivity (JDBC) 是一组用于在 Java 编程语言中连接和操作标准数据库的 API。其中,JDBC API 提供了 Java 应用程序与各种关系数据库的连接接口,如 MySQL、Oracle、PostgreSQL 等等。…

    Java 2023年6月16日
    00
  • Java C++算法题解leetcode1592重新排列单词间的空格

    首先,我们需要明确题目的要求:将字符串中单词之间的空格重新排列,使得单词之间只有一个空格,同时字符串的首尾不含空格。 其次,我们需要分析和解决这个问题。首先,我们需要将原字符串按照空格分割成单词,然后将单词之间的空格删除或替换成一个空格,最后将字符串首尾空格删除即可。 以下是具体的代码解决方案: public String reorderSpaces(Str…

    Java 2023年5月19日
    00
  • 深度解析Java中volatile的内存语义实现以及运用场景

    深度解析Java中volatile的内存语义实现以及运用场景 什么是volatile 在Java中,volatile是一种特殊的修饰符,表示被它修饰的变量具有可见性、不保证原子性的特性。 volatile的内存语义 当一个变量被声明为volatile,Java虚拟机将保证: 变量对所有线程之间的可见性 避免指令重排 变量对所有线程之间的可见性 当一个线程修改…

    Java 2023年5月26日
    00
  • Spring循环依赖的解决办法,你真的懂了吗

    Spring循环依赖是指两个或多个Bean之间相互依赖导致Bean的初始化出现死循环的情况。这种情况下,Spring无法完成Bean的初始化,进而导致程序无法启动。在开发过程中,循环依赖是比较常见的问题。下面是解决Spring循环依赖问题的完整攻略。 1.问题描述 Bean A和Bean B相互依赖,Bean A依赖于Bean B,同时Bean B依赖于Be…

    Java 2023年5月31日
    00
  • java实现日期拆分的方法

    下面是“Java实现日期拆分的方法”的完整攻略: 1. 前言 在Java中,我们经常需要对日期进行拆分,比如提取年份、月份、日等信息。本文将介绍几种常用的Java实现日期拆分的方法。 2. 通过SimpleDateFormat拆分日期 Java中的SimpleDateFormat类提供了很多格式化日期、解析日期的方法,可以使用它来实现日期的拆分。我们可以将日…

    Java 2023年5月20日
    00
  • 基于编译虚拟机jvm—openjdk的编译详解

    基于编译虚拟机jvm—openjdk的编译详解 在这篇攻略中,我们将通过使用编译虚拟机jvm-openjdk来编译代码。下面是详细的步骤: 步骤一:安装OpenJDK 在使用OpenJDK编译代码之前,我们需要先安装它。在Linux系统中,我们可以通过以下命令来安装OpenJDK: sudo apt-get install default-jdk 在Wind…

    Java 2023年5月26日
    00
  • springboot实用配置详细图文教程

    我来为你详细讲解“springboot实用配置详细图文教程”的完整攻略。 1. 准备工作 首先,我们需要安装以下几个软件:- JDK 1.8+- Maven- IDE(如IntelliJ IDEA) 2. 创建Spring Boot项目 现在,我们可以开始创建一个Spring Boot项目了。在IDE中,选择新建一个Maven项目,选择Spring Init…

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