您的位置:首页 > 编程语言 > Java开发

【java在指定时间运行程序】

2014-09-29 04:42 197 查看
【java在指定时间运行程序】

Author: Stephen_Bo

本教程仅供学习和分享使用

好久没写教程了,来水一篇教程......

java在指定时间运行程序就是说如果你想让你的程序在2014年10月1日08点00分执行,那么只要不关机并且不关闭你的java程序,它就可以在那个时间执行你需要它执行的内容。

之所以写这篇教程是因为发现网上很难找到java在规定时间运行程序的文章(反正我是没找到。。。),找到的很多都是java和xml结合后来实现的。

下面说下我的实现方法吧:

我的实现方法使用了调用系统时间然后与规定时间求差,求出相应的天数差值,小时差值,分钟差值后,再将x天,y小时,z分钟分别换算为xx秒,yy秒,zz秒,然后将xx,yy,zz相加后,直接调用Timer库函数实现的。

第一部:得到系统时间

SimpleDateFormat sysTime=new SimpleDateFormat("HH:mm");
String s = sysTime.format(new Date());

注:

这两段代码用到了java库函数:

importjava.text.SimpleDateFormat;


import java.util.Date;
SimpleDateFormat()方法内的参数看你指定时间来定,如果指定运行时间是本天,则参数用以上给出的即可(只得到现在时间的小时与分钟)。如果指定时间是今天后的某一天,那么就要得到今天的年、月、日,则参数格式为:"yyyy-MM-dd HH:mm"

第二部:求出指定时间与现在时间相差多少秒:

首先求出指定时间的年、月、日、小时、分钟,

假设指定时间为:String run = "2014-10-01 08:03",即你想让你的程序在2014年10月1日的8点03分开始执行,

(1) 先将年月日 和 小时 分钟分开(具体分发以指定时间字符串格式来定,本篇文章以run字符串的格式来进行)

String[] temp1 = run.split(" ");

//此时temp1[0]便是年月日,temp1[1]便是小时分钟

(2)将年月日分别分开

String[] temp2 = temp1[0].split("-");

/*

*此时temp2[0]为年

*temp2[1]为月

*temp2[2]为日

*/

(3)将小时、分钟分开:

String[] temp3 = temp1[1].split(":");

//此时temp3[0]为小时

//temp3[1]为分钟

(4)上面所有年、月、日、小时、分钟皆为字符串型,无法进行运算,则转换类型:

int yearRun = Integer.parseInt(temp2[0]);

int monthRun = Integer.parseInt(temp2[1]);

int dayRun = Integer.parseInt(temp2[2]);

int hourRun = Integer.parseInt(temp3[0]);

int minuteRun = Integer.parseInt(temp3[1]);

其次,定时间的年、月、日、小时、分钟后就要求出系统时间的年、月、日、小时、分钟,求法依然依照以上四步,按照上述第一步代码,我用字符串s记录了系统时间,然后用s按照以上四部求出对应的值即可,假设求完:

int yearNow来记录当前时间的年;

int monthNow 来记录当前时间的月;

int dayNow来记录当前时间的日;

int hourNow 来记录当前时间的小时

int minuteNow来记录当前时间的分钟。

最后,求出当前时间与规定执行时间相差的秒数:

【因为本文实现规定时间执行程序使用的是Timer库函数,而Timer库函数只记录从调用开始后多少毫秒后执行程序,例如:Timer timer =
new Timer();timer.schedule(new MyTimerTask(),1000);则表明从程序执行timer.schedule(new MyTimerTask(),1000)语句后,1000毫秒后,执行MyTimerTask()类中的run()方法内的程序,1000毫秒即为1秒后】
那么最后的时间该怎么算呢:(Math.abs(inta)此方法求出a的绝对值)
int sumTime = Math.abs(yearRun-yearNow)*365*24*3600+Math.abs(monthRun-monthNow)*30*24*3600+Math.abs(dayRun-dayNow)*24*3600+Math.abs(hourRun-hourNow)*3600+Math.abs(minuteRun-minuteNow)*60;
第三部:调用Timer库函数规定在sumTime*1000毫秒后执行run中代码即可:
Timer timer = new Timer();
timer.schedule(new MyTimerTask(), sumTime*1000);
class MyTimerTask
extends TimerTask
{
         public
void
run()
         {
            System.out.println("备份程序运行……");
         }
     
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java