0


Cron在前端的使用,vue与element ui的vue-cron插件的使用及将定时任务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解析成中文

简易的工具类
可根据需要进行修改

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

标签: vue.js 前端 ui

本文转载自: https://blog.csdn.net/wang121213145/article/details/131062420
版权归原作者 杵意 所有, 如有侵权,请联系我们删除。

“Cron在前端的使用,vue与element ui的vue-cron插件的使用及将定时任务cron表达式解析成中文”的评论:

还没有评论