2017-10-19 112 views
0

當前時間爲舊金山中午12點33分。Time.use_zone在活動記錄查詢期間被忽略

irb(main):027:0> Time.use_zone("Pacific Time (US & Canada)") { puts Time.zone.now } 2017-10-19 12:33:06 -0700

Time.use_zone("Pacific Time (US & Canada)") { Event.where("starts_at >= ?", Time.zone.now) } Event Load (1.4ms) SELECT "events".* FROM "events" WHERE (starts_at >= '2017-10-19 19:33:22.532660')

從文檔和previous SO threads來看,這似乎是在正確的使用方法。我錯過了什麼?

UPDATE:

添加to_s到AR查詢中使用正確的時區。

回答

1

關於這個特定的查詢,你不應該太擔心。 SELECT查詢將您的Time.zone.now轉換爲UTC,但所有其他數據都轉到您的數據庫。

發生這種情況是因爲Rails將所有日期時間轉換爲默認情況下在數據庫中存儲(和查找)到UTC。當你的時間是12:33 PM是UTC 19:33。

+0

如果你想在數據庫中存儲本地時間,你可以在你的應用程序配置中添加'config.active_record.default_timezone =:local'。 –