回答
遍历所有日期如下:
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
请给我一些例子 – 2010-10-07 18:32:50
我想,根据从当前时间距离“订单”日期,使用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);
}
});
很好的答案... – 2010-10-07 18:36:52
@aioobe:为什么我们不能只比较getTime(不是Math.abs(d1.getTime() - 现在))? – 2010-10-07 18:42:50
@Stas:因为它会以其他顺序排列“自然”的日期。我们想按照'now'的顺序排列。尽管智能解决方案即使OP是一个混蛋,这也值得+1。 – BalusC 2010-10-07 18:44:16
你可以试试这个代码:
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());
}
如果列表进行排序,那么你可以使用Collections.binarySearch()
以找到指定的日期将被分类到列表中的位置 - 最接近的一种,是无论是在该指数之前还是之后。
对于非常大的列表,这比其他解决方案快得多,但它当然需要对列表进行排序。如果你打算多次执行这样的查询,那么首先对列表进行排序是值得的(性能方面)。
如果你可以使用一个Set
代替List
,就把日期在NavigableSet
如TreeSet
和使用方法lower
和higher
。
NavigableSet<Date> dates = new TreeSet<Date>();
// add some dates to dates
Date now = new Date();
Date highestDateUpUntilNow = dates.lower(now);
- 1. 在日期列表中查找最接近的给定日期
- 2. 从多个表中找到最近的日期mysql
- 3. 查找最近的日期
- 4. 如何找到最近的日期?
- 5. 在日期列表中找出最接近的日期django queryset python
- 6. jquery返回表列最近的日期
- 7. 如何在表格中找到最近的第12个日期?
- 8. 从数据库日期找到最接近的日期时遇到的麻烦
- 9. 从日期列表中查找本月最旧日期
- 10. C# - 如何从列表中找到最频繁的日期
- 11. 从日期时间列表中找到最新的目录
- 12. 从列表中挑选最近的3个日期
- 13. JavaScript数组找到最近的日期与当前日期+ dayscounter
- 14. SQL Server 2012:找到最近的日期,多列和行
- 15. SQL SELECT组一列,并显示最近的日期未找到
- 16. 查找所有得分从第二次到最近的日期
- 17. PHP中的最近日期
- 18. 查找距今天最近的日期
- 19. 如何找到最近的一个星期的任意日期?
- 20. 比较2名日期时间列表,并找到最接近的匹配
- 21. 找到最接近的日期(但不是同一日期)中的R
- 22. 使用HIVE查找表格中的最近日期
- 23. 从列表中找到最接近的号码组
- 24. SQL最近日期
- 25. 列出具有最近日期的行
- 26. 从DateTime的列表中查找最高日期时间
- 27. SQL - 查找与当前日期最近的日期
- 28. 最近的日期和价格从SQL Server中的多个表
- 29. 使用最近的日期在两个表格中找到不同的值
- 30. 最近日期的Lambda表达式
你能更具体吗?这听起来像你有一个日期列表,你想找到离现在最近的那个?一个简短的代码示例将是有帮助的 – 2010-10-07 18:26:45
-1请给出更多详细信息 – 2010-10-07 19:15:24