From 0944b07c909f2b2abacc805147c00bcea738efed Mon Sep 17 00:00:00 2001 From: Gaurav Date: Thu, 26 Dec 2024 00:48:01 +0100 Subject: [PATCH 1/2] Preserve milliseconds in build info timestamp See gh-43612 --- .../boot/maven/MavenBuildOutputTimestamp.java | 2 +- .../boot/maven/MavenBuildOutputTimestampTests.java | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MavenBuildOutputTimestamp.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MavenBuildOutputTimestamp.java index 5ed4d50784..8ecf954e00 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MavenBuildOutputTimestamp.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MavenBuildOutputTimestamp.java @@ -88,7 +88,7 @@ class MavenBuildOutputTimestamp { try { Instant instant = OffsetDateTime.parse(this.timestamp) .withOffsetSameInstant(ZoneOffset.UTC) - .truncatedTo(ChronoUnit.SECONDS) + .truncatedTo(ChronoUnit.MILLIS) .toInstant(); if (instant.isBefore(DATE_MIN) || instant.isAfter(DATE_MAX)) { throw new IllegalArgumentException( diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/MavenBuildOutputTimestampTests.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/MavenBuildOutputTimestampTests.java index 23641fef46..d889f557ec 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/MavenBuildOutputTimestampTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/MavenBuildOutputTimestampTests.java @@ -52,8 +52,13 @@ class MavenBuildOutputTimestampTests { } @Test - void shouldParseIso8601WithMilliseconds() { - assertThat(parse("2011-12-03T10:15:30.12345Z")).isEqualTo(Instant.parse("2011-12-03T10:15:30Z")); + void shouldParseIso8601WithSeconds_whenMillisecondsNotPresent() { + assertThat(parse("2011-12-03T10:15:30Z")).isEqualTo(Instant.parse("2011-12-03T10:15:30Z")); + } + + @Test + void shouldParseIso8601WithMillisecondsPreserved_whenPresent() { + assertThat(parse("2024-12-19T19:59:39.040Z")).isEqualTo(Instant.parse("2024-12-19T19:59:39.040Z")); } @Test From 7e9fda8216acd298f585c49077986cd238ce94b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Thu, 26 Dec 2024 15:53:42 +0100 Subject: [PATCH 2/2] Polish "Preserve milliseconds in build info timestamp" See gh-43612 --- .../boot/maven/MavenBuildOutputTimestamp.java | 6 +----- .../boot/maven/MavenBuildOutputTimestampTests.java | 12 ++++++------ 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MavenBuildOutputTimestamp.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MavenBuildOutputTimestamp.java index 8ecf954e00..4782bb9ef9 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MavenBuildOutputTimestamp.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MavenBuildOutputTimestamp.java @@ -21,7 +21,6 @@ import java.time.Instant; import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeParseException; -import java.time.temporal.ChronoUnit; import org.springframework.util.StringUtils; @@ -86,10 +85,7 @@ class MavenBuildOutputTimestamp { return null; } try { - Instant instant = OffsetDateTime.parse(this.timestamp) - .withOffsetSameInstant(ZoneOffset.UTC) - .truncatedTo(ChronoUnit.MILLIS) - .toInstant(); + Instant instant = OffsetDateTime.parse(this.timestamp).withOffsetSameInstant(ZoneOffset.UTC).toInstant(); if (instant.isBefore(DATE_MIN) || instant.isAfter(DATE_MAX)) { throw new IllegalArgumentException( String.format("'%s' is not within the valid range %s to %s", instant, DATE_MIN, DATE_MAX)); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/MavenBuildOutputTimestampTests.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/MavenBuildOutputTimestampTests.java index d889f557ec..516d849ad9 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/MavenBuildOutputTimestampTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/MavenBuildOutputTimestampTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -48,17 +48,17 @@ class MavenBuildOutputTimestampTests { @Test void shouldParseIso8601() { - assertThat(parse("2011-12-03T10:15:30Z")).isEqualTo(Instant.parse("2011-12-03T10:15:30Z")); + assertThat(parse("2011-12-03T10:15:30Z")).isEqualTo(Instant.parse("2011-12-03T10:15:30.000Z")); } @Test - void shouldParseIso8601WithSeconds_whenMillisecondsNotPresent() { - assertThat(parse("2011-12-03T10:15:30Z")).isEqualTo(Instant.parse("2011-12-03T10:15:30Z")); + void shouldParseIso8601WithMilliseconds() { + assertThat(parse("2011-12-03T10:15:30.123Z")).isEqualTo(Instant.parse("2011-12-03T10:15:30.123Z")); } @Test - void shouldParseIso8601WithMillisecondsPreserved_whenPresent() { - assertThat(parse("2024-12-19T19:59:39.040Z")).isEqualTo(Instant.parse("2024-12-19T19:59:39.040Z")); + void shouldParseIso8601WithSeconds() { + assertThat(parse("2011-12-03T10:15:30Z")).isEqualTo(Instant.parse("2011-12-03T10:15:30.000Z")); } @Test