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

来源:互联网 发布:中科院下属企业知乎 编辑:程序博客网 时间:2024/06/07 20:32

环境

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

如有错误,欢迎指出.