50字范文,内容丰富有趣,生活中的好帮手!
50字范文 > java 解析cron_Java 解析Cron表达式 获取最近运行时间

java 解析cron_Java 解析Cron表达式 获取最近运行时间

时间:2022-05-13 17:09:05

相关推荐

java 解析cron_Java 解析Cron表达式 获取最近运行时间

摘要:Java 解析Cron表达式,获取最近运行时间

方法一

packagecom.odj.customer.index.controller;

importjava.text.ParseException;

importjava.text.SimpleDateFormat;

importjava.util.ArrayList;

importjava.util.Calendar;

importjava.util.Date;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

importorg.quartz.CronTrigger;

importorg.quartz.TriggerUtils;

importorg.springframework.scheduling.support.CronSequenceGenerator;

importorg.springframework.stereotype.Controller;

importorg.springframework.util.StringUtils;

importorg.springframework.web.bind.annotation.RequestMapping;

importorg.springframework.web.bind.annotation.RequestMethod;

importorg.springframework.web.bind.annotation.RequestParam;

importorg.springframework.web.bind.annotation.ResponseBody;

importcom.alibaba.fastjson.JSON;

/**

*cron表达式

*@authortanyichengE-mail:65797706@

*@date创建时间:4月13日下午4:23:55

*@version1.0

*/

@RequestMapping("/cron")

@Controller

publicclassCronUtilController{

/**

*根据表达式计算最近运行的时间

*@authortanyicheng创建时间:4月13日-下午4:36:01

*@return

*@throwsParseException

*/

publicStringcronCalculation(Stringcron)throwsParseException{

if(StringUtils.isEmpty(cron)){

thrownewIllegalArgumentException("参数不能为空");

}

CronTriggercronTriggerImpl=newCronTrigger();

cronTriggerImpl.setCronExpression(cron);//这里写要准备猜测的cron表达式

Calendarcalendar=Calendar.getInstance();

Datenow=calendar.getTime();

calendar.add(Calendar.YEAR,2);//把统计的区间段设置为从现在到2年后的今天(主要是为了方法通用考虑,如那些1个月跑一次的任务,如果时间段设置的较短就不足20条)

Listdates=puteFireTimesBetween(cronTriggerImpl,null,now,calendar.getTime());//这个是重点,一行代码搞定~~

System.out.println(dates.size());

SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");

Listlist=newArrayList<>();

for(inti=0;i

if(i>19){//这个是提示的日期个数

break;

}

list.add(dateFormat.format(dates.get(i)));

}

returnnull;

}

}

这种方式有一个缺点,如果表达式出发时间间隔较短,响应时间会非常慢

方法二(推荐这种)

publicstaticvoidmain(String[]args)throwsParseException,InterruptedException{

CronSequenceGeneratorcronSequenceGenerator=newCronSequenceGenerator("*****?");

SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");

Listlist=newArrayList<>(20);

DatenextTimePoint=newDate();

for(inti=0;i

//计算下次时间点的开始时间

nextTimePoint=cronSequenceGenerator.next(nextTimePoint);

list.add(sdf.format(nextTimePoint));

}

for(Stringstring:list){

System.out.println(string);

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。