У меня есть частота и временной диапазон, с которым должна выполняться частота.
Например, если текущее время составляет 2 часа ночи, а частота равна 360 минутам, следует предположить, что
поскольку прошло только полночь, задание должно быть выполнено через 360 минут после 12 означает 6 часов утра
текущее время - время запуска сервера с полуночи.
поэтому, если сервер запускается в 5 утра, а частота равна 360, задача должна быть запущена в 6 часов утра.
но если задача 5 утра и частота 240, так как она уже прошла 240 минут с полуночи
следующий прогон должен быть в 8 утра
Если сервер запускается в 10:00, а частота - 300, то начиная с полуночи один запуск выполняется в 5:00 и следующий, как рассчитано в 10:00, поэтому он начнется немедленно в 10:00
.
Временные диапазоны делятся на 4 квартала, с 12:00 до 18:00 до 12:00, с 12:00 до 18:00 и с 18:00 до 12:00 следующего дня.
Это код ниже, который работает нормально для частоты 240 и 360, но работает неправильно, когда его частота 60.
Некоторые значения, которые приведены ниже:
stNow----serverTime
sElapsed ---time elapsed from midnight
currFreq ----frequecy
protected int _getInitWorkerTime()
{
int vRun=0;
STime stNow= new STime(PWMSystem.newDate());
int currFreq = _findAlertFrequency()/60;
int sElapsed =Constants.MINUTES_PER_DAY-stNow.elapsedMinutes(STime.midnight);
_log.error("now time as 24------"+stNow.getHourNo24());
_log.error("now currFreq------"+currFreq);
_log.error("now sElapsed-----"+sElapsed);
if(sElapsed == 1440)
sElapsed=0;
if(stNow.getHourNo24()>=0 && stNow.getHourNo24()<=6)
{
_log.error("now time as 24-inside cond-1-----"+stNow.getHourNo24());
if(currFreq>sElapsed)
vRun= currFreq-sElapsed;
else
vRun= -(currFreq-sElapsed);
}
if(stNow.getHourNo24()>6 && stNow.getHourNo24()<=12)
{
_log.error("now time as 24-inside cond-2-----"+stNow.getHourNo24());
if(currFreq>sElapsed)
vRun=360-(currFreq-sElapsed);
else
vRun=360-(-(currFreq-sElapsed));
}
if(stNow.getHourNo24()>12 && stNow.getHourNo24()<=18)
{
_log.error("now time as 24-inside cond-3-----"+stNow.getHourNo24());
if(currFreq>sElapsed)
vRun=720-(currFreq-sElapsed);
else
vRun=720-(-(currFreq-sElapsed));
}
if(stNow.getHourNo24()>18 && (stNow.getHourNo24()<=24 ||stNow.getHourNo24()<=0))
{
_log.error("now time as 24-inside cond-4-----"+stNow.getHourNo24());
if(currFreq>sElapsed)
vRun=1080-(currFreq-sElapsed);
else
vRun=1080-(-(currFreq-sElapsed));
}
// vRun=_MAX_FREQUENCY_DELAY_IN_SEC+ sElapsed*60+_findAlertFrequency()+_BOOT_DELAY_SECONDS_START;*/
//vRun=stNow.elapsedMinutes(STime.midnight)*60+_findAlertFrequency()+_BOOT_DELAY_SECONDS_START;
return (vRun*60 + _BOOT_DELAY_SECONDS_START);
}