认识Janitor,一个每天凌晨3点运行的计时器。
Timer janitorTimer = new Timer();
TimerTask janitorWorker = new Janitor(); // Extending TimerTask
long delay = TimeUtils.getMillisUntilTomorrowAt( 3L * 3600000L); // Does what it says
janitorTimer.scheduleAtFixedRate( janitorWorker, delay, 24L * 3600000L);
在某个时间点我想知道下一个janitorWorker执行时间。
无法在Timer或TimerTask中找到任何相关内容。
觉得某些东西应该已经知道了。
答案 0 :(得分:1)
在TimerTask
的实施中,您可以公开nextExecutionTime
,然后将其与当前时间进行比较,请参阅mainLoop
中的Timer
答案 1 :(得分:0)
在尚未执行任务的情况下,方法scheduledExecutionTime未定义。但是,在我的应用程序中,一旦执行了一次执行任务,该方法实际上会在执行之前和之后返回预定时间 注意此行为是特定于设备的,未记录在案。因此,应该针对每个设备验证此方法,并且通常不建议这样做。
答案 2 :(得分:-1)
在TimerTask中,存在一个名为scheduledExecutionTime()
的方法。它的作用是:
返回最近实际的计划执行时间 执行这项任务。
参考:http://docs.oracle.com/javase/6/docs/api/java/util/TimerTask.html#scheduledExecutionTime%28%29
<强>更新强>
这是一种新方式。
因为它具有固定费率,您可以做的是致电scheduledExecutionTime()
添加 fixedRate 值,然后推断出 nextExecutionTime 。