如何将时间表更改为每隔X时间每天输入的特定时间

时间:2015-09-03 15:33:06

标签: java java-ee schedule

iam试图让每天早上8点执行任务(例子)。

目前我所做的是做一个任务,自动执行但只持续一段时间(在这种情况下是50秒)我希望它每天早上8点执行。

我目前的代码:

    Timer time = new Timer(); 
    certif_envia_notificacion st = new certif_envia_notificacion(); 
    time.schedule(st, 0, 50000);

其中certif_envia_notificacion是我想要执行的任务,它确实每50秒执行一次。

目前唯一可以解决这个问题的方法是在任务certif_envia_notificacion询问时间并执行,如果是早上8点,但这似乎是对服务器资源的巨大浪费,因为生病必须执行任务至少24次一天。

提前致谢。

2 个答案:

答案 0 :(得分:1)

这是我想到的一种黑客解决方案,但可以根据您的要求发表评论/反馈。

基本上,根据我的理解,你有一个Java程序,它在计算机启动时自动运行(如果它重新启动),然后每小时检查一次,看看它是否是运行应用程序的正确时间。为什么不让它以这种方式运行,而不是每小时运行一次,计算到达下一次所需时间(例如第二天晚上8点)。

例如,假设您在下午3:15重新启动它。当java程序运行时,让它获取当前时间(System.currentTimeMil ...),然后计算到达8PM所需的时间。你可以对此做一些简单的数学计算(例如 20 - 当前时间 = 等待所需的时间),如果是负数,只需添加24即可它(例如,如果它的20 - 23,答案是24 - 3 = 21,那么下一个晚上8点等待21个小时)。

每次运行代码或启动时都可以使用此过程。我建议只创建一个简单的函数来计算所需的睡眠时间。

答案 1 :(得分:0)

我最后做的是每隔一小时执行一次程序并提出小时问题并选择我想要的小时,我知道这不是最好的方法,但我需要快速完成....

    Calendar cal = Calendar.getInstance(); 
    int hour = cal.get(Calendar.HOUR_OF_DAY);
    if(hour == DesiredHour){
    //do stuff
    }else if(hour == DesiredHour2){
    //do stuff 2
    }

感谢您的评论。