使用CronExpression.next获取周日执行时间却返回周一的原因
问题原因与解决方案
你的问题核心在于Cron表达式星期字段的编号规则差异,不同的Cron实现对星期的数字定义不一样:
- 你使用的
CronExpression(Spring Framework中的实现),星期字段的数字定义是:1=周一,2=周二……7=周日,同时也支持英文缩写MON到SUN。 - 而你误以为数字
1代表周日,这是混淆了其他Cron实现(比如Quartz)的规则——Quartz中1=周日,2=周一……7=周六。
你的表达式0 0 1 ? * 1,按照Spring的规则,最后一位的1就是指定每周一1点执行,所以返回2024-04-15T01:00+09:00[Asia/Seoul](2024年4月15日是周一)是符合表达式实际逻辑的,和你的预期不符是因为对星期字段的规则理解错了。
修正方案
如果要实现每周日1点执行,把表达式改成以下两种之一即可:
- 使用数字:
0 0 1 ? * 7 - 使用英文缩写:
0 0 1 ? * SUN
内容的提问来源于stack exchange,提问作者jisu kim
相关产品推荐
相关产品推荐

