Method: Time.use_zone

Defined in:
activesupport/lib/active_support/core_ext/time/zones.rb

.use_zone(time_zone) ⇒ Object

Allows override of Time.zone locally inside supplied block; resets Time.zone to existing value when done.

class ApplicationController < ActionController::Base
  around_action :set_time_zone

  private
    def set_time_zone
      Time.use_zone(current_user.timezone) { yield }
    end
end

NOTE: This won’t affect any ActiveSupport::TimeWithZone objects that have already been created, e.g. any model timestamp attributes that have been read before the block will remain in the application’s default timezone.



61
62
63
64
65
66
67
68
69
# File 'activesupport/lib/active_support/core_ext/time/zones.rb', line 61

def use_zone(time_zone)
  new_zone = find_zone!(time_zone)
  begin
    old_zone, ::Time.zone = ::Time.zone, new_zone
    yield
  ensure
    ::Time.zone = old_zone
  end
end