1 時間 (3 回の実行) 内で 16 分ごとにジョブを実行しています。ジョブは毎時 16 時、32 時、48 時に実行されます。次の 1 時間にこぼれることはありません。
以下は、2 時間のウィンドウの実行のサンプルです。
Run 1:
Thu Jul 04 06:16:00 EDT 2013
Run 2:
Thu Jul 04 06:32:00 EDT 2013
Run 3:
Thu Jul 04 06:48:00 EDT 2013
Run 4:
Thu Jul 04 07:16:00 EDT 2013
Run 5:
Thu Jul 04 07:32:00 EDT 2013
Run 6:
Thu Jul 04 07:48:00 EDT 2013
私の問題は、ジョブごとにいくつかの目標を立てる必要があることです (重要ではありません) が、最終的には、1 日に実行するジョブの数を決定し、各ジョブの目標を設定することにしました。
私は、可変の開始時刻を指定して、1 日に何回ジョブを実行するかを決定するロジックに取り組んでいます。いくつかの計算でこれを実行しようとしましたが、最終的には、カレンダーを使用して 1 日の実行回数を計算する次のコードに依存しました。
public int getRunsLeftInDay(int runIntervalMinutes, int offset){
/*
Offset is when the job starts
Currently runIntervalMinutes = 16 && offset = 16
So start 16 minutes after the hour and run on 16 minute interval
*/
/*
This method is tested returns proper next run date, basically gives
the next 16 past || 32 past || 48 past time that will occur
*/
Date nextRunDt = this.getNextRun(runIntervalMinutes, offset);
//Determine last run per hour
int lastRunMinute = (60/runIntervalMinutes) * runIntervalMinutes;
int runCount = 0;
Calendar cal = Calendar.getInstance();
cal.setTime(nextRunDt);
int currentDay = cal.get(Calendar.DAY_OF_YEAR);
while(cal.get(Calendar.DAY_OF_YEAR) == currentDay){
runCount++; //count first run since calendar is set to nextRunDt
if(cal.get(Calendar.MINUTE) == lastRunMinute){
cal.add(Calendar.HOUR_OF_DAY, 1);
cal.set(Calendar.MINUTE, offset);
}else{
cal.add(Calendar.MINUTE, runIntervalMinutes);
}
}
return runCount;
}
現在、私のコードは正しい実行数を返していますが、この値を決定するより良い方法があるかどうかを調べたいと思います (いくつかの日付計算を通じて)。
だから基本的に私は2つの質問があります:
1. 1 日あたりのランニング数を求めるこの方法で十分ですか?
2. 日付/時刻の計算を使用してこれを行うにはどうすればよいですか?