[英]How to calculate No of Years, Months and days between two dates using Joda-Time
[英]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.