当前位置: 首页 > news >正文

Java给定两组起止日期,求交集

/**

* 判断2个时间段是否有重叠(交集)

* @param startDate1 时间段1开始时间戳

* @param endDate1 时间段1结束时间戳

* @param startDate2 时间段2开始时间戳

* @param endDate2 时间段2结束时间戳

* @param isStrict 是否严格重叠,true 严格,没有任何相交或相等;false 不严格,可以首尾相等,比如2021/5/29-2021/5/31和2021/5/31-2021/6/1,不重叠。

* @return HashMap<String,DateTime> key startDate endDate

* 思路:将有交集的情况列出,若不符合有交集的情况,则无交集

* 有交集的情况

* 1.第一个时间段的开始时间在第二个时间段的开始时间和结束时间当中 第一个时间段的结束时间大于第二个时间段的结束时间

* 2.第一个时间段的结束时间在第二个时间段的开始时间和结束时间当中 第一个时间段的开始时间小于第二个时间段的开始时间

* 3.第一个时间段的开始结束时间在第二个时间段的开始时间和结束时间当中

* 3.第二个时间段的开始结束时间在第一个时间段的开始时间和结束时间当中

* 判断两个时间段是否有交集

*/

public static HashMap<String,DateTime> setOverlap(DateTime startDate1, DateTime endDate1, DateTime startDate2, DateTime endDate2, boolean isStrict){

HashMap<String,DateTime> intersection = new HashMap<>();

if(endDate1.compareTo(startDate1) < 0){

throw new XbootException("endDate1不能小于startDate1");

}

if(endDate2.compareTo(startDate2) < 0){

throw new XbootException("endDate2不能小于startDate2");

}

if(isStrict){

if(startDate1.compareTo(startDate2) >= 0 && startDate1.compareTo(endDate2) <= 0 && endDate1.compareTo(endDate2) > 0){

intersection.put("startDate",startDate1);

intersection.put("endDate",endDate2);

}else if(endDate1.compareTo(startDate2) >= 0 && startDate1.compareTo(endDate2) <= 0 && startDate1.compareTo(startDate2) < 0){

intersection.put("startDate",endDate1);

intersection.put("endDate",endDate2);

}else if(startDate1.compareTo(startDate2) >= 0 && endDate1.compareTo(endDate2) <= 0){

intersection.put("startDate",startDate1);

intersection.put("endDate",endDate1);

}else if((startDate1.compareTo(startDate2) <= 0 && endDate1.compareTo(endDate2) >= 0) ){

intersection.put("startDate",startDate2);

intersection.put("endDate",endDate2);

}

}else{

if(startDate1.compareTo(startDate2) > 0 && startDate1.compareTo(endDate2) < 0 && endDate1.compareTo(endDate2) > 0){

intersection.put("startDate",startDate1);

intersection.put("endDate",endDate2);

}else if(endDate1.compareTo(startDate2) > 0 && startDate1.compareTo(endDate2) < 0 && startDate1.compareTo(startDate2) < 0){

intersection.put("startDate",endDate1);

intersection.put("endDate",endDate2);

}else if(startDate1.compareTo(startDate2) > 0 && endDate1.compareTo(endDate2) < 0){

intersection.put("startDate",startDate1);

intersection.put("endDate",endDate1);

}else if((startDate1.compareTo(startDate2) < 0 && endDate1.compareTo(endDate2) > 0) ){

intersection.put("startDate",startDate2);

intersection.put("endDate",endDate2);

}

}

return intersection;

}

public static HashMap<String,DateTime> getOverlap(DateTime startDate1, DateTime endDate1, DateTime startDate2, DateTime endDate2, boolean isStrict){

Objects.requireNonNull(startDate1, "startDate1");

Objects.requireNonNull(endDate1, "endDate1");

Objects.requireNonNull(startDate2, "startDate2");

Objects.requireNonNull(endDate2, "endDate2");

return setOverlap(startDate1, endDate1, startDate2, endDate2, isStrict);

}

相关文章:

Java给定两组起止日期,求交集

/*** 判断2个时间段是否有重叠&#xff08;交集&#xff09;* param startDate1 时间段1开始时间戳* param endDate1 时间段1结束时间戳* param startDate2 时间段2开始时间戳* param endDate2 时间段2结束时间戳* param isStrict 是否严格重叠&#xff0c;true 严格&#xff0…...

数组的复制与二维数组的用法

今天学习的主要内容有 数组的复制 数组的复制 利用循环进行数组的复制 import java.util.Arrays; public class Main3 {public static void main(String[] args) {int []arr new int[]{1,2,3,4,5,6};int []arr1 new int[arr.length];for (int i 0; i < arr.length; i…...

JS判断两个table数据是否完全相等(判断两个数组对象是否完全相等)

需求 现有的table为tableA&#xff0c;有多个要做对比的table为一个数组 CompareArray 涉及到的问题 外层是数组&#xff0c;但是内部数据都是对象&#xff0c;对象属性名的排序不一样外层数组也涉及到 顺序不一样的问题 思路 对compareArray做长度筛选 filter 得到 同长度…...

关于小程序,你想知道的这些

近年来&#xff0c;各大平台纷纷上架小程序&#xff0c;迎来了小程序的爆发式增长。今天就来跟大家简单分享一下小程序基本的运行机制和安全机制。 小程序的由来 在小程序没有出来之前&#xff0c;最初微信WebView逐渐成为移动web重要入口&#xff0c;微信发布了一整套网页开…...

WuThreat身份安全云-TVD每日漏洞情报-2023-02-13

漏洞名称:THORSTEN PHPMYFAQ 跨站点脚本 漏洞级别:高危 漏洞编号:CVE-2023-0791 相关涉及:THORSTEN PHPMYFAQ 3.1.10 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-03506 漏洞名称:TENDA AC23 越界写入 漏洞级别:高危 漏洞编号:CVE-2023-078…...

【Linux】软件安装(三分钟教会你如何在linux下安装软件)

&#x1f525;&#x1f525; 欢迎来到小林的博客&#xff01;&#xff01;       &#x1f6f0;️博客主页&#xff1a;✈️小林爱敲代码       &#x1f6f0;️博客专栏&#xff1a;✈️Linux之路       &#x1f6f0;️社区&#xff1a;✈️进步学堂 目录&…...

Fluent Python 笔记 第 10 章 序列的修改、散列和切片

本章将以第 9 章定义的二维向量 Vector2d 类为基础&#xff0c;向前迈出一大步&#xff0c;定义表示多维向量的 Vector 类。这个类的行为与 Python 中标准的不可变扁平序列一样。 10.3 协议和鸭子类型 在 Python 中创建功能完善的序列类型无需使用继承&#xff0c;只需实现符…...

在中国程序员工作是青春饭吗?

上个月公司告诉我毕业了。 我打开boss直聘&#xff0c;一溜溜的外包公司和我打招呼。 我寻思我说不定啥时候就离开深圳了&#xff0c;外包不外包也无所谓钱到位就行。&#xff08;大公司学历不够格也进不去&#xff09; 结果华为、平安的外包告诉我&#xff0c;不好意思呀&a…...

Linux tcpdump

tcpdump - 转储网络上的数据流 是不是感觉很懵&#xff1f;全方位描述tcpdump: 通俗&#xff1a;tcpdump是一个抓包工具&#xff0c;用于抓取网络中传输的数据包形象&#xff1a;tcpdump如同国家海关&#xff0c;凡是入境和出境的货物&#xff0c;海关都要抽样检查&#xff0…...

redis知识汇总(部署、高可用、集群)

文章目录一、redis知识汇总什么是redisredis的优缺点&#xff1a;为什么要用redis做缓存redis为什么这么快什么是持久化redis持久化机制是什么&#xff1f;各自优缺点&#xff1f;AOF和RDB怎么选择redis持久化数据和缓存怎么做扩容什么是事务redis事务的概念ACID概念主从复制re…...

【手写 Vuex 源码】第十篇 - Vuex 命名空间的实现

一&#xff0c;前言 上一篇&#xff0c;主要介绍了 Vuex 响应式数据和缓存的实现&#xff0c;主要涉及以下几个点&#xff1a; Vuex 的响应式实现原理&#xff1b;响应式核心方法 resetStoreVM&#xff1b;commit 和 dispatch 的处理&#xff1b; 本篇&#xff0c;继续介绍 …...

面试腾讯测试岗后感想,真的很后悔这5年一直都干的是基础测试....

前两天&#xff0c;我的一个朋友去大厂面试&#xff0c;跟我聊天时说&#xff1a;输的很彻底… 我问她&#xff1a;什么情况&#xff1f;她说&#xff1a;很后悔这5年来一直都干的是功能测试… 相信许多测试人也跟我朋友一样&#xff0c;从事了软件测试很多年&#xff0c;却依…...

知识图谱 方法、实践与应用 王昊奋 读书笔记(下)

最近读了这本书&#xff0c;在思路上很有启发&#xff0c;对知识图谱有了初步的认识&#xff0c;以下是原书后半部分的内容&#xff0c;可以购买实体书获取更多内容。 知识图谱推理 结合已有规则&#xff0c;推出新的事实&#xff0c;例如持有股份就能控制一家公司&#xff0…...

vue实现打印浏览器页面功能(两种方法)

推荐使用方法二 方法一&#xff1a;通过npm 安装插件 1&#xff0c;安装 npm install vue-print-nb --save 2&#xff0c;引入 安装好以后在main.js文件中引入 import Print from vue-print-nbVue.use(Print); //注册 3&#xff0c;现在就可以使用了 div id"printTest…...

【VictoriaMetrics】VictoriaMetrics单机版批量和单条数据写入(Prometheus格式)

VictoriaMetrics单机版支持以Prometheus格式的数据写入,写入支持单条数据写入以及多条数据写入,下面操作演示下如何使用 1、首先需要启动VictoriaMetrics单机版服务 2、使用postman插入单机版VictoriaMetrics,以当前时间插入数据 地址为 http://victoriaMetricsIP:8428/api…...

【青训营】分布式定时任务简述

这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天 分布式定时任务简述 定义 定时任务是指系统为了自动完成特定任务&#xff0c;实时、延时、周期性完成任务调度的过程。分布式定时任务是把分散的、可靠性差的定时任务纳入统一平台&#xff0c;并且实现集群管理调度和…...

golang语言本身设计点总结

本文参考 1.golang的内存管理分配 golang的内存分配仿造Google公司的内存分配方法TCmalloc算法&#xff1b;她会把将内存请求分为两类,大对象请求和小对象请求,大对象为>32K的对象。 在了解golang的内存分配之前要知道什么事虚拟内存&#xff0c;虚拟内存是把磁盘作为全局…...

PTA L1-046 整除光棍(详解)

前言&#xff1a;内容包括四大模块&#xff1a;题目&#xff0c;代码实现&#xff0c;大致思路&#xff0c;代码解读 题目&#xff1a; 这里所谓的“光棍”&#xff0c;并不是指单身汪啦~ 说的是全部由1组成的数字&#xff0c;比如1、11、111、1111等。传说任何一个光棍都能被…...

将小程序代码转成uni-app代码

最近因为公司项目原因需要将小程序的项目转换成uni—app的项目&#xff0c;所以总结了以下几点&#xff1a; 首先你可以先到uni-app的官网简单看一下对它的介绍&#xff0c;本次文章的介绍是针对简单的微信小程序来进行的转化。 在这之前我们来看一下目录对比 下面就来介绍一下…...

C语言在游戏中播放音乐

使用 mciSendString 播放音乐 mciSendString 支持 mp3、wma、wav、mid 等多种媒体格式&#xff0c;使用非常简单。这里做一个简单的范例&#xff0c;用 mciSendString 函数播放 MP3 格式的音乐&#xff0c;代码如下&#xff1a; // 编译该范例前&#xff0c;请把 music.mp3 放…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...