私はRailsとPostgresで日付と時刻を扱っており、この問題に遭遇しています:
データベースはUTCです。
ユーザーはRailsアプリでタイムゾーンを選択しますが、時刻を比較するためにユーザーの現地時間を取得する場合にのみ使用します。
ユーザーは、2012年3月17日午後7時に時間を保存します。タイムゾーンの変換やタイムゾーンを保存したくありません。日付と時刻を保存したいだけです。そのようにして、ユーザーがタイムゾーンを変更した場合、2012年3月17日午後7時に表示されます。
ユーザーが指定したタイムゾーンのみを使用して、ユーザーのローカルタイムゾーンで現在時刻の「前」または「後」のレコードを取得します。
私は現在「タイムゾーンなしのタイムスタンプ」を使用していますが、レコードを取得するとき、Rails(?)はそれらをアプリのタイムゾーンに変換しますが、これは望ましくありません。
Appointment.first.time
=> Fri, 02 Mar 2012 19:00:00 UTC +00:00
データベース内のレコードはUTCとして出力されるように見えるため、私のハックは現在の時刻を取得し、「Date.strptime(str、 "%m /%d /%Y")」でタイムゾーンを削除してからそれでクエリ:
.where("time >= ?", date_start)
周りのタイムゾーンを無視するだけの簡単な方法が必要なようです。何か案は?
デフォルトでUTCで処理する場合:
config/application.rb
、 追加:
config.time_zone = 'UTC'
次に、現在のユーザーを保存する場合、タイムゾーン名はcurrent_user.timezone
あなたは言うことができます。
post.created_at.in_time_zone(current_user.timezone)
current_user.timezone
は有効なタイムゾーン名でなければなりません。そうでなければ、ArgumentError: Invalid Timezone
、 フルリスト を参照してください。