【发布时间】:2014-03-19 20:11:45
【问题描述】:
当我尝试从 long 值中获取平均值并将其转换为字符串(HH:mm:ss)格式时,我得到了一些奇怪的输出。我正在使用 Joda 时间库,它主要是救生员。
这是我目前所拥有的:
//this is in a static class
public static Duration calculateTime(Date start, Date end) {
Duration duration = new Duration(start.getTime(), end.getTime());
return duration;
}
public static String convertMillisToTime(long milliseconds) {
return String.format("%02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(milliseconds),
TimeUnit.MILLISECONDS.toMinutes(milliseconds) -
TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(milliseconds)),
TimeUnit.MILLISECONDS.toSeconds(milliseconds) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliseconds)));
}
long averageRunTime = 0;
averageRunTime += calculateTime(drs.startTime, drs.endTime).getMillis();
由于这是在数组列表中完成的,为了得到平均值,我正在取
averageRunTime = averageRunTime / (long)arrayList.size();
当我明白了
convertMillisToTime(averageRunTime);
它返回的值比我任何时候都高。 IE(我没有超过 11 小时的工作时间)但这给我返回了一个 11:mm:ss 的字符串。不太清楚为什么?
我使用的 convertMillisToTime 来自:How to convert milliseconds to "hh:mm:ss" format?
谁能指出我正确的方向?
提前谢谢你,
- RR
编辑:我修改了使用 TimeUnit 将 long 转换为 time 的代码。奇怪的是,我抓了三个跑步(时间流),每次跑步的长度分别为 09:14:17、08:57:18、09:10:25,平均值为:10:27: 26.
【问题讨论】:
-
对于时间的每一部分,您需要从您拥有的时间量中删除它,例如,一旦您计算了小时数,您需要从您的时间值中删除该时间量有。您还应该从最大组件到最小组件(小时到秒)进行计算
-
您使用的是哪个
Duration类?算了,刚看到jodatime标签
标签: java time converter jodatime milliseconds