【问题标题】:Java Timer doesn t start after midnightJava Timer 在午夜后不启动
【发布时间】:2017-04-14 03:17:37
【问题描述】:

在我的代码中,我试图编写一个每 24 小时触发一次的任务。第一次触发应该是在安排计时器时,然后是每早上 7 点。我正在使用

java.util.TimerTask  

我是这样写的:

Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 7);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
timer.schedule(task1, today.getTime(), TimeUnit.MILLISECONDS.convert(24, TimeUnit.HOURS));

每次我运行我的应用程序时都会启动任务(如预期的那样?)...但是在午夜之后如果我运行我的应用程序,则不会触发任务。

哪里出错了?

谢谢

【问题讨论】:

  • "但是在午夜之后" 你到底是什么意思?所有时间都在午夜之后。
  • timer 是什么类型? (我检查了它是否是ScheduledExecutorService,但没有与该签名匹配)。
  • java.util.TimerTask ...我的意思是我试图在 00.01 运行我的应用程序...并且任务没有执行。每晚都是同样的行为
  • @JoeC 见java.util.Timer
  • @Alex 你是在 00:01 运行这个,并等待 6h59m 看看它是否执行?

标签: java timer scheduled-tasks


【解决方案1】:

您将当天(不是第二天)的07:00:00 提供为firstTime

因此,如果时间是早上 7 点之后,您的 firstTime 就已经过去了。可能这就是任务立即启动的原因。

如果时间是“午夜之后”(可能是早上 7 点之前),则firstTime 是将来的时间。所以你必须等到早上 7 点才能开始任务。

【讨论】:

  • 我现在把时间触发时间改成了0……任务开始了。所以你的似乎是正确的答案。
猜你喜欢
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 2011-05-04
  • 1970-01-01
  • 2021-10-15
相关资源
最近更新 更多