在postgres准备好的声明中与rails时间相差1小时

时间:2013-02-09 22:51:08

标签: ruby-on-rails postgresql

我遇到的问题是,在rails中执行查询会在生成的postgres sql语句中转换错误的时间。 shell,ruby和postgres中的时间是23:32,但在生成的sql语句中它是22:32

任何想法都错了吗?我使用rails 3.2.11,pg gem 0.14.1(安装捆绑安装)

debian系统时间:

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

in ruby​​:

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')

1 个答案:

答案 0 :(得分:1)

看起来您已在客户端设置了UTC时区 - 即使这似乎与Time.now的结果相矛盾。你对Time.zone有什么看法?

夏季没有额外的DST偏移(因为我们现在有冬天),你的时区可能是CET(中欧时间),而Time.now似乎被转换为UTC。

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

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

或者您随身携带timestamp with time zone

相关问题