时间轮转的问题.恳请指点!!!!!!!! 在JAVA中如何实现例如.每日晚上9:00系统会自动统计符合条件的清单,然后以Mail的形式发出去.想知道调用什么类会实现每日晚上9:00系统自动统计清单.和具体的实现方法.十分十分的感谢!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Timer timer=new Timer();TimerTask task=new TimerTask(){ public void run() { //系统自动统计清单.和具体的实现方法. }}Calendar cal=Calendar.getInstance();cal.set(HOUR_OF_DAY,9);cal.set(MINUTE,0);cal.set(SECONG,0);Date 九点整=cal.getTime();timer.schedule(task,九点整,24*60*60*1000L);//当天9点第一次运行,以后每隔24小时运行一次 修改下cal.set(HOUR_OF_DAY,21);//晚上9点 有个问题,如果任务运行时间过长,会导致以后每天都往后推迟,所以应该把任务的执行时间计算上去。实际上,这样的问题,可以写一个线程,每分钟激活一下,如果到了时间,就执行这个动作。如果复杂点,也可以使用Quartz,是一个开源任务调度框架,可以实现非常灵活的任务调度。 可以使用 scheduleAtFixedRate 代替 schedule,就可以解决所谓的每天推迟问题timer.scheduleAtFixedRate(task,九点整,24*60*60*1000L); 快啊 也试试import java.io.IOException;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class Test { public static void main(String[] args) throws ParseException { SimpleDateFormat cdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式 Long delay = getSecondsDiff(cdf.format(new Date()), "2007-12-12 21:00:00");// new Date()为获取当前系统时间 System.out.println(delay); Timer timer = new Timer(); TimerTask myTask=new MyTask(); timer.schedule(myTask, delay, 24 * 3600); timer.scheduleAtFixedRate(myTask, delay, 24 * 3600); while (true) {// 按c停止此任务,否则就一直循环执行此任务了 try { int ch = System.in.read(); if (ch - 'c' == 0) { timer.cancel();// 使用这个方法退出任务 System.exit(0); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static class MyTask extends TimerTask { @Override public void run() { System.out.println("________"); } } public static long getSecondsDiff(String sysdate, String time) throws ParseException { SimpleDateFormat format = new SimpleDateFormat(); format.applyPattern("yyyy-MM-dd HH:mm:ss"); Date da1 = format.parse(sysdate); Date da2 = format.parse(time); long seconds = (da2.getTime() - da1.getTime()); seconds = seconds / 1000; return seconds; }} Quartz和TimerSpring中封装了,更加容易使用 进来看看吧,优化的问题 想做个swing的文本编辑器 BufferedWriter的用法 java socket连接问题 新手求教:如何实现类似mdi窗口的java程序?? 急切请求各位高手指教 简单问题请教 关于JAVA的若干基础问题,(送分)~ 关于calendar的问题 一个小项目 编的程序没按照我的设想运行,怎么回事啊? 有用过HTMLParser的么???
Timer timer=new Timer();
TimerTask task=new TimerTask()
{
public void run()
{
//系统自动统计清单.和具体的实现方法.
}
}
Calendar cal=Calendar.getInstance();
cal.set(HOUR_OF_DAY,9);
cal.set(MINUTE,0);
cal.set(SECONG,0);
Date 九点整=cal.getTime();
timer.schedule(task,九点整,24*60*60*1000L);//当天9点第一次运行,以后每隔24小时运行一次
所以应该把任务的执行时间计算上去。实际上,这样的问题,可以写一个线程,每分钟激活一下,如果到了时间,就执行这个动作。如果复杂点,也可以使用Quartz,是一个开源任务调度框架,可以实现非常灵活的任务调度。
timer.scheduleAtFixedRate(task,九点整,24*60*60*1000L);
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;public class Test {
public static void main(String[] args) throws ParseException {
SimpleDateFormat cdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式
Long delay = getSecondsDiff(cdf.format(new Date()), "2007-12-12 21:00:00");// new Date()为获取当前系统时间
System.out.println(delay);
Timer timer = new Timer();
TimerTask myTask=new MyTask();
timer.schedule(myTask, delay, 24 * 3600);
timer.scheduleAtFixedRate(myTask, delay, 24 * 3600);
while (true) {// 按c停止此任务,否则就一直循环执行此任务了
try {
int ch = System.in.read();
if (ch - 'c' == 0) {
timer.cancel();// 使用这个方法退出任务
System.exit(0);
}
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} public static class MyTask extends TimerTask {
@Override
public void run() {
System.out.println("________");
}
} public static long getSecondsDiff(String sysdate, String time)
throws ParseException {
SimpleDateFormat format = new SimpleDateFormat();
format.applyPattern("yyyy-MM-dd HH:mm:ss");
Date da1 = format.parse(sysdate);
Date da2 = format.parse(time);
long seconds = (da2.getTime() - da1.getTime());
seconds = seconds / 1000;
return seconds;
}}
和
Timer
Spring中封装了,更加容易使用