Java 获得平均毫秒数并转换为时间时发生的奇怪情况
当我试图从一个长值中获得一个平均值并将其转换为字符串(HH:mm:ss)格式时,我有一些奇怪的输出。我正在使用乔达时间图书馆,它主要是一个救命稻草 以下是我目前掌握的情况: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());
//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标签