根据已有的cron表达式列出以后一段时间内的时间触发点列表

在quartz中,用cron表达式去指定任务触发的时机是很不错的选择,网上有很多相关的文章介绍怎么使用,本文附件中附带了一篇我个人认为介绍的比较详细的使用quartz的文档,大家以后用到quatz可以细看。

本文重点不是介绍quatz的基本用法,而是在使用中,有可能会碰到要求能够动态的计算出相应的cron表达式的下一次触发时间的情况,比如在多媒体中就有判断当前时间是否是在cron计划时间段中的需求,找了下,网上似乎很少有相关的介绍,本人去研究了下quartz的api,发现利用现有的api是可以做到的,下面就贴出一个列出给定的cron表达式在一定时间内的触发时间列表的代码,分享给大家。

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import org.quartz.CronExpression; /** * * @author ChengC * @version 1.0 * @since 1.5 May 20, 2011 4:32:07 PM */ public class Wiki { /** * * @param args * @throws ParseException */ public static void main(String[] args) throws ParseException { //格式化日期的表达式,方便看观监测时间 String dateExp = "HH:mm:ss"; SimpleDateFormat sdf = new SimpleDateFormat(dateExp); //cron表达式,表示2011年内每分钟的0、20、40秒触发一次 String exp = "0/20 * * * * ? 2011-2011"; CronExpression cronExp = new CronExpression(exp); //表示当前时间的日历对象 Calendar calendar = Calendar.getInstance(); //表示结束时间的日历对象,也即两分钟后 Calendar endCalendar = Calendar.getInstance(); endCalendar.add(Calendar.MINUTE, 2); System.out.println("开始时间:"+sdf.format(calendar.getTime())+"结束时间:"+sdf.format(endCalendar.getTime())); System.out.println("列表开始"); while(true){ //获取距指定时间最近的一次触发时间 Date triggerDate = cronExp.getNextValidTimeAfter(calendar.getTime()); //如果永远不能再触发了,则退出 if(triggerDate==null){ break; } //如果触发时间超过结束时间,则退出 if(triggerDate.after(endCalendar.getTime())){ break; } System.out.println(sdf.format(triggerDate)); //让指定时间跳过下次触发时间,以计算出下下次得触发时间 calendar.setTime(triggerDate); calendar.add(Calendar.SECOND, 1); } System.out.println("列表结束"); } }

控制台输出结果为:

开始时间:16:58:52结束时间:17:00:52
列表开始
16:59:00
16:59:20
16:59:40
17:00:00
17:00:20
17:00:40
列表结束

你可能感兴趣的:(根据已有的cron表达式列出以后一段时间内的时间触发点列表)