如何在java中使用LocalTime计算2个特定时间的总和?

如何在java中使用LocalTime计算2个特定时间的总和?,java,java-8,localtime,Java,Java 8,Localtime,例如: LocalTime time1 = LocalTime.of(12, 30); LocalTime time2 = LocalTime.of(8, 30); time1 + time2 // Doesn't work. time1.plus(time2) // Doesn't work. 因此,我希望得到两次的总和(12:30+8:30=21:00),格式为(小时:分钟) 还有其他建议吗?您正在尝试添加两个LocalTime变量。这是一个错误的概念。您的time2不应该是Loc

例如:

LocalTime time1 = LocalTime.of(12, 30);
LocalTime time2 = LocalTime.of(8, 30);
time1 + time2   // Doesn't work.
time1.plus(time2)   // Doesn't work.
因此,我希望得到两次的总和(12:30+8:30=21:00),格式为(小时:分钟)


还有其他建议吗?

您正在尝试添加两个
LocalTime
变量。这是一个错误的概念。您的time2不应该是
LocalTime
,它应该是
持续时间
。添加到时间中的持续时间将为您提供另一个时间。从一个时间中减去一个时间,就会得到一个持续时间。这一切都很好,符合逻辑。两次相加是不正确的

有些黑客可能会将你的时间转换为持续时间,但我强烈建议不要这样做。相反,重新构造代码,使time2首先是一个
持续时间

迈克·纳基斯的回答不正确

我上面的句子不是真的。我已经检查过了,只有Java8有
LocalTime.of
,所以Mike Nakis的答案是完全正确的。请看他的答案

[本节仍然保留。在joda库中的case
LocalTime

我会解释:

以Joda Time为单位的持续时间表示以毫秒为单位的持续时间。持续时间通常从一个间隔中获得。i、 e.我们 可以从间隔的末尾减去开始,以得出持续时间

Joda Time中的时段表示根据字段定义的时段,例如,3年5个月2天7小时。这 与持续时间的不同之处在于它在时间上是不精确的 毫秒。周期只能解析为精确的 毫秒,通过指定瞬间(包括时间顺序和时间 区域)它是相对于。例如,如果我们增加1年 从这到1月1日,我们将始终在下一个1月1日到达,但是 持续时间将取决于中间年份是否为闰年 一年还是一年

LocalTime
是一个不可变的时间类,表示没有时区的时间。所以,基于上述定义,period适合您向
LocalTime
添加时间。事实上,API已经证明了这一点:

LocalTime localTime = new LocalTime(10, 30);
Duration d = new Duration(1, 0);
Period p = new Period(1, 0);
LocalTime newLocalTime = localTime.plus(d); // COMPILE ERROR
LocalTime newLocalTime = localTime.plus(p); // SUCCESS
您可以使用sum()方法


它必须工作

您可以执行以下操作

LocalTime t1 = LocalTime.of(9, 0);  // 09:00
LocalTime t2 = LocalTime.of(2, 30); // 02:30
LocalTime total = t1.plusHours(t2.getHour())
                    .plusMinutes(t2.getMinute());  // 11:30

当两次相加时,您希望得到什么?您只想将时间2到时间1的小时和分钟相加吗?您可以将
持续时间
对象相加-它们表示时间量。您可以将
持续时间
添加到
本地日期
。你不能添加两个日期-这完全没有意义…@Pshemo A
LocalTime
不是日期,它是一天中的一个时间(小时、分钟、秒)。@Jesper哦,你是对的,我把它误读为LocalDate。不管怎么说,问题仍然是相似的:OP预期的结果是什么?为什么?@MikeNakis,我为所有人感到抱歉。我再次投票支持你的答案(我需要编辑,以便再次投票,哈哈)。很抱歉,我没有仔细看原始问题。
LocalTime t1 = LocalTime.of(9, 0);  // 09:00
LocalTime t2 = LocalTime.of(2, 30); // 02:30
LocalTime total = t1.plusHours(t2.getHour())
                    .plusMinutes(t2.getMinute());  // 11:30