2010-12-06 13 views
1

終了時の文字列を新しいTimeオブジェクトに変換する際にこの問題が発生しています。私は上で見たように、結果として08:00をバック与えコンソールRuby on Railsの時間属性に関する問題

t = Time.parse("8am") 
2010-12-06 08:00:00 +0530 

でこれを入力する

しかし、私は

business.start_time = t 
business.save(:validate => false) 

を使用して、この値を格納するときには、MySQL DBに02:30を格納します。

これは、コンソール経由で保存する場合にのみ発生します。同じデータがフォームから来た場合、MySQLテーブルには08:00として正しく格納されます。ここに問題はありますか?タイムゾーンはデフォルトのutcとは異なります。助けてください。私は何をすべきか。

テーブルのすべてのレコードを解析し、1つの文字列属性を取り、それを同等のTimeクラス値に変換し、同じテーブルの別の属性に格納する必要があります。私はそれのためのレーキタスクを書いています。しかし、格納中に、私は02:30(例えば)08:00を得ます。

+1

アプリで「8am」を使用すると、午前8時(IST)ではなく午前8時(UTC)を意味しますか? – Gareth

+0

business.start_time.utcとt.utcの出力は何ですか? – Bohdan

+0

business.start_time.utcは2000-01-01 02:30:00 UTCを – Anand

答えて

2

日付とMySQLには十分注意してください。 datetimeフィールドはdb内の文字列であるかのように格納されます。つまり、Railsが送信しているもの(SQLのログを確認してください)は何に格納されるのでしょうか。私はあなたの環境でUTCに設定されていると仮定しています.rb、あなたのTimeオブジェクトは文字列としてUTCで出力されています。

MySQLは、異なるゾーンでの処理時間とゾーン間の変換に関して貧弱です(私の意見では)。

日付処理を急ぐことはお勧めしません。常にアプリケーション内の日付とUTCでのDBを処理し、(タイムゾーンを指定して)解析時に特定のタイムゾーンに変換するか、またはビューでフォーマットします。

0

時間はUTCで保存されているようです。コンソールセッションを開始するときにタイムゾーンを正しく設定してみてください。

+0

タイムゾーンを正しく設定しました。しかしそれでもUTC形式で保存します。テーブルに希望のタイムゾーン形式で時刻を保存することはできますか? – Anand

関連する問題