サーバーの時刻は EST ですが、MySQL は GMT で日時スタンプを保存しています。MySQL に追加する前に日時をローカル (サーバーの日時 EST) に変換しますが、EST ではなく GMt を保存します。ここで何が問題なのですか?
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>