2016-09-15 6 views
0

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の時間が過ぎたからです。

親切にお手伝いください。

+0

このような 'set(Calendar.SECOND、taskStartTimeInSec)'は使わないでください。 SECONDの値は分の2分の1と仮定されていますので、0-59の範囲内にあります。 –

+0

カレンダー今日の日付を取得するために使用しています。それは正常に動作しています。今日の日付を時間単位で秒単位で表示することができます。 firstTime is:Thu Sep 15 15:35:00 IST 2016の出力を確認します。さらに59秒の値を指定すると、分、時間などで時計が前に移動します。例えば15 * 3600 + 35 * 60 = 56100の場合、私のコードに示すように、クロック値は15:35:00になります。 – Laxmikant

+0

firstTimeが過去であるかどうかを確認し、そうであればスケジューリングする前に1日追加します。 –

答えて

1

グスタフ提案を1として:上記はうまく働いた

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); 
    } 

。今度は最初の時間が前になっているので、1日追加すると翌日のみ起動します。

+0

それが動作する場合は、独自のソリューションを受け入れること自由に感じる:) –

関連する問題