そんなこと知ってるSystem.nanoTime()
時間を測定するための現在好ましい方法はありますSystem.currentTimeInMillis()
。最初の明白な理由はnanoTime()がより正確なタイミングを与えること、そして後者がシステムのリアルタイムクロックの調整の影響を受けるというもう一つの理由です。 「システムのリアルタイムクロックの影響を受ける」とはどういう意味ですか?
この場合、私は以下のブログ記事の抜粋が有用であることがわかりました。
興味のある方絶対時間を測定するそれからいつも使う
System.currentTimeMillis()
。その解像度はかなり高いかもしれないことに注意してください 粗い(ただし、これが絶対的な問題であることはめったにありません。)興味のある方経過時間の測定/計算それから いつも使う
System.nanoTime()
。ほとんどのシステムでは、 マイクロ秒のオーダーの解像度。ただし、注意してください、この呼び出し プラットフォームによっては実行にマイクロ秒かかることもあります。
クロックとタイマー - 一般的な概要David Holmes著
からSystem.currentTimeMillis()
システムに依存している時刻時計、時間の調整は時間通りに保つために合法的です。
ここで調整とはどういう意味ですか?例えばの記述を見てみましょうCLOCK_REALTIME
Linuxから:
実時間(すなわち、実時間)を測定するシステム全体の時計。 この時計を設定するには適切な特権が必要です。この時計はシステム時間の不連続ジャンプの影響(例:もし システム管理者が手動で時計を変更する)によって、 adjtime(3)とNTPによって実行される増分調整。
メソッドのJavaDocをチェックするだけです。
System.nanoTime()
「...この方法は経過時間の測定にのみ使用でき、システムや壁時計の時間に関するその他の概念とは関係ありません。」
System.currentTimeMillis()
「...現在の時刻をミリ秒単位で返します。...」
測定中にシステム時間が変化するかどうかは、System.currentTimeMillis()
測定間隔も変わります。ただし、を使用して間隔を測定しても変わりません。System.nanoTime()
方法。
それはその価値System.currentTimeMillis()
リターンは、マシンの内部時計から取得されます。システム管理者(またはNTP)が時間を変更した場合、たとえば、時計が5分高速で動作していることがわかり、システム管理者がそれを修正して修正した場合、System.currentTimeMillis()
影響を受けます。これは、値が減少するのを見ることさえできることを意味します、そして、あなたが間隔を測定するためにそれを使うならば、タイミングはずれているかもしれません。あなたも測定することがあります負タイミング。
System.nanoTime()
一方、内部CPUカウンタ/クロックから派生した値を返します。この時計で計測された時間は、どのユーザーまたはプログラムによっても変更できません。これはタイミングの信頼性が高くなることを意味します。しかし、CPUクロックは電源を切るとリセットされるので、現在の「実時間」時間を見つけるのには役立ちません。
currentTimeInMillis()
夏時間のシフト中に経過時間を記録するには?それともそれが意味するものではありませんか? - trevor-ecurrentTimeMillis
測定しようとすると、物理現象としての時間の流れです。 DSTシフトは、旅行中のタイムゾーンの変更に似ています。時間の表示方法にのみ影響します。時間自体は影響を受けません。 - JonicurrentTimeMillis
の影響を受けていません。 DST、しかしそれは影響を受けます。うるう秒などnanoTime
。 - Louis WassermancurrentTimeInMillis
「時刻」を使用します。それとも絶対クロックですが、currentTimeInMillisがDSTの影響を受けているとは限りませんか。 - Geek