簡體   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