近期在自己写的一个项目中,发现了一个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)毫秒,得到日期差。
版权声明:本文为wqwqwqwq403原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。