From 7026f6cc9113a8f109304a28d9faae0a0b98ee30 Mon Sep 17 00:00:00 2001 From: "Kim, Joo Hyuk" Date: Mon, 5 May 2025 02:00:28 +0900 Subject: [PATCH 1/5] Test dataformat-joda#92 --- .../jsr310/ser/ZonedDateTimeSerTest.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java b/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java index aaca9ff6..97eab96d 100644 --- a/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java +++ b/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java @@ -17,10 +17,8 @@ package com.fasterxml.jackson.datatype.jsr310.ser; import com.fasterxml.jackson.core.JsonProcessingException; -import java.time.Instant; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; + +import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoField; import java.time.temporal.ChronoUnit; @@ -30,14 +28,12 @@ import org.junit.jupiter.api.Test; +import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeFeature; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.datatype.jsr310.DecimalUtils; import com.fasterxml.jackson.datatype.jsr310.MockObjectConfiguration; @@ -975,6 +971,20 @@ public void testShapeInt() throws JsonProcessingException { assertEquals("{\"t1\":1651053600000,\"t2\":1651053600.000000000}", json1); } + // [dataformat-joda#92] DateTime serialization result is not same as Java 8 ZonedDateTime + @Test + public void testSerializationWithZone() throws Exception + { + ZonedDateTime java8ZonedDateTime = ZonedDateTime.of(2023, 10, 1, 12, 0, 0, 0, + ZoneId.of("Asia/Shanghai")); + + String actual = MAPPER.writer() + .without(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .writeValueAsString(java8ZonedDateTime); + + assertEquals("\"2023-10-01T12:00:00+08:00\"", actual); + } + private static void assertIsEqual(ZonedDateTime expected, ZonedDateTime actual) { assertTrue(expected.isEqual(actual), From 69e7756ab646c5c40b075237ce8d226df4fa86c0 Mon Sep 17 00:00:00 2001 From: "Kim, Joo Hyuk" Date: Mon, 5 May 2025 02:06:24 +0900 Subject: [PATCH 2/5] Strange behavior found? --- .../jsr310/ser/ZonedDateTimeSerTest.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java b/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java index 97eab96d..b8b58af4 100644 --- a/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java +++ b/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java @@ -38,6 +38,7 @@ import com.fasterxml.jackson.datatype.jsr310.DecimalUtils; import com.fasterxml.jackson.datatype.jsr310.MockObjectConfiguration; import com.fasterxml.jackson.datatype.jsr310.ModuleTestBase; +import com.fasterxml.jackson.datatype.jsr310.testutil.failure.JacksonTestFailureExpected; import static org.junit.jupiter.api.Assertions.*; @@ -985,6 +986,22 @@ public void testSerializationWithZone() throws Exception assertEquals("\"2023-10-01T12:00:00+08:00\"", actual); } + // [dataformat-joda#92] DateTime serialization result is not same as Java 8 ZonedDateTime + @Test + public void testSerializationWithZoneWithDefaultTimeZone() throws Exception + { + ZonedDateTime java8ZonedDateTime = ZonedDateTime.of(2023, 10, 1, 12, 0, 0, 0, + ZoneId.of("Asia/Shanghai")); + + String actual = MAPPER.writer() + .with(TimeZone.getTimeZone("UTC")) + .without(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .writeValueAsString(java8ZonedDateTime); + + // Actual :"2023-10-01T04:00:00Z" + assertEquals("\"2023-10-01T12:00:00+08:00\"", actual); + } + private static void assertIsEqual(ZonedDateTime expected, ZonedDateTime actual) { assertTrue(expected.isEqual(actual), From b61515e4daebd620840d130abd0df68b065cd2e4 Mon Sep 17 00:00:00 2001 From: "Kim, Joo Hyuk" Date: Mon, 5 May 2025 02:13:53 +0900 Subject: [PATCH 3/5] Update ZonedDateTimeSerTest.java --- .../jsr310/ser/ZonedDateTimeSerTest.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java b/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java index b8b58af4..e6d5cb43 100644 --- a/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java +++ b/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java @@ -993,13 +993,21 @@ public void testSerializationWithZoneWithDefaultTimeZone() throws Exception ZonedDateTime java8ZonedDateTime = ZonedDateTime.of(2023, 10, 1, 12, 0, 0, 0, ZoneId.of("Asia/Shanghai")); - String actual = MAPPER.writer() + // Without WRITE_DATES_WITH_CONTEXT_TIME_ZONE + assertEquals("\"2023-10-01T12:00:00+08:00\"", + MAPPER.writer() .with(TimeZone.getTimeZone("UTC")) + .without(SerializationFeature.WRITE_DATES_WITH_CONTEXT_TIME_ZONE) .without(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .writeValueAsString(java8ZonedDateTime); + .writeValueAsString(java8ZonedDateTime)); - // Actual :"2023-10-01T04:00:00Z" - assertEquals("\"2023-10-01T12:00:00+08:00\"", actual); + // With WRITE_DATES_WITH_CONTEXT_TIME_ZONE + assertEquals("\"2023-10-01T04:00:00Z\"", + MAPPER.writer() + .with(TimeZone.getTimeZone("UTC")) + .with(SerializationFeature.WRITE_DATES_WITH_CONTEXT_TIME_ZONE) + .without(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .writeValueAsString(java8ZonedDateTime)); } private static void assertIsEqual(ZonedDateTime expected, ZonedDateTime actual) From 6b101b2bb7245aa3a297cee138d9c7e8aa9cc29d Mon Sep 17 00:00:00 2001 From: "Kim, Joo Hyuk" Date: Mon, 5 May 2025 02:15:02 +0900 Subject: [PATCH 4/5] Update ZonedDateTimeSerTest.java --- .../datatype/jsr310/ser/ZonedDateTimeSerTest.java | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java b/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java index e6d5cb43..2005fd6d 100644 --- a/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java +++ b/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java @@ -972,20 +972,6 @@ public void testShapeInt() throws JsonProcessingException { assertEquals("{\"t1\":1651053600000,\"t2\":1651053600.000000000}", json1); } - // [dataformat-joda#92] DateTime serialization result is not same as Java 8 ZonedDateTime - @Test - public void testSerializationWithZone() throws Exception - { - ZonedDateTime java8ZonedDateTime = ZonedDateTime.of(2023, 10, 1, 12, 0, 0, 0, - ZoneId.of("Asia/Shanghai")); - - String actual = MAPPER.writer() - .without(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .writeValueAsString(java8ZonedDateTime); - - assertEquals("\"2023-10-01T12:00:00+08:00\"", actual); - } - // [dataformat-joda#92] DateTime serialization result is not same as Java 8 ZonedDateTime @Test public void testSerializationWithZoneWithDefaultTimeZone() throws Exception From 83d744361f1dcf47e02fbc9d3d1707882f4dfdcf Mon Sep 17 00:00:00 2001 From: "Kim, Joo Hyuk" Date: Mon, 5 May 2025 02:15:36 +0900 Subject: [PATCH 5/5] Update ZonedDateTimeSerTest.java --- .../datatype/jsr310/ser/ZonedDateTimeSerTest.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java b/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java index 2005fd6d..614d9089 100644 --- a/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java +++ b/datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerTest.java @@ -17,8 +17,10 @@ package com.fasterxml.jackson.datatype.jsr310.ser; import com.fasterxml.jackson.core.JsonProcessingException; - -import java.time.*; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZoneOffset; +import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoField; import java.time.temporal.ChronoUnit; @@ -28,17 +30,18 @@ import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeFeature; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.datatype.jsr310.DecimalUtils; import com.fasterxml.jackson.datatype.jsr310.MockObjectConfiguration; import com.fasterxml.jackson.datatype.jsr310.ModuleTestBase; -import com.fasterxml.jackson.datatype.jsr310.testutil.failure.JacksonTestFailureExpected; import static org.junit.jupiter.api.Assertions.*;