Java时间操作补充:从时间集合中寻找距离某个时间最近的时间元素
接上一篇文章,补充一个方法,借鉴冒泡算法的方式,查找一个时间集合中距离某个时间点最近的时间:
?
工具类代码,DateUtilExtra.java:
package www.sellyell.com;import java.util.Date;import java.util.List;/** * @author Frank * @version 1.0 * @blog http://crazysheep.iteye.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.iteye.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。
?