Java8时间间隔计算Period.between与LocalDate.until区别LocalDate,LocalDateTime计算两个时间的相差时间

记录一线上问题,编辑会员卡信息,有效期截止时间由2022-04-17修改为2023-04-18,操作成功之后显示剩余的有效天数为24天,实际上怎么也得有三百多天.之前本地测试一直没有问题,现将定位过程记录一下.
本地复测之后发现计算的是24天,果然有问题.

        Period period = Period.between(LocalDate.now(), LocalDate.parse("2023-03-14",DateTimeFormatter.ofPattern(DateTimeUtil.PATTERN_THREE)));System.out.println(String.valueOf(period.getDays()));// 输出获取间隔日天数为24

看一下实现的源码发现问题所在,确实还是用之前没有了解清楚api的用法.Period.between(LocalDate startDateInclusive, LocalDate endDateExclusive)最终调用的是LocalDate.java中until(ChronoLocalDate endDateExclusive),源码如下:
在这里插入图片描述Period.between计算两个日期间隔是按照年月日来计算,可以理解为2023-03-14和2022-04-18差0年,10个月,24天;故此处天数非换算后的天数。
可以使用LocalDate.java中until(Temporal endExclusive, TemporalUnit unit)进行替换

		LocalDate nowLocalDate = LocalDate.now();LocalDate localDate = LocalDate.of(2023, 03, 14);long until = nowLocalDate.until(localDate, ChronoUnit.DAYS);System.out.println(until );   //获取间隔的天数为330

总结:时间计算间隔可以使用LocalDate中until的两个方法进行处理。

Period until(ChronoLocalDate endDateExclusive)
long until(Temporal endExclusive, TemporalUnit unit)

前者支持年月日同一维度同时统计(相差几年几个月几天);后者支持指定单位(按年或按月或按天)分别统计,后者更加灵活。


LocalDate 跨年快速计算月差

LocalDate date = LocalDate.now();
LocalDate time = LocalDate.now();
Integer diff = time.getYear() - date.getYear();
Integer month = (time.getMonthValue() - date.getMonthValue()) + (diff *12);

LocalDate,LocalDateTime计算两个时间的相差时间

LcoalDateTime

LocalDateTime now = LocalDateTime.now();
LocalDateTime end = LocalDateTime.now();Duration duration = Duration.between(now,end);
//相差的天数
long days = duration.toDays();
//相差的小时数
long hours = duration.toHours();
//相差的分钟数
long minutes = duration.toMinutes();
//相差毫秒数
long millis = duration.toMillis();
//相差的纳秒数
long nanos = duration.toNanos();

LocalDate

LocalDate start = LocalDate.of(2020, 12, 27);
Period period = Period.between(start, LocalDate.now());
// 日期相差
int days = period.getDays();
// 相差月份
int months = period.getMonths();
// 相差年份
int years = period.getYears();
System.out.println(days +"-"+ months +"-"+ years);
// 更准确 - 开发用这个,省事
long dayse = LocalDate.now().toEpochDay() - start.toEpochDay();
System.out.println("相差天数" + dayse);

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

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

相关文章

win8升级win10出现错误代码1049怎么回事

最近有用户把自己的win8系统升级到win10后遇到了错误代码1049,那么这是咋回事呢?下面小编就给大家介绍一下win8升级win10出现错误代码1049的解决方法。 1、报错信息如下所示,完全不理解是什么意思,点击《转到存储》菜单,看到的是…

简单几步解决笔记本风扇一直嗡嗡响的问题

我们在使用电脑时难免会遇到一些问题。例如我们都知道笔记本都会自带有一个风扇,如果长时间使用的话就会帮助扇热。但最近有网友就表示自己的笔记本风扇一直嗡嗡响,不知道怎么回事,也不知道该如何解决很是苦恼,所以今天小编为大家…

acer笔记本电脑如何进入bios设置

acer笔记本电脑对于外出办公的用户来说是一个不错的选择,但最近小编发现有许多使用acer笔记本电脑的朋友是不知道怎么进入BIOS设置的。因此,针对这个问题我就赶紧整理了这个acer笔记本电脑进入BIOS设置的教程,现在就来分享给大家,…

[内排序]八大经典排序合集

文章目录1 排序的基本概念1.1 什么是排序1.2 排序的稳定性1.3 内排序和外排序2 插入排序2.1 直接插入排序1. 排序思路2. 直接插入排序实例3. 排序算法4. 算法分析5. 折半插入排序 / 二分插入排序5.1 排序思路5.2 排序算法5.3 算法分析2.2 希尔排序1. 排序思路2. 希尔排序实例3.…

怎么解决机械革命笔记本蓝屏问题

1、重启电脑,出现logo界面后连续按F2键直到打开bios,接着切换至“Advanced”,将光标移至“OS Support”选项,并将后面数值调成“Others”。 2、接下来将光标移至“SATA Device”选项,将硬盘模式调成“AHCI”。 3、最后…

bootsqm.dat是什么文件 bootsqm.dat可以删除吗

我们经常会发现系统C盘里面有一个bootsqm.dat文件,这个文件占用空间还是蛮大的,因此有些用户想要知道bootsqm.dat是什么文件?bootsqm.dat可以删除吗?其实这两个问题很简单,下面就由小编来告诉大家bootsqm.dat是什么文件及其能不能删除吧! …

win10笔记本打开只有飞行模式的解决方法

方法一: 1、按下“winr”打开运行,输入“regedit”,依次展开到“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesNdisuio”,查看其“DisplayName”键值是“NDISUsermode I/O Protocol”如缺损,可新建; 2、在右边…

笔记本win10系统连接wifi显示无Internet安全如何解决

方法一: 1、进入设置,找到“网络和Internet”,双击; 2、找到“更改适配器选项”,双击; 3、双击进入你的WLAN; 4、找到页面下方“属性”,单击; 5、(1)如果在项目列表里出项“WifiMasterNATDriver”是选中状态的话&…

win10 更新后不能切换输入法怎么办 win10输入法切换不了怎么解决

有win10用户说他在更新完系统后,在切换输入法的时候发现竟然切换不了无法切换,都不知道该怎么办了,这个小问题也是常有的,那么win10更新后不能切换输入法怎么办呢,下面小编给大家分享win10输入法切换不了的解决方法。 …

解决Java8 分组groupingBy 后排序不变的问题

在工作中遇到了java8 Stream groupBy 分组排序失效的问题 在此记录一下解决方案 预期效果: 按照年纪倒序并分组 实际结果:返回的数据是杂乱无章,并没有按照年纪倒序 示例代码如下: import java.util.Comparator; import java.u…

win8无线网络受限怎么办 win8网络受限的解决方法

很多时候,我们的用户经常会遇到win8无线网络受限的问题,从而导致电脑无法上网,这可如何是好呢?win8无线网络受限怎么办呢?下面,就给大家介绍几种win8无线网络受限的解决方法,提供给大家参考。 一、检测无线网络是否…

教你win10怎么设置环境变量

电脑在运行一些程序的时候,我们经常都会需要修改系统的环境变量,添加路径,尤其是java运行环境配置和Android环境配置。为此,这里小编就以win10为例给大家讲解一下如何设置环境变量。 win10系统以界面优美、开机速度快、功能强大等…

告诉你win10自带录屏怎么使用

win10自带录屏怎么使用呢一些游戏玩家之前都是下载第三方屏幕录像软件录像,升级win10过后发现win10系统自带录屏功能,但是又不知道在哪打开?针对这个问题,我给大家带来了详细的操作步骤,一起来看看吧 不得不说win10系统实在是太…

Content-Type详解SpringBoot中如何根据Content-Type解析数据

文章目录Content-Type详解Content-Type是什么?Content-Type的格式Post请求中常见的Content-Type类型的结构SpringBoot中如何根据Content-Type解析数据一、接收get请求二、接收Post请求总结:Content-Type详解 Content-Type是什么? 在HTTP协议…

U盘重装win7系统教程

第一步 先在浏览器搜索云骑士官网:www.yunqishi.net 在官网上下载云骑士装机大师软件,下载好以后打开云骑士装机大师,打开后云骑士会自动配置用户的电脑信息,选择启动U盘界面。并且在电脑上插入U盘。 2 第二步 接着就进入了选择系…

【编程技巧】Stream流之list转map、分组取每组第一条

前言 JDK1.8推出的stream流能极大的简化对集合的操作,让代码更美观,老规矩,直接上代码。 一、list转map 取list中对象的某个属性作为唯一key,对象作为value形成一个map集合,能够便于在后续业务中取值而不用遍历list…

Java中String类常用方法详解: concat(),format(),charAt(),indexOf(),substring(),compareTo(),split(),replaceAll

文章目录1.连接字符串 concat()2.创建格式化对象 format()3.获取字符串某一位置字符 charAt()4.获取字符串的长度 length()5.查找子串在字符串中的位置 indexOf()6.截取字符串的子串 substring()7.字符串比较 compareTo()8.字符串大小写转换 toLowerCase()【大写换小写】 toUpp…

手把手教你dns服务器未响应导致无法上网怎么办

dns服务器未响应怎么办?其实每个问题都是有着相对应的原因外加解决方法的,我这刚好就有一篇关于如何解决dns服务器未响应的方法,现在就来分享给各位小伙伴们哈~ 不知道小伙伴们在使用电脑进行上网的时候,有木有遇到过这样子的一个…

win7发现不了无线网络怎么办 win7发现不了无线网络的解决办法

今天来跟各位说说win7发现不了无线网络怎么办。 1.我们单击右下角的无线网络以打开网络和共享中心。 2.单击“更改适配器设置”。 3.在“网络连接”窗口中,如果网络连接中的无线网络显示为灰色,则右键单击“启用”。 4.在网络连接中没有无线网络连接&…

win7分辨率不能调怎么办 win7系统分辨率不能调的解决方案

win7分辨率不正常怎么回事?分辨率为什么不能调?win7分辨率不能调是什么原因?怎么来解决win7分辨率不能调的问题?现在小编就分享一篇关于win7系统分辨率不能调的解决方案。 分辨率对系统来说是相当重要的,这关系到系统桌面屏幕的清晰度,如果调得不好…