时间转换成定时任务表达式cron工具类

 1、使用说明

序号    说明    是否必填    允许填的值    允许通配符
1    秒    是    0~59    , - * /
2    分    是    0~59    , - * /
3    时    是    0~23    , - * /
4    日    是    1~31    , - * ? / L W
5    月    是    1-12或JAN-DEC    , - * /
6    周    是    1-7或SUN-SAT    , - * ? / L W
7    年    否    empty 或1970-2099    , - * /

2、常用通配符说明


符号* 表示所有值. 例如:在分的字段上设置 “*”,表示每一分钟都会触发。

符号? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。
例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为"?" 具体设置为 0 0 0 10 * ?

符号 - 表示区间。例如 在小时上设置 “10-12”,表示 10,11,12点都会触发。

符号, 表示指定多个值,例如在周字段上设置 “MON,WED,FRI” 表示周一,周三和周五触发

符号/ 用于递增触发。如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,50)。 在月字段上设置’1/3’所示每 月1号开始,每隔三天触发一次。

3、常用表达式


0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 12 ? * WED 表示每个星期三中午12点
“0 0 12 * * ?” 每天中午12点触发
“0 15 10 ? * *”每天上午10:15触发
“0 15 10 * * ?” 每天上午10:15触发
“0 15 10 * * ? *” 每天上午10:15触发
“0 15 10 * * ? 2005” 2005年的每天上午10:15触发
“0 * 14 * * ?” 在每天下午2点到下午2:59期间的每1分钟触发
“0 0/5 14 * * ?” 在每天下午2点到下午2:55期间的每5分钟触发
“0 0/5 14,18 * * ?” 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
“0 0-5 14 * * ?” 在每天下午2点到下午2:05期间的每1分钟触发
“0 10,44 14 ? 3 WED” 每年三月的星期三的下午2:10和2:44触发
“0 15 10 ? * MON-FRI” 周一至周五的上午10:15触发
“0 15 10 15 * ?” 每月15日上午10:15触发
“0 15 10 L * ?” 每月最后一日的上午10:15触发
“0 15 10 ? * 6L” 每月的最后一个星期五上午10:15触发
“0 15 10 ? * 6L 2002-2005” 2002年至2005年的每月的最后一个星期五上午10:15触发
“0 15 10 ? * 6#3” 每月的第三个星期五上午10:15触发

4、时间转换成任务表达式cron工具类

package com.task;

import cn.hutool.core.date.DateUtil;

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;

/**
 * @Date: 2023/8/16 09:50
 * @Classname: DateTimeToCronUtils
 * @Description: 时间转换成任务表达式cron工具类
 */
public class DateTimeToCronUtils {
    /**
     * 每年format格式
     */
    public static final String YEAR = "ss mm HH dd MM ? yyyy";

    /**
     * 每周format格式
     */
    public static final String MONDAY = "ss mm HH ? * 1";
    public static final String TUESDAY = "ss mm HH ? * 2";
    public static final String WEDNESDAY = "ss mm HH ? * 3";
    public static final String THURSDAY = "ss mm HH ? * 4";
    public static final String FRIDAY = "ss mm HH ? * 5";
    public static final String SATURDAY = "ss mm HH ? * 6";
    public static final String SUNDAY = "ss mm HH ? * 7";

    /**
     * 每天format格式
     */
    public static final String EVERYDAY = "ss mm HH * * ?";

    /**
     * 间隔-每天format格式
     */
    public static final String INTERVAL_DAY = "0 0 0 1/param * ? ";

    /**
     * 间隔-每小时format格式
     */
    public static final String INTERVAL_HOUR = "0 0 0/param * * ?";

    /**
     * 间隔-每分钟format格式
     */
    public static final String INTERVAL_MINUTE = "0 0/param * * * ? ";

    /**
     * LocalDateTime格式化为String
     *
     * @param date       LocalDateTime
     * @param dateFormat format格式
     * @return String
     * @author longwei
     */
    public static String formatDateByPattern(LocalDateTime date, String dateFormat) {
        return DateUtil.format(date, dateFormat);
    }

    /**
     * date格式化为String
     *
     * @param date       date
     * @param dateFormat format格式
     * @return String
     * @author longwei
     */
    public static String formatDateByPattern(Date date, String dateFormat) {
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        String formatTimeStr = null;
        if (date != null) {
            formatTimeStr = sdf.format(date);
        }
        return formatTimeStr;
    }

    /**
     * 时间转换Cron表达式
     *
     * @param date       date
     * @param dateFormat format格式
     * @return Cron表达式
     * @author longwei
     */
    public static String getCron(Date date, String dateFormat) {
        return formatDateByPattern(date, dateFormat);
    }

    /**
     * 时间转换Cron表达式
     *
     * @param date       date
     * @param dateFormat format格式
     * @return Cron表达式
     * @author longwei
     */
    public static String getCron(LocalDateTime date, String dateFormat) {
        return formatDateByPattern(date, dateFormat);
    }

    /**
     * 间隔天转换Cron表达式
     *
     * @param param 天
     * @return Cron表达式
     * @author longwei
     */
    public static String getIntervalDayCron(String param) {
        return INTERVAL_DAY.replace("param", param);
    }

    /**
     * 间隔小时转换Cron表达式
     *
     * @param param 小时
     * @return Cron表达式
     * @author longwei
     */
    public static String getIntervalHourCron(String param) {
        return INTERVAL_HOUR.replace("param", param);
    }

    /**
     * 间隔分钟转换Cron表达式
     *
     * @param param 分钟
     * @return Cron表达式
     * @author longwei
     */
    public static String getIntervalMinuteCron(String param) {
        return INTERVAL_MINUTE.replace("param", param);
    }

    public static void main(String[] args) {
        Date date = new Date();

        String cron = getCron(date, YEAR);
        System.out.println("date-每年执行一次" + cron);

        cron = getCron(date, MONDAY);
        System.out.println("date-每周一执行" + cron);

        cron = getCron(date, EVERYDAY);
        System.out.println("date-每天执行" + cron);


        System.out.println("------------------------------");

        LocalDateTime localDateTime = LocalDateTime.now();

        cron = getCron(localDateTime, YEAR);
        System.out.println("localDateTime-每年执行一次" + cron);

        cron = getCron(localDateTime, MONDAY);
        System.out.println("localDateTime-每周一执行" + cron);

        cron = getCron(localDateTime, EVERYDAY);
        System.out.println("localDateTime-每天执行" + cron);

        LocalDate localDate = LocalDate.now();
        LocalDateTime dateTime = localDate.atTime(13, 14);
        cron = getCron(dateTime, EVERYDAY);
        System.out.println("localDateTime-每天指定时间执行" + cron);

        cron = getIntervalDayCron("1");
        System.out.println("localDateTime-间隔1天执行" + cron);

        cron = getIntervalHourCron("2");
        System.out.println("localDateTime-间隔2小时执行" + cron);

        cron = getIntervalMinuteCron("5");
        System.out.println("localDateTime-间隔5分钟执行" + cron);
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个Java实现的cron表达式转换工具类,可以将cron表达式转换为人类可读的格式: ```java import java.text.SimpleDateFormat; import java.util.Date; public class CronExpressionConverter { private static final String[] MONTHS = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; private static final String[] DAYS_OF_WEEK = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; public static String convert(String cronExpression) { String[] cronParts = cronExpression.split(" "); String minutes = cronParts[0]; String hours = cronParts[1]; String dayOfMonth = cronParts[2]; String month = cronParts[3]; String dayOfWeek = cronParts[4]; String year = cronParts.length == 6 ? cronParts[5] : ""; StringBuilder sb = new StringBuilder(); sb.append("At "); // minutes if (minutes.equals("0")) { sb.append("the start of every hour"); } else if (minutes.equals("*/5")) { sb.append("every five minutes past the hour"); } else { sb.append("minute "); sb.append(minutes); } sb.append(" "); // hours if (hours.equals("0")) { sb.append("midnight"); } else if (hours.equals("12")) { sb.append("noon"); } else { sb.append("hour "); sb.append(hours); } sb.append(" on "); // day of month if (dayOfMonth.equals("*")) { sb.append("every day"); } else { sb.append("the "); sb.append(dayOfMonth); if (dayOfMonth.endsWith("1") && !dayOfMonth.equals("11")) { sb.append("st"); } else if (dayOfMonth.endsWith("2") && !dayOfMonth.equals("12")) { sb.append("nd"); } else if (dayOfMonth.endsWith("3") && !dayOfMonth.equals("13")) { sb.append("rd"); } else { sb.append("th"); } sb.append(" day of the month"); } sb.append(" "); // month if (month.equals("*")) { sb.append("every month"); } else { sb.append("in "); sb.append(MONTHS[Integer.parseInt(month) - 1]); } sb.append(" "); // day of week if (dayOfWeek.equals("*")) { sb.append("every day of the week"); } else { sb.append("on "); sb.append(DAYS_OF_WEEK[Integer.parseInt(dayOfWeek)]); } sb.append(" "); // year if (!year.equals("")) { sb.append(year); } return sb.toString(); } public static void main(String[] args) { String cronExpression = "0 12 1 */3 *"; String humanReadable = CronExpressionConverter.convert(cronExpression); System.out.println(humanReadable); } } ``` 该类的`convert()`方法接受一个cron表达式,返回对应的人类可读的格式。在`main()`方法中,我们演示了如何使用该工具类cron表达式`0 12 1 */3 *`转换为人类可读的格式,输出结果为`At minute 0 hour 12 on the 1st day of every 3rd month every day of the week `。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值