关于postgresql:在postgres准备好的声明中与rails时间的1小时差异

1 hour difference with rails time in postgres prepared statement

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

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

debian系统时间:

1
2
$ DATE
Sat Feb  9 23:32:10 CET 2013

在红宝石:

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

在postgres:

1
2
3
4
5
=> SELECT CURRENT_TIME;
   timetz      
--------------------
23:32:24.213487+01
(1 ROW)

生成的rails查询:

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


看起来您已在客户端设置了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