ruby-on-rails – 模型的datetime字段以不同方式存储在heroku中,来自localhost

脚步:

在我的本地主机服务器上,我选择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的

解决方法

关于Postgresql如何处理日期/时间的背景知识

我认为你的问题在另一个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

pixeltrix评论说:

@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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...