Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails中的日期时间格式问题_Ruby On Rails_Ruby_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails Rails中的日期时间格式问题

Ruby on rails Rails中的日期时间格式问题,ruby-on-rails,ruby,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 5,因此,我的rails应用程序支持不同的时区,并在每次请求时设置时区,如下所示: def set_current_time_zone Time.zone = current_user.time_zone end 除了jQuery日期时间选择器之外,我的所有格式和报告都可以在站点范围内工作 表单以2018年4月20日上午5:23的格式提交开始时间。当我用下面的代码解析时间时,我得到以下输出 # this is the value of params[:job][:start] 04/20/20

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

def set_current_time_zone
  Time.zone = current_user.time_zone
end
除了jQuery日期时间选择器之外,我的所有格式和报告都可以在站点范围内工作

表单以
2018年4月20日上午5:23
的格式提交开始时间。当我用下面的代码解析时间时,我得到以下输出

# 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
正如您所注意到的,时区已应用于时间,现在是错误的时间。我如何纠正这个问题


提前感谢。

记住
DateTime.strtime('2018年4月20日5:23 AM',%m/%d/%Y%H:%m%p”)
将返回UTC
=>2018年4月20日星期五05:23:00+0000的值

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


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

在我上面的最后一条评论中添加更多细节

我在rails控制台中完成了这项工作,我的模型是
Shift
,并且具有
start\u-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中的数据。

Time.zone=“hongkong”
之后,我测试了您的确切代码
DateTime.strtime(“2018年4月20日5:23上午”,“m/%d/%Y%H:%m%p”)
获取:
2018-04-20T05:23:00+00:00
。更改时区后,输出不会更改。我只是测试了您解释的内容,如果我不从数据库中检索值,而是输出
DateTime.strtime的值(“2018年4月20日上午5:23,“%m/%d/%Y%H:%m%p”)
。但是,我仍然无法从数据库中保存/检索正确的时间@我不确定我是否理解实际的问题。jQuery时间应该是用户浏览器上的时间,对吗?一旦它作为参数进入服务器,您能否将其转换为UTC并在服务器端执行所需操作?也可能是重复,本质上,您可以忽略jQuery以了解这个问题的范围。我提到它主要是为了提供上下文。本质上,我的问题是我向服务器提交一个日期时间,解析该日期时间,打印解析的日期时间(此时仍然正确),但当我实际将其保存到数据库中时,时间发生了变化。当我删除Time.zone=“Some timezone”时,问题就消失了@LACOSTENYCODER什么类是作业的实例?它是否在web服务器上运行,多线程?它是否可以在Sidekiq worker或其他进程中运行?