我如何找到指定日期的最近日期? (JAVA)

时间:2011-08-20 00:23:38

标签: java date methods closest

我希望知道如何输入一个方法来给我一个指定日期的最接近日期。我的意思是以下内容:

public Date getNearestDate(List<Date> dates, Date currentDate) {
    return closestDate  // The date that is the closest to the currentDate;
}

我发现了类似的问题,但只有一个有一个很好的答案,代码一直给我NullPointerExceptions ... 任何人都可以帮助我吗?

4 个答案:

答案 0 :(得分:14)

您可以通过计算时间差异(例如Date#getTime())并返回最小值来解决线性时间问题:

public static Date getNearestDate(List<Date> dates, Date currentDate) {
  long minDiff = -1, currentTime = currentDate.getTime();
  Date minDate = null;
  for (Date date : dates) {
    long diff = Math.abs(currentTime - date.getTime());
    if ((minDiff == -1) || (diff < minDiff)) {
      minDiff = diff;
      minDate = date;
    }
  }
  return minDate;
}

<强> [编辑]

轻微的性能改进。

答案 1 :(得分:3)

使用Date#getTime并减去值。最小的结果将是您最近的日期。

答案 2 :(得分:2)

按日期顺序排列列表并执行二分法搜索。请记住,要比较日期,您可以使用Date.getTime()将日期作为毫秒,这通常更容易比较。

答案 3 :(得分:0)

您可以按最近的顺序订购日期。

将开始日期设置为0:

long ret = 0;

现在您需要循环浏览列表并保持最接近所需日期

for(Date d : dates){
    if(Math.abs(curDate.getTime() - ret) > Math.abs(curDate.getTime() - d.getTime())){
        ret = d.getTime();
    }
}
return new Date(ret);

if语句通过比较毫秒时间来检查哪个日期更近。通过使用Math.abs,您可以消除方向(在之前或之后)。