Метки времени Rails не t использовать правильный часовой пояс

Я немного запутался в часовых поясах в рельсах. Я хочу, чтобы в моем приложении rails использовалось британское летнее время (например, летнее время в США) для меток времени, установленных в моделях updated_at и created_at. Я изменил свой файл environment.rb, чтобы он сказал:

  config.time_zone = 'London'

Сервер ubuntu, на котором установлено мое приложение, похоже, сейчас использует BST: в командной строке, например, если я набираю 'date', я получаю текущее время (не смещенное на час). В консоли рельсов я вижу следующее:

>> time = Time.now
=> Wed Oct 27 16:29:17 +0100 2010
>> time.zone
=> "BST"

Все в порядке. Однако, если я создам новый объект модели AR и сохраню его, временные метки будут сделаны час назад. Итак, похоже, что здесь используется UTC. Сейчас, Я вижу логику в этом: поскольку метки времени могут использоваться в логике модели, вы хотите, чтобы они основывались на неизменяющемся эталонном времени, то есть в формате UTC. Но это странное поведение, которого я не понимаю:

#change a record and save it
>> someobj.save
=> true
#object's updated_at is one hour ago
>> someobj.updated_at
=> Wed, 27 Oct 2010 15:34:22 UTC +00:00
>> Time.now
=> Wed Oct 27 16:34:31 +0100 2010
#however, Time.now - object's updated at is just a few seconds.
>> Time.now - someobj.updated_at
=> 15.305549

Итак, перед выполнением вычитания update_at преобразуется в текущий часовой пояс.

Я хочу отображать дату в текущем часовом поясе только для отчетов о состоянии и т. Д. В представлениях: если кто-то что-то обновляет, я хочу, чтобы они увидели, что это было обновлено «1 минуту назад», а не «час назад» .

Кто-нибудь может меня развеять? ура, макс

РЕДАКТИРОВАТЬ: Моя непосредственная проблема отображения правильного времени в статусе решается с помощью помощника time_ago_in_words, который подстраивается под часовой пояс. Я все же хотел бы, чтобы кто-нибудь объяснил, что происходит с отметками времени: )

14
задан Max Williams 27 October 2010 в 15:44
поделиться