上回說到,我們的設置頁面已經做好了,接下來就是將時間轉換為Unix Cron Expression。
2) 將時間轉換為Unix Cron Expression
需要ActionForm將頁面表單數據映射到Action中,然後在Action中轉換為cron expression:
1 SchedulerForm schedulerForm = (SchedulerForm) form;
2 String jobName = schedulerForm.getJobName();
3 String cronExpression = "" ;
4 String[] commonNeeds = {schedulerForm.getSecond(), schedulerForm.getMinute(), schedulerForm.getHour()} ;
5 String[] monthlyNeeds = {schedulerForm.getWeek(), schedulerForm.getDayOfMonth()} ;
6 String weeklyNeeds = schedulerForm.getDayOfWeek();
7 String userDefinedNeeds = schedulerForm.getDate();
8 String everyWhat = schedulerForm.getEveryWhat();
9 // 得到時間規則
10 cronExpression = CronExpConversion.getCronExpression(everyWhat, commonNeeds,
11 monthlyNeeds, weeklyNeeds, userDefinedNeeds);
12
我定義了一個 規則類來處理轉換規則(寫得不是很好 能用就行 嘿嘿)
1
2 /** */ /**
3 * 頁面設置轉為UNIX cron expressions 轉換類
4 * CronExpConversion
5 */
6 public class CronExpConversion {
7
8 /** */ /**
9 * 頁面設置轉為UNIX cron expressions 轉換算法
10 * @param everyWhat
11 * @param commonNeeds 包括 second minute hour
12 * @param monthlyNeeds 包括 第幾個星期 星期幾
13 * @param weeklyNeeds 包括 星期幾
14 * @param userDefinedNeeds 包括具體時間點
15 * @return cron expression
16 */
17 public static String convertDateToCronExp(String everyWhat,
18 String[] commonNeeds, String[] monthlyNeeds, String weeklyNeeds,
19 String userDefinedNeeds) {
20 String cronEx = "" ;
21 String commons = commonNeeds[ 0 ] + " " + commonNeeds[ 1 ] + " "
22 + commonNeeds[ 2 ] + " " ;
23 String dayOfWeek = "" ;
24 if ( " monthly " .equals(everyWhat)) {
25 // eg.: 6#3 (day 6 = Friday and "#3" = the 3rd one in the
26 // month)
27 dayOfWeek = monthlyNeeds[ 1 ]
28 + CronExRelated.specialCharacters
29 .get(CronExRelated._THENTH) + monthlyNeeds[ 0 ];
30 cronEx = (commons
31 + CronExRelated.specialCharacters.get(CronExRelated._ANY)
32 + " "
33 + CronExRelated.specialCharacters.get(CronExRelated._EVERY)
34 + " " + dayOfWeek + " " ).trim();
35 } else if ( " weekly " .equals(everyWhat)) {
36 dayOfWeek = weeklyNeeds; // 1
37 cronEx = (commons
38 + CronExRelated.specialCharacters.get(CronExRelated._ANY)
39 + " "
40 + CronExRelated.specialCharacters.get(CronExRelated._EVERY)
41 + " " + dayOfWeek + " " ).trim();
42 } else if ( " userDefined " .equals(everyWhat)) {
43 String dayOfMonth = userDefinedNeeds.split( " - " )[ 2 ];
44 if (dayOfMonth.startsWith( " 0 " )) {
45 dayOfMonth = dayOfMonth.replaceFirst( " 0 " , "" );
46 }
47 String month = userDefinedNeeds.split( " - " )[ 1 ];
48 if (month.startsWith( " 0 " )) {
49 month = month.replaceFirst( " 0 " , "" );
50 }
51 String year = userDefinedNeeds.split( " - " )[ 0 ];
52 // FIXME 暫時不加年份 Quartz報錯
53 /**/ /* cronEx = (commons + dayOfMonth + " " + month + " "
54 + CronExRelated.specialCharacters.get(CronExRelated._ANY)
55 + " " + year).trim(); */
56 cronEx = (commons + dayOfMonth + " " + month + " "
57 + CronExRelated.specialCharacters.get(CronExRelated._ANY)
58 + " " ).trim();
59 }
60 return cronEx;
61 }
62 }
63
這樣就將頁面的時間設置轉為了Cron Expression。