我正在使用Quartz调度程序来安排一些工作。以下是我的要求。
所以第二个工作正常。但它不是在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();
答案 0 :(得分: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"不是有效的时区ID。我怀疑你并不意味着" EST"无论如何,但是"东部时间"这是EST和EDT,适当切换。为此,你应该使用" America / New_York"的ID,所以:
weeklyOff.setTimeZone(TimeZone.getTimeZone("America/New_York"));
如果确实想要一个固定的UTC-5时区,您可以使用:
weeklyOff.setTimeZone(TimeZone.getTimeZone("GMT-05:00"));