LocalDateTime计算两个时间之间的间隔

LocalDateTime计算两个时间之间的间隔

  • 嘚吧嘚
  • LocalDateTime
  • LocalDate
  • LocalTime

嘚吧嘚

自从认识了LocalDateTime之后,使用的频率越来越高了,使用多了就不可避免的涉及到日期的比较、加减以及计算日期间隔这些操作。
但是我发现自己好像不会😅,那就网上查资料,整呗💪。

LocalDateTime

要计算两个LocalDateTime对象之间的间隔,可以使用java.time.Duration类。可以很方便的获取两个时间之间的间隔。

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");LocalDateTime startTime = LocalDateTime.of(2024, 7, 26, 5, 22, 56);LocalDateTime endTime = LocalDateTime.of(2024, 7, 26, 20, 23, 15);Duration duration = Duration.between(startTime, endTime);System.out.println(startTime.format(formatter) + "\n" + endTime.format(formatter));System.out.println("间隔天数:" + duration.toDays());System.out.println("间隔小时: " + duration.toHours());System.out.println("间隔分钟: " + duration.toMinutes());System.out.println("间隔秒数: " + duration.toSeconds());

在这里插入图片描述
通过运行程序发现一个问题,就是获取的天数、小时数、分钟数都是取整的。
如果需要精确到小数,可以获取秒数自己计算😏。

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");LocalDateTime startTime = LocalDateTime.of(2024, 7, 26, 5, 22, 56);LocalDateTime endTime = LocalDateTime.of(2024, 7, 26, 20, 23, 15);Duration duration = Duration.between(startTime, endTime);System.out.println(startTime.format(formatter) + "\n" + endTime.format(formatter));System.out.println("间隔天数:" + duration.toDays());System.out.println("间隔小时: " + duration.toHours());System.out.println("间隔分钟: " + duration.toMinutes());System.out.println("间隔秒数: " + duration.toSeconds());// 自己计算BigDecimal divisor = BigDecimal.valueOf(60);BigDecimal minutes = BigDecimal.valueOf(duration.toSeconds()).divide(divisor, 2, RoundingMode.HALF_UP);BigDecimal hours = BigDecimal.valueOf(duration.toSeconds()).divide(divisor.multiply(divisor), 2, RoundingMode.HALF_UP);BigDecimal day = BigDecimal.valueOf(duration.toSeconds()).divide(divisor.multiply(divisor).multiply(BigDecimal.valueOf(24)), 2, RoundingMode.HALF_UP);System.out.println("间隔时间: " + duration.toSeconds() + "秒, " + minutes + "分钟, " + hours + "小时, " + day + "天");

在这里插入图片描述
计算的精度需要自己把控😁。

LocalDate

LocalDate计算日期间隔就不用借助其他工具类了,他自身就有函数可以实现这个功能😆。

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");LocalDate startDate = LocalDate.of(2024, 11, 23);LocalDate endDate = LocalDate.of(2024, 11, 26);long days = startDate.until(endDate, ChronoUnit.DAYS);System.out.println(startDate.format(formatter) + "\n" + endDate.format(formatter));System.out.println("间隔天数:" + days);

在这里插入图片描述

基本算到天数就可以了,每月(年)的天数都是不固定的,也不好用天数来计算月(年)数。
有时候需要判断两个时间的时间间隔是否大于一个月(年),可以通过开始日期加一月(年)然后和结束日期比较大小的方式来实现。

还有一种算法,可以这样🧐:

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");LocalDate startDate = LocalDate.of(2024, 9, 23);LocalDate endDate = LocalDate.of(2024, 11, 26);Period until = startDate.until(endDate);System.out.println(startDate.format(formatter) + "\n" + endDate.format(formatter));System.out.println("间隔年数:" + until.getYears());System.out.println("间隔月数:" + until.getMonths());System.out.println("间隔天数:" + until.getDays());

在这里插入图片描述
例二:
在这里插入图片描述

这里的意思是开始时间和结束时间之间相差0年1个月28天,连起来看才更合常理,分开来用的的场景不多。

LocalTime

要计算两个LocalTime对象之间的间隔,也可以使用java.time.Duration类。可以参考LocalDateTime。

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");LocalTime startTime = LocalTime.of(4, 7, 25);LocalTime endTime = LocalTime.of(20, 7, 26);Duration duration = Duration.between(startTime, endTime);System.out.println(startTime.format(formatter) + "\n" + endTime.format(formatter));System.out.println("间隔天数:" + duration.toDays());System.out.println("间隔小时: " + duration.toHours());System.out.println("间隔分钟: " + duration.toMinutes());System.out.println("间隔秒数: " + duration.toSeconds());// 自己计算BigDecimal divisor = BigDecimal.valueOf(60);BigDecimal minutes = BigDecimal.valueOf(duration.toSeconds()).divide(divisor, 2, RoundingMode.HALF_UP);BigDecimal hours = BigDecimal.valueOf(duration.toSeconds()).divide(divisor.multiply(divisor), 2, RoundingMode.HALF_UP);BigDecimal day = BigDecimal.valueOf(duration.toSeconds()).divide(divisor.multiply(divisor).multiply(BigDecimal.valueOf(24)), 2, RoundingMode.HALF_UP);System.out.println("间隔时间: " + duration.toSeconds() + "秒, " + minutes + "分钟, " + hours + "小时, " + day + "天");

在这里插入图片描述
下次见,赛优拉拉🫡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/388888.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年钉钉杯大学生大数据挑战赛倒计时,最后冲刺

2024第三届钉钉杯大学生大数据挑战赛倒计时,小编给大家带来非常实用的最后冲刺助力【A题】,(看图资料预览): 中国烟草行业作为国家税收和财政收入的重要支柱,近年来销售收入持续增长。国家对此实行严格的专…

一键测量仪,能否彻底解决燃气灶配件缺陷问题?

燃气灶配件是指用于燃气灶的附件或零部件,用于安装、维护或改进燃气灶的功能和性能。这些配件通常包括各种零部件、附件和替换件,以确保燃气灶的正常运行和安全使用。燃气灶的火焰头是产生火焰的部件,通常根据不同的燃气类型和火力需求选择合…

ETL数据集成丨快速将MySQL数据迁移至Doris数据库

随着大数据技术的迅速发展,越来越多的企业开始寻求高效、灵活的数据存储与分析解决方案。Apache Doris(原名 Palo)作为一款高性能的MPP(大规模并行处理)分析型数据库,凭借其在OLAP场景下的卓越表现&#xf…

Minio多主机分布式 docker-compose 集群部署

参考 docker-compose搭建多主机分布式minio - 会bk的鱼 - 博客园 (cnblogs.com) 【运维】docker-compose安装minio集群-CSDN博客 Minio 是个基于 Golang 编写的开源对象存储套件,虽然轻量,却拥有着不错的性能 中文地址:MinIO | 用于AI的S3 …

SYD88xx代码复位不成功和解决办法

原来的复位代码如下: void ota_manage(void){#ifdef _OTA_if(ota_state){switch(ota_state){case 1 : #if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)dbg_printf("start FwErase\r\n");#endifCmdFwErase();#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)db…

Spring Boot 动态数据源

目录 前言 前置环境 pom yml Entity Dao 枚举类 数据源 AOP Controller 启动类 演示 前言 大多数系统中,都需要数据库来持久化数据,在大多数情况下,一个系统只需要配置一个数据源便能够完成所有业务的查询,保存操作。…

为什么Transformer需要进行 Multi-head Attention?

目录 1. 前言 2. 基本概念 2.1. Word2Vec 2.2. Attention is all you need 2.3. Self-attention 2.3.1. 概述self-attention 2.3.2. 训练细节 2.4. Multi-head Attention 2.4.1. 多头理论细节 2.4.2. 多头代码实现 2.5. 总结 3. 讨论观点 3.1. 观点1: …

【工具插件类教学】vHierarchy 2工具编辑器扩展使用

目录 一、下载导入 二、使用介绍 1.便捷小工具 a.图标和颜色Icons and colors b.对象组件缩略图Component minimap c.层级线展示Hierarchy lines d.极简模式Minimal mode e.斑马条纹图案Zebra striping f.激活切换Activation toggle 2、快捷键 一、下载导入 资源官方…

二维码门楼牌管理应用平台建设:流程优化与全面考量

文章目录 前言一、工作流程优化:移动端采集与实时更新二、数据完整性与准确性保障三、效率提升与成本节约四、扩展性与未来发展五、数据安全与隐私保护六、用户培训与技术支持 前言 随着智慧城市建设的不断深入,二维码门楼牌管理应用平台作为城市管理的…

数据库事务处理技术——故障恢复

1. 数据故障恢复的宏观思路 我们知道DBMS是利用内存(主存)和外存(辅存)这样的存储体系进行数据库的管理,其中内存也就是我们常说的缓存是易失的。而事务时DBMS对数据库进行控制的基本单元,宏观上是由程序设…

算法训练.

一.奶牛晒衣服 题解: 这应该是个二分题,但是我用的是贪心暴力写的,思想就是循坏每次都让湿度最高的使用一次烘衣机,要是湿度最高的可以在自然条件下都能晒干就结束循环,这样内部我第一想法就是每次都排个降序&#xf…

windows下在线预览服务kkFileView4.4.0问题记录

前几天找到一个开源项目:kkFileView,感觉可能以后可能会用到,所以尝试了下。 通过git下载下来,版本是4.4.0,通过idea打开项目,发现老是无法找到组件aspose-cad,版本是23.9. 找了好多文章&#x…

AI学习(1)软件的选择,cuda和pytorch的安装

文章目录 1.使用VScode开发,结合anaconda配置python环境2.安装pytorch库3.深度学习相关的库1.numpy(科学计算库)2.pandas(数据分析处理库)3.matplotlib(可视化库)4.seaborn(可视化库) 1.使用VSc…

Docker三大基础组件

Docker有三个重要的概念:仓库、镜像和容器 ,它们是Docker的三大基础组件,这三个组件共同构成了Docker的核心架构,使得Docker能够实现对应用程序的便捷打包、分发和运行。 Docker使用客户端-服务器体系结构。Docker客户端与Docker守…

安装jdk和tomcat

安装nodejs 1.安装nodejs,这是一个jdk一样的软件运行环境 yum -y list installed|grep epel yum -y install nodejs node -v 2.下载对应的nodejs软件npm yum -y install npm npm -v npm set config .....淘宝镜像 3.安装vue/cli command line interface 命令行接…

【Qt】QDateTimeEdit

在Qt中,QDateEdit是用于选择日期的微调框,QTimeEdit是用于选择小时和分钟的微调框 QDateTimeEdit则是基于QDateEdit和QTimeEdit的组合控件,能够同时显示日期和时间,并允许用户以交互方式编辑日期 常用属性 属性说明dateTime时间…

SpringBoot SseEmitter,服务器单项消息推送

防止推送消息乱码 import org.jetbrains.annotations.NotNull; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.servlet.mvc.method…

每日OJ_牛客HJ74 参数解析

目录 牛客HJ74 参数解析 解析代码1 解析代码2 牛客HJ74 参数解析 参数解析_牛客题霸_牛客网 解析代码1 本题通过以空格和双引号为间隔&#xff0c;统计参数个数。对于双引号&#xff0c;通过添加flag&#xff0c;保证双引号中的空格被输出。 #include <iostream> #i…

Ubuntu20.04安装Angular CLI

一、更换apt-get源 使用原来的apt-get源有几个包报错&#xff0c;下不下来 更换阿里源&#xff08;阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区&#xff09;&#xff0c;使用网站中的内容&#xff0c;在 apt-get update 时总是报错 改用清华源&#xff1a; deb http:/…