2013-01-10 121 views
0

我搜索了四周,我真的不知道爲什麼會發生這種情況。JSON日期爲asp.net日期時間在運行時更改

我的大多數應用程序中使用GMT格林尼治標準時間的設備運行的時間,但我只是跨越了服務器在新加坡,所以時間是8小時提前。我看到從JSON解析datetime對象一些奇怪的行爲:

我的應用程序收到一個JSON(ISO 8601)日期如下:

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

我正在使用一個簡單的.asmx web服務,它使用內置的JSON序列化程序爲.Net 3.5,自動分析的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的日期時間參數的值是8小時前進:

LastSync screenshot 奇怪的是,如果我回到現在(),從Web服務輸出的JSON是:

newLastSend = /日期(1357817197087)/

其中使用時間戳的日期在線訂購ne轉換器不再提前8小時。

這是IIS的錯嗎?我看不到任何其他文化設置其他一切都是中性的,爲什麼它會改變日期?我該如何阻止它,還是必須接受我給予的東西,並將日期調整到不變的文化日期?

回答

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; 

}

0

我得到了這個問題,以及,我結束了使用的刺痛型通過輸入/輸出的最新信息。

+0

希望我下面的評論將幫助.. – Markive

相關問題