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

news/2024/11/8 12:33:29/

文章目录

  • 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;//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 blocke.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 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 ;}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


http://www.ppmy.cn/news/240492.html

相关文章

虽然不想说话,但还是说说吧

买了一部手机&#xff0c;心都要焦了。我不是一个喜欢网上购物的人。最近因为公司搬地方&#xff0c;必须用手机&#xff0c;所以就在一家手机店买了一部。 我真的不知道原来小米手机的非官方运营店的手机都是定制机&#xff0c;再付款后就要求将手机卡升级到4G模式。当时不知…

【限制版】华为流程体系:DSTE流程

目录 前言 内容列表 内容 完整课程地址 前言 欢迎继续来到华为流程体系系列课程的内容。 本期是华为流程体系的第十节内容。 主要来讲讲战略管理的流程,也就是DSTE流程。 下面先来看一下本期课程的内容目录,课程持续更新。 下一节课会分享 IFS 财经服务流程,敬请期…

Amazon Device EDI 数据库方案开源介绍

近期为了帮助广大用户更好地使用 EDI 系统&#xff0c;我们根据以往的项目实施经验&#xff0c;将成熟的 EDI 项目进行开源。用户安装好知行之桥EDI系统之后&#xff0c;只需要下载我们整理好的示例代码&#xff0c;并放置在知行之桥指定的工作区中&#xff0c;即可开始使用。 …

公众号开发小程序,为品牌拓展更广阔的市场!

公众号开发小程序是指在微信公众号平台上开发出一种类似于手机App的轻量级应用&#xff0c;能够给用户提供更加便捷、快速、个性化的服务和体验。 相比于传统的应用&#xff0c;公众号开发小程序有如下优势&#xff1a; 1、提升用户体验&#xff1a;相比于网页应用&#xff0c…

k聚类简单实现(灰度分割,分黑白)

加载图像&#xff1a; k聚类分割后图像&#xff0c;分成黑白两类&#xff0c;故意把结果黑色类染红&#xff0c;核对发现是正确的&#xff1a; 具体算法如下&#xff1a; float globu1 40; float globu2 180; public void k均值迭代法更新(int imgw, int imgh, byte…

uniApp页面通讯大汇总,如何页面之间传值

文章目录 往期回顾页面通讯出现场景通讯方案通讯方案小结 如何父传子页面跳转时序图 uni.\$on和eventChannel.on使用推荐 往期回顾 uniapp 踩坑记录 uni.$on为什么不能修改data里面的数据 页面通讯 出现场景 我们在一个页面往另一个页面跳转的时候&#xff0c;希望跳转的页…

华为申请注册华为鸿蒙商标,华为申请注册“华为鸿蒙”商标,自研操作系统或将实现?-控制器/处理器-与非网...

华为的手机芯片取名为“麒麟”&#xff1b;基带芯片取名“巴龙”&#xff1b;服务器芯片取名“鲲鹏”&#xff1b;服务器平台&#xff0c;取名“泰山”&#xff1b;路由器芯片取名“凌霄”&#xff1b;人工智能芯片取名“昇腾”&#xff1b;5G 服务器芯片取名“天罡”。 除此之…

华为注册鸿蒙商标的故事,华为注册“鸿蒙”商标:意在把传说化为现实奇迹

5 月 25 日&#xff0c;华为的手机芯片取名为 " 麒麟 "&#xff1b;基带芯片取名 " 巴龙 "&#xff1b;服务器芯片取名 " 鲲鹏 "&#xff1b;服务器平台&#xff0c;取名 " 泰山 "&#xff1b;路由器芯片取名 " 凌霄 "&…