JodaTime 无法规范化 PeriodType

JodaTime unable to normalize PeriodType

所以我有 2 个日期选择器用于开始时间和结束时间,它们返回一个 DateTime。

我需要以 "hours hr mins hr" 的格式计算这两个时间之间的持续时间,例如“1 小时 30 分钟”。 如果有天差,会显示“24小时”,所以我们用小时代替天。

我遇到的问题是,无论我以何种方式进行这项工作,如果用户选择提前一个月,它就会中断。他们永远不应该选择提前一个月,但可以选择。

我收到此错误:

java.lang.UnsupportedOperationException: Unable to normalize as PeriodType is missing either years or months but period has a month/year amount: P1M3W6DT1H
        at org.joda.time.Period.normalizedStandard(Period.java:1640)

我的代码是:

Period durationHoursAndMinutes =  new Period(startDate.toLocalDateTime(), endDate.toLocalDateTime()).normalizedStandard(PeriodType.time());
PeriodFormatter formatter = new PeriodFormatterBuilder()
  .appendHours()
  .appendSuffix(getResources().getString(R.string.mytrips_tripview_rail_waitTime_hr))
  .appendSeparator(" ")
  .appendMinutes()
  .appendSuffix(getResources().getString(R.string.mytrips_tripview_rail_waitTime_min))
.toFormatter();

if(durationHoursAndMinutes.getMinutes() > 0){
  return formatter.print(durationHoursAndMinutes);
}else {
  return null;
}

我查看了 PeriodType 的代码,它说如果月份 != 0 则抛出异常,但事实并非如此。只是想知道是否有办法解决这个问题。 感谢您的帮助

怀疑最简单的方法就是将PeriodType传递给构造函数:

new Period(
    startDate.toLocalDateTime(),
    endDate.toLocalDateTime(),
    PeriodType.time());

那么你不需要执行任何其他规范化。