在Rails中发布格式化DateTime

时间:2018-05-01 19:02:29

标签: ruby-on-rails ruby ruby-on-rails-5

因此我的rails应用程序支持不同的时区,并为每个请求设置时区,如下所示:

def set_current_time_zone
  Time.zone = current_user.time_zone
end

除了jQuery日期时间选择器之外,我的所有格式和报告都在网站范围内工作。

表单以04/20/2018 5:23 AM的格式提交开始时间。当我用下面的代码解析时间时,我得到以下输出。

# this is the value of params[:job][:start] 04/20/2018 5:23 AM

job.start = DateTime.strptime(params[:job][:start],"%m/%d/%Y %H:%M %p")

#printing job.start outputs this: 2018-04-20 00:23:00 -0500

正如您注意到时区已应用于时间,现在是错误的时间。我该如何纠正?

提前致谢。

2 个答案:

答案 0 :(得分:0)

请注意DateTime.strptime('04/20/2018 5:23 AM',"%m/%d/%Y %H:%M %p")将返回UTC =>Fri, 20 Apr 2018 05:23:00 +0000

中的值

但是,如果将此值存储到数据库字段,则在活动记录对象中,它会将时区值输出到您设置为Time.zone

的任何值。

这可能不是一个完整的答案,但可能会引导您朝着正确的方向前进。

答案 1 :(得分:0)

在上面的上一条评论中添加更多细节。

我在rails控制台中执行了此操作,我的模型为Shiftstart_time: datetime

2.1.3 :022 > time = "04/02/2018 5:23 AM"                                                          
 => "04/02/2018 5:23 AM"                                                                          
2.1.3 :023 > Time.zone = "Singapore"                                                              
 => "Singapore"                                                                                   
2.1.3 :024 > shift.start_at = time                                                                
 => "04/02/2018 5:23 AM"                                                                          
2.1.3 :025 > shift.save                                                                           
   (0.1ms)  begin transaction                                                                     
  SQL (0.5ms)  UPDATE "shifts" SET "start_at" = ?, "updated_at" = ? WHERE "shifts"."id" = 2  [["st
art_at", "2018-02-03 21:23:00.000000"], ["updated_at", "2018-05-02 05:43:38.527338"]]             
   (1.4ms)  commit transaction                                                                    
 => true                                                                                          
2.1.3 :026 > Time.zone = "Dublin"                                                                 
 => "Dublin"                                                                                      
2.1.3 :027 > shift.start_at = time                                                                
 => "04/02/2018 5:23 AM"                                                                          
2.1.3 :028 > shift.save                                                                           
   (0.2ms)  begin transaction                                                                     
  SQL (0.4ms)  UPDATE "shifts" SET "start_at" = ?, "updated_at" = ? WHERE "shifts"."id" = 2  [["st
art_at", "2018-02-04 05:23:00.000000"], ["updated_at", "2018-05-02 05:45:44.638291"]]             
   (1.4ms)  commit transaction                                                                    
 => true                      

查看SQL中的数据。