2012-05-05 8 views
1

MySQLは、サーバの時刻がESTになっていますが、GMTで日付タイムスタンプを格納しています。 MySQLに追加する前に私の日付時刻をローカル(サーバーのdatetime EST)に変換しますが、ESTの代わりにGMtを保存します。ここで何が間違っていますか?Railsはローカルタイムに変換されますが、GMTでdatetimeを格納します

item.update_attributes({:request_datetime => Time.parse(date+" "+time+" "+timezone).localtime}) # this becomes EST 
puts Time.parse(date+" "+time+" "+timezone).localtime.to_s # prints correct time zone, EST. 

mysql> SELECT request_datetime,NOW(),TIMESTAMPDIFF(MINUTE,request_datetime,NOW()) FROM items Where item='2542'; 
+---------------------+---------------------+----------------------------------------------+ 
| request_datetime | NOW()    | TIMESTAMPDIFF(MINUTE,request_datetime,NOW()) | 
+---------------------+---------------------+----------------------------------------------+ 
| 2012-05-05 22:30:02 | 2012-05-05 18:30:05 |           -239 | 
+---------------------+---------------------+----------------------------------------------+ 
1 row in set (0.00 sec) 

mysql> 
+0

に動作します - 'request_datetimeを選択、UTC_TIMESTAMP()、TIMESTAMPDIFF(MINUTE、request_datetime、UTC_TIMESTAMP())項目=項目から '2542';' –

答えて

1

Railsは、これはそれが簡単に関係なく、サーバーの正しい時刻を取得することができたり、あたりのユーザーに時刻を確立できるように、デフォルトでUTC/GMTにすべての時間を保存し、必要に応じて現地時間に変換基礎。 application.rbに、次の追加

+0

それは可能性があります':)' –

+1

Hmmmのように、デフォルトの動作を変更する方法を説明するのに便利です。これは私の仕事をより複雑にしています: '/' –

+0

環境オブジェクトのローカルタイムゾーンをenvironment.rbに設定した後はいつでもtimeオブジェクトを呼び出すことができます – DVG

0

これは良いです

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