【问题标题】:How to correct calculate the running time如何正确计算运行时间
【发布时间】:2016-05-16 18:35:28
【问题描述】:

我想计算我的程序从开始到结束的总运行时间并在 JFrame 中刷新运行时间,但是当我运行我的程序时,我得到了超过 70 年 1 天 2 小时的时间。为什么 ?怎么了?

private void setMachineTime(){
    Timer timer = new Timer();
    long startTime = new Date().getTime();
    timer.scheduleAtFixedRate(new TimerTask() {
       @Override
       public void run() {
           long endTime = new Date().getTime();
           long diffTime = endTime - startTime ;
           String time = new SimpleDateFormat("yy:mm:dd:HH:mm:ss").format(diffTime);
           System.out.println(time);
       }
    }, 0, 1000);
}

actual result

更新: 我用自己的格式化时间方法重写了代码。现在我得到了我想要的。谢谢大家。

private void setMachineTime(){
    Timer timer = new Timer();
    long startTime = new Date().getTime();
    timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {

            long endTime = new Date().getTime();
            long diffTime = endTime - startTime;
            String diffSeconds = formatTime(diffTime / 1000 % 60);
            String diffMinutes = formatTime(diffTime / (60 * 1000) % 60);
            String diffHours = formatTime(diffTime / (60 * 60 * 1000) % 24);
            System.out.println(diffHours + ":" + diffMinutes + ":" + diffSeconds);
        }
    }, 0, 1000);
}

private String formatTime(long diff){
    long t;
    t = diff;
    if(t < 10){
        return String.valueOf("0"+t);
    } else {
        return String.valueOf(t);
    }
}

【问题讨论】:

  • 你还不到 70 年。您正在根据日期创建一个字符串,该日期被解释为自 1970 年 1 月 1 日凌晨 12:00 以来的时间量。然后您将打印年份,即 1970 年或“70”。看看如果你尝试String time = new SimpleDateFormat("yy:mm:dd:HH:mm:ss").format(0); 会发生什么 - 它会说它是那个确切的日期。另请查看stackoverflow.com/questions/17940200/…
  • 实际上,现在我想起来了,它可能不会说确切的日期,而是根据您的时区进行调整。不过,一般原则相同。

标签: java timing


【解决方案1】:

您正在将时差格式化为 yy:mm:dd:HH:mm:ss。只需打印出 diffTime 即可获得毫秒数,如果需要秒数则除以 1000。

编辑:我想我知道您要做什么,但是您正在处理一个时间间隔,该时间间隔不能格式化为日期。您需要滚动自己的格式以将时间显示为秒、分钟、小时等,或使用外部库。

【讨论】:

    【解决方案2】:

    getTime 返回从 1.1.1970 开始的毫秒数......SimpleDateFormat 将数字转换为日期(然后对其进行格式化)也是如此。这意味着当您的 diffTime = 0 时,SimpleDateFormat 将尝试格式化日期 1.1.1970 0:00:00 并且使用您的格式化字符串它将是 70:01:01:00:00:00。尝试改用http://joda-time.sourceforge.net/api-release/org/joda/time/Interval.html

    顺便说一句,你的格式化字符串是错误的......你在我想你想要月份的地方使用 mm......但是 mm 是分钟。

    【讨论】:

      猜你喜欢
      • 2021-11-18
      • 2019-12-19
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多