以下は、最も単純なケースで正常に動作する単純なタイマー クラスです。以下のタイマークラスを使用して、特定のコードの実行にかかる時間を測定しています。
public static class StopTimer {
public static StopTimer getInstance() {
return new StopTimer();
}
private long m_end = -1;
private long m_interval = -1;
private final long m_start;
private StopTimer() {
m_start = m_interval = currentTime();
}
public long getDuration() {
long result = 0;
final long startTime = m_start;
final long endTime = isTimerRunning() ? currentTime() : m_end;
result = nanoToMilliseconds(endTime - startTime);
return result;
}
private long currentTime() {
return System.nanoTime();
}
private long nanoToMilliseconds(final long nanoseconds) {
return nanoseconds / 1000000L;
}
}
以下は、上記のタイマークラスの使用方法です。コードの一部を実行するのにかかるミリ秒単位のタイムスタンプを取得し、それtimestamp
をhours
、minutes
およびに変換しseconds
ます。
public static void main(String[] args) {
StopTimer timer = StopTimer.getInstance();
some_code_which_I_am_measuring();
long timeTaken = timer.getDuration();
int seconds = (int) (timeTaken / 1000) % 60;
int minutes = (int) ((timeTaken / (1000 * 60)) % 60);
int hours = (int) ((timeTaken / (1000 * 60 * 60)) % 24);
System.out.println("Total Time Taken: " + hours + " hours " + minutes + " minutes " + seconds + " seconds");
}
問題文:-
私が直面している問題は、timeTaken
タイムスタンプが正しく変換さhours
れないことです。つまり、コードが合計 2 分間実行されている場合、正しい結果が表示されます。minutes
seconds
sys.out
しかし、このメソッドsome_code_which_I_am_measuring
を 2 日間実行すると、sys.out
間違った結果が表示されるとします。例として、私は自分のプログラムを で開始し、Fri 5/23/2014 9:40 PM
終了したSun 5/25/2014 9:38 PM
ので、コードを実行するのに何時間sys.out
もかかったと言うべきです。~48
右?
しかし、一般的には出力されます-
Total Time Taken: 23 hours 57 minutes 35 seconds
上記の日付を見ると、タスクを完了するのに 48 時間かかったことがわかりますが、これは間違っています。
上記のコードに何か問題がありますか?
アップデート:-
日を追加した後、全体のタイムスタンプは次のようになりますか?
int seconds = (int) (timeTaken / 1000) % 60;
int minutes = (int) ((timeTaken / (1000 * 60)) % 60);
int hours = (int) ((timeTaken / (1000 * 60 * 60)) % 24);
int days = (int) (timeTaken / (1000 * 60 * 60 * 24));