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日

相关文章

  • nginx+tomcat实现负载均衡,使用redis session共享

    实现负载均衡可以利用反向代理服务器来实现,而Nginx就是一个出色的反向代理服务器,同时,通过Tomcat实现负载均衡的同时还需要使用Redis session共享来实现负载均衡下的session一致性。 下面就是实现“nginx+tomcat实现负载均衡,使用redis session共享”的完整攻略: 环境准备 安装Nginx、Tomcat和Redis;…

    Java 2023年5月19日
    00
  • springboot pojo对象日期属性的问题

    首先,要讲解SpringBoot POJO对象日期属性的问题,我们需要了解Java中日期类型的常见问题。Java中日期类型有多种,如java.util.Date、java.util.Calendar等,但是这些类型在处理过程中经常会出现时间格式转换错误等问题。因此Java8中新增了java.time.LocalDateTime和java.time.Local…

    Java 2023年5月26日
    00
  • SpringBoot使用编程方式配置DataSource的方法

    当使用SpringBoot构建Web应用程序时,我们常常需要使用数据源,这里我们具体讲解使用编程方式配置DataSource的方法。 首先,需要在pom.xml文件中添加相应的依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactI…

    Java 2023年5月19日
    00
  • java中的IO流

    下面是 Java 中的 IO 流的完整攻略。 一、IO 概述 IO(Input/Output)指输入/输出,是程序与外界交互的重要途径之一。在 Java 中,IO 操作分为“字节流”和“字符流”两大类。其中,“字节流”以字节为单位进行输入/输出,而“字符流”以字符为单位进行输入/输出。 二、字节流 字节流中,InputStream 和 OutputStrea…

    Java 2023年5月20日
    00
  • 基于Java中字符串indexof() 的使用方法

    基于Java中字符串indexof() 的使用方法攻略 简介 在Java编程中,字符串是一种非常重要的数据类型,字符串操作是开发中常见的任务。字符串中indexof()方法就是字符串操作中的一个重要方法,它用于查找一个字符串中是否包含指定的字符或子字符串。 使用步骤 使用字符串中的indexof()方法需要遵循以下步骤: 创建一个字符串 java Strin…

    Java 2023年5月26日
    00
  • SpringBoot快速整合Mybatis、MybatisPlus(代码生成器)实现数据库访问功能

    SpringBoot整合Mybatis 1.引入依赖 在pom.xml中引入以下依赖: <!– SpringBoot整合Mybatis依赖 –> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis…

    Java 2023年5月20日
    00
  • 详解Java的位操作符

    详解Java的位操作符 在Java编程中,位操作符是十分重要的操作符之一。它可以对数字进行位运算,通过改变二进制数的位来实现一些比较复杂的操作。本文将详细讲解Java的位操作符。 按位与(&)操作符 按位与操作符”&”主要用于对二进制数进行与运算。如果两个位都是1,那么结果就是1,否则结果就是0。下面是一个示例: int a = 6; int…

    Java 2023年5月26日
    00
  • 详解Java基础篇–面向对象1(构造方法,static、this关键字)

    详解Java基础篇–面向对象1 构造方法 什么是构造方法 构造方法是一种特殊的方法,它用来初始化对象。当创建一个对象时,构造方法会被调用,用于初始化实例变量。 构造方法的特点 构造方法名必须与类名相同 没有返回值,包括void 可以有多个构造方法,我们称之为构造方法的重载 构造方法在使用new关键字创建对象时自动调用 构造方法的使用示例 public cl…

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