【问题标题】:Time.use_zone is ignored during active record query活动记录查询期间忽略 Time.use_zone
【发布时间】:2017-10-19 19:40:09
【问题描述】:

旧金山时间目前是中午 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 来看,这似乎是正确的用法。我错过了什么?

更新:

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

【问题讨论】:

    标签: ruby-on-rails activerecord timezone


    【解决方案1】:

    关于这个特定的查询,您不必太担心。 SELECT 查询将您的 Time.zone.now 转换为 UTC,但其他所有进入您的数据库的内容也是如此。

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

    【讨论】:

    • 如果您想将本地时间存储在数据库中,您可以在您的应用配置中添加config.active_record.default_timezone = :local。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 2016-03-10
    相关资源
    最近更新 更多