我遇到的问题是,在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')
答案 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
。