Problem deserializating JSON Date in C# - adding 2 hours
在将JSON日期反序列化为C日期时间时,我们遇到了一个非常棘手的问题。
代码是:
1 2 3 | JavaScriptSerializer serializer = new JavaScriptSerializer(); jsonTrechos = jsonTrechos.Replace("/Date(","\\/Date(").Replace(")/",")\\/"); Trecho[] model = serializer.Deserialize<Trecho[]>(jsonTrechos); |
问题是:反序列化工作正常,但是Trechos对象的所有日期都添加了2小时。
我的时区是巴西(UTC-3),如果有什么事的话,我们是在享受日光节约(所以我们现在是在UTC-2)。我想可能是本地化和时区在这方面起了作用,如果它们真的起作用,我不知道如何修复它。
这在msdn中有记录:
Date object, represented in JSON as
"/Date(number of ticks)/". The
number of ticks is a positive or
negative long value that indicates the
number of ticks (milliseconds) that
have elapsed since midnight 01
January, 1970 UTC.
号
试着打电话给
我强烈建议使用json.net库。坦率地说,.NET框架中的JSON序列化程序(有多个)在某种程度上都很奇怪,特别是在序列化日期方面。
json.net是我所见过的唯一一个能够一致地处理它们的库(以及一般的json),并且对其他用户没有任何问题。
为JSON指定的日期是UTC,正如您提到的,您使用的是夏令时,所以+2小时是有意义的。理想情况下,您无论如何都应该使用UTC日期时间,因为它消除了日光节约的麻烦(或者在本例中,它被添加到其中),并允许全球托管。
"Javascript日期从1970年1月1日00:00:00世界时间(UTC)开始以毫秒计算,其中一天包含86400000毫秒"(摘自W3Schools)。所以你想把它转换成你的本地时区。
1 | TimeZoneInfo.ConvertTimeFromUtc(yourDateToConvert, TimeZoneInfo.Local) |