2008-09-18 3 views
3

내 웹 응용 프로그램은 WebGui와 WebService로 나뉩니다. WebService는 비즈니스 로직 및 데이터베이스 처리를 담당합니다. 브라우저의 Javascript에서 브라우저의 입력 인 날짜와 시간에 따라 데이터를 요청합니다. 이 요청은 WebGui의 .asmx URL로 전달되며이 함수 내에서 webservice가 호출됩니다.다른 시스템에서 JSON의 datetime 동작이 다른 이유는 무엇입니까 (win xp, server 2003)?

내 개발 시스템 (windows xp)에서 올바른 데이터를 얻을 수 있지만 테스트 시스템에 설치할 때 올바른 데이터를 얻기 위해 로컬 시간대 차이를 추가해야합니다.

예를 들어 '21 .07.2008 14:27:30 '에 '21 .07.2008 16:27:30'을 보내야합니다.

두 시스템의 동작이 다른 이유는 무엇이며 두 시스템에서 동일한 동작을 수행하려면 어떻게해야합니까?

  • 웹 GUI는 asp.net 2.0 C#에서입니다
  • 웹 서비스 asp.net 1.1 C#에서입니다

이 다른 날짜를 해석에는 문제가 없습니다

업데이트 날짜 및 시간 형식으로 JSON 프로토콜에서 "/ Date (1221738803000) /"형식으로 전송됩니다. 시간대를 해석/잊어 버리는 문제입니다.

답변

0

서버의 culture 설정에 따라 날짜가 다르게 해석됩니다. 나는. 날짜가 주어진 2008 년 5 월 1 일 en-GB (영국)의 문화는 5 월 첫째로 날짜를 읽을 것이며 en-US 문화는 1 월 5 일으로 읽을 것입니다.

이 문제를 해결하려면 날짜가 항상 문화와 상관없이 항상 그런 방식으로 해석되는 UTC 형식 (yyyy-mm-dd)으로 전송되도록해야합니다.

+0

이 날짜와 시간과 같은 다른 형식으로 날짜를 해석하는 문제는 "\/날짜로 JSON 프로토콜에 전송되지 않습니다 (1221738803000)입니다 \/". 시간대를 해석/잊어 버리는 문제입니다. (질문을 업데이트했습니다.) –

0

시간대가 중요하지 않은 경우 형식이 지정된 문자열로 날짜/시간을 전달하십시오. 그러면 모양을 정확히 알 수 있고 DateTime.Parse를 사용하여 서버 측의 DateTime으로 변환 할 수 있습니다.

3

이 문제는 .NET 2.0에 도입 된 DateTime.Kind 속성과 관련이 있다고 생각됩니다. 기본적으로 DateTimeKind.Unspecified로 설정됩니다. 이는 대부분 DateTimeKind.Local과 동일하게 처리되므로 날짜가 serialize되면 UTC로 변환됩니다. 웹 서비스 호출에 전달하기 전에 DateTime.SpecifyKind (...)를 사용하여 DateTimeKind.Utc로 종류를 설정할 수 있습니다.

+0

현재 DateTimeKind.Unspecified가 보입니다. UTC 인 것처럼 보입니다. DateTime이 이미 "로컬"시간대에있는 경우 반환하기 전에 UTC로 다시 변환합니다. 이 서버에서 실행중인 작동하는 것, 로컬로 실행중인 여전히 "로컬"표준 시간대로 변환하기 전에 변환해야합니다. 정말 짜증나! –

관련 문제