自分のローカル タイムゾーンで時刻を保存したくないのですが、Sequel のせいでとても苦労しています。それらをそこに入れる前にUTCに設定することができます(少し面倒です)が、それらを元に戻すと、それらはローカル日付であり、すべて8時間先であると想定されます。これはまだ実装されていないものですか?もしそうなら、回避策はありますか?ありがとう!
3 に答える
これは現時点では少し古くなっていますが、元の回答が投稿されてから、ここでの最善の解決策が変更されたと思います。設定した場合
Sequel.default_timezone = :utc
続編は常にUTCとして扱い、質問で説明されている動作を示しません。
詳細については、http: //sequel.jeremyevans.net/rdoc/classes/Sequel/Timezones.html を参照してください。
私自身、非常によく似た問題がありました。
この情報は、Sequel RDocから取得したものです。
Sequel は、データベースから返される時刻に Time または DateTime のいずれかを使用できます。デフォルトは時間です。DateTime に変更するには、次を使用します。
Sequel.datetime_class = DateTime
また、データベースにタイムゾーン情報を保存していないことを確認してください。Postgres を使用しており、列の型はタイム ゾーンなしのタイムスタンプです。
これにより、表示される日付/時刻が UTC になります。2009-07-13T03:22:53Zの日付/時刻を渡すと、結果が2009-07-13T03:22:53+00:00として表示されます。
それらを UTC として配置しようとする最も簡単な方法は、使用しているデータセット クラスのliteral_datetime および/またはliteral_time をオーバーライドして、UTC 時刻のリテラル文字列を返すことです。
それらを UTC で取得するかどうかは、使用しているアダプターによって異なります。たとえば、postgres アダプターは Sequel.string_to_datetime を呼び出しますが、これは Sequel.datetime_class (デフォルトでは Time) で parse を呼び出すだけです。datetime 列にタイムゾーン情報が含まれている場合、問題なく動作するはずです。タイムゾーン情報が含まれていない場合、Time.parse は現地時間が指定されていると想定します。その場合、Sequel.string_to_datetime をオーバーライドして、常に UTC オフセットを含む時刻を返すようにすることができます (おそらく Time.parse(s).gmtime を呼び出します)。