2017-09-20 53 views
0

我有java.util.Timer類和TimerTask來調度,我想每天在凌晨2點做任務。Java延時從不運行

我的代碼:

public class AutomaticPuller { 

    final private Timer t = new Timer(); 

    public AutomaticPuller() { 
     Calendar today = Calendar.getInstance(); 
     today.set(Calendar.HOUR_OF_DAY, 2); 
     today.set(Calendar.MINUTE, 0); 
     today.set(Calendar.SECOND, 0); 
     long cooldown = today.getTimeInMillis(); 
     if (today.getTime().before(new Date(System.currentTimeMillis()))) { 
      cooldown += 24L*60L*60L*1000L; 
     } 
     System.out.println("Task will run at: " + new Date(cooldown)); 
     TimerTask tt = new TimerTask() { 
      public void run() { 
       try { 
        updateAll(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 
     t.schedule(tt, cooldown, 24L*60L*60L*1000L); 
    } 
} 

我看到的println輸出(Task在:)運行,但永遠不會執行應該在凌晨2點運行任務,爲什麼呢?我沒有得到它我從未遇到過這樣的問題。輸出日誌中沒有錯誤。

+0

'new Date(cooldown)'在打印語句中返回給您什麼? – nullpointer

回答

2

因爲您使用的是以毫秒爲單位的今天時間,因爲執行任務之前的延遲時間以毫秒爲單位。這意味着這項任務將在大約47年後執行。

+0

是的,謝謝我已經解決了,我是白癡。謝謝。 – Welite

0

通過加入這一行固定:

cooldown = cooldown - System.currentTimeMillis(); 

基本上我剛忘記從冷卻時間刪除當前米利斯。