Fixed day offset bug: in java.util.Calendar, DAY_OF_WEEK values start with 1, but in the cron expression they start with 0. Also, replaced an occurrence of Calendar.HOUR (based on 12-hour clock) with the Calendar.HOUR_OF_DAY value (based on 24-hour clock) to prevent false overflow.

This commit is contained in:
Mark Fisher
2008-10-09 01:22:23 +00:00
parent 46e76afa53
commit 9140cf0134
2 changed files with 7 additions and 3 deletions

View File

@@ -93,14 +93,17 @@ public class CronSequenceGenerator {
int second = calendar.get(Calendar.SECOND);
int minute = calendar.get(Calendar.MINUTE);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
// the DAY_OF_WEEK values in java.util.Calendar start with 1 (Sunday),
// but in the cron pattern, they start with 0, so we subtract 1 here
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
int month = calendar.get(Calendar.MONTH);
month = findNext(months, month, 12, calendar, Calendar.MONTH, Calendar.DAY_OF_MONTH, Calendar.HOUR_OF_DAY,
Calendar.MINUTE, Calendar.SECOND);
dayOfMonth = findNextDay(calendar, daysOfMonth, dayOfMonth, daysOfWeek, dayOfWeek, 366);
hour = findNext(hours, hour, 24, calendar, Calendar.HOUR, Calendar.MINUTE, Calendar.SECOND);
hour = findNext(hours, hour, 24, calendar, Calendar.HOUR_OF_DAY, Calendar.MINUTE, Calendar.SECOND);
minute = findNext(minutes, minute, 60, calendar, Calendar.MINUTE, Calendar.SECOND);
second = findNext(seconds, second, 60, calendar, Calendar.SECOND);
@@ -175,7 +178,7 @@ public class CronSequenceGenerator {
String[] fields = StringUtils.delimitedListToStringArray(expression, " ");
if (fields.length != 6) {
throw new IllegalArgumentException(String.format("Expression must consist of 6 fields (found %d in %s)",
fields.length, fields));
fields.length, expression));
}
setNumberHits(seconds, fields[0], 60);
setNumberHits(minutes, fields[1], 60);

View File

@@ -31,6 +31,7 @@ public class CronTrigger implements Trigger {
/**
* Create a trigger for the given cron expression.
* See {@link CronSequenceGenerator}.
*/
public CronTrigger(String expression) throws IllegalArgumentException {
this.cronSequenceGenerator = new CronSequenceGenerator(expression);