Rails 2.3.8 では、config/environment.rbのconfig.time_zoneをコメントアウトして使っていた。その結果として、データベースに格納されるdatetime形式の値は、Railsを動かしているサーバーの時間と一致していた。
Rails 3.0にしたら、config/application.rbのconfig.time_zoneをコメントアウトしても、しなくてもデータベースに格納されるdatetime形式の値は、UTC = 0で格納される。一方で、コメントアウトと「config.time_zone = Tokyo」とで、アプリケーション側で呼び出した値がUTCの値が変化する。
データーベース内 | アプリケーション呼び出し | ||||
config.time_zoneをコメントアウト | UTC 0 | UTC 0 | |||
config.time_zone = Tokyo | UTC 0 | UTC +9 (JST) |
さらに、モデル hogehogeのフィールド t.datetime start の表記方法によってもUTCの値が変化する。Viewにおいて、@hogehogeにモデルhogehogeの値が入っているとしたとき、以下のようになる。
@hogehoge['start'] | UTC 0 | ||
@hogehoge.start | UTC +9 (JST) |
いまいち原理がわからないけど、現象は以下のとおり。
以上より、config.time_zoneで設定したタイムゾーンは、アプリケーション側で呼び出す際に適用されるので、データベースに格納されている日付をRailsのメソッドを経由しないで呼び出さないようにするべし。