У меня очень странная проблема с летним временем в моем приложении.По какой-то причине всякий раз, когда я получаю время из таблицы, оно не подстраивается под DST.Например, если я создаю новое время в консоли, в соответствующем часовом поясе, запишу его в базу данных, а затем попытаюсь извлечь его из базы данных, оно возвращается на один час раньше.
Вотпример:
Здесь мы видим, что при использовании консоли создание нового времени в 15:00 EST равно 19:00 UTC (с учетом поправки на летнее время, что делает его -0400 вместо обычного-0500):
ruby-1.8.6-p114 > Time.zone
=> #<ActiveSupport::TimeZone:0x12b1b68 @name="UTC", @tzinfo=nil, @utc_offset=0>
ruby-1.8.6-p114 > Time.zone = "Eastern Time (US & Canada)"
=> "Eastern Time (US & Canada)"
ruby-1.8.6-p114 > Time.zone.parse("15:00")
=> Thu, 09 Sep 2010 15:00:00 EDT -04:00
ruby-1.8.6-p114 > Time.zone.parse("15:00").utc
=> Thu Sep 09 19:00:00 UTC 2010
ruby-1.8.6-p114 > Time.zone.parse("15:00").dst?
=> true
Теперь я пытаюсь записать то же самое время в базу данных и получить ее обратно:
ruby-1.8.6-p114 > b = Book.new
=> #<Book id: nil, return_time: nil, created_at: nil, updated_at: nil>
ruby-1.8.6-p114 > b.return_time = Time.zone.parse("15:00")
=> Thu, 09 Sep 2010 15:00:00 EDT -04:00
ruby-1.8.6-p114 > b.save
=> true
ruby-1.8.6-p114 > result = Book.find(:last).return_time
=> Sat Jan 01 19:00:00 UTC 2000
ruby-1.8.6-p114 > result.zone
=> "UTC"
ruby-1.8.6-p114 > result.in_time_zone
=> Sat, 01 Jan 2000 14:00:00 EST -05:00
ruby-1.8.6-p114 > result.dst?
=> false
В моем environment.rb есть это:
config.time_zone = 'UTC'
И application_controller.rb имеет следующее:
before_filter :set_user_time_zone
def set_user_time_zone
if current_user
Time.zone = current_user.time_zone
else
Rails.logger.error '[Time.zone.now.to_s][ERROR]: Missing current_user from in set_user_time_zone!'
end
end
Есть какие-нибудь идеи относительно того, что здесь может происходить и как это исправить?Я занимаюсь этим уже несколько дней, так что любая помощь будет очень признательна!
Большое спасибо.