29

Ruby on Rails Web サイトで日付を入力するユーザーがいます。次のような日付を 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 は、以前に次のように設定したユーザーのタイムゾーンにはありません。

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

DateTime上記の s を適切なタイムゾーンに解析するにはどうすればよいですか? DateTime.newメソッドには、時間オフセットの 7 番目の引数があることを知っています。特定の時間のタイム ゾーンのオフセットを調べる簡単な方法はありますか? または、以外のものを使用する必要がありDateTimeますか?

4

5 に答える 5

23

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

DateTime.new(2013, 6, 29, 10, 15, 30).change(:offset => "+0530")

更新: Rails Ruby の新しい1.9.1 バージョンでは、以下の行が魔法のように同じ仕事をします。

DateTime.new(2013, 6, 29, 10, 15, 30, "+0530")

ドキュメントはこちら

于 2013-06-29T04:39:24.723 に答える
22

以前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ドキュメントを見てください。

于 2013-04-06T09:29:06.393 に答える
1

「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
于 2013-08-18T10:54:28.347 に答える