获取两个java.util.Date的平均值

raa*_*aaj 6 java date

我有一个java.util.Date对象的数组.我想找到平均值.

例如,如果我在上午7:40和上午7:50有2个日期对象.我应该得到一个平均日期对象上午7:45.

我想的方法效率低下:

  1. for循环所有日期
  2. 找出0000和时间之间的差异
  3. 将时间差异添加到总数中
  4. 除以总数
  5. 将该时间转换为日期对象

这样做有更简单的功能吗?

Jon*_*eet 20

从根本上说,你可以将所有Date对象的"自Unix时代以来的毫秒"加起来并找到它们的平均值.现在棘手的一点是避免溢出.选项包括:

  1. 除以一些已知量(例如1000)以避免溢出; 这会将准确度降低一个已知量(在本例中为第二个),但如果您有超过1000个项目则会失败
  2. 将每个millis值除以您平均的日期数; 这将始终有效,但难以理解准确性降低
  3. BigInteger改用

方法1的一个例子:

long totalSeconds = 0L;
for (Date date : dates) {
     totalSeconds += date.getTime() / 1000L;
}
long averageSeconds = totalSeconds / dates.size();
Date averageDate = new Date(averageSeconds * 1000L);
Run Code Online (Sandbox Code Playgroud)

方法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());
Run Code Online (Sandbox Code Playgroud)