Я расширил класс Time в моих проектах на Rails, чтобы я мог легко получить время в Нью-Йорке:
/ lib / extensions.rb .
class Time
# Get NYC time:
def nyc
self.in_time_zone('Eastern Time (US & Canada)')
end
end
Тестирование, выглядит хорошо:
time_a = Time.now.utc.nyc
=> Sun, 21 Apr 2019 18:42:12 EDT -04:00
Проблема в том, что я извлекаю метки времени из БД:
time_b = object.created_at.in_time_zone('Eastern Time (US & Canada)')
=> Sun, 21 Apr 2019 17:22:04 EDT -04:00
time_c = object.created_at.nyc
=> Sun, 21 Apr 2019 17:22:04 UTC +00:00
Супер запутался. Преобразование метки времени в EDT работает, когда я использую in_time_zone в консоли, но не когда я использую расширение? Даже если мой метод расширения работает с объектами времени, которые я создаю в консоли? Что здесь происходит?
( Примечание: Экземпляры времени в Rails фактически являются экземплярами ActiveSupport::TimeWithZone
. "Экземпляры TimeWithZone реализуют тот же API, что и экземпляры Ruby Time, так что экземпляры Time и TimeWithZone являются взаимозаменяемыми." - ActiveSupportTimeWithZone )