1

Railsでクエリを実行すると、生成されたpostgres sqlステートメントで間違った時間が変換されるという問題があります。シェル、ruby、postgres での時間は 23:32 ですが、生成された sql ステートメントでは 22:32 です。

何が間違っているのですか?Rails 3.2.11、pg gem 0.14.1 (bundle install でインストール) を使用します。

Debian システム時間:

$ date
Sat Feb  9 23:32:10 CET 2013

ルビーで:

1.9.2p290 :004 > Time.now
=> 2013-02-09 23:32:15 +0100

ポストグルで:

=> select current_time;
   timetz       
--------------------
23:32:24.213487+01
(1 row)

生成された Rails クエリ:

1.9.2p290 :003 > Item.where "next_crawling_at < ?", Time.now
Item Load (1.1ms)  SELECT "items".* FROM "items" WHERE (next_crawling_at < '2013-02-09 22:32:17.935595')
4

1 に答える 1

1

からの結果と矛盾しているように見えますが、クライアントで UTC タイム ゾーンを設定しているようですTime.now。あなたは何を手に入れTime.zoneますか?

夏時間の追加の DST オフセットがない場合 (現在は冬になっているため)、タイム ゾーンはおそらく CET (中央ヨーロッパ時間) ですが、Time.nowUTC に変換されているようです。

Time.now.in_time_zone("Europe/Paris")- (または、DB のタイムゾーン設定に適合する任意のタイムゾーン名)を使用して、Ruby で特定のタイムゾーンを強制することができます。

または、Postgresで UTC タイムスタンプを強制しTime.now.utcて追加することもできます。AT TIME ZONE 'Europe/Berlin'

または、timestamp with time zoneどこでも操作できます。

于 2013-02-09T23:23:08.660 に答える