我用时间创建了一个模型: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。
提前致谢!
答案 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。