有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何正确计算运行时间

我想计算我的程序从开始到结束的总运行时间,并在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

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

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);
    }
}

共 (2) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

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

    顺便说一下,你的格式化字符串是错误的。。。你用mm在你想要的地方上个月。。。但是mm是分钟