我想让 timer在
早上6:00 中午12点 晚上18:00
运行
schedule(TimerTask task, Date time) 
我该怎么写?

解决方案 »

  1.   

    TimerTask task = new TimerTask(){
        public void run() {
            //To do
        }
    }
    Timer timer = new Timer();
    Date date = SimpleDateFormat.pasre("2008-02-16 6:00");
    timer.schedule(task, date, 1000 * 60 * 60 * 6);//每隔六小时运行一次
      

  2.   

    ...分给过你才发现问题还没解决..timer.schedule(task,   date,   1000   *   60   *   60   *   6);//每隔六小时运行一次
    你这是每间隔6个小时才运行一次
    如果中间程序关闭了呢??? 那不就完蛋了?
    我要的是
    早上6:00   中午12点   晚上18:00 
      

  3.   

    这个问题容易解决,对Date进行计算转换一下就ok了.
    TimerTask   task   =   new   TimerTask(){ 
            public   void   run()   { 
                    //To   do 
            } 

    Timer   timer   =   new   Timer(); 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    Date   date   =   sdf.pasre("2008-02-16 6:00");
    Calendar currentTime = Calendar.getInstance();
    Calendar firstTime = Calendar.getInstance();
    if (date < currentTime.getTimeInMillis()) {
        firstTime.set(currentTime.get(Calendar.YEAR),currentTime.get(Calendar.MONTH),
                      currentTime.get(Calendar.DATE));
        //如果当前的时间已经超过了指定运行的时间,则要重新设定运行时间
        if (firstTime.getTimeInMillis() <= currentTime.getTimeInMillis()) {
           while (firstTime.getTimeInMillis() <= currentTime.getTimeInMillis()) {
              long exeTime = firstTime.getTimeInMillis() + 1000   *   60   *   60   *   6;
              firstTime.setTime(new Date(exeTime));
           }
       }
       else {
          while (firstTime.getTimeInMillis() - currentTime.getTimeInMillis() > 1000   *   60   *   60   *   6) { 
            long exeTime = firstTime.getTimeInMillis() - 1000   *   60   *   60   *   6;
            firstTime.setTime(new Date(exeTime));
          }
       }
    }
    else {
          firstTime.setTime(date);
    }timer.schedule(task,   firstTime.getTime(),   1000   *   60   *   60   *   6);//每隔六小时运行一次建议不要用java本身的Timer,这是通过Object的wait等方法进行控制的,
    如果有多个TimerTask的时候,不能同步触发.最好是用Quartz.