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

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值