【问题标题】:Rails time_zone_select dropdown shows GMT instead of UTCRails time_zone_select 下拉菜单显示 GMT 而不是 UTC
【发布时间】:2012-07-01 17:08:01
【问题描述】:

我创建了一个带有 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) Pacific Time”)。

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

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

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

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    时间以 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。

    【讨论】:

    • 感谢您的回答,但我不确定您是否正确理解了我的问题。我不是在谈论未以 UTC 显示的时间,而是在组合框中未以 UTC 显示的时区。比如你去railscasts.com/episodes/106-time-zones-in-rails-2-1,图片中的combobox显示:(UTC-10:00) Hawaii (UTC-09:00) Alaska...但是在我的combobox中显示的是:(GMT-10: 00) 夏威夷 (GMT-09:00) 阿拉斯加......希望能澄清这个问题。谢谢!
    • 嗯.. 我能提供的最好的就是这个:config.active_record.default_timezone = "UTC"
    • 那也没用。不过谢谢!我会继续挖掘。
    • 运气好吗?我有同样的问题
    猜你喜欢
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 2012-05-27
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多