Java计时器任务:调整夏令时

Java计时器任务:调整夏令时,java,scheduled-tasks,dst,timertask,Java,Scheduled Tasks,Dst,Timertask,我有一段代码必须每天在特定时间执行。如果我把它安排在每天晚上9点执行,那么它就必须工作,即使在切换日光节约的时候 哪种Java API可以用来实现这一点 int ONE_DAY = 1000 * 60 * 60 * 24; Timer timer = new Timer(); timer.schedule(myTimerTask, startTime, ONE_DAY); // startTime is 9PM of current day 我使用了上面的方法,这种方法不会考虑DST。如果您需

我有一段代码必须每天在特定时间执行。如果我把它安排在每天晚上9点执行,那么它就必须工作,即使在切换日光节约的时候

哪种Java API可以用来实现这一点

int ONE_DAY = 1000 * 60 * 60 * 24;
Timer timer = new Timer();
timer.schedule(myTimerTask, startTime, ONE_DAY); // startTime is 9PM of current day

我使用了上面的方法,这种方法不会考虑DST。

如果您需要基于日历值进行计划,而不是仅仅是经过的时间,基本上-那么您需要在自己的代码中包装
计时器,或者使用已经为此目的构建的库。在这种情况下,我想这是你最好的选择

考虑到日期/时间是多么复杂,我通常建议您使用一个著名的库来滚动自己的代码。请注意,这通常并不意味着您可以不考虑问题的复杂方面就离开—它只是意味着您应该能够相当简单地表达您的需求。例如,在您正在查看的上下文中,您应该考虑:

  • 您希望“晚上9点”用什么时区表示?它是系统默认时区吗?还有什么特别的吗?不同的任务有多个不同的时区
  • 如果计划时间没有发生,或者一天发生两次,您希望发生什么?你可能对晚上9点没问题,但是如果你在英国时区(比如)凌晨1点30分,当时钟转到英国夏令时,那一天将被跳过——而当时钟回到格林尼治标准时间,它将发生两次
  • 您希望如何处理手动或自动更改的系统时钟

您可以安排计时器每小时运行一次任务,并让任务使用日历决定何时实际运行。这是系统默认时间。2.这两种情况下都应该有效。系统时间被手动和自动更改。@Vadiraj:我的观点是您需要定义“工作”的含义。。。如果系统本地时间已经是晚上9点,然后用户将其更改回晚上8点59分,任务是否应该再次启动?我不需要知道这个问题的答案,但你需要知道,这是你应该写下来测试的事情。哦,好的“工作”在我的代码中表示“myTimerTask”。这是正确的。如果用户将系统时间更改为每天8:59千次,那么“myTimerTask”指定的任务应该执行那么多次。谢谢。我必须按照你的建议去探索石英调度器。