我要设置一个定时任务在每天晚上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点?

解决方案 »

  1.   

    new一个当天23点正的Date,然后日期比大小.
      

  2.   

    Date dt = new Date();
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(dt);
    System.out.println(calendar.get(Calendar.HOUR_OF_DAY) > 23);
      

  3.   

    你既然是一个定时任务,那我感觉你应该用下Quartz来做这个定时执行任务。
    你下载一下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();
    }
    }
    }
      

  4.   


    Calendar.HOUR_OF_DAY 这个不行
      

  5.   

    CSDN上就有下载。http://download.csdn.net/source/852297
      

  6.   


    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");
    }以上就可以实现了,谢谢大家发帖
      

  7.   


    我用java timer 不能实现吗?感觉你这个方法太复杂
      

  8.   

    记得Date类里好像有before和After函数啊