2016-03-19 27 views
0

これまでに聞いたような気がしますが、それまでの解決策はありませんでした。私は、時間とタイムゾーンを保持している予約を格納してい時間と時刻をUTCに変換

Herokuのを使用して、私も(現時点では)はPostgresに縛ら午前による

Time.zone = @booking.time_zone 

    arrival_date = Time.zone.parse @booking.arrival_date.to_s 
    @booking.arrival_date = arrival_date.utc 

    @booking.save 

は、私はその後、私は

は、だから私は@booking.arrival_date@booking.time_zone

これまでされている私の解決策を持って適切な時期にそれで機能を実行できるように、UTCにその時間を変換する必要があります

これは機能しません。 EDIT:現在値は、ユーザが選択した時間に滞在している(とUTCに変換されていない)

すべてのヘルプははるかに高く評価されるだろう:)

+0

"これは機能していません"実際に何が起こっているかはわかりません。あなたの入力は何ですか?期待される結果は何ですか?実際の出力は何ですか?また、夏時間の移行のために現地時間があいまいでスキップされた場合など、困難な問題も考慮する必要があります。 –

+0

ちょっと、編集内容を追加して、現時点で何が起こっているかを表示しました。また、私は遊びに約6時間を持っているので、夏時間やその他の事柄については後で心配することができます(もしあれば) –

+0

'Time.zone'の値が何であるかはまだ分かりません。任意のサンプル。他に何も関与しないで問題を示す短いが完全なRubyスクリプトを作成できれば、それはあなたを助けやすくなります。 –

答えて

1

を私はあなたが任意のコードを記述する必要はないと思いますまったく。 config/application.rbで、アプリケーションのタイムゾーンをどのように設定したかを調べてください。デフォルトはUTCです。そのままにする必要があります。また、Postgresのデフォルトタイムゾーンを調べます。あなたがHerokuであれば、それはUTCでなければなりません。

これはRailsなので、あなたの列はおそらくTIMESTAMP WITHOUT TIME ZONEです。その後、内部的にすべての時間が自動的にUTCに格納されます。ですから、それらの計算を実行したい場合は、先に進んでください。

これは間違いがあります:Time.zone = @booking.time_zoneTime.zoneの値は、グローバル変数であり、Railsの設定の一部です。それを設定することで、コードがスレッドセーフである(問題ではないかもしれない)ようにし、ある人が別のものを汚染させるようにします(おそらくそうです)。どこかに置く必要がある場合は、tz = @booking.time_zoneと言ってください。

を実行する必要がありますは、ユーザーが送信した時間文字列を解析して、指定したタイムゾーンから解釈します。 (私が)ここで

article on time zones in Railsであるあなたは、欠損値のためにいくつかのチェックを追加し、独自のコードにこれを適応させる必要があります。もちろん、

h = booking_params 
tz = ActiveSupport::TimeZone[h[:time_zone]] 
h[:arrival_date] = tz.parse h[:arrival_date] 
@booking = Booking.new(h) 

など:それはあなたのコントローラに対処したい何かこれをより明確に考えるのに役立つかもしれません。

+0

ありがとう!私は間違った方向に向かっていたが、これは意味をなさない。また、質問をする前にあなたのブログ記事を読んでいますが、私の欲求不満の中で(私はそれを取りませんでした) –

関連する問題