如何让定时器在每个月的固定时间执行 如何让定时器在每个月的固定时间执行 现在想让这个定时器在每个月的3号晚上12点执行 timer.schedule(new DataAggregTask(),0, 这个参数怎么写); 最后这个参数怎么写?谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用 Calendar 分别取得当天的日期和时间,就可以判断了。简单。 timer.schedule(sampleTask, 0, 60 * 60 * 1000); 这是间隔1小时的。你可以考虑把时间设置久点,如果设置一个月,考虑到每个月的天数不同,也不建议这么做。 你可以设置每分钟运行task,然后在task里面取出当前的日期和时间看是不是3号晚上12,如果是,执行业务逻辑,如果不是,不做任何事。 看来LZ还是不懂,俺算没话说了,抽空写了段代码给你:public class SampleTask extends TimerTask { private ServletContext context; private static boolean isRunning = false; private static boolean flag = true; private static final int C_SCHEDULE_DAY = 3; private static final int C_SCHEDULE_HOUR = 00; private WorkServiceImpl workService; public SampleTask(ServletContext context) { this.context = context; } public void run() { workService = new WorkServiceImpl(); Calendar cal = Calendar.getInstance(); if (!isRunning) { if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY) && C_SCHEDULE_HOUR == cal.get(Calendar.DAY) && flag) { isRunning = true; workService.autoWorkOff(); isRunning = false; flag = false; context.log("任务执行结束"); } } else { context.log("上一次任务执行还未结束"); } if (C_SCHEDULE_HOUR != cal.get(Calendar.HOUR_OF_DAY)) { flag = true; } }}public class WorkServiceImpl implements ServletContextListener { SampleTask sampleTask; Timer timer; public void contextDestroyed(ServletContextEvent arg0) { timer.cancel(); System.out.println("定时器已销毁"); } public void contextInitialized(ServletContextEvent event) { timer = new java.util.Timer(true); sampleTask = new SampleTask(event.getServletContext()); System.out.println("定时器已启动"); timer.schedule(sampleTask, 0, 60 * 60 * 1000); } public void autoWorkOff(){ //执行的任务 System.out.println("执行任务中....."); }} Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_MONTH, 3); calendar.set(Calendar.HOUR_OF_DAY, 22);//22 calendar.set(Calendar.MINUTE, 22);//0 calendar.set(Calendar.SECOND, 0); Date time = calendar.getTime(); timer.schedule(new DataAggregTask(),time); //每个月的3号22点22分井底之蛙 还说 别人好高骛远 怎样取多个隐藏表单域中的值并便利出来 JAVA如何使用ssh把数据存储在数据库中?? 添加新代码后提示“value”为空或不是对象 CMS即将发布 特散分!! 各位大侠们 我用了acegi框架登陆 做了个验证码 当我输入正确的验证码时他还会报错 希望大侠们帮帮忙 !谢谢了 !急。。。。 时间转换问题(急) 邪门了,这个网页上的一条记录用httpClient抓取不到!!! 一个非常低级的问题,望指点 数据库操作问题 如何使用Servlet访问服务器上的文件夹? struts2 session hibernate 注册1对1关系 大家帮我看看那里错了
到每个月的天数不同,也不建议这么做。
private static boolean isRunning = false;
private static boolean flag = true;
private static final int C_SCHEDULE_DAY = 3;
private static final int C_SCHEDULE_HOUR = 00;
private WorkServiceImpl workService; public SampleTask(ServletContext context) {
this.context = context;
} public void run() {
workService = new WorkServiceImpl();
Calendar cal = Calendar.getInstance();
if (!isRunning) {
if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY) && C_SCHEDULE_HOUR == cal.get(Calendar.DAY) && flag) {
isRunning = true;
workService.autoWorkOff();
isRunning = false;
flag = false;
context.log("任务执行结束");
}
} else {
context.log("上一次任务执行还未结束");
}
if (C_SCHEDULE_HOUR != cal.get(Calendar.HOUR_OF_DAY)) {
flag = true;
}
}
}public class WorkServiceImpl implements ServletContextListener {
SampleTask sampleTask;
Timer timer; public void contextDestroyed(ServletContextEvent arg0) {
timer.cancel();
System.out.println("定时器已销毁");
} public void contextInitialized(ServletContextEvent event) {
timer = new java.util.Timer(true);
sampleTask = new SampleTask(event.getServletContext());
System.out.println("定时器已启动");
timer.schedule(sampleTask, 0, 60 * 60 * 1000);
}
public void autoWorkOff(){
//执行的任务
System.out.println("执行任务中.....");
}
}
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 3);
calendar.set(Calendar.HOUR_OF_DAY, 22);//22
calendar.set(Calendar.MINUTE, 22);//0
calendar.set(Calendar.SECOND, 0);
Date time = calendar.getTime();
timer.schedule(new DataAggregTask(),time); //每个月的3号22点22分
井底之蛙 还说 别人好高骛远