如何在Java中度量所用的时间?[副本]

我想要这样的东西:

公共类流
{
公共启动时间;
公共结束时间;
公共getDuration()
{
返回开始时间-结束时间;
}
}

同样重要的是,如果开始时间为23:00,结束时间为1:00,则持续时间为2:00

为了在Java中实现这一点,需要使用哪些类型

不幸的是,目前发布的十个答案中没有一个是完全正确的

如果要测量经过的时间,并且希望它是正确的,则必须使用System.nanoTime()。您不能使用System.currentTimeMillis(),除非您不介意结果出错

nanoTime的目的是测量经过的时间,而currentTimeMillis的目的是测量挂钟时间。你不能把这个用于其他目的。原因是没有一台计算机的时钟是完美的;它总是漂移,偶尔需要纠正。这种校正可以手动进行,或者在大多数机器的情况下,有一个进程运行并不断对系统时钟(“挂钟”)进行小的校正。这种情况经常发生。每当出现闰秒时,就会发生另一次这样的修正

由于nanoTime的目的是测量经过的时间,因此它不受任何这些小修正的影响。这是你想用的。当前使用currentTimeMillis进行的任何计时都将关闭,甚至可能为负值

你可能会说,“这听起来并没有那么重要”,我会说,也许没有,但总的来说,正确的代码不是比错误的代码更好吗?此外,nanoTime的输入时间更短

以前发布的关于nanoTime的免责声明通常只有微秒精度是有效的。此外,根据具体情况,调用它可能需要超过一整微秒的时间(另一种情况也是如此),因此不要期望正确地计算非常小的时间间隔

发表评论