Joh*_*ohn 5 postgresql timezone ruby-on-rails heroku ruby-on-rails-3.2
脚步:
在我的本地主机服务器上,我在位于太平洋时区的浏览器中选择时间 2013 年 1 月 18 日上午 10 点 - 上午 11 点。然后我在 heroku 上的生产服务器上选择完全相同的时间。
如您所见,保存到数据库的内容的输出是不同的。我希望生产作为本地主机运行,并在将时间存储为 UTC 时考虑时区。这是什么原因造成的?heroku 服务器在 EST 中,但这并没有考虑到这种行为。
控制器:
def create
puts params[:event][:starts_at]
@event = Event.create!(params[:event])
puts @event.starts_at
end
Run Code Online (Sandbox Code Playgroud)
输出本地主机:
2013 年 1 月 18 日星期五 10:00:00 GMT-0800(太平洋标准时间)
2013-01-18 18:00:00 UTC
输出 Heroku(生产):
2013 年 1 月 18 日星期五 10:00:00 GMT-0800(太平洋标准时间)
2013-01-18 10:00:00 UTC
架构:
t.datetime "starts_at"
Run Code Online (Sandbox Code Playgroud)
环境:
Ruby on Rails 3.2.11
红宝石 1.9.3
Postgres
我认为另一个问题的答案涵盖了您的问题:
具体这个答案:
使用以下格式查询时间UTC:
SELECT * FROM tbl WHERE time_col > (now() AT TIME ZONE 'UTC')::time
Run Code Online (Sandbox Code Playgroud)
使用此查询获取本地时区的时间:
SELECT * FROM tbl WHERE time_col > now()::time
Run Code Online (Sandbox Code Playgroud)
这个rails/rails github问题也讨论了它:
Pixeltrix有一条评论,内容如下:
@deathbob 对于迟到的回复感到抱歉 - config.active_record.default_timezone 可接受的值是 :utc 或 :local。如果您将其设置为 :utc 以外的其他内容,它将假定为 :local 所以您看到的是预期的行为。
要修复时间以便ActiveRecords始终处理它,UTC您可以设置以下变量:
config.active_record.default_timezone = :utc
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3122 次 |
| 最近记录: |