2012-02-10 10 views
0

私は時間値を格納するRailsアプリケーションを持っており、config/application.rbにタイムゾーンを設定しています。Railsタイムタイプとタイムゾーン

これはdatetime列では正しく機能しますが、time列には指定したタイムゾーンではなく、UTCで時刻が表示されます。

これらの2つの例の時間は、どちらもデータベースに20:50(UTC)として保存されますが、ビューに表示すると、時間列はUTCとして表示され、datetime列は選択したタイムゾーンに正しく表示されます。この予想される動作は

time2:  2000-01-01 20:50:00 UTC 
datetime2: 2012-02-09 21:50:00 +0100 

ですか?タイムタイプも設定されたタイムゾーンを使用しないでください。

答えて

2

アクティブレコードはTimeWithZoneを使用します。localtimeutcutc?などの方法が役立ちます。

+0

を助けようとしてくれてありがとう。 time2.localtime%>?しかし、datetimeの属性は自動的に変換され、<%= u.datetime2%>と入力するだけです。なぜ2つのタイプの違い? – Atle

0

はい、これは予想される動作です。 Rails(ActiveRecord)は時刻をUTCで格納し、ビュー内のレンダリング時にTime.zoneに設定されている時間帯にカバレッジします。

+0

はい、私が質問したところでは、タイムゾーンを設定していますが、上記の2つの例は両方ともデータベースにUTC(20:50)で格納されていますが、ビューに表示されるときはdatetime属性タイムゾーンに変換されます。 ActiveRecordは時間属性を変換しませんか?ちょうどdatetime属性? – Atle

+0

まあ、日付は実際にそれに関連付けられたタイムゾーンを持つべきではありません。時間または日時のみ。だからそう、それは意味をなさない。 –

+0

私は日付、時間、日時について何も言及していません。もう一度、私が質問で言ったように、私はタイムゾーンを設定して、データベースにUTCとして格納されている1つの時刻と1つのdatetimeを持っていますが、次のようなビューで表示します:<%= u.time2%><%= u.datetime2%>の場合、datetime属性はタイムゾーンに変換されます。 – Atle

0

私はこれをあきらめて、Railsは時間属性を持つconfig.time_zoneを完全に無視してしまい、わからない理由でdatetime属性に使用しているようです。そして、それがそうであるように、他の多くの人がそれを同様に理解することはありません。

時間属性を文字列型に変更し、それを時間オブジェクトとして扱う必要があるときに時間オブジェクトに解析します。これがRailsのそれ以降のリリースで修正された場合、私はいつも時刻属性を使用するように変更することができますが、今は続ける必要があります。

しかし、属性の型が時間である場合、それは自動的にビューで設定したタイムゾーンに変換しませんが、あなたは<%= uのようなものを書かなければならないので:)

関連する問題