Rails 2.1・その12(DBに登録してあるUTC日付データを簡単変換)
Rails2.1で日時(timestamp)カラムをテーブルに作ってセーブするとUTC時間で記録されます。
それは、なぜかというと
config/environment.rb ファイルに
と書いてあるからです。
今回は、この 'UTC' という値がミソになります。
これを 'Tokyo' に変えても、DB にはやっぱりUTC時間で記録されます。
じゃあ何が違うんですか?っていうと、モデルを使用して値を取ってくると設定したタイムゾーンでの値となります。
例えば、
UTC的に言うと 2008/06/08 02:52:00 だったら
タイムゾーンがUTCの場合は
Sun, 08 Jun 2008 02:52:00 UTC +00:00
を取得し、
タイムゾーンがTokyoの場合は
Sun, 08 Jun 2008 11:52:00 JST +09:00
を取得します。
ところで、config/environment.rb ファイルではなく、たとえばコントローラでタイムゾーンを改めて設定したくなっちゃったー、という時は、
という指定の仕方もできます。ruby にそもそも備わっている Time.now.zone と混乱しないように注意しなくちゃなりませんね。
ところで、このタイムゾーンの名前ですが、
で全て参照できます。自分のローカルのタイムゾーンは、
で参照できます。
最後に、もう国際化とか関係ないからDBにもとにかくUTCじゃなくて日本時間(自分のローカル時間)を記録させてくれ、という場合は、
config/environment.rb の先ほどの行をコメントアウトしましょう。
【広告】
それは、なぜかというと
config/environment.rb ファイルに
config.time_zone = 'UTC'
と書いてあるからです。
今回は、この 'UTC' という値がミソになります。
これを 'Tokyo' に変えても、DB にはやっぱりUTC時間で記録されます。
じゃあ何が違うんですか?っていうと、モデルを使用して値を取ってくると設定したタイムゾーンでの値となります。
例えば、
UTC的に言うと 2008/06/08 02:52:00 だったら
タイムゾーンがUTCの場合は
Sun, 08 Jun 2008 02:52:00 UTC +00:00
を取得し、
タイムゾーンがTokyoの場合は
Sun, 08 Jun 2008 11:52:00 JST +09:00
を取得します。
ところで、config/environment.rb ファイルではなく、たとえばコントローラでタイムゾーンを改めて設定したくなっちゃったー、という時は、
Time.zone = 'Tokyo'
という指定の仕方もできます。ruby にそもそも備わっている Time.now.zone と混乱しないように注意しなくちゃなりませんね。
ところで、このタイムゾーンの名前ですが、
rake time:zones:all
で全て参照できます。自分のローカルのタイムゾーンは、
rake time:zones:local
で参照できます。
最後に、もう国際化とか関係ないからDBにもとにかくUTCじゃなくて日本時間(自分のローカル時間)を記録させてくれ、という場合は、
config/environment.rb の先ほどの行をコメントアウトしましょう。
# config.time_zone = 'UTC'
【広告】