2013-10-16 4 views

답변

7

: 활동 지원과 함께 번들로 TZInfo의 버전은 시간대에 의해 정의 된 영역을 지원하는 데 필요한 정의가 포함

수업. TimeZone에서 정의되지 않은 영역을 사용해야하는 경우 TZInfo gem을 설치해야합니다 (최신 버전의 gem이 로컬에 설치된 경우 번들 버전 대신 사용됩니다)

개인적으로 레일스 시간대는 바보 같아요. 이것들은 Rails가 "146 개 존의 의미있는 서브 세트"라고 표현한 것에 임의로 제한됩니다. 그러나 그들은 어떤 영역이 "의미있는"영역이며 폐기되는 영역을 결정하는 방법을 설명하지는 않습니다.

TZDB 데이터에서 "US/Pacific"과 같은 식별자를 "링크"또는 "별칭"이라고합니다. 아마도 레일스에서 ​​생략되었을 수도 있지만 실제로는 실종 된 다른 많은 시간대가 많이 있습니다.

실세계에서 레일스 표준 시간대 식별자를 본 유일한 곳은 Twitter API입니다. 반면에 IANA/TZDB 식별자는 유비쿼터스입니다.

내가 제공 할 수있는 최선의 조언은 Rails 시간대를 잊어 버리고 Ruby TZInfo Gem을 직접 사용하는 것입니다. 별칭을 포함하여 모든 영역을 포함하는 전체 TZDB 구현이 있습니다.

레일 영역을 계속 사용해야하는 경우 먼저 TZInfo를 사용하여 실제 영역의 별칭을 확인한 다음 해당 영역이 레일 MAPPING 사전에 있는지 확인할 수 있습니다. 예를 들어 :

"US/Pacific" => "America/Los_Angeles"     (via TZInfo) 

"America/Los_Angeles" => "Pacific Time (US & Canada)" (via Rails MAPPING) 

난 당신이 TZInfo를 통해 "/ 태평양 US"를로드 할 때 당신이 거기에서 link_to_identifier 속성을 사용할 수 있도록, 그것은하는 LinkedTimezoneInfo 개체로 서브 클래스 될 것으로 판단된다.

+0

"'''TZInfo :: Timezone.get ('US/Pacific') .link_to_identifier''''NoMethodError. – ajbraus

+0

@ajbraus -'America/Vancouver'는 뚜렷한 영역이지 링크가 아닙니다. 그래서'link_to_identifier' 속성을 가지지 않을 것입니다. 그러나 슬프게도 Rails의 "의미있는"영역에있는 영역이 아닙니다. 따라서 TZInfo gem을 독점적으로 사용하고 Rails 영역으로 매핑하지 않는 것 이외에는 여기에서 할 수있는 일이별로 없습니다. –

+0

@ajbraus - 'US/Pacific'을 보여주기 위해 의견을 업데이트 한 것을 보았습니다. –