我在一个对象中存储了两个DateTimes
(Joda),然后我通过Period
从对象中获得new Period(dateTime1, dateTime2)
。
然后我想将不同对象的所有句点添加到一起。
我在变量中将所有句点加在一起,并将HashMap<long, Period>
中存储的较小句点中的某些句点相加。
结果和问题是这个。
第一个时段得到&#34; 2小时30分钟&#34;使用PeriodFormat.getDefault().print(p)
(如果我连接getHours和getMinutes,则值相同)。
第二个值&#34; 5小时52分钟&#34;。到现在为止还挺好。
但是当我用第3和第4时,分钟停止转换为小时。
&#34; 5小时103分钟&#34;
&#34; 8小时132分钟&#34;
它应该是10小时和12米,但你可以看到。那不是我得到的。有什么问题? Period
如何忘记进行转换?我对选定的金额没有任何问题。
代码:(变量名称已更改)
mainSum= new Period();
tasksSum= new HashMap<Long, Period>();
for(Entry entry: entries){
long main_id= entry.getMain_id();
long task_id = entry.getTask_id();
Period entryPeriod = entry.getPeriod();
if(main_id == mainStuff.getId()){
mainSum = entryPeriod.plus(mainSum);
Timber.d("mainSum: " + PeriodFormat.getDefault().print(mainSum));
Timber.d("sum of workplace: " + mainSum.getHours() + " : " + mainSum.getMinutes());
Period taskPeriod = tasksPeriodSums.remove(task_id);
if(taskPeriod == null){
tasksPeriodSums.put(task_id, entryPeriod);
} else {
tasksPeriodSums.put(task_id, taskPeriod.plus(entryPeriod));
}
}
}
请帮助,谢谢:)
答案 0 :(得分:2)
这是记录在案的行为,请查看plus(Period)
函数的Javadoc:
/**
* Returns a new period with the specified period added.
* <p>
* Each field of the period is added separately. Thus a period of
* 2 hours 30 minutes plus 3 hours 40 minutes will produce a result
* of 5 hours 70 minutes - see {@link #normalizedStandard()}.
* <p>
...
深入研究normalizedStandard(..)
函数本身的Javadoc,我们看到了什么是权衡:
/**
* Normalizes this period using standard rules, assuming a 12 month year,
* 7 day week, 24 hour day, 60 minute hour and 60 second minute,
*
...
* However to achieve this it makes the assumption that all years are
* 12 months, all weeks are 7 days, all days are 24 hours,
* all hours are 60 minutes and all minutes are 60 seconds. This is not
* true when daylight savings time is considered, and may also not be true
* for some chronologies.
...