0

以下は、最も単純なケースで正常に動作する単純なタイマー クラスです。以下のタイマークラスを使用して、特定のコードの実行にかかる時間を測定しています。

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;
    }
}

以下は、上記のタイマークラスの使用方法です。コードの一部を実行するのにかかるミリ秒単位のタイムスタンプを取得し、それtimestamphoursminutesおよびに変換し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 分間実行されている場合、正しい結果が表示されます。minutessecondssys.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));
4

1 に答える 1