我想要这样的东西:
public class Stream { public startTime; public endTime; public getDuration() { return startTime - endTime; } }
同样重要的是,例如,如果 startTime 为 23:00,endTime 为 1:00,则持续时间为 2:00。
为了在 Java 中实现这一点,使用哪些类型?
不幸的是,到目前为止发布的十个答案中没有一个是完全正确的。
如果您正在测量经过的时间,并且希望它是 正确 的,则必须使用System.nanoTime(). 你不能使用System.currentTimeMillis(),除非你不介意你的结果是错误的。
System.nanoTime()
System.currentTimeMillis()
的目的nanoTime是测量 经过 的时间,而 的目的currentTimeMillis是测量 挂钟 时间。您不能将其中一个用于其他目的。原因是没有计算机的时钟是完美的。它总是漂移,偶尔需要纠正。这种更正可能是手动进行的,或者在大多数机器的情况下,有一个进程在运行并不断地对系统时钟(“挂钟”)进行小幅更正。这些往往会经常发生。每当有闰秒时,就会发生另一种这样的修正。
nanoTime
currentTimeMillis
由于nanoTime的目的是测量经过的时间,因此不受任何这些小修正的影响。这是你想要使用的。目前正在进行的任何时间安排currentTimeMillis都将被取消——甚至可能是负面的。
你可能会说,“这听起来并不那么重要”,我说,也许不是,但总的来说,正确的代码不比不正确的代码更好吗?此外,nanoTime无论如何打字都更短。
以前发布的关于nanoTime通常只有微秒精度的免责声明是有效的。此外,调用可能需要超过一微秒的时间,具体取决于情况(其他情况也是如此),因此不要期望正确地计时非常非常小的时间间隔。