首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模型的日期时间字段与本地主机在heroku上的存储方式不同

模型的日期时间字段与本地主机在heroku上的存储方式不同
EN

Stack Overflow用户
提问于 2013-01-10 07:11:34
回答 2查看 3.3K关注 0票数 5

步骤:

在本地主机服务器上,我在位于太平洋时区的浏览器中选择2013年1月18日上午10时至上午11时。然后在heroku上的生产服务器上选择完全相同的时间。

如您所见,保存到数据库的输出是不同的。我希望生产作为本地主机运行,并在以UTC的形式存储时间时考虑到时区。是什么引起的?heroku服务器位于EST中,但这并不能解释这种行为。

控制器:

代码语言:javascript
复制
  def create
    puts params[:event][:starts_at]
    @event = Event.create!(params[:event])
    puts @event.starts_at
  end

输出本地主机:

2013年1月18日星期五10:00格林尼治时间-0800(太平洋标准时间) 2013-01-18 :00世界协调世界时

输出Heroku (生产):

2013年1月18日星期五10:00格林尼治时间-0800(太平洋标准时间) 2013-01-18 10:00世界协调世界时

模式:

代码语言:javascript
复制
 t.datetime "starts_at"

环境:

3.2.11

Ruby 1.9.3

波斯特格斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-19 22:46:55

PostgreSQL如何处理日期/时间的背景知识

我认为你的问题已从另一个如此问题的回答中涉及到:

具体来说,这个答案是:

使用UTC格式的时间查询:

代码语言:javascript
复制
SELECT * FROM tbl WHERE time_col > (now() AT TIME ZONE 'UTC')::time

在本地时区中使用此时间查询:

代码语言:javascript
复制
SELECT * FROM tbl WHERE time_col > now()::time

Rails & ActiveRecords &日期/时间

这个rails/rails github问题也讨论了它:

象素的评论如下:

@deathbob对延迟回复表示歉意- config.active_record.default_timezone的接受值要么是:utc,要么是:local。如果您将其设置为:utc以外的其他内容,它将假设:本地,所以您看到的是预期的行为。

要在ActiveRecords中修正时间以便始终将其处理为UTC,您可以设置以下变量:

代码语言:javascript
复制
config.active_record.default_timezone = :utc
票数 3
EN

Stack Overflow用户

发布于 2013-08-05 00:15:20

@slm of config.active_record.default_timezone = :utc的解决方案对我没有用。Rails仍在用本地语言写作,在Heroku上与UTC一起阅读。

于是我试着:

代码语言:javascript
复制
config.time_zone = 'Sydney'
config.active_record.default_timezone = :local

它在开发过程中仍然运行良好,但导致了从Heroku上的postgres以UTC格式读取datetime值。

我的临时解决方案是将Heroku上的默认时区设置为:

代码语言:javascript
复制
heroku config:add TZ="Australia/Sydney"

这只是一个临时的解决方案,因为我希望我的应用程序使用UTC。我已经在rails/github上发布了@slm提到的问题,以求澄清。当我找到更具体的解决方案时,我会更新我的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14252579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档