在Android Studio项目中使用joda-time-2.5。
我无法解决我所遗漏的问题,无法用数年和/或数月正确格式化字符串。
期间计算正确 - 但不会超过“周”,例如。 1000000分钟被正确格式化为“99wks,1day,10hrs + 40mins”。但不是几个月/年的格式,例如。 “1年,10个月,3周,1天,10小时+ 40分钟”等
我尝试了各种各样的
Period pA = new Period(mA);
Period pA = new Period(mA, PeriodType.standard());
Period pA = new Period(mA, PeriodType.yearMonthDay());
等但这些没有区别。
我尝试添加/删除各种.appends/years/months/printZero
- 这没有任何区别。
我尝试更改期间单位:如果我使用月份或年份,它将起作用,例如
Months mA = Months.months(15);
Period pA = new Period(mA, PeriodType.standard());
正确地产生“1年,3个月”。
我理解'年'和'月'不准确(在这种情况下近似实际上会很好),但我认为这是PeriodTypes / yearMonthDay或标准处理的内容?
我也试过PeriodFormat.getDefault().print(period)
但没有成功。
请在下面找到代码:
private String formatTimeStr(int minutes){
Minutes mA = Minutes.minutes(minutes);
Period pA = new Period(mA);
PeriodFormatter dhm = new PeriodFormatterBuilder()
.printZeroNever()
.appendYears()
.appendSuffix("year","years")
.appendSeparator(", ")
.appendMonths()
.appendSuffix("mnth", "mnths")
.appendSeparator(", ")
.appendWeeks()
.appendSuffix("wk", "wks")
.appendSeparator(", ")
.appendDays()
.appendSuffix("day", "days")
.appendSeparator(", ")
.appendHours()
.appendSuffix("hr", "hrs")
.appendSeparator(" & ")
.appendMinutes()
.appendSuffix("min", "mins")
.toFormatter();
String formattedTimeStr = dhm.print(pA.normalizedStandard());
return formattedTimeStr;
}
答案 0 :(得分:0)
事实上,正如您已经认识到严格意义上分钟不可转换为月数。 Joda-Time-documentation也说出来了。
如果期限包含年份或月份,那么月份将是 标准化为0到11之间。字段和以下字段将是 必要时归一化,但这不会溢出 月场。因此,1年15个月的期限将标准化为2 3个月。 但是1个月40天的时间仍然是1个月 40天。
从技术上讲,转换有两种选择。
a)您定义参考时间戳。然后你可以做到以下几点:
LocalDateTime tsp1 = new LocalDateTime(); // now as example
LocalDateTime tsp2 = tsp1.plusMinutes(minutes);
Period p = new Period(tsp1, tsp2, PeriodType.standard()); // or other period type?
b)您可以根据时间单位的估计长度找到并开发自己的舍入算法。例如,您可能愿意接受30.5天或类似的舍入月份长度。如果用例不需要绝对精度,这可以被认为是公平的解决方案,因为这在社交媒体场景中通常是正确的。据我所知,Joda-Time不支持开箱即用的这种舍入功能(与其他库相比)。