Joda时间 - 无法按分钟计算月份/年份

时间:2015-01-26 11:00:47

标签: java jodatime periodformatter

在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;
}

1 个答案:

答案 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不支持开箱即用的这种舍入功能(与其他库相比)。