接上一篇文章,补充一个方法,借鉴冒泡算法的方式,查找一个时间集合中距离某个时间点最近的时间:
?
工具类代码,DateUtilExtra.java:
package www.sellyell.com; import java.util.Date; import java.util.List; /** * @author Frank * @version 1.0 * @blog http://crazysheep.javaeye.com/ * @site http://www.sellyell.com/ * @create 2010-12-9 下午12:27:18 */ public class DateUtilExtra { /** * 在days中寻找距离dae最近的时间 * @param days 时间比较集合 * @param date 比较时间点 * @return days中距离date最近的时间点 */ public static Date getRecentDate(List<Date> days, Date date) { Date recentDay = days.get(0); long distance = getDistance(recentDay.getTime(), date.getTime()); Date tempDate = null; long tempDis = 0l; for(int i=1;i<days.size();i++){ tempDate = days.get(i); tempDis = getDistance(tempDate.getTime(), date.getTime()); if(tempDis<distance){ distance = tempDis; recentDay = tempDate; } } return recentDay; } /** * 获取a和b之间的距离 * @param a * @param b * @return */ private static long getDistance(long a, long b) { if (a >= b) { return a - b; } return b - a; } }
?测试程序如下Main.java:
package www.sellyell.com; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author Frank * @version 1.0 * @blog http://crazysheep.javaeye.com/ * @site http://www.mingketang.com/ * @create 2010-12-9 下午12:27:18 */ public class Main { /** * 时间格式化工具 */ public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { //填充时间集合 List<Date> dates = new ArrayList<Date>(); dates.add(sdf.parse("2010-2-1")); dates.add(sdf.parse("2010-3-1")); dates.add(sdf.parse("2010-4-1")); dates.add(sdf.parse("2010-5-1")); dates.add(sdf.parse("2010-6-1")); dates.add(sdf.parse("2010-7-1")); dates.add(sdf.parse("2010-8-1")); dates.add(sdf.parse("2010-9-1")); dates.add(sdf.parse("2010-10-1")); //比较时间 Date date = sdf.parse("2010-5-25"); //获取距离比较时就按最近的时间 Date recentDate = DateUtilExtra.getRecentDate(dates, date); //输出 System.out.println(sdf.format(recentDate)); } } 输出结果:2010-06-01
测试通过!
这回勤快点,加了测试程序。
注意:若时间集合长度为1,应该是直接返回第一个元素,但调用这个工具方法应该会报错。大家若觉得有用,自己在用时可以修复这个Bug。
?