当前位置: 首页 > news >正文

多种方式计算当天与另一天的间隔天数 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);// 差距天数: 0System.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);// 差距天数: 0System.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");// 差距天数: 0System.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);// 差距天数: -1System.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);// 第一个参数距离第二参数相距的天数// 差距天数: 1System.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);// 差距天数: 1System.out.println("差距天数: " + ChronoUnit.DAYS.between(localDateTime01, localDateTime02));
}
http://www.lryc.cn/news/207384.html

相关文章:

  • Python基础学习004——for循环与字符串
  • 【发展史】鼠标的发展史
  • ThinkPHP6 多应用模式之验证码模块的配置与验证
  • 数据结构笔记——树和图(王道408)(持续更新)
  • Redis 主从
  • 嵌入式学习笔记(63)位操作实战
  • 8位机adc采样正弦波频率
  • react中使用监听
  • Java基础总结
  • 基于SSM的OA办公系统
  • 【第25例】IPD体系进阶:需求分析团队RAT
  • 5G与无人驾驶:引领未来交通的新潮流
  • FreeRTOS学习2018.6.27
  • 【异常】理解Java中的异常处理机制
  • 很久没写JAVA程序了,原来用GMAIL发送邮件这么简单
  • Spring Security获得认证流程解析(示意图)
  • scrapy typeerror: attrs() got an unexpected keyword argument ‘eq‘
  • 非侵入式负荷检测与分解:电力数据挖掘新视角
  • 抽丝剥茧,Redis使用事件总线EventBus或AOP优化健康检测
  • 【Tailwind CSS】当页面内容过少,怎样让footer保持在屏幕底部?
  • Docker基础管理
  • 基于YOLOv8模型的烟雾目标检测系统(PyTorch+Pyside6+YOLOv8模型)
  • 【代码随想录01】数组总结
  • (SpringBoot)第二章:Spring创建和使用
  • 力扣刷题 day56:10-26
  • 『第四章』一见倾心:初识小雨燕(上)
  • elasticsearch-7.9.3 单节点启动配置
  • 【2024秋招】2023-10-9 同花顺后端笔试题
  • 完美的错误处理:Go 语言最佳实践分享
  • vue首页多模块布局(标题布局)