Time.use_zone在活动记录查询期间被忽略
问题描述:
当前时间为旧金山中午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查询中使用正确的时区。
答
关于这个特定的查询,你不应该太担心。 SELECT
查询将您的Time.zone.now
转换为UTC,但所有其他数据都转到您的数据库。
发生这种情况是因为Rails将所有日期时间转换为默认情况下在数据库中存储(和查找)到UTC。当你的时间是12:33 PM是UTC 19:33。
如果你想在数据库中存储本地时间,你可以在你的应用程序配置中添加'config.active_record.default_timezone =:local'。 –