您的位置:

Cron表达式解析

一、Cron表达式解析成时间

Cron表达式是一种配置定时任务执行时间的格式,常用于服务器端、数据库定时备份、定时发布、定时统计等场景。Cron表达式格式为: 

*    *    *    *    *    *

各个字段分别代表:秒分时日月星期。例如下面的Cron表达式表示每周五下午十二点:

0 0 12 ? * FRI

如何将Cron表达式转化为对应的时间?通过Java的Cron表达式解析库即可实现。下面是使用Quartz Cron表达式解析库的示例代码:

// 创建解析器
CronExpression expression = new CronExpression("0 0 12 ? * FRI");
// 获取下一次执行时间
Date nextExecutionTime = expression.getNextValidTimeAfter(new Date());

二、Cron表达式几点几分

如果我们只需要获取Cron表达式中的几点几分,我们可以通过解析Cron表达式的格式来获取。例如,对于Cron表达式“0 0 12 ? * FRI”,我们可以使用以下代码获取几点几分:

// 解析Cron表达式
CronExpression expression = new CronExpression("0 0 12 ? * FRI");
// 获取下一次执行时间
Date nextExecutionTime = expression.getNextValidTimeAfter(new Date());
// 格式化时间获取几点几分
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
String hourAndMinute = format.format(nextExecutionTime);

三、Cron表达式解析器

想要解析Cron表达式,需要借助解析器。常见的Cron表达式解析器包括Quartz和Spring等,这里以Spring为例:

// 引入Maven依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

// 创建解析器
CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean();
factoryBean.setCronExpression("0 0 12 ? * FRI");
factoryBean.afterPropertiesSet();
CronTrigger trigger = factoryBean.getObject();

四、Cron表达式解析成中文

有时我们想要将Cron表达式中的英文星期转化为中文,可以通过自定义转换器来实现。以下是示例代码:

// 创建解析器
CronExpression expression = new CronExpression("0 0 12 ? * FRI");
// 设置转换器
expression.setDayOfWeekStartsAtOne(false);
expression.setExpressionLocale(Locale.CHINA);
// 获取下一次执行时间
Date nextExecutionTime = expression.getNextValidTimeAfter(new Date());

五、常用的Cron表达式

下面列举几个常用的Cron表达式:

  1. 每天下午5点执行:0 0 17 * * ?
  2. 每周五下午4点30分执行:0 30 16 ? * FRI
  3. 每两个小时执行一次:0 0 */2 ? * *
  4. 每天凌晨1点半执行:0 30 1 * * ?

六、Cron表达式每5分钟一次

要实现Cron表达式每5分钟一次的定时任务,可以使用以下表达式:

*/5 * * * * ?

七、Cron表达式解析在线

在线解析Cron表达式的网站有很多,例如cron.qqe2.com、cron-tab.com等,用户只需要输入Cron表达式即可获取对应时间。以下是cron-tab.com的示例:

https://www.cron-tab.com/analyze/?crontab=0+0+12+%3F+*+FRI

八、Cron表达式解析C实现

Cron表达式解析C实现可以参考cron-parser(https://github.com/staticlibs/ccronexpr),通过该库可以实现C语言的Cron表达式解析。