2014-12-03 22 views
0

我有以下方法來安排在不同時區和開始日期觸發的作業。使用startdate和timezone設置石英時間表

如果服務器的時區是亞洲/臺北,並計劃設置爲以下輸入:

triggerName="testTrigger", 
jobName="testJob", 
group="testGroup", 
startDate = 2014-12-03 18:00:00 
timezoneString = "Austrailia/Melbourne" 
cronExp = 0 0/1 * 1/1 * ? * 

應該什麼時候發射時間?

public void schedule(String triggerName, String jobName, String group, Date startDate,  String timezoneString, String cronExp){ 
    try { 
     JobDetail jobDetail = new JobDetail(jobName, group, MessageJob.class); 

     TimeZone timeZone = TimeZone.getTimeZone(timezoneString); 
     Date startDate = startDate; 

     Calendar cal1 = Calendar.getInstance(); 
     cal1.setTime(startDate); 
     cal1.setTimeZone(timeZone); 
     startDate = cal1.getTime(); 

     CronTrigger cronTrigger = new CronTrigger(triggerName, group, jobName, jobGroup, startDate, null, cronExp, timeZone); 
     scheduler.start(); 

    } catch (ParseException e) { 
     System.out.println("ParseException issues " + e.getMessage()); 
    }catch(IllegalArgumentException e){ 
     System.out.println("IllegalArgumentException issues " + e.getMessage()); 
    } 
} 

回答

0

如果您在Quartz cron觸發器中明確設置了不同的時區,則觸發器將根據指定時區中的觸發器配置進行觸發。即您的cron觸發器表達式將使用澳大利亞/墨爾本時區進行評估。

爲了證明這一點,我在QuartzDesk的澳大利亞/墨爾本時區創建了一個示例cron觸發器。我當地的時區是CET(中歐時間)。在GUI中,您可以清楚地看到Quartz返回的觸發器的下一次着火時間爲2014-12-04 14:00:00(在本地CET時區中)。

Australia/Melbourne trigger in QuartzDesk

現在,當這個時間轉換爲澳大利亞/墨爾本時區(我用這個online converter),我收到2014年12月4日00:00:00這是預期觸發時間:

Midnight in Australia/Melbourne timezone = 14:00:00 in CET timezone

至於當你的cron表達式(0 0/1 * 1/1 *?*)觸發時,它會在每個小時(01:00:00,01:01:00, )在澳大利亞/墨爾本時區。現在考慮臺北是澳大利亞/墨爾本+ 3小時,那麼在你的時區火災時間將是21:01:00,21:02:00,...