2013-03-14 4 views
2

ASP.NET 응용 프로그램에서 호스팅되는 Ajax 웹 서비스가 있습니다. 이 서비스는 DateTime 매개 변수를 받아들입니다.이 질문의 목적 상, /Date(1359727200000-0200)/에 해당하는 DateTime 매개 변수를 받아야합니다.이 매개 변수는 브라질 표준시로 2013 년 2 월 1 일 9:00 AM에 대한 MS-JSON 리터럴입니다. 이 리터럴은 Ajax 요청에서 브라우저가 보내는 문자입니다.MS JSON 날짜 직렬화 및 일광 절약 시간

대신 서비스 메서드에 전달 된 인수는 2012 년 2 월 1 일 12:00 PM입니다. 설상가상으로 인수의 DateTimeKind는 Local입니다. 그것이 Utc이라면 이해할 수 있습니다. 그러나 2 월 1 일이 동부 브라질에서 일광 절약 시간이므로 정확하지 않으므로 9:00 AM (local) sould be 11:00 AM (UTC)입니다. 정말 엉망입니다. 그건 그렇고, 웹 서버는 동부 브라질 표준 시간대에서 실행됩니다.

이 문제를 해결할 ASP.NET 구성, 서비스 메서드 주석, 특정 클라이언트 지침 또는 프레임 워크 리소스가 있습니까?

+0

오전 12 시가 자정 인 경우, 값이 날짜 및 시간 값 대신 날짜로 해석되는 경우가있을 수 있습니다. –

+0

@ JoãoAngelo 오타, 고마워요. 시간은 실제로 12:00 PM입니다. – Humberto

답변

0

많은 디버깅 후 나는 서버와 브라우저 사이에서 날짜를 직렬화 할 때 System.DateTime 종류와 Date 리터럴과 관련하여 JSON 시리얼 라이저가 작동하는 방식을 모르고있었습니다.

자세한 내용은 다음과 같습니다. 서비스가 DateTime 값을 JSON 형식의 클라이언트에 반환해야한다고 가정합니다. DataContractJsonSerializer은 (악명 높은) /Date (UTC ticks)/ 형식의 문자열을 생성합니다.이 문자열은 클라이언트가 JavaScript Date 값으로 구문 분석 할 수 있습니다. "/ (UTC 틱)/날짜"

  • 종류가 DateTimeKind.Utc이며, 문자열 리터럴이 포함됩니다 및 시간 영역 :이 연재는 날짜 시간의 종류 특성에 민감하지 않습니다.
  • 종류가 DateTimeKind.Local 일 때 문자열 리터럴에 "/ Date (UTC 틱 시간대) /"가 포함됩니다.
  • 종류가 DateTimeKind.Unspecified 인 경우 Local으로 간주됩니다./"

    • 리터럴의 형식에 : 클라이언트가 서비스에 날짜 값을 보내는 경우

    반대로, 직렬화 프로세스는 리터럴 JSON의"종류 "에도 민감 날짜 (UTC 틱)/"시간대가없는 경우 DateTime은 DateTimeKind.Utc 종류입니다.

  • 리터럴 형식이 "/ Date (UTC 틱 시간대) /"인 경우 생성 된 DateTime은 DateTimeKind.Local 종류입니다.

클라이언트가 UTC 형식의 Date 리터럴 만 서비스에 보내야한다는 것입니다. 모든 것이 훌륭합니다.