Timer.schedule api: 为什么定时任务第一次执行已经过了
Timer.schedule api: Why the timer task executes even the first time has passed
我已将 firstTime 设置为今天 15:35,然后每天设置一次。但是当我今天甚至在 15:35 之后启动应用程序时,它会立即启动任务。我不要那个。
public void scheduleTimerTask() {
int taskStartTimeInSec = 56100;
Timer timer = new Timer();
Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, taskStartTimeInSec);
Date firstTime = today.getTime();
System.out.println("firstTime is : "+ firstTime);
timer.schedule(new Task(), firstTime,
1000*60*60*24);
}
class Task extends TimerTask{
@Override
public void run() {
System.out.println("Thread Invoked at "+ new Date());
}
}
public static void main(String[] args) throws ParseException {
Test t = new Test();
t.scheduleTimerTask();
}
Output :
firstTime is : Thu Sep 15 15:35:00 IST 2016
Thread Invoked at Thu Sep 15 18:33:35 IST 2016
我想如果我稍后开始(可能在 16:00),那么今天任务不应该执行,但明天应该在 15:35 执行。因为今天15:35时间已经过去了。
请帮忙。
根据古斯塔夫的建议:
public void scheduleTimerTask() {
int taskStartTimeInSec = 56100;
Timer timer = new Timer();
Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, taskStartTimeInSec);
Date firstTime = today.getTime();
if(firstTime.before(new Date())){
today.add(Calendar.DATE, 1);
firstTime = today.getTime();
}
System.out.println("firstTime is : "+ firstTime);
timer.schedule(new Task(), firstTime,
1000*60*60*24);
}
以上工作正常。现在,如果第一次是在我添加一天之前,那么它只会在第二天调用。
我已将 firstTime 设置为今天 15:35,然后每天设置一次。但是当我今天甚至在 15:35 之后启动应用程序时,它会立即启动任务。我不要那个。
public void scheduleTimerTask() {
int taskStartTimeInSec = 56100;
Timer timer = new Timer();
Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, taskStartTimeInSec);
Date firstTime = today.getTime();
System.out.println("firstTime is : "+ firstTime);
timer.schedule(new Task(), firstTime,
1000*60*60*24);
}
class Task extends TimerTask{
@Override
public void run() {
System.out.println("Thread Invoked at "+ new Date());
}
}
public static void main(String[] args) throws ParseException {
Test t = new Test();
t.scheduleTimerTask();
}
Output :
firstTime is : Thu Sep 15 15:35:00 IST 2016
Thread Invoked at Thu Sep 15 18:33:35 IST 2016
我想如果我稍后开始(可能在 16:00),那么今天任务不应该执行,但明天应该在 15:35 执行。因为今天15:35时间已经过去了。
请帮忙。
根据古斯塔夫的建议:
public void scheduleTimerTask() {
int taskStartTimeInSec = 56100;
Timer timer = new Timer();
Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, taskStartTimeInSec);
Date firstTime = today.getTime();
if(firstTime.before(new Date())){
today.add(Calendar.DATE, 1);
firstTime = today.getTime();
}
System.out.println("firstTime is : "+ firstTime);
timer.schedule(new Task(), firstTime,
1000*60*60*24);
}
以上工作正常。现在,如果第一次是在我添加一天之前,那么它只会在第二天调用。