[英]PeriodFormatter not showing days
我使用PeriodFormatter返回一個字符串,顯示事件發生的時間。 下面的代碼不斷創建字符串,如1146小時39分鍾,而不是x天y小時z分鍾。 有任何想法嗎?
謝謝,內森
PeriodFormatter formatter = new PeriodFormatterBuilder()
.printZeroNever()
.appendDays()
.appendSuffix( "d " )
.appendHours()
.appendSuffix( "h " )
.appendMinutes()
.appendSuffix( "m " )
.toFormatter();
return formatter.print( duration.toPeriod() );
這是因為您使用Duratoin :: toPeriod方法將Duration轉換為Period
這在Joda-time文檔中有所描述:
public Period toPeriod()使用標准句點類型和ISO年表將此持續時間轉換為Period實例。 僅使用句點類型中的精確字段。 因此,僅使用該時段上的小時,分鍾,秒和毫秒字段 。 不會填充年,月,周和日字段。
如果沒有開始日期(或結束日期),則無法正確計算期間金額,因為有些日子可能是24小時或23 小時 (由於夏令時)
你應該使用方法Duration :: toPeriodFrom方法
例如
Duration duration = new Duration(date1, date2);
// ...
formatter.print( duration.toPeriodFrom(date1));
正如Ilya默認的那樣,toPeriod方法只會填充小時,分鍾,秒和毫秒字段 。 但實際上你可以使用normalizedStandard
將其恢復normalizedStandard
String periodFormat(Duration d) {
return PERIOD_FORMATTER.print(d.toPeriod().normalizedStandard());
}
static final PeriodFormatter PERIOD_FORMATTER = new PeriodFormatterBuilder()
.appendWeeks().appendSuffix("w")
.appendSeparator("_")
.printZeroRarelyLast()
.appendDays().appendSuffix("d")
.appendSeparator("_")
.printZeroRarelyLast()
.appendHours().appendSuffix("h")
.appendSeparator("_")
.printZeroRarelyLast()
.appendMinutes().appendSuffix("m")
.appendSeparator("_")
.printZeroRarelyLast()
.toFormatter();
將傳遞
@Test
public void periodFormatTest {
assertThat(periodFormat(Duration.standardMinutes(5))).isEqualTo("5m");
assertThat(periodFormat(Duration.standardMinutes(60))).isEqualTo("1h");
assertThat(periodFormat(Duration.standardDays(1))).isEqualTo("1d");
assertThat(periodFormat(Duration.standardDays(2))).isEqualTo("2d");
assertThat(periodFormat(Duration.standardHours(47))).isEqualTo("1d_23h");
}:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.