0

我四处寻找,我真的不确定为什么会发生这种情况。

大多数情况下,我的应用程序在使用 GMT 的设备上以 GMT 运行,但我只是在新加坡建立了一个服务器,所以时间提前了 8 小时。我看到从 JSON 解析的 DateTime 对象的一些奇怪行为:

我的应用收到这样的 JSON (ISO 8601) 日期:

LastSync=2013-01-10T11:05:38.822Z

我正在使用一个简单的 .asmx Web 服务,它使用 .Net 3.5 的内置 JSON 序列化程序,自动解析的 DateTime 对象返回的日期比 JSON 所说的要早 8 小时。这是功能:

<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
 Public Function SyncFlatTable(ByVal tableName As String, ByVal LastSync As DateTime)
    Return WebServiceJSON.SyncFlatTable(tableName, LastSync)
End Function

如您所见, LastSync as DateTime 参数的值是提前 8 小时:

LastSync 截图 奇怪的是,如果我返回 Now(),来自 Web 服务的 JSON 输出是:

newLastSend=/日期(1357817197087)/

使用时间戳到日期在线转换器不再提前 8 小时。

这是IIS的错吗?我看不到任何其他文化设置,其他一切都是中性的,为什么要更改日期?我该如何阻止它,或者我必须接受我所得到的并将日期调整为不变的文化日期?

4

2 回答 2

0

我也遇到了这个问题,我最终使用了 sting 类型来传入/传出日期信息。

于 2013-04-19T06:51:36.123 回答
0

似乎在任何日期对象上调用 .toJSON ,当它转换为字符串表示时,它是使用本地日期完成的。我需要将其调整为 UTC,以便在转换时使用服务器的日期:

function removeDateUTCOffSetForServer(obj) {
if (obj) {
    for (prop in obj) {
        if (obj[prop] instanceof Date) {
            var d = obj[prop];
            var utc = new Date(d.getTime() - (d.getTimezoneOffset() * 60000));
            obj[prop] = utc;
        }
    }
}
return obj;

}

于 2013-04-22T04:19:21.900 回答