2016-04-27 60 views
2

從我得到這個字符串JSON解析的DateTime

[{\"id\":\"9b77ff1e-350e-44d8-8860-15e80f4d8a22\",\"code\":\"C\",\"name\":\"0%\",\"validFrom\":\"2013-07-01T00:00:00Z\",\"validTill\":null,\"active\":1,\"vatProc\":0.0,\"createdAt\":\"2015-02-01T13:04:17.733Z\",\"updatedAt\":\"2015-02-01T13:04:17.733Z\"}] 

在客戶端,然後,我將其轉換爲使用JSON.parse產生結果的JSON對象的服務器:

[ 
{ 
active:1 
code:"C" 
createdAt:"2015-02-01T13:04:17.733Z" 
id:"9b77ff1e-350e-44d8-8860-15e80f4d8a22" 
name:"0%" 
updatedAt:"2015-02-01T13:04:17.733Z" 
validFrom:"2013-07-01T00:00:00Z" 
validTill:null 
vatProc:0 
} 
] 

哪個正如你所期望的那樣,如果它不在日期字段中。

日期在服務器上翻譯爲UTC。

我知道我可以通過函數來​​解析函數來進行轉換。 我只想格式化日期的,這樣的規則解析會做「正確的」,如果你知道我的意思

我在網上不存在「正確」的方式,看到每一種情況下我是什麼在網上閱讀有關客戶端的轉換。

那麼真的沒有辦法告訴常規的json解析器那是一個日期嗎?

我必須在該日期,時間轉換成什麼都將在服務器上運行選項

客戶方: AngularJS

服務器端: C#WCF/JSON

編輯:

我遇到的問題是,如果我使用例如ValidFrom在AngularJS它抱怨一個模型,它不是一個日期女巫真的不是

AngularJS錯誤:

Expected `2013-07-01T00:00:00Z` to be a date 
+1

什麼*是*的問題?這兩個文本是一樣的。日期沒有改變。 'Z'表示它們*是* UTC。結果你期望什麼?請發佈您使用的*代碼*,結果如何,您期望的是什麼。你有沒有得到一個DateTime的DateTimeKind屬性*不是* UTC?你是否期望獲得當地時間?爲什麼不使用已有的DateTime對象? –

+0

您可以使用'.ToLocalTime()'將UTC轉換爲您的「本地」時間,但* *會隨DST更改 –

+0

編輯 – Jester

回答

2

以前我送一個日期,以我的DateTimeKind屬性設置爲UTC

客戶端
SomeObject.Date= DateTime.SpecifyKind(SomeObject.Date, DateTimeKind.Utc); 

之前保存任何日期的服務器我做的:

SomeObject.Date= SomeObject.Date.ToUniversalTime(); 

客戶端的唯一要求是使用momentjs format()方法將日期轉換爲ISO-8601

遵循此方法JSON始終在客戶端上正確處理時間(至少它對我來說工作得很好) )

This helped me a lot

+0

換句話說,始終使用UTC。一個更好的解決方案是使用DateTimeOffset而不是進行任何轉換 –

+0

謝謝,我想要一個更好的解決方案,我不喜歡每次都轉換每個日期屬性,但至少這已解決了我迄今爲止的utc - >本地時間問題,如果你可以發佈一個更好的方法的鏈接,我會很感激。 – Tuco

+0

我嘗試了一下你的aproach,但是導致服務器的輸出相同 – Jester