Ruby on rails 模型的datetime字段在heroku上的存储方式与本地主机不同
步骤: 在本地主机服务器上,我选择位于太平洋时区的浏览器中的时间2013年1月18日上午10时至11时。然后在heroku上的生产服务器上选择完全相同的时间 正如您所看到的,保存到数据库中的内容的输出是不同的。我希望在将时间存储为UTC时,生产系统表现为本地主机,并考虑时区。这是什么原因造成的?heroku服务器在EST中,但这并不能解释这种行为 控制器: 输出本地主机: 2013年1月18日星期五10:00:00 GMT-0800 PST 2013-01-18 18:00:00 UTC 产量和产量: 2013年1月18日星期五10:00:00 GMT-0800 PST 2013-01-18 10:00:00 UTC 模式: 环境: RubyonRails 3.2.11 Ruby 1.9.3 PostgresPostgreSQL如何处理日期/时间的背景 我认为您的问题已包含在另一个SO问题的答案中: 具体来说,这个答案是: 将此查询用于UTC格式的时间: 使用此查询查询本地时区中的时间:Ruby on rails 模型的datetime字段在heroku上的存储方式与本地主机不同,ruby-on-rails,postgresql,heroku,timezone,ruby-on-rails-3.2,Ruby On Rails,Postgresql,Heroku,Timezone,Ruby On Rails 3.2,步骤: 在本地主机服务器上,我选择位于太平洋时区的浏览器中的时间2013年1月18日上午10时至11时。然后在heroku上的生产服务器上选择完全相同的时间 正如您所看到的,保存到数据库中的内容的输出是不同的。我希望在将时间存储为UTC时,生产系统表现为本地主机,并考虑时区。这是什么原因造成的?heroku服务器在EST中,但这并不能解释这种行为 控制器: 输出本地主机: 2013年1月18日星期五10:00:00 GMT-0800 PST 2013-01-18 18:00:00 UTC 产量和
SELECT * FROM tbl WHERE time_col > now()::time
Rails&ActiveRecords&日期/时间
本期还讨论了:
有一条评论说:
@deathbob很抱歉回复太晚-的可接受值
config.active\u record.default\u时区为:utc或:local。如果 您将其设置为:utc以外的其他值,它将假定为:local,那又怎样 你看到的是预期的行为 要在ActiveRecords中固定时间,使其始终作为UTC处理,可以设置以下变量:
config.active_record.default_timezone = :utc
@slm of config.active\u record.default\u timezone=:utc的解决方案对我不起作用。Rails仍在Heroku上与local一起编写,与UTC一起阅读 于是我试着:
config.time_zone = 'Sydney'
config.active_record.default_timezone = :local
它在开发过程中仍然可以正常工作,但是现在可以从Heroku上的postgres中以UTC格式读取datetime值
我的临时解决方案是在Heroku上设置默认时区:
heroku config:add TZ="Australia/Sydney"
这只是一个临时解决方案,因为我希望我的应用程序使用UTC。我已经发布到@slm提到的rails/github问题上进行澄清。当我找到一个更具体的解决方案时,我会更新我的答案。你在config/application.rb中的时区配置是什么?@ThongKuah我已经把它注释掉了,注释说它是UTC,因为默认情况下它是UTC。嘿,John,“这是否与我以前在Heroku身上见过奇怪的tz问题有关呢?”Saran不知道这个答案的答案。它似乎更多地与日志记录时间有关。@John run\d Heroku和localhost中的\u表?你有没有没有没有时区的时间戳作为你的postgres日期类型?对不起,我当时不在城里,直到现在才知道。我认为你的答案是对的,但我还是有点困惑。是否有activerecord解决方案?我不使用续集。您提供的两个SQL查询是selects查询,但我最关心的是正确插入日期时间。谢谢config.active\u record.default\u时区=:utc
config.active_record.default_timezone = :utc
config.time_zone = 'Sydney'
config.active_record.default_timezone = :local
heroku config:add TZ="Australia/Sydney"