I am having issues serializing correct JSON for date fields in gwt.
In gwt, I have an overlay class with a JsDate field called ‘dtTemp’. Outside of the object, I set the value like this: myOverlayObj.setDtTemp(JsDate.create(1999, 10, 1));
I have a “toJSON” method in the overlay class which converts the object to JSON which can be passed back to my ASP.NET web service. It looks like this:
public final String toJSON(){
return new JSONObject(this).toString();
}
Unfortunately, it seems that the JSON being generated has bad dates. It creates this JSON for an object where dtTemp is SUPPOSED TO BE 10/1/1999:
{“intTemp”:7007, “strTemp”:”hello”, “dtTemp”:941439600000}
when it should create this (I created this parallel object in .NET using a JSON serializer):
{“intTemp”:7007, “strTemp”:”hello”, “dtTemp”:new Date(938761200000)}
my question is, how can I serialize valid dates in gwt? Not only is it missing ‘new Date’ but it’s a totally different number! (when evaluate the Datetime
in .NET using JSON.NET the date that ‘toJSON’ generated ends up to be something like 11/1/1999 at 7AM)
Any help would be appreciated!
Thanks!
JSON cannot represent dates: http://www.json.org
new Dateis JavaScript, it’s not JSON.As for the difference in the unix timestamp, there are two issues:
JsDate.create(1999, 10, 1)really represents 11/1/1999, and not 10/1/1999: months in the API are 0-based, so 10 is November.Jsdate.create, it’s relatie to your timezone (so it’s 00:00 UTC+7 in your case), and your server then shows the date in UTC (which gives 7AM). You should useJsDate.UTC(1999, 9, 1, 0, 0, 0, 0)to create your instance.I highly recommend reading: http://unix4lyfe.org/time/