在给定日期的几个日期中查找最近的日期

sal*_*aza 8 java

我有一个日期列表和当前日期.如何找到最接近当前日期的日期?

aio*_*obe 22

我将使用Collection.min一个自定义比较器,根据与当前时间的距离"命令"日期.

final long now = System.currentTimeMillis();

// Create a sample list of dates
List<Date> dates = new ArrayList<Date>();
Random r = new Random();
for (int i = 0; i < 10; i++)
    dates.add(new Date(now + r.nextInt(10000)-5000));

// Get date closest to "now"
Date closest = Collections.min(dates, new Comparator<Date>() {
    public int compare(Date d1, Date d2) {
        long diff1 = Math.abs(d1.getTime() - now);
        long diff2 = Math.abs(d2.getTime() - now);
        return Long.compare(diff1, diff2);
    }
});
Run Code Online (Sandbox Code Playgroud)


Mic*_*rdt 6

如果列表已排序,那么您可以使用Collections.binarySearch()来查找给定日期将在列表中排序的位置 - 最接近的位置在该索引之后或之前。

对于非常大的列表,这比其他解决方案快得多,但当然它确实需要对列表进行排序。如果您要多次执行这样的查询,那么首先对列表进行排序是值得的(性能方面)。


Ste*_*Kuo 6

如果您可以使用 aSet代替 a List,请将日期放入 a NavigableSetsuch中TreeSet并使用方法lowerhigher

NavigableSet<Date> dates = new TreeSet<Date>();
// add some dates to dates
Date now = new Date();
Date highestDateUpUntilNow = dates.lower(now);
Run Code Online (Sandbox Code Playgroud)


MSt*_*odd 3

使用以下内容循环遍历所有日期:
1. 使用一个变量来跟踪当前最接近的日期
2. 使用一个变量来表示当前最接近的日期与当前日期之间的差异

当您发现日期的差异小于您在 (2) 中跟踪的日期时,请更新差异和当前最接近的日期

最后,当前最接近的日期是集合中最接近的日期

这是Python中的代码:

dates = [date(2010,1,2), date(2010,5,6), date(2010,3,4), date(2011, 1, 2), date(2010,10,20), date(2009,2,3)]
current_date = dates[0]
current_min = abs(current_date - date.today())
for d in dates:
    if abs(d - date.today()) < current_min:
        current_min = abs(d - date.today())
        current_date = d
Run Code Online (Sandbox Code Playgroud)