UTC转换在开发中工作,但不在生产中

时间:2013-12-05 01:51:26

标签: ruby-on-rails activerecord heroku timezone

在我的开发机器上,一切都很好。 event_date以UTC格式存储并按原样进行转换,进出活动记录。但是,在heroku的生产中,rails存储日期而不将其转换为UTC,然后在获取时将其转换为用户的时区,这实际上会产生不准确性,因为偏移量未应用于UTC时间。

我在本地和Heroku使用Postgres。

Parameters: {"name"=>"asdfdsafdas", "date"=>"12/19/2013", "time"=>"10:00 PM", "location"=>"asdfdsfds", "description"=>"", "team_id"=>"1", "event"=>{"team_id"=>"1", "description"=>"", "location"=>"asdfdsfds", "name"=>"asdfdsafdas"}}

def create
  d = DateTime.strptime(params[:date], '%m/%d/%Y')
  t = Time.zone.parse(params[:time])
  event_date = Chronic.parse(params[:date] + " at " + params[:time])
  params[:event][:event_date] = event_date
  params[:event][:user_id] = current_user.id
  @event = Event.new
  if @event.update_attributes params[:event]
    render "events/show"
  else
    respond_with @event
  end
end

event_date变量如下所示:

2013-12-19 20:25:00 -0500

修改

我在github上发现这个issue似乎与我遇到的最接近。它实际上似乎是相同的。然而,它已关闭,但我相信它应该是公开的。

1 个答案:

答案 0 :(得分:2)

事实证明问题与我构建自定义Time对象的方式有关。以下是有效的代码:

def create
  d = Date.strptime(params[:date], '%m/%d/%Y')
  t = Time.zone.parse(params[:time])
  event_date = t.change(day: d.day, month: d.month, year: d.year)
  params[:event][:event_date] = event_date
  params[:event][:user_id] = current_user.id
  @event = Event.new
  if @event.update_attributes params[:event]
    render "events/show"
  else
    respond_with @event
  end
end

在这种情况下,event_date变量如下所示:

Wed, 18 Dec 2013 22:00:00 EST -05:00