1

質問 1 - テキサス州ダラスで共有ホスティングを利用しているアプリを持っています...そのため、データベース/Web サーバーは現在米国中部時間に設定されています...これを変更できないため、UTC は考慮されていません。

私のアプリケーションは日付と時刻のデータを記録してユーザーに表示しますが、すべてのユーザーが異なるタイムゾーンにいる可能性があります。

アプリを構成して(config.time_zone = 'Central Time (US & Canada)')も、ユーザーがタイムゾーンを選択できるようにすると、

def user_time_zone(&block)
  Time.use_zone(current_user.time_zone, &block)
end

RoR は返されたデータをユーザーが選択したタイムゾーンで表示しますか? または、データを評価し、表示する前にそれに応じて変更する必要がありますか?

質問 1.1 - 日次/週次/月次レポートをユーザーに送信する関連メーラーがあります。CRON を使用してこれらを実行する場合、タイムゾーンを考慮して異なる時間間隔でジョブをスケジュールする必要がありますか? つまり、1 つのジョブに

when 'daily'
   @dates = params[:f]['Date Range'] = "#{Date.current} - #{Date.current}"

Date.current は、東海岸では 1 時間進み、西海岸では 3 時間遅れます。では、(まだ中部のサーバー タイムゾーンを使用して) 1 つを午後 11 時に (東部の場合) 実行し、もう 1 つを午前 2 時 (西部の場合) に実行しますか?

あらゆるアドバイス/支援をいただければ幸いです。ありがとう!

4

2 に答える 2

1

最良の結果を得るには、アプリケーションを実行しているコンピューターのタイム ゾーンがデータや動作に影響を与えないように、アプリケーションを作成する必要があります。

これは通常、コード内で UTC で作業することを意味します。たとえば、Time.now.utc単にTime.now. RoR の詳細については、この投稿を参照してください。

可能な場合はサーバーのタイム ゾーンを UTC に設定することをお勧めしますが、それはコード内でそれに依存する必要があるという意味ではありません。

2 番目の質問については、すべてのタイム ゾーンに独自の「日」の概念があることに注意してください。ビジュアライゼーションについては、このサイトを参照してください。

データを配置する各タイム ゾーンの深夜に個別のジョブを実行する必要があります。一部のアプリケーション (StackExchange Web サイトなど) は、すべてのユーザーに対して単一のタイム ゾーン (多くの場合 UTC) を使用します。他のアプリケーションは、独自のタイム ゾーンに従って各ユーザーのデータを調整します。アプリケーションに適したものを決定する必要があります。

ジョブをスケジュールするときは、各タイム ゾーンの午前 0 時が一致する UTC 時間を決定します。次に、その時間のジョブをスケジュールします。スケジューラーがそれが UTC であることを理解していることを確認してください。サーバーのローカル タイム ゾーンに合わせようとしないでください。調整すると、ローカル タイム ゾーンが夏時間に移行するときにエラーが発生する可能性があります。

スケジュールされたジョブが正しい時間に実行されるだけでなく、レポート クエリが実行対象の UTC 範囲を決定する際に正しいタイム ゾーンを使用していることを確認してください。

これは、タイム ゾーンが異なる 2 人のユーザーが同じデータを報告しても、結果が異なる可能性があることを意味することに注意してください。それぞれの「日」の期間がわずかに異なるためです。

于 2013-07-25T13:49:57.250 に答える