我正在尝试使用Quartz在用户的时区中的特定时间设置单个执行作业。
现在,开箱即用,我可以告诉调度程序在时区中执行任何操作的唯一方法是cronSchedule
。粗略的,我可以将datetime转换为cron表达式,然后在第一次成功执行后立即停止该触发器,但闻起来。
注意:似乎SimpleSchedule
似乎不允许我设置时区。
另一种选择是将用户提供的所有时间转换为调度程序的时区,然后使用该时间创建触发器。但是,这是灾难的处方。
这里我最好的选择是什么?
谢谢,
答案 0 :(得分:0)
您可以使用所需的时区更新现有触发器并重新安排作业:
http://quartz-scheduler.org/documentation/quartz-2.x/cookbook/UpdateTrigger
// retrieve the trigger
Trigger oldTrigger = sched.getTrigger(triggerKey("oldTrigger", "group1");
// obtain a builder that would produce the trigger
TriggerBuilder tb = oldTrigger.getTriggerBuilder();
// update the schedule associated with the builder, and build the new trigger
// (other builder methods could be called, to change the trigger in any desired way)
Trigger newTrigger = tb.withSchedule(simpleSchedule()
.withIntervalInSeconds(10)
.withRepeatCount(10)
.inTimeZone(TimeZone.getTimeZone("America/Los_Angeles"))
.build();
sched.rescheduleJob(oldTrigger.getKey(), newTrigger);