2014-12-04 157 views
1

我正在使用Quartz調度程序來安排一些作業。以下是我的要求。在特定的時區運行Quartz Scheduler

  • 所有工作必須在00:00(美國東部時間)運行。
  • 除週六外,所有工作將每天進行。

所以第二個工作正常。但不是在EST上運行,而是在GMT上運行。雖然我已將時區設置爲EST。

Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); 
WeeklyCalendar weeklyOff = new WeeklyCalendar(); 
weeklyOff.setTimeZone(TimeZone.getTimeZone("est")); 
weeklyOff.setDayExcluded(java.util.Calendar.SATURDAY, true); 
scheduler.addCalendar("weeklyOff", weeklyOff, false,false); 


JobDetail jobScheduleScan = JobBuilder.newJob(jobScheduleScan.class).withIdentity("scheduleScan", "alpaca").build(); 


Trigger triggerScheduleScan = TriggerBuilder 
         .newTrigger() 
         .withIdentity("scheduleTrigger", "alpaca") 
         .startNow() 
         //.withSchedule(simpleSchedule().withIntervalInHours(1).repeatForever()) 
         .withSchedule(dailyAtHourAndMinute(00, 00).inTimeZone(TimeZone.getTimeZone("est"))) 
         .modifiedByCalendar("weeklyOff") 
         .build(); 


scheduler.scheduleJob(jobScheduleScan,triggerScheduleScan); 

scheduler.start(); 

回答

2

這是問題:我懷疑你寫

TimeZone.getTimeZone("est") 

System.out.println(TimeZone.getTimeZone("est")); 

你就會得到這樣

sun.util.calendar.ZoneInfo 
[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] 

基本上 「EST」 ISN」有效的時區ID。無論如何,我懷疑你不是指「EST」,而是恰當地轉換爲EST和EDT的「東部時間」。對於這一點,你應該使用 「美國/紐約」 的ID,那麼:

weeklyOff.setTimeZone(TimeZone.getTimeZone("America/New_York")); 

如果你真的想UTC-5的固定時間段,您可以使用:

weeklyOff.setTimeZone(TimeZone.getTimeZone("GMT-05:00")); 
+0

我已嘗試 System.out.println(TimeZone.getTimeZone(「America/New_York」)); System.out.println(TimeZone.getTimeZone(「GMT-05:00」)); 但它不工作。扔你之前提到的相同。 sun.utill.calendar.ZoneInfo .......... – Shibankar 2014-12-04 11:35:19

+0

@Angel:這兩個顯示ID爲「GMT」?這非常不尋常 - 特別是對於後者,因爲這是構建固定偏移時區的具體方式。你在運行什麼JVM,在什麼操作系統下運行? 'TimeZone.getAvailableIDs'返回什麼? – 2014-12-04 11:37:18

+0

謝謝。 TimeZone.getAvailableIDs幫助了我。其實它應該「EST」而不是「est」。它現在修復了。 – Shibankar 2014-12-04 11:56:53

相關問題