您的位置:首页 > 编程语言 > Java开发

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

2017-12-08 16:21 549 查看
近期在自己写的一个项目中,发现了一个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