【发布时间】:2017-11-07 07:56:02
【问题描述】:
我正在开发一个使用 Java8 Time 的应用程序。我遇到了一个问题。
假设时间 A 是 08:00,时间 B 是 17:00,所以这两个时间之间的差异将是 9 小时,在我的情况下这是正确的,但是如果时间 A 是 18:00 而时间 B 是 02 :00 它应该是 8h,但在我的情况下,我的程序返回 -16。请有人指导我如何解决这个问题。
我的代码:
@Test
public void testTime()
{
DateTimeFormatter format = DateTimeFormatter.ofPattern("HH:mm");
String s = "18:00";
String e = "02:00";
// Parse datetime string to java.time.LocalDateTime instance
LocalTime startTime = LocalTime.parse(s, format);
LocalTime endTime = LocalTime.parse(e, format);
String calculatedTime = ChronoUnit.HOURS.between(startTime, endTime)%24 + ":"
+ ChronoUnit.MINUTES.between(startTime, endTime)%60;
System.out.println(calculatedTime);
}
【问题讨论】:
-
使用
Math.abs? -
差异计算是正确的,实际上,我会说这是你如何使用它的问题。单独使用时间几乎没有价值,对于
LocalTime,说 18:00 和 2:00 之间有 -16 小时是正确的。你需要的是一个LocalDateTime的实例,并正确设置LocalDate,然后你就可以进行正确的计算了。 -
@M.Prokhorov 请将答案放在答案部分。
-
Math.abs 无济于事,OP 正在处理字符串
-
@ErwinBolwidt Math.abs 是错误的使用方法。他需要模 24 运算,结果在 0 到 23 之间。示例:从 23:00 到 02:00 的时间是 -21 小时或 3 小时,但肯定不是 21 小时。
标签: java time java-8 java-time localtime