Java System.nanoTime()与System.currentTimeMillis()的比较。为什么它们有不同的输出?
给定以下Java代码: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
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);