おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

Railsのタイムゾーン雑感

Railsの2.1あたりからタイムゾーンのサポートがされるようになっています。RAILS_ROOT/config/environment.rbにて

  config.time_zone = 'UTC'

の'UTC'部分をいじることによりタイムゾーンの設定が出来ます。日本国内オンリーでアプリを作る場合は、

  config.time_zone = 'Tokyo'

のようににしとけばおーけーです。

気をつける事

外部から時間を受け取ってDBに入れる場合、よく考えずに

DateTime.new(2008, 2, 1, 15, 30, 45) #=>Fri, 01 Feb 2008 15:30:45 +0000

のようにしたものをDBに入れると、その時間はUTCとして扱われるため、期待した時間より9時間進んだ時間がDBに入る事になってしまいます。これを避けるには、

Time.zone.local(2008, 2, 1, 15, 30, 45) #=> Fri, 01 Feb 2008 15:30:45 JST +09:00

のようにして、ActiveSupport::TimeWithZoneのインスタンスを作ってやる必要があります。

コメントアウトの方が楽?

  # config.time_zone = 'UTC'

のように設定をコメントアウトし、ローカルタイムを使ったほうが面倒がなくてよいように思う方もいらっしゃると思います。が、下記の記事にもあるように、外部プラグインの中にutcを決め打ちで使用しているものもあるようなので設定した方が無難かと思います。

タイムゾーンはどのように設定しておこうか... - ザリガニが見ていた...。
Rails(2.1.0)のtimezone - satake7’s memo