乔达时期没有将所有分钟转换为小时“8h,132m”
Joda Period not converting all minutes to hours "8h, 132m"
我在一个对象中存储了两个 DateTimes
(Joda),然后我通过 new Period(dateTime1, dateTime2)
从对象中得到了一个 Period
。
然后我想将不同对象的所有时间段加在一起。
我既将所有时间段加到一个变量中,又将存储在 HashMap<long, Period>
.
中的较小时间段中的一些时间段相加
结果和问题是这样的。
第一个时段使用 PeriodFormat.getDefault().print(p)
得到“2 小时 30 分钟”(如果我连接 getHours 和 getMinutes,则值相同)。
第二个值“5 小时 52 分钟”。到目前为止,一切都很好。
但是当我在第 3 和第 4 次这样做时,分钟不再转换为小时。
“5 小时 103 分钟”
“8 小时 132 分钟”
应该是 10h 和 12m,但是如您所见。那不是我得到的。问题是什么? 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));
}
}
}
请帮忙,谢谢:)
这是记录在案的行为,请查看 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.
...
我在一个对象中存储了两个 DateTimes
(Joda),然后我通过 new Period(dateTime1, dateTime2)
从对象中得到了一个 Period
。
然后我想将不同对象的所有时间段加在一起。
我既将所有时间段加到一个变量中,又将存储在 HashMap<long, Period>
.
结果和问题是这样的。
第一个时段使用 PeriodFormat.getDefault().print(p)
得到“2 小时 30 分钟”(如果我连接 getHours 和 getMinutes,则值相同)。
第二个值“5 小时 52 分钟”。到目前为止,一切都很好。
但是当我在第 3 和第 4 次这样做时,分钟不再转换为小时。
“5 小时 103 分钟”
“8 小时 132 分钟”
应该是 10h 和 12m,但是如您所见。那不是我得到的。问题是什么? 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));
}
}
}
请帮忙,谢谢:)
这是记录在案的行为,请查看 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.
...