timer定时任务

TDsfly 2012-06-01 11:00:28
timer可以在固定时间进行一个task,如果想固定在周三的14:00,如何去进行判断比较合理?
...全文
161 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sk_up_dyy 2012-06-01
  • 打赏
  • 举报
回复

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);


pengxiangjun 2012-06-01
  • 打赏
  • 举报
回复
比较笨的方法是:每一个小时执行一次,然后判断时间是否合你的要求

用框架比较好
古布 2012-06-01
  • 打赏
  • 举报
回复
用quartz吧
  • 打赏
  • 举报
回复
任务调度的东西非常复杂,不建立使用 Timer 去做,直接使用 Quartz 吧。

就是一个每周三 14 点执行这么简单的功能,自行实现的话需要有很深厚的多线程开发经验!
sdojqy1122 2012-06-01
  • 打赏
  • 举报
回复

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();
}
}
soars 2012-06-01
  • 打赏
  • 举报
回复
Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执行任务:1:在某个时间(Data),2:在某个固定的时间之后(int delay).

51,397

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧