From 95b0a8f79ff49894d8a7d3635f2b8b58981fac8b Mon Sep 17 00:00:00 2001 From: zhou yong kang Date: Thu, 5 Mar 2026 19:32:01 +0800 Subject: [PATCH 01/11] fix: fix time instant --- .../writer/ObjectWriterImplInstant.java | 27 +++++------- .../fastjson2/issues_4000/Issue4003.java | 44 +++++++++++++++++++ 2 files changed, 54 insertions(+), 17 deletions(-) create mode 100644 core/src/test/java/com/alibaba/fastjson2/issues_4000/Issue4003.java diff --git a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java index 6cb040c03d..8ea612821a 100644 --- a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java +++ b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java @@ -13,6 +13,7 @@ final class ObjectWriterImplInstant extends DateTimeCodec implements ObjectWriter { static final ObjectWriterImplInstant INSTANCE = new ObjectWriterImplInstant(null, null); + public ObjectWriterImplInstant(String format, Locale locale) { super(format, locale); } @@ -36,10 +37,6 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f : context.getDateFormat(); Instant instant = (Instant) object; - if (dateFormat == null) { - jsonWriter.writeInstant(instant); - return; - } boolean yyyyMMddhhmmss19 = this.yyyyMMddhhmmss19 || (context.isFormatyyyyMMddhhmmss19() && this.format == null); if (yyyyMMddhhmmss14 || yyyyMMddhhmmss19 || yyyyMMdd8 || yyyyMMdd10) { @@ -63,7 +60,7 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f long zeroDay = localEpochDay + DAYS_0000_TO_1970; // find the march-based year - zeroDay -= 60; // adjust to 0000-03-01 so leap day is at end of four year cycle + zeroDay -= 60; // adjust to 0000-03-01 so leap day is at end of four year cycle long adjust = 0; if (zeroDay < 0) { // adjust negative years to positive for calculation @@ -78,7 +75,7 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f yearEst--; doyEst = zeroDay - (365 * yearEst + yearEst / 4 - yearEst / 100 + yearEst / 400); } - yearEst += adjust; // reset any negative year + yearEst += adjust; // reset any negative year int marchDoy0 = (int) doyEst; // convert march-based values back to january-based @@ -122,8 +119,7 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f dayOfMonth, hour, minute, - second - ); + second); return; } @@ -134,8 +130,7 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f dayOfMonth, hour, minute, - second - ); + second); return; } @@ -143,16 +138,14 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f jsonWriter.writeDateYYYMMDD10( year, month, - dayOfMonth - ); + dayOfMonth); return; } jsonWriter.writeDateYYYMMDD8( year, month, - dayOfMonth - ); + dayOfMonth); return; } @@ -183,8 +176,7 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f zdt.getSecond(), zdt.getNano() / 1000_000, zdt.getOffset().getTotalSeconds(), - true - ); + true); return; } } @@ -195,8 +187,9 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f } if (formatter == null) { - jsonWriter.writeZonedDateTime(zdt); + jsonWriter.writeInstant(instant); } else { + ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, context.getZoneId()); String str = formatter.format(zdt); jsonWriter.writeString(str); } diff --git a/core/src/test/java/com/alibaba/fastjson2/issues_4000/Issue4003.java b/core/src/test/java/com/alibaba/fastjson2/issues_4000/Issue4003.java new file mode 100644 index 0000000000..08a9976bb1 --- /dev/null +++ b/core/src/test/java/com/alibaba/fastjson2/issues_4000/Issue4003.java @@ -0,0 +1,44 @@ +package com.alibaba.fastjson2.issues_4000; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONWriter; +import org.junit.jupiter.api.Test; + +import java.time.Instant; +import java.util.TimeZone; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class Issue4003 { + @Test + public void testInstantWithISO8601Format() { + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); + + Instant instant = Instant.parse("2026-02-24T14:50:00Z"); + + String json = JSON.toJSONString(instant, JSONWriter.Feature.UseISO8601DateFormat); + + assertEquals("\"2026-02-24T14:50:00Z\"", json); + } + + @Test + public void testInstantWithISO8601FormatWithMillis() { + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); + + Instant instant = Instant.parse("2026-02-24T14:50:00.123Z"); + + String json = JSON.toJSONString(instant, JSONWriter.Feature.UseISO8601DateFormat); + assertEquals("\"2026-02-24T14:50:00.123Z\"", json); + } + + @Test + public void testInstantWithoutISO8601Format() { + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); + + Instant instant = Instant.parse("2026-02-24T14:50:00Z"); + + String json = JSON.toJSONString(instant); + + assertEquals("\"2026-02-24T14:50:00Z\"", json); + } +} From a2d7470cddc1e6992f0a6810a2d4ce38eea92ba0 Mon Sep 17 00:00:00 2001 From: zhou yong kang Date: Tue, 10 Mar 2026 10:27:25 +0800 Subject: [PATCH 02/11] fix: ci --- .../com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java index 8ea612821a..29ab5bb98d 100644 --- a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java +++ b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java @@ -189,7 +189,6 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f if (formatter == null) { jsonWriter.writeInstant(instant); } else { - ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, context.getZoneId()); String str = formatter.format(zdt); jsonWriter.writeString(str); } From a506349311bfb4a96497d0023932cdbb753405cc Mon Sep 17 00:00:00 2001 From: zhou yong kang Date: Tue, 10 Mar 2026 11:23:22 +0800 Subject: [PATCH 03/11] fix: ci --- .../java/com/alibaba/fastjson2/issues_4000/Issue4003.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/src/test/java/com/alibaba/fastjson2/issues_4000/Issue4003.java b/core/src/test/java/com/alibaba/fastjson2/issues_4000/Issue4003.java index 08a9976bb1..f477c710a9 100644 --- a/core/src/test/java/com/alibaba/fastjson2/issues_4000/Issue4003.java +++ b/core/src/test/java/com/alibaba/fastjson2/issues_4000/Issue4003.java @@ -1,7 +1,6 @@ package com.alibaba.fastjson2.issues_4000; import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONWriter; import org.junit.jupiter.api.Test; import java.time.Instant; @@ -16,7 +15,7 @@ public void testInstantWithISO8601Format() { Instant instant = Instant.parse("2026-02-24T14:50:00Z"); - String json = JSON.toJSONString(instant, JSONWriter.Feature.UseISO8601DateFormat); + String json = JSON.toJSONString(instant, "iso8601"); assertEquals("\"2026-02-24T14:50:00Z\"", json); } @@ -27,7 +26,7 @@ public void testInstantWithISO8601FormatWithMillis() { Instant instant = Instant.parse("2026-02-24T14:50:00.123Z"); - String json = JSON.toJSONString(instant, JSONWriter.Feature.UseISO8601DateFormat); + String json = JSON.toJSONString(instant, "iso8601"); assertEquals("\"2026-02-24T14:50:00.123Z\"", json); } From 75a0f0d70537a6075cea580160647b08c458d245 Mon Sep 17 00:00:00 2001 From: zhou yong kang Date: Tue, 10 Mar 2026 20:36:41 +0800 Subject: [PATCH 04/11] fix --- .../writer/ObjectWriterImplInstant.java | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java index 29ab5bb98d..b9368a1f71 100644 --- a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java +++ b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java @@ -38,6 +38,17 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f Instant instant = (Instant) object; + if (formatUnixTime || (format == null && context.isDateFormatUnixTime())) { + long millis = instant.toEpochMilli(); + jsonWriter.writeInt64(millis / 1000); + return; + } + + if (formatMillis || (format == null && context.isDateFormatMillis())) { + jsonWriter.writeInt64(instant.toEpochMilli()); + return; + } + boolean yyyyMMddhhmmss19 = this.yyyyMMddhhmmss19 || (context.isFormatyyyyMMddhhmmss19() && this.format == null); if (yyyyMMddhhmmss14 || yyyyMMddhhmmss19 || yyyyMMdd8 || yyyyMMdd10) { final long SECONDS_PER_DAY = 60 * 60 * 24; @@ -151,19 +162,6 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, context.getZoneId()); - if (formatUnixTime || (format == null && context.isDateFormatUnixTime())) { - long millis = zdt.toInstant().toEpochMilli(); - jsonWriter.writeInt64(millis / 1000); - return; - } - - if (formatMillis || (format == null && context.isDateFormatMillis())) { - jsonWriter.writeInt64(zdt - .toInstant() - .toEpochMilli()); - return; - } - int year = zdt.getYear(); if (year >= 0 && year <= 9999) { if (formatISO8601 || (format == null && context.isDateFormatISO8601())) { From bf66b5510feae9d86061b1ef1e70bef30840ffc7 Mon Sep 17 00:00:00 2001 From: mengnankkkk Date: Tue, 10 Mar 2026 23:12:00 +0800 Subject: [PATCH 05/11] fix: ci --- .../fastjson2/issues_4000/Issue4003.java | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/core/src/test/java/com/alibaba/fastjson2/issues_4000/Issue4003.java b/core/src/test/java/com/alibaba/fastjson2/issues_4000/Issue4003.java index f477c710a9..1b5602764f 100644 --- a/core/src/test/java/com/alibaba/fastjson2/issues_4000/Issue4003.java +++ b/core/src/test/java/com/alibaba/fastjson2/issues_4000/Issue4003.java @@ -1,42 +1,46 @@ package com.alibaba.fastjson2.issues_4000; -import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONFactory; +import com.alibaba.fastjson2.JSONWriter; import org.junit.jupiter.api.Test; import java.time.Instant; -import java.util.TimeZone; +import java.time.ZoneId; import static org.junit.jupiter.api.Assertions.assertEquals; public class Issue4003 { + private static String toJSONString(Instant instant, String format) { + JSONWriter.Context context = JSONFactory.createWriteContext(); + context.setZoneId(ZoneId.of("UTC")); + if (format != null) { + context.setDateFormat(format); + } + try (JSONWriter writer = JSONWriter.of(context)) { + writer.writeAny(instant); + return writer.toString(); + } + } + @Test public void testInstantWithISO8601Format() { - TimeZone.setDefault(TimeZone.getTimeZone("UTC")); - Instant instant = Instant.parse("2026-02-24T14:50:00Z"); - - String json = JSON.toJSONString(instant, "iso8601"); + String json = toJSONString(instant, "iso8601"); assertEquals("\"2026-02-24T14:50:00Z\"", json); } @Test public void testInstantWithISO8601FormatWithMillis() { - TimeZone.setDefault(TimeZone.getTimeZone("UTC")); - Instant instant = Instant.parse("2026-02-24T14:50:00.123Z"); - - String json = JSON.toJSONString(instant, "iso8601"); + String json = toJSONString(instant, "iso8601"); assertEquals("\"2026-02-24T14:50:00.123Z\"", json); } @Test public void testInstantWithoutISO8601Format() { - TimeZone.setDefault(TimeZone.getTimeZone("UTC")); - Instant instant = Instant.parse("2026-02-24T14:50:00Z"); - - String json = JSON.toJSONString(instant); + String json = toJSONString(instant, null); assertEquals("\"2026-02-24T14:50:00Z\"", json); } From fddbc0947f0855022dbe6f4a71eee5866b49fec1 Mon Sep 17 00:00:00 2001 From: mengnankkkk Date: Tue, 10 Mar 2026 23:30:40 +0800 Subject: [PATCH 06/11] fix: ci --- .../writer/ObjectWriterImplInstant.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java index b9368a1f71..f53232931a 100644 --- a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java +++ b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java @@ -13,7 +13,6 @@ final class ObjectWriterImplInstant extends DateTimeCodec implements ObjectWriter { static final ObjectWriterImplInstant INSTANCE = new ObjectWriterImplInstant(null, null); - public ObjectWriterImplInstant(String format, Locale locale) { super(format, locale); } @@ -71,7 +70,7 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f long zeroDay = localEpochDay + DAYS_0000_TO_1970; // find the march-based year - zeroDay -= 60; // adjust to 0000-03-01 so leap day is at end of four year cycle + zeroDay -= 60;// adjust to 0000-03-01 so leap day is at end of four year cycle long adjust = 0; if (zeroDay < 0) { // adjust negative years to positive for calculation @@ -86,7 +85,7 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f yearEst--; doyEst = zeroDay - (365 * yearEst + yearEst / 4 - yearEst / 100 + yearEst / 400); } - yearEst += adjust; // reset any negative year + yearEst += adjust;// reset any negative year int marchDoy0 = (int) doyEst; // convert march-based values back to january-based @@ -130,7 +129,8 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f dayOfMonth, hour, minute, - second); + second + ); return; } @@ -141,7 +141,8 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f dayOfMonth, hour, minute, - second); + second + ); return; } @@ -149,14 +150,16 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f jsonWriter.writeDateYYYMMDD10( year, month, - dayOfMonth); + dayOfMonth + ); return; } jsonWriter.writeDateYYYMMDD8( year, month, - dayOfMonth); + dayOfMonth + ); return; } @@ -174,7 +177,8 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f zdt.getSecond(), zdt.getNano() / 1000_000, zdt.getOffset().getTotalSeconds(), - true); + true + ); return; } } From b02f91793ec97f528bedba409bf76e95d3a1b139 Mon Sep 17 00:00:00 2001 From: mengnankkkk Date: Wed, 11 Mar 2026 23:18:13 +0800 Subject: [PATCH 07/11] fix: ci --- .../alibaba/fastjson2/writer/ObjectWriterImplInstant.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java index f53232931a..962498aafd 100644 --- a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java +++ b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java @@ -5,14 +5,18 @@ import com.alibaba.fastjson2.util.DateUtils; import java.lang.reflect.Type; -import java.time.*; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.Locale; final class ObjectWriterImplInstant extends DateTimeCodec implements ObjectWriter { - static final ObjectWriterImplInstant INSTANCE = new ObjectWriterImplInstant(null, null); + static final ObjectWriterImplInstant INSTANCE = + new ObjectWriterImplInstant(null, null); + public ObjectWriterImplInstant(String format, Locale locale) { super(format, locale); } From 661faff570a349fce24b9e83555aef9400c3e6df Mon Sep 17 00:00:00 2001 From: mengnankkkk Date: Sat, 14 Mar 2026 19:41:18 +0800 Subject: [PATCH 08/11] fix: ci --- .../src/main/java/com/alibaba/fastjson2/JSONReaderUTF8.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/alibaba/fastjson2/JSONReaderUTF8.java b/core/src/main/java/com/alibaba/fastjson2/JSONReaderUTF8.java index c60aa6109b..77b493b16f 100644 --- a/core/src/main/java/com/alibaba/fastjson2/JSONReaderUTF8.java +++ b/core/src/main/java/com/alibaba/fastjson2/JSONReaderUTF8.java @@ -6074,9 +6074,9 @@ public final LocalDate readLocalDate() { int ch = offset >= end ? EOI : bytes[offset++]; if (comma = (ch == ',')) { ch = offset == end ? EOI : (char) bytes[offset++]; - while (ch <= ' ' && ((1L << ch) & SPACE) != 0) { - ch = offset == end ? EOI : bytes[offset++]; - } + } + while (ch <= ' ' && ((1L << ch) & SPACE) != 0) { + ch = offset == end ? EOI : bytes[offset++]; } if (ch < 0) { char_utf8(ch, offset); From fedc1b4eddafc24d2251e205ff91ee002c7f83db Mon Sep 17 00:00:00 2001 From: mengnankkkk Date: Sat, 14 Mar 2026 20:08:29 +0800 Subject: [PATCH 09/11] fix: fix ci --- .../com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java index 962498aafd..7a7bc00aef 100644 --- a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java +++ b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java @@ -74,7 +74,7 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f long zeroDay = localEpochDay + DAYS_0000_TO_1970; // find the march-based year - zeroDay -= 60;// adjust to 0000-03-01 so leap day is at end of four year cycle + zeroDay -= 60; // adjust to 0000-03-01 so leap day is at end of four year cycle long adjust = 0; if (zeroDay < 0) { // adjust negative years to positive for calculation @@ -89,7 +89,7 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f yearEst--; doyEst = zeroDay - (365 * yearEst + yearEst / 4 - yearEst / 100 + yearEst / 400); } - yearEst += adjust;// reset any negative year + yearEst += adjust; // reset any negative year int marchDoy0 = (int) doyEst; // convert march-based values back to january-based From d61fc1dab970fac6e65e03f948939c19128678ba Mon Sep 17 00:00:00 2001 From: mengnankkkk Date: Sat, 14 Mar 2026 22:13:35 +0800 Subject: [PATCH 10/11] fix: add --- .../com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java index 7a7bc00aef..4ef560f220 100644 --- a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java +++ b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java @@ -5,7 +5,9 @@ import com.alibaba.fastjson2.util.DateUtils; import java.lang.reflect.Type; +import java.time.DateTimeException; import java.time.Instant; +import java.time.Year; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; From 928154eed5d5829bfec70321e8e5976d173b5337 Mon Sep 17 00:00:00 2001 From: mengnankkkk Date: Wed, 25 Mar 2026 11:56:26 +0800 Subject: [PATCH 11/11] fix; add fast fail --- .../writer/ObjectWriterImplInstant.java | 14 +++++++---- .../fastjson2/issues_4000/Issue4003.java | 25 +++++++++++++++++++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java index 4ef560f220..8c725ecb45 100644 --- a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java +++ b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplInstant.java @@ -5,11 +5,7 @@ import com.alibaba.fastjson2.util.DateUtils; import java.lang.reflect.Type; -import java.time.DateTimeException; -import java.time.Instant; -import java.time.Year; -import java.time.ZoneId; -import java.time.ZonedDateTime; +import java.time.*; import java.time.format.DateTimeFormatter; import java.util.Locale; @@ -54,6 +50,14 @@ public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type f return; } + if (dateFormat == null + && !formatISO8601 && !context.isDateFormatISO8601() + && !yyyyMMddhhmmss14 && !yyyyMMddhhmmss19 + && !yyyyMMdd8 && !yyyyMMdd10) { + jsonWriter.writeInstant(instant); + return; + } + boolean yyyyMMddhhmmss19 = this.yyyyMMddhhmmss19 || (context.isFormatyyyyMMddhhmmss19() && this.format == null); if (yyyyMMddhhmmss14 || yyyyMMddhhmmss19 || yyyyMMdd8 || yyyyMMdd10) { final long SECONDS_PER_DAY = 60 * 60 * 24; diff --git a/core/src/test/java/com/alibaba/fastjson2/issues_4000/Issue4003.java b/core/src/test/java/com/alibaba/fastjson2/issues_4000/Issue4003.java index 1b5602764f..f96a6e4a3c 100644 --- a/core/src/test/java/com/alibaba/fastjson2/issues_4000/Issue4003.java +++ b/core/src/test/java/com/alibaba/fastjson2/issues_4000/Issue4003.java @@ -44,4 +44,29 @@ public void testInstantWithoutISO8601Format() { assertEquals("\"2026-02-24T14:50:00Z\"", json); } + + @Test + public void testInstantWithNonUTCZone() { + Instant instant = Instant.parse("2026-02-24T14:50:00Z"); + JSONWriter.Context context = JSONFactory.createWriteContext(); + context.setZoneId(ZoneId.of("Asia/Shanghai")); + try (JSONWriter writer = JSONWriter.of(context)) { + writer.writeAny(instant); + assertEquals("\"2026-02-24T14:50:00Z\"", writer.toString()); + } + } + + @Test + public void testInstantWithUnixTimeFormat() { + Instant instant = Instant.parse("2026-02-24T14:50:00Z"); + String json = toJSONString(instant, "unixtime"); + assertEquals("1771944600", json); + } + + @Test + public void testInstantWithMillisFormat() { + Instant instant = Instant.parse("2026-02-24T14:50:00.123Z"); + String json = toJSONString(instant, "millis"); + assertEquals("1771944600123", json); + } }