【发布时间】: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);
}
更新: 我用自己的格式化时间方法重写了代码。现在我得到了我想要的。谢谢大家。
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/… -
实际上,现在我想起来了,它可能不会说确切的日期,而是根据您的时区进行调整。不过,一般原则相同。