java code
==
package tf.dt.credit.view;
/**定时处理报文
*每天凌晨5点自动处理生成报文
* @author dingting
* @date 2008-10-20
*/
import java.util.Calendar;
import java.util.Date;
import java.util.TimerTask;
import java.util.Timer;
import tf.dt.credit.view.CreditMessageView;
import tf.dt.credit.database.odbcConnection;
import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.text.ParsePosition;
public class TimeManageMessage {
public static void main(String[] args) throws InterruptedException {
// Get the Date corresponding to 11:01:00 pm today.
try{
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 10); //控制时
calendar.set(Calendar.MINUTE, 11); //控制分
calendar.set(Calendar.SECOND, 0); //控制秒
Date time = calendar.getTime();
System.out.println("制定执行时间为:"+time);
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimeManageMessage.ManageMessageRun(), time,1000 * 60 * 60 * 24);//3*60*1000); //到的日期是年月日时分秒
}catch(Exception ex){
ex.printStackTrace();
}
}
static class ManageMessageRun extends TimerTask {
Date d1 = new Date(System.currentTimeMillis());
System.out.println("当前执行时间为:aaaaaaaaaa-->:"+d1);
}
}
}
===========================================================================================================
1.
timer.scheduleAtFixedRate(new TimeManageMessage.ManageMessageRun(), time,3*60*1000);//1000 * 60 * 60 * 24); //到的日期是年月日时分秒
time=10:11:00
time=运行时间为:10:09:57
执行结果:
当前执行时间为:Tue Nov 18 10:11:00 CST 2008
当前时间为:Tue Nov 18 10:09:57 CST 2008
aaaaaaaaaa 执行时间 10:11:00
aaaaaaaaaa 执行时间 10:14:00
aaaaaaaaaa 执行时间 10:17:00
分析:在定时时间之前执行程序,是按照指定时间开始执行,每隔3分钟执行一次
===========================================================================================================
2.timer.scheduleAtFixedRate(new TimeManageMessage.ManageMessageRun(), time,3*60*1000);//1000 * 60 * 60 * 24); //到的日期是年月日时分秒
time=指定时间仍然是10:11:00
time=运行时间为:10:23:12
执行结果:
当前执行时间为:Tue Nov 18 10:11:00 CST 2008
当前时间为:Tue Nov 18 10:23:12 CST 2008
aaaaaaaaaa 执行时间 10:11
aaaaaaaaaa 执行时间 10:14
aaaaaaaaaa 执行时间 10:17
aaaaaaaaaa 执行时间 10:20
aaaaaaaaaa 执行时间 10:23
aaaaaaaaaa 执行时间 10:26
分析:一运行程序会立马执行5次,分别在10:11、10:14、10:17、10:20、10:23
也就是说他会从指定时间开始算做周期,每隔3分钟运行一次程序
===========================================================================================================
3.timer.schedule(new TimeManageMessage.ManageMessageRun(), time,3*60*1000);//1000 * 60 * 60 * 24);
执行结果:
制定执行时间为:Tue Nov 18 10:11:00 CST 2008
当前执行时间为:aaaaaaaaaa-->:Tue Nov 18 10:44:07 CST 2008
当前执行时间为:aaaaaaaaaa-->:Tue Nov 18 10:47:07 CST 2008
当前执行时间为:aaaaaaaaaa-->:Tue Nov 18 10:50:07 CST 2008
分析:schedule方法虽指定执行时间,但是它是从运行时间开始算起,每隔3分钟运行一次,一运行起程序,它会立即执行一遍,10:44。
从10:44开始算起在过3分钟在执行一遍程序,10:47,以此类推。