欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

计算Cron表达式执行时间

程序员文章站 2022-05-24 21:09:03
...
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.scheduling.support.CronSequenceGenerator;

/**
 * cron表达式工具类
 * @author zhangsy
 * @date   2019年8月19日
 */
public class CronUtils {
	
	/**
	 * 按时间计算下次执行时间
	 * @Title: getExcuteTime
	 * @data:2019年8月19日上午11:34:13
	 * @author:zhangsy
	 *
	 * @param cron
	 * @return
	 */
	public static Date getExcuteTime(String cron, Date date) {
        if (StringUtils.isEmpty(cron))
            throw new IllegalArgumentException("cron表达式不可为空");
        CronSequenceGenerator cronSequenceGenerator = new CronSequenceGenerator(cron);
        return cronSequenceGenerator.next(date);
    }
	
	/**
	 * 根据当前计算下次执行时间
	 * @Title: getExcuteTimeByNow
	 * @data:2019年8月19日上午11:34:13
	 * @author:zhangsy
	 *
	 * @param cron
	 * @return
	 */
	public static Date getExcuteTimeByNow(String cron) {
        return getExcuteTime(cron, new Date());
    }
	
	/**
	 * 计算多个执行时间
	 * @Title: getExcuteTimes
	 * @data:2019年8月19日上午11:25:21
	 * @author:zhangsy
	 *
	 * @param cron 表达式
	 * @param count 执行时间个数
	 * @return
	 */
	public static List<Date> getExcuteTimes(String cron, Integer count) {
        if (StringUtils.isEmpty(cron))
            throw new IllegalArgumentException("cron表达式不可为空");
        count = count==null||count<1?1:count;
        CronSequenceGenerator cronSequenceGenerator = new CronSequenceGenerator(cron);
        List<Date> list = new ArrayList<Date>(count);
        Date nextTimePoint = new Date();
        for (int i = 0; i < count; i++) {
            // 计算下次时间点的开始时间
            nextTimePoint = cronSequenceGenerator.next(nextTimePoint);
            list.add(nextTimePoint);
        }
        return list;
    }

    
}

需求中需要使用cron表达式转换出时间,所以封了这个工具类,写之前百度了一下,使用了部分人家的代码,特此贴出原贴,感谢贡献。
参考地址:java quartz 计算近20次执行时间

相关标签: cron