Java System.nanoTime()vs System.currentTimeMillis()。为什么他们有不同的产出?

时间:2013-08-29 14:30:27

标签: java nanotime

给出以下Java代码:

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

它输出了

2626051678558
1377785791569

我期待两者之间有一点差别,但我错了。
你知道为什么它表现得那样吗?

4 个答案:

答案 0 :(得分:7)

阅读方法的javadoc

  

此方法只能用于测量经过的时间而不是   与系统或挂钟时间的任何其他概念有关。价值   返回表示自某些固定但任意原点以来的纳秒   时间(也许在将来,所以价值可能是负面的)。相同   在a的实例中,此方法的所有调用都使用origin   Java虚拟机;其他虚拟机实例很可能   使用不同的来源。

nanoTime()没有给你时间。

答案 1 :(得分:0)

       long currentTimeMillis = System.currentTimeMillis();     
       long nanos = TimeUnit.MILLISECONDS.toNanos(currentTimeMillis);
       System.out.println(nanos);
       System.out.println(TimeUnit.NANOSECONDS.toMillis(nanos)*1000000); 

答案 2 :(得分:0)

nanoTime(),正如java doc所说,是一个精确计时器。 currentTimeMillis()不是定时器,它是“挂钟”。 nanoTime()将始终产生正的经过时间,currentTimeMillis将不会(例如,如果您更改日期,点击闰秒等)

答案 3 :(得分:0)

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