Ruby on rails Rails时区问题

Ruby on rails Rails时区问题,ruby-on-rails,activerecord,time,timezone,Ruby On Rails,Activerecord,Time,Timezone,一段时间以来,我一直在用头撞Rails中的时区。问题是: 我希望用户能够在时间\u选择字段中输入本地时间(例如上午9:30)。根据用户选择的时区,应将其作为UTC存储在数据库中(例如,东部时间上午9:30保存为14:30) 然后,只需使用Time.zone来正确显示它 但是,似乎time\u select创建了一个多参数赋值散列,该散列假定用户输入的时间是UTC。无论我尝试什么,我都不能强迫它进入用户的本地时间。例如: ruby-1.9.2-p290 :016 > Time.use_zon

一段时间以来,我一直在用头撞Rails中的时区。问题是:

我希望用户能够在
时间\u选择
字段中输入本地时间(例如上午9:30)。根据用户选择的时区,应将其作为UTC存储在数据库中(例如,东部时间上午9:30保存为14:30)

然后,只需使用
Time.zone
来正确显示它

但是,似乎
time\u select
创建了一个多参数赋值散列,该散列假定用户输入的时间是UTC。无论我尝试什么,我都不能强迫它进入用户的本地时间。例如:

ruby-1.9.2-p290 :016 > Time.use_zone("Eastern Time (US & Canada)") do
ruby-1.9.2-p290 :017 >     a.attributes = {"starttime(1i)"=>"2000", "starttime(2i)"=>"1", "starttime(3i)"=>"1", "starttime(4i)"=>"09", "starttime(5i)"=>"30"}
ruby-1.9.2-p290 :018?>   end
 => {"starttime(1i)"=>"2000", "starttime(2i)"=>"1", "starttime(3i)"=>"1", "starttime(4i)"=>"09", "starttime(5i)"=>"30"} 
ruby-1.9.2-p290 :019 > a.starttime
 => 2000-01-01 09:30:00 UTC
我已经看到了使用
config.time\u zone
的建议,但我希望它适用于跨多个时区的用户,因此站点范围的配置设置似乎不是正确的解决方案

如何将数据库中用户提供的值保存为UTC

谢谢

看一看


它包括使用过滤器为用户设置时区。您应该能够在现有视图的输出中设置用户配置文件的属性(然后可以将其加载到过滤器中)。

以下Railscasts插曲非常适合解释如何在您是专业会员的情况下执行此操作:

它基本上使用了与Ben W的方法相同的方法,但是使用了一个环绕过滤器而不是前过滤器。Time.zone可能是线程安全的,所以这可能不必要,但无论如何我都会这么做