加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 02:20:08 所属栏目:百科 来源:网络整理
导读:脚步: 在我的本地主机服务器上,我选择2013年1月18日上午10点 – 上午11点在我位于太平洋时区的浏览器中.然后我在heroku上的生产服务器上选择完全相同的时间. 如您所见,保存到数据库的内容的输出是不同的.我希望生产行为与localhost一样,并在将时间存储为UTC
脚步:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读