---
title: "Rails 5.1 enhances ActiveSupport::TimeZone.country_zones"
description:
  "Rails 5.1 now returns unmapped timezones from
  ActiveSupport::TimeZone.country_zones with supplied TZInfo identifier instead
  of empty response"
canonical_url: "https://www.bigbinary.com/blog/rails-5-1-returns-unmapped-timezones-from-activesupport-timezone-country_zones"
markdown_url: "https://www.bigbinary.com/blog/rails-5-1-returns-unmapped-timezones-from-activesupport-timezone-country_zones.md"
---

# Rails 5.1 enhances ActiveSupport::TimeZone.country_zones

Rails 5.1 now returns unmapped timezones from
ActiveSupport::TimeZone.country_zones with supplied TZInfo identifier instead of
empty response

- Author: Narendra Rajput
- Published: July 18, 2017
- Categories: Rails 5.1, Rails

The
[ActiveSupport::TimeZone](http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html)
class serves as wrapper around
[TZInfo::TimeZone](http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html)
class. It limits the set of zones provided by TZInfo to smaller meaningful
subset and returns zones with friendly names. For example, TZInfo gem returns
"America/New_York" whereas Active Support returns "Eastern Time (US & Canada)".

[ActiveSupport::TimeZone.country_zones](http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#method-c-country_zones)
method returns a set of TimeZone objects for timezones in a country specified as
2 character country code.

```ruby
# Rails 5.0
>> ActiveSupport::TimeZone.country_zones('US')

=> [#<ActiveSupport::TimeZone:0x007fcc2b9b3198 @name="Hawaii", @utc_offset=nil, @tzinfo=#<TZInfo::DataTimezone: Pacific/Honolulu>>, #<ActiveSupport::TimeZone:0x007fcc2b9d9ac8 @name="Alaska", @utc_offset=nil, @tzinfo=#<TZInfo::DataTimezone: America/Juneau>>, #<ActiveSupport::TimeZone:0x007fcc2ba03a08 @name="Pacific Time (US & Canada)", @utc_offset=nil, @tzinfo=#<TZInfo::DataTimezone: America/Los_Angeles>>,...]
```

In Rails 5.0, the `country_zones` method returns empty for some countries. This
is because `ActiveSupport::TimeZone::MAPPING` supports only a limited number of
timezone names.

```ruby

>> ActiveSupport::TimeZone.country_zones('SV') // El Salvador

=> []
```

Rails 5.1
[fixed](https://github.com/rails/rails/commit/ec9b4d39108d4c22d00426fa95c61b8b37dfe4e3)
this [issue](https://github.com/rails/rails/issues/28431). So now if the country
is not found in the `MAPPING` hash then a new `ActiveSupport::TimeZone` instance
for the country is returned.

```ruby

>> ActiveSupport::TimeZone.country_zones('SV') // El Salvador

=> [#<ActiveSupport::TimeZone:0x007ff0dab83080 @name="America/El_Salvador", @utc_offset=nil, @tzinfo=#<TZInfo::DataTimezone: America/El_Salvador>>]
```

## Links

- [Human page](https://www.bigbinary.com/blog/rails-5-1-returns-unmapped-timezones-from-activesupport-timezone-country_zones)
