我要设置一个定时任务在每天晚上23点钟运行,Date dt = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("time now:" + df.format(dt));//我能得到当前日期,但是我如何比较是否是〉23点 ,24点?
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("time now:" + df.format(dt));//我能得到当前日期,但是我如何比较是否是〉23点 ,24点?
解决方案 »
- 为什么一个java文件只能存在一个public类?
- 有个Java问题求解
- {向java专家提问题} java系统框架包结构,与项目实现的系统包结构,欢迎大家建议
- public static void main(String args [] ) ,String args []的作用是什么?
- 写了一个UDP发送消息的程序
- 请问怎样获得这样格式(2004:10:10)的一个日期对象
- 初级问题(可以运行javac 但运行java解析器出现问题)!!
- 如何获得MP3文件的metedata?
- 为什么FileInput("File://d:/java/tt.txt")什么出现IO异常?
- 怎样根据ActionEvent e得到JFrame或者JFrame上的某个组件???
- java的泛型参数问题
- 可否通过Java编程判断某表的主键?
Calendar calendar = Calendar.getInstance();
calendar.setTime(dt);
System.out.println(calendar.get(Calendar.HOUR_OF_DAY) > 23);
你下载一下Quartz 1.6.4。这是最新的版本。
在控件库的安装包中,可以看到有5个jar文件和一个lib.rar文件。这里大概说明一下这些包的作用。包名 作用
quartz-1.6.4.jar Quartz的核心包
quartz-jboss-1.6.4.jar Quartz的扩展,用来更好的支持Jboss
quartz-oracle-1.6.4.jar Quartz的扩展,用来适应Oralce方言
quartz-weblogic-1.6.4.jar Quartz的扩展,用来更好的支持WebLogic
quartz-all-1.6.4.jar 以上的总和。如果导入这个一个包,其他的就可以不用导入了。
lib.rar Quartz用到的所有的第三方包
为了方便,你可以把quartz-all-1.6.4.jar加入到classpath中
解压lib.rar,把它下面的core中的commons-collections-3.2.jar和commons-logging-1.1.jar加入到classpath中。这个是Quartz依赖的包。是必须加入的,否则报错!
Quartz中的触发器用来告诉调度程序作业什么时候触发。框架提供了一把触发器类型,但两个最常用的是SimpleTrigger和CronTrigger。SimpleTrigger为需要简单调度而设计。
典型地,如果你需要在给定的时间和重复次数或者两次触发之间等待的秒数,那么SimpleTrigger适合你。另一方面,如果你有许多复杂的作业调度,那需要用CronTrigger。
我觉得你用CronTrigger最好。那以后你的扩展性会很好。
我给你举个CronTrigger的实例啊
实现了org.quartz.Job接口的类import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;public class QuartzJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException {//接口Job必须实现的方法
HelloManager helloManager = (HelloManager) context.getJobDetail().getJobDataMap().get("helloManager");//从JobDataMap中获得要执行的方法实例
if(helloManager != null) {
helloManager.sayHello();//执行测试实例的方法
}
}
}
一个需要定时执行的方法public class HelloManager {
private String yourName;
public HelloManager(String yourName) {
this.yourName = yourName;
} public void sayHello(){
StringBuilder sb = new StringBuilder("Hello --->");
sb.append(yourName).append("\t");
sb.append(new DateTime().toString("yyyy-MM-dd HH:mm:ss"));
System.out.println(sb.toString());
}
}CronTrigger触发器类import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;public class CronTriggerTest { public static void main(String[] args) {
try {
SchedulerFactory factory = new StdSchedulerFactory();//创建调度工厂
Scheduler scheduler = factory.getScheduler();//通过调度工厂获得一个具体的调度者
scheduler.start();//调度者开始工作
JobDetail detail = new JobDetail();//创建一个JobDetail
detail.setName("simpleTriggerJob");//设置Job的名字
detail.setJobClass(QuartzJob.class);//设置Job具体执行的类
detail.getJobDataMap().put("helloManager", new HelloManager("jack"));//通过JobDataMap把参数传过去
CronTrigger trigger = new CronTrigger();//创建Cron触发器
trigger.setName("cronTrigger");//设置这个触发器的名字
trigger.setCronExpression("0 0 23 * * ?");//设置Cron表达式。这里就是你说的每天晚上11点执行的程序。
scheduler.scheduleJob(detail, trigger);//执行Job任务。
} catch (Exception e) {
e.printStackTrace();
}
}
}
Calendar.HOUR_OF_DAY 这个不行
Date dt = new Date();
Date setDt = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strY = df.format(dt).substring(0, 10);
String strHour = "23:00:00";
String strDate = strY + " " + strHour;
//字符串转换成Date
try {
setDt = df.parse(strDate);
} catch (Exception e) {
e.printStackTrace();
} Calendar canlandar = Calendar.getInstance();
Calendar compareCal = Calendar.getInstance();
canlandar.setTime(dt);
compareCal.setTime(setDt);
//比较两个calendar的时间
if (canlandar.after(compareCal)) {
System.out.println("after");
} else {
System.out.println("before");
}以上就可以实现了,谢谢大家发帖
我用java timer 不能实现吗?感觉你这个方法太复杂