如果我能按我的要求做,那就完美了!
<<LocalTime is provided as locTime>>
Date flyDate = a.getDate();
Date landingDate = b.getDate();
flyDate.add(locTime);
或者我可以学习什么是最佳实践。
我有一堆飞行物体,现在它们每个都有一个日期来决定飞行的日期/时间,还有一个是localtime,表示飞行持续时间hours:minutes will 飞机起飞了。
我想检查一个航班和另一个航班在时间上是否兼容。a航班的着陆时间应该在b航班的起飞时间之前。
谢谢您!
2条答案
按热度按时间t3irkdon1#
您可能需要以下内容:
输出为:
由于抵达时间2021-05-01t18:45-03:00[美国/布宜诺斯艾利斯]不在起飞时间2021-05-01t18:30-03:00[美国/布宜诺斯艾利斯]之前,无法到达b航班
使用
ZonedDateTime
时区中的日期和时间。使用Duration
因为-好吧,这个班级的名字说明了这一点。编辑:
我在添加所有
Duration
如果是联程航班,最后加起来是00:00。我用什么可能会关闭?
共同的疏忽。你需要的第二个陈述
一
Duration
与几乎所有java.time类一样,是不可变的。所以plus
方法不会将另一个持续时间添加到持续时间本身,而是创建并返回一个新的持续时间Duration
包含两个持续时间之和的对象。另外,如何获得hh:mm版本的duration?
请参见底部的链接。
一
LocalTime
是一天中的一段时间。不要尝试在一段时间内使用它。一LocalDateTime
是一天中没有时区或与utc偏移的日期和时间。因为您不知道它在哪个时区,所以不能将它用于涉及转换到另一个时区的计算。我知道LocalDateTime
它经常被使用,但也经常出现在不适合工作的情况下。它没有太多好的用途。链接
如何在java中格式化持续时间(e、 g格式(h:mm:ss)
我对同一个问题的回答(至少需要Java9)
iecba09b2#
正如其他人所说,这是一个有问题的问题,因为localtime和date实际上代表了完全不同且几乎不相关的概念。localtime是一天中没有时区的时间,例如19:45(或7:45 pm)。日期是时间线上的一个点;如果恰好在某个时区某个日期的19:45,在其他时区则不会。
我认为,将日期(实际上)误用为一小时的传统方式是将其设置为jvm的默认时区中的1970年1月1日。这种做法承担了前面提到的所有责任。特别是jvm默认时区设置可以随时从程序的另一部分或在同一jvm中运行的任何其他程序更改。这意味着一个完全不相关的程序可能会突然导致您的日期指示一天中与您初始化的时间不同的时间。
我们没什么比这更好的了,就这样吧
最后输出是
1999年5月3日星期二11:00:00 utc