2

ユーザーが知っているインタビューの詳細を投稿できる Rails アプリケーションを構築しています。フォームには、日時セレクターである入力フィールドのインタビュー時間があります。このアプリケーションにユニバーサル サポートを提供したいと考えています。

実際の問題:

実稼働サーバーで IST タイム ゾーンを構成したとします。次に、日本のユーザーがインタビュー時間を選択すると、IST タイム ゾーンで解析されます。結果として、インタビュー時間は正しくありません。

正確な面接時間を表示する。

1.ユーザーからタイムゾーンを取得する必要がありますか? (おそらく選択ボックス)

2.タイムゾーンを自動的に検出する他のオプションはありますか?

ありがとうございます:)

不明な点がある場合は、質問の下にコメントを追加してください。

4

2 に答える 2

3

同様の問題があります。デフォルトの Rails 設定を維持して、すべての時刻が UTC で DB に保存されるようにし、ActiveSupport::TimeZoneの次のメソッドを使用しました。

  • フォームから日付を保存する必要があるときはlocal_to_utc、日付をローカルから UTC に変換していました。

    ActiveSupport::TimeZone[my_timezone].local_to_utc(date)
    
  • DBから日付を表示する必要があるとき、私は使用しました

    ActiveSupport::TimeZone[my_timezone].utc_to_local(date)
    

このように、DB に保存されるすべての日付は UTC ですが、ユーザーによってローカル時間で処理されるため、ユーザーごとに異なる場合があります。タイムゾーンをUserレベル ( stringDB のフィールド) に保存したり、選択ヘルパーを使用して選択フィールドを生成したりできます。

于 2012-05-07T11:49:15.113 に答える
1

Baldrickの答えは正しいです。時刻をUTCで保存し、各ユーザーのタイムゾーンをユーザーのレコードに保存する必要があります。

さらに、ユーザーがよく見たいのは、その場所の現地時間です。

これを行うには、UTC時刻を保存するときに、イベントを作成したユーザーのタイムゾーンも保存します。

このすべてのトリッキーな部分は、MySQLおよび他の多くのデータベースが日付/時刻とともにタイムゾーンを保存しないことです。したがって、タイムゾーン情報は、別のフィールドに明示的に保存しない限り失われます。

したがって、データベースには2つのフィールドが必要です。

event_time_utc: Datetime, # UTC timezone for when the event happened
event_timezone: string # the timezone of where the event happened
于 2012-05-07T13:12:56.243 に答える