diff --git a/core/spring-boot/src/main/java/org/springframework/boot/convert/PeriodStyle.java b/core/spring-boot/src/main/java/org/springframework/boot/convert/PeriodStyle.java index 1feaafe59d3..cb73a7142ad 100644 --- a/core/spring-boot/src/main/java/org/springframework/boot/convert/PeriodStyle.java +++ b/core/spring-boot/src/main/java/org/springframework/boot/convert/PeriodStyle.java @@ -31,6 +31,7 @@ import org.springframework.util.Assert; * * @author Eddú Meléndez * @author Edson Chávez + * @author Yingzi Zhang * @author Valentine Wu * @since 2.3.0 * @see Period @@ -262,10 +263,13 @@ public enum PeriodStyle { } private boolean isZero(Period value) { - return intValue(value) == 0; + return value.isZero() || intValue(value) == 0; } private int intValue(Period value) { + if (value.isZero()) { + return 0; + } Assert.state(this.intValue != null, () -> "intValue cannot be extracted from " + name()); return this.intValue.apply(value); } diff --git a/core/spring-boot/src/test/java/org/springframework/boot/convert/PeriodStyleTests.java b/core/spring-boot/src/test/java/org/springframework/boot/convert/PeriodStyleTests.java index 27f093a7ea8..7de907443f3 100644 --- a/core/spring-boot/src/test/java/org/springframework/boot/convert/PeriodStyleTests.java +++ b/core/spring-boot/src/test/java/org/springframework/boot/convert/PeriodStyleTests.java @@ -29,6 +29,7 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException * * @author Eddú Meléndez * @author Edson Chávez + * @author Yingzi Zhang * @author Valentine Wu */ class PeriodStyleTests { @@ -220,6 +221,7 @@ class PeriodStyleTests { void printSimpleWhenZeroWithUnitShouldPrintInUnit() { Period period = Period.ofYears(0); assertThat(PeriodStyle.SIMPLE.print(period, ChronoUnit.YEARS)).isEqualTo("0y"); + assertThat(PeriodStyle.SIMPLE.print(Period.ZERO, ChronoUnit.WEEKS)).isEqualTo("0w"); } @Test diff --git a/core/spring-boot/src/test/java/org/springframework/boot/convert/PeriodToStringConverterTests.java b/core/spring-boot/src/test/java/org/springframework/boot/convert/PeriodToStringConverterTests.java index 6ee24247698..a975ef5d327 100644 --- a/core/spring-boot/src/test/java/org/springframework/boot/convert/PeriodToStringConverterTests.java +++ b/core/spring-boot/src/test/java/org/springframework/boot/convert/PeriodToStringConverterTests.java @@ -32,6 +32,7 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Eddú Melendez * @author Edson Chávez + * @author Yingzi Zhang */ class PeriodToStringConverterTests { @@ -63,6 +64,14 @@ class PeriodToStringConverterTests { assertThat(converted).isEqualTo("0y"); } + @ConversionServiceTest + void convertWithFormatAndWeeksUnitWhenZeroShouldUseFormatAndUnit(ConversionService conversionService) { + String converted = (String) conversionService.convert(Period.ZERO, + MockPeriodTypeDescriptor.get(ChronoUnit.WEEKS, PeriodStyle.SIMPLE), + TypeDescriptor.valueOf(String.class)); + assertThat(converted).isEqualTo("0w"); + } + @ConversionServiceTest void convertWithFormatAndUnitWhenNonZeroShouldUseFormatAndIgnoreUnit(ConversionService conversionService) { String converted = (String) conversionService.convert(Period.of(1, 0, 3),