in_time_zone
でTime
とDateTime
のタイムゾーンを切り替えられる。
ENV["TZ"] = "UTC"
time = Time.utc(2012, 4, 30, 18)
time.in_time_zone("Asia/Tokyo")
#=> Tue, 01 May 2012 03:00:00 JST +09:00
ただしこれをやってもto_s(:db)
の結果はもとのタイムゾーンをベースに出力されるので要注意。
time.in_time_zone("Asia/Tokyo").to_s(:db)
#=> 2012-04-30 18:00:00
まぁデータベースのタイムゾーンとENV["TZ"]
はだいたい一致しているから、このほうが都合はいいんだろう。
特定のタイムゾーンにおける月初の時刻を、ENV["TZ"]
の表現で取得したいなら2回in_time_zone
を使う。
time.in_time_zone("Asia/Tokyo").
beginning_of_month.
in_time_zone(ENV["TZ"])
#=> Mon, 30 Apr 2012 15:00:00 UTC +00:00
# 日本時間での2012-05-01 00:00:00
一つのテーブルで複数のタイムゾーンに対応するにはこんな変換が必要になる、のかな。