首页 >Java >java教程 >Java 8 如何准确计算两个 LocalDate 之间的时间差异并处理负值?

Java 8 如何准确计算两个 LocalDate 之间的时间差异并处理负值?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-08 05:55:11391浏览

How Can Java 8 Accurately Calculate Temporal Differences Between Two LocalDates, Handling Negative Values?

Java 8:确定两个 LocalDate 之间的时间差异

计算两个 LocalDateTime 对象之间的差异,以年、月、日、小时表示、分钟和秒可能是一项复杂的任务。一种方法是利用 Java 8 中引入的 period 和 Duration 类。但是,如果差异涉及负值(如代码所示),则可能会导致不正确的结果。

问题

您的代码计算两个日期之间的时间段,代表年、月和日。然后,它计算以秒为单位的时间差,并将这些秒转换为小时、分钟和秒。但是,它没有考虑当“开始”日期大于“结束”日期时可能出现的负值。

解决方案

要解决这个问题,我们可以使用 ChronoUnit 枚举直接确定时间差。 ChronoUnit 提供了一种计算两个 LocalDateTime 对象之间的时间单位(例如分钟和小时)的便捷方法。

以下是使用 ChronoUnit 的更新代码:

import java.time.ChronoUnit;
import java.time.LocalDateTime;

public class Main {

    public static void main(String[] args) {
        LocalDateTime toDateTime = LocalDateTime.of(2014, 9, 9, 19, 46, 45);
        LocalDateTime fromDateTime = LocalDateTime.of(1984, 12, 16, 7, 45, 55);

        long years = ChronoUnit.YEARS.between(fromDateTime, toDateTime);
        long months = ChronoUnit.MONTHS.between(fromDateTime, toDateTime);
        long days = ChronoUnit.DAYS.between(fromDateTime, toDateTime);
        long hours = ChronoUnit.HOURS.between(fromDateTime, toDateTime);
        long minutes = ChronoUnit.MINUTES.between(fromDateTime, toDateTime);
        long seconds = ChronoUnit.SECONDS.between(fromDateTime, toDateTime);

        System.out.println(years + " years " + months + " months " + days + " days " +
                hours + " hours " + minutes + " minutes " + seconds + " seconds.");
    }
}

经过此修改,您的代码应该准确计算两个 LocalDateTime 对象之间的时间差。

以上是Java 8 如何准确计算两个 LocalDate 之间的时间差异并处理负值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn