web-dev-qa-db-ja.com

Railsの既存のTime.zoneからRuby DateTimeを作成するには?

ユーザーに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])

両方のDateTimesがnotのように設定したユーザーのタイムゾーンになります:

Time.zone = "Pacific Time (US & Canada)"

上記のDateTimesを解析して正しいタイムゾーンに入れるにはどうすればよいですか? DateTime.newメソッドには、時間オフセットの7番目の引数があります。特定の時間内のタイムゾーンのオフセットを簡単に検索する方法はありますか?または、DateTime以外のものを使用する必要がありますか?

25
at.

以前に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 のドキュメントをご覧ください。

21
user324242

試してください:

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)")
32
shweta

次のコードを使用して、目的のDateTimeTimeZoneオブジェクトを作成できます。

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")

ドキュメント ここ

16
SriramK89

DateTime.newは、オプションのoffset引数(7番目として)をRuby 1.9.1

我々は書ける

DateTime.new(2018, 1, 1, 0, 0, 0, Time.zone.formatted_offset)
3
twnaing

「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
1
Adreamus