文章目錄
- 前言
- 一、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);}
總結
無