| | |
| | | import tools.jackson.databind.ValueDeserializer; |
| | | |
| | | import java.time.Instant; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.time.format.DateTimeFormatter; |
| | |
| | | |
| | | public static final TimestampLocalDateTimeDeserializer INSTANCE = new TimestampLocalDateTimeDeserializer(); |
| | | |
| | | private static final DateTimeFormatter DEFAULT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
| | | private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
| | | private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
| | | |
| | | @Override |
| | | public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws JacksonException { |
| | |
| | | long millis = Long.parseLong(text); |
| | | return LocalDateTime.ofInstant(Instant.ofEpochMilli(millis), ZoneId.systemDefault()); |
| | | } catch (NumberFormatException e) { |
| | | // 不是纯数字,按默认日期格式解析 |
| | | // 不是纯数字,按日期格式解析 |
| | | } |
| | | return LocalDateTime.parse(text, DEFAULT_FORMATTER); |
| | | // 纯日期格式(如 "2026-07-29"),补全为当天 00:00:00 |
| | | if (text.length() == 10) { |
| | | return LocalDate.parse(text, DATE_FORMATTER).atStartOfDay(); |
| | | } |
| | | return LocalDateTime.parse(text, DATE_TIME_FORMATTER); |
| | | } |
| | | |
| | | } |