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,一经查实,立即删除!

相关文章

MySQL中DATE_FORMAT()函数的说明和简介

MySQL DATE_FORMAT函数简介 要将日期值格式化为特定格式,请使用DATE_FORMAT函数。 DATE_FORMAT函数的语法如下: DATE_FORMAT(date,format);DATE_FORMAT()函数接受两个参数: date:是要格式化的有效日期值format:是由…

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

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

Stream的Collectors.groupingBy支持key为null进行分组

场景 在使用Collectors.groupingBy分组时,如果分组的字段中有值为null,会抛出空指针异常 例如: // An highlighted block calss User{private Integer age;private String sex; }public static void main(String[] args){User user1 new User(18, "女");User user…

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

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

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、最后…

UnsupportedOperationException——操作不支持异常

UnsupportedOperationException 是用于表明操作不支持的异常。在 JDK 类中已被大量运用,在集合框架 java.util.Collections.UnmodifiableCollection 将会在所有 add 和 remove 操作中抛出这个异常。 Java不支持该功能,多见于Arrays.asList(),…

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、在右边…

【Java 8 新特性】Java Comparator.reverseOrder | 倒序排序-静态方法

文章目录在 Stream.sorted 中使用在 Collections.sort 中使用在 List.sort 中使用在 Arrays.sort 中使用参考文献Comparator.reverseOrder是Java 8中引入的一个静态方法,它返回比较器,对对象集合进行反向自然排序。 对于自然排序,一个类需要…

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

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

Java8 Stream 之groupingBy 分组详解

本文主要讲解&#xff1a;Java 8 Stream之Collectors.groupingBy()分组示例 Collectors.groupingBy() 分组之常见用法 功能代码: /*** 使用java8 stream groupingBy操作,按城市分组list*/public void groupingByCity() {Map<String, List<Employee>> map employ…

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

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

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

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

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

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

Stream.sorted

Stream sorted() Stream sorted​(Comparator<? super T> comparator) 对流中元素进行排序&#xff0c;排序后的元素放到新流中返回。 无参的方法按照自然顺序排序&#xff0c;有参数的方法根据自定义的比较器进行比较排序。 这两个方法都是有状态的中间操作&#xff0c…

教你win10怎么设置环境变量

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

Java8之Function函数、BiFunction函数详解

众所周知&#xff0c;Java8提供了一下非常重要的函数式接口。今天我们就来讲讲其中一个函数式接口-----Function接口。 下面的代码就是Function接口的全部代码。接下来我们逐个分析一下。 FunctionalInterface public interface Function<T, R>FunctionalInterface 表明…

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

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