Rails time_zone_select下拉列表显示GMT而不是UTC

时间:2012-06-30 12:38:40

标签: ruby-on-rails ruby-on-rails-3 timezone

我用时间创建了一个模型:time和time_zone:string。具体来说,我创建了使用:

rails generate scaffold Alarm time:time time_zone:string

我创建了一个表单如下:

<%= form_for(@alarm) do |f| %>
  <div class="field">
    <%= f.label :time %><br />
    <%= f.time_select :time %>
  </div>
  <div class="field">
    <%= f.label :time_zone %><br />
    <%= f.time_zone_select :time_zone,
        ActiveSupport::TimeZone.us_zones,
        default: "Pacific Time (US & Canada)" %>
  </div>
<% end %>

当我看到表单时,time_zone_select会显示一个下拉列表,其中包含GMT中不是UTC的时区(例如“(GMT-08:00)Pacific Time”)。

我认为默认情况下,时区以UTC显示。如何以UTC(例如(UTC-08:00)太平洋时间)显示它?

这是一个新项目,我没有触及任何配置文件。

我正在使用ruby-1.9.3-p0,rails 3.2.6和pg 0.13.2。

提前致谢!

1 个答案:

答案 0 :(得分:0)

时间以UTC格式存储,但会显示在您当地的时区。

要在视图中将时间恢复为UTC,请使用以下方法:

local_to_utc(time, dst=true)

http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#method-i-local_to_utc

或者在application.rb

中全局更改
config.active_record.default_timezone = "UTC" 

当从数据库中提取日期和时间时,它确定是否使用Time.local(如果设置为:local)或Time.utc(如果设置为:utc)。默认值为:utc for Rails,尽管Active Record在Rails之外使用时默认为:local。