0

scheduled_on異なる属性を持つ複数のスケジュールされたオブジェクトを作成します。たとえば、各オブジェクトには、毎月1日の午後4時に着陸する日付があります。

これらのオブジェクトの1つがタイムゾーンの変更にヒットすると、アプリは、親のタイムゾーンを基準にして、1時間前または1時間遅れてインテリジェントに構成します。

問題は、アプリがオブジェクトを午後4時(太平洋標準時)として保存し、最終的に(PDTまたは1時間先または午後5時)と表示されることです。これは、UTCで1時間の休暇を節約する必要があることを意味します。これにより、時間になると、現在のタイムゾーンに関係なく午後4時として表示されます。

Railsでこれを確実にするための最良のテクニックは何ですか?

4

1 に答える 1

1

タイムゾーンに関連してRailsで時間を追加することについて知っておくべきいくつかの良いことを指摘することで、この質問に答えます。

時間を追加すると、タイムゾーンが変更されても同じ時間を維持するために、UTC で時間が割り当てられます。

t = Time.now
-> 2012-08-10 13:17:01 +0200
t + 90.days
-> 2012-11-08 13:17:01 +0100

DateTime はこれを行いません。DateTime は、開始した同じ TimeZone で 1 時間上昇または 1 時間下降します。

 dt = DateTime.now
 => Fri, 10 Aug 2012 13:16:54 +0200 
 dt + 90.days
 => Thu, 08 Nov 2012 13:16:54 +0200

ただし、DateTime は、2 つの DateTime を減算することによって実行できる 2 つの日付間の日数を取得する唯一の方法です。これは、時間ではできません。時間を減算すると、完全な 24 時間で割ることができず、タイムゾーンの切り替えのために無理数が得られるためです。

これは私の問題に固有のものです。しかし、私は Time を DateTime に変換して距離の日数を見つけてから、時間に再変換して TimeZone の変更に関連する UTC で後の時間を見つけることで問題を解決しました。

original_job.to_time + ( new_date.to_datetime - original_job.to_datetime ).to_i.days
于 2012-08-10T11:26:39.610 に答える