Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为每月的第10个工作日编写cron表达式?_Cron - Fatal编程技术网

如何为每月的第10个工作日编写cron表达式?

如何为每月的第10个工作日编写cron表达式?,cron,Cron,我是CRON表达式领域的新手。我想为每月的第10个工作日(工作日)写一封信 我已经尝试了这个网站来帮助我解决这个问题。我无法控制自己 +---------------- minute (0 - 59) | +------------- hour (0 - 23) | | +---------- day of month (1 - 31) | | | +------- month (1 - 12) | | | | +---- day of week (0 - 6) (Sunda

我是CRON表达式领域的新手。我想为每月的第10个工作日(工作日)写一封信

我已经尝试了这个网站来帮助我解决这个问题。我无法控制自己

+---------------- minute (0 - 59)
|  +------------- hour (0 - 23)
|  |  +---------- day of month (1 - 31)
|  |  |  +------- month (1 - 12)
|  |  |  |  +---- day of week (0 - 6) (Sunday=0 or 7)
|  |  |  |  |
*  *  *  *  *  command to be executed
这是矩阵。对于工作日的使用(可能不包括节假日等,您需要重写这些天的脚本)


这是矩阵。对于工作日的使用(可能不包括节假日等,您需要重写这些天的脚本)

您可以创建每天运行的CRON作业。然后,您可以将功能嵌套在if子句中,例如:

if (isTenthWeekday()) {
    //your functionality
}

private boolean isTenthWeekday() {
    Calendar c = Calendar.getInstance();
    int sumWeekdays = 0;
    for (int i=1; i<=c.get(Calendar.DAY_OF_MONTH); i++) {
        Calendar d = Calendar.getInstance();
        d.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), i);
        if (d.get(Calendar.DAY_OF_WEEK) > 1 && d.get(Calendar.DAY_OF_WEEK) <= 6) {
            sumWeekdays++;
        }
    }
    return sumWeekdays == 10;
}
if(isTenthWeekday()){
//您的功能
}
私有布尔值isTenthWeekday(){
Calendar c=Calendar.getInstance();
int sumWeekdays=0;

对于(int i=1;i 1&&d.get(Calendar.DAY\u OF_WEEK),可以创建每天运行的CRON作业。然后可以将功能嵌套在if子句中,例如:

if (isTenthWeekday()) {
    //your functionality
}

private boolean isTenthWeekday() {
    Calendar c = Calendar.getInstance();
    int sumWeekdays = 0;
    for (int i=1; i<=c.get(Calendar.DAY_OF_MONTH); i++) {
        Calendar d = Calendar.getInstance();
        d.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), i);
        if (d.get(Calendar.DAY_OF_WEEK) > 1 && d.get(Calendar.DAY_OF_WEEK) <= 6) {
            sumWeekdays++;
        }
    }
    return sumWeekdays == 10;
}
if(isTenthWeekday()){
//您的功能
}
私有布尔值isTenthWeekday(){
Calendar c=Calendar.getInstance();
int sumWeekdays=0;

对于(int i=1;i 1&&d.get(Calendar.DAY/OF/u WEEK)尝试使用下面的cron表达式,它将在每月的第10天执行。如果是工作日,则只有cron将按照我假设的(周一至周五)工作。请尝试并寻求进一步的帮助

@Scheduled(cron = "0 0 12 10 1-5 ?")
public void scheduletask() {
    // ...
}

thnkx.

尝试使用下面的cron表达式,它将在每月的第10天执行。如果是工作日,则只有cron将按照我假设的(周一至周五)工作。请尝试并寻求进一步的帮助

@Scheduled(cron = "0 0 12 10 1-5 ?")
public void scheduletask() {
    // ...
}


thnkx.

如何在这个矩阵中排除假期?据我所知,你不能排除假期,你需要知道假期是什么时候,并根据你的需要重写脚本。例如,在假期前/后执行一天,然后撤消更改。只需编写一个识别holdays的方法,为你变魔术;)如何在这个矩阵中排除假期?据我所知,你不能排除假期,你需要知道假期是什么时候,并根据你的需要重写脚本。例如,在假期前/后执行一天,然后撤消更改。只需编写一个识别holdays的方法,并为你施展魔法;)我认为使用纯cron表达式是不可能的。一些解析器(Quartz?)可能支持类似于
0 10W*?*
的语法,用于“最接近月10日的工作日”,但这可能仍然不是你想要实现的,对吗?请定义工作日?周一到周五,没有例外?@user871611没有要求。它必须是第10个工作日。再说一次,你如何定义工作日?世界各地的工作日都不一样。正如我提到的,每个月的第10个工作日。我认为这是不可能的使用纯cron表达式。一些解析器(Quartz?)可能支持类似于
0 10W*?*
的语法,用于“最接近每月第10天的工作日”,但这可能仍然不是你想要实现的目标,对吗?请定义工作日?周一到周五,没有例外?@user871611无需。它必须是第10个工作日。再说一次,你如何定义工作日?世界各地的工作日都不一样。正如我提到的,每个月的第10个工作日。这意味着“1月10日,1月至5月的12:00 PM”。是的,您可以更改开始时间。它将适用于全年,而不是从1月到5月。因为1-5表示它仅适用于工作日(周一至周五)。外部来源似乎不一致根据您的外部来源,表达式为”“0 12 10*?周一至周五”您建议的两个表达方式彼此不同:“0 12 10 1-5?”与“0 12 10*?周一至周五”。第一个表达方式是每月10日运行一次(无论是否是第10个工作日),第二个表达方式是每个工作日运行一次。在任何情况下,它们都不会按照OP的要求运行。这意味着”是的,你可以改变你的开始时间。它将适用于全年,而不是从1月到5月。因为1-5意味着它将只适用于工作日(周一至周五)。外部来源似乎不同意根据你的外部来源,表达式将是““0 12 10*?周一至周五”您建议的两个表达方式彼此不同:“0 12 10 1-5?”与“0 12 10*?周一至周五”。第一个表达方式每10个月运行一次(无论是否是第10个工作日),第二个表达方式每周日运行一次。在任何情况下,它们都不会按照OP的要求运行。