文章目录
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解析成中文
简易的工具类
可根据需要进行修改
importorg.redisson.executor.CronExpression;importorg.springframework.util.StringUtils;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Calendar;importjava.util.Date;importjava.util.List;//import org.quartz.CronExpression;publicclassCornUtil{/**
* 解析corn表达式,生成指定日期的时间序列
*
* @param cronExpression cron表达式
* @param cronDate cron解析日期
* @param result crom解析时间序列
* @return 解析成功失败
*/publicstatic boolean parser(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 block
e.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 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 ;}returntrue;}publicstatic String 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("每月");}elseif(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;}}elseif(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;}}elseif(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("每日");}elseif(tmpCorns[3].contains("/")){
String[] str = StringUtils.split(tmpCorns[3],"/");
String first = str[0];
String last = str[1];
sBuffer.append("第"+ first +"天开始每隔"+ last +"天");}elseif(tmpCorns[3].contains("L")&& tmpCorns[3].toCharArray().length ==1){
sBuffer.append("最后一天");}elseif(tmpCorns[3].contains("LW")&& tmpCorns[3].toCharArray().length ==2){
sBuffer.append("最后一个工作日");}elseif(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;}}elseif(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("每时");}elseif(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("每分");}elseif(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 *才对
参考:
publicstaticvoidmain(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
版权归原作者 杵意 所有, 如有侵权,请联系我们删除。