Я немного озадачен часовыми поясами в рельсах. Я хочу, чтобы мое приложение rails использовало британское летнее время (например, летнее время в США) для отметок времени, установленных в updated_at и create_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
Итак, перед выполнением вычитания updated_at конвертируется в текущий часовой пояс.
Причина, по которой я хочу показать дату в текущем часовом поясе, заключается только в отчетах о состоянии и т. Д. В представлениях: если кто-то что-то обновляет, я хочу, чтобы он увидел, что оно было обновлено «1 минуту назад», а не «час назад». .
Может ли кто-нибудь сбить меня с толку? ура, максимум
РЕДАКТИРОВАТЬ: Моя непосредственная проблема, показывающая правильное время в статусе, решается с помощью помощника time_ago_in_words, который настраивается на часовой пояс. Я все еще хотел бы, чтобы кто-то объяснил, что происходит с временными метками, хотя:)