java 解析入参里的cron表达式,修改周时间
文章目录
- 前言
- 一、java 解析入参里的cron表达式,修改周时间
- 二、使用步骤
- 1.示例
- 总结
前言
一、java 解析入参里的cron表达式,修改周时间
示例: 第一种: 0 0 0,16 ? * 0,1
第2种 0 0 0,16 ? * 1-7
第3种 0 0 0,16 ? * ?
第4种 0 0 0,16 ? * *
二、使用步骤
1.示例
使用场景:
周传的是1-7 形式, 则对表达式里的周进行减1 ,
周传的是 0,1,2 形式, 则对周的值进行加1
周传的是? 或者 *, 则不处理
String modifiedCron = convertWeekDayToQuartz(cronExpression);/*** 转换星期字段:1=周一 → 2(Quartz的周一),7=周日 → 1(Quartz的周日)** @param cronExpression 原始Cron表达式(星期按1=周一)* @return 转换后的Cron表达式(适配Quartz)*/public static String convertWeekDayToQuartz(String cronExpression) {String[] parts = cronExpression.split(" ");if (parts.length < 6) {throw new IllegalArgumentException("Invalid Cron expression");}String dayOfWeek = parts[5];if (dayOfWeek.matches("[1-7]")) {// Quartz: SUN=1, MON=2, ..., SAT=7// Target: MON=1, TUE=2, ..., SUN=7int day = Integer.parseInt(dayOfWeek);// SUN(7)→1, MON(1)→2, ..., SAT(6)→7int quartzDay = day == 7 ? 1 : day + 1;parts[5] = String.valueOf(quartzDay);} else if (dayOfWeek.contains("-")) {// 处理范围(如 "1-5" → "2-6")String[] range = dayOfWeek.split("-");int start = Integer.parseInt(range[0]);int end = Integer.parseInt(range[1]);parts[5] = (start == 7 ? 1 : start + 1) + "-" + (end == 7 ? 1 : end + 1);} else if (dayOfWeek.contains(",")) {// 处理逗号分隔(如 "1,3,5" → "2,4,6")String[] days = dayOfWeek.split(",");StringBuilder sb = new StringBuilder();for (String d : days) {int day = Integer.parseInt(d);sb.append(day == 7 ? "1" : day + 1).append(",");}parts[5] = sb.substring(0, sb.length() - 1);}return String.join(" ", parts);}
总结
无