1

Rails は、created_at および updated_at タイムスタンプを UTC 時間で保存します。

しかし、私はこれらのフィールドを使用して、これらのフィールドに基づいてフィルター処理および保存 (およびレコードで他の多くのことを行う) を行っているため、created_at および updated_at 属性を呼び出すときにタイム ゾーンのタイムスタンプを取得することが重要です。

次の 2 つの SO の質問で説明されているように、environment.rb ファイルでタイム ゾーンを構成することでそれを行うことができます。

しかし、それは今私のために働いています。

フィールド(UTC)に基づいてデータベースからレコードを取得しているcreated_atため、当然間違ったフィールドが出てきて、それらを表示しているため、日付はUTCで表示されますが、私が望むものではありません。

レールが日付を保存するタイムゾーンを変更する方法はありますか?

また

object.created_atRails属性を呼び出さずに、データベースの取得と表示を行う方法の回避策はありますか?

created_at の Rails とタイムゾーン

Railsのタイムゾーンの問題

4

1 に答える 1

0

回避策は非常に単純なようだったので、なぜこのフォーラムで質問したのか疑問に思います。しかし、それに到達するのに8時間かかりました:)

1)データベースからレコードをフェッチして表示している間、私は簡単に行うことができました

select CONVERT_TZ(date) as date from table;

する代わりに

select date from table;

CONVERT_TZ()mysql特定の機能なので、私にとってはうまくいきました。しかし、普遍的な解決策ではありません。

2)次に、他のタイムゾーンで指定された日付範囲からレコードをフェッチする必要がある場合、2つのことのいずれかを実行できました。

1つ-日付範囲の開始点と範囲の終了点[user-entered-date] 00:00:00をに置き換えることができます。これには、Dateオブジェクトを使用する代わりにDateTimeオブジェクトを使用する必要があることに注意してください。[user-entered-date] 07:00:00[user-entered-date] 59:59:59[user-entered-date + 1.day] 07:00:00

2-where条項では、私はすることができました

CONVERT_TZ(registrations.created_at) <= [user/entered/date]

それ以外の

(registrations.created_at) <= [user/entered/date]
于 2012-05-08T06:29:43.677 に答える