CRON表达式,Linux和Java的不同写法

类型: Linux Java(Spring) Java(Quartz), 居然不同,纳尼!!!

推荐工具: https://tool.lu/crontab/

推荐工具:https://cron.qqe2.com/

CRON表达式是一个字符串,包含五个到七个由空格分隔的字段(每种软件不一样),表示一组时间,通常作为执行某个程序的时间表。

注释以注释标记#开始,并且必须单独在一行上。

Linux: 0 */12 * * * [user] [command] 请只输入红色部分。

Java(Spring): 0 0 */12 * * * 请只输入红色部分。

Java(Quartz): 0 0 18 L * ? 2019 请只输入红色部分。

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)

字段 是否必填 允许值 允许特殊字符 备注
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 *,- 标准实现不支持此字段。

Java

例子:
# 每月的最后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)

字段 是否必填 允许值 允许特殊字符 备注
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 *,- 标准实现不支持此字段。

例子: 每1个小时执行一次

linux

0 */1 * * *

Java

0 0 0/1 * * ?

例子:一天执行一次

linux

0 0 */1 * *

Java

0 0 0 1/1 * ?

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cron达式是一种用于指定定时任务执行时间的字符串达式。它由6个字段组成,分别示秒、分、小时、天、月、周,每个字段都有一些特定的取值范围和取值规则。 以下是Cron达式的格式: ``` <秒> <分> <小时> <日> <月> <周> <年> ``` 其中,年是可选的,其它字段都是必须的。以下是各个字段的取值范围和取值规则: - 秒 (0-59) - 分 (0-59) - 小时 (0-23) - 日 (1-31) - 月 (1-12) - 周 (0-7,0和7都示周日) 在Cron达式中,每个字段都可以是一个具体的数字,也可以是一个范围、一个列或者一个通配符。以下是一些例子: - *:示所有可能的值,比如“*”在分钟字段中示每分钟都执行。 - ?:示未指定,比如在日字段中示不关心是几号。 - -:示范围,比如在小时字段中示10点到12点。 - /:示间隔,比如在秒字段中示每隔5秒执行一次。 - ,:示列,比如在周字段中示周一和周二。 验证Cron达式的方法有很多种,下面是一种Java实现的示例: ```java import org.quartz.CronExpression; public class CronUtils { public static boolean isValid(String cronExpression) { try { new CronExpression(cronExpression); return true; } catch (Exception e) { return false; } } } ``` 这个示例使用了Quartz框架提供的CronExpression类来解析和验证Cron达式。如果传入的达式格式不正确,会抛出异常并返回false,否则返回true。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值