【发布时间】:2019-04-14 17:17:10
【问题描述】:
我有一个航班行程计划,我需要了解出发和到达时间之间的差异。我从数据中得到这些指定的时间作为字符串。这是我的问题:
import static java.time.temporal.ChronoUnit.MINUTES;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class test2 {
public static void main(String[] args) {
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("HHmm");
LocalTime departure = LocalTime.parse("1139", dateFormat);
LocalTime arrival = LocalTime.parse("1435", dateFormat);
LocalTime a = LocalTime.parse("0906", dateFormat);
System.out.println(MINUTES.between(departure, arrival));
System.out.println(MINUTES.between(arrival, a));
}
}
输出:
176
-329
第一次返回 11:39 和 14:35 之间的差异就好了。但是第二个差异只有5个小时,而应该是19个小时。我该如何解决这个问题,我在这里做错了什么?
任何帮助将不胜感激。
编辑:我正在使用图表来存储我的数据。两个机场之间最短路线的示例如下:
Route for Edinburgh to Sydney
1 Edinburgh, 1139, TK3245, Istanbul, 1435
2 Istanbul, 0906, TK4557, Singapore, 1937
3 Singapore, 0804, QF1721, Sydney, 1521
这些是我们从 EDI 到 SYD 的 3 个航班。上面输出的格式是(城市、出发时间、航班号、目的地、到达时间)。
【问题讨论】:
-
您知道,时间的问题只是从凌晨到午夜的这段时间,它不知道在这些界限之外存在什么。相反,您应该使用
LocalDateTime,它允许从一天过渡到另一天 -
虽然您的示例可能很简单,但我建议您查看
ZonedDateTime,因为您可能在不同时区之间传递,使得计算相当……奇怪:P(并非闻所未闻在你离开之前到达????) -
我没有看到这个问题。你得到的结果是正确的。为什么 09:05 到 14:35 之间的差应该是 19 小时?
-
@dorony 抱歉,我犯了一个错误,忘记在发布之前更改我的代码。差异应该是从 14:35 到 09:05。在这种情况下,正如 MadProgrammer 所提到的,日期正在更改,因此值会丢失或其他情况。我尝试了 MadProgrammer 建议的建议,但 LocalDateTime 仅在我提供日期时才有效(至少就我现在测试的情况而言)。我得到的数据没有给我提供日期,它只是两次。日期无关紧要。
-
如果你得到的结果小于零,那么将它与 24*60 相加,你会得到正确的结果。
标签: java localtime time-format