下面是我的简单计时器类,它在最简单的情况下运行良好。我正在使用下面的计时器类来测量某些代码在执行时需要多少时间。
public static class StopTimer {
public static StopTimer getInstance() {
return new StopTimer();
}
private long m_end = -1;
private long m_interval = -1;
private final long m_start;
private StopTimer() {
m_start = m_interval = currentTime();
}
public long getDuration() {
long result = 0;
final long startTime = m_start;
final long endTime = isTimerRunning() ? currentTime() : m_end;
result = nanoToMilliseconds(endTime - startTime);
return result;
}
private long currentTime() {
return System.nanoTime();
}
private long nanoToMilliseconds(final long nanoseconds) {
return nanoseconds / 1000000L;
}
}
下面是我如何使用上面的计时器类。我以毫秒为单位获得了执行某些代码然后将其转换timestamp
为hours
,minutes
和seconds
.
public static void main(String[] args) {
StopTimer timer = StopTimer.getInstance();
some_code_which_I_am_measuring();
long timeTaken = timer.getDuration();
int seconds = (int) (timeTaken / 1000) % 60;
int minutes = (int) ((timeTaken / (1000 * 60)) % 60);
int hours = (int) ((timeTaken / (1000 * 60 * 60)) % 24);
System.out.println("Total Time Taken: " + hours + " hours " + minutes + " minutes " + seconds + " seconds");
}
问题陈述:-
我面临的问题是timeTaken
timestamp 没有正确地转换为hours
, 。意思是,如果代码总共运行了 2 分钟,那么我的显示正确的结果。minutes
seconds
sys.out
但是假设如果这个方法some_code_which_I_am_measuring
运行了两天,那么我的sys.out
结果是错误的。举个例子,我开始了我的程序——Fri 5/23/2014 9:40 PM
它结束了,Sun 5/25/2014 9:38 PM
所以我sys.out
应该告诉我~48
执行代码需要几个小时。正确的?
但总的来说它会打印出来 -
Total Time Taken: 23 hours 57 minutes 35 seconds
这是错误的,因为您可以看到上面的日期需要 48 小时才能完成任务。
我上面的代码有什么问题吗?
更新:-
加上天数后,整体时间戳应该是这样的?
int seconds = (int) (timeTaken / 1000) % 60;
int minutes = (int) ((timeTaken / (1000 * 60)) % 60);
int hours = (int) ((timeTaken / (1000 * 60 * 60)) % 24);
int days = (int) (timeTaken / (1000 * 60 * 60 * 24));