2

ユーザーアクティビティを追跡しています:

def track
   UserActivityTracker.new(date: Date.today.to_s).track
end

#application.rb
config.time_zone = 'UTC'

Pacific Time (US & Canada) タイムゾーンで日が追跡されていることを確認する方法。でタイムゾーンを変更したくないapplication.rb

4

2 に答える 2

5

RailsはUTCを使用してデータベースにデータを保存します(これは良いことです)

既存のアプリを変更するのは良い考えではないと思いますconfig.time_zone。UTCのデフォルトがおそらく最適です

Time.zoneRailsが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として保存させてください。ヘルパーを使用して、任意のタイムゾーンで値を表示できます。

も参照してください:

于 2013-03-23T19:06:06.227 に答える
1

このように置き換えconfig.time_zoneます:

config.time_zone = 'PST'

すべての日付を変更したくない場合は、次を使用できますTime.zone_offset

good_date = bad_date + Time.zone_offset('PST')

初期化またはbefore_xxxコールバックでオフセットを追加できます。

于 2013-03-23T18:36:58.770 に答える