GWT serialisiert Java Date nicht richtig. Als ich versucht habe, Datum in Javascript durch die Leitung zu senden, fand ich heraus, dass Daten zwischen dem 1. April (lustig) und dem 25. Oktober für Jahre vor dem Jahr 1983 um einen Tag subtrahiert werden.
Das heißt, sagen wir, sowohl 1982-04-01 als auch 1982-03-31 werden auf der Java-Seite 1982-03-31.
Angesichts der fraglichen Daten würde ich vermuten, dass dies eine Art DST-Problem ist. Ich habe versucht zu googeln und fand nur eine weitere Referenz , die ähnliche Informationen enthält Problem.
Ich habe auch versucht, einen Bug an das GWT-Team zu senden, aber war seltsamerweise nicht in der Lage, einen Bugtracker für GWT zu finden.
Meine Fragen sind also:
Hat sonst noch jemand darauf gestoßen? Ich bin auf GWT 1.7 und möchte bestätigen, dass dies auch auf 2.0 passiert.
Meine Problemumgehung bestand darin, Datumsangaben als Zeichenfolgen zu senden und sie auf dem Server zu analysieren. Jeder kennt bessere Abhilfe?
Angenommen, Sie verwenden eine java.util.Date
Frage 1: Es scheint, dass es in 2.0 behoben ist. Ich habe beide Daten oben (1982-04-01 und 1982-03-31) erstellt und sie kommen korrekt zum Server (beide repräsentieren auf dem Server als 1982-04-01 bzw. 1982-03-31). Mein Setup ist:
Frage 2: Sie können die 'Millisekunden seit dem 1. Januar 1970, 00:00:00 GMT' immer über den asynchronen Dienst übergeben, den Sie mit getTime () für das Datumsobjekt erhalten können. Auf der Serverseite können Sie dann ein neues Date instanziieren, das diesen Wert im Konstruktor übergibt:
Date date = new Date(millis);
Das spart das Umspielen mit Formatierern und Parsern.
Ich bin ziemlich sicher, dass die FTR-Bibliothek eine Datumsemulation enthält.
Daten und Uhrzeiten sind ein kompliziertes Thema. Die Konvertierung kann von der Ländereinstellung abhängen, in der der Browser ausgeführt wird und ob sowohl Ihre JVM auf dem Server als auch die Ländereinstellungen der Clients aktuell sind.
In einigen Fällen kann es Unterschiede geben, weil sie in einigen Regionen die Zeitzonen in der Vergangenheit gewechselt haben.
GWT sendet Daten seit der Epochenzeit mit nur Millis. Da Sie Date-Objekte verwenden, sind Sie dadurch eingeschränkt, dass die Daten auf der Serverseite automatisch in die Server-Zeitzone geändert werden. Sind Sie sicher, dass Sie den möglichen Zeitunterschied zwischen Client und Server berücksichtigen?
David
Wenn Sie keine clientseitigen Conversions durchführen müssen (Anpassung an die Zeitzone des Benutzers) oder Berechnungen durchführen, senden Sie sie in einer Zeichenfolge vom Server.
Sie sind jedoch nie auf Ihr spezifisches Problem gestoßen.
Wir sind auch auf ein ähnliches Problem gestoßen. Es war lange genug her, dass ich mich nicht an die genauen Details erinnere, aber der Kern davon war, dass es kleine Unterschiede zwischen java.util.Date und der Art und Weise gab, wie Daten in Javascript behandelt wurden. Unsere Problemumgehung war im Grunde die gleiche wie Ihre, wobei der tatsächliche über die Verbindung gesendete Wert im Allgemeinen ein String war.
Tags und Links gwt datetime serialization date