使用案例一:启动时不执行,在每天固定的时间执行
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
* 定时任务测试
*/
public class TaskTest {
//日期格式化到天
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
//日期格式化到秒
private static final SimpleDateFormat DATE_TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//一天的毫秒表示
private static final long DAY = 24 * 60 * 60 * 1000;
/**
* 定时任务.
* @param timeStr
*/
public static void task(String timeStr) throws Exception {
// 获得当天的日期
Date date = new Date();
// 定义开始时间字符串
timeStr = DATE_FORMAT.format(date) + " "+ timeStr;
// 获得当天的指定时间的date对象
date = DATE_TIME_FORMAT.parse(timeStr);
// 判断今天的执行时间是否已经过去,如果过去则改为明天
if (date.getTime() < System.currentTimeMillis()) {
date = new Date(date.getTime() + DAY);
}
Timer timer = new Timer();
timer.schedule(new MyTask(), date, DAY);
}
/**
* 定时任务信息
*/
private static class MyTask extends TimerTask {
@Override
public void run() {
System.out.println(new Date()+"----------------");
}
};
/**
* 定义测试.
*/
public static void main(String[] args) throws Exception {
// 每天早上一点半执行,需要提前两分钟被运行
String timeStr = "01:30:00";
task(timeStr);
}
}
方案二:启动不执行,在指定的某个时间执行一次,尔后固定频率执行
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
* 测试
*/
public class TaskTest {
//格式化到日
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
//格式化到秒
private static final SimpleDateFormat DATE_TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
/**
* 定时任务.
* @param timeStr
* @param period
* remark <br>
*/
public static void task(String timeStr,long period) throws Exception{
Date date = new Date();
//定义开始时间字符串
timeStr = DATE_FORMAT.format(date)+" "+timeStr;
//获得当天的指定时间的date对象
date = DATE_TIME_FORMAT.parse(timeStr);
//判断今天的执行时间是否已经过去,如果过去则改为明天
if(date.getTime()<System.currentTimeMillis()){
date = new Date(date.getTime()+24*60*60*1000);
}
Timer timer = new Timer();
timer.schedule(new MyTask(),date,period);
}
/**
* 定时任务信息
* @version 1.0
*/
private static class MyTask extends TimerTask{
@Override
public void run() {
System.out.println(new Date() + "----------------");
}
};
/**
* 定义测试.
* @param args
* @throws Exception
* remark <br>
*/
public static void main(String[] args) throws Exception {
//每天晚上八点执行,需要提前两分钟被运行
String timeStr = "20:00:00";
long period = 1000;//ms
task(timeStr,period);
}
}