Ruby on rails 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
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或其他进程中运行?