3

平日(月曜日〜金曜日)のみ23:59:59に毎日の仕事をスケジュールしたい。

このcron式を使用します

"59 59 23?*月-金"、

しかし、出力には月曜日のトライプ値があります

水8月29日23:59:59ICT2012
木8月30日23:59:59ICT2012
金8月31日23:59:59ICT2012月9月3323:59:59ICT2012月9月0323:59:
59ICT
2012
月9月3日23:59:59ICT2012

火9月4日23:59:59ICT2012
水9月5日23:59:
59ICT2012木9月6日23:
59:59ICT2012金9月7日23:59:59ICT2012

表現が間違っていますか?助けが必要。

私は特定の日付、ここではコードをループしてこの出力を取得しています

`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);
        }

}`
4

1 に答える 1

2

問題はあなたのルールにもクォーツにもありません、それは大丈夫です、そしてあなたはそれを使うかもしれません。

問題はテストコードにあります。

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

startDate有効な日付ではなく、との間のすべての日に反復しますendDate

ループコンテンツは無効な日についても呼び出され、それらの2つの無効な日のそれぞれについて、現在の日付の後の「次の有効な時間」は月曜日です。つまり、月曜日は3回ありますが、これは完全に論理的です。

したがって、あなたのログ。

于 2012-08-29T12:09:17.577 に答える