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

Java中如何准确计算两个LocalDateTime对象之间的时间差?

DDD
DDD原创
2024-12-10 13:10:15456浏览

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

计算 LocalDateTime 对象之间的时间差

为了解决您的问题,计算两个 LocalDateTime 对象之间的时间差需要一种全面的方法,该方法可以准确地表示多个单位的时间跨度。

Java 8 API 提供了 period 和 Duration 类来处理这有效。 period 表示以年、月、日为单位的时间间隔,而 Duration 则处理小时、分钟和秒。

您现有的代码使用 period 和 Duration 来确定时间差,但有一些细微的修改必需的。这是更新后的代码:

import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.ZoneId;

public class Main {

    static final int MINUTES_PER_HOUR = 60;
    static final int SECONDS_PER_MINUTE = 60;
    static final int SECONDS_PER_HOUR = SECONDS_PER_MINUTE * MINUTES_PER_HOUR;

    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);

        Period period = Period.between(fromDateTime, toDateTime);

        long seconds = Duration.between(fromDateTime, toDateTime).getSeconds();

        long hours = seconds / SECONDS_PER_HOUR;
        long minutes = ((seconds % SECONDS_PER_HOUR) / SECONDS_PER_MINUTE);
        long secs = (seconds % SECONDS_PER_MINUTE);

        System.out.println(period.getYears() + " years " + 
                period.getMonths() + " months " + 
                period.getDays() + " days " +
                hours + " hours " +
                minutes + " minutes " +
                secs + " seconds.");
    }
}

这里的关键更改是使用 Duration. Between(fromDateTime, toDateTime).getSeconds();计算秒差。这可以确保处理跨越午夜或具有负值的时间跨度时的准确性。

当涉及负数时,Duration 会正确处理它们,将时间差提供为负值。此外,使用 ChronoUnit 进行特定单位转换是一种可靠的方法。

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

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