Java 如何正确计算运行时间
我想计算我的程序从开始到结束的总运行时间,并在JFrame中刷新运行时间,但当我运行我的程序时,我得到了超过70年1天2小时的时间。为什么?怎么了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
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)会发生什么代码>-它会说是那个确切的日期。事实上,现在我想起来了,它可能不会说确切的日期,而是根据你的时区进行调整。但总的原则是一样的。