最近做一个项目用到定时任务,情景是每个月1号的凌晨3点计算上个月的数据。
在网上研究了一下资料,最后用timer实现了。我用这个timer每天运行一次,检查今天的日期是否是1号,是就运行计算方法,不是就什么都不做。
代码如下:
public class payTask(){
private static Timer payTimer = null;
public static void startPayTimer() {
if (payTimer != null) {
payTimer.cancel();
payTimer = null;
}
payTimer = new Timer();
Calendar c = Calendar.getInstance();
c.set(Calendar.DATE, c.get(Calendar.DATE)+1);
c.set(Calendar.HOUR_OF_DAY, 3);
c.set(Calendar.MINUTE, 00);
payTimer.schedule(new TimerTask() {
@Override
public void run() {
SimpleDateFormat dateformat=new SimpleDateFormat("dd");
String day = dateformat.format(new Date());
if(day.equals("01")){
//do anythings
calculateMonthPay();
}
}
}, c.getTime(), 24 * 3600000);
}
}