firstTimeを今日の15:35に設定してから1日に1回設定しました。しかし、今日15時35分以降にもアプリケーションを起動すると、すぐにタスクが開始されます。私はそれを望んでいない。Timer.schedule api:最初にタイムアウトしてもタイマータスクが実行される理由
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の時間が過ぎたからです。
親切にお手伝いください。
このような 'set(Calendar.SECOND、taskStartTimeInSec)'は使わないでください。 SECONDの値は分の2分の1と仮定されていますので、0-59の範囲内にあります。 –
カレンダー今日の日付を取得するために使用しています。それは正常に動作しています。今日の日付を時間単位で秒単位で表示することができます。 firstTime is:Thu Sep 15 15:35:00 IST 2016の出力を確認します。さらに59秒の値を指定すると、分、時間などで時計が前に移動します。例えば15 * 3600 + 35 * 60 = 56100の場合、私のコードに示すように、クロック値は15:35:00になります。 – Laxmikant
firstTimeが過去であるかどうかを確認し、そうであればスケジューリングする前に1日追加します。 –