2

私はdatetimepickerを使用しており、paramsから取得した文字列datetimeを特定のユーザー依存のタイムゾーンのdatetimeに保存する必要があります。これにより、適切な UTC 日時をデータベースに保存できます。

params[:notify_at] #=> "2014-07-05 14:30:00"

user.time_zone #=> #<ActiveSupport::TimeZone:0x00000007535ac8 @name="Warsaw", @utc_offset=nil, @tzinfo=#<TZInfo::TimezoneProxy: Europe/Warsaw>, @current_period=nil>

そして、私は次のようなことをしたいと思います:

date = params[:notify_at].to_datetime(user.time_zone) #=> Sat, 05 Jul 2014 12:30:00 +0000
(its 14:30 in user's localtime but 12:30 in UTC)
4

2 に答える 2

7

in_time_zoneメソッドを使用できます。例えば:

DateTime.current.in_time_zone("Alaska")
# => Fri, 23 May 2014 07:21:30 AKDT -08:00

したがって、ユースケースの場合:

params[:notify_at].to_datetime.in_time_zone(user.time_zone)

プロのヒント: Rails v4+ を使用している場合、文字列に対して直接これを行うことができます。

"2014-07-05 14:30:00".in_time_zone("Alaska")
# => Sat, 05 Jul 2014 14:30:00 AKDT -08:00

アップデート

次のように、文字列をタイム ゾーン (文字列が既にそのタイム ゾーンにあるはずです) に直接解析できます。

Time.zone.parse("2014-07-05 14:30:00")
# => Sat, 05 Jul 2014 14:30:00 CEST +02:00

したがって、ユースケースでは次のようにします。

user.time_zone.parse(params[:notify_at])
于 2014-05-23T15:22:54.927 に答える
-1

これを試して:-

date = params[:notify_at].to_datetime.in_time_zone(user.time_zone)

Rails コンソール出力:-

1.9.3p385 :004 > d= "2014-07-05 14:30:00"
=> "2014-07-05 14:30:00" 
1.9.3p385 :010 > d.to_datetime.in_time_zone("Pacific Time (US & Canada)")
=> Sat, 05 Jul 2014 07:30:00 PDT -07:00 
1.9.3p385 :011 > d.to_datetime.in_time_zone("Alaska")
=> Sat, 05 Jul 2014 06:30:00 AKDT -08:00 
1.9.3p385 :012 > to_datetime.in_time_zone
于 2014-05-23T15:27:15.903 に答える