`DateTime.strptime`神秘地在输入的时间增加一个小时

时间:2014-08-29 15:46:02

标签: jquery-ui datetime ruby-on-rails-4

我使用Jquery日期时间选择器将时间作为文本传递给控制器​​:

Parameters: {"assignment"=>{"deadline"=>"08/29/2014 09:00"}}

assignments_controller.rb中,我将params解析如下(我的config.time_zone = "Eastern Time (US & Canada)"

@assignment.deadline = DateTime.strptime(params[:assignment][:deadline] + " Eastern Time (US & Canada)", "%m/%d/%Y %H:%M %Z").in_time_zone

但不知何故,当@assignment.save时,以下内容记录在数据库中:

UPDATE "assignments" SET "deadline" = ? WHERE "assignments"."id" = 9  [["deadline", Fri, 29 Aug 2014 10:00:00 EDT -04:00]]

所以,即使在参数中,截止日期是上午9点,在活动记录中它是10.为什么?

1 个答案:

答案 0 :(得分:1)

我想我明白了:它是由于夏令时。 this question中的答案导致创建辅助方法:

  def parse_time_with_correct_zone(input_string)
    input_format = "%m/%d/%Y %H:%M"
    datetime_with_wrong_zone = DateTime.strptime(input_string, input_format)
    correct_datetime = Time.zone.parse(datetime_with_wrong_zone.strftime('%Y-%m-%d %H:%M:%S'))
    correct_datetime
  end

然后我只在控制器中使用此方法而不是DateTime.strptime