2

Javaアプリケーションでさまざまなトランザクションの時間を計測します。トランザクションの開始時に、カレンダーをインスタンス化してから、時、分、秒、およびミリ秒を取得することにより、開始時刻を取得します。トランザクションを完了し、新しいカレンダーをインスタンス化して、新しい時間、分、秒、およびミリ秒を取得します。私の推論は、開始時間と終了時間の違いはトランザクションの時間であるということです。これはほとんどの場合機能しているように見えますが、ごく一部の時間、終了時間は開始時間よりも早くなっています。なぜこれが発生し、どうすればそれを防ぐことができますか?

4

1 に答える 1

8

まあ、違いを計算するより簡単な方法の1つは、System.currentTimeMillis()またはのようなものを使用することSystem.nanoTime()です-そうすれば、開始間のミリ秒数またはナノ秒数を取得するための単純な減算以外に何もする必要はありませんそして終わり。

ただし、システム クロックが NTP などによって更新されている場合、クロック スキューの処理方法によっては、時折事実上時間が逆行することがあります。(一部のシステムは、システム クロックを現実に戻すためにしばらくの間遅くするだけです。他のシステムでは、不連続性がある場合があります。)

これを回避する最善の方法はわかりません-現在、JREには.NETと同等のものがあるとは思いませんStopwatch。これは純粋に間隔を測定するためのものであり、システムクロックによって混乱することはありません(私は信じています)。変化。

(エリックのJoda Timeの推奨事項に同意しますが、この特定の問題には必要ないと思いますが。)

于 2010-07-27T13:01:04.390 に答える