|
From: Tomer on 29 Jun 2008 11:47 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 29 Jun 2008 12:08 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 29 Jun 2008 17:48 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 29 Jun 2008 19:17 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 29 Jun 2008 19:34 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
|
Next
|
Last
Pages: 1 2 Prev: Slutty Girlfriends Next: How to detect if mouse pointer is over a type of object. |