当前位置: 首页 > 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);

}

http://www.lryc.cn/news/5396.html

相关文章:

  • 数组的复制与二维数组的用法
  • JS判断两个table数据是否完全相等(判断两个数组对象是否完全相等)
  • 关于小程序,你想知道的这些
  • WuThreat身份安全云-TVD每日漏洞情报-2023-02-13
  • 【Linux】软件安装(三分钟教会你如何在linux下安装软件)
  • Fluent Python 笔记 第 10 章 序列的修改、散列和切片
  • 在中国程序员工作是青春饭吗?
  • Linux tcpdump
  • redis知识汇总(部署、高可用、集群)
  • 【手写 Vuex 源码】第十篇 - Vuex 命名空间的实现
  • 面试腾讯测试岗后感想,真的很后悔这5年一直都干的是基础测试....
  • 知识图谱 方法、实践与应用 王昊奋 读书笔记(下)
  • vue实现打印浏览器页面功能(两种方法)
  • 【VictoriaMetrics】VictoriaMetrics单机版批量和单条数据写入(Prometheus格式)
  • 【青训营】分布式定时任务简述
  • golang语言本身设计点总结
  • PTA L1-046 整除光棍(详解)
  • 将小程序代码转成uni-app代码
  • C语言在游戏中播放音乐
  • 机器学习算法:随机森林
  • 如何做好多项目全生命周期的资源调配,提升资源利用效率?【橙子】
  • JVM - 内存分配
  • 【知识图谱论文】Bi-Link:通过转换器和提示的对比学习桥接来自文本的归纳链接预测
  • jieba+wordcloud 词云分析 202302 QCon 议题 TOP 关键词
  • 包管理工具-npm-npx-yarn-cnpm
  • go gin学习记录1
  • Docker常用命令
  • 论文写作——公式编辑器、latex表格、颜色搭配器
  • MySQL数据库12——视图(VIEW)
  • 第四代英特尔至强重磅发布,芯片进入下半场:软硬加速、绿色可持续