2017-03-21 3 views
0

テーブルデータは一般的なものであるため、データとして日付(日付なし)のみが必要です。したがって、データ型はpostgresqlにtimeとして保存されます。RailsはUTCとして時刻書式データを格納するのはなぜですか?

しかし、その後、このidiosyncracyが

> @day_schedules.first 
=> #<Schedule id: 17, start_time: "2000-01-01 06:00:00" 

をポップアップ表示し、

> @day_schedules.first.start_time 
=> 2000-01-01 06:00:00 UTC 

だから、このデータは、実際に間違っである1がdatetimeデータ型のデータを比較したい場合は、言って...

@interruptions[0].pause 
=> Sat, 18 Mar 2017 07:35:18 CET +01:00 

私たちは現在UTCからCETへの呼び出し... timeはどのようにして "06:00:00"という特定の値として扱われますが、CET +01:00タイムゾーンで扱うことができますか?

+2

すべてがデータベース内UTCでなければなりません。あなたの '時間'(実際に '時間帯なしの時間 ')は、データベースの中のちょうど時間帯になります。 Rubyには時刻クラスはありません(http://stackoverflow.com/a/42539230/479863)ので、 'start_time'に' 2001-01-01'という日付があります。 Ruby-landでは、タイムゾーンが適用される場合と適用されない場合があります。私はあなたがデータベースの中で時間の作業をしていること(時刻が本当のところです)とタイムスタンプを取り出すことがより良い時間になると思います。 –

+0

私が間違っていない場合は、UTCとCETの2つのタイムスタンプを比較しようとしています。これは、サーバー上で、すべてをUTCとして扱い/保管し、ブラウザまたはバックエンド自体に返送するときにそれに応じて変更する必要があるという標準と考えることができます。 この場合、他のタイムゾーンをUTCに変換し、計算を実行することを提案します。それは役に立ちますか? – aks

+0

このトリックは、データがUTCで保存されていることを理解していましたが、日付と時刻を呼び出すときの動作が異なります。ですから、チェーンコマンドを使って項目を一貫して関連づけることにあります。 'start_time.in_time_zone' ** in_time_zone **接尾辞はすべての比較を一列にしました。 – Jerome

答えて

0

Muのコメントに応じて拡張します。 RailsはデフォルトとしてUTCで時刻を保存しますが、すべての形式が異なるローカルに一致するようにするには、これを変更できます。

最初にrake time:zones:allを実行して、Rails設定で設定できる利用可能な時間帯を確認してください。これは通常、UTCにとどまることを推奨します。

config.time_zone = 'Eastern Time (US & Canada)' 

はその後も次の行を追加することができます

application.rb:次に、あなたはRailsはこれらのタイムゾーンのいずれかを使用したい場合は、あなたのapplication.rbまたは初期化子ファイルに以下のように設定することができますあなただけの設定した新しいタイムゾーンと同じ形式でデータを保存するためのActiveRecordを設定しますTIME_ZONEの下:それはRailsの道だから

config.active_record.default_timezone = :local 

関連する問題