2

我用 time: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) 太平洋时间”)。

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

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

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

提前致谢!

4

1 回答 1

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)。Rails 的默认值为 :utc,尽管 Active Record 在 Rails 外部使用时默认为 :local。

于 2012-06-30T14:16:53.820 回答