Java中的时间跟踪:使用currentTimeMillis()

时间:2012-01-22 10:41:56

标签: java time

我今天遇到了一个有趣的“时间旅行”问题,使用以下代码:

for (int i = 0; i < 1; i++){
    long start = System.currentTimeMillis();
    // Some code here
    System.out.print(i + "\t" + (System.currentTimeMillis() - start));
    start = System.currentTimeMillis();
    // Some code here
    System.out.println("\t" + (System.currentTimeMillis() - start));
}

我得到了结果

0   15  -606

似乎它不可重复。任何人都有关于在运行时间内发生的事情的任何线索?好奇......

新编辑:我使用了一个小测试来确认下面的答案。我运行程序并在运行期间更改系统时间,最后重复“时间旅行”:

0   -3563323    163

案件结案。谢谢你们!

更多的话:currentTimeMillis()和nanoTime()都是基于系统定时器的,因此如果更新系统定时器(特别是转回),它们将不是单调的。对于这种情况,最好使用一些基于互联网的计时器。

2 个答案:

答案 0 :(得分:12)

System.currentTimeMillis()取决于系统时间。所以它可以被第三方系统修改。

测量时间System.nanoTime()是更好的选择。

答案 1 :(得分:0)

我记得一些事情,比如对系统时间进行时间调整,偶尔与实际时间相匹配。因为currentTimeMillis依赖于可能发生的系统时钟。您也正在与时间服务器同步,也可能是。