首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何运行我的TimerTask每天下午2点?

我如何运行我的TimerTask每天下午2点?
EN

Stack Overflow用户
提问于 2012-02-21 18:27:01
回答 9查看 96.3K关注 0票数 41

我想每天下午2点执行一个作业我可以使用哪种java.util.Timer方法来调度我的作业?

2小时后,运行它将停止作业并重新安排到第二天下午2:00

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-02-21 19:31:56

代码语言:javascript
复制
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Timer;
import java.util.TimerTask;


public class MyTimerTask extends TimerTask {
    private final static long ONCE_PER_DAY = 1000*60*60*24;

    //private final static int ONE_DAY = 1;
    private final static int TWO_AM = 2;
    private final static int ZERO_MINUTES = 0;


    @Override
    public void run() {
        long currennTime = System.currentTimeMillis();
        long stopTime = currennTime + 2000;//provide the 2hrs time it should execute 1000*60*60*2
          while(stopTime != System.currentTimeMillis()){
              // Do your Job Here
            System.out.println("Start Job"+stopTime);
            System.out.println("End Job"+System.currentTimeMillis());
          }
    }
    private static Date getTomorrowMorning2AM(){

        Date date2am = new java.util.Date(); 
           date2am.setHours(TWO_AM); 
           date2am.setMinutes(ZERO_MINUTES); 

           return date2am;
      }
    //call this method from your servlet init method
    public static void startTask(){
        MyTimerTask task = new MyTimerTask();
        Timer timer = new Timer();  
        timer.schedule(task,getTomorrowMorning2AM(),1000*10);// for your case u need to give 1000*60*60*24
    }
    public static void main(String args[]){
        startTask();

    }

}
票数 14
EN

Stack Overflow用户

发布于 2013-08-07 15:10:38

代码语言:javascript
复制
Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 2);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);

// every night at 2am you run your task
Timer timer = new Timer();
timer.schedule(new YourTask(), today.getTime(), TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS)); // period: 1 day
票数 73
EN

Stack Overflow用户

发布于 2012-02-21 18:31:51

您可以使用Timer.schedule(TimerTask task, Date firstTime, long period)方法,将firstTime设置为今天下午2点,将period设置为24小时:

将指定的任务调度为重复的固定延迟执行,从指定的时间开始。后续的执行大约以固定的间隔进行,间隔为指定的时间段。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9375882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档