文章目录
vue-cron插件的使用安装依赖引用Vue页面去掉秒和年定时任务cron解析成中文该插件存在的一个缺陷
vue-cron插件的使用
安装依赖
执行下面npm命令:
npm install vue-cron --save
引用
在想使用cron的vue页面引入以下:
import VueCron from ‘vue-cron’
import Vue from ‘vue’
Vue.use(VueCron)
Vue页面
<el-col :span="12"> <el-form-item label="同步时间" prop="execTime"> <el-popover v-model="cronPopover"> <vueCron @change="changeCron" @close="cronPopover=false" i18n="cn"/> <el-input slot="reference" v-model="ruleForm.execTime" placeholder="定时策略" @click="cronPopover=true" /> </el-popover> </el-form-item> </el-col></el-row>
运行
去掉秒和年
在vue页面“style scoped”中通过控制样式去掉秒年
#changeContab /deep/ #tab-0 { display: none; }
#changeContab /deep/ #tab-5 { display: none; }
定时任务cron解析成中文
简易的工具类
可根据需要进行修改
import org.redisson.executor.CronExpression;import org.springframework.util.StringUtils;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 CornUtil { /** * 解析corn表达式,生成指定日期的时间序列 * * @param cronExpression cron表达式 * @param cronDate cron解析日期 * @param result crom解析时间序列 * @return 解析成功失败 */ public static boolean parser(String cronExpression, String cronDate, List<String> result) { if (cronExpression == null || cronExpression.length() < 1 || cronDate == null || cronDate.length() < 1 ) { return false ; } else { CronExpression exp = null ; // 初始化cron表达式解析器 try { exp = new CronExpression(cronExpression); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return false ; } // 定义生成时间范围 // 定义开始时间,前一天的23点59分59秒 Calendar c = Calendar.getInstance(); String sStart = cronDate + " 00:00:00" ; SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); Date dStart = null ; try { dStart = sdf.parse(sStart); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } c.setTime(dStart); c.add(Calendar.SECOND, - 1 ); dStart = c.getTime(); // 定义结束时间,当天的23点59分59秒 c.add(Calendar.DATE, 1 ); Date dEnd = c.getTime(); // 生成时间序列 Date dd = dStart; dd = exp.getNextValidTimeAfter(dd); while ((dd.getTime() >= dStart.getTime()) && (dd.getTime() <= dEnd.getTime())) { result.add(sdf.format(dd)); dd = exp.getNextValidTimeAfter(dd); } exp = null ; } return true ; } public static String translateToChinese(String cronExp) { if (cronExp == null || cronExp.length() < 1 ) { return "cron表达式为空" ; } CronExpression exp = null ; // 初始化cron表达式解析器 try { exp = new CronExpression(cronExp); } catch (Exception e) { return "corn表达式不正确" ; } String[] tmpCorns = cronExp.split( " " ); StringBuffer sBuffer = new StringBuffer(); if (tmpCorns.length == 6 ) { //解析月 if (tmpCorns[ 4 ].equals( "*" )) { sBuffer.append( "每月" ); } else if (tmpCorns[ 4 ].contains("/")){ String[] str = StringUtils.split(tmpCorns[ 4 ],"/"); String first = str[0]; String last = str[1]; sBuffer.append( "第" + first + "月开始每隔" + last + "月"); } else { sBuffer.append(tmpCorns[ 4 ]).append( "月" ); } //解析周 if (!tmpCorns[ 5 ].equals( "*" ) && !tmpCorns[ 5 ].equals( "?" )) { if (tmpCorns[ 5 ].contains("/")){ String[] str = StringUtils.split(tmpCorns[ 5 ],"/"); String first = str[0]; String last = str[1]; switch (first) { case "1" : sBuffer.append( "从星期天开始每隔" + last + "周"); break ; case "2" : sBuffer.append( "从星期一开始每隔" + last + "周"); break ; case "3" : sBuffer.append( "从星期二开始每隔" + last + "周"); break ; case "4" : sBuffer.append( "从星期三开始每隔" + last + "周"); break ; case "5" : sBuffer.append( "从星期四开始每隔" + last + "周"); break ; case "6" : sBuffer.append( "从星期五开始每隔" + last + "周"); break ; case "7" : sBuffer.append( "从星期六开始每隔" + last + "周"); break ; } }else if (tmpCorns[ 5 ].contains("#")){ String[] str = StringUtils.split(tmpCorns[ 5 ],"#"); String first = str[0]; String last = str[1]; switch (first) { case "1" : sBuffer.append( "第" + last + "个" + "星期天"); break ; case "2" : sBuffer.append( "第" + last + "个" + "星期一"); break ; case "3" : sBuffer.append( "第" + last + "个" + "星期二"); break ; case "4" : sBuffer.append( "第" + last + "个" + "星期三"); break ; case "5" : sBuffer.append( "第" + last + "个" + "星期四"); break ; case "6" : sBuffer.append( "第" + last + "个" + "星期五"); break ; case "7" : sBuffer.append( "第" + last + "个" + "星期六"); break ; } } else if (tmpCorns[ 5 ].contains("L") && !tmpCorns[ 5 ].contains("W") && tmpCorns[ 5 ].toCharArray().length == 2){ switch (tmpCorns[ 5 ]) { case "1L" : sBuffer.append( "最后一个星期天" ); break ; case "2L" : sBuffer.append( "最后一个星期一" ); break ; case "3L" : sBuffer.append( "最后一个星期二" ); break ; case "4L" : sBuffer.append( "最后一个星期三" ); break ; case "5L" : sBuffer.append( "最后一个星期四" ); break ; case "6L" : sBuffer.append( "最后一个星期五" ); break ; case "7L" : sBuffer.append( "最后一个星期六" ); break ; } } else { String [] tmpArray = tmpCorns[ 5 ].split(","); for ( String tmp:tmpArray) { switch (tmp) { case "SUN" : sBuffer.append( "星期天" ); break ; case "MON" : sBuffer.append( "星期一" ); break ; case "TUE" : sBuffer.append( "星期二" ); break ; case "WED" : sBuffer.append( "星期三" ); break ; case "THU" : sBuffer.append( "星期四" ); break ; case "FRI" : sBuffer.append( "星期五" ); break ; case "SAT" : sBuffer.append( "星期六" ); break ; case "-" : sBuffer.append( "至" ); break ; default : sBuffer.append(tmp); break ; } } } } //解析日 if (!tmpCorns[ 3 ].equals( "?" )) { if (tmpCorns[ 3 ].equals( "*" )) { sBuffer.append( "每日" ); } else if (tmpCorns[ 3 ].contains("/")){ String[] str = StringUtils.split(tmpCorns[ 3 ],"/"); String first = str[0]; String last = str[1]; sBuffer.append( "第" + first + "天开始每隔" + last + "天"); } else if (tmpCorns[ 3 ].contains("L") && tmpCorns[ 3 ].toCharArray().length == 1){ sBuffer.append("最后一天"); } else if (tmpCorns[ 3 ].contains("LW") && tmpCorns[ 3 ].toCharArray().length == 2){ sBuffer.append("最后一个工作日"); } else if (tmpCorns[ 3 ].contains("L-")){ switch (tmpCorns[ 3 ]) { case "L-1" : sBuffer.append( "月底前1日" ); break ; case "L-2" : sBuffer.append( "月底前2日" ); break ; case "L-3" : sBuffer.append( "月底前3日" ); break ; case "L-4" : sBuffer.append( "月底前4日" ); break ; case "L-5" : sBuffer.append( "月底前5日" ); break ; case "L-6" : sBuffer.append( "月底前6日" ); break ; case "L-7" : sBuffer.append( "月底前7日" ); break ; case "L-8" : sBuffer.append( "月底前8日" ); break ; case "L-9" : sBuffer.append( "月底前9日" ); break ; case "L-10" : sBuffer.append( "月底前10日" ); break ; case "L-11" : sBuffer.append( "月底前11日" ); break ; case "L-12" : sBuffer.append( "月底前12日" ); break ; case "L-13" : sBuffer.append( "月底前13日" ); break ; case "L-14" : sBuffer.append( "月底前14日" ); break ; case "L-15" : sBuffer.append( "月底前15日" ); break ; case "L-16" : sBuffer.append( "月底前16日" ); break ; case "L-17" : sBuffer.append( "月底前17日" ); break ; case "L-18" : sBuffer.append( "月底前18日" ); break ; case "L-19" : sBuffer.append( "月底前19日" ); break ; case "L-20" : sBuffer.append( "月底前20日" ); break ; case "L-21" : sBuffer.append( "月底前21日" ); break ; case "L-22" : sBuffer.append( "月底前22日" ); break ; case "L-23" : sBuffer.append( "月底前23日" ); break ; case "L-24" : sBuffer.append( "月底前24日" ); break ; case "L-25" : sBuffer.append( "月底前25日" ); break ; case "L-26" : sBuffer.append( "月底前26日" ); break ; case "L-27" : sBuffer.append( "月底前27日" ); break ; case "L-28" : sBuffer.append( "月底前28日" ); break ; case "L-29" : sBuffer.append( "月底前29日" ); break ; case "L-30" : sBuffer.append( "月底前30日" ); break ; case "L-31" : sBuffer.append( "月底前31日" ); break ; } } else if (tmpCorns[ 3 ].contains("W") && !tmpCorns[ 3 ].contains("L")){ switch (tmpCorns[ 3 ]) { case "1W" : sBuffer.append( "最近的工作日至本月1日" ); break ; case "2W" : sBuffer.append( "最近的工作日至本月2日" ); break ; case "3W" : sBuffer.append( "最近的工作日至本月3日" ); break ; case "4W" : sBuffer.append( "最近的工作日至本月4日" ); break ; case "5W" : sBuffer.append( "最近的工作日至本月5日" ); break ; case "6W" : sBuffer.append( "最近的工作日至本月6日" ); break ; case "7W" : sBuffer.append( "最近的工作日至本月7日" ); break ; case "8W" : sBuffer.append( "最近的工作日至本月8日" ); break ; case "9W" : sBuffer.append( "最近的工作日至本月9日" ); break ; case "10W" : sBuffer.append( "最近的工作日至本月10日" ); break ; case "11W" : sBuffer.append( "最近的工作日至本月11日" ); break ; case "12W" : sBuffer.append( "最近的工作日至本月12日" ); break ; case "13W" : sBuffer.append( "最近的工作日至本月13日" ); break ; case "14W" : sBuffer.append( "最近的工作日至本月14日" ); break ; case "15W" : sBuffer.append( "最近的工作日至本月15日" ); break ; case "16W" : sBuffer.append( "最近的工作日至本月16日" ); break ; case "17W" : sBuffer.append( "最近的工作日至本月17日" ); break ; case "18W" : sBuffer.append( "最近的工作日至本月18日" ); break ; case "19W" : sBuffer.append( "最近的工作日至本月19日" ); break ; case "20W" : sBuffer.append( "最近的工作日至本月20日" ); break ; case "21W" : sBuffer.append( "最近的工作日至本月21日" ); break ; case "22W" : sBuffer.append( "最近的工作日至本月22日" ); break ; case "23W" : sBuffer.append( "最近的工作日至本月23日" ); break ; case "24W" : sBuffer.append( "最近的工作日至本月24日" ); break ; case "25W" : sBuffer.append( "最近的工作日至本月25日" ); break ; case "26W" : sBuffer.append( "最近的工作日至本月26日" ); break ; case "27W" : sBuffer.append( "最近的工作日至本月27日" ); break ; case "28W" : sBuffer.append( "最近的工作日至本月28日" ); break ; case "29W" : sBuffer.append( "最近的工作日至本月29日" ); break ; case "30W" : sBuffer.append( "最近的工作日至本月30日" ); break ; case "31W" : sBuffer.append( "最近的工作日至本月31日" ); break ; } } else { sBuffer.append(tmpCorns[ 3 ]).append( "日" ); } } //解析时 if (tmpCorns[ 2 ].equals( "*" )) { sBuffer.append( "每时" ); } else if (tmpCorns[ 2 ].contains("/")){ String[] str = StringUtils.split(tmpCorns[ 2 ],"/"); String first = str[0]; String last = str[1]; sBuffer.append( "第" + first + "时开始每隔" + last + "时"); } else { sBuffer.append(tmpCorns[ 2 ]).append( "时" ); } //解析分 if (tmpCorns[ 1 ].equals( "*" )) { sBuffer.append( "每分" ); } else if (tmpCorns[ 1 ].contains("/")){ String[] str = StringUtils.split(tmpCorns[ 1 ],"/"); String first = str[0]; String last = str[1]; sBuffer.append( "第" + first + "分开始每隔" + last + "分"); } else { sBuffer.append(tmpCorns[ 1 ]).append( "分" ); } //解析秒 /*if (!tmpCorns[ 0 ].equals( "*" )) { sBuffer.append(tmpCorns[ 0 ]).append( "秒" ); } else { sBuffer.append( "每秒" ); }*/ } return sBuffer.toString(); } //测试方法// public static void main(String[] args)// {// String CRON_EXPRESSION = "01 * * 2L * ?" ;// // 生成指定日期的CRON时间序列// String CRON_DATE = "2016-04-26" ;// System.out.println(CRON_EXPRESSION);// System.out.println(translateToChinese(CRON_EXPRESSION));//// List<String> lTime = new ArrayList<String>();// if (!parser(CRON_EXPRESSION, CRON_DATE, lTime)){// System.out.println( "无法生成Cron表达式:日期," +CRON_DATE+ ";不符合规则cron表达式:" +CRON_EXPRESSION);// }// for ( int i= 0 ;i<lTime.size();i++){// System.out.println(lTime.get(i));// }//// }}
该插件存在的一个缺陷
如图中生成的cron表达式 * * * 1L * ? * 是错误的表达式,应为 * * * ? * 1L *才对
参考:
public static void main(String[] args){ String execTime = "* * * 1L * ?"; String resultString = ""; String[] str = execTime.split(" "); if((str[3].equalsIgnoreCase("1L") || str[3].equalsIgnoreCase("2L") || str[3].equalsIgnoreCase("3L") || str[3].equalsIgnoreCase("4L") || str[3].equalsIgnoreCase("5L") || str[3].equalsIgnoreCase("6L")|| str[3].equalsIgnoreCase("7L")) && str[5].equalsIgnoreCase("?")){ str[5] = str[3]; str[3] = "?"; for (String s : str) { resultString += s+" "; } System.out.println(resultString.substring(0,execTime.length())); } }
输出:* * * ? * 1L