请考虑以下代码
String pattern = "*/17 * * * *";
Date d = new Date();
for (int i = 0; i < 10; i++) {
System.out.println("Start: " + d + ", " + (d = new Predictor(pattern, d).nextMatchingDate()));
}
这将输出以下示例(我将我没想到的时间放在括号内):
Start: Tue Jun 11 12:54:48 GMT+02:00 2013, Tue Jun 11 (13:00:00) GMT+02:00 2013
Start: Tue Jun 11 13:00:00 GMT+02:00 2013, Tue Jun 11 13:17:00 GMT+02:00 2013
Start: Tue Jun 11 13:17:00 GMT+02:00 2013, Tue Jun 11 13:34:00 GMT+02:00 2013
Start: Tue Jun 11 13:34:00 GMT+02:00 2013, Tue Jun 11 13:51:00 GMT+02:00 2013
Start: Tue Jun 11 13:51:00 GMT+02:00 2013, Tue Jun 11 (14:00:00) GMT+02:00 2013
Start: Tue Jun 11 14:00:00 GMT+02:00 2013, Tue Jun 11 14:17:00 GMT+02:00 2013
Start: Tue Jun 11 14:17:00 GMT+02:00 2013, Tue Jun 11 14:34:00 GMT+02:00 2013
Start: Tue Jun 11 14:34:00 GMT+02:00 2013, Tue Jun 11 14:51:00 GMT+02:00 2013
Start: Tue Jun 11 14:51:00 GMT+02:00 2013, Tue Jun 11 (15:00:00) GMT+02:00 2013
Start: Tue Jun 11 15:00:00 GMT+02:00 2013, Tue Jun 11 15:17:00 GMT+02:00 2013
尽管该模式配置为匹配可被 17 整除的分钟,但如果这是描述它的正确方式,则预测器会认为精确的小时(13:00、14:00、15:00..等)是有效的下一个匹配日期!
我的问题是:
- 这种行为有效吗?如果是,那么它为什么有效?
- 我怎样才能防止这种行为?我的意思是,如果时间字段(即分钟、小时、天、工作日)不能被其最大值(即 60、24、30 或 31, 7) ?
- unix cron调度实际上是这种情况吗?
谢谢你。