我有一个java.util.Date对象数组。我在努力找出平均水平。
例如,如果我有两个日期对象,分别是上午7:40和7:50。我应该得到一个7:45的平均约会对象
我正在考虑的方法效率低下:
有什么更简单的功能吗?
发布于 2013-08-12 17:38:44
从根本上说,您可以将所有Date对象的“Unix时代以来的millis”加起来,并找到这些对象的平均值。现在的棘手之处在于避免溢出。备选方案有:
BigInteger代替方法1的一个例子:
long totalSeconds = 0L;
for (Date date : dates) {
totalSeconds += date.getTime() / 1000L;
}
long averageSeconds = totalSeconds / dates.size();
Date averageDate = new Date(averageSeconds * 1000L);方法3的一个例子:
BigInteger total = BigInteger.ZERO;
for (Date date : dates) {
total = total.add(BigInteger.valueOf(date.getTime()));
}
BigInteger averageMillis = total.divide(BigInteger.valueOf(dates.size()));
Date averageDate = new Date(averageMillis.longValue());发布于 2013-08-12 17:45:04
如果有很多日期,将所有日期之和加在一起肯定会导致溢出。如果您想防止这样做,应该这样做(在伪代码中):
var first = dates.getFirst
var sumOfDifferences = 0
loop over all dates
for each date sumOfDifferences += date - first
var averageDate = first + sumOfDifferences/countOfDates这将不会使您运行在溢出。
发布于 2013-08-12 17:39:30
这里已经有了一个答案:Sum two dates in Java
您只需使用getTime()对所有日期对象进行汇总,然后将其除以对象数,然后将其转换回Date对象。好了。
https://stackoverflow.com/questions/18193177
复制相似问题