cron表达式(java)

工具地址:
cron表达式的在线生成工具地址:https://cron.qqe2.com

基本定义:
cron表达式是一个具有时间含义的字符串,一般用于定义定时任务的执行时间,格式如下:
{秒数}{分钟}{小时}{日期}{月份}{星期}{年份(可为空)}

cron表达式字段允许值:
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /

符号的意义

  • 表示所有值;
    ? 表示未说明的值,即不关心它为何值;
  • 表示一个指定的范围;
    , 表示附加一个可能值;
    / 符号前表示开始时间,符号后表示每次递增的值;
    L(“last”) (“last”) “L” 用在day-of-month字段意思是 “这个月最后一天”;用在 day-of-week字段, 它简单意思是 “7” or “SAT”。 如果在day-of-week字段里和数字联合使用,它的意思就是 “这个月的最后一个星期几” – 例如: “6L” means “这个月的最后一个星期五”. 当我们用“L”时,不指明一个列表值或者范围是很重要的,不然的话,我们会得到一些意想不到的结果。
    W(“weekday”) 只能用在day-of-month字段。用来描叙最接近指定天的工作日(周一到周五)。例如:在day-of-month字段用“15W”指“最接近这个 月第15天的工作日”,即如果这个月第15天是周六,那么触发器将会在这个月第14天即周五触发;如果这个月第15天是周日,那么触发器将会在这个月第 16天即周一触发;如果这个月第15天是周二,那么就在触发器这天触发。注意一点:这个用法只会在当前月计算值,不会越过当前月。“W”字符仅能在 day-of-month指明一天,不能是一个范围或列表。也可以用“LW”来指定这个月的最后一个工作日。
    #只能用在day-of-week字段。用来指定这个月的第几个周几。例:在day-of-week字段用"6#3"指这个月第3个周五(6指周五,3指第3个)。如果指定的日期不存在,触发器就不会触发。
    C 指和calendar联系后计算过的值。例:在day-of-month 字段用“5C”指在这个月第5天或之后包括calendar的第一天;在day-of-week字段用“1C”指在这周日或之后包括calendar的第一天。

cron表达式案列:
  (1)0/2 * * * * ? 表示每2秒 执行任务
  (1)0 0/2 * * * ? 表示每2分钟 执行任务
  (1)0 0 2 1 * ? 表示在每月的1日的凌晨2点调整任务
  (2)0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业
  (3)0 15 10 ? 6L 2002-2006 表示2002-2006年的每个月的最后一个星期五上午10:15执行作
  (4)0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
  (5)0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
  (6)0 0 12 ? * WED 表示每个星期三中午12点
  (7)0 0 12 * * ? 每天中午12点触发
  (8)0 15 10 ? * * 每天上午10:15触发
  (9)0 15 10 * * ? 每天上午10:15触发
  (10)0 15 10 * * ? 每天上午10:15触发
  (11)0 15 10 * * ? 2005 2005年的每天上午10:15触发
  (12)0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发
  (13)0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
  (14)0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
  (15)0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发
  (16)0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发
  (17)0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
  (18)0 15 10 15 * ? 每月15日上午10:15触发
  (19)0 15 10 L * ? 每月最后一日的上午10:15触发
  (20)0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发
  (21)0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发
  (22)0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发

要在Java中解析cron表达式,你可以使用cron-utils库。首先,你需要将cron-utils添加到你的项目依赖中。根据引用的Maven配置,你可以将以下代码添加到你的pom.xml文件中: ``` <dependency> <groupId>com.cronutils</groupId> <artifactId>cron-utils</artifactId> <version>9.1.5</version> </dependency> ``` 引用中的代码展示了cron-utils库中提供的CronType枚举类,它定义了不同的cron表达式类型,包括CRON4J、QUARTZ、UNIX和SPRING。 为了解析cron表达式,你可以使用CronParser类,如引用中的代码所示。首先,你需要创建一个CronParser对象,并使用CronDefinitionBuilder类的instanceDefinitionFor方法根据CronType.SPRING来定义cron表达式的语法。然后,你可以使用CronParser的parse方法将cron表达式字符串解析为Cron对象。 接下来,你可以使用ExecutionTime类的forCron方法来获取给定cron表达式的执行时间。你可以使用ZonedDateTime类来表示时间,并使用ZonedDateTime.now()来获取当前时间。然后,你可以使用ExecutionTime的nextExecution方法来获取下一次执行的时间。引用中的代码使用循环来获取指定数量的执行时间,并将它们存储在一个列表中。 最后,你可以使用DateTimeFormatter类来格式化ZonedDateTime对象为所需的日期时间格式,并将格式化后的时间存储在另一个列表中。最后,你可以返回列表作为解析cron表达式后的执行时间。 总结起来,这是解析cron表达式的基本步骤: 1. 添加cron-utils依赖到你的项目中,参考引用中的Maven配置。 2. 创建一个CronParser对象,并使用CronDefinitionBuilder类的instanceDefinitionFor方法定义cron表达式的语法。 3. 使用CronParser的parse方法将cron表达式字符串解析为Cron对象。 4. 创建一个ExecutionTime对象,并使用forCron方法获取给定cron表达式的执行时间。 5. 创建一个ZonedDateTime对象来表示时间,并使用ZonedDateTime.now()获取当前时间。 6. 使用ExecutionTime的nextExecution方法获取下一次执行的时间,并将其存储在一个列表中。 7. 使用DateTimeFormatter类来格式化ZonedDateTime对象为所需的日期时间格式,并将格式化后的时间存储在另一个列表中。 8. 返回列表作为解析cron表达式后的执行时间。 希望这个解答对你有帮助。如果你有任何其他问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值