【问题标题】:UTC conversions work in development but not in productionUTC 转换在开发中有效,但在生产中无效
【发布时间】:2013-12-21 19:07:42
【问题描述】:

在我的开发机器上,一切都很好。 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,这似乎是我所经历的最接近的事情。它实际上似乎是相同的。但是,它已经关闭,但我认为它应该是开放的。

【问题讨论】:

    标签: ruby-on-rails activerecord heroku timezone


    【解决方案1】:

    事实证明,问题与我构建自定义 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
    

    【讨论】:

    • 只是将答案扩展到有相同问题的人。我从日期选择器获取日期时间。使用Time.zone.parse 比尝试使用DateTime.strptime 更好。之后,可以直接保存,没有任何问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    相关资源
    最近更新 更多