2010/01/07

Rails Timezone の設定色々

困ったときのRails timezone api

Timezone 基本設定

config/environments/production.rb 等、各環境後とに・・・
config.time_zone = "Tokyo"
ApplicationController でのタイムゾーン設定
class ApplicationController < ActionController::Base
  before_filter :set_timezone
  def set_timezone
    Time.zone = session[:tz] if session[:tz]
  end
end
そして、ログインに使うコントローラーで session[:tz] を設定
class User::LoginController < UserRootController
  def index
    if request.post?
      if session[:user_id] = user.authenticate(params[:user][:email], params[:user][:password])
        user = User.find(session[:user_id])
        session[:tz] = user.time_zone if user.time_zone
        flash[:notice] = t('logged_in')
        if session[:return_to_path]
          redirect_to session[:return_to_path]
        else
          redirect_to user_root_path
        end
      else
        flash[:error] = t('login.failed')
        session[:user_id] = nil
      end
    end
  end
end

その他色々便利なタイムゾーン系メソッド

特定のタイムゾーンで表示する
sometime.in_time_zone("Hawaii")
# @user.time_zone にユーザーのタイムゾーンが入っている場合
sometime.in_time_zone(@user.time_zone)


オフセット、またはタイムゾーン文字列からタイムゾーンを返す
※特定のタイムゾーンがRails に存在するかどうかチェックするのに便利。Cafetalkでは、旧システムからデータを移行する際に使用しました。
ActiveSupport::TimeZone['Tokyo']
> (GMT+09:00) Tokyo
ActiveSupport::TimeZone[8]
ActiveSupport::TimeZone[+8]
> (GMT+09:00) Osaka


タイムゾーンの名前だけを表示
ActiveSupport::TimeZone[+8].name
> Osaka
オフセットを表示
Time.zone.utc_offset/3600
> -5 など。。。
フォームでタイムゾーンのプルダウンリストを表示
<%= f.time_zone_select( :time_zone, nil, :include_blank => true) %>
http://mad.ly/2008/04/09/rails-21-time-zone-support-an-overview/
http://marklunds.com/articles/one/402
http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#M001513

0 件のコメント: