2013-05-22 4 views
11

이 질문은 여러 번 해시 된 것으로 알고 있으며 해싱에 대한 많은 게시물을 읽었지만 혼란 스럽습니다.DateTime Json Return from WebAPI with Default Serializer

MVC4/WebAPI를 사용하면 새로운 DateTime.Now로 간단하게 만들어진 datetime이 있습니다.

내 WebAPI는 다음과 같이 반환 데이터입니다 : sessionRecordsSmall 그것에 날짜 시간의 공용 속성을 가지고

HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, new 
      { 
       data = sessionRecordSmalls, 
       count = sessionRecordSmalls.Count, 
       success = true 
      }); 

.

VS 디버거에서 날짜를 보면 DateTime에 시간대가 포함되어 있지 않으므로 시간대가없는 것으로 표시됩니다.

내가 서버에서 다운로드됩니다 것을 볼 때, 나는 JSON

2012-10-06T09에서 볼

{2012년 10월 6일 오전 9시 45분 0초} : 45 : 00

나는 T0가 100 % 확실하지 않은 시간대 0을 의미한다고 생각한다. 내 JavaScript 라이브러리는 이것을 시간대 0으로 해석하고 GMT (-9 시간 전)로 다운로드 한 실제 날짜를 표시합니다.

제 질문은 JSON이 무엇입니까? 시간대를 포함합니까? 여기에 중요한 단계가 빠졌습니까?

답변

12

웹 API 및 기본 직렬 변환기가있는 JSON에서 사용하는 2012-10-06T09:45:00 날짜 시간은 the ISO 8601 형식입니다.

실제로 이것은 Combined date and time representations이라고합니다. 추출 : 시간

..A 한 점은 완전한 날짜 표현, 구분 기호로 문자 T, 유효한 시간 표현을 연결하여 표현 될 수있다. 예 : "2007-04-05T14 : 30"...

이 형식에는 표준 시간대 정보가 없습니다. Time zone designators 추출물 바와 같이 ISO 8601에

시간대 등은 UTC 또는 UTC 오프셋에서와 같이 로컬 시간 동안 (불특정 위치) 표현된다. UTC 관계 정보가 시간 표현과 함께 제공되지 않으면 시간은 으로 현지 시간으로 간주됩니다.

즉, 지정된 UTC에서 오프셋이 없으면 로컬 시간으로 처리됩니다.

UTC format가 종료 시간이 UTC에있는 경우

에서 Z로 확장 될하는 공간없이 시간 이후에 직접 Z를 추가합니다. Z는 0 UTC 오프셋에 대한 구역 지정자입니다. "09:30 UTC" 은 "09 : 30Z"또는 "0930Z"로 표시됩니다. "14:45:15 UTC"일 경우 은 "14 : 45 : 15Z"또는 "144515Z"가됩니다.'루어' 'Z'에 대한 NATO 음성 알파벳 단어이기 때문에

UTC 시간은, '줄루어'시간으로 알려져있다.

그래서, 우리가받을 날짜 - 시간은 ISO 8601 형식, 명심 json.net로 직렬화하는 경우 로컬 시간대 (이 2012-10-06T09:45:00Z 같은 마지막에 Z)

+3

내가 알 것을 내가 내 날짜를 장식 할 때 : [JsonProperty (ItemConverterType = 대해서 typeof (JavaScriptDateTimeConverter))] 공개 날짜 시간 LogDate {얻을; 세트; } 전환으로 인해 기대 한 바를 얻었습니까? 기본값이 아닐까요? –

+0

정직하게 잘 모르겠지만 ...이 http://icanmakethiswork.blogspot.cz/2012/04/beg-steal-or-borrow-decent-javascript.html을 읽으라고 제안합니다 ... 나는 UTC 또한 일부 해킹과 함께 –

35

로 취급은 그 DateTimeZoneHandling을 지정할 수 있습니다. WebApiConf.cs에서

var json = config.Formatters.JsonFormatter; 
json.SerializerSettings.DateTimeZoneHandling =Newtonsoft.Json.DateTimeZoneHandling.Local; 
+0

내 시간을 절약하는 데 도움이됩니다. 정말 고맙습니다 –