2009-09-15 3 views
0

밴드 용 레일 앱이 있습니다. 밴드는 서로 다른 시간대에있는 쇼를 가져올 수 있습니다. 이러한 이벤트를 UTC로 저장하는 것은 많은 작업처럼 보입니다. 내가 만든 모든 쇼의 시간대를 파악한 다음 사용자에게 표시 할 때 쇼의 현지 시간대로 다시 변환해야합니다. geolocation을 기준으로 UTC 오프셋을 가져 오는 간단한 플러그인이 있습니까? 아마도 도움이 될 것입니다 만, 왜 내가 여기에 UTC에 저장해야하는지에 대한 주요 이유가 누구에게 보이나요? 나는 UTC에 타임 스탬프를 저장하는 것이 좋은 생각일지도 모른다는 것을 이해합니다. 그러나 밴드 이벤트 시간 은요? 할이벤트가있는 레일스 앱의 시간대 처리 방법

답변

4

비슷한 일을하고 있습니다. 이벤트 목록이있는 사이트입니다. 내 상황에서는 시간을 표준화하는 것이 중요합니다 (UTC). 우리가 발표 할 판매 시간 (즉, 사이트에 이벤트가 표시되고 판매 링크가 표시 될 때)가 있기 때문에 시간을 표준화해야합니다. 이벤트 시작 시간을 표시합니다 (자체는 어떤 시간대인지는 신경 쓰지 않습니다).

데이터베이스의 UTC 시간부터 주어진 장소의 로컬 시간 (즉, 이벤트 목록에 로컬 시간을 표시)은 e.start.in_time_zone("#{e.venue.time_zone}") 행을 따라 매우 간단합니다. 내가 알 수없는 것은 Time.zone을 변경하지 않고도 UTC로 변환해야하는 로컬 시간으로 인식되는 데이터 입력 지점에서 로컬 시간을 얻는 것입니다.

나는 뭔가를 발견했습니다. 이 게시물을 확인하십시오 : http://steveluscher.com/archives/changing-a-times-zone-in-rails-keeping-the-same-local-representation. 내 config/initializers 디렉토리에 새로운 파일 (time_zone_support.rb)을 추가했다. 다음 내용은 다음과 같습니다

module ActiveSupport 
    class TimeWithZone 
    def zone=(new_zone = ::Time.zone) 
     # Reinitialize with the new zone and the local time 
     initialize(nil, ::Time.__send__(:get_zone, new_zone), time) 
    end 
    end 
end 

이는 콘솔에 다음과 같은 수 있습니다 : 당신을 너무 도움이

>> e.starts = Time.zone.parse("2010-09-12 10:00 am") 
=> Sun, 12 Sep 2010 10:00:00 UTC +00:00 
>> e.starts.zone = e.time_zone 
=> "Pacific Time (US & Canada)" 
>> e.starts 
=> Sun, 12 Sep 2010 10:00:00 PDT -07:00 
>> e.save 
=> true 

희망!

+1

FYI에서 get_zone이 Time –

+2

에서 제거 되었기 때문에 더 이상 작동하지 않습니다. 이것은 레일즈 3.2.8에서 사용하고있는 것입니다 : def same_time_of_day_in_time_zone (zone = :: Time.zone) ActiveSupport :: TimeWithZone.new (nil, : 시간 .find_zone! (영역), 자기) 끝 –

-1

하나의 방법은 사용자들이 그들을보고 싶은 시간대 결정하게 다음 UTC에 모두 저장하고있다. 이벤트가 연결되어 있기 때문에

+0

나는 이것이 왜 -1인지 물어볼 것입니다. 그런 다음 링크 된 페이지가 체코 어인지 또는 다른 것이 있는지 확인했습니다. – Dan

1

당신은 여기 UTC에 대해 걱정할 필요가 없습니다 그것이 발생하는 시간과 위치에 따라 달라집니다. 누군가 8pm 쇼를 위해 하와이에서 샌프란시스코로 여행 중이라면, 쇼가 그들을 위해 오후 4시에 시작될 것이라는 의미는 아닙니다. 그래서 평범한 시간과 위치를 저장할 수 있습니다. TZ에 대해 걱정할 필요가 없습니다 (아마도 밴드는 시간과 위치 형식을 가지고 있기 때문에).

레일스에 관한 한 모든 이벤트는 존재하는 TZ에서 발생합니다.이 재미있는 "위치"속성은 이벤트가 실제로 1000mi 떨어져 있다는 것을 독자에게 알려줍니다. 즉, 자동 TZ 변환 자체는 가능하지만 독자는 말할 수 없습니다. 처음에는 밴드가 입력 한 시간으로 변환 될 것입니다. 오후 8시 + "로스 앤젤레스", 오후 10시 + "툴사, OK."

여기 하나의 주름은 쇼가 인터넷을 통해 방송되는지, 아니면 그 장소가 이벤트에서 분리되어 어디에서 위와 같이 할지를 보여주는 것입니다.하지만 시청자/잠재적 청중 회원이 자신의 TZ (또는 그들 geolocate) 및보기에 표시시 응용 프로그램을 변환 할 수 있습니다.

관련 문제