每天定时上传数据的实现

自己封装一个类

package com.anllin.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ScheduleUtil
{
private static DateFormat format()
{
return new SimpleDateFormat("HH:mm:ss:SSS");
}

private static Date parseTime(String time) throws ParseException
{
return format().parse(time);
}

private static long getOneDayMilliseconds()
{
return 24 * 60 * 60 * 1000L;
}

private static long getMillisecondsInOneDayBetween(String now, String future) throws ParseException
{
Date nowDate = parseTime(now);
Date futureDate = parseTime(future);
long nowTime = nowDate.getTime();
long futureTime = futureDate.getTime();
if (futureTime > nowTime)
{
return futureTime - nowTime;
}
else
{
return (futureTime + getOneDayMilliseconds()) - nowTime;
}
}

public static void scheduleEveryday(ScheduledThreadPoolExecutor executor, Runnable command,
String executedEverydayAt) throws ParseException
{
long initialDelay = getMillisecondsInOneDayBetween(format().format(new Date()), executedEverydayAt);
long period = getOneDayMilliseconds();
executor.scheduleAtFixedRate(command, initialDelay, period, TimeUnit.MILLISECONDS);
}
}

调用方法

public static void main(String[] args) throws Exception
{
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(5);
String executedEverydayAt = "12:00:00:000";
ScheduleUtil.scheduleEveryday(executor, new Runnable(){
public void run()
{
System.out.println("执行业务逻辑");
}
}, executedEverydayAt);
}




posted @ 2011-12-30 21:51  水之原  阅读(1609)  评论(2编辑  收藏  举报