文章目录

  • 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-inputslot="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;//importorg.quartz.CronExpression;public class CornUtil {/** * 解析corn表达式,生成指定日期的时间序列 * * @param cronExpression cron表达式 * @param cronDate cron解析日期 * @param result crom解析时间序列 * @return 解析成功失败 */publicstaticbooleanparser(String cronExpression, String cronDate, List<String> result){if(cronExpression ==null|| cronExpression.length() <1|| cronDate ==null|| cronDate.length() <1 ){returnfalse ;}else{CronExpression exp =null ;// 初始化cron表达式解析器try{exp =newCronExpression(cronExpression);}catch(Exception e){// TODO Auto-generated catch blocke.printStackTrace();returnfalse ;}// 定义生成时间范围// 定义开始时间,前一天的23点59分59秒Calendar c = Calendar.getInstance();String sStart = cronDate +" 00:00:00" ;SimpleDateFormat sdf =newSimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );Date dStart =null ;try{dStart = sdf.parse(sStart);}catch(ParseException e){// TODO Auto-generated catch blocke.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 ;}returntrue ;}publicstaticString translateToChinese(String cronExp){if(cronExp ==null|| cronExp.length() <1 ){return"cron表达式为空" ;}CronExpression exp =null ;// 初始化cron表达式解析器try{exp =newCronExpression(cronExp);}catch(Exception e){return"corn表达式不正确" ;}String[] tmpCorns = cronExp.split( " " );StringBuffer sBuffer =newStringBuffer();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 ( Stringtmp: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( "每秒" );}*/}returnsBuffer.toString();}//测试方法//publicstaticvoidmain(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 lTime =newArrayList();//if (!parser(CRON_EXPRESSION, CRON_DATE, lTime)){//System.out.println( "无法生成Cron表达式:日期," +CRON_DATE+ ";不符合规则cron表达式:" +CRON_EXPRESSION);//}//for ( inti= 0 ;i<lTime.size();i++){//System.out.println(lTime.get(i));//}////}}

该插件存在的一个缺陷


如图中生成的cron表达式 * * * 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