我正在处理Rails和Postgres中的日期和时间并遇到这个问题:
数据库采用UTC格式.
用户在Rails应用程序中设置选择的时区,但仅在获取用户本地时间来比较时间时使用.
用户存储时间,例如2012年3月17日晚上7点.我不希望存储时区转换或时区.我只想保存日期和时间.这样,如果用户改变他们的时区,它仍将显示2012年3月17日,晚上7点.
我只使用用户指定的时区来获取用户本地时区当前时间之前或之后的记录.
我目前正在使用"没有时区的时间戳",但是当我检索记录时,rails(?)会将它们转换为应用程序中的时区,这是我不想要的.
Appointment.first.time
=> Fri, 02 Mar 2012 19:00:00 UTC +00:00
Run Code Online (Sandbox Code Playgroud)
因为数据库中的记录似乎是以UTC形式出现的,我的黑客是用当前时间,用'Date.strptime(str,"%m /%d /%Y")删除时区,然后做我的查询:
.where("time >= ?", date_start)
Run Code Online (Sandbox Code Playgroud)
似乎必须有一种更简单的方法来忽略周围的时区.有任何想法吗?
我的产品型号中有以下内容.
def grouped_created_at
@created_ats = @products.group_by { |c| c.created_at }
end
Run Code Online (Sandbox Code Playgroud)
工作正常,但我想按日期分组.由于这是一个时间戳,我没有得到我需要的结果.任何人都可以建议如何修改这个?
非常感谢!
我正在查询与用户相关的同一日期的对象(即,如果用户所在的时区是 2016 年 11 月 11 日,他们应该会看到在他们所在时区的 11 月 11 日发生的事件)。
我的数据库以 UTC 格式存储事件日期时间(日期时间类型)。当我尝试:
Event.where(DATE(datetime) = ?", Time.zone.today)
我希望它能够提取日期时间与当前用户的时区(在around_actionvia 中设置Time.use_zone)相同的日期的事件。我在 application.rb 中有这个设置:
config.active_record.time_zone_aware_types = [:datetime, :time]
但是,不会返回存储在第二天 UTC 中的事件。例如,山地时间 11/11 10PM 的事件存储在 UTC 的 11/12 5AM。它仍然应该返回给 Mountain Time 用户,就像 11/11 发生的那样。
如何查询数据库以获取当前用户日期的事件?非常感谢!