如何将 LocalTime 添加到 Date 对象中?

How can I add LocalTime into a Date object?

如果我能做到我所要求的,那就完美了!

    <<LocalTime is provided as locTime>>
    Date flyDate = a.getDate();
    Date landingDate = b.getDate();

    flyDate.add(locTime);

或者我可以学习什么是最佳实践。

我有一堆飞行对象,目前它们每个都有一个日期来确定航班的飞行 date/time 和一个用于 LocalTime 的持续时间,表示飞行需要多少 hours:minutes。

我想检查一个航班在时间上是否与另一个航班兼容。航班a的着陆时间应该在航班b的飞行时间之前。

谢谢!

您可能正在寻找以下内容:

    // Flying time for flight a
    ZonedDateTime aDepartureTime = ZonedDateTime.of(
            2021, 5, 1, 8, 0, 0, 0, ZoneId.of("Canada/Saskatchewan"));
    Duration aFlyingTime = Duration.ofHours(7).plusMinutes(45);
    ZonedDateTime aArrivalTime = aDepartureTime.plus(aFlyingTime)
            .withZoneSameInstant(ZoneId.of("America/Buenos_Aires"));
    
    // Flying time for flight b
    ZonedDateTime bDepartureTime = ZonedDateTime.of(
            2021, 5, 1, 18, 30, 0, 0, ZoneId.of("America/Buenos_Aires"));
    
    if (aArrivalTime.isBefore(bDepartureTime)) {
        System.out.format(
                "Flight b can be reached since arrival time %s is before departure time %s%n",
                aArrivalTime, bDepartureTime);
    } else {
        System.out.format(
                "Flight b cannot be reached since arrival time %s is not before departure time %s%n",
                aArrivalTime, bDepartureTime);
    }

输出为:

Flight b cannot be reached since arrival time 2021-05-01T18:45-03:00[America/Buenos_Aires] is not before departure time 2021-05-01T18:30-03:00[America/Buenos_Aires]

使用 ZonedDateTime 作为时区中的日期和时间。使用 Duration — 好吧,class 名字说明了这一点。

编辑:

I am having trouble while adding all the Durations of a connected flight, it adds up to 00:00 at the end. I use

    Duration duration = Duration.ofHours(0);
    duration.plus(flight.getDuration());

What might be off?

一个普遍的疏忽。对于第二个语句,你需要

    duration = duration.plus(flight.getDuration());

A Duration 与几乎所有 java.time class 一样,是不可变的。因此 plus 方法不会将另一个持续时间添加到持续时间本身,而是创建并 returns 一个新的 Duration 对象,其中包含两个持续时间的总和。

Also how can I get hh:MM version of Duration?

见底部的link。

A LocalTime 是一天中的某个时间。不要尝试使用它一段时间。 LocalDateTime 是没有时区或与 UTC 的偏移量的日期和时间。由于您不知道它处于哪个时区,因此您不能将其用于涉及转换到另一个时区的计算。我知道 LocalDateTime 经常被使用,但在 class 不适合工作的情况下也经常使用。它没有太多好的用途。

链接

How to format a duration in java? (e.g format H:MM:SS)

  • My answer to the same question(至少需要 Java 9)