ユーザーアクティビティを追跡しています:
def track
UserActivityTracker.new(date: Date.today.to_s).track
end
#application.rb
config.time_zone = 'UTC'
Pacific Time (US & Canada)
タイムゾーンで日が追跡されていることを確認する方法。でタイムゾーンを変更したくないapplication.rb
ユーザーアクティビティを追跡しています:
def track
UserActivityTracker.new(date: Date.today.to_s).track
end
#application.rb
config.time_zone = 'UTC'
Pacific Time (US & Canada)
タイムゾーンで日が追跡されていることを確認する方法。でタイムゾーンを変更したくないapplication.rb
RailsはUTCを使用してデータベースにデータを保存します(これは良いことです)
既存のアプリを変更するのは良い考えではないと思いますconfig.time_zone
。UTCのデフォルトがおそらく最適です
Time.zone
RailsがActiveRecordを使用してデータベースからデータをプルすると、そのリクエストの設定に基づいて日時が変換されます
Date.today
# => server time, rails does not convert this (utc on a typical production server, probably local on dev machine)
Time.zone.now.to_date
# => rails time, based on current Time.zone settings
ApplicationControllerのbefore_filterで現在のユーザーのタイムゾーンを設定し、日時を表示するときにI18nヘルパーを使用できます。
I18n.localize(user_activity_tracker.date, format: :short)
# => renders the date based on config/locals/en.yml datetime:short, add your own if you wish
# => it automatically offsets from UTC (database) to the current Time.zone set on the rails request
Time.zone
現在のリクエスト設定と異なる時間を表示する必要がある場合は、Time.use_zone
# Logged on user is PST timezone, but we show local time for an event in Central
# Time.zone # => PST
<% Time.use_zone('Central Time (US & Canada)') do %>
<%= I18n.l(event.start_at, format: :time_only_with_zone) %>
<% end %>
データを保存するときは、変換を行わずに、RailsにUTCとして保存させてください。ヘルパーを使用して、任意のタイムゾーンで値を表示できます。
も参照してください:
このように置き換えconfig.time_zone
ます:
config.time_zone = 'PST'
すべての日付を変更したくない場合は、次を使用できますTime.zone_offset
good_date = bad_date + Time.zone_offset('PST')
初期化またはbefore_xxxコールバックでオフセットを追加できます。