2012-03-14 7 views
2

私のprevious questionに続いて、私はCronExpressionをサブクラス化し、getSetをpublicに変更しました。このメソッドはint型を取得し、私はcron式を含むStringを持っています。この表現に関する情報を取得するにはどうすればいいですか(hour \ days \ etc)? getSetメソッドに渡す必要があるのは何ですか?あるいは別の方法を使うべきでしょうか?これは私にとっては非常に不明です。Quartz CronExpressionはすべての式パラメータを取得します。

答えて

4

CronExpressionとの問題は、それを述べていても:

はUnixライクなcronの式のパーサと評価を提供します。

APIは、あいまいであり、protectedメソッドの下に隠されています。これまでのところ、汎用のCRON式パーサではありません。しかし、あなたは簡単に解析ロジックを活用することができますいくつかの調整で:

class MyCronExpression extends CronExpression { 

    public MyCronExpression(String cronExpression) throws ParseException 
    { 
     super(cronExpression); 
    } 

    public TreeSet<Integer> getSeconds() 
    { 
     return super.getSet(CronExpression.SECOND); 
    } 

    public TreeSet<Integer> getMinutes() 
    { 
     return super.getSet(CronExpression.MINUTE); 
    } 

    public TreeSet<Integer> getHours() 
    { 
     return super.getSet(CronExpression.HOUR); 
    } 

    //... 

} 

は使用方法:

final MyCronExpression cronExpression = new MyCronExpression("0 30 9,12,15 * * ?"); 
System.out.println(cronExpression.getSeconds());  //0 
System.out.println(cronExpression.getMinutes());  //30 
System.out.println(cronExpression.getHours());  //9, 12, 15 

あなたはここに正規表現がある...正規表現を使用して手動でCRON式を解析するために誘惑されるかもしれませんjob_scheduling_data_2_0.xsdクォーツスキーマから:

(((([0-9]|[0-5][0-9]),)*([0-9]|[0-5][0-9]))|(([\*]|[0-9]|[0-5][0-9])(/|-)([0-9]|[0-5][0-9]))|([\?])|([\*]))[\s](((([0-9]|[0-5][0-9]),)*([0-9]|[0-5][0-9]))|(([\*]|[0-9]|[0-5][0-9])(/|-)([0-9]|[0-5][0-9]))|([\?])|([\*]))[\s](((([0-9]|[0-1][0-9]|[2][0-3]),)*([0-9]|[0-1][0-9]|[2][0-3]))|(([\*]|[0-9]|[0-1][0-9]|[2][0-3])(/|-)([0-9]|[0-1][0-9]|[2][0-3]))|([\?])|([\*]))[\s](((([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1]),)*([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(C)?)|(([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(/|-)([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(C)?)|(L(-[0-9])?)|(L(-[1-2][0-9])?)|(L(-[3][0-1])?)|(LW)|([1-9]W)|([1-3][0-9]W)|([\?])|([\*]))[\s](((([1-9]|0[1-9]|1[0-2]),)*([1-9]|0[1-9]|1[0-2]))|(([1-9]|0[1-9]|1[0-2])(/|-)([1-9]|0[1-9]|1[0-2]))|(((JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC),)*(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))|((JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(-|/)(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))|([\?])|([\*]))[\s]((([1-7],)*([1-7]))|([1-7](/|-)([1-7]))|(((MON|TUE|WED|THU|FRI|SAT|SUN),)*(MON|TUE|WED|THU|FRI|SAT|SUN)(C)?)|((MON|TUE|WED|THU|FRI|SAT|SUN)(-|/)(MON|TUE|WED|THU|FRI|SAT|SUN)(C)?)|(([1-7]|(MON|TUE|WED|THU|FRI|SAT|SUN))?(L|LW)?)|(([1-7]|MON|TUE|WED|THU|FRI|SAT|SUN)#([1-7])?)|([\?])|([\*]))([\s]?(([\*])?|(19[7-9][0-9])|(20[0-9][0-9]))?| (((19[7-9][0-9])|(20[0-9][0-9]))(-|/)((19[7-9][0-9])|(20[0-9][0-9])))?| ((((19[7-9][0-9])|(20[0-9][0-9])),)*((19[7-9][0-9])|(20[0-9][0-9])))?) 

それとも誰かがJavaのためのより良い汎用CRON式パーサーを知っていますか?

+0

exmale: 'System.out.println(cronExpression.getMinutes());のパラメータの1つを印刷すると、なぜ私は30という数字しか得られません。 '? intとして取得する方法はありますか? – user590586

+0

@ user590586:これは 'TreeSet'を返します。これは' toString() 'が実装されている方法です... –

+0

私はreplaceAllをしなければなりませんか?他のオプションはありませんか? – user590586

関連する問題