如何将 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 Duration
s 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)
如果我能做到我所要求的,那就完美了!
<<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
Duration
s of a connected flight, it adds up to 00:00 at the end. I useDuration 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)