1

我有一个问题,在 Rails 中进行查询会在生成的 postgres sql 语句中转换错误的时间。shell、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

在 postgres 中:

=> 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.now似乎被转换为 UTC。

Time.now.in_time_zone("Europe/Paris")您可以使用- (或任何适合您的数据库时区设置的时区名称)强制 Ruby 中的特定时区。

或者您可以强制使用 UTC 时间戳Time.now.utc并将其附加AT TIME ZONE 'Europe/Berlin'在 Postgres 中。

或者你在timestamp with time zone任何地方都可以操作。

于 2013-02-09T23:23:08.660 回答