如何处理从 WCF 数据服务 (OData) 返回的 json DateTime

2024-01-01

我相信我在这里遗漏了一些明显的东西。当我从 OData 服务请求 JSON 响应时,我得到的 DateTime 属性结果与请求 XML 时得到的结果不同。我将使用 NerdDinner OData 源作为示例。

JSON:

http://www.nerddinner.com/Services/OData.svc/Dinners(1)?$format=json
"EventDate": "\/Date(1235764800000)\/"

XML:

http://www.nerddinner.com/Services/OData.svc/Dinners(1)
<d:EventDate m:type="Edm.DateTime">2009-02-27T20:00:00</d:EventDate>

When I do an alert(new Date(1235764800000)) I get this result: alt text

当我使用 LINQPad 运行相同的查询时,我也得到了晚上 8 点的结果。为什么 JSON 结果中的时区不正确?似乎假设响应是在 GMT 时间。我应该在客户端上处理这个问题(通过javascript)还是可以在服务器上设置?

我在客户端上使用 jQuery,在服务器上使用 WCF 数据服务(和实体框架)。

Update:

我在用Datejs http://code.google.com/p/datejs在客户端处理 UTC 日期时间格式。我想知道这是否是解决这个问题的正确方法。

 function getDateString(jsonDate) {
     if (jsonDate == undefined) {
         return "";
     }
     var utcTime = parseInt(jsonDate.substr(6));

     var date = new Date(utcTime);
     var minutesOffset = date.getTimezoneOffset();

     return date.addMinutes(minutesOffset).toString("M/d/yyyy h:mm tt");
 }

根据这个msdn链接 http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx, DateTime对象是...

...在 JSON 中表示为“/Date(number 刻度数)/"。刻度数是 正或负的多头价值 表示刻度数 自此以来已经过去的(毫秒) 世界标准时间 1970 年 1 月 1 日午夜。

所以你的.NET假设是正确的,但它是UTC而不是GMT(尽管他们很相似 http://geography.about.com/od/timeandtimezones/a/gmtutc.htm)。有some https://stackoverflow.com/questions/726334/asp-mvc-jsonresult-date-format/726869#726869 good https://stackoverflow.com/questions/1341719/custom-javascriptconverter-for-datetime/1347448#1347448 answers https://stackoverflow.com/questions/1224793/javascript-serialization-of-datetime-in-asp-net-is-not-giving-a-javascript-date-o/1227767#1227767这里提供了更多详细信息,并提供了将 JSON 解析为客户端上可用日期的方法。

至于将日期从 UTC 转换为特定时区,在服务器上您可以使用TimeZoneInfo http://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx类有一个ConvertTimeFromUtc http://msdn.microsoft.com/en-us/library/system.timezoneinfo.converttimefromutc.aspx方法。或者您可以编写一个继承自的自定义转换器JavaScriptConverter http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptconverter.aspx班级。在 JavaScript 中,有UTC http://www.w3schools.com/jsref/jsref_utc.asp and getTimezoneOffset http://www.w3schools.com/jsref/jsref_getTimezoneOffset.asp可以使用的方法。

希望这有帮助,祝你好运。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理从 WCF 数据服务 (OData) 返回的 json DateTime 的相关文章

随机推荐