Rails 3.2 + Ruby 1.9.3, created_at возвращает с неправильным часовым поясом

Я обновился до Rails 3.2 и Ruby 1.9.3 и получил очень странное поведение.

У меня есть модель под названием Entry. когда создается новая запись, она вставляется в БД с текущей датой и временем.

Но когда я запускаю Entry.find_by_id(THE_ENTRY_ID).created_at, я получаю «правильный», созданный в дату и время, но, например, в другом часовом поясе: в БД:

2013-03-24 00:05:29

в то время как в консоли Rails и в приложении:

Сб, 23 марта 2013 г., 20:05:29 по восточному поясному времени -04:00

Почему он внезапно возвращает неправильный часовой пояс?


person guy schaller    schedule 24.03.2013    source источник


Ответы (2)


ОК после прочтения DOCS и просмотра этого рельсового приведения: http://railscasts.com/episodes/106-time-zones-revised

теперь все ясно.

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

этот параметр является фактическим параметром, который отвечает за преобразование всех объектов времени в этот текущий часовой пояс. так я видел это как -4

этот параметр:

config.active_record.default_timezone

это тот, кто решает, как сохранить время в БД, но... он получает только 2 возможных значения: :local и :UTC, а по умолчанию: :UTC

когда я использовал консоль rails, чтобы увидеть свою запись, представленное время после преобразования в «восточное время», чтобы увидеть фактическую дату, хранящуюся в базе данных:

created_at_before_type_cast

который вернул время UTC, так как это значение по умолчанию

и причина, по которой я думал, что в БД он хранится в моем часовом поясе +2, заключается в том, что я использовал MySQL Workbench, и его графический интерфейс только что показал мне значения даты и времени в моем локальном машинном времени.

резюме:

настройка, которая действительно имеет значение:

config.time_zone

это работает просто отлично. важно пройти через DOCS

person guy schaller    schedule 24.03.2013

Проверьте конфигурацию в файле application.rb. Если часовой пояс не установлен, то rails будет использовать часовой пояс по умолчанию вашей операционной системы. Чтобы это исправить, установите UTC в качестве часового пояса.

person Femaref    schedule 24.03.2013
comment
в моем application.rb у меня было: config.time_zone = "Восточное время (США и Канада)" и я добавил: config.active_record.default_timezone = "Восточное время (США и Канада)", но у меня все еще та же проблема... кажется, что когда он сохраняется, это мой часовой пояс (+2), а когда я его получаю, это -4 - person guy schaller; 24.03.2013
comment
Пробовали ли вы помощник локализации в своих представлениях? Не уверен, доступен ли он в консоли rails, но он имеет псевдоним I18n#l или просто l в ваших представлениях. Тем не менее, я не знаю, почему при извлечении будет -4. - person Brian Kung; 24.03.2013