Rails3のActiveRecordでtimezoneが適用されない問題

※ この記事は最後まで読んでください。

Ruby on Rails3 では、設定ファイル(config/application.rb)に

config.time_zone = 'Tokyo'

とすることで、タイムゾーンを指定できる。
でも、そのままActiveRecordを利用してデータを保存しても、
created_at, updated_at はUTCとして保存されてしまう。

今回は、根が深そうだったので、

config/initializers/time_formats.rb

Time::DATE_FORMATS[:local] = lambda {|time|
  time.localtime.to_s(:db)
}

とし、ビュー側では

<%= post.updated_at.to_s(:local) %>

とすることで回避

追記

なんか application.rb に

config.time_zone = 'Tokyo'
config.active_record.default_timezone = :local

を追記するだけで、DBに保存する日付も問題なく動作するらしいので、
こちらのほうがよいかと思います。