Reputation: 12232
As a part of a input validation I was thinking whether this is a really valid cron expression and how it would executed:
0 0/0 * * * ?
Quartz validation returns true
org.quartz.CronExpression.isValidExpression("0 0/0 * * * ?")
So, does this run all the time, never, every hour or every minute...?
Upvotes: 2
Views: 5066
Reputation: 90457
You can find the result by using TriggerUtils.computeFireTimesBetween() :
try {
CronTriggerImpl cron = new CronTriggerImpl();
cron.setStartTime(new Date());
cron.setCronExpression("0 0/0 * * * ?");
BaseCalendar calendar = new BaseCalendar();
List<Date> result = TriggerUtils.computeFireTimesBetween(cron, calendar, new Date(),DateBuilder.futureDate(1, IntervalUnit.DAY));
for (Date date : result) {
System.out.println(date);
}
} catch (ParseException e) {
e.printStackTrace();
}
and the output is :
Thu Apr 05 18:00:00 CST 2012
Thu Apr 05 19:00:00 CST 2012
Thu Apr 05 20:00:00 CST 2012
Thu Apr 05 21:00:00 CST 2012
Thu Apr 05 22:00:00 CST 2012
Thu Apr 05 23:00:00 CST 2012
Fri Apr 06 00:00:00 CST 2012
Fri Apr 06 01:00:00 CST 2012
Fri Apr 06 02:00:00 CST 2012
Fri Apr 06 03:00:00 CST 2012
Fri Apr 06 04:00:00 CST 2012
.......................
So , 0 0/0 * * * ?
will run at every hour at 0 mins and 0 sec.
Upvotes: 7
Reputation: 340733
According to the CronTrigger Tutorial documentation:
/
- used to specify increments. For example, "0/15" in the seconds field means "the seconds 0, 15, 30, and 45". And "5/15" in the seconds field means "the seconds 5, 20, 35, and 50". You can also specify '/' after the '' character - in this case '' is equivalent to having '0' before the '/'. '1/3' in the day-of-month field means "fire every 3 days starting on the first day of the month".
This means 0
doesn't really make sense in this context. However CronExpression
seems to ignore it and simply discard that value, effectively treating this expressions as:
0 0 * * * ?
If you are curious, this is the code that discards invalid 0
value:
if ((incr == 0 || incr == -1) && val != ALL_SPEC_INT) {
if (val != -1) {
set.add(Integer.valueOf(val));
} else {
set.add(NO_SPEC);
}
return;
}
Upvotes: 3
Reputation: 10039
More information at CronTrigger documentation. My guess is that the expression 0 0/0 * * * ?
means once every hour (i.e. 0/0
does not denote every minute). However, if you need all the time (i.e. every second), you can use * * * * ? *
.
Upvotes: 1