<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.4.0</version></dependency><!--解析cron表达式--><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.2</version></dependency>
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import org.quartz.CronExpression;
import java.text.ParseException;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.stream.Collectors;public class CronUtil {//获取quartz能解析的表达式public static String genCron(int type, String hour, String dayOfMon,String month, String dayOfWeek,String everydayOther,String monthlyOther) {String cron = "";switch (type) {case 0:// 每年month月的dayOfMonth号的hour点执行cron = "0 0 " + hour + " " + dayOfMon + " " + month + " ?";break;case 1:// 每月的dayOfMon号的hour点执行cron = "0 0 " + hour + " " + dayOfMon + " * ?";break;case 2:// 每周的dayOfWeek的hour时执行cron = "0 0 " + hour + " ? * " + dayOfWeek;break;case 3:// 每天的hour时执行cron = "0 0 " + hour + " ? * *";break;case 4:// 每隔几天的hour时执行cron = "0 0 " + hour + " */" + everydayOther + " * ?";break;case 5:// 每隔几月的dayOfMon号的hour点cron = "0 0 " + hour + " " + dayOfMon + " "+ monthlyOther + " ?";break;}return cron;}//获取Linux的执行表达式public static String genLinuxCron(int type, String hour, String dayOfMon,String month, String dayOfWeek,String everydayOther,String monthlyOther,String weeklyOther) {String cron = "";switch (type) {case 0:// 每年month月的dayOfMonth号的hour点执行cron = "00 " + hour + " " + dayOfMon + " " + month + " *";break;case 1:// 每月的dayOfMon号的hour点执行cron = "00 " + hour + " " + dayOfMon + " * *";break;case 2:// 每周的dayOfWeek的hour时执行cron = "00 " + hour + " * * " + getWeekly(dayOfWeek);break;case 3:// 每天的hour时执行cron = "00 " + hour + " * * *";break;case 4:// 每隔几天的hour时执行cron = "00 " + hour + " */" + everydayOther + " * *";break;case 5:// 每隔几月的dayOfMon号的hour点cron = "00 " + hour + " " + dayOfMon + " "+ monthlyOther + " *";break;case 6:// 每隔几周的dayOfWeek的hour时执行cron = weeklyOther + " 00 " + hour + " * * " + getWeekly(dayOfWeek);break;}return cron;}//获取周详细日期private static String getWeekly(String dayOfWeek){String[] split = dayOfWeek.split(StrUtil.COMMA);StringBuilder stringBuilder = new StringBuilder();Arrays.stream(split).map(x -> stringBuilder.append(Integer.parseInt(x) - 1).append(StrUtil.COMMA)).collect(Collectors.toList());return stringBuilder.substring(0,stringBuilder.length()-1);}//获取月份详情private static String getMonthly(String monthlyOther,String startTime){StringBuilder stringBuilder = new StringBuilder();int num = Integer.parseInt(monthlyOther);DateTime parse = DateUtil.parse(startTime);int startMonth = parse.month()+1;int month = parse.month()+1;stringBuilder.append(month).append(StrUtil.COMMA);for (int i = 0; ; i++) {month=month+num;if (month>12){month=month-12;if (month!=startMonth)stringBuilder.append(month).append(StrUtil.COMMA);if (month>=startMonth)break;month=month+12;}if (month<=12) stringBuilder.append(month).append(StrUtil.COMMA);}return stringBuilder.substring(0,stringBuilder.length()-1);}public static LinkedHashSet<String> getAllTheTimeInAYear(String cron,Date startTime){LinkedHashSet<String> set = new LinkedHashSet<>();try {CronExpression exp = new CronExpression(cron);Date oldTime = DateUtil.offsetMonth(startTime, -12).toJdkDate();DateTime dateTime = DateUtil.offsetMonth(startTime, 12);for (int i = 1;; i++) {oldTime = exp.getNextValidTimeAfter(oldTime);if (DateUtil.compare(oldTime,dateTime)>0) break;if (DateUtil.compare(oldTime,startTime)>0 || DateUtil.compare(oldTime,startTime)==0)set.add(DateUtil.format(oldTime,DateUtils.patternE));}} catch (ParseException e) {return null;}return set;}//每隔多少天public static LinkedHashSet<String> getAllTheTimeInAYearOfDay(Date startTime,String everydayOther){LinkedHashSet<String> set = new LinkedHashSet<>();if (DateUtil.compare(new Date(),startTime)<=0) set.add(DateUtil.format(startTime,DateUtils.patternE));DateTime dateTime = DateUtil.offsetMonth(startTime, 12);for (int i = 0; ; i++) {startTime = DateUtil.offsetDay(startTime, Integer.parseInt(everydayOther));if (DateUtil.compare(startTime,dateTime)>0) break;set.add(DateUtil.format(startTime,DateUtils.patternE));}return set;}//每隔多少周public static LinkedHashSet<String> getAllTheTimeInAYearOfWeekly(Date startTime,String weeklyOther,String weeklyDay){LinkedHashSet<String> set = new LinkedHashSet<>();HashSet<Integer> hashSet = new HashSet<>();DateTime oldTime = DateUtil.offsetMonth(startTime, -12);DateTime dateTime = DateUtil.offsetMonth(startTime, 12);String[] split = weeklyDay.split(StrUtil.COMMA);//2,3,4Arrays.stream(split).map(x->hashSet.add(Integer.parseInt(x))).collect(Collectors.toList());Integer integer = hashSet.stream().min(Integer::compare).get();for (int i = 0; ; i++) {oldTime = DateUtil.offsetDay(oldTime, 1);if (hashSet.contains(DateUtil.dayOfWeek(oldTime))){if (DateUtil.compare(oldTime,dateTime)>0) break;if (DateUtil.compare(oldTime,startTime)>=0) set.add(DateUtil.format(oldTime,DateUtils.patternE));}if (DateUtil.dayOfWeek(oldTime)== integer)oldTime = DateUtil.offsetWeek(oldTime, Integer.parseInt(weeklyOther)-1);}return set;}public static void main(String[] args) {HashSet<Integer> hashSet = new HashSet<>();hashSet.add(111);hashSet.add(21);hashSet.add(13);hashSet.add(12);hashSet.add(16);hashSet.add(31);Integer integer = hashSet.stream().max(Integer::compare).get();String[] split = "1,3,5,6".split(StrUtil.COMMA);StringBuilder stringBuilder = new StringBuilder();Arrays.stream(split).map(x -> stringBuilder.append(Integer.parseInt(x) - 1).append(StrUtil.COMMA)).collect(Collectors.toList());Arrays.stream(split).map(x->hashSet.add(Integer.parseInt(x))).collect(Collectors.toList());DateTime offsetWeek = DateUtil.offsetWeek(new Date(), 2);int dayOfWeek = DateUtil.dayOfWeek(new Date());System.out.println(getMonthly("2", "2020-03-25 14:00"));//生成String x = genCron(5, "10","1", "1", "1", "2", "2");System.out.println(x);//解析try {CronExpression exp = new CronExpression("0 0 2,4,5 2,25 */2 ? ");Date date = new Date();Date startDate = exp.getNextValidTimeAfter(date);
//            DateTime dateTime = DateUtil.offsetMonth(startDate, 12);for (int i = 1;i<10; i++) {startDate = exp.getNextValidTimeAfter(startDate);
//                if (DateUtil.compare(date,dateTime)>0)break;System.out.println(DateUtil.format(startDate, DatePattern.NORM_DATETIME_PATTERN));}} catch (ParseException e) {e.printStackTrace();}}
}

生成并解析cron表达式相关推荐

  1. C#/.NET 解析Cron表达式,根据Cron表达式获取最近执行时间

    Cron表达式定义及详情 请参考https://blog.csdn.net/HybridTheory_/article/details/88382442 使用C#解析Cron表达式,得到执行时间 cl ...

  2. java 解析cron_Java 解析Cron表达式,获取最近运行时间

    摘要:Java 解析Cron表达式,获取最近运行时间 方法一 package com.odj.customer.index.controller; import java.text.ParseExce ...

  3. Java自定义Cron,解析Cron表达式

    Cron表达式中周和数字是不对应的 周一:2:周二:3:周三:4:周四:5:周五:6:周六:7:周日:1 pom文件必须依赖 <dependency><groupId>com. ...

  4. spring cron表达式及解析过程

    1.cron表达式 cron表达式是用来配置spring定时任务执行时间的字符串,由5个空格分隔成的6个域构成,格式如下: {秒}  {分}  {时}  {日}  {月}  {周} 每一个域的含义解释 ...

  5. Oracle 解析cron定时表达式

    Oracle 解析cron表达式 1.概述 2.步骤 2.1 规范cron表达式 2.1.1 格式详解 2.1.2 规范cron字符串 2.2 根据空格切割cron字符串 2.3 根据','分割每一个 ...

  6. quartz cron表达式在线生成

    最近使用了quartz定时器,有感于起cron表达式有点复杂,且无法实时判断定时时间是否正确,因此写了个在线表达式及根据表达式获得前10次执行时间. 访问地址如下:http://cron.g2room ...

  7. SpringBoot中cron表达式周一到周五运行设置

    SpringBoot中cron表达式周一到周五运行设置 源码级别解答 源码级别解答 周一到周五其实设置的是1-5(可以设置英文MON-FRI),并不是其它文章说的2-6,以下是两个不同版本的sprin ...

  8. spring boot 推理cron 表达式【只支持6位或7位的cron表达式】

    /*** @description: 解析cron表达式转化为时间 yyyy-MM-dd HH:mm:ss* @author: chongmengzhao* @date: 2020/3/14 10:2 ...

  9. 在线Cron表达式解析工具使用说明

    在日常Java开发中,常常会用到quartz定时器,而定时器的Cron表达式比较难以理解,尤其是复杂的表达式,较难分析出是否周期频率正确. 这里,云码网推出Cron在线解析工具,方便大家在线生成Cro ...

  10. AWS Lambda中的Cron表达式解析器

    目录 介绍 解释代码 解析函数 特别案例 AWS设置 AWS Lambda AWS API网关 AWS Amplify 下载 index.html - 884 B​​​​​​​ 下载 index.js ...

最新文章

  1. 从0到1,苏宁API网关的演进之路
  2. expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.spring
  3. 利用onSaveInstanceState()方法保存Activity状态
  4. 2017.4.14-afternoon
  5. (转)使用mysqladmin ext了解MySQL运行状态
  6. 职称计算机应用能力考试模拟题,2016年职称计算机考试模拟题
  7. oracle 操作树大全,oracle树查询语句
  8. silverlight中如何将string(字符串)写入Resource(资源)?
  9. PyTorch深度学习实践05
  10. zookeeper可视化监控工具_Redis 的可视化监控工具 Redislive 简单使用教程
  11. java数组复制的方式和效率比较
  12. 音响上的英文是什么意思_鞋盒上的字母后缀 是什么意思?(上)
  13. unity 热更新:C#与Lua相互调用(转载)
  14. unity3d发布linux版本_密码管理器 1Password 发布第一个 Linux 测试版本
  15. 117.填充同一层的兄弟节点II
  16. oracle bitmap btree 索引,oracle之bitmap索引
  17. php定义一个矩形类rectangle,Python3面向对象—点和矩形类
  18. firefox android 去更新,Firefox Android移动版更新
  19. 单片机转向灯c语言编程,单片机汇编语言编程:汽车转向灯控制器
  20. DOTCPP:有关1148心得

热门文章

  1. 计算机通信网络学什么软件,通信工程专业需要用到的电脑软件有哪些
  2. eda多功能数字钟课程设计_EDA电子钟多功能数字时钟课程设计(含代码)[优秀]...
  3. 汇编语言王爽老师第四版(寄存器解读与实验二)
  4. c语言程序设计辅导资料pdf,C语言程序设计辅导资料(修订版).pdf
  5. 16 岁高中生成功将 Linux 移植到 iPhone,并贴出详细指南
  6. MT4红绿柱黄白线双线MACD指标
  7. Hadoop_23_oozie
  8. 最好用的 5 款 React 富文本编辑器
  9. 创建My SQL 数据库
  10. visio2013安装包及破解工具KMS