java7 计算日期相隔天数的最优方法

环境

jdk : 1.7


因为java8中官网已经有封装好的方法,所以我这个方法适用于java8之前的版本.
比如:java7

需求

计算相隔天数的情况有两种:
①不考虑时分秒.
②考虑时分秒的.

举例:

date1="2017-06-18 21:28:28", date2="2017-06-19 01:28:28".

对于第一种情况,不考虑时分秒的话,上面date1和date2相差的天数为1.
对于第二种情况,考虑时分秒的话,上面date1和date2相差的天数为0.

好了直接上代码:

/**
	 * 获取两个日期之间的天数
	 * @param date1
	 * @param date2
	 * @param isExactMillisecond 是否精确到毫秒 比如2017年6月1号 21:21:28,2017年6月2号 20:21:28,true:相差天数为0,false相差天数为1
	 * @author yutao
	 * @return date2大于date1的话,返回正数,否则返回负数.
	 * @date 2017年6月19日下午6:00:21
	 */
	public static int getDaysDifference(Date date1, Date date2, boolean isExactMillisecond){
		/*Date temp;//如果不区分date2和date1谁大谁小,可以解开注释
		if(date1.getTime() > date2.getTime()){
			temp = date2;
			date2=date1;
			date1=temp;
		}*/
		int days = 1;
		Calendar cal = Calendar.getInstance();
		cal.setTime(date1);
		int year1 = cal.get(Calendar.YEAR);
		int dayOfYear1 = cal.get(Calendar.DAY_OF_YEAR);
		
		cal.clear();
		
		cal.setTime(date2);
		int year2 = cal.get(Calendar.YEAR);
		int dayOfYear2 = cal.get(Calendar.DAY_OF_YEAR);
		long diffTime = date2.getTime() - date1.getTime();
		
		if(isExactMillisecond){//精准考虑
			return (int) (diffTime / (1000*3600*24));
		}
		//不考虑时间,只考虑日期
		if(year1==year2 && dayOfYear1 == dayOfYear2){//同一天
			days = 0;
		}else{
			days = (int) (diffTime / (1000*3600*24));
			if(diffTime >= (1000*3600*24)){//不同天,且大于一天
				if(diffTime % (1000*3600*24) > 0){
				//假设为1.5天,就算2天
					days++;
				}
			}
		}
		return days;
	}

如有错误,欢迎指出.

java8

 LocalDateTime now = LocalDateTime.now();
 LocalDateTime now1 = LocalDateTime.now();
 long until = now.until(now1, ChronoUnit.DAYS);
 System.out.println(until);

仅做参考;

你可能感兴趣的:(Java)