`

Quartz自定义时间转换规则

阅读更多
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="css/demo.css">
<link rel="stylesheet" type="text/css" href="themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="themes/icon.css">
<script type="text/javascript" src="jquery/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="jquery/jquery.easyui.min.js"></script>
<script type="text/javascript">
$(function(){
	$('#dd').datebox({   
	    required:true,
	    formatter:function(date){
	    	var y = date.getFullYear();
	    	var m = date.getMonth()+1;
	    	var d = date.getDate();
	    	return y+'-'+m+'-'+d;
	    }


	});
});
</script>
</head>
<body>
<div id="tt" class="easyui-tabs" style="width:500px;height:250px;">  
    <div title="Weekly" style="padding:20px;">
   <form action="test.action" method="get">
    <input type="hidden" name="everyWhat" value="weekly"> 
       星期一<input type="checkbox" name="dayOfWeek" value="2">&nbsp;&nbsp;星期二<input type="checkbox" name="dayOfWeek" value="3">&nbsp;&nbsp;星期三<input type="checkbox" name="dayOfWeek" value="4">&nbsp;&nbsp;星期四<input type="checkbox" name="dayOfWeek" value="5"><p>
       星期五<input type="checkbox"  name="dayOfWeek" value="6">&nbsp;&nbsp;星期六<input type="checkbox" name="dayOfWeek" value="7">&nbsp;&nbsp;星期日<input type="checkbox" name="dayOfWeek" value="1"><p>
        <%@include file="common.jsp" %>
         <input type="submit" name="提交">
         </form>
    </div>  
    <div title="Monthly" data-options="closable:true" style="overflow:auto;padding:20px;">
   <form action="test.action" method="get">
    <input type="hidden" name="everyWhat" value="monthly"> 
        选择第几个星期:<select name="week">
	           <option value="1">一</option>
	           <option value="2">二</option>
	           <option value="3">三</option>
	           <option value="4">四</option>
               </select>
               <select name="dayOfWeek">
	           <option value="1">星期日</option>
	           <option value="2">星期一</option>
	           <option value="3">星期二</option>
	           <option value="4">星期三</option>
	           <option value="5">星期四</option>
	           <option value="6">星期五</option>
	           <option value="7">星期六</option>
               </select><p>
               <%@include file="common.jsp" %>
               <input type="submit" name="提交">
     </form>   
    </div>
    <div title="User Defined" data-options="closable:true" style="padding:20px;">
    <form action="test.action" method="get">
    <input type="hidden" name="everyWhat" value="userDefined"> 
             日期:<input id="dd" type="text" name="date"></input><p>
           <%@include file="common.jsp" %>
           <input type="submit" name="提交">
     </form>   
    </div>  
</div> 
</body>
</html>

  

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>
<body>
      起始时间:<select name="hour">
           <option value="1">1</option>
           <option value="2">2</option>
           <option value="3">3</option>
           <option value="4">4</option>
           <option value="5">5</option>
           <option value="6">6</option>
           <option value="7">7</option>
           <option value="8">8</option>
           <option value="9">9</option>
           <option value="10">10</option>
           <option value="11">11</option>
           <option value="12">12</option>
           <option value="13">13</option>
           <option value="14">14</option>
           <option value="15">15</option>
           <option value="16">16</option>
           <option value="17">17</option>
           <option value="6">18</option>
           <option value="7">19</option>
           <option value="8">20</option>
           <option value="9">21</option>
           <option value="10">22</option>
           <option value="11">23</option>
         </select>
         <input type="text" name="minute" value="0" style="width:20px">分
         <input type="text" name="second" value="0" style="width:20px">秒(0-59)<p>
</body>
</html>

 

package com.acca.util;

/**
 * 页面设置转为UNIX cron expressions 转换类 CronExpConversion
 */
public class CronExpConversion {

    /**
     * 页面设置转为UNIX cron expressions 转换算法
     * 
     * @param everyWhat
     * @param commonNeeds 包括 second minute hour
     * @param monthlyNeeds 包括 第几个星期 星期几
     * @param weeklyNeeds 包括 星期几
     * @param userDefinedNeeds 包括具体时间点
     * @return cron expression
     */
    public static String convertDateToCronExp(String everyWhat, String[] commonNeeds,
                                              String[] monthlyNeeds, String weeklyNeeds,
                                              String userDefinedNeeds) {
        String cronEx = "";
        String commons = commonNeeds[0] + "   " + commonNeeds[1] + "   " + commonNeeds[2] + "   ";
        String dayOfWeek = "";
        if ("monthly".equals(everyWhat)) {
            // eg.: 6#3 (day 6 = Friday and "#3" = the 3rd one in the
            // month)
            dayOfWeek = monthlyNeeds[1]
                    + CronExRelated.specialCharacters.get(CronExRelated._THENTH) + monthlyNeeds[0];
            cronEx = (commons + CronExRelated.specialCharacters.get(CronExRelated._ANY) + "   "
                    + CronExRelated.specialCharacters.get(CronExRelated._EVERY) + "   " + dayOfWeek + "   ")
                    .trim();
        } else if ("weekly".equals(everyWhat)) {
            dayOfWeek = weeklyNeeds; // 1
            if (dayOfWeek != null) {
                cronEx = (commons + CronExRelated.specialCharacters.get(CronExRelated._ANY) + "   "
                        + CronExRelated.specialCharacters.get(CronExRelated._EVERY) + "   "
                        + dayOfWeek + "   ").trim();
            } else {
                cronEx = (commons + CronExRelated.specialCharacters.get(CronExRelated._ANY) + "   "
                        + CronExRelated.specialCharacters.get(CronExRelated._EVERY) + "   "
                        + CronExRelated.specialCharacters.get(CronExRelated._EVERY) + "   ").trim();
            }
        } else if ("userDefined".equals(everyWhat)) {
            String dayOfMonth = userDefinedNeeds.split("-")[2];
            if (dayOfMonth.startsWith("0")) {
                dayOfMonth = dayOfMonth.replaceFirst("0", "");
            }
            String month = userDefinedNeeds.split("-")[1];
            if (month.startsWith("0")) {
                month = month.replaceFirst("0", "");
            }
            String year = userDefinedNeeds.split("-")[0];
            // FIXME 暂时不加年份 Quartz报错
            /*
             * cronEx = (commons + dayOfMonth + " " + month + " " +
             * CronExRelated.specialCharacters.get(CronExRelated._ANY) + " " + year).trim();
             */
            cronEx = (commons + dayOfMonth + " " + month + " "
                    + CronExRelated.specialCharacters.get(CronExRelated._ANY) + "   ").trim();
        }
        return cronEx;
    }
}

 

package com.acca.util;

import java.util.HashMap;
import java.util.Map;

/**
 * 
 * 格式: [秒] [分] [小时] [日] [月] [周] [年]
 * 
 * 
 * @author zhouhua, 2013-1-18
 */
@SuppressWarnings("unchecked")
public class CronExRelated {
    public static final String _EVERY = "every";
    public static final String _ANY = "any";
    public static final String _RANGES = "ranges";
    public static final String _INCREMENTS = "increments";
    public static final String _ADDITIONAL = "additional";
    public static final String _LAST = "last";
    public static final String _WEEKDAY = "weekday";
    public static final String _THENTH = "theNth";
    public static final String _CALENDAR = "calendar";

    public static final String _TYPE = "type";

    /**
     * 0 0 6 ? * 1#1 ? monthly; 0 0 6 ? * 1 ? weekly; 0 0 6 30 7 ? 2006 useDefined
     */
    static String[] headTitle = { "TYPE", "SECONDS", "MINUTES", "HOURS", "DAYOFMONTH", "MONTH",
        "DAYOFWEEK", "YEAR" };

    /**
     * cron expression special characters Map specialCharacters
     */
    public static Map specialCharacters;

    static {
        specialCharacters = new HashMap(10);
        specialCharacters.put(_EVERY, "*");//* 代表任意合法的字段 
        specialCharacters.put(_ANY, "?");//? 表示没值被指定 ,只能出现在月和星期的字段
        specialCharacters.put(_RANGES, "-");//- 表示值的范围 
        specialCharacters.put(_INCREMENTS, "/");// / 表示时间的增量 
        specialCharacters.put(_ADDITIONAL, ",");//表示指定多个值,例如在周字段上设置 "MON,WED,FRI" 表示周一,周三和周五触发
        specialCharacters.put(_LAST, "L");//L 如果用在"一月哪天"段上,表示一个月的最后一天;如果用在"星期"段上。表示一个星期的最后一天(星期六)
        specialCharacters.put(_WEEKDAY, "W");//W 表示最靠近给定时间的一天,(必须是星期一到星期五)
        specialCharacters.put(_THENTH, "#");//只能出现在"星期"段位置 ,表示第几个星期
        specialCharacters.put(_CALENDAR, "C");

        specialCharacters.put(_TYPE, headTitle);
    }

    public static void set(String ex, int index) {
        ((String[]) specialCharacters.get(_TYPE))[index] = ex;
    }
}

 

    /**
     * 测试格式转换
     * @return
     */
    public String test(){
       String cronExpression  =   "" ;
       HttpServletRequest request=ServletActionContext.getRequest();
       String[] commonNeeds  = {request.getParameter("second"),request.getParameter("minute"),request.getParameter("hour")};
       String[] monthlyNeeds={request.getParameter("week"),request.getParameter("dayOfWeek")};
       String weeklyNeeds=(String) request.getParameter("dayOfWeek");
       String userDefinedNeeds=request.getParameter("date");
       String everyWhat=request.getParameter("everyWhat");
       cronExpression=CronExpConversion.convertDateToCronExp(everyWhat, commonNeeds, monthlyNeeds, weeklyNeeds, userDefinedNeeds);
       System.out.println(cronExpression);
       return null; 
    }

 

因为本人使用的是struts2测试类在struts。xml中的配置为

<action name="test" class="jobTaskAction" method="test"></action>

这个quartz时间规则转换还有一些没有完善的地方,例如当输入相应的时间规则后,只是简单的实现了后台打印,并没有实现在前台显示也没有实现保存到数据库中,当然这些并不是最重要的,重要的是,quartz时间规则转换的实现,大家可以根据自己项目的要求进行改进,希望改进后可以共享,谢谢大家。
给大家附上几张效果图看看

 

  • 大小: 18.1 KB
  • 大小: 16.1 KB
  • 大小: 14.9 KB
1
1
分享到:
评论

相关推荐

    Spring Quartz如何动态配置时间

    Spring Quartz 动态配置时间 Spring Quartz 是一个功能强大的任务调度框架,...使用 Spring Quartz 实现动态配置时间可以提高系统的灵活性和可维护性,但需要正确地选择时间规则、转换时间规则和记录时间规则表达式。

    Newtonsoft.Json4.0\Quartz.NET-1.0.3源代码

    1. **灵活的调度**:支持复杂的调度规则,如按时间间隔执行、指定日期执行、依赖于其他作业的执行等。 2. **可移植性**:可以在多种 .NET 平台(如 Windows、Linux、Mono)上运行。 3. **作业和触发器**:作业(Job...

    QuartzDesk使用说明文档

    2. **可视化调度**:用户可以通过拖放操作来设置任务的执行时间,或者使用Cron表达式来定义复杂的调度规则。 3. **集群管理**:在分布式环境中,QuartzDesk能跨多个节点查看和管理作业,确保在集群中的任务一致性。...

    boot+mybatis、mybatis中枚举转换器、前后端分离项目统一返回格式、boot集成quraz框架实现定时任务

    在该方法中,可以使用`Scheduler`对象的`scheduleJob`方法来安排任务,指定任务执行的时间规则。最后,编写具体的任务类,实现`org.quartz.Job`接口,并使用`@DisallowConcurrentExecution`注解防止并发执行。 这些...

    Cron生成表达式html源码

    2. 表达式解析器:将用户的输入转换为有效的Cron表达式字符串。 3. 反解析器:将Cron表达式解析回用户可读的时间间隔描述。 4. 预览功能:显示Cron表达式所对应的下次执行时间,以及周期性的执行时间序列,帮助用户...

    XWork-Quartz integration-开源

    Quartz则是一个功能强大的作业调度库,它可以按预定的时间表执行任务,包括简单的单次执行、周期性任务,甚至复杂的调度规则。Quartz支持集群,具备高可用性和可伸缩性,广泛应用于各种需要定时任务的场景。 XWork-...

    xmllite.dll visio读取xml文件的插件

    Quartz支持多种触发器类型,如简单触发器、cron触发器等,可以根据实际需求设置任务执行的时间规则。此外,Quartz还提供了灵活的Job(任务)和Trigger(触发器)设计,使得任务可以独立于调度器存在,且支持集群部署...

    ecg-broker_websocket_apachecamel_

    2. 转换规则:定义了如何将接收到的数据从一种格式转换为另一种,可能包含JSON、XML或自定义格式之间的转换。 3. 定时任务配置:可能使用Quartz或Spring Scheduler等库,定义了周期性执行的任务,例如定期从数据库...

    数据质量控制系统初步想法1

    2. **质控规则管理子系统**:规则管理分为通用规则和自定义规则。通用规则是预设的,如检查空值、字段格式和身份证号码合法性。自定义规则则根据具体业务需求设定,如费用明细与费用合计的匹配、码值合法性验证和...

    java 实用的日历工具类 日历组件 直接就可以用 简单 功能强

    你可以自定义格式,如"yyyy-MM-dd HH:mm:ss",将日期时间对象转换为字符串,或者反过来,从字符串解析出日期时间对象。 如果你的项目中需要更高级的日历功能,如事件调度、重复规则等,可以考虑使用`java.time....

    CommonJob.zip

    在Java世界中,Spring框架的定时任务功能是开发者常用的工具,可以方便地定义和管理定时任务,支持cron表达式,使得任务可以根据自定义的时间规则进行触发。 接下来,描述中提到的“查询DB数据并处理EXCEL中的数据...

    apache-camel-1.6.4-src.zip

    5. **调度与定时任务**:Camel可以通过Quartz等定时器组件来调度任务,实现定时启动或执行特定任务。 6. **测试框架**:Camel提供了一套完整的测试工具,如MockEndpoint和WireTap,方便开发者单元测试和集成测试...

    camel的使用

    3. **数据转换**:Camel提供了丰富的数据转换工具,如Simple Language用于表达式处理,DataFormat组件进行数据格式化,如JSON、XML之间的转换。 4. **错误处理**:Camel提供了异常处理机制,如错误处理器和红...

    计算机软件-编程源码-8.5 屏幕拷贝.zip

    此外,为了提供用户友好的体验,可能还需要实现一些额外的功能,如选择特定窗口进行截图、自定义截图区域、定时截图、添加标注或注释等。这些都需要对GUI事件处理、图形绘制和用户交互设计有深入理解。 在编程源码...

    spring定时任务所需jar包 slf4j-api-1.5.6.jar 和slf4j-log4j12-1.5.6.jar

    Cron表达式是一种字符串格式,用于定义计划任务的时间触发规则。它包含6或7个子表达式,分别代表秒、分钟、小时、日期、月份、星期以及年份(可选)。例如,`"0 0/5 * * * ?"`表示每5分钟执行一次。 3. **配置@...

    RuoYiCloud.rar

    RuoYiCloud可能会采用Quartz或Spring Task等任务调度框架,开发者可以自定义调度策略,灵活地安排任务执行。 总的来说,RuoYiCloud是一个全面的云平台,集成了多种企业级功能,并通过Sentinel增强了微服务架构的...

    设计汉字并实现输出

    这可以通过设置图形库的填充规则(如非零环绕规则或偶数规则)来实现。各种变换,如平移、旋转、缩放,都是通过应用几何变换矩阵来完成的。例如,平移可以通过修改坐标系统的原点位置来实现;旋转和平面反射则需要...

    synapse-purge-源码.rar

    2. **清理策略**:根据预定义的规则或用户自定义策略,确定哪些资源可以安全地删除。这可能涉及到对Synapse运行状态的理解,以及对清理策略的配置接口设计。 3. **日志管理和数据库交互**:这部分代码处理日志文件...

Global site tag (gtag.js) - Google Analytics