问号在 Java cron 中的意义

来源维基百科:

使用问号 (?)代替“ *”来保留“月中的某一天”或“周中的某一天”为空。

The above statement is not making much sense to me.

所以如果我写一些 cron 作为 0 0 0 ? * *,那么它是意味着每个月的第一个还是意味着它将每天执行?

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

47179 次浏览

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

Both in classic and extended modes, nnCron users can use a “非标准”字符“ ?”在前四个字段的 cron 格式。 它表示 nnCron 启动的时间,也就是当一个字段被处理时, 启动时间将取代问号: 分钟字段,小时字段,月日字段 字段和月字段。

For example, if you write the following:

Time: ? ? * * * 任务将在 nnCron 启动时执行,然后 将每天在同一时间执行(除非用户不执行 restart nnCron, of course): question marks will be "replaced" by 例如,如果 nnCron 在8:25启动, 问号将以这种方式代替:

时间: 258 * * *

根据 石英 CronTrigger 教程(上面提到的石英是由 www.cronmaker.com 使用的) ,?通配符只在每月的某一天和每周的某一天使用:

?(“无特定值”)-当您需要在允许字符出现的两个字段之一中指定某些内容时非常有用,但另一个字段不允许。例如,如果我想让触发器在一个月中的某一天(比如说10号)触发,但是不管碰巧是哪一天,我会在“ day-of-month”字段中加上“10”,然后“ ?”在每周一天的领域。

我想 *在这里并不合适,因为 *意味着一周中的每一天都要执行,这违背了只能在月10日运行的规则。