计算 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中文网其他相关文章!