如何让定时器在每个月的固定时间执行 现在想让这个定时器在每个月的3号晚上12点执行 timer.schedule(new DataAggregTask(),0, 这个参数怎么写); 
最后这个参数怎么写?谢谢

解决方案 »

  1.   

    用 Calendar 分别取得当天的日期和时间,就可以判断了。简单。
      

  2.   

    timer.schedule(sampleTask, 0, 60 * 60 * 1000);   这是间隔1小时的。你可以考虑把时间设置久点,如果设置一个月,考虑
    到每个月的天数不同,也不建议这么做。
      

  3.   

    你可以设置每分钟运行task,然后在task里面取出当前的日期和时间看是不是3号晚上12,如果是,执行业务逻辑,如果不是,不做任何事。
      

  4.   

    看来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("执行任务中.....");
        }
    }
      

  5.   


    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分
    井底之蛙 还说 别人好高骛远