|
18 | 18 |
|
19 | 19 | import java.io.IOException;
|
20 | 20 | import java.time.LocalDateTime;
|
| 21 | +import java.time.OffsetDateTime; |
21 | 22 | import java.time.ZoneId;
|
22 | 23 | import java.time.ZoneOffset;
|
23 | 24 | import java.time.ZonedDateTime;
|
24 | 25 | import java.time.format.DateTimeFormatter;
|
25 | 26 | import java.time.format.DateTimeParseException;
|
| 27 | +import java.util.Arrays; |
26 | 28 | import java.util.Map;
|
27 | 29 | import java.util.TimeZone;
|
28 | 30 |
|
@@ -282,6 +284,33 @@ public void testDeserializationWithoutColonInTimeZoneWithTZDB() throws Throwable
|
282 | 284 | wrapper.value);
|
283 | 285 | }
|
284 | 286 |
|
| 287 | + @Test |
| 288 | + public void ZonedDateTime_with_offset_can_be_deserialized() throws Exception { |
| 289 | + ObjectReader r = newMapper().readerFor(ZonedDateTime.class) |
| 290 | + .without(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE); |
| 291 | + |
| 292 | + String base = "2015-07-24T12:23:34.184"; |
| 293 | + for (String offset : Arrays.asList("+00", "-00")) { |
| 294 | + String time = base + offset; |
| 295 | + assertEquals(ZonedDateTime.parse(time), r.readValue('"' + time + '"')); |
| 296 | + assertEquals(ZonedDateTime.parse("2015-07-24T12:23:34.184Z"), r.readValue('"' + time + '"')); |
| 297 | + assertEquals(ZonedDateTime.parse("2015-07-24T12:23:34.184Z"), r.readValue('"' + time + "00" + '"')); |
| 298 | + assertEquals(ZonedDateTime.parse("2015-07-24T12:23:34.184Z"), r.readValue('"' + time + ":00" + '"')); |
| 299 | + assertEquals(ZonedDateTime.parse("2015-07-24T12:23:34.184" + offset + ":30" ), r.readValue('"' + time + "30" + '"')); |
| 300 | + assertEquals(ZonedDateTime.parse("2015-07-24T12:23:34.184" + offset + ":30" ), r.readValue('"' + time + ":30" + '"')); |
| 301 | + } |
| 302 | + |
| 303 | + for (String prefix : Arrays.asList("-", "+")) { |
| 304 | + for (String hours : Arrays.asList("00", "01", "02", "03", "11", "12")) { |
| 305 | + String time = base + prefix + hours; |
| 306 | + assertEquals(ZonedDateTime.parse(time), r.readValue('"' + time + '"')); |
| 307 | + assertEquals(ZonedDateTime.parse(time), r.readValue('"' + time + "00" + '"')); |
| 308 | + assertEquals(ZonedDateTime.parse(time), r.readValue('"' + time + ":00" + '"')); |
| 309 | + assertEquals(ZonedDateTime.parse(time + ":30"), r.readValue('"' + time + "30" + '"')); |
| 310 | + assertEquals(ZonedDateTime.parse(time + ":30"), r.readValue('"' + time + ":30" + '"')); |
| 311 | + } |
| 312 | + } |
| 313 | + } |
285 | 314 |
|
286 | 315 | private void expectFailure(String json) throws Throwable {
|
287 | 316 | try {
|
|
0 commit comments