日期:2014-05-20 浏览次数:20910 次
Timer timer = new Timer(); Calendar cal = Calendar.getInstance(); switch (cal.get(Calendar.DAY_OF_WEEK)) { case Calendar.SUNDAY: cal.add(Calendar.DAY_OF_MONTH, 3);break; case Calendar.MONDAY: cal.add(Calendar.DAY_OF_MONTH, 2);break; case Calendar.TUESDAY: cal.add(Calendar.DAY_OF_MONTH, 1);break; case Calendar.THURSDAY: cal.add(Calendar.DAY_OF_MONTH, 6);break; case Calendar.FRIDAY: cal.add(Calendar.DAY_OF_MONTH, 5);break; case Calendar.SATURDAY: cal.add(Calendar.DAY_OF_MONTH, 4);break; default: break; } String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()); timer.schedule(new TimerTask() { public void run() { //do someThing } }, new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(dateStr+" 14:00"), 1000*60*60*24*7);
------解决方案--------------------
Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执行任务:1:在某个时间(Data),2:在某个固定的时间之后(int delay).
------解决方案--------------------
import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class TimerManager { // 时间间隔 private static final long PERIOD_DAY = 7 * 24 * 60 * 60 * 1000;//7天。 public TimerManager() { Calendar calendar = Calendar.getInstance(); /*** 定制周三的14:00执行方法 ***/ System.out.println(calendar.get(Calendar.DATE)); System.out.println(calendar.get(Calendar.DAY_OF_WEEK)); int nextDateDistance = Calendar.WEDNESDAY - calendar.get(Calendar.DAY_OF_WEEK); calendar.set(Calendar.DATE,calendar.get(Calendar.DATE) + nextDateDistance);//设置星期三 calendar.set(Calendar.HOUR_OF_DAY, 14);//设置时间 calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); Date date = calendar.getTime(); // 第一次执行定时任务的时间 if (date.before(new Date())) { date = this.addDay(date, 7);//如果上次日期过期了,+7天变成有效日期 } Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { System.out.println("your personal logic"); } }; // 安排指定的任务在指定的时间开始进行重复的固定延迟执行。 timer.schedule(task, date, PERIOD_DAY); } // 增加或减少天数 public Date addDay(Date date, int num) { Calendar startDT = Calendar.getInstance(); startDT.setTime(date); startDT.add(Calendar.DAY_OF_MONTH, num); return startDT.getTime(); } public static void main(String args[]) { new TimerManager(); } }
------解决方案--------------------
任务调度的东西非常复杂,不建立使用 Timer 去做,直接使用 Quartz 吧。
就是一个每周三 14 点执行这么简单的功能,自行实现的话需要有很深厚的多线程开发经验!