0

project締め切りを定義する日時属性を持つモデルがあります。締め切りは異なるタイム ゾーンのものであり、以下のような文字列形式で受け取ります。

Jan 1st 2013 00:00:00 EST
Feb 9th 2013 23:59:00 PST

これらの値をデフォルトの UTC 形式でデータベースに保存したいと考えています。Time.zone.parseやのように時間を解析するための多くのオプションがあることがわかりましたTime.parse。私の質問は: 異なるタイム ゾーンの日時を解析するベスト プラクティスは何ですか? を使用してRails 3.2.9います。

4

2 に答える 2

1

で正しいタイムゾーンを設定している限り、まったく心配する必要はありませんconfig/application.rb

config.time_zone = 'UTC'

時間文字列を属性に割り当てるだけで、ActiveRecord はそれを正しく変換します。

1.9.3p125 :002 > project.deadline = "Jan 1st 2013 00:00:00 EST"
 => "Jan 1st 2013 00:00:00 EST" 
1.9.3p125 :003 > project.deadline
 => Tue, 01 Jan 2013 05:00:00 UTC +00:00 
1.9.3p125 :004 > project.deadline = "Feb 9th 2013 23:59:00 PST"
 => "Feb 9th 2013 23:59:00 PST" 
1.9.3p125 :005 > project.deadline
 => Sun, 10 Feb 2013 07:59:00 UTC +00:00 

ActiveRecord はTime.zone.parse文字列を内部的に解析するために使用します。

于 2012-12-18T13:56:57.457 に答える
0

実行Time.parseすると、タイムスタンプがレールで構成されたタイムゾーンに変換されます。たとえば、Rails アプリは EST で実行されます。

[5] pry(main)> Time.parse('Jan 1st 2013 00:00:00 EST')
=> 2013-01-01 00:00:00 -0500
[6] pry(main)> Time.parse('Feb 9th 2013 23:59:00 PST')
=> 2013-02-10 02:59:00 -0500

結果を EST タイムゾーンに取得するために使用されるタイムスタンプに注意してください+3:00hrsPST

各タイムスタンプの UTC バージョンを取得するには、単に呼び出しますutc

[7] pry(main)> Time.parse('Jan 1st 2013 00:00:00 EST').utc
=> 2013-01-01 05:00:00 UTC
[8] pry(main)> Time.parse('Feb 9th 2013 23:59:00 PST').utc
=> 2013-02-10 07:59:00 UTC
于 2012-12-18T13:01:16.750 に答える