如何为每月的第10个工作日编写cron表达式?
我是CRON表达式领域的新手。我想为每月的第10个工作日(工作日)写一封信 我已经尝试了这个网站来帮助我解决这个问题。我无法控制自己如何为每月的第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
+---------------- 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的要求运行。