> 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();
[quoted text clipped - 14 lines]
> 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(
[quoted text clipped - 6 lines]
>
> }
Arne
ilkinulas - 29 Jun 2008 22:48 GMT
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);
}
Tomer - 30 Jun 2008 10:08 GMT
> > If the current time is 18:50 and ischeduleRepeating dailyTimerTask
> > to 18:52 then everything is file its being run at 18:52 daily however
[quoted text clipped - 35 lines]
>
> Arne
I didnt want to roll one day forward because i didnt want to have
special cases in my code like checking if the current time is later
than scheduled time and in that case roll one day forward, but now
that i see i have no choice, then i would need to check for that
special case and roll one day forward.
Thanks,
Tomer
Arne Vajhøj - 04 Jul 2008 19:10 GMT
> I didnt want to roll one day forward because i didnt want to have
> special cases in my code like checking if the current time is later
> than scheduled time and in that case roll one day forward, but now
> that i see i have no choice, then i would need to check for that
> special case and roll one day forward.
I think your problem includes a condition, so it I don't think
you can avoid a condition in your code.
Arne
>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.

Signature
Roedy Green Canadian Mind Products
The Java Glossary
http://mindprod.com
Arne Vajhøj - 30 Jun 2008 00:34 GMT
>> However i wanted it to be run every day at 18:48! how can i achieve
>> that?
[quoted text clipped - 3 lines]
>
> 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