1

次の Java コードがあるとします。

class Tester
    {
    public static void main(String[] args)
        {
        System.out.println((System.nanoTime()/1000));
        System.out.println(System.currentTimeMillis());
        }
    }

それはの出力を与えました

2626051678558
1377785791569

両者には少し違いがあると思っていましたが、間違っていました。
なぜそれがそのように振る舞ったのか、あなたは何か考えがありますか?

4

4 に答える 4

7

メソッドのjavadocを読む

このメソッドは、経過時間を測定するためにのみ使用でき、システム時間またはウォールクロック時間の他の概念とは関係ありません。返される値は、一定ではあるが任意の起点時刻からのナノ秒を表します(おそらく将来であるため、値は負の可能性があります)。Java 仮想マシンのインスタンスでは、このメソッドのすべての呼び出しで同じオリジンが使用されます。他の仮想マシン インスタンスは別のオリジンを使用する可能性があります。

nanoTime()は時間を表示していません。

于 2013-08-29T14:31:56.277 に答える
0

nanoTime() は、Java ドキュメントにあるように、精密タイマーです。currentTimeMillis() はタイマーではなく、「壁掛け時計」です。nanoTime() は常に正の経過時間を生成しますが、currentTimeMillis は生成しません (たとえば、日付を変更したり、閏秒に達した場合など)。

于 2015-01-10T16:26:29.343 に答える
0
       long currentTimeMillis = System.currentTimeMillis();     
       long nanos = TimeUnit.MILLISECONDS.toNanos(currentTimeMillis);
       System.out.println(nanos);
       System.out.println(TimeUnit.NANOSECONDS.toMillis(nanos)*1000000); 
于 2013-08-29T14:41:58.883 に答える
0

Android を使用している場合、nanoTime はディープ スリープ モードの影響を受けます。代わりに SystemClock.elapsedRealtime() (ミリ秒を返す) を使用してください

于 2017-01-05T20:31:32.487 に答える