我正在使用EJB 3.1。在以下代码中,我尝试创建一个年度重复计时器:
ScheduleExpression scheduleExpression = new ScheduleExpression();
Date now = new Date();
scheduleExpression.start(now);
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
scheduleExpression.minute(calendar.get(Calendar.MINUTE));
scheduleExpression.hour(calendar.get(Calendar.HOUR_OF_DAY));
scheduleExpression.dayOfMonth(calendar.get(Calendar.DAY_OF_MONTH));
scheduleExpression.month(calendar.get(Calendar.MONTH));
但这是行不通的,实际上行为是随机的(在某些重复工作中,在另一种情况下则不行)。
奇怪的是,我也每月重复一次(请参阅以下代码),并且它正在工作。
ScheduleExpression scheduleExpression = new ScheduleExpression();
Date now = new Date();
scheduleExpression.start(now);
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
scheduleExpression.minute(calendar.get(Calendar.MINUTE));
scheduleExpression.hour(calendar.get(Calendar.HOUR_OF_DAY));
scheduleExpression.dayOfMonth(calendar.get(Calendar.DAY_OF_MONTH));
任何的想法?
对于Java中的公历日历实现,月是从零开始的,例如Calendar的javadocs中所述:
阳历和朱利安历法中的第一个月是1月,0。最后一个取决于一年中的月份数。
ScheduleExpression中的月份是基于一个月的:
一个月:一年内一个或多个月
允许值:
- [1,12]
- {“ Jan”,“ Feb”,“ Mar”,“ Apr”,“ May”,“ Jun”,“ Jul”,“ Aug”,“ Sep”,“ Oct”,“ Nov”,Dec”}
因此,构造ScheduleExpression的下面的代码是month过去一个月(或在January的情况下,值0为无效参数,但似乎没有严格规定无效的行为)。
Date now = new Date();
...
scheduleExpression.dayOfMonth(calendar.get(Calendar.DAY_OF_MONTH));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句