获得平均毫秒并转换为时间时发生的奇怪事件

时间:2014-03-19 20:11:45

标签: java time converter jodatime milliseconds

当我试图从长值获得平均值并将其转换为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

有人能指出我正确的方向吗?

提前谢谢你,

  • RR

编辑:我已经使用TimeUnit修改了将长时间转换为时间的代码。虽然很奇怪,但我抓住了三次跑(时间流),每次跑步时间为09:14:17,08:57:18,09:10:25,平均值为: 10时27分26秒。

1 个答案:

答案 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);
}