如何修正Cron表达式实现每月15日或下一个工作日执行?
修正Cron表达式实现仅顺延至下一个工作日
你遇到的问题是15W的逻辑特性导致的:W代表距离指定日期最近的工作日,所以当15日是周六时,它会匹配前一天的周五,只有15日是周日时才会顺延到周一。要实现“仅顺延至下一个工作日,不提前”的需求,需要拆分场景编写组合表达式:
最终可用的Cron表达式
0 10 15 * ? * , 0 10 16 * ? SUN , 0 10 17 * ? SAT
表达式拆解
0 10 15 * ? *:每月15日10点执行,仅当15日为周一至周五时生效0 10 16 * ? SUN:每月16日10点执行,仅当当月15日为周日时生效(周日的下一个工作日是周一16日)0 10 17 * ? SAT:每月17日10点执行,仅当当月15日为周六时生效(周六的下一个工作日是周一17日)
注意事项
不同调度系统对多Cron表达式的支持有差异,比如Quartz允许用逗号分隔多个表达式实现OR逻辑;如果你的调度器不支持多表达式,可以拆分为三个独立的定时任务分别配置。
内容的提问来源于stack exchange,提问作者Absoluty
相关产品推荐
相关产品推荐

