Java System.nanoTime()与System.currentTimeMillis()的比较。为什么它们有不同的输出?

Java System.nanoTime()与System.currentTimeMillis()的比较。为什么它们有不同的输出?,java,nanotime,Java,Nanotime,给定以下Java代码: class Tester { public static void main(String[] args) { System.out.println((System.nanoTime()/1000)); System.out.println(System.currentTimeMillis()); } } 它的输出为 2626051678558 1377785791569 26260

给定以下Java代码:

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

2626051678558 1377785791569 2626051678558 1377785791569 我原以为两者会有点不同,但我错了。
你知道为什么它会这样吗?

阅读该方法的

此方法只能用于测量经过的时间,不适用于 与系统或挂钟时间的任何其他概念相关。价值 返回表示自某个固定但任意的原点以来的纳秒数 时间(可能在将来,因此值可能为负值)。相同的 origin被一个实例中该方法的所有调用使用 Java虚拟机;其他虚拟机实例可能会 使用不同的来源

nanoTime()
不会显示时间。

读取该方法的

       long currentTimeMillis = System.currentTimeMillis();     
       long nanos = TimeUnit.MILLISECONDS.toNanos(currentTimeMillis);
       System.out.println(nanos);
       System.out.println(TimeUnit.NANOSECONDS.toMillis(nanos)*1000000); 
此方法只能用于测量经过的时间,不适用于 与系统或挂钟时间的任何其他概念相关。价值 返回表示自某个固定但任意的原点以来的纳秒数 时间(可能在将来,因此值可能为负值)。相同的 origin被一个实例中该方法的所有调用使用 Java虚拟机;其他虚拟机实例可能会 使用不同的来源


nanoTime()
没有显示时间。

nanoTime(),正如java文档所说,是一个精确计时器。currentTimeMillis()不是计时器,它是“挂钟”。nanoTime()总是产生正的运行时间,而currentTimeMillis不会(例如,如果您更改日期、达到闰秒等)。

nanoTime(),正如java文档所说,是一个精确计时器。currentTimeMillis()不是计时器,它是“挂钟”。nanoTime()始终会产生正的运行时间,而currentTimeMillis不会(例如,如果您更改日期、达到闰秒等)。

如果您使用Android,nanoTime会受到深度睡眠模式的影响。使用SystemClock.elapsedRealtime()(返回毫秒)代替

如果您使用的是Android,nanoTime会受到深度睡眠模式的影响。改用SystemClock.elapsedRealtime()(返回毫秒)

Wow!这是一段用于处理毫秒和纳秒的有用脚本。然而,这似乎与这个问题没有那么直接的关系。哇!这是一段用于处理毫秒和纳秒的有用脚本。然而,这似乎与这个问题没有直接关系。作为旁白:纳秒是百万分之一秒,所以要将nanoTime()的输出除以1000000,而不是1000。作为旁白:纳秒是百万分之一秒,所以要得到nanoTime()的输出对于毫秒级,你应该除以1000000,而不是1000。
       long currentTimeMillis = System.currentTimeMillis();     
       long nanos = TimeUnit.MILLISECONDS.toNanos(currentTimeMillis);
       System.out.println(nanos);
       System.out.println(TimeUnit.NANOSECONDS.toMillis(nanos)*1000000);