Joda期间不会将所有分钟转换为小时" 8h,132m"

时间:2015-05-29 19:30:00

标签: java android jodatime period minute

我在一个对象中存储了两个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));
            }
        }
    }

请帮助,谢谢:)

1 个答案:

答案 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.
...