레일즈 REST XML과 datetime 값의 직렬화 방식에 관한 흥미로운 문제가 생겼습니다.REST XML 웹 서비스에서 가변 오프셋 시간대를 나타내는 방법은 무엇입니까?
<model>
<date type="datetime">2010-07-21T16:38:03-05:00</date>
</model>
주 시간 값 더하기 -0500 오프셋 전율 : 즉, 시간 값은 다음처럼 일정한 오프셋 값으로 표현된다. 이 REST 웹 서비스에서 정보를 소비 할 때 이러한 오프셋은 완벽하게 작동합니다. 그러나이 웹 서비스에 정보를 POST하고 싶다고 가정하고 사용자가 웹 양식을 제출할 때와 같이 Rails에서 일광 절약 시간을 고려하기를 원했습니다. 나는이 작업을 수행 할 수 있습니다 발견했습니다
<model>
<date type="datetime">2010-07-21 16:38:03</date>
</model>
와 시간이 제대로 해석됩니다 로컬 사용자의 time zone preference. 실제로 이것은 정규 양식 제출과 관련하여 일어나는 일입니다. 여태까지는 그런대로 잘됐다.
요청에 시간대를 직접 지정할 수있는 기능이 필요하다고 가정 해보십시오. 특정 사용자는 언제든지 표준 시간대 환경 설정을 변경할 수 있지만 대신에 오는 API 요청은 항상 고정 된 위치 (따라서 고정 된 시간대)에 있습니다.
이는 간단한데,하지만 몇 가지 요인에 의해 복잡 :
- 시간대 오프셋은 일반적으로 (즉 -0500에서 다시 -0400과에) 년에 두 번 변경합니다.
- 레일즈는 항상 일정한 시간대 오프셋을 필요로하거나 datetime이 현지 시간 (또는 사용자의 시간대 환경 설정)으로 해석됩니다.
- Ruby의 Time 클래스는 가변 오프셋을 인식하지 못합니다. 예를 들어, 동부 표준시 (EST) 또는 동부 일광 절약 시간 (EDT)을 지정할 수 있지만
Time.parse
은 "동부 표준시"또는 동부 표준시를 제대로 이해하지 못합니다. 시간이 1 시간 반 정도 떨어져 있기 때문에 하나 또는 다른 것을 지정할 수 없습니다.
가 나는 다음과 같은 솔루션을 고려했습니다
는 모델에 TIME_ZONE 가상 속성을 추가합니다. 나는이 모델의 맥락에서 의미가 거의 없기 때문에 이것을 좋아하지 않는다. 시간 영역의 설정은 매개 변수 할당에 문제가 생기기 쉽다. (즉, 모델은 time_zone이 날짜 이전에 처리 될 때 다른 행동을 보여야한다. 날짜, time_zone이 nil 일 때).
POST 된 XML 데이터와 관련하여 쿼리 문자열 매개 변수를 사용하십시오. 많은 사람들이 HTTP POST 요청에 사용되는 쿼리 문자열에 눈살을 찌푸린 것처럼 보이며 popular rest clients도 seem to support it이 아닙니다.
이 문제에 대한 가능한 다른 해결책이 있습니까? 나는이 같은 변수 오프셋을 지정할 수 싶지만 그들 중 누구도 작동하지 :
<date>2010-07-21 16:38:03 Eastern Time</date>
<date>2010-07-21 16:38:03 Eastern Time (US & Canada)</date>
<date>2010-07-21 16:38:03 ET</date>
<date>2010-07-21 16:38:03 America/New York</date>
답변 만하고 있습니다. 백엔드는 무엇입니까? MySQL, 포스트그레스? – stef