嗯 要写一个这样的功能:
运行A程序 当每天0:00的时候若此程序仍然在运行[即没被关闭] 则执行该程序里的某个函数
我打算开启的时候获取当前时间距离0:00的毫秒数 
然后写个delay线程在12点时运行函数但是不知道怎么计算开启程序的时间与0:00相差多久 请大家指点一下

解决方案 »

  1.   

    cron4j
    import it.sauronsoftware.cron4j.Scheduler;// Creates a Scheduler instance.
    Scheduler s = new Scheduler();
    // Schedule a once-a-minute task.
    s.schedule("0 0 * * *", new Runnable() {
    public void run() {
    System.out.println("Another minute ticked away...");
    }
    });
    // Starts the scheduler.
    s.start();
      

  2.   


    public class Test {
    final static long DAY_SECONDS = 24 * 60 * 60;
    public static void main(String[] args) {
    System.out.println(DAY_SECONDS - (System.currentTimeMillis() / 1000) % DAY_SECONDS);
    }
    }
      

  3.   

    忘记考虑时区了。。public class Test {
    final static long DAY_SECONDS = 24 * 60 * 60;
    final static long MINUS_SECONDS = 8 * 60 * 60;
    public static void main(String[] args) {
    long time = DAY_SECONDS - MINUS_SECONDS - 
    (System.currentTimeMillis() / 1000) % DAY_SECONDS;
    if(time < 0)
    time += DAY_SECONDS;
    System.out.println(time);
    }
    }
      

  4.   

    一天的时间是24*60*60秒,设为DAY_SECONDS,那么距离下一天0点的秒数就是DAY_SECONDS - (System.currentTimeMillis() / 1000) % DAY_SECONDS(就是一天的秒数减去系统时间当前的秒数)注意System.currentTimeMillis()是从1970年1月1日开始算的,是格林日志时间,单位为毫秒。
    由于是北京时间在东八区,所以还要减去时差MINUS_SECONDS = 8 * 60 * 60。
    结果可能是负的,所以还要再处理下。
    最终结果就是当前时间举例下一天0点的秒数。
      

  5.   

    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY,0);
    calendar.set(Calendar.MINUTE,0);
    calendar.set(Calendar.SECOND,0);
    calendar.set(Calendar.MILLISECOND,0);
    calendar.add(Calendar.DAY_OF_YEAR,1);
    long future = calendar.getTimeInMillis();long now = System.currentTimeMillis();long delay = future - now;