Ich erhalte eine Datumszeichenfolge von ExtJS im folgenden Format:
2011-04-08T09: 00: 00
Wenn ich versuche, dieses Datum zu deserialisieren, ändert sich die Zeitzone in die indische Standardzeit (fügt der Zeit +5: 30 hinzu). So deserialisiere ich das Datum:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
getObjectMapper().getDeserializationConfig().setDateFormat(dateFormat);
Dadurch wird auch die Zeitzone nicht geändert. Ich bekomme immer noch das Datum in IST:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
getObjectMapper().getDeserializationConfig().setDateFormat(dateFormat);
Wie deserialisiere ich das Datum so, wie es ohne die Probleme der Zeitzone kommt?
yyyy.MM.dd G 'at' HH:mm:ss z
undhh 'o''clock' a, zzzz
sind gültige Muster.Das funktioniert bei mir - ich benutze Jackson 2.0.4
ObjectMapper objectMapper = new ObjectMapper(); final DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); objectMapper.setDateFormat(df);
quelle
ObjectMapper
ist threadsicher. Sie benötigen für jede Konfiguration nur eine Instanz davon. Wenn Sie also zwei verschiedene Datumsformate benötigenObjectMapper
, benötigen Sie zwei Objekte oder nur eines, aber Sie müssensynchronize
diesetDateFormat
Methode aufrufen .Zu diesem Thema gibt es einen guten Blog: http://www.baeldung.com/jackson-serialize-dates Die Verwendung von @JsonFormat sieht am einfachsten aus.
public class Event { public String name; @JsonFormat (shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss") public Date eventDate; }
quelle
Zusätzlich zu Varun Achars Antwort ist dies die Java 8-Variante, die ich mir ausgedacht habe und die java.time.LocalDate und ZonedDateTime anstelle der alten Klassen java.util.Date verwendet.
public class LocalDateDeserializer extends JsonDeserializer<LocalDate> { @Override public LocalDate deserialize(JsonParser jsonparser, DeserializationContext deserializationcontext) throws IOException { String string = jsonparser.getText(); if(string.length() > 20) { ZonedDateTime zonedDateTime = ZonedDateTime.parse(string); return zonedDateTime.toLocalDate(); } return LocalDate.parse(string); } }
quelle
@JsonFormat funktioniert nur für das Standardformat, das von der von Ihnen verwendeten Jackson-Version unterstützt wird.
Bsp.: - kompatibel mit allen Standardformen ("JJJJ-MM-TT'T'HH: mm: ss.SSSZ", "JJJJ-MM-TT'T'HH: mm: ss.SSS'Z '", ") EEE, TT MMM JJJJ HH: MM: SS zzz "," JJJJ-MM-TT ")) für Jackson 2.8.6
quelle