根据多个成对的cron表达式生成的时间段,合并
场景:数据库一张表,有个startcron 和endcron 两个字段,根据表达式计算今天的所有时间段。
例:startcron :0 30 20 ? * * endcron :0 30 21 ? * *,现在时间20:19 所以得到的时间是20:30~21:30
由于有多个数据,
0 0 9 ? * * 0 0 10 ? * *
0 30 20 ? * * 0 30 20 ? * *
0 0 21 ? * * 0 0 22 ? * *
0 30 20 ? * * 0 30 22 ? * * 等
Map<Date,Date> map = new HashMap<>();
Set<Date> set = map.keySet();
Date[] dateArray = new Date[set.size()];
set.toArray(dateArray);
if(set.size()==0){
map.put(starttime, endtime);
}else{
boolean flag = true;
for(int j =0;j<dateArray.length;j++){
if(flag){
Date date= dateArray[j];
if(!(map.get(date).beforestarttime) || date.after(endtime))){
Date minDate = date.before(starttime)?date:starttime;
Date maxDate = map.get(date).after(endtime)?map.get(date):endtime;
map.remove(date);
map.put(minDate, maxDate);
flag = false;
}
}
}
if(flag){
map.put(starttime, endtime);
}
}
主要思路: 两个时段 A-B C-D
map,key放startime value放endtime
判断只要相交,if(!(map.get(date).before(starttime) || date.after(endtime)))
就取四个时间的最大值和最小值,Date minDate = date.before(starttime)?date:starttime;
Date maxDate = map.get(date).after(endtime)?map.get(date):endtime;
先移除map中原来的,map.remove(date);
再放入最大值和最小值 map.put(minDate, maxDate);
设置了一个flag,初始值为true,只要有交换就改变flag,,遍历map,若flag为true,代表没有合并,就表示该时段独立的。map.put(starttime, endtime);
根据多个成对的cron表达式生成的时间段,合并的更多相关文章
- quartz Cron表达式生成详解
简介 Cron作为一个Unix工具,已经存在很长一段时间了,用于实现任务调度的功能.CronTrigger类基于Cron而来. CronTrigger CronTriggers往往比SimpleTri ...
- 在线cron表达式生成工具
http://cron.qqe2.com/ 名称 是否必须 允许值 特殊字符 秒 是 0-59 , - * / 分 是 0-59 , - * / 时 是 0-23 , - * / 日 是 1-31 , ...
- 定时任务 Cron表达式
Cron表达式由6~7项组成,中间用空格分开.从左到右依次是: 秒.分.时.日.月.周几.年(可省略) Cron表达式的值可以是数字,也可以是以下符号: "*":所有值都匹配 &q ...
- [quartz] - Cron表达式举例
Quartz是一个任务调度框架.比如你遇到这样的问题 想每月25号,信用卡自动还款 想每年2月14日自己给当年暗恋女神发一封匿名贺卡 想每隔1小时,备份一下自己的SpringCloud学习笔记到云盘 ...
- quartz定时任务cron表达式讲解及翻译成现实语言的插件的使用详解
cron表达式讲解 参见该网址: https://www.cnblogs.com/GarfieldTom/p/3746290.html cron表达式只有专业技术人员才看得懂,普通人不知道表达式是什么 ...
- Cron表达式简单学习
CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表.CronTrigger,你可以指定触 ...
- Cron表达式说明
CronTrigger CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表. CronT ...
- QuartZ Cron表达式在java定时框架中的应用
CronTrigger CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表. CronT ...
- quartz Cron表达式一分钟教程
CronTrigger CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表.CronTr ...
随机推荐
- python爬虫遇到会话存储sessionStorage
记录一次爬虫生成链接过程中遇到的sessionStorage存储数据 1.简介 sessionStorage 是HTML5新增的一个会话存储对象,用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标 ...
- Hbase入门(四)——表结构设计-RowKey
Hbase的表结构设计与关系型数据库有很多不同,主要是Hbase有Rowkey和列族.timestamp这几个全新的概念,如何设计表结构就非常的重要. 创建 Hbase就是通过 表 Rowkey 列族 ...
- Kafka 学习笔记之 Kafka0.11之producer/consumer(Scala)
Kafka0.11之producer/consumer(Scala): KafkaConsumer: import java.util.Properties import org.apache.kaf ...
- asp.net core 自定义中间件【以dapper为例】
在asp.net core开发中.按照国际案例开始.都是先在Nuget安装XXX包.比如我们今天要用到的Dapper nuget里面安装Dapper 1.然后新建一个类文件DapperExtensio ...
- jQuery插件编写学习中遇见的问题--attr prop
个人博客: https://chenjiahao.xyz 最近在学习jQuery的插件的编写,有两种方式,$.fn.extend以及$.extend,一种是作用于对象原型上,一种是直接作用于jQuer ...
- 52个有效方法(1) - 了解Objective-C语言的起源
Objective-C语言使用的是"消息结构"而非"函数调用" "消息结构"和"函数调用"之间的区别 "消息结 ...
- A-05 前向选择法和前向梯度法
目录 前向选择法和前向梯度法 一.前向选择法 1.1 余弦相似度求投影 1.2 举例 1.3 前向选择法优缺点 1.3.1 优点 1.3.2 缺点 二.前向梯度法 2.1 举例 2.2 前向梯度法优缺 ...
- 编程杂谈——使用emplace_back取代push_back
近日在YouTube视频上看到关于vector中emplace_back与push_back区别的介绍,深感自己在现代C++中还是有不少遗漏的知识点,遂写了段代码,尝试比较两者的差别. 示例代码 #i ...
- BZOJ [Scoi2015]情报传递
Description 奈特公司是一个巨大的情报公司,它有着庞大的情报网络.情报网络中共有n名情报员.每名情报员口J-能有 若T名(可能没有)下线,除1名大头日外其余n-1名情报员有且仅有1名上线.奈 ...
- RF中for循环
robotframework支持FOR循环语句,语法和Python的语法基本相同,但robotframework中,“FOR”关键字前面需要增加一个“:”,写成“:FOR”,其它与Python的语法相 ...