java中计算两个日期之间相差多少天

近期在自己写的一个项目中,发现了一个Bug.日期A的时间为2017-12-7,日期B的时间为2018-1-7。计算两者之间相距多少天,居然是惊人的8900天。

错误的程序如下:

import java.util.Date

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Date date1 = new Date(1512619200000l);//1512619200000l是2017/12/07 12:00:00 的UTC时间表示
Date date2 = new Date(1515384000000l);//1515384000000l是2018/1/8 12:00:00 的UTC时间表示
long startDay = Long.parseLong(sdf.format(date1));
long endDay = Long.parseLong(sdf.format(date2));
System.out.println(startDay);
System.out.println(endDay);
System.out.println(endDay-startDay);

-----运行结果如下-----
20171207
20180108
8901

不知道这么2b的程序是怎么写出来的!!
sdf.format(date1)调用SimpleDateFormat 的父类DateFormat的format(Date date)方法,将日期格式成指定的形式并返回String.
Long.parseLong()将String转化为有符号十进制,返回long
显然,两个日期用十进制的形式相减是不合适的。

最终实现如下:参考了某个网友的代码。


public getInterval(Date begin_date, Date end_date) throws Exception{
    long day = 0;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    if(begin_date != null){
        String begin = sdf.format(begin_date);
        begin_date  = sdf.parse(begin);
    }
    if(end_date!= null){
        String end= sdf.format(end_date);
        end_date= sdf.parse(end);
    }
    day = (end_date.getTime()-begin_date.getTime())/(24*60*60*1000);
    return day;
}

先将Date格式化为只有年、月、日的形式,返回String。然后将此String再转化为Date(此时时、分、秒就成为了00:00:00)
调用getTime()方法返回Date的1970的毫秒表示。将两个日期的毫秒相减,然后除以一天有(24*60*60*1000)毫秒,得到日期差。

你可能感兴趣的:(java)