|
|
|
|
@ -19,16 +19,7 @@ package com.xxl.job.admin.core.cron;
|
|
|
|
|
|
|
|
|
|
import java.io.Serializable;
|
|
|
|
|
import java.text.ParseException;
|
|
|
|
|
import java.util.Calendar;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.Iterator;
|
|
|
|
|
import java.util.Locale;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.SortedSet;
|
|
|
|
|
import java.util.StringTokenizer;
|
|
|
|
|
import java.util.TimeZone;
|
|
|
|
|
import java.util.TreeSet;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Provides a parser and evaluator for unix-like cron expressions. Cron
|
|
|
|
|
@ -191,13 +182,11 @@ import java.util.TreeSet;
|
|
|
|
|
* </ul>
|
|
|
|
|
* </p>
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @author Sharada Jambula, James House
|
|
|
|
|
* @author Contributions from Mads Henderson
|
|
|
|
|
* @author Refactoring from CronTrigger to CronExpression by Aaron Craven
|
|
|
|
|
*
|
|
|
|
|
* <p>
|
|
|
|
|
* Borrowed from quartz v2.3.1
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
public final class CronExpression implements Serializable, Cloneable {
|
|
|
|
|
|
|
|
|
|
@ -217,6 +206,7 @@ public final class CronExpression implements Serializable, Cloneable {
|
|
|
|
|
|
|
|
|
|
protected static final Map<String, Integer> monthMap = new HashMap<String, Integer>(20);
|
|
|
|
|
protected static final Map<String, Integer> dayMap = new HashMap<String, Integer>(60);
|
|
|
|
|
|
|
|
|
|
static {
|
|
|
|
|
monthMap.put("JAN", 0);
|
|
|
|
|
monthMap.put("FEB", 1);
|
|
|
|
|
@ -265,8 +255,7 @@ public final class CronExpression implements Serializable, Cloneable {
|
|
|
|
|
*
|
|
|
|
|
* @param cronExpression String representation of the cron expression the
|
|
|
|
|
* new object should represent
|
|
|
|
|
* @throws java.text.ParseException
|
|
|
|
|
* if the string expression cannot be parsed into a valid
|
|
|
|
|
* @throws ParseException if the string expression cannot be parsed into a valid
|
|
|
|
|
* <CODE>CronExpression</CODE>
|
|
|
|
|
*/
|
|
|
|
|
public CronExpression(String cronExpression) throws ParseException {
|
|
|
|
|
@ -283,8 +272,7 @@ public final class CronExpression implements Serializable, Cloneable {
|
|
|
|
|
* Constructs a new {@code CronExpression} as a copy of an existing
|
|
|
|
|
* instance.
|
|
|
|
|
*
|
|
|
|
|
* @param expression
|
|
|
|
|
* The existing cron expression to be copied
|
|
|
|
|
* @param expression The existing cron expression to be copied
|
|
|
|
|
*/
|
|
|
|
|
public CronExpression(CronExpression expression) {
|
|
|
|
|
/*
|
|
|
|
|
@ -1067,14 +1055,28 @@ public final class CronExpression implements Serializable, Cloneable {
|
|
|
|
|
int max = -1;
|
|
|
|
|
if (stopAt < startAt) {
|
|
|
|
|
switch (type) {
|
|
|
|
|
case SECOND : max = 60; break;
|
|
|
|
|
case MINUTE : max = 60; break;
|
|
|
|
|
case HOUR : max = 24; break;
|
|
|
|
|
case MONTH : max = 12; break;
|
|
|
|
|
case DAY_OF_WEEK : max = 7; break;
|
|
|
|
|
case DAY_OF_MONTH : max = 31; break;
|
|
|
|
|
case YEAR : throw new IllegalArgumentException("Start year must be less than stop year");
|
|
|
|
|
default : throw new IllegalArgumentException("Unexpected type encountered");
|
|
|
|
|
case SECOND:
|
|
|
|
|
max = 60;
|
|
|
|
|
break;
|
|
|
|
|
case MINUTE:
|
|
|
|
|
max = 60;
|
|
|
|
|
break;
|
|
|
|
|
case HOUR:
|
|
|
|
|
max = 24;
|
|
|
|
|
break;
|
|
|
|
|
case MONTH:
|
|
|
|
|
max = 12;
|
|
|
|
|
break;
|
|
|
|
|
case DAY_OF_WEEK:
|
|
|
|
|
max = 7;
|
|
|
|
|
break;
|
|
|
|
|
case DAY_OF_MONTH:
|
|
|
|
|
max = 31;
|
|
|
|
|
break;
|
|
|
|
|
case YEAR:
|
|
|
|
|
throw new IllegalArgumentException("Start year must be less than stop year");
|
|
|
|
|
default:
|
|
|
|
|
throw new IllegalArgumentException("Unexpected type encountered");
|
|
|
|
|
}
|
|
|
|
|
stopAt += max;
|
|
|
|
|
}
|
|
|
|
|
@ -1280,7 +1282,7 @@ public final class CronExpression implements Serializable, Cloneable {
|
|
|
|
|
day = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
|
|
|
|
|
day -= lastdayOffset;
|
|
|
|
|
|
|
|
|
|
java.util.Calendar tcal = java.util.Calendar.getInstance(getTimeZone());
|
|
|
|
|
Calendar tcal = Calendar.getInstance(getTimeZone());
|
|
|
|
|
tcal.set(Calendar.SECOND, 0);
|
|
|
|
|
tcal.set(Calendar.MINUTE, 0);
|
|
|
|
|
tcal.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
|
|
@ -1316,7 +1318,7 @@ public final class CronExpression implements Serializable, Cloneable {
|
|
|
|
|
t = day;
|
|
|
|
|
day = daysOfMonth.first();
|
|
|
|
|
|
|
|
|
|
java.util.Calendar tcal = java.util.Calendar.getInstance(getTimeZone());
|
|
|
|
|
Calendar tcal = Calendar.getInstance(getTimeZone());
|
|
|
|
|
tcal.set(Calendar.SECOND, 0);
|
|
|
|
|
tcal.set(Calendar.MINUTE, 0);
|
|
|
|
|
tcal.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
|
|
@ -1580,9 +1582,9 @@ public final class CronExpression implements Serializable, Cloneable {
|
|
|
|
|
* @param hour the hour to set
|
|
|
|
|
*/
|
|
|
|
|
protected void setCalendarHour(Calendar cal, int hour) {
|
|
|
|
|
cal.set(java.util.Calendar.HOUR_OF_DAY, hour);
|
|
|
|
|
if (cal.get(java.util.Calendar.HOUR_OF_DAY) != hour && hour != 24) {
|
|
|
|
|
cal.set(java.util.Calendar.HOUR_OF_DAY, hour + 1);
|
|
|
|
|
cal.set(Calendar.HOUR_OF_DAY, hour);
|
|
|
|
|
if (cal.get(Calendar.HOUR_OF_DAY) != hour && hour != 24) {
|
|
|
|
|
cal.set(Calendar.HOUR_OF_DAY, hour + 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|