GWT doesn’t serialize Java Date properly. When I tried sending Date created in Javascript through the wire, I found out that dates between April 1st (funny) and 25th October for years before year 1983 get subtracted by one day.
That means that, say, both 1982-04-01 and 1982-03-31 become 1982-03-31 on the Java side.
Given the dates in question, I would guess that this is some kind of DST problem. I’ve tried googling, and found only one other reference that describes similar problem.
I also tried submitting bug to the GWT team, but curiously wasn’t able to find bugtracker for GWT.
So, my questions are:
-
Anyone else run into this? I’m on GWT 1.7, and would like to confirm if this happens on 2.0 as well.
-
My workaround was to send dates as Strings, and parse them on server. Anyone knows better workaround?
Assuming that you are using a java.util.Date
Question 1: It seems that it is fixed in 2.0. I’ve created both Dates above (1982-04-01 and 1982-03-31) and they come through correctly to the server (both represent on the server as 1982-04-01 and 1982-03-31 respectively). My setup is:
Question 2: You could always pass the ‘milliseconds since January 1, 1970, 00:00:00 GMT’ over the async service-which you can get using getTime() on the date object. On the server side you can then instantiate a new Date passing this value in on the constructor:
Date date = new Date(millis);This saves fiddling around with formatters and parsers.