2

サーバーの時刻は 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>
4

2 に答える 2

2

Rails はデフォルトですべての時間を UTC/GMT で保存し、必要に応じて現地時間に変換します。これにより、サーバーに関係なく正確な時間を取得したり、ユーザーごとに時間を設定したりできます。

于 2012-05-05T22:51:49.770 に答える
0

application.rb作品に以下を追加

config.time_zone = 'Eastern Time (US & Canada)'
config.active_record.default_timezone = 'Eastern Time (US & Canada)'
于 2012-05-06T03:16:59.423 に答える