2011-01-15 6 views
5

사용자가 시간대를 설정할 수있는 응용 프로그램이 있습니다. 사용자가 미리 알림 항목을 만들면 해당 항목은 UTC로 db에 저장됩니다. 하지만 앱에서 캘린더 항목을 열면 선택한 시간대의 항목을 볼 수 있습니다. 나는 만성을 사용하고 있지만 여기는 중요하지 않습니다. 이 후레일의 시간대

before_filter :set_user_time_zone 
... 
def set_user_time_zone 
    Time.zone = current_user.timezone if user_signed_in? 
end 

, 항목이 여전히 UTC에 있지만, 시간 차이로 저장됩니다 내 ApplicationController.rb에서
, 나는 다음과 같은 문자열을 가지고있다. 예를 들어, 시간대를 "델리"로 설정했는데 이는 UTC에서 +530입니다. "Jan, 16 - 12:15 AM"에 대한 일정 관리 항목을 저장하려면 데이터베이스에 "2011-01-15 18:45:19 UTC"가 채워집니다 - 그래서 실제 시간 5시 30 분 이전에 저장합니다.
UI에서도 현재 사용자의 시간대 대신 표시되는 시간 대신이 항목을 계속 볼 수 있습니다.

레일에서 이러한 종류의 시간대 기능을 처리하는 올바른 방법을 알고 싶습니다.

+1

내가 모르겠지만, 좋은 - 투 - 알고있다 : http://stackoverflow.com/questions/4529387/does-anyone -new-how-to-user-time-in-rails-2-3 – Zabba

답변

8

데이터베이스에서 사용자는 시간을 UTC로 저장해야하며 UI의 경우 사용자 시간대로 변환해야합니다. 레일 콘솔에서

예 :이 링크가 도움이 될 것입니다 경우

Time.zone = "New Delhi"   #=> "New Delhi" 

Time.now      # => 2011-01-15 16:45:18 -0600 

Time.now.in_time_zone   # => Sun, 16 Jan 2011 04:15:26 IST +05:30 
+0

이것은 스레드로부터 안전하지 않습니다. (레일즈가 Thread.current에 이것을 저장하는 것처럼 보인다) –