回答
遍歷所有日期如下:
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. 在日期列表中查找最接近的給定日期
- 3. 從多個表中找到最近的日期mysql
- 4. 如何從日期時間列表中查找最近日期時間?
- 5. 查找最近的日期
- 6. 如何使用VBA查找日期列中的最近日期
- 7. 找到最近的星期日?
- 8. 如何找到最近的日期?
- 9. 查找最近日期
- 10. jquery返回表列最近的日期
- 11. 在日期列表中找出最接近的日期django queryset python
- 12. 如何在表格中找到最近的第12個日期?
- 13. 從數據庫日期找到最接近的日期時遇到的麻煩
- 14. 從最近的日期檢索列表中的數據java
- 15. 從日期列表中查找本月最舊日期
- 16. C# - 如何從列表中找到最頻繁的日期
- 17. 從日期時間列表中找到最新的目錄
- 18. 從列表中挑選最近的3個日期
- 19. JavaScript數組找到最近的日期與當前日期+ dayscounter
- 20. 在最接近指定日期的列表上查找以前的日期
- 21. SQL Server 2012:找到最近的日期,多列和行
- 22. SQL SELECT組一列,並顯示最近的日期未找到
- 23. 在SQL Server中查找最近日期
- 24. 從MySQL表獲取最近日期
- 25. 查找所有得分從第二次到最近的日期
- 26. 排序最接近當前日期的日期列表
- 27. 在sql中連續查找特定日期的最近日期
- 28. 複雜的正則表達式 - 查找列表中的最近日期
- 29. 如何查找給定日期名稱的最近/最近日期
- 30. PHP中的最近日期
你能更具體嗎?這聽起來像你有一個日期列表,你想找到離現在最近的那個?一個簡短的代碼示例將是有幫助的 – 2010-10-07 18:26:45
-1請給出更多詳細信息 – 2010-10-07 19:15:24