直接上代碼,代碼中有註釋(代碼中還有一些本人的其餘測試,讀者能夠忽略不計)。讀者在代碼中發現了bug,歡迎指正。java
package j2se.system.test;服務器
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;ide
class TestTask extends TimerTask{
SimpleDateFormat t= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
int i = 0;
@Override
public void run(){
//假設如今有一個任務,天天要下午15:00執行
long start = System.nanoTime();
String time = t.format(new Date());
System.out.println("time:"+time+"_____ "+(System.nanoTime()-start)+"____i:"+(++i));
}
}測試
class TestTask2 extends TimerTask{
SimpleDateFormat t= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
int i = 0;
@Override
public void run(){
System.out.println("come in ");
//假設如今有一個任務,每個月執行一次
Date d = new Date();//獲取服務器的時間。。。
Calendar c= Calendar.getInstance();
c.setTime(d);
int day = c.get(Calendar.DAY_OF_MONTH);
if(day == 19){
long start = System.nanoTime();
String time = t.format(new Date());
System.out.println("time:"+time+"_____ "+(System.nanoTime()-start)+"____i:"+(++i));
}code
}
}orm
public class TimeTaskDemo {
public TimeTaskDemo() {
}
//schedule(TimerTask task, Date time) 安排在指定的時間執行指定的任務。若是已過期間,則當即執行
static void schedule(){
Date date = null;
Timer time = new Timer();
TestTask task = new TestTask();
String s = "2013-06-19 15:33:00";
SimpleDateFormat t= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date = t.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
time.schedule(task, date);
}
//schedule(TimerTask task, Date firstTime, long period) 安排指定的任務在指定的時間開始進行重複的固定延遲執行。
static void schedule02(){
Date date = null;
Timer time = new Timer();
TestTask task = new TestTask();
String s = "2013-06-19 15:00:00";
SimpleDateFormat t= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date = t.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
//若是已過期間點會馬上執行一次
time.schedule(task, date,10000);
}
//void schedule(TimerTask task, long delay) 安排在指定延遲後執行指定的任務。
static void schedule03(){
Timer time = new Timer();
TestTask task = new TestTask();
time.schedule(task, 10000);
}
//schedule(TimerTask task, long delay, long period) 安排指定的任務從指定的延遲後開始進行重複的固定延遲執行。
static void schedule04(){
Date date = null;
Timer time = new Timer();
TestTask task = new TestTask();
String s = "2013-06-19 15:00:00";
SimpleDateFormat t= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date = t.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
//若是已過期間點會馬上執行一次
time.schedule(task, 5000,10000);
}
// void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
// 安排指定的任務在指定的時間開始進行重複的固定速率執行。
static void scheduleAtFixedRateTest01(){
Date date = null;
Timer time = new Timer();
TestTask task = new TestTask();
String s = "2013-06-18 15:30:00";
SimpleDateFormat t= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date = t.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
//若是過了時間點,會聯繫執行,好比設置2013-06-19 04:45:00運行,可是在2013-06-19 04:50:00運行,會運行屢次,次數= (50-45)*60/10-1
//?????????????????????????????????????????????
time.scheduleAtFixedRate(task, date, 10000);
}
//scheduleAtFixedRate(TimerTask task, long delay, long period)
//安排指定的任務在指定的延遲後開始進行重複的固定速率執行。
static void scheduleAtFixedRateTest02(){
Timer time = new Timer();
TestTask task = new TestTask();
time.scheduleAtFixedRate(task, 5000, 10000);
}blog
//天天17:24執行
static void scheduleAtFixedRateTest03(){
Date d = new Date();//獲取服務器的時間。。。
Calendar c= Calendar.getInstance();
c.setTime(d);
TestTask task = new TestTask();
Timer time = new Timer();
int day = c.get(Calendar.DAY_OF_MONTH);
int hour = c.get(Calendar.HOUR_OF_DAY) ;
int minute = c.get(Calendar.MINUTE) ;
int second = c.get(Calendar.SECOND);
System.out.println(day);
System.out.println(hour);
System.out.println(minute);
System.out.println(second);
if(hour >=17 ){
c.set(Calendar.DAY_OF_MONTH,day+1);
//若是要求過了時間點執行一次
task.run();
}
c.set(Calendar.HOUR_OF_DAY,17);
c.set(Calendar.MINUTE,24);
c.set(Calendar.SECOND,0);
Date date = c.getTime();
SimpleDateFormat t= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(t.format(date));
// time.scheduleAtFixedRate(task, date, 10000);
time.scheduleAtFixedRate(task, date, 24*60*60*1000);
}get
//每個月19號 17:24執行一次,首先須要在定時器中設定月份,還須要在定時器中的任務執行時,判斷當天是否是19號
//好比在TestTask2 中的run方法中進行判斷
static void scheduleAtFixedRateTest04(){
int h1 = 17;
int m1 = 57;
int s1 = 0 ;
Date d = new Date();//獲取服務器的時間。。。
Calendar c= Calendar.getInstance();
c.setTime(d);
TestTask2 task = new TestTask2();
Timer time = new Timer();
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
int hour = c.get(Calendar.HOUR_OF_DAY) ;
int minute = c.get(Calendar.MINUTE) ;
int second = c.get(Calendar.SECOND);
System.out.println(month);
System.out.println(day);
System.out.println(hour);
System.out.println(minute);
System.out.println(second);
if(day > 19){
c.set(Calendar.MONTH,month+1);
}else if(day == 19){
if(hour >=h1){
c.set(Calendar.MONTH,month+1);
}
}else{
c.set(Calendar.DAY_OF_MONTH,19);
}
c.set(Calendar.HOUR_OF_DAY,h1);
c.set(Calendar.MINUTE,m1);
c.set(Calendar.SECOND,s1);io
Date date = c.getTime();
SimpleDateFormat t= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(t.format(date));
time.scheduleAtFixedRate(task, date, 10000);
// time.scheduleAtFixedRate(task, date, 24*60*60*1000);
}
/**
* @param args
*/
public static void main(String[] args) {
// schedule();
// schedule02();
// schedule03();
// schedule04();
// scheduleAtFixedRateTest01();
// scheduleAtFixedRateTest02();
//天天15:00執行
// scheduleAtFixedRateTest03();
//每一個月執行一次執行
scheduleAtFixedRateTest04();
}form
}