在我的本地主机服务器上,我选择2013年1月18日上午10点 – 上午11点在我位于太平洋时区的浏览器中.然后我在heroku上的生产服务器上选择完全相同的时间.
如您所见,保存到数据库的内容的输出是不同的.我希望生产行为与localhost一样,并在将时间存储为UTC时考虑时区.是什么造成的? heroku服务器在EST中,但不考虑此行为.
控制器:
def create puts params[:event][:starts_at] @event = Event.create!(params[:event]) puts @event.starts_at end
输出本地主机:
Fri Jan 18 2013 10:00:00 GMT-0800 (PST)
2013-01-18 18:00:00 UTC
输出Heroku(生产):
Fri Jan 18 2013 10:00:00 GMT-0800 (PST)
2013-01-18 10:00:00 UTC
架构:
t.datetime "starts_at"
ENV:
Ruby on Rails 3.2.11
Ruby 1.9.3
Postgres的
解决方法
我认为你的问题在另一个SO问题的答案中有所涉及:
> Ignoring timezones altogether in Rails and PostgreSQL
特别是这个答案:
> https://stackoverflow.com/a/9576170/33204
将此查询用于UTC格式的时间:
SELECT * FROM tbl WHERE time_col > (Now() AT TIME ZONE 'UTC')::time
将此查询用于本地时区的时间:
SELECT * FROM tbl WHERE time_col > Now()::time
Rails& ActiveRecords&约会时间
这个rails/rails github问题也讨论了它:
> ActiveRecord converts time to default zone on write; assumes UTC on read
@deathbob sorry for the late reply – the accepted values for
config.active_record.default_timezone are either :utc or :local. If
you set it to something other than :utc it will assume :local so what
you’re seeing is the expected behavior.
要在ActiveRecords中修复时间以便始终将其作为UTC处理,您可以设置以下变量:
config.active_record.default_timezone = :utc
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。