cron表达式转换为时间格式

cron表达式转换为时间格式。
说明:代码是基于当天零点,生成今天的所有的cron表达式对应的时间。
废话不说,上代码(大神勿喷)。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.quartz.CronExpression;


public class CronExpParser {

    /**
     * @方法名:parser
     * @方法描述【cron表达式装换成时间格式】
     * @param cronExpression   cron表达式
     * @return
     * @修改描述【修改描述】
     * @版本:1.0
     * @创建人:Administrator
     * @创建时间:2018年8月17日 下午2:46:43
     * @修改人:Administrator
     * @修改时间:2018年8月17日 下午2:46:43
     */
    public static List<String> parser(String cronExpression) {
        List<String> result = new ArrayList<String>();
        if (cronExpression == null || cronExpression.length() < 1) {
            return result;
        } else {
            CronExpression exp = null;
            try {
                exp = new CronExpression(cronExpression);
            } catch (ParseException e) {
                e.printStackTrace();
                return result;
            }
            Calendar calendar = Calendar.getInstance();
            String cronDate = calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" + calendar.get(Calendar.DATE);
            String sStart = cronDate + " 00:00:00";
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date dStart = null;
            Date dEnd = null;
            try {
                dStart = sdf.parse(sStart);
                calendar.setTime(dStart);
                calendar.add(Calendar.DATE, 1);
                dEnd = calendar.getTime();
            } catch (ParseException e) {
                e.printStackTrace();
            }
            Date dd = new Date();
            dd = exp.getNextValidTimeAfter(dd);
            while (dd.getTime() < dEnd.getTime()) {
                result.add(sdf.format(dd));
                dd = exp.getNextValidTimeAfter(dd);
            }
            exp = null;
        }
        return result;
    }

    public static void main(String[] args) {
        String CRON_EXPRESSION = "0/30 * * * * ? *";
        System.out.println(CRON_EXPRESSION);
        List<String> lTime = new ArrayList<String>();
        lTime = CronExpParser.parser(CRON_EXPRESSION);
        for (int i = 0; i < lTime.size(); i++) {
            System.out.println(lTime.get(i));
        }

    }
}

欢迎转载。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中有一些库可以用来解析cron表达式,其中一个常用的库是cron-utils。使用cron-utils可以将cron表达式转换为人类可读的字符串,并且支持解析cron表达式的各种特殊字符。 以下是使用cron-utils解析cron表达式的示例代码: ```java import com.cronutils.model.Cron; import com.cronutils.model.definition.CronDefinition; import com.cronutils.model.definition.CronDefinitionBuilder; import com.cronutils.parser.CronParser; public class CronParserExample { public static void main(String[] args) { // 定义cron表达式的格式 CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(CronDefinitionBuilder.instanceDefinitionForQuartzV2()); // 创建CronParser对象 CronParser parser = new CronParser(cronDefinition); try { // 解析cron表达式 Cron cron = parser.parse("0 0 12 * * ?"); // 获取解析后的cron表达式的各个字段值 String minutes = cron.retrieve(CronFieldName.MINUTE).getExpression().asString(); String hours = cron.retrieve(CronFieldName.HOUR).getExpression().asString(); String dayOfMonth = cron.retrieve(CronFieldName.DAY_OF_MONTH).getExpression().asString(); String month = cron.retrieve(CronFieldName.MONTH).getExpression().asString(); String dayOfWeek = cron.retrieve(CronFieldName.DAY_OF_WEEK).getExpression().asString(); String year = cron.retrieve(CronFieldName.YEAR).getExpression().asString(); // 输出解析结果 System.out.println("Minutes: " + minutes); System.out.println("Hours: " + hours); System.out.println("Day of Month: " + dayOfMonth); System.out.println("Month: " + month); System.out.println("Day of Week: " + dayOfWeek); System.out.println("Year: " + year); } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码中,我们首先定义了cron表达式的格式,然后创建了一个CronParser对象,并使用该对象解析了一个cron表达式。接着,我们通过Cron对象的retrieve方法获取了解析后的cron表达式的各个字段值,并将其输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值