2012-05-05 2 views
1

Моя MySQL хранит отметки времени в GMT, хотя время сервера находится в EST. Я конвертирую свое время на локальный (datetime EST сервера) перед добавлением в MySQL, но он хранит его GMt вместо EST. Что здесь не так?Rails хранит время в 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> 
+0

Это лучше - 'ВЫБРАТЬ request_datetime, UTC_TIMESTAMP(), TIMESTAMPDIFF (МИНУТЫ, request_datetime, UTC_TIMESTAMP()) FROM пунктов, где пункт = '2542',' –

ответ

1

Rails хранит все время в UTC/GMT по умолчанию, и преобразует его в местное время по мере необходимости, это делает его легче получить правильное время независимо от вашего сервера или позволяют установить время для каждого пользователя основа.

+0

Это может полезно объяснить, как изменить поведение по умолчанию, а также ':)' –

+1

Хммм. Это усложняет мою работу ': /' –

+0

Вы всегда можете вызвать tolocal на объекте времени, чтобы получить результат после установки локальных часовых поясов в среде. Rb – DVG

0

добавив следующее application.rb работы

config.time_zone = 'Eastern Time (US & Canada)' 
config.active_record.default_timezone = 'Eastern Time (US & Canada)' 
Смежные вопросы