2012-08-29 16 views
3

我只想在平日(週一至週五)的23:59:59安排日常工作。Quartz cron計劃輸出與預期不符

我用這個cron表達式

「59 59 23?*週一至週五」,

但輸出有牛肚價值週一

週三08月29日23:59:59 ICT 2012
週四8月30日23:59:59 ICT 2012
週五8月31日23:59:59 ICT 2012
週一03九月23:59:59 ICT 2012
週一03九月23:59:59 ICT 20 12
週一03九月23:59:59 ICT 2012

星期二04九月23:59:59 ICT 2012
週三9月5日23:59:59 ICT 2012
週四06九月23:59:59 ICT 2012
Fri Sep 07 23:59:59 ICT 2012

是表達錯誤嗎?需要幫忙。

我正在通過特定的日期越來越被循環這個輸出,這裏的代碼

`try { 
    CronExpression ce = new CronExpression(59 59 23 ? * MON-FRI); 

    Calendar start = Calendar.getInstance(); 
    start.setTime(new Date()); 

    Calendar end = Calendar.getInstance(); 
    Date endDate = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy").parse("Fri Sep 29 23:59:59 ICT 2012"); 
      end.setTime(endDate); 

    for (; !start.after(endDate); start.add(Calendar.DATE, 1)) { 
     Date current = start.getTime(); 

     System.out.println(ce.getNextValidTimeAfter(current)); 

    } 
} catch (ParseException ex) { 
      Logger.getLogger(HelloJob.class.getName()).log(Level.SEVERE, null, ex); 
     } 

}` 
+2

你正在使用哪個'cron'庫? –

+0

i,m使用石英2.1.6 – user1490927

+0

你的規則對Quartz來說看起來很好。你是如何得到這個輸出的? –

回答

2

的問題是不是在你統治或石英,它的確定,你可以用它。

問題出在您的測試代碼中。

for (; !start.after(endDate); start.add(Calendar.DATE, 1)) { 
    Date current = start.getTime(); 
    System.out.println(ce.getNextValidTimeAfter(current)); 
} 

你不是迭代上的有效日期,但在startDateendDate之間的所有日子。

循環內容也針對無效日期被調用,對於這兩個無效日期中的每一天,當前日期之後的「下一個有效時間」是星期一。所以你星期一有三次,那完全是邏輯。

因此你的日誌。

+0

感謝您的解釋。 – user1490927

+0

不客氣:) –