多种方式计算当天与另一天的间隔天数 Java实现

        这里不会记录纯原生写法,因为现在基本都是被工具类封装好的,所以会记录好用的工具类来简化开发,当然自己可以研究写一个年月日各自做减法的纯原生工具类。

踩坑处(System.currentTimeMillis)

        这里指的是使用System.currentTimeMillis()方法。此方法是返回当前系统/计算机时间。所以并不是从当天的0时0分0秒开始计时的,个人认为是从当天的晚上最后一刻计数,这里可以去看一下C语言的源码,至于我为什么会这么说,下面会用代码来验证。这里会看得出来输出的天数为0,将"2023-10-27"改为"2023-10-26"后,控制台也是输出0,这里就不做演示了。

public void test() throws ParseException {
    // 由于我写这篇博文是26号 所以这里创建27号的时间
    String time = "2023-10-27";
    // 时间格式化
    Date date = new SimpleDateFormat("yyyy-MM-dd").parse(time);
    // 差距天数: 0
    System.out.println("差距天数: " + (System.currentTimeMillis() - date.getTime()) / (1000 * 60 * 60 * 24));
}

踩坑二

        这里也不能直接使用new Date()创建对象是因为其底层直接调用System.currentTimeMillis()方法,所以其实和上面的代码是一个意思,只不过经由Date类进行了一层包装。

public void test() throws ParseException {
    String time = "2023-10-27";
    Date date = new SimpleDateFormat("yyyy-MM-dd").parse(time);
    // 差距天数: 0
    System.out.println("差距天数: " + (new Date().getTime() - date.getTime()) / (1000 * 60 * 60 * 24));
}

踩坑三

public void test() throws ParseException {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    Date date = simpleDateFormat.parse("2023-10-27");
    // 差距天数: 0
    System.out.println("差距天数: " + DateUtil.between(new Date(), date, DateUnit.DAY));
}

         对于以上踩坑的原因是因为Date对象会取到时分秒,为了准确的验证时间的差距,必须是0时0分0秒,所以直接采用Date对象来比较必然是不行的。

解决方案一

        将当前时间格式化为字符串再解析为日期(Date -> String -> Date)

public void test() throws ParseException {
    // 获取当前时间
    Date now = new Date();
    // 定义日期格式
    SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd");
    // 将日期格式化为字符串
    String format = dateFormatter.format(now);
    // 差距天数: -1
    System.out.println("差距天数: " + (dateFormatter.parse(format).getTime() - dateFormatter.parse("2023-10-27").getTime()) / (24 * 60 * 60 * 1000));
}

解决方案二(ChronoUnit)

public void test() {
    LocalDate localDate01 = LocalDate.of(2023, 10, 26);
    LocalDate localDate02 = LocalDate.of(2023, 10, 27);
    // 第一个参数距离第二参数相距的天数
    // 差距天数: 1
    System.out.println("差距天数: " + ChronoUnit.DAYS.between(localDate01, localDate02));
    LocalDateTime localDateTime01 = LocalDateTime.of(2023, 10, 26, 0, 0);
    LocalDateTime localDateTime02 = LocalDateTime.of(2023, 10, 27, 0, 0);
    // 差距天数: 1
    System.out.println("差距天数: " + ChronoUnit.DAYS.between(localDateTime01, localDateTime02));
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值