Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确计算运行时间_Java_Timing - Fatal编程技术网

Java 如何正确计算运行时间

Java 如何正确计算运行时间,java,timing,Java,Timing,我想计算我的程序从开始到结束的总运行时间,并在JFrame中刷新运行时间,但当我运行我的程序时,我得到了超过70年1天2小时的时间。为什么?怎么了 private void setMachineTime(){ Timer timer = new Timer(); long startTime = new Date().getTime(); timer.scheduleAtFixedRate(new TimerTask() { @Override

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

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);
    }
}
private void setMachineTime(){
定时器=新定时器();
long startTime=new Date().getTime();
timer.scheduleAtFixedRate(新TimerTask(){
@凌驾
公开募捐{
long-endTime=新日期().getTime();
长diffTime=结束时间-开始时间;
字符串diffSeconds=格式化时间(diffTime/1000%60);
字符串diffMinutes=格式化时间(diffTime/(60*1000)%60);
字符串diffHours=格式化时间(diffTime/(60*60*1000)%24);
System.out.println(diffHours+“:“+diffMinutes+”:“+diffSeconds);
}
}, 0, 1000);
}
专用字符串格式化时间(长差异){
长t;
t=diff;
if(t<10){
返回字符串.valueOf(“0”+t);
}否则{
返回字符串.valueOf(t);
}
}

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


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

getTime返回1970年1月1日起的毫秒数……SimpleDataFormat将数字转换为日期(然后格式化)也是如此。这意味着当diffTime=0时,SimpleDateFormat将尝试格式化日期1.1.1970 0:00:00,而使用格式化字符串,它将是70:01:01:00:00。试着用它来代替


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

你不会得到70年。您正在根据日期生成字符串,该日期被解释为自1970年1月1日上午12:00以来的时间量。然后打印年份,即1970年或“70”。看看如果您尝试
String time=newsimpledateformat(“yy:mm:dd:HH:mm:ss”).format(0)会发生什么-它会说是那个确切的日期。事实上,现在我想起来了,它可能不会说确切的日期,而是根据你的时区进行调整。但总的原则是一样的。