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());
那么你不需要执行任何其他规范化。
所以我有 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());
那么你不需要执行任何其他规范化。