我使用 Java Duration 发现了一个非常简单的问题。
LocalTime SaturdayStart = LocalTime.of(22, 30);
LocalTime SaturdayEnd = LocalTime.of(01, 00);
System.out.println(SaturdayStart);
System.out.println(SaturdayEnd);
System.out.println(Duration.between(SaturdayStart, SaturdayEnd));
此代码的输出是:
22:30
01:00
PT-21H-30M
这就是问题所在。我希望持续时间为 2H-30M,而不是 21H。是什么导致该方法无法看到两个时间之间的“日间变化”?
最佳答案
请记住,LocalTime
仅表示一天中的单个时间,没有时区。
由于它代表一天中您在时钟上看到的时间,因此您无法使用它来计算今天 22:30 和 01:00 < em>第二天。您的两个 LocalTime
对象分别代表今天 22:30 和今天 01:00。
要考虑日期,您需要一个LocalDateTime
。这不仅代表时间(没有时区),还代表 ISO-8601 日历系统中的日期。您可以像这样创建两个 LocalDateTime
对象:
LocalDateTime start = LocalDateTime.of(LocalDate.now(), LocalTime.of(22, 30));
LocalDateTime end = start.plusDays(1).withHour(1).withMinute(0);
然后你可以得到持续时间:
Duration d = Duration.between(start, end);
System.out.println(d);
顺便说一句,您在错误输出中得到的 -
字符不是不同组件的分隔符。它们是负面信号。这是因为您从 01:00 减去 22:30,这就像用较小的数字减去较大的数字,您会得到一个负数。
关于Java 从一天到另一天的持续时间错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49052303/