|
32 | 32 | import java.net.URL; |
33 | 33 | import java.nio.charset.StandardCharsets; |
34 | 34 | import java.nio.file.Path; |
| 35 | +import java.text.DateFormat; |
| 36 | +import java.text.SimpleDateFormat; |
35 | 37 | import java.time.Instant; |
36 | 38 | import java.time.LocalDateTime; |
37 | 39 | import java.time.ZoneId; |
| 40 | +import java.time.ZoneOffset; |
| 41 | +import java.time.format.DateTimeFormatter; |
38 | 42 | import java.util.*; |
39 | 43 | import java.util.regex.Pattern; |
40 | 44 |
|
|
43 | 47 |
|
44 | 48 | class Serialization { |
45 | 49 | private static final Gson gson = new GsonBuilder().disableHtmlEscaping() |
| 50 | + .registerTypeAdapter(Date.class, new DateSerializer()) |
| 51 | + .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer()) |
46 | 52 | .registerTypeAdapter(SameSiteAttribute.class, new SameSiteAdapter().nullSafe()) |
47 | 53 | .registerTypeAdapter(BrowserChannel.class, new ToLowerCaseAndDashSerializer<BrowserChannel>()) |
48 | 54 | .registerTypeAdapter(ColorScheme.class, new ToLowerCaseAndDashSerializer<ColorScheme>()) |
@@ -468,5 +474,29 @@ public SameSiteAttribute read(JsonReader in) throws IOException { |
468 | 474 | return SameSiteAttribute.valueOf(value.toUpperCase()); |
469 | 475 | } |
470 | 476 | } |
| 477 | + |
| 478 | + private static DateFormat iso8601Format() { |
| 479 | + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault()); |
| 480 | + dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); |
| 481 | + return dateFormat; |
| 482 | + } |
| 483 | + private static final DateFormat dateFormat = iso8601Format(); |
| 484 | + |
| 485 | + private static class DateSerializer implements JsonSerializer<Date> { |
| 486 | + @Override |
| 487 | + public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) { |
| 488 | + return new JsonPrimitive(dateFormat.format(src)); |
| 489 | + } |
| 490 | + } |
| 491 | + |
| 492 | + private static class LocalDateTimeSerializer implements JsonSerializer<LocalDateTime> { |
| 493 | + @Override |
| 494 | + public JsonElement serialize(LocalDateTime src, Type typeOfSrc, JsonSerializationContext context) { |
| 495 | + ZoneOffset offset = ZoneId.systemDefault().getRules().getOffset(src); |
| 496 | + Instant instant = src.toInstant(offset); |
| 497 | + return new JsonPrimitive(dateFormat.format(Date.from(instant))); |
| 498 | + } |
| 499 | + } |
| 500 | + |
471 | 501 | } |
472 | 502 |
|
0 commit comments