2016-03-30 3 views
0

Ich verwende Dropwizard, um einige REST-Webdienste zu implementieren.Abrufen von Timeoffset mithilfe von Jakcson zum Analysieren von JSON Datetime

Benutzer werden Datum-Zeit mit iso-Format, wie: "beginTime": "2016-03-30T16:56:35.43-10:00"

Ich brauche das lokale Datum und Stunde durch den Benutzer oder den Offset gesendet zu bekommen.

Jackson scheint die Offset-Informationen zu verlieren und das Datum auf UTC zu setzen. In mein Objekt deserialisiert von JSON bekomme ich 2016-03-31T02:56:35.430Z Ich habe alle Arten versucht (Calendar, DateTime, Date).

Ich muss den Offset oder Benutzer Tag kennen, um tägliche Statistiken auf der Zeitzone des Benutzers zu berechnen.

Ich habe DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE ohne Erfolg versucht.

Wie kann ich den Offset oder/und das Eingabedatum bekommen?

+0

Ich habe einen Weg mit 'DateTime.parse' und mit einem bestimmten' JsonDeserializer' gefunden, aber es ist viel des Guten eine bestimmte Deserializer für eine so grundlegende stuf zu nutzen suchen. –

+0

Hi @ Ôrel di siehst du meine Antwort? –

Antwort

0

Bei java8 können Sie eine ZonedDateTime Instanz deserialisieren, indem Sie die Bibliothek jackson-datatype-jsr310 verwenden. Sie müssen einen JavaTimeModule registrieren und die Deserialisierung-Funktion ADJUST_DATES_TO_CONTEXT_TIME_ZONE deaktivieren:

String json = "\"2016-03-30T16:56:35.430-10:00\""; 
ObjectMapper mapper = new ObjectMapper(); 
JavaTimeModule javaTimeModule=new JavaTimeModule(); 
mapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE); 
mapper.registerModule(javaTimeModule); 
ZonedDateTime obj = mapper.readValue(json, ZonedDateTime.class); 
System.out.println(obj); 
//prints: 2016-03-30T16:56:35.430-10:00 

Oder Sie können durch Hinzufügen der Bibliothek jackson-datatype-joda und Registrierung eines JodaModule eine org.joda.time.DateTime Instanz deserialisieren.

String json = "\"2016-03-30T16:56:35.430-10:00\""; 
ObjectMapper mapper = new ObjectMapper(); 
JodaModule jodaModule=new JodaModule(); 
mapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE); 
mapper.registerModule(jodaModule); 
DateTime obj = mapper.readValue(json, DateTime.class); 
System.out.println(obj); 
//prints: 2016-03-30T16:56:35.430-10:00 
Verwandte Themen