Java时间操作补充:从时间集合中寻找距离某个时间最近的时间元素_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java时间操作补充:从时间集合中寻找距离某个时间最近的时间元素

Java时间操作补充:从时间集合中寻找距离某个时间最近的时间元素

 2010/12/11 11:32:02  crazysheep  http://crazysheep.javaeye.com  我要评论(0)
  • 摘要:接上一篇文章,补充一个方法,借鉴冒泡算法的方式,查找一个时间集合中距离某个时间点最近的时间:工具类代码,DateUtilExtra.java:packagewww.sellyell.com;importjava.util.Date;importjava.util.List;/***@authorFrank*@version1.0*@bloghttp://crazysheep.javaeye.com/*@sitehttp://www.sellyell.com/*@create2010-12
  • 标签:Java 操作

接上一篇文章,补充一个方法,借鉴冒泡算法的方式,查找一个时间集合中距离某个时间点最近的时间:

?

工具类代码,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。

?

发表评论
用户名: 匿名