import java.util.TimerTask; /** * 執行內容 * @author admin_Hzw * */ public class Task extends TimerTask { public void run() { System.out.println("我有一頭小毛驢!"); } } import java.util.Calendar; import java.util.Date; import java.util.Timer; /** * 任務管理 * @author admin_Hzw * */ public class TimerManager { /** * @param args */ public static void main(String[] args) { new TimerManager(); } //時間間隔(一天) private static final long PERIOD_DAY = 24 * 60 * 60 * 1000; public TimerManager() { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 1); //凌晨1點 calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); Date date=calendar.getTime(); //第一次執行定時任務的時間 //如果第一次執行定時任務的時間 小於當前的時間 //此時要在 第一次執行定時任務的時間加一天,以便此任務在下個時間點執行。如果不加一天,任務會立即執行。 if (date.before(new Date())) { date = this.addDay(date, 1); } Timer timer = new Timer(); Task task = new Task(); //安排指定的任務在指定的時間開始進行重復的固定延遲執行。 timer.schedule(task,date,PERIOD_DAY); // 這里其實調用的是 public void schedule(TimerTask task,Date firstTime,long period) // firstTime--這是首次該任務將被執行的時間,即便設置時間為凌晨1點執行,如果不 // 加一天,任務會立即執行的話,那么下次執行的時刻是在距此次執行任務時刻的24小 //時后執行,如果現在是14點執行了一次,那么明天14點才會執行第二次,而不是在 //凌晨1點執行 // 增加或減少天數 public Date addDay(Date date, int num) { Calendar startDT = Calendar.getInstance(); startDT.setTime(date); startDT.add(Calendar.DAY_OF_MONTH, num); return startDT.getTime(); } }