package com.xcgl.utils; import java.text.ParseException; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import org.jeecgframework.core.util.DateUtils; import org.quartz.CronExpression; public class CommonUtils { /** * 解析corn表达式,生成具体时间 * * @param cronExpression cron表达式 * @param advanceQuantity (消息)提前计算量 * @param advanceType (消息)提前计算时间 * @return 今日在消息提前时间 - 解析日期内的具体解析时间 * @throws ParseException */ public static List CronParser(String cronExpression, int advanceQuantity, String advanceType ,int quantity) throws ParseException { List result = new ArrayList(); if (cronExpression == null || cronExpression.length() < 1 || advanceType == null || advanceType.length() < 1) { return result; } else { CronExpression exp = null; // 初始化cron表达式解析器 try { exp = new CronExpression(cronExpression); } catch (ParseException e) { e.printStackTrace(); return result; } // 定义生成时间范围 // 定义开始时间,前一天的23点59分59秒 Calendar c = Calendar.getInstance(); Date dStart = null; Date dEnd = null; dStart = DateUtils.datetimeFormat.parse(DateUtils.formatDate() + " 00:00:00"); //计划完成时间为n天之后的工作也要生成 if(advanceType.equals("day")) { c.setTime(dStart); c.add(Calendar.SECOND, -1); dStart = c.getTime(); c.add(Calendar.SECOND, 1); c.add(Calendar.DATE, advanceQuantity); dEnd = c.getTime(); // 定义结束时间,n天后的23点59分59秒 dEnd = DateUtils.datetimeFormat.parse(DateUtils.formatDate(dEnd) + " 23:59:59"); }else { // 定义结束时间,当天的23点59分59秒 dEnd = DateUtils.datetimeFormat.parse(DateUtils.formatDate() + " 23:59:59"); } // 生成时间序列 java.util.Date dd = dStart; dd = exp.getNextValidTimeAfter(dd); int i = 0; while ((dd.getTime() >= dStart.getTime()) && (dd.getTime() <= dEnd.getTime())) { if(i == quantity) break; result.add(DateUtils.datetimeFormat.format(dd)); dd = exp.getNextValidTimeAfter(dd); i++; } } return result; } /** * 把cron转译成中文描述 * */ public static String translateToChinese(String cronExp) { if (cronExp == null || cronExp.length() < 1) { return "cron表达式为空"; } CronExpression exp = null; // 初始化cron表达式解析器 try { exp = new CronExpression(cronExp); } catch (ParseException e) { return "corn表达式不正确"; } String[] tmpCorns = cronExp.split(" "); StringBuffer sBuffer = new StringBuffer(); if(tmpCorns.length == 6) { //解析月 if(!tmpCorns[4].equals("*")) { sBuffer.append(tmpCorns[4]).append("月"); } else { sBuffer.append("每月"); } //解析周 if(!tmpCorns[5].equals("*") && !tmpCorns[5].equals("?")) { char[] tmpArray = tmpCorns[5].toCharArray(); for(char tmp:tmpArray) { switch (tmp) { case '1': sBuffer.append("星期天"); break; case '2': sBuffer.append("星期一"); break; case '3': sBuffer.append("星期二"); break; case '4': sBuffer.append("星期三"); break; case '5': sBuffer.append("星期四"); break; case '6': sBuffer.append("星期五"); break; case '7': sBuffer.append("星期六"); break; case '-': sBuffer.append("至"); break; default: sBuffer.append(tmp); break; } } } //解析日 if(!tmpCorns[3].equals("?")) { if(!tmpCorns[3].equals("*")) { sBuffer.append(tmpCorns[3]).append("日"); } else { sBuffer.append("每日"); } } //解析时 if(!tmpCorns[2].equals("*")) { sBuffer.append(tmpCorns[2]).append("时"); } else { sBuffer.append("每时"); } //解析分 if(!tmpCorns[1].equals("*")) { sBuffer.append(tmpCorns[1]).append("分"); } else { sBuffer.append("每分"); } //解析秒 if(!tmpCorns[0].equals("*")) { sBuffer.append(tmpCorns[0]).append("秒"); } else { sBuffer.append("每秒"); } } return sBuffer.toString(); } }