joh*_*ohn 0 java timestamp milliseconds nanotime
下面是我的简单计时器类,它在最简单的情况下工作正常.我使用下面的计时器类来测量某些代码执行时所花费的时间.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
以下是我使用上述计时器类的方法.我得到时间戳,以毫秒为单位执行一段代码,然后将其转换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");
}
Run Code Online (Sandbox Code Playgroud)
问题陈述:-
我现在面临的问题是timeTaken戳不被转换为hours,minutes和seconds正常.意思是,如果代码总共运行2分钟,那么我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));
Run Code Online (Sandbox Code Playgroud)
24除非你进一步计划列出它所花费的天数,否则花费小时数并除以剩余时间是没有意义的.
如果您需要几个小时的单位,那么取出% 24:
int hours = (int) (timeTaken / (1000 * 60 * 60));
Run Code Online (Sandbox Code Playgroud)
然后你会看到正确的输出
Total Time Taken: 47 hours 57 minutes 35 seconds
Run Code Online (Sandbox Code Playgroud)
否则,您可能需要添加天数计算.
int days = ((timeTaken / (1000 * 60 * 60 * 24));
Run Code Online (Sandbox Code Playgroud)
然后你可以将它添加到输出,然后显示为
Total Time Taken: 1 day 23 hours 57 minutes 35 seconds
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |