Javascriptserializer Is Subtracting One Day From Date
Solution 1:
It's not losing a day arbitrarily, it's converting to a UTC date (or I should say using the date in a UTC date format) so when it's unserialized it you're no longer within your personal time zone. It's basically performing:
DateTimewhateverDate=/* incoming date */;
longticks= whateverDate.ToUniversalTime() // make UTC
.Subtract(newDateTime(1970, 1, 1)) // subtract UNIX Epoch
.TotalMilliseconds(); // get milliseconds since then// push in to the "\/Date(ticks)\/" formatStringvalue= String.Format(@"\/Date({0})\/", ticks);
However, try the following:
// or you rely on it serializing, then bring it back to your own local time// (apply the time zone).
afterDeserialize = afterDeserialize.ToLocalTime();
You'll now have the UTC time back to your local time (with time zone applied).
To Pass your test:
DateTimestartDate=newDateTime(2012,1,20);
JavaScriptSerializerserializer=newJavaScriptSerializer();
StringserializeDate= serializer.Serialize(startDate);
DateTimeafterDeserialize= serializer.Deserialize<DateTime>(serializeDate)
.ToLocalTime(); // Note: this is added
Assert.Equals(startDate, afterDeserialize); // pass!
Solution 2:
I had the same problem and solved it by using
Newtonsoft.Json.JsonConvert.SerializeObject()
instead of
new System.Web.Script.Serialization.JavaScriptSerializer().Serialize().
The latter call stores your DateTime converted to some random timezone (GMT+0 seems to be hardcoded).
Solution 3:
On deserializing JavaScriptSerializer
giving me output in UTC (Universal Time)
which due to change in hours change the date. As Brad Christie
suggested to change DateTime to UTC it can solve the problems.
But actually there is no need to change the:
DateTimestartDate=newDateTime(2012, 1, 20).ToUniversalTime();
as it is already taking it as Universal Time. So I just convert the output of deserialize to LocalTime
:
DateTime afterDeserialize= serializer.Deserialize<DateTime>(serializeDate);
afterDeserialize.ToLocalTime();
it solved the issue.
Post a Comment for "Javascriptserializer Is Subtracting One Day From Date"