GWT JsDate序列化为JSON

时间:2011-07-07 23:56:29

标签: json gwt serialization

我遇到了在gwt中为日期字段序列化正确JSON的问题。

在gwt中,我有一个带有名为'dtTemp'的JsDate字段的覆盖类。在对象之外,我设置了这样的值:myOverlayObj.setDtTemp(JsDate.create(1999,10,1));

我在overlay类中有一个“toJSON”方法,它将对象转换为JSON,然后可以将其传递回我的ASP.NET Web服务。它看起来像这样:

public final String toJSON(){     返回新的JSONObject(this).toString();
}

不幸的是,似乎生成的JSON有错误的日期。它为dtTemp被支持为10/1/1999的对象创建此JSON: {“intTemp”:7007,“strTemp”:“你好”,“dtTemp”:941439600000}

什么时候应该创建它(我使用JSON序列化程序在.NET中创建了这个并行对象): {“intTemp”:7007,“strTemp”:“你好”,“dtTemp”:新日期(938761200000)}

我的问题是,如何在gwt中序列化有效日期?它不仅缺少'新日期',而且它是一个完全不同的数字! (评估日期时间 在使用JSON.NET的.NET中,'toJSON'生成的日期在7 AM时最终变为11/1/1999

任何帮助将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:1)

JSON不能代表日期:http://www.json.org

new Date是JavaScript,它不是JSON。

至于unix时间戳的差异,有两个问题:

  1. 首先,JsDate.create(1999, 10, 1)确实代表11/1/1999,而不是10/1/1999:API中的月份是0,所以10是11月。
  2. “7AM”是由于时区:938761200000是10/1/1999 7AM UTC,941439600000是11/1/1999 7AM UTC。您可能在UTC + 7,所以您的10/1/1999 00:00 UTC + 7确实是10/1/1999 07:00 UTC:当您使用Jsdate.create创建日期时,它与您的关系相关时区(因此在你的情况下是00:00 UTC + 7),然后你的服务器显示UTC的日期(给出7AM)。您应该使用JsDate.UTC(1999, 9, 1, 0, 0, 0, 0)来创建实例。
  3. 我强烈建议您阅读:http://unix4lyfe.org/time/