Techioz Blog

Rails: 日時文字列を特定のタイムゾーンに解析する方法

概要

Debian で Rails 3.2 と Ruby 1.9.3 を使用しています。 HTML フォームを介して文字列の形式で日付、時刻、タイムゾーンを収集するアプリがあります。このようなもの:

start_date: "04-15-2010",
start_time: "10:00:00",
timezone: "Central Time (US & Canada)"

私がやりたいのは、これら 3 つの要素を 1 つの日付に解析して、UTC としてデータベースに保存することです。この場合、UTC タイムゾーンになると、開始時刻に 7 時間が追加されます。 したがって、DB に保存される時刻は、受信した中部時間ではなく UTC として 17:00 になります。

日付を解析するために次のようなことを試しました。

ActiveSupport::TimeZone[timezone].at DateTime.strptime("{ 2012-04-09 20:00:00 }", "{ %Y-%m-%d %H:%M:%S }").to_i

ただし、%Z を使用して結果の時刻にタイムゾーンを組み込むことはできません。解析されないか、時間が中部時間ではなく UTC として解釈されます。したがって、私の質問は、保存されている実際の日付/時刻の値を変更せずに、日付文字列を特定のタイムゾーンに強制する方法です。文字列を解析して、その時点での正しいタイムゾーンを含む日付/時刻オブジェクトに変換して、将来のタイムゾーン変換が正確になるようにしたいと考えています。あちこち調べましたが、これを行う方法が見つかりません。これは、HTML フォームから入力された日付でよく行われることのように見えるので、奇妙です。助けていただきありがとうございます。

解決策

これを試して:

zone = "Central Time (US & Canada)"  

ActiveSupport::TimeZone[zone].parse("2013-04-03 17:47:00")