下面是算法示例:

//  验证时间有没有交集 有交集返回失败,注意,map集合中元素必须是偶数个k-v,

并且,当startTimeStr或endTimeStr等于其中一个日期时,可能算出来有误,需要单独情况考虑。

注:可以将入参的startTimeStr与endTimeStr、map的key与value全部拼接时分秒后,使用该算法,本人测试后没有发现有错误的情况。

    public static void main(String[] args) {String startTimeStr = "2021-04-02";String endTimeStr = "2021-04-11";Map<String,String> map = new HashMap<>();map.put("2021-04-01","2021-04-03");map.put("2021-04-04","2021-04-06");  // 7- 11map.put("2021-04-12","2021-04-14");map.put("2021-04-15","2021-04-17");map.put("2021-04-18","2021-04-20");map.put("2021-04-21","2021-04-23");log.info(">>>>>map:{}", JSON.toJSONString(map));// true表示有交叉,false表示无交叉Boolean checkFlag = null;// a. 判断开始时间、结束时间是否包含临近值;开始时间与结束时间一致时的处理Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();while (iterator.hasNext()){Map.Entry<String, String> next = iterator.next();String key = next.getKey();String value = next.getValue();if (startTimeStr.equals(key) || startTimeStr.equals(value)){checkFlag = true;break;}else if (endTimeStr.equals(key) || endTimeStr.equals(value)){checkFlag = true;break;}else if (startTimeStr.equals(endTimeStr)){DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");LocalDate startTime = LocalDate.parse(startTimeStr, df);LocalDate keyTime = LocalDate.parse(key, df);LocalDate valueTime = LocalDate.parse(value, df);if (startTime.isAfter(keyTime) && startTime.isBefore(valueTime)){checkFlag = true;break;}else {checkFlag = false;}}}log.info(">>>>>checkFlag:"+checkFlag);if (checkFlag != null){return checkFlag;}else {checkFlag = false;// b. 当指定开始时间、结束时间不包含map临近时间,且 开始时间不等于结束时间,适用下面方法计算是否交叉List<Map<String,String>> timeList = new ArrayList<>();timeList.add(map);//创建map存所有时间SortedMap<String,Integer> hashMap = new TreeMap<>();int ii = 1;hashMap.put(startTimeStr, ii);hashMap.put(endTimeStr, ii);for (Map<String, String> map2 : timeList) {ii++;Set<Map.Entry<String,String>> entrySet = map2.entrySet();for (Map.Entry<String, String> entry : entrySet) {String value = entry.getValue();hashMap.put(value, ii);String key = entry.getKey();hashMap.put(key, ii);}}//存最后值List<Integer> arrayList = new ArrayList<>();Set<Map.Entry<String,Integer>> entrySet = hashMap.entrySet();for (Map.Entry<String, Integer> entry : entrySet) {Integer value = entry.getValue();arrayList.add(value);}//不相等则两个时间有交集for (int j = 0; j < arrayList.size(); j++) {if ((j+1) >= arrayList.size()){checkFlag = false;log.info(">>>>>j+1 > arrayList.size()");break;}if(j%2==0){if(arrayList.get(j).intValue() != arrayList.get(j+1).intValue()){checkFlag = true;break;}}}}return checkFlag;}

校验时间段是否与已有时间段存在交叉算法相关推荐

  1. oracle查询某个时间段是否在另外一个时间段之内

    网上查了一下,好像没有写这个的,我来补充一下 定义: 要查的时间段1    begin1  end1 已有的时间段2    begin2  end2 需求:需要查时间段1是否在时间段2之内,或者是否有 ...

  2. win10虚拟内存怎么设置最好_淘宝直通车时间段怎么设置?哪个时间段开最好?...

    大家好,我是西瓜电商培训的子木.淘宝直通车一直都是商家们最受关注的一款推广工具,开过直通车的商家应该都知道在开直通车的时候是可以通过自己设定时间和金额的,所以很多商家可能会根据每天店铺的流量时间段来分 ...

  3. js 日期比较大小,js判断日期是否在区间内,js判断时间段是否在另外一个时间段内...

    /** * 日期解析,字符串转日期 * @param dateString 可以为2017-02-16,2017/02/16,2017.02.16 * @returns {Date} 返回对应的日期对 ...

  4. 对象已死?及其判断算法

    在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就 是要确定这些对象之中哪些还"存活"着,哪些已经"死去"("死 ...

  5. java中获取特定时间段_获取某一时间段特定星期几的所有日期(Java实现)

    废话不多说,还是直接上代码,有需要的童孩可以自行研究: /** * 获取某一时间段特定星期几的日期 * @author finder.zhou */ public class WeekDayUtil ...

  6. mysql 判断数据库时间段是否在传入的时间段周期内

    查询该时间段下任务. 传入开始时间为 2022-11-01 00:00:00 结束时间为 2022-11-04 23:59:59 数据库开始时间为 2022-11-02 00:00:00 结束时间为 ...

  7. VUE + Element-UI 表单校验input框数据已存在

    基础校验方式实现 html代码 <el-form-item label="值名称:" style="width: 80%" prop="valu ...

  8. mysql 某个时间段之前_MySql按日期时间段进行统计(前一天、本周、某一天、某个时间段)...

    在mysql数据库中,常常会遇到统计当天的内容. 例如,在user表中,日期字段为:log_time 统计当天 sql语句为: select * from user where date(log_ti ...

  9. 判断一个时间段是否与另一时间段相冲突

    下面判断的是 前两个参数段是否与后两个参数段重复 判断时间,如果是24小时制,就直接将这个时间段转换成分钟. int 的参数实际就是我将小时分钟一起转化成了分钟 <span style=&quo ...

最新文章

  1. ORACLE建视图 授权的 例子
  2. iOS之 NSTimer(一)
  3. 文档生成工具Sandcastle Help File Builder
  4. 线段检测网格检测(LCNN)的wireframe数据集标注、转换问题
  5. Kotlin中?和!!的区别
  6. Android访问WCF服务(使用json实现参数传递)
  7. java 双向链表_java集合类之LinkedList
  8. Java反序列化json内存溢出_fastJson与一起堆内存溢出'血案'
  9. 中文论文万能句型_收藏 | SCI 论文写作的万能句型(二)
  10. hdu 6149 Valley Numer II(01背包套状压dp)
  11. Java EnumMap工作原理及实现
  12. 机器学习—数据清洗总结
  13. python面向对象基础知识_面向对象的一些基本知识(python)
  14. 从开源硬件到开放型工业控制器
  15. 谷歌五笔输入法电脑版_不背字根,如何三天学会五笔输入法
  16. 写给很累的你:面对苦难,停止内耗
  17. android 内存分析工具ASAN 学习
  18. HDMI显示器为什么经常黑屏?有可能是HDMI线问题.
  19. service now 接口进行GET、POST
  20. windows2012R2安装python3.x版本报错0x80240017

热门文章

  1. python实现爬取非小号相关性(btc)数据
  2. 51单片机控制小舵机
  3. 实时即未来,车联网项目之电子围栏分析【六】
  4. 光耦p621引脚图_TOSHIBA光耦TLP系列的部分光耦的应用
  5. JAVA中接口存在的意义
  6. HDU 5984 Pocky
  7. lin通讯从节点同步间隔场_LIN模块介绍
  8. POI点数据获取与NOAA(美国海洋和大气管理局)气象数据获取
  9. 迅为国产开发板值得入手的三款开发板
  10. 连接正常(或者能上QQ)但是上不了网