Convert Time from one time zone to another in Rails Convert Time from one time zone to another in Rails ruby ruby

Convert Time from one time zone to another in Rails


Use the in_time_zone method of the DateTime class

Loading development environment (Rails 2.3.2)>> now = DateTime.now.utc=> Sun, 06 Sep 2009 22:27:45 +0000>> now.in_time_zone('Eastern Time (US & Canada)')=> Sun, 06 Sep 2009 18:27:45 EDT -04:00>> quit

So for your particular example

Annotation.last.created_at.in_time_zone('Eastern Time (US & Canada)')


Although this is an old question, it's worth mentioning something. In a previous reply it's suggested to use a before_filter to set the timezone temporally.

You should never, ever do that because Time.zone stores the information in the thread, and it will probably leak to the next request handled by that thread.

Instead you should use an around_filter to make sure that the Time.zone is reset after the request is complete. Something like:

around_filter :set_time_zoneprivatedef set_time_zone  old_time_zone = Time.zone  Time.zone = current_user.time_zone if logged_in?  yieldensure  Time.zone = old_time_zoneend

Read more about this here


If you add this to your /config/application.rb

config.time_zone = 'Eastern Time (US & Canada)'

Then you can cell

Annotation.last.created_at.in_time_zone

to get the time in the specified time zone.