crontab执行时间计算

Untitled

字段 是否必填 允许值 允许特殊字符 备注
Seconds 0–59 *,- 标准实现不支持此字段。
Minutes 0–59 *,-
Hours 0–23 *,-
Day of month 1–31 *,-?LW ?LW只有部分软件实现了
Month 1–12 or JAN–DEC *,-
Day of week 0–7 or SUN–SAT *,-?L# ?L#只有部分软件实现了Linux和Spring的允许值为0-7,0和7为周日Quartz的允许值为1-7,1为周日
Year 1970–2099 *,- 标准实现不支持此字段。

完整的 cron 标准,下面是不同的实现

可能互相之间有兼容不兼容

最好看语言或者框架都实现了哪些,按照其实现来填写就可以,下面是列举的几个实现

linux

# 每月的最后1天
    0 0 L * * *

    说明:
    Linux
    *    *    *    *    *
    -    -    -    -    -
    |    |    |    |    |
    |    |    |    |    +----- day of week (0 - 7) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    |    |    |    +---------- month (1 - 12) OR jan,feb,mar,apr ...
    |    |    +--------------- day of month (1 - 31)
    |    +-------------------- hour (0 - 23)
    +------------------------- minute (0 - 59)

java(spring)

例子:
    # 每月的最后1天
    @Scheduled(cron = "0 0 18 28-31 * ?")
    public void doAtLastDayOfMonth() {
        final Calendar calendar = Calendar.getInstance();
        if (c.get(Calendar.DATE) == c.getActualMaximum(Calendar.DATE)) {
            // do something here...
        }
    }

    说明:
    Java(Spring)
    *    *    *    *    *    *
    -    -    -    -    -    -
    |    |    |    |    |    |
    |    |    |    |    |    +----- day of week (0 - 7) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    |    |    |    |    +---------- month (1 - 12) OR jan,feb,mar,apr ...
    |    |    |    +--------------- day of month (1 - 31)
    |    |    +-------------------- hour (0 - 23)
    |    +------------------------- min (0 - 59)
    +------------------------------ second (0 - 59)

java(quartz)

例子:
    # 每月的最后1天
    @Scheduled(cron = "0 0 18 L * ?")
    public void doAtLastDayOfMonth() {
        // do something here...
    }

    说明:
    Java(Quartz)
    *    *    *    *    *    *    *
    -    -    -    -    -    -    -
    |    |    |    |    |    |    |
    |    |    |    |    |    |    + year [optional]
    |    |    |    |    |    +----- day of week (1 - 7) sun,mon,tue,wed,thu,fri,sat
    |    |    |    |    +---------- month (1 - 12) OR jan,feb,mar,apr ...
    |    |    |    +--------------- day of month (1 - 31)
    |    |    +-------------------- hour (0 - 23)
    |    +------------------------- min (0 - 59)
    +------------------------------ second (0 - 59)

node nest

0 15 10 ? * MON-FRI

这个就不支持,javaquartz 就支持,所以 node nestjs 就用 linux cron 标准就行

* * * * * *
| | | | | |
| | | | | day of week
| | | | months
| | | day of month
| | hours
| minutes
seconds (optional)