From b21366db6d3e0f3f5b677bd89f5959cf76076a3a Mon Sep 17 00:00:00 2001 From: Yingzi Zhang Date: Mon, 28 Sep 2026 09:48:47 -0400 Subject: [PATCH] Fix formatting a zero period with a weeks unit See gh-51892 Signed-off-by: Yingzi Zhang --- .../org/springframework/boot/convert/PeriodStyle.java | 3 ++- .../springframework/boot/convert/PeriodStyleTests.java | 6 ++++++ .../boot/convert/PeriodToStringConverterTests.java | 9 +++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) 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..f46ba53f394 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 @@ -85,7 +86,7 @@ public enum PeriodStyle { @Override public String print(Period value, @Nullable ChronoUnit unit) { if (value.isZero()) { - return Unit.fromChronoUnit(unit).print(value); + return "0" + Unit.fromChronoUnit(unit).suffix; } StringBuilder result = new StringBuilder(); append(result, value, Unit.YEARS); 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..3cd5c0ee0cb 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 { @@ -222,6 +223,11 @@ class PeriodStyleTests { assertThat(PeriodStyle.SIMPLE.print(period, ChronoUnit.YEARS)).isEqualTo("0y"); } + @Test + void printSimpleWhenZeroWithWeeksUnitShouldPrintInWeeks() { + assertThat(PeriodStyle.SIMPLE.print(Period.ZERO, ChronoUnit.WEEKS)).isEqualTo("0w"); + } + @Test void printSimpleWhenNonZeroShouldIgnoreUnit() { Period period = Period.of(1, 2, 3); 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),