ユーザーにRuby on Railsウェブサイト。日付をDateTimeオブジェクトにパースします。
date = DateTime.new(params[:year].to_i, params[:month].to_i, params[:day].to_i, params[:hour].to_i, params[:minute].to_i)
または
date = DateTime.parse(params[:date])
両方のDateTime
sがnotのように設定したユーザーのタイムゾーンになります:
Time.zone = "Pacific Time (US & Canada)"
上記のDateTime
sを解析して正しいタイムゾーンに入れるにはどうすればよいですか? DateTime.new
メソッドには、時間オフセットの7番目の引数があります。特定の時間内のタイムゾーンのオフセットを簡単に検索する方法はありますか?または、DateTime
以外のものを使用する必要がありますか?
以前にTime.zone.local
を設定した場合は、Time.zone
を使用できます。
user_time = Time.zone.local(params[:year].to_i, params[:month].to_i, params[:day].to_i, params[:hour].to_i, params[:minute].to_i, 0)
ActiveSupport::TimeWithZone
のドキュメントをご覧ください。
試してください:
Time.zone = "Pacific Time (US & Canada)"
Time.zone.parse('8-11-2013 23:59:59') #=> Fri, 08 Nov 2013 23:59:59 PST -08:00
OR
Time.now.in_time_zone("Pacific Time (US & Canada)")
OR
DateTime.now.in_time_zone("Pacific Time (US & Canada)")
次のコードを使用して、目的のDateTime
でTimeZone
オブジェクトを作成できます。
DateTime.new(2013, 6, 29, 10, 15, 30).change(:offset => "+0530")
[〜#〜] update [〜#〜]:あり 新着 1.9.1のバージョン Rails ルビー、以下の行は魔法のように同じ仕事をします。
DateTime.new(2013, 6, 29, 10, 15, 30, "+0530")
ドキュメント ここ
DateTime.new
は、オプションのoffset引数(7番目として)をRuby 1.9.1
我々は書ける
DateTime.new(2018, 1, 1, 0, 0, 0, Time.zone.formatted_offset)
「datetime」という名前の正しいDateTimeオブジェクトが既にあり、それをコピーする場合は、そのオブジェクトに対して「getutc」を呼び出し、その後で「in_time_zone」を使用できます。
DateTime.new(datetime.getutc.year, datetime.getutc.month, datetime.getutc.day, time.getutc.hour, time.getutc.min).in_time_zone