As Ilya said by default, the toPeriod method will only fill in hours, minutes, seconds, and milliseconds . But you can normalize this with normalizedStandard so that
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();
Will pass
@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"); }:
source share