Ruby / Railsで、UTC DateTimeを別のタイムゾーンに変換するにはどうすればよいですか?
Ruby / Railsで、UTC DateTimeを別のタイムゾーンに変換するにはどうすればよいですか?
回答:
time.in_time_zone(time_zone)
例:
zone = ActiveSupport::TimeZone.new("Central Time (US & Canada)")
Time.now.in_time_zone(zone)
あるいは単に
Time.now.in_time_zone("Central Time (US & Canada)")
ActiveSupportタイムゾーンの名前は、次のようにして確認できます。
ActiveSupport::TimeZone.all.map(&:name)
# or for just US
ActiveSupport::TimeZone.us_zones.map(&:name)
require 'active_support/time'
最初に。
rake time:zones:all
。もご覧くださいrake -D time
。でデフォルトのタイムゾーンを設定しますconfig/application.rb
。
Time.zone
それがあなたの希望のタイムゾーンであれば、あなたは使うことができます@date.to_time.to_datetime
> @date
=> Tue, 02 Sep 2014 23:59:59 +0000
> @date.class
=> DateTime
> @date.to_time
=> 2014-09-02 12:59:59 -1100
> @date.to_time.to_datetime
=> Tue, 02 Sep 2014 12:59:59 -1100
TimeZoneで操作されるActiveSupportのTimeWithZoneオブジェクトを試してください。ActiveSupportは、UTC時間を指定されたTimeZoneタイムゾーンに変換するためのin_time_zoneメソッドも提供します。mckeedの答えはコードを示しています。
RailsでActiveRecordオブジェクトを扱っている場合に備えて。
でTime.use_zone
設定されたデフォルトのタイムゾーンをオーバーライドするリクエストごとのタイムゾーンに使用することをお勧めしますconfig.time_zone