Из тонкой инструкции :
attribute_for_inspect (attr_name)
Возвращает #inspect
-подобную строку для значения атрибута attr_name
.
[...]
Атрибуты даты и времени возвращаются в формате :db
.
Таким образом, когда attribute_for_inspect
используется для даты и времени, он вернет строку, которую база данных использует для этого значения. Rails хранит время в базе данных в формате UTC, и любая разумная база данных будет использовать ISO 8601 для форматирования временных отметок при входе и выходе.
2012-01-04 01:00:00
- это отметка времени UTC в формате ISO 8601. Когда Rails возвращает дату и время, он преобразует его в экземпляр ActiveSupport::TimeWithZone
и включает в себя настройку часового пояса на основе часового пояса, который вы настроили в application.rb
. Вы используете часовой пояс CST, и это на шесть часов меньше UTC; вычитание шести часов с 01:00 дает 19:00, и вы теряете день от перехода в полночь. Удобный для человека формат Tue, 03 Jan 2012 19:00:00 CST -06:00
- это то, как ActiveSupport :: TimeWithZone представляет себя, когда inspect
ed, а консоль использует x.inspect
для отображения x
.
Что касается исправления ваших запросов, просто используйте t.utc
перед отправкой за t
, и все будет хорошо.