【发布时间】:2017-05-21 13:48:00
【问题描述】:
我有一个活动列表(活动),我想确定一个映射形式为Map(String, DateTime)(不是持续时间或期间;DateTime 这是必须的)的数据结构。对于每项活动,在监控期间计算的总持续时间。
类 Activity 有:activityLabel(String)、startTime(DateTime)、endTime(DateTime)。我使用joda 时间。
这就是我所做的:
Map<String, DateTime> durations = activities.stream().collect(Collectors.toMap(
it -> it.activityLabel,
it ->new DateTime(0,0,0,0,0,0)
//,DateTime::plus
));
我想我应该使用DateTime plus(ReadablePeriod period) 或 DateTime plus(ReadableDuration duration) ,但我不知道如何将 Duration 或 Period 类型的参数发送到方法引用。
我怎样才能达到这个结果?
编辑:对于输入:
2011-12-03 01:00:00 2011-12-03 9:00:00 睡觉
2011-12-04 03:00:00 2011-12-04 10:30:00 睡觉
我应该有输出: Sleeping 0-0-0 15:30:00 (years,months,days,hours,minutes,seconds)
【问题讨论】:
-
为什么加上?你不应该做
endTime - startTime吗? -
我真的不明白你应该如何使用 DateTime 来表示持续时间。纽约时区的 2017 年 5 月 21 日根本不是持续时间。
-
我的意思是加(endTime-startTime)
-
@ProgramerGirl1996 谁/什么需要
??.plus(endTime-startTime)?通常endTime - startTime是Duration而不是DateTime。 -
好吧,您可以决定始终使用相同的时区 (UTC),并且 2 小时的持续时间将由 DateTime 纪元 + 2 小时 UTC 表示,但这真的不是一个好主意.为什么不使用适当的类:Duration?
标签: java lambda java-8 java-stream jodatime