我想计算用户按下开始和停止时的时间差异。 这是我到目前为止所得到的:
完成非工作线程:
runTime = System.currentTimeMillis();
完成主线程:
DateFormat formatter = new SimpleDateFormat("hh:mm:ss.SSS");
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis() - runTime);
timeTextView.setText("Time: " + formatter.format(calendar.getTime()));
结果总是" 01:00:00.000"。 为什么我要加1小时呢? 并且我按下开始和停止按钮的速度要快一小时。
答案 0 :(得分:0)
一个简单的解决方法(解决?)这个问题:
long startTime = System.currentTimeMillis();
//* do something
long endTime = System.currentTimeMillis();
long elapsedTimeInMilliSecs=(endTime - startTime);
Calendar ...
我使用类似的东西,它工作正常。
答案 1 :(得分:0)
你得到的结果是java中epoch以来的时间,所以如果你试图打印
timeTextView.setText("Time: " + calendar.getTime().toString());
您更有可能获得Wed Dec 31 19:00:00 EST 1969
的结果取决于您目前所在的TimeZone
。从上面的代码我得到07:00:00:000
,因为我在EST TimeZone。你不能真正做到这一点,但它消除了hh
所以它只会显示分钟,秒和毫秒。
答案 2 :(得分:0)
如果您只想在HH:MM:SS中消耗经过的时间,请尝试此操作,即使您的时间超过24小时也能正常工作。
timeTextView.setText("Time: " + convertMillis(System.currentTimeMillis() - runTime));
...
public static String convertMillis(long milliseconds){
long time = milliseconds / 1000;
String seconds = Integer.toString((int)(time % 60));
String minutes = Integer.toString((int)((time % 3600) / 60));
String hours = Integer.toString((int)(time / 3600));
for (int i = 0; i < 2; i++) {
if (seconds.length() < 2) {
seconds = "0" + seconds;
}
if (minutes.length() < 2) {
minutes = "0" + minutes;
}
if (hours.length() < 2) {
hours = "0" + hours;
}
}
return(hours + ":" + minutes + ":" + seconds);
}