2017-03-10 2 views
0

Ich habe ein C# -Webapi-Projekt, das Objekte der Instanz foo zurückgibt.Exchange-Daten von C# Webapi nach Java mit Gson

foo enthält zwei DateTime-Eigenschaften in C#. Ich habe mein Webapi so konfiguriert, dass es immer sieben Ziffern nach dem Punkt nach der Zeit zurückgibt. Also, wenn das Objekt in Json serialisiert wurde, sieht es wie folgt aus:

{ 
    "Timestamp": "2017-02-11T11:49:00.0000000", 
    "Changed": "2017-02-11T11:51:49.2620373" 
} 

Nun, ich versuchen, das Objekt mit Java deserialisieren. Ich wählte dafür gson. ich konfigurieren gson wie folgt aus:

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").create(); 

Nach der Deserialisierung die beiden Eigenschaften in Java wie folgt aussehen:

  • Zeitstempel: Sat Feb 11 11:49:00, das Recht
  • geändert ist: Sat Feb 11 12:35:29, was falsch ist

Also meine Frage ist, ist es möglich,zu konfigurierenum mit der siebenstelligen Genauigkeit zu arbeiten, oder soll ich vier davon entfernen?

+1

Rufen Sie nicht 'setDateFormat()', und Stadtplan zu 'Local ', die tatsächlich Bruchteilssekunden von mehr den 3 Ziffern behandeln kann. – Andreas

+0

Andreas hat recht: 'Datum' kann keine ms Brüche halten, genauso wenig wie' SimpleDateFormat', und was Sie vorhaben, ist sein milder Stil: Der überflogene ms Wert wird als Sekunden und obere interpretiert. Wenn Sie Java 8 verwenden können, sollten Sie 'LocalDateTime' verwenden und einen einfachen Adapter dafür implementieren. Wenn Sie Java 8 'LocalDateTime' aus irgendeinem Grund nicht verwenden können, könnten Sie wahrscheinlich andere Datum/Uhrzeit-Bibliotheken wie Joda Time überprüfen, wenn sie ms Brüche parsen und sie auf ms Brüche in' java.util.Date' runden können. –

Antwort

0

Grund, warum Sie diese Zeit bekommen:

Date in json: 2017-02-11T11:51:49.2620373 Unter der Annahme, 2.620.373 Millisekunden sind, es führt tatsächlich in 2.620 Sekunden, die 44 Minuten sind.

Nun, wenn Sie 44 Minuten in 11:51:49 hinzufügen, erhalten Sie 12:35:29. Standardmäßig ist das Analysieren GSON nachsichtig, was bedeutet, dass es die Uhrzeit/den Tag addieren und die höhere Komponente anpassen wird (z. B. das Analysieren Date ergibt 01/04/2017).

Wenn Sie Millisekunden ignorieren, dann können Sie das Datumsformat yyyy-MM-dd'T'HH:mm:ss. ändern und es wird in der richtigen Datum zur Folge hat, zum Beispiel:

public static void main(String[] args) throws Exception{ 
    Gson gson = new GsonBuilder().setLenient().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.").create(); 
    Model model = gson.fromJson("{\"Timestamp\": \"2017-02-11T11:49:00.0000000\",\"Changed\": \"2017-02-11T11:51:49.2620373\"}", Model.class); 
    System.out.println(model.getTimestamp()); 
    System.out.println(model.getChanged()); 
} 

class Model{ 
    private Date Timestamp; 
    private Date Changed; 
    public Date getTimestamp() { 
     return Timestamp; 
    } 
    public void setTimestamp(Date timestamp) { 
     Timestamp = timestamp; 
    } 
    public Date getChanged() { 
     return Changed; 
    } 
    public void setChanged(Date changed) { 
     Changed = changed; 
    } 
}