【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;
第二部:求出指定时间与现在时间相差多少秒:
首先求出指定时间的年、月、日、小时、分钟,
假设指定时间为: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("备份程序运行……");
}
}
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程序间隔时间运行
- at计划在指定时间和日期在计算机上运行命令和程序
- linux中,运行java程序装载linux指定目录下的Properties文件
- 计算Java程序运行时间
- 通过命令行指定 Java 程序运行时使用的字符集
- JAVA 测试程序代码运行时间
- 测量java程序运行时间
- 关于计算java程序运行时间
- 如何计算Java程序运行时间
- 关于计算java程序运行时间
- 计算Java程序运行时间
- Java统计程序运行时间(转)
- JAVA获得程序运行时间
- 改注册表,在一定时间内只能运行指定程序,知道用组策略管理器,可以实现,不过我想用编程的方法。
- 在指定时间运行程序
- 计算Java程序运行时间
- java测试程序运行时间
- 关于计算Java程序运行时间
- 关于计算Java程序运行时间
- Java获得查询数据、运行程序花费的时间