Improved timezones in Rails 2.1

Feb 08, 2008

The latest release of rails has made the handling of timezones in rails even easier. No longer do you need to install a couple of plugins, although you still need the tzinfo gem.

With the new baked in support for timezones in rails you can ignore the previous article on how to support timezones in rails 1.2.x. Now all you need to do is set the desired timezone you want to be working in:

Time.zone = "Pacific Time (US & Canada)"

Behind the scenes the date will be saved as UTC, but the appropriate timezone conversion will happen for you whenever you output a date or datetime.

> Time.zone = "Pacific Time (US & Canada)" 
> @post = Post.find :first
> @post.created_at

=> Fri, 08 Feb 2008 09:00:00 PST -08:00

> @post.created_at = Time.utc 2008, 1, 1
> @post.created_at

=> Mon, 31 Dec 2007 16:00:00 PST -08:00

It also makes it a breeze to display timezones that are customised to your end-users locality with a before filter:

class ApplicationsController < ApplicationController
  before_filter :set_timezone

  private
    def set_timezone
      Time.zone = current_user.time_zone || "Pacific Time (US &amp; Canada)" 
    end
end

Alternatively you can specify a default timezone in your environment.rb:

Rails::Initializer.run do |config|
  config.time_zone = "Pacific Time (US &amp; Canada)" 
end

Oh and of course Time.now will still return the time according to the server, if you want the current time in the user's local timezone then:

Time.zone.now
Hi, I'm Glenn! 👋 I've spent most of my career working with or at startups. I'm currently the Director of Product @ Ockam where I'm helping developers build applications and systems that are secure-by-design. It's time we started securely connecting apps, not networks.

Previously I led the Terraform product team @ HashiCorp, where we launched Terraform Cloud and set the stage for a successful IPO. Prior to that I was part of the Startup Team @ AWS, and earlier still an early employee @ Heroku. I've also invested in a couple of dozen early stage startups.