Quartz CronExpression获取所有表达式参数信息 [英] Quartz CronExpression get all expression parameters info

查看:280
本文介绍了Quartz CronExpression获取所有表达式参数信息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

按照我的上一个问题 a>,我解析CronExpression并将getSet更改为public。这个方法得到int类型,我有一个包含cron表达式的字符串。如何获得有关此表达式的信息(hour\days \etc)?我需要传递给getSet方法?或者我应该使用另一种方法?这对我来说很不清楚。

Following to my previous question, I subclssed CronExpression and changed getSet to be public. this method gets int type, and i have a String containing the cron expression. How do I get the info about this expression (hour\days\etc) ? what do I need to pass to getSet method? or maybe I should use another method? this is very unclear for me.

推荐答案

CronExpression 即使它声明: p>

The problem with CronExpression is that even though it states it:


为类似unix的cron表达式提供解析器和求值程序。

Provides a parser and evaluator for unix-like cron expressions.

API在 protected 方法下是隐藏和隐藏的。到目前为止,它不是一个通用的CRON表达式解析器。但是通过一些调整,你可以很容易地利用解析逻辑:

The API is obscure and hidden under protected methods. By far it is not a general-purpose CRON expression parser. However with a few tweaks you can easily take advantage of the parsing logic:

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

    //...

}


b $ b

用法:

Usage:

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 Quartz模式:

You might be tempted to parse CRON expression manually using regular expressions... Here is a regex from job_scheduling_data_2_0.xsd Quartz schema:

(((([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表达式解析器?

Or maybe someone knows a better general-purpose CRON expression parser for Java?

这篇关于Quartz CronExpression获取所有表达式参数信息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆