给出以下Java代码:
class Tester
{
public static void main(String[] args)
{
System.out.println((System.nanoTime()/1000));
System.out.println(System.currentTimeMillis());
}
}
它输出了
2626051678558 1377785791569
我期待两者之间有一点差别,但我错了。
你知道为什么它表现得那样吗?
答案 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)而不是