您可能会追求以下内容:
// 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);
}
输出是:
航班 b 到达时间后无法到达
2021-05-01T18:45-03:00[America/Buenos_Aires] 不在出发前
时间 2021-05-01T18:30-03:00[美国/布宜诺斯艾利斯]
使用 ZonedDateTime 表示时区中的日期和时间。使用 Duration 表示——好吧,类名说明了这一点。
编辑:
我在添加已连接的所有 Durations 时遇到问题
航班,最后加起来是 00:00。我用
Duration duration = Duration.ofHours(0);
duration.plus(flight.getDuration());
可能会发生什么问题?
常见的疏忽。对于您需要的第二个语句
duration = duration.plus(flight.getDuration());
Duration 与几乎所有 java.time 类一样,是不可变的。因此plus 方法不会将另一个持续时间添加到持续时间本身,而是创建并返回一个新的Duration 对象,其中包含两个持续时间的总和。
另外,我怎样才能获得 hh:MM 版本的 Duration?
查看底部的链接。
LocalTime 是一天中的某个时间。不要尝试使用它一段时间。 LocalDateTime 是没有时区或与 UTC 偏移的日期和时间。由于您不知道它所在的时区,因此您不能将其用于涉及转换到另一个时区的计算。我知道LocalDateTime 经常被使用,但也经常在它不是真正适合工作的类的情况下使用。它没有太多好的用途。
链接
How to format a duration in java? (e.g format H:MM:SS)