System.nanoTime()有一个任意的起点;这不是unix时代。从Javadoc:
自某个固定但任意的原始时间以来,返回的值表示纳秒
因此,您实际计算的是:
(unknownOffset + offsetFromEpochInNanos) / offsetFromEpochInMillis
除非
unknownOffset碰巧为零,否则几乎肯定不会是1e6 。
如果您可以通过减去两次来消除未知偏移的影响,则可以看到该比率约为1e6:
long nanoStart = System.nanoTime();long milliStart = System.currentTimeMillis();Thread.sleep(2000);long nanoEnd = System.nanoTime();long milliEnd = System.currentTimeMillis();;long nanoDelta = nanoEnd - nanoStart;long milliDelta = milliEnd - milliStart;System.out.println((double) nanoDelta / milliDelta);
输出(运行5次):
1000058.37251000045.4705999549.15792103951000046.1011000038.1045
Ideone demo
因此,非常接近1e6。
请注意, 可能 不是这样,因为
System.currentTimeMillis()由于时钟偏斜的校正而无法顺利进行。但是,这些应该很少出现,因此在
大多数情况下, 运行此代码时,您会看到大约1e6。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)