当我试图从长值获得平均值并将其转换为String(以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的字符串。不太清楚为什么?
我使用了来自How to convert milliseconds to "hh:mm:ss" format?
的convertMillisToTime有人能指出我正确的方向吗?
提前谢谢你,
编辑:我已经使用TimeUnit修改了将长时间转换为时间的代码。虽然很奇怪,但我抓住了三次跑(时间流),每次跑步时间为09:14:17,08:57:18,09:10:25,平均值为: 10时27分26秒。
答案 0 :(得分:0)
您可以使用Joda Time的格式化程序,例如......
public static final PeriodFormatter PERIOD_FORMATTER = new PeriodFormatterBuilder().printZeroAlways().
appendHours().appendSeparator(":").
appendMinutes().appendSeparator(":").
appendSeconds().appendSeparator(".").
appendMillis().toFormatter();
public static String toString(Duration duration) {
return duration == null ? "[invalid duration]" : duration.toPeriod().toString(PERIOD_FORMATTER);
}