如何衡量Java中的时间?

问题:

 可能重复:
How do I calculate the elapsed time of an event in java?

我想要这样的东西:

    public class Stream
    {
        public startTime;
        public endTime;

        public getDuration()
        {
            return startTime - endTime;
        }
    }

为了在Java中实现这一点,使用哪些类型?
(Also it is important that for example if the startTime it’s 23:00 and endTime 1:00 to get a duration of 2:00.)

回答:

不幸的是,迄今为止发布的十个答案中没有一个是对的。
如果您要测量经过时间,并且希望它为correct,则必须使用System.nanoTime()。你不能使用System.currentTimeMillis(),除非你不介意你的结果是错误的。
nanoTime的目的是测量elapsed时间,currentTimeMillis的目的是测量wall-clock时间。你不能用于另一个目的。原因是没有电脑的时钟是完美的;它总是漂移,偶尔需要纠正。这种纠正可能手动发生,或者在大多数机器的情况下,有一个过程运行并持续发出对系统时钟(“挂钟”)的小修正。这些往往会经常发生。只要有一个闰秒,就会发生另一个这样的纠正。
由于nanoTime的目的是测量经过的时间,所以不受这些小修正的影响。这是你想要使用的。目前正在进行currentTimeMillis的任何时间都将被关闭 – 甚至可能是负面的。
你可能会说,“这听起来不是很重要,”我说的话可能不是,但总体来说,不正确的代码比错误的代码更好吗?此外,无论如何,nanoTime更短。
以前发布的关于nanoTime的免责声明通常只有微秒精度有效。此外,根据情况(可以另外一个),可能需要超过一个微秒的时间,所以不要指望正确地花费非常小的时间间隔。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How do I measure time elapsed in Java?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

57 + = 60