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);

仅做参考;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山鬼谣me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值