接上一篇文章,补充一个方法,借鉴冒泡算法的方式,查找一个时间集合中距离某个时间点最近的时间:
?
工具类代码,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。
?