4

私は Rails 3.2 で実行していますが、任意のタイム ゾーンで与えられた時間を解析する適切な方法がわかりません。

例として、これは私が別々のキーで与えられた形式です

{
  "start_date"=>"2013-04-24 13:00:00",
  "timezone"=>"America/Los_Angeles",
  "timezone_offset"=>"GMT-0700",
  ...
}

この質問は、次のように答えることに非常に近いものです。

time = ActiveSupport::TimeZone.new('UTC').parse('2010-02-05 01:00:01')

問題は、引数として「America/Los_Angeles」を入力するとTimezone.new、GMT-8 のタイムゾーンが吐き出されることです。これは、DST の変更によるものと思われます。一方、受信したデータは、GMT からのタイムゾーン オフセットを定義しています。したがって、私の例では、望ましい出力は GMT-7 のタイムゾーンです。

タイムゾーンの名前を使用する代わりに、gmt オフセットがわかっている場合にタイムゾーンを取得する方法はありますか?

4

1 に答える 1

4

[]onを使用しActiveSupport::Timezoneて、gmtオフセットを時間単位で引数として渡すことができます。

api.rubyonrails.orgで見られるように:

[](arg)

特定のタイムゾーンオブジェクトを見つけます。引数が文字列の場合、検索するタイムゾーンの名前を意味すると解釈されます。数値の場合は、検索するタイムゾーンの時間オフセットまたは2番目のオフセットのいずれかです。(そのオフセットを持つ最初のものが返されます。)そのようなタイムゾーンがシステムに認識されていない場合は、nilを返します。

コード例:

ActiveSupport::TimeZone["America/Los_Angeles"]                              
 => (GMT-08:00) America/Los_Angeles
ActiveSupport::TimeZone[-8]                              
 => (GMT-08:00) America/Los_Angeles

だから、あなたがすることは:

time = ActiveSupport::TimeZone[-7].parse('2013-04-24 13:00:00')

ただし、多くのタイムゾーンが同じオフセット上にある可能性があるため、オフセットは複数のタイムゾーンと同等である可能性があるため、注意してください。

于 2013-03-15T20:39:29.497 に答える