java timer中的时间调度方法主要有:
schedule(TimerTask task, Date firstTime, long period)
Schedules the specified task for repeated fixed-delay execution, beginning at the specified time.
但是如果此时的firstTime小于(时间落后于)当前时间,那么
task会立即执行,在调试的时候不方便,因为程序一启动就开始执行了,或许还没有到任务的触发点。
schedule(TimerTask task, long delay, long period)
Schedules the specified task for repeated fixed-delay execution, beginning after the specified delay.
如果采用设置delay时间的方法,则可以进行处理。
比如:设置执行时间为每天的13:50,如果启动的时候时间已经过了13:35,那么应该在明天的13:35进行执行。此时可以这样处理:
如果delay的时间为负数,会报异常,因此,Calendar添加一天。
schedule(TimerTask task, Date firstTime, long period)
Schedules the specified task for repeated fixed-delay execution, beginning at the specified time.
但是如果此时的firstTime小于(时间落后于)当前时间,那么
task会立即执行,在调试的时候不方便,因为程序一启动就开始执行了,或许还没有到任务的触发点。
schedule(TimerTask task, long delay, long period)
Schedules the specified task for repeated fixed-delay execution, beginning after the specified delay.
如果采用设置delay时间的方法,则可以进行处理。
比如:设置执行时间为每天的13:50,如果启动的时候时间已经过了13:35,那么应该在明天的13:35进行执行。此时可以这样处理:
- Calendar cal = Calendar.getInstance();
- cal.set(Calendar.HOUR_OF_DAY, 13);
- cal.set(Calendar.MINUTE, 35);
- //cal.add(Calendar.DAY_OF_MONTH, 1);
- Date date = new Date();
- date = cal.getTime();
- Date now = new Date();
- long interval = date.getTime() - now.getTime();
- //should exec in next day
- if (interval < 0) {
- cal.add(Calendar.DAY_OF_MONTH, 1);
- date = cal.getTime();
- interval = date.getTime() - now.getTime();
- }
- System.out.println("the interval time is: " + interval);
- //the exec time interval is 2 secs.
- timer.schedule(echoTask, interval, 2 * 1000);