‘壹’ java单机版程序,如何指定在每天凌晨0:00:00执行
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class HandleTimerTask implements ServletContextListener {
private Timer timer = null; //定时器
private static int DOWNlOAD_HOUR = 0; //执行任务开始时间(时)
private static int DOWNlOAD_MINUTE = 0; //执行任务开始时间(分)
private static int DOWNlOAD_SECOND = 0; //执行任务开始时间(秒)
private long delay; //延时时间值(当前系统时间到下载时间之间的时间差毫秒数)
public void contextInitialized(ServletContextEvent event) {
init();//初始化参数
timer = new Timer(true);//创建Timer对象
//定时执行程序
timer.schele(new Handle(event.getServletContext()),delay,24*60*60*1000);//调用Handle()类(即每天要执行的任务),delay表示延迟毫秒数,0,24*60*60*1000表示每隔一天执行一次任务,60*60*1000表示一个小时;
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
}
/**
* 初始化参数
* @return
*/
public void init(){
//声明一个Calendar对象
Calendar cal = Calendar.getInstance();
//设置时间
cal.set(Calendar.HOUR_OF_DAY, DOWNlOAD_HOUR);
cal.set(Calendar.MINUTE, DOWNlOAD_MINUTE);
cal.set(Calendar.SECOND, DOWNlOAD_SECOND);
Date date = new Date();
//获取设定的时间
date = cal.getTime();
//声明当前时间
Date now = new Date();
//获取设定的时间和当前的时间差(毫秒数)
long interval = date.getTime() - now.getTime();
//如果当前时间大于下载时间,则将下载时间设置为下一个下载时间
if (interval < 0) {
cal.add(Calendar.DAY_OF_MONTH, 1);//将天数加1
date = cal.getTime();
//获取设定的时间和当前的时间差(毫秒数)
interval = date.getTime() - now.getTime();
}
this.startTime = date;//初始化开始下载时间
this.delay = interval;//初始化当前时间到下载时间之间的时间差
}
}
public class Handle extends TimerTask {
private ServletContext context = null;
Timer timer = null; //查询任务定时器
public Handle(ServletContext context)
{
this.context = context;
}
/**
* 开始执行
*/
public void run() {
//开始执行
context.log("开始执行!");
}
}
用延迟时间可以实现,添加了一个init()方法用来计算延时数,不管什么时候启动服务,都可以根据当前系统时间和执行任务的开始时间计算出延时时间毫秒数。
虽然没有分,还是希望能帮助你。 ^_^
‘贰’ java时间转换 0点被转化成24点
CalendarmonEight=Calendar.getInstance();
monEight.set(Calendar.HOUR_OF_DAY,0);
monEight.set(Calendar.MINUTE,10);
monEight.set(Calendar.SECOND,0);
monEight.set(Calendar.MILLISECOND,0);
SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
StringeffectiveTime=format.format(monEight.getTime());
System.out.println("凌晨:"+effectiveTime);
凌晨:2014-03-24 00:10:00
‘叁’ java 获取当前时间与零点的时间差
一般情况下不会出现如题所示的问题,既然出现了我们就要想办法解决之。以我的机器为例,我的当前系统时间是北京时间2011-08-31T08:00:00,但是newDate()得到的却是:2011-08-31T00:00:00。表示java得到的时间比当前系统时间提前了8个小时,那么我们就要想办法把java得到的时间向后推迟8个小时。解决的办法是:
1、找到你用的jre文件夹,以本机为例:C:\Program Files\Java\jdk1.5.0\jre
2、在上述文件夹下有个zi文件夹,我们的工作都在这里。
3、zi文件夹下有一个Etc文件夹,我们要做的工作就是从这个文件夹下找到对应的GMT文件替换zi下GMT文件。
4、选择哪个文件呢?如果java获取的时间+N=当前系统时间,就选择GMT-N文件,重命名为GMT,覆盖掉zi下的GMT文件,如果java获取的时间-N=当前系统时间,就选择GMT+N文件,重命名为GMT,覆盖掉zi下的GMT文件。
5、再运行一下你的程序看时间是不是正确了,如果还是不正确,请确认你的jre目录是否选得正确。
‘肆’ java 分别 取昨天零点 和 二十四点
new date()获取当前系统时间,在设置小时,分钟,秒数位0点的,转化为毫秒数,减去24小时的毫秒数,再转化成时间对象,就是的了,第二个同样
‘伍’ java怎么取下一天的零点
//取当前时间的下一日期整点 供参考
SimpleDateFormat format = null;
Date date = null;
Calendar myDate = Calendar.getInstance();
myDate.add(Calendar.DAY_OF_MONTH, 1);
date = myDate.getTime();
format = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
String rtnYes = format.format(date);
System.out.println(rtnYes);
‘陆’ java如何在每一天的凌晨00:00:00自动运行程序
LZ指的是定时任务吧
在java里面做定时任务通常是线程的
下面有个简单的定时任务(没验证是否好使 但基本是这个样子的)
在web.xml里面增加一个监听
<listener>
<listener-class>CountListen</listener-class>
</listener>
具体代码如下
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;
import java.util.*;
public class CountListen
implements ServletContextListener {
private java.util.Timer timer = null;
public void contextInitialized(ServletContextEvent event) {
timer = new java.util.Timer(true);
event.getServletContext().log("定时器已启动");
System.out.println("定时器已启动");
Date date = new Date(1900,1,1,23,59);
timer.schele(new SampleTask(event.getServletContext()),0,
24 * 60 * 60 * 1000);
event.getServletContext().log("已经添加任务调度表");
System.out.println("已经添加任务调度表");
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("定时器销毁");
}
}
import java.util.*;
import javax.servlet.ServletContext;
import com.founder.gongan.util.ConfigPropertie;
import com.founder.gongan.manage.CountManager;
import com.founder.botong.entity.EnumFolder;
class SampleTask
extends TimerTask {
private static boolean isRunning = true;
private ServletContext context = null;
public SampleTask(ServletContext context) {
this.context = context;
}
public void run() {
if (isRunning) {
isRunning = false;
context.log("开始执行指定任务");
System.out.println("开始执行指定任务");
//指定的任务......
isRunning = true;
context.log("指定任务执行结束");
System.out.println("指定任务执行结束");
}else {
context.log("上一次任务执行还未结束");
}
}
}
‘柒’ java如何自己构造一个时间
//初始化一个时间。默认为当前时间。
Calendar c=Calendar.getInstance();
//在给这个时间设置你要的值。
//c.set(year, month, date)
c.set(2008, 2, 18, 0, 0);
//c.set(year, month, date, hourOfDay, minute, second)
Date d=c.getTime();
//输出当前自己设置的时间的前14位
System.out.println(d.toLocaleString().substring(0,14));
‘捌’ java quartz 如何配置, 两天执行一次,且0点执行
如果你是直接写的代码设置时间的,可以设置每48小时,翻翻API就有了,既然你问了,肯定是通过XML配置文件写的,那只能给一个解决方案了,在配置文件中虽然有0 0 0 1/2 * ? 来表示从每月1号起每2天0点0分0秒执行一次,但遇到31这样的月份就会错,不建议使用。
想到的解决方案有2种,一种设置成每天跑一次,定义个static boolean变量 第一次执行的时候改成false并执行,第2天的执行获取该值,发现是false把值变成true不执行,发现是true改成false执行。
第2种方法其实是为了防止项目被重启static变量重置的,这个boolean值(或者你自定义的标示符)放到数据库里,没天执行的时候读一下库。当然在指定位置生成一个空文件,每次执行判断该位置的文件是否存在也一样(覆盖项目的时候记得,如果这个文件有复制到相关位置就好了)
‘玖’ java取下一天的零点,求大神帮忙不胜感激!
private Date getTimeOf12() {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.add(Calendar.DAY_OF_MONTH, 1);
return cal.getTime();
}
试试 这个
‘拾’ Java时间为什么从1970
java起源于UNIX系统,而UNIX认为1970年1月1日0点是时间纪元.最初计算机操作系统是32位,而时间也是用32位表示。因为用32位来表示时间的最大间隔是68年,而最早出现的UNIX操作系统考虑到计算机产生的年代和应用的时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始时间),而java自然也遵循了这一约束。