Java 获得平均毫秒数并转换为时间时发生的奇怪情况

Java 获得平均毫秒数并转换为时间时发生的奇怪情况,java,time,converter,jodatime,milliseconds,Java,Time,Converter,Jodatime,Milliseconds,当我试图从一个长值中获得一个平均值并将其转换为字符串(HH:mm:ss)格式时,我有一些奇怪的输出。我正在使用乔达时间图书馆,它主要是一个救命稻草 以下是我目前掌握的情况: //this is in a static class public static Duration calculateTime(Date start, Date end) { Duration duration = new Duration(start.getTime(), end.getTime());

当我试图从一个长值中获得一个平均值并将其转换为字符串(HH:mm:ss)格式时,我有一些奇怪的输出。我正在使用乔达时间图书馆,它主要是一个救命稻草

以下是我目前掌握的情况:

//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的字符串。不太清楚为什么

我使用ConvertMillisto的时间来自:

谁能给我指出正确的方向吗

提前谢谢大家,

  • RR

编辑:我修改了使用时间单位将长时间转换为时间的代码。但奇怪的是,我跑了三次(时间流),每次跑的长度分别是09:14:17、08:57:18、09:10:25,平均值是:10:27:26

您可以使用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);
}

对于时间的每一部分,您都需要将其从您拥有的时间量中删除,例如,一旦您计算了小时数,您就需要将该时间量从您拥有的时间值中删除。您还应该从最大组件到最小组件(小时到秒)计算您使用的
Duration
类?算了吧,刚看到jodatime标签