我想以 hh:mm:ss 格式计算三个时间的平均值。我尝试了以下代码。
public String calculateAverageOfTime()
{
String timeInHHmmss = "08:00:00 08:00:00 08:00:00";
String[] split = timeInHHmmss.split(" ");
long hh = 0,mm = 0,ss = 0;
for (int i = 0; i < split.length; i++)
{
String[] split1 = split[i].split(":");
hh += Long.valueOf(split1[0].trim());
mm += Long.valueOf(split1[1].trim());
ss += Long.valueOf(split1[2].trim());
}
hh = hh / split.length ;
mm = mm / split.length ;
ss = ss / split.length ;
String hms = String.format("%02d:%02d:%02d", hh,mm,ss);
return hms;
}
这段代码运行良好。有什么有效的方法可以做到这一点吗? 。 Java API 中可用的任何方法。
您当前的代码不正确,请尝试输入08:00:00 08:00:00 09:30:00
。正如@StephenC 所说,你不能通过平均小时、分钟、秒组成部分来平均时间。时间就像以 60 为基数的数字,你知道,60 秒 + 1 = 1:00,而不是 61。
这是正确的,计算秒数总和,然后取平均值并转换回时间:
public static String calculateAverageOfTime(String timeInHHmmss) {
String[] split = timeInHHmmss.split(" ");
long seconds = 0;
for (String timestr : split) {
String[] hhmmss = timestr.split(":");
seconds += Integer.valueOf(hhmmss[0]) * 60 * 60;
seconds += Integer.valueOf(hhmmss[1]) * 60;
seconds += Integer.valueOf(hhmmss[2]);
}
seconds /= split.length;
long hh = seconds / 60 / 60;
long mm = (seconds / 60) % 60;
long ss = seconds % 60;
return String.format("%02d:%02d:%02d", hh,mm,ss);
}
Using Date
, SimpleDateFormat
or Joda
会使代码更容易理解,但我认为它不会比这更有效,因为此代码严格执行您想要执行的操作,即对以 60 为基数的数字求平均值。
正如其他人指出的那样,请注意平均时的精度损失。
您可能还想验证输入字符串的格式是否正确,否则算法将失败。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)