1. 程式人生 > >java中計算兩個日期之間相差多少天

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)毫秒,得到日期差。