繁体   English   中英

Joda时间-无法以分钟为单位来计算月/年

[英]Joda time - Not able to calculate months / years from Period in minutes

我在Android Studio项目中使用joda-time-2.5。

我无法解决我缺少的能够正确格式化年份和/或月份的字符串的问题。

期间可以正确计算-但不会超出“周”。 1000000分钟的格式正确设置为“ 99周,1天,10小时+ 40分钟”。 但不是月/年格式,例如。 “ 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;
}

事实是,您已经认识严格意义上讲分钟不能转换成几个月 Joda-Time文档也说明了这一点。

如果期间包含年或月,则将月标准化为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不开箱即用地支持这种舍入功能(与其他库相反)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM