我有以下方法来安排作业在不同的时区和开始日期被解雇。
如果服务器的时区是亚洲/台北,并且时间表设置为以下输入:
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 :(得分:1)
如果您在Quartz cron触发器中明确设置了不同的时区,则触发器将根据指定时区中的触发器配置触发。即您的cron触发器表达将使用澳大利亚/墨尔本时区进行评估。
为了证明这一点,我在QuartzDesk创建了澳大利亚/墨尔本时区的示例cron触发器。我当地的时区是CET(中欧时间)。在GUI中,您可以清楚地看到Quartz返回的触发器的下一个开火时间是2014-12-04 14:00:00(在本地CET时区)。
现在,当您将此时间转换为澳大利亚/墨尔本时区(我使用此online converter)时,我得到2014-12-04 00:00:00这是预期的触发时间:
当你的cron表达式(0 0/1 * 1/1 *?*)触发时,它会在每小时(01:00:00,01:01:00,...)每分钟触发一次澳大利亚/墨尔本时区。现在考虑到台北是澳大利亚/墨尔本+ 3小时,那么你的时区的火灾时间将是21:01:00,21:02:00,...