17

しばらくの間、このタイムゾーンの時間がどのように機能するかを理解しようとしていますが、質問がありました:

今日、私の国ではサマータイム (GMT-2) を採用しています。したがって、私のアプリケーションのユーザーは、11:00AM などの時間を入力してフォームを投稿します。私の知る限り、Rails はこの日付を UTC に変換し、データベース (私の場合は mysql) に次のように保存します: 01:00PM UTC.

その記録を回復したとき、表示するために現地時間に変換する必要がありました。Ok?

私の質問は、この日付/時刻が、私の国が夏時間 (GMT-3) から抜け出す将来の日付/時刻を表していると仮定してみましょう。Rails は 01:00PM UTC を保存しますか? サマータイムの今日、現地時間はどうなりますか? そして将来、この現地時間はどうなるのでしょう?

基本的に、私は常に午前 11 時にユーザーに表示する必要があります。

ありがとう。

4

2 に答える 2

14

タイムゾーンが作用する場所がいくつかあります: オペレーティング システム (またはおそらくユーザー アカウント) のデフォルト設定、データベース サーバー、Railsenvironment.rbです。

重要なのは、すべての日付がUTC タイム ゾーンで保存され、ローカル タイム ゾーンが何であれ表示されることを確認することです。それをやっているようですね。

したがって、あなたの質問は、「夏時間の場合は-3時間オフセットし、そうでない場合は-2時間オフセットしたい」に要約されるようです。Rails のタイム エクステンションを使用すると、現在のオフセットを のようTime.zone.now.utc_offsetに判断Time#dst?できます。この 2 つで夏時間かどうかを判断すると、条件付きで余分な 1 時間 (3600 100 秒) を差し引くことができます。

于 2012-11-14T14:18:30.460 に答える
3

質問してから 7 か月後ですが、おそらくskip_time_zone_conversion_for_attributes=役立つでしょう。AcitveRecord は、保存または取得時にタイムゾーンを変換しないように指示されています。例を示すActiveRecord Timestampを参照してください。

class Topic < ActiveRecord::Base
  self.skip_time_zone_conversion_for_attributes = [:written_on]
end
于 2013-07-07T12:04:54.330 に答える