在活动记录查询期间忽略Time.use_zone

时间:2017-10-19 19:40:10

标签: ruby-on-rails activerecord timezone

现在时间是旧金山时间下午12:33。

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来看,这似乎是正确的用法。我错过了什么?

更新:

向AR查询添加to_s使用了正确的时区。

1 个答案:

答案 0 :(得分:1)

关于这个特定的查询,你不应该太担心。 SELECT查询将您的Time.zone.now转换为UTC,但其他所有内容都会转换为您的数据库。

这是因为Rails默认情况下将所有日期时间转换为数据库中的存储(和查找)为UTC。当你的时间是12:33 PM时,它是19:33 UTC。