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 は、UTC ではなく GMT のタイム ゾーンの束を含むドロップダウンを表示します (例: "(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 ですが、Rails の外部で使用する場合、Active Record のデフォルトは :local です。

于 2012-06-30T14:16:53.820 に答える