问号在 Java cron 中的意义

2022-08-31 13:11:15

来源维基百科:

使用问号 (?) 代替“*”,将月中某一天或星期几留空。

上述说法对我来说没有多大意义。

因此,如果我将一些cron写为0 0 0 ? * *,那么它是否意味着每个月的第一个,或者它意味着它将每天执行?

这有点令人困惑,因为Java克隆以秒开头,而其他克隆以分钟开头。


答案 1

根据Quartz CronTrigger教程(Quartz由 www.cronmaker.com 使用,如上所述),通配符仅用于月日和星期几字段:?

?(“无特定值”) - 当您需要在允许字符但不允许另一个字符的两个字段中指定某些内容时很有用。例如,如果我希望我的触发器在一个月的某一天(比如 10 日)触发,但又不在乎一周中的哪一天,我会在月中的某一天字段中加上“10”,在星期几字段中放置“?”。

我想这里不合适,因为 means 在一周中的每一天执行,这与它应该只在当月 10 日运行的规则相矛盾。**


答案 2

我知道这是一个古老的问题,但对于后代来说,这里解释了:http://www.nncron.ru/help/EN/working/cron-format.htm#STARTTIME

在经典模式和扩展模式下,nnCron 用户都可以在 cron 格式的前四个字段中使用“非标准”字符“?”。它代表 nnCron 启动的时间,即当处理字段时,启动时间将被替换为问号:分钟字段的分钟,小时字段的小时,月份的某天字段和月份字段的月份。

例如,如果您编写以下内容:

时间:??* * * * 任务将在 nnCron 启动时执行,然后每天同时执行(当然,除非用户不重新启动 nnCron):问号将被 nnCron 启动时间“替换”。例如,如果 nnCron 在 8:25 启动,则问号将按以下方式替换:

时间: 25 8 * * * *


推荐