我使用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.为什么?
答案 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
。