gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:41:00 24 4
gpt4 key购买 nike

我有一组 java.util.Date 对象。我试图找到平均值。

例如,如果我有 2 个日期对象,分别是早上 7:40 和早上 7:50。我应该得到一个平均时间为早上 7:45 的日期对象。

我想到的方法效率很低:

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

有没有更简单的函数可以做到这一点?

最佳答案

从根本上说,您可以将所有 Date 对象的“自 Unix 纪元以来的毫秒数”相加,然后求出它们的平均值。现在棘手的一点是避免溢出。选项是:

  1. 除以某个已知数量(例如 1000)以避免溢出;这会降低已知数量的准确性(在本例中为秒),但如果您有超过 1000 个项目,则会失败
  2. 将每个毫秒值除以计算平均值的日期数;这将始终有效,但难以理解的准确性降低
  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);

方法 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());

关于java - 获取两个 java.util.Date 的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18193177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com