首页 > Java > java教程 > 如何准确计算两个Java LocalDateTime实例之间的时间差?

如何准确计算两个Java LocalDateTime实例之间的时间差?

Susan Sarandon
发布: 2024-12-04 19:10:14
原创
142 人浏览过

How to Accurately Calculate the Time Difference Between Two Java LocalDateTime Instances?

计算 LocalDateTime 实例之间的时差

在 Java 8 中,可以使用 period 和 Duration 类来计算两个 LocalDateTime 实例之间的时差。但是,您的代码目前面临一些不准确的情况。

原始代码分析

您的代码使用Period类来计算两个LocalDateTime实例之间的年、月和日。对于时间差,您将实例转换为仅包含时间分量的 LocalDateTime,并使用 Duration 计算差异。

出现问题的原因是您的时间计算假设 fromDateTime 在 toDateTime 之前。如果日期无序,则会产生负数,从而导致不正确的时间值。

使用 ChronoUnit 改进算法

更强大的方法涉及使用 ChronoUnit 枚举来计算时间差。以下是代码的改进部分:

long hours = ChronoUnit.HOURS.between(fromDateTime, toDateTime);
long minutes = ChronoUnit.MINUTES.between(fromDateTime, toDateTime);
登录后复制

ChronoUnit 提供了一组预定义单位,可以准确计算两个 DateTime 实例之间的差异。通过将单位指定为 HOURS 或 MINUTES,可以获得所需单位的时间差,无需手动转换或处理负值。

更新示例

使用 ChronoUnit 方法,代码将正确计算输入 LocalDateTime 实例之间的差异,无论它们如何order:

LocalDateTime toDateTime = LocalDateTime.of(2014, 9, 9, 19, 46, 45);
LocalDateTime fromDateTime = LocalDateTime.of(1984, 12, 16, 7, 45, 55);
long years = Period.between(fromDateTime.toLocalDate(), toDateTime.toLocalDate()).getYears();
long months = Period.between(fromDateTime.toLocalDate(), toDateTime.toLocalDate()).getMonths();
long days = Period.between(fromDateTime.toLocalDate(), toDateTime.toLocalDate()).getDays();
long hours = ChronoUnit.HOURS.between(fromDateTime, toDateTime);
long minutes = ChronoUnit.MINUTES.between(fromDateTime, toDateTime);
System.out.println(years + " years " + months + " months " + days + " days " + hours + " hours " + minutes + " minutes.");
登录后复制

此代码正确计算时差为“29年8个月24天12小时0分钟。”

以上是如何准确计算两个Java LocalDateTime实例之间的时间差?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板