多くの異なるタイムゾーンを使用するアプリケーションがあります...それらをコントローラーに設定し、ユーザーに応じて変更します。すべての時間は、タイムスタンプなどなしで UTC で保存されます。
私の理解では、これは Rails がタイムゾーンを処理する通常の方法です。これは、Postgres で直接何かを行う必要があり、タイムゾーンが問題になるまで、99% の確率で問題なく動作します。
たとえば、このクエリは GMT を除いて完全に間違っています。たとえば、中央タイム ゾーンでは、設定された時間に応じて、間違った日が取得されます。
Events.where("EXTRACT(dow FROM start_at)", Date.today.wday)
特定の日に該当するすべての日付を見つけようとしているところ。
私はこのようなことをしようとしています。タイムゾーン間で検索する必要はありません (それらは混在しません) が、正しい結果を得るために UTC でない場合はタイムゾーンを指定する必要があります。
User.events.where("EXTRACT(dow FROM start_at AT TIME ZONE ?) = ?", 'UTC', Date.today.wday)
しかしTime.zone
、Postgres の TIME ZONE で動作するものを提供するために使用する方法がわかりません。
Time.zone.tzinfo は時々動作します...Postgres は「Europe/Warsaw」で動作しますが、Rails は「Europe - Warsaw」を返します
一般的に、私はタイムゾーンであまり運がありません。ポインタがあれば幸いです。