在使用定时器 quartz 时,其中的cron 表达式,老板表示作为开发的你能看懂外,其他的非开发同事可能看不懂,要用一个他们能看懂的方式表达出来。

还好我们的项目要求的表达式不是特别的麻烦,所以就写了一个简略的转换为中文的方法

package com.common.utils;

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 CronExpParser

{

/**

* 解析corn表达式,生成指定日期的时间序列

*

* @param cronExpression cron表达式

* @param cronDate cron解析日期

* @param result crom解析时间序列

* @return 解析成功失败

*/

public static boolean parser(String cronExpression, String cronDate, List 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 (ParseException 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 java.text.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();

// 生成时间序列

java.util.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 (ParseException e)

{

return "corn表达式不正确";

}

String[] tmpCorns = cronExp.split(" ");

StringBuffer sBuffer = new StringBuffer();

if(tmpCorns.length == 6)

{

//解析月

if(!tmpCorns[4].equals("*"))

{

sBuffer.append(tmpCorns[4]).append("月");

}

else

{

sBuffer.append("每月");

}

//解析周

if(!tmpCorns[5].equals("*") && !tmpCorns[5].equals("?"))

{

char[] tmpArray = tmpCorns[5].toCharArray();

for(char tmp:tmpArray)

{

switch (tmp)

{

case '1':

sBuffer.append("星期天");

break;

case '2':

sBuffer.append("星期一");

break;

case '3':

sBuffer.append("星期二");

break;

case '4':

sBuffer.append("星期三");

break;

case '5':

sBuffer.append("星期四");

break;

case '6':

sBuffer.append("星期五");

break;

case '7':

sBuffer.append("星期六");

break;

case '-':

sBuffer.append("至");

break;

default:

sBuffer.append(tmp);

break;

}

}

}

//解析日

if(!tmpCorns[3].equals("?"))

{

if(!tmpCorns[3].equals("*"))

{

sBuffer.append(tmpCorns[3]).append("日");

}

else

{

sBuffer.append("每日");

}

}

//解析时

if(!tmpCorns[2].equals("*"))

{

sBuffer.append(tmpCorns[2]).append("时");

}

else

{

sBuffer.append("每时");

}

//解析分

if(!tmpCorns[1].equals("*"))

{

sBuffer.append(tmpCorns[1]).append("分");

}

else

{

sBuffer.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 = "0 0 3 * * ?";

// 生成指定日期的CRON时间序列

String CRON_DATE = "2016-04-26";

System.out.println(CRON_EXPRESSION);

System.out.println(CronExpParser.translateToChinese(CRON_EXPRESSION));

List lTime = new ArrayList();

if(!CronExpParser.parser(CRON_EXPRESSION, CRON_DATE, lTime)){

System.out.println("无法生成Cron表达式:日期,"+CRON_DATE+";不符合规则cron表达式:"+CRON_EXPRESSION);

}

for(int i=0;i

System.out.println(lTime.get(i));

}

}

}

执行结果:

0 0 3 * * ?

每月每日3时0分0秒

2016-04-26 03:00:00

老板说界面也不能直接让她们写表达式,最好是能有直观的感受去选,

于是我设计的界面如下:可以手动修改执行时间,或者可以使用cron表达式界面去修改,执行日期修改时 描述信息也将修改

执行时间:

说明:设置定时器调度的时程表格式 (0-59,*) (0-59,*) (0-23,*) (0-31,*,?) (0-11) (1-7,*,? 1=SUN) /指数值的增量
示例① 0 0 12 * * ? 例② 0 15,16 10 15 * ? 例③ 0 15 10 ? * 2-6

执行时间描述:

用一个 onchange 方法,调用一个 ajax 就可以实现描述的 更新啦

function checkCron()

{

var datas={

"cronExp":$("#cron").val()

};

$.ajax({

type: "post",

url: "/getCronDesc",

data: datas,

datatype: "text",

success:function(data){ //成功的处理函数

$("#cronDesc").html(data);

}

});

}

而 Cron 表达式的页面效果,找了好久,终于看到想看的东西了。感谢 网友的无私分享,在他的基础之上,我经过修改改成自己需要的了,效果如下。

打开一个新的页面

openWin("../../static/cron/cronindex.htm", 640, 480);

function openWin(url,width,height)

{

var newwin = window.open(url,"_blank","scrollbars=yes,resizable=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,top=50,left=120,width="+width+",height="+height);

}

在打开的页面上选中值后,关闭子页面,并给父页面的某个表单赋值,调用父页面的某个js 方法

function selCron() {

//获取选中的选择框的值

var cron = $("#cron").val();

window.opener.cron.value=cron;

window.close();

window.opener.checkCron();

}

(ps: 居然不知道 附件怎么上传,算了,corn 页面我就不写了,自己去找吧)

cron翻译_将定时任务cron 解析成中文相关推荐

  1. js把base64串解析成中文_回文问题终极篇:最小代价构造回文串

    学算法认准 labuladong 东哥带你手把手撕力扣? 点击下方卡片即可搜索? 读完本文,你可以去力扣完成第 1312 题「让字符串成为回文串的最少插入次数」,难度 Hard. 回文串就是正着读反着 ...

  2. AndroidStudio_安卓原生开发_请求网络图片并解析成BitMap_异步处理_在UI线程执行_利用AsyncTask---Android原生开发工作笔记146

    直接看代码吧. //1.这里获取图片runOnUiThread(new Runnable() {@Overridepublic void run() {SharedPreferences settin ...

  3. js把base64串解析成中文_26日大嘴足球:晚场5中3/中2串+1比分,早场(意甲+西甲)2场解析!!...

    周三早场2中1,命中意甲热那亚0-0博洛尼亚平局,但法甲圣埃蒂安0-1不敌梅斯,无缘正路主胜打出!晚场2档高开低走,下午档日韩5中4,主推2中2全红,串关命中主推2串1(2.1倍回报)!晚间档主推仅3 ...

  4. 维基百科文件解析成中文遇到的变量类型、编码问题

    2019独角兽企业重金招聘Python工程师标准>>> 为了练习Gensim中文词向量建模,要用到wiki文件做语料库.因为这个文件是xml格式的,需要把它转成文本格式,所以有了下面 ...

  5. 软件工程毕业论文mysql英文翻译_软件工程技术英文文献和中文翻译

    软件工程技术英文文献和中文翻译 时间:2019-09-25 19:14来源:毕业论文 A Brief History of Software Engineering Techniques Histor ...

  6. 英文版的pdf文件怎么翻译成中文-免费的自动翻译器

    文档英文翻译成中文 如果您想将英文文档翻译成中文,以下是几种可用的方法: 使用机器翻译工具 - 机器翻译是将英文文本通过计算机程序转换成中文.您可以使用在线翻译服务,如Google翻译.百度翻译.有道 ...

  7. Golang 定时任务 github/robfig/cron/v3 使用与源码解析

    Cron 源码阅读 robfig/cron/v3 是一个 Golang 的定时任务库,支持 cron 表达式.Cron 的源码真实教科书级别的存在(可能是我菜 -),真的把低耦合高内聚体现地淋漓尽致, ...

  8. Spring Boot定时任务-cron表达式

    其实cron表达式呢,其实就是一个基于字符串的,基于时间的一个定义格式,那我们就来看一下cron表达式语法的定义,cron表达式它是一个字符串的,并且在字符串当中呢,包含6个域或者7个域,然后每个域表 ...

  9. Linux定时任务cron及部分Linux命令

    cron服务¶ 在Ubuntu中,定时任务cron服务默认被安装.可以通过以下命令操作该服务: service cron status 查看服务运行状态 service cron start 启动服务 ...

最新文章

  1. java 多条件比较_Java 多条件复杂排序小结
  2. 如何让eclipse恢复默认布局
  3. PROD_ROOT and PRD_ROOT
  4. 实例63:python
  5. centos 7用ss命令来查看端口占用和对应进程
  6. scala学习-scala中的特殊符号使用
  7. fib函数用python编写求第n项_第6章函数-4 使用函数输出指定范围内Fibonacci数的个数|简明python教程|python入门|python教程...
  8. php程序员会什么,php程序员是什么
  9. 百度,你拿什么和谷歌争?| 畅言
  10. 嵌入式Linux的学习路线
  11. obs点开始推流显示无法连接服务器,前沿科技资讯:OBS Studio推流连接失败如何办 OBS推流失败的正确解决方法...
  12. Winform自动升级系统的设计与实现(源码)
  13. pyecharts制作柱状图和折线图
  14. deepin 安装到移动硬盘_系统装机|硬盘里的Linux之deepin 20系统安装教程
  15. 云呐|新兴行业中组织流程资产哪些的内容
  16. K-BERT:BERT+知识图谱
  17. c语言中 n的意义,\n\n在c语言中是什么意思?_后端开发
  18. 绿原酸酯与CALB Docking(3) - Covalent Docking
  19. SVD求解旋转矩阵(Least-Squares Fitting of Two 3-D Point Sets论文)
  20. 第 9 章 Part / Chapter / Section

热门文章

  1. oracle查sysdate,oracle sysdate 时间整理
  2. I Like It Heavy --翻译_习惯累积沉淀_新浪博客
  3. zepto 追加 html,zepto.html
  4. C语言逗号表达式在for循环语句中的使用
  5. Matlab:矩阵分解
  6. 哨兵模式的redis实例重置脚本
  7. 代码重构-业务中台化
  8. 孙溟㠭禅意篆刻——《心外无法》
  9. 深圳.Net俱乐部2.26活动资源下载
  10. ipad手写笔什么牌子好?最好用的电容笔