为了账号安全,请及时绑定邮箱和手机立即绑定

如何度量Java中经过的时间?

如何度量Java中经过的时间?

慕田峪7331174 2019-06-14 16:24:21
如何度量Java中经过的时间?我想要这样的东西:public class Stream{     public startTime;     public endTime;     public getDuration()     {         return startTime - endTime;     }}同样重要的是,例如,如果启动时间为23:00,结束时间为1:00,则持续时间为2:00。为了在Java中实现这一点,需要使用哪些类型?
查看完整描述

3 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

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

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

目的nanoTime就是测量经过时间和目的currentTimeMillis就是测量挂钟时间到了。你不能用这个做另一个用途。原因是没有一个计算机的时钟是完美的,它总是漂移,偶尔需要纠正。这种修正可能是手动进行的,或者在大多数机器中,有一个进程运行并不断地对系统时钟(“挂钟”)进行小更正。这种情况往往会发生。每当有闰秒时,就会发生另一次这样的修正。

nanoTime其目的是测量经过的时间,它不受这些小更正的影响。它是您想要使用的。currentTimeMillis会关闭-甚至可能是阴性。

你可能会说,“这听起来不太重要,”我这样说,也许不是,但总的来说,正确的代码不是比错误的代码更好吗?另外,nanoTime不管怎么说,打字的时间都短了。

以前发布的免责声明nanoTime通常只有微秒的精度是有效的。而且,可能需要超过一微秒的时间来调用,这取决于环境(就像另一种情况一样),所以不要期望正确地使用非常小的时间间隔。


查看完整回答
反对 回复 2019-06-14
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

你的新班级:

public class TimeWatch {    
    long starts;

    public static TimeWatch start() {
        return new TimeWatch();
    }

    private TimeWatch() {
        reset();
    }

    public TimeWatch reset() {
        starts = System.currentTimeMillis();
        return this;
    }

    public long time() {
        long ends = System.currentTimeMillis();
        return ends - starts;
    }

    public long time(TimeUnit unit) {
        return unit.convert(time(), TimeUnit.MILLISECONDS);
    }}

用法:

    TimeWatch watch = TimeWatch.start();
    // do something
    long passedTimeInMs = watch.time();
    long passedTimeInSeconds = watch.time(TimeUnit.SECONDS);

之后,可以将时间转换为您喜欢的任何格式,例如使用日历。

格雷茨湾


查看完整回答
反对 回复 2019-06-14
  • 3 回答
  • 0 关注
  • 456 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号