`

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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics