Timer定時器每天的固定時間執行
阿新 • • 發佈:2019-01-10
在網上看了好多介紹定時任務的方法,但是在使用的時候,如果當前時間是9:00,定時任務執行時間是8:59
就會造成在9點執行的程式的時候直接執行定時器中的方法。
Tip:定時器超時還執行。如下程式碼解決了這個問題
public class SandTimer {
public void timerRun() {
// 一天的毫秒數
long daySpan = 24 * 60 * 60 * 1000;
// 規定的每天時間15:33:30執行
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 09:16:00" );
// 首次執行時間
try {
Date startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(sdf.format(new Date()));
// 如果今天的已經過了 首次執行時間就改為明天
if (System.currentTimeMillis() > startTime.getTime()){
startTime = new Date(startTime.getTime() + daySpan);
}
Timer t = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.print("定時器執行");
}
};
// 以每24小時執行一次
t.schedule(task, startTime, daySpan);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new SandTimer().timerRun();
}