判断时间段是否重叠

news2025/2/25 8:26:24

1、逻辑公式

时间段1:start1(开始时间),end1(结束时间)

时间段2:start2(开始时间),end2(结束时间)

重叠条件为:start1 <= end2 && end1 >= start2。

2、java实现

工具方法

/**
 * 判断时间是否重叠
 * true重叠。false不重叠
 *
 * @param start1
 * @param end1
 * @param start2
 * @param end2
 * @param isStrict 是否严格遵守不能重叠,例如如果为true 那么8:00-8:30 和8:30-9:00 时间段比较为true
 * @methodName: isOverlapLocalTime
 * @return: boolean
 * @date: 2023/8/10
 **/
public static boolean isOverlapLocalTime(LocalTime start1, LocalTime end1, LocalTime start2, LocalTime end2, boolean isStrict) {
    if (start1.isAfter(end1) || start2.isAfter(end2)) {
        throw new DateTimeException("endDate不能小于startDate");
    }
    if (isStrict) {
        if (start1.compareTo(end2) <= 0 && end1.compareTo(start2) >= 0) {
            //重叠
            return true;
        }
        //不重叠
        return false;
    }
    if (start1.compareTo(end2) < 0 && end1.compareTo(start2) > 0) {
        //重叠
        return true;
    }
    //不重叠
    return false;
}

测试

/**
 * 判断时间是否重叠
 *
 * @methodName: isOverlap
 * @return: void
 * @date: 2023/8/10
 **/
@Test
void isOverlapLocalTime() {
    LocalTime start1 = LocalTime.now();
    LocalTime end1 = start1.plusHours(2);


    LocalTime start2 = start1.plusHours(2);
    LocalTime end2 = start1.plusHours(5);
    log.info("start1:{},end1:{},start2:{},end2:{}", start1, end1, start2, end2);

    log.info("isOverlap:{}", DateUtils.isOverlapLocalTime(start1, end1, start2, end2, true));
}

返回结果:true

3、数据库实现

同表sql使用公共方式

SELECT * 
FROM table_name t1, table_name t2 
WHERE t1.id <> t2.id 
AND t1.start_time <= t2.end_time AND t1.end_time >= t2.start_time;

t1.id <> t2.id 用于排除同一行数据的比较。这个语句会将表中的每一行数据与其他行数据进行比较,如果存在重叠的时间段,则返回结果集。

建表

CREATE TABLE `test_date`  (
  `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
  `start_time` datetime NOT NULL,
  `end_time` datetime NOT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `idx_start_time`(`start_time` ASC) USING BTREE,
  INDEX `idx_end_time`(`end_time` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

添加数据

INSERT INTO `test_date` VALUES (1, '2021-08-05 11:19:01', '2021-08-31 11:19:01');
INSERT INTO `test_date` VALUES (2, '2010-08-27 18:56:13', '2010-09-05 18:56:13');
INSERT INTO `test_date` VALUES (3, '2015-08-08 07:31:37', '2015-09-30 07:31:37');
INSERT INTO `test_date` VALUES (4, '2012-07-16 07:11:41', '2012-07-31 07:11:41');
INSERT INTO `test_date` VALUES (5, '2001-08-21 09:23:11', '2006-11-05 05:28:14');
INSERT INTO `test_date` VALUES (6, '2001-06-07 10:50:32', '2007-12-22 12:45:20');
INSERT INTO `test_date` VALUES (7, '2019-03-29 20:55:14', '2019-04-30 20:55:14');
INSERT INTO `test_date` VALUES (8, '2010-10-21 10:10:27', '2014-07-10 13:18:35');
INSERT INTO `test_date` VALUES (9, '2008-08-12 03:39:36', '2015-09-05 20:17:57');
INSERT INTO `test_date` VALUES (10, '2020-03-24 00:39:22', '2023-10-21 17:26:11');

测试

sql语句:id!=10为排除同一行数据

SELECT
	* 
FROM
	test_date 
WHERE
	id != 10 
	AND start_time <= "2023-10-21 17:26:11" AND end_time >= '2020-03-24 00:39:22';

结果如下,存在1条重叠数据

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/863139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ad+硬件每日学习十个知识点(30)23.8.10 (SDIO端口扩展器TXS02612RTWR,模数转换器ADC121C027)

文章目录 1.cpu->SDIO端口扩展器->SD卡槽->SD卡(当然也可以反向读取)2.SDIO端口扩展器介绍3.SDIO端口扩展器TXS02612RTWR4.SD卡槽5.什么是模数转换器&#xff1f;6.I2C模数转换器ADC121C0277.模数转换方案 1.cpu->SDIO端口扩展器->SD卡槽->SD卡(当然也可以反…

win11(不符合要求)安装方法

win11&#xff08;不符合要求&#xff09;安装方法&#xff1a; 注意&#xff01;这样安装win11可能会导致文件丢失&#xff0c;请备份重要文件&#xff08;会删除c盘很多文件&#xff0c;可以在c盘Windows.old文件夹恢复。 第一步、下载win11ISO镜像&#xff1a;恰到好处系统…

【C++】开源:spdlog跨平台日志库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍spdlog日志库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下…

虚拟机安装国产操作系统的方法

1.这里以银河麒麟为例&#xff0c;其他以liunx为基础的国产操作系统都是一样的方法。 2.下载操作系统如下&#xff08;选第一个就行&#xff09;&#xff1a; 任选其一下载&#xff1a; 3.安装虚拟机软件(这里以virtualbox为例&#xff0c;vmare也是一样都可以) 4.打开虚拟机…

Django配置(部署环境较乱,暂时启用)

django配置 web服务器中部署项目及WSGI简介 web服务器 WSGI 在IIS中部署django项目 安装 wfastcgi &#xff1a;pip install wfastcgi安装IIS&#xff1a; 以上选择项勾选后确定 将CGI文件复制到项目中&#xff0c; 将项目复制到IIS默认目录中 部署IIS 添加变量信息如下…

Apache Paimon 流式数据湖 V 0.4 与后续展望

摘要&#xff1a;本文整理自阿里云开源大数据表存储团队负责人、阿里巴巴高级技术专家&#xff0c;Apache Flink PMC&#xff0c;Paimon PPMC 李劲松&#xff08;之信&#xff09;在 Apache Paimon Meetup 的分享。本篇内容主要分为四个部分&#xff1a; 1. 湖存储上的难点 2. …

“海纳“二维码生成器(绿色版本,离线无需安装)

介绍一款所见即所得的二维码生成器&#xff1a;"海纳"二维码生成器&#xff0c;免费、离线&#xff0c;简单、快捷。 主要功能&#xff1a; 图形界面&#xff0c;所见即所得&#xff1b;支持数字、字符、汉字等生成二维码&#xff1b;支持网址、邮件地址&#xff1…

Nodejs+vue+elementui汽车租赁管理系统_1ma2x

语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 前端nodejsvueelementui, 课题主要分为三大模块&#xff1a;即管理员模块、用户模块和普通管理员模块&#xff0c;主要功能包括&#…

EMC传导干扰滤波电路设计

1.EMC概念 2.EMC 传导干扰详解 EMC传导滤波电路的设计--传导干扰详解 3.EMC 传导干扰的测量方法 4.EMC 滤波电路设计 5.浪涌抑制电路设计 6.开关电源的安全要求 7.当前开关电源灯的应用

恒盛策略:怎样看k线图实图详解如何看懂k线图?

K线图是股票剖析中常用的一种图表&#xff0c;它能够反映一段时间内股票价格的变化状况&#xff0c;对于股票投资者来说非常重要。但是&#xff0c;由于k线图并不是很好理解&#xff0c;很多投资者并不知道怎样看懂它。那么&#xff0c;咱们就从多个视点来看看怎样看k线图实图&…

echarts barEchart柱状图边框、透明、文字靠左展示

效果一 先上效果图 说明&#xff1a; 给柱状图加上 边框&#xff0c;改变柱状图颜色并透明&#xff0c;改变 X,Y轴字体颜色&#xff0c;改变 轴线颜色&#xff0c;将所有的轴线全都改成一致效果 echarts 的代码 javascript const renderBarEcharts (ele: HTMLDivElement) >…

CM11 链表分割 题解

题目描述&#xff1a; 链表分割_牛客题霸_牛客网 (nowcoder.com) 现有一链表的头指针 ListNode* pHead&#xff0c;给一定值x&#xff0c;编写一段代码将所有小于x的结点排在其余结点之前&#xff0c;且不能改变原来的数据顺序&#xff0c;返回重新排列后的链表的头指针。 题解…

交换机的堆叠技术

目录 一、堆叠的优势 1、提高可靠性 2、简化组网 3、简化管理 4、强大的网络拓展 二、堆叠的方式 1、堆叠卡堆叠 2、业务口堆叠 3、堆叠卡和业务卡堆叠的优缺点 三、堆叠的原理 1、角色 2、单机堆叠 3、堆叠ID 4、堆叠的优先级 5、堆叠的建立过程 1&#xff09…

13.1.2 对CIFAR-10数据集使用图像增广来训练ResNet

%matplotlib inline import torch import torchvision from torch import nn from d2l import torch as d2l import time使用CIFAR-10数据集,而不是我们之前使用的Fashion-MNIST数据集。这是因为Fashion-MNIST数据集中对象的位置和大小已被规范化,而CIFAR-10数据集中对象的颜色…

探索未知,即刻搭建AI原生应用!WAVE SUMMIT Workshop等你来参加

你是否希望掌握大模型开发的秘诀&#xff1f;你是否渴望得到实践操作的机会&#xff1f;如果你的心中充满热情和期待&#xff0c;那么&#xff0c;WAVE SUMMIT 2023特别设置的Workshop将会是你的知识启航站&#xff01; 本次Workshop专注于AI开发与大模型应用&#xff0c;邀请一…

Python调用阿里云短信接口

注&#xff1a; 要使用Python调用阿里云的短信服务&#xff0c;你可以使用阿里云官方提供的SDK&#xff0c;即阿里云SDK for Python。首先&#xff0c;确保你已经在阿里云上创建了短信服务并获取了相应的Access Key ID和Access Key Secret。 1、准备工作 阿里云短信网址 1、…

使用C语言实现UDP消息接收

目录 简介:步骤:步骤 1: 创建套接字步骤 2: 接收消息步骤 3: 完成 函数及变量解释总结: 简介: 在网络通信中&#xff0c;UDP&#xff08;User Datagram Protocol&#xff09;是一种无连接协议&#xff0c;它提供了一种快速、高效的数据传输方法。本文将向您展示如何使用C语言编…

Effective Java笔记(33)优先考虑类型安全的异构容器

泛型最常用于集合&#xff0c;如 Set<E &#xff1e;和 Map<K ,V&#xff1e;&#xff0c;以及单个元素的容器 &#xff0c;如 ThreadLocal<T>和 AtomicReference<T&#xff1e; 。 在所有这些用法中&#xff0c;它都充当被参数化了的容器 。 这样就限制每个容器…

基于C函数封装的C++读写锁(附源码)

C++常用功能源码系列 文章目录 C++常用功能源码系列前言一、读写锁是什么二、读写锁封装源码三、读写锁注意点总结前言 本文是C/C++常用功能代码封装专栏的导航贴。部分来源于实战项目中的部分功能提炼,希望能够达到你在自己的项目中拿来就用的效果,这样更好的服务于工作实践…

Vue组件的嵌套关系;父组件传递子组件props;子组件传递给父组件$emit;自定义事件;案例

目录 1_Vue组件的嵌套关系1.1_认识组件的嵌套1.2_组件的拆分1.3_组件的通信 2_父组件传递子组件props2.1_父子组件之间通信的方式2.2_父组件传递给子组件2.3_Props的对象用法 3_子组件传递给父组件$emit4_自定义事件(了解)5_小案例6_补充 1_Vue组件的嵌套关系 1.1_认识组件的嵌…