簡體   English   中英

PeriodFormatter不顯示天數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM