java中計算兩個日期之間相差多少天
阿新 • • 發佈:2019-01-22
近期在自己寫的一個專案中,發現了一個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)毫秒,得到日期差。