簡體   English   中英

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(捆綁安裝安裝)

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

看起來您已經在客戶端中設置了UTC時區-即使這似乎與Time.now的結果相矛盾。 您會從Time.zone得到什么?

由於夏季沒有額外的DST偏移量(因為我們現在有冬天),您的時區可能是CET(歐洲中部時間),而Time.now似乎已轉換為UTC。

您可以使用Time.now.in_time_zone("Europe/Paris") -(或任何適合您數據庫時區設置的時區名稱Time.now.in_time_zone("Europe/Paris")在Ruby中強制使用特定時區。

或者,您可以使用Time.now.utc強制使用UTC時間戳,並在Postgres中的AT TIME ZONE 'Europe/Berlin' Time.now.utc添加時間戳。

或者您使用帶有timestamp with time zone操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM