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);
}
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);
}
}
# 1 楼答案
您正在将时差格式化为yy:mm:dd:HH:mm:ss。只需打印diffTime就可以得到毫秒,如果需要秒,可以除以1000
编辑:我想我知道你想做什么,但你处理的是一个时间间隔,不能格式化为日期。您需要使用自己的格式来显示时间,如秒、分钟、小时等,或者使用外部库
# 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是分钟