From: Tomer on
If the current time is 18:50 and i schedule Repeating daily TimerTask
to 18:52 then everything is file its being run at 18:52 daily however
if i schedule it to 18:48 then its being run immediately (and i dont
want that) as i run the application :(
However i wanted it to be run every day at 18:48! how can i achieve
that?

following is my test code:

public class TestTimer {

public static class TestTimerTask extends TimerTask {

public void run() {
System.out.println(new Date() + " timer run...");
}
}

public static void main(String[] args) throws Exception {
Timer timer = new Timer();
Calendar date = Calendar.getInstance();
// Timer starts yesterday (so that surely will run today when time
comes.
// date.setTimeInMillis(new Date().getTime() - 1000 * 60 * 60 * 24);
DateFormat sdf = new SimpleDateFormat("HH:mm");
Date dateToBackup = null;
try {
dateToBackup = sdf.parse("18:32");
} catch (ParseException e) {
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateToBackup);
date.set(Calendar.HOUR, calendar.get(Calendar.HOUR));
date.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE));
date.set(Calendar.SECOND, calendar.get(Calendar.SECOND));
date.set(Calendar.MILLISECOND, 0);

// Schedule to run every day.
timer.schedule(
new TestTimerTask(),
date.getTime(),
1000 * 60 * 60 * 24
);
Thread.sleep(120000);
}

}

Thanks

Tomer
From: Arne Vajhøj on
Tomer wrote:
> If the current time is 18:50 and i schedule Repeating daily TimerTask
> to 18:52 then everything is file its being run at 18:52 daily however
> if i schedule it to 18:48 then its being run immediately (and i dont
> want that) as i run the application :(
> However i wanted it to be run every day at 18:48! how can i achieve
> that?

> Timer timer = new Timer();
> Calendar date = Calendar.getInstance();
> // Timer starts yesterday (so that surely will run today when time
> comes.
> // date.setTimeInMillis(new Date().getTime() - 1000 * 60 * 60 * 24);
> DateFormat sdf = new SimpleDateFormat("HH:mm");
> Date dateToBackup = null;
> try {
> dateToBackup = sdf.parse("18:32");
> } catch (ParseException e) {
> e.printStackTrace();
> }
> Calendar calendar = Calendar.getInstance();
> calendar.setTime(dateToBackup);
> date.set(Calendar.HOUR, calendar.get(Calendar.HOUR));
> date.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE));
> date.set(Calendar.SECOND, calendar.get(Calendar.SECOND));
> date.set(Calendar.MILLISECOND, 0);

Why not just roll one day forward ?

>
> // Schedule to run every day.
> timer.schedule(
> new TestTimerTask(),
> date.getTime(),
> 1000 * 60 * 60 * 24
> );
> Thread.sleep(120000);
> }
>
> }

Arne
From: ilkinulas on
if timer execution time is earlier then the current time then
roll one day forward.

public void scheduleTimer(int hour, int minute) {
Calendar now = new GregorianCalendar();
int hourNow = now.get(Calendar.HOUR_OF_DAY);
int minuteNow = now.get(Calendar.MINUTE);

Calendar firstExecutionDate = new GregorianCalendar();
firstExecutionDate.set(Calendar.HOUR_OF_DAY, hour);
firstExecutionDate.set(Calendar.MINUTE, minute);
firstExecutionDate.set(Calendar.SECOND, 0);
firstExecutionDate.set(Calendar.MILLISECOND, 0);
if (hour<hourNow || (hour==hourNow && minute<minuteNow)) {
//Do not execute today, first execution will be tomorrow.
firstExecutionDate.add(Calendar.DAY_OF_MONTH, 1);
}

long oneDay = 1000L * 60L * 60L * 24L;

Timer timer = new Timer();
timer.schedule(new MyTask(), firstExecutionDate.getTime(), oneDay);

}
From: Roedy Green on
On Sun, 29 Jun 2008 08:47:59 -0700 (PDT), Tomer <tomerbd1(a)gmail.com>
wrote, quoted or indirectly quoted someone who said :

>However i wanted it to be run every day at 18:48! how can i achieve
>that?

I don't think that is a sensible way to handle the problem. You would
need an JVM sitting in RAM 24-7.

Better to use some light weight chron feature of the OS.
--

Roedy Green Canadian Mind Products
The Java Glossary
http://mindprod.com
From: Arne Vajhøj on
Roedy Green wrote:
> On Sun, 29 Jun 2008 08:47:59 -0700 (PDT), Tomer <tomerbd1(a)gmail.com>
> wrote, quoted or indirectly quoted someone who said :
>> However i wanted it to be run every day at 18:48! how can i achieve
>> that?
>
> I don't think that is a sensible way to handle the problem. You would
> need an JVM sitting in RAM 24-7.
>
> Better to use some light weight chron feature of the OS.

cron

There is that little aspect called portability.

But if it is a server running 24 x 7 it should probably
use Java EE and scheduling has been part of Java EE since
version 1.4 !

Arne