我有一個與Postgresql作爲默認數據庫的Rails應用程序。我有一個錶帶有兩個日期時間列start_date和end_date的PromotionPipeLine。 時間在數據庫列中以UTC格式保存。我想比較當前時區與保存的列時間,但似乎有一些問題。 我已經定義範圍下面postgresql將utc轉換爲當地時間沒有在軌道上做?
scope :changing_promotion, -> {where("(to_char(start_date At Time zone 'UTC', 'YYYY-MM-DD HH24')='#{(Time.now).strftime('%Y-%m-%d %H')}') or (to_char(end_date At Time zone 'UTC', 'YYYY-MM-DD HH24')='#{(Time.now).strftime('%Y-%m-%d %H')}')")}
視爲給定的,我稱它在軌道控制檯,
PromotionPipeLine.changing_promotion
Rails的控制檯顯示我的SQL查詢作爲,
SELECT "promotion_pipe_lines".* FROM "promotion_pipe_lines" WHERE ((to_char(start_date At Time zone 'UTC', 'YYYY-MM-DD HH24')='2017-09-16 15') or (to_char(end_date At Time zone 'UTC', 'YYYY-MM-DD HH24')='2017-09-16 15'))
,它什麼也不返回 當我在pgAdmin中運行SQL查詢時,它給我預期的記錄。
'Time.now'給出了系統時區的時間這往往是不一樣的'Time.now.utc'。 – max