Java 比较日期和时间而不更改其格式,并在其中找到最接近的值

Java 比较日期和时间而不更改其格式,并在其中找到最接近的值,java,android,android-date,Java,Android,Android Date,我有一份日期清单: 23/08/2014 8:23:23 24/08/2014 5:23:23 24/08/2014 6:23:23 24/08/2014 7:23:23 24/08/2014 7:25:23 24/08/2014 8:23:23 我想将所有日期与当前日期时间进行比较,并找到最近的日期时间。有没有简单的方法来比较它们,而不是循环和比较 我试过下面的例子 日期1.之后(日期2) 日期1.与(日期2)相比>0 但我没能完成这个结果 我必须比较整个日期和时间,而不仅仅是日期或时间 通

我有一份日期清单:

23/08/2014 8:23:23
24/08/2014 5:23:23
24/08/2014 6:23:23
24/08/2014 7:23:23
24/08/2014 7:25:23
24/08/2014 8:23:23
我想将所有日期与当前日期时间进行比较,并找到最近的日期时间。有没有简单的方法来比较它们,而不是循环和比较

我试过下面的例子

日期1.之后(日期2)

日期1.与(日期2)相比>0

但我没能完成这个结果

我必须比较整个日期和时间,而不仅仅是日期或时间

通过使用下面的格式,我必须进行比较

日期currentTimeDate=新日期(System.currentTimeMillis())

  • 以排序方式列出日期对象
  • 然后为当前日期时间创建一个日期对象

  • 现在使用二进制搜索的逻辑来查找时间中最近的日期 你的名单

  • 使用Joda时间进行比较


请将以上几点视为提示。

试试这个片段,它可能会对您有所帮助

public static Date closerDate(Date originalDate, Collection<Date> unsortedDates) {
    List<Date> dateList = new LinkedList<Date>(unsortedDates);
    Collections.sort(dateList);
    Iterator<Date> iterator = dateList.iterator();
    Date previousDate = null;
    while (iterator.hasNext()) {
        Date nextDate = iterator.next();
        if (nextDate.before(originalDate)) {
            previousDate = nextDate;
            continue;
        } else if (nextDate.after(originalDate)) {
            if (previousDate == null || isCloserToNextDate(originalDate, previousDate, nextDate)) {
                return nextDate;
            }
        } else {
            return nextDate;
        }
    }
    return previousDate;
}

private static boolean isCloserToNextDate(Date originalDate, Date previousDate, Date nextDate) {
    if(previousDate.after(nextDate))
        throw new IllegalArgumentException("previousDate > nextDate");
    return ((nextDate.getTime() - previousDate.getTime()) / 2 + previousDate.getTime() <= originalDate.getTime());
}
公共静态日期关闭日期(日期原始日期、集合未排序日期){
列表日期列表=新链接列表(未排序的数据);
集合。排序(日期列表);
迭代器迭代器=dateList.Iterator();
Date-previousDate=null;
while(iterator.hasNext()){
Date nextDate=迭代器.next();
if(下一个日期之前(原始日期)){
上一个日期=下一个日期;
继续;
}else if(下一个日期之后(原始日期)){
if(previousDate==null | | isCloserToNextDate(originalDate,previousDate,nextDate)){
下一天返回;
}
}否则{
下一天返回;
}
}
返回以前的日期;
}
私有静态布尔值isCloserToNextDate(Date originalDate、Date previousDate、Date nextDate){
如果(上一个日期后(下一个日期))
抛出新的IllegalArgumentException(“previousDate>nextDate”);

return((nextDate.getTime()-previousDate.getTime())/2+previousDate.getTime()您为此编写了代码吗?我无法再回复,所以我在这里写:Calendar cal=Calendar.getInstance();long ActualDates=cal.getTimeMillis();long distance=Math.abs(ActualDates-ListOfDate[0].getTime();//getTime()或者,无论哪种方法从日期起给您毫秒,int index=0;for(int i=1;i索引
值是列表中最近日期的索引