- period_for_local and local_to_utc now allow resolution of ambiguous times (e.g. when switching from daylight savings to standard time). The behaviour of these methods when faced with an ambiguous local time has now changed. If you are using these methods you should check the documentation. Thanks to Cliff Matthews for suggesting this change.
- Added require 'date' to timezone.rb (date isn't loaded by default in all environments).
- Use rake to build packages and documentation.
- License file is now included in gem distribution.
- Dates in definitions stored as Astronomical Julian Day numbers rather than as civil dates (improves performance creating DateTime instances).
- Added options to TZDataParser to allow generation of specific zones and countries.
- Moved TimezonePeriod class to timezone_period.rb.
- New TimezonePeriodList class to store TimezonePeriods for a timezone and perform searches for periods.
- Timezones now defined using blocks. TimezonePeriods are only instantiated when they are needed. Thanks to Jamis Buck for the suggestion.
- Add options to TZDataParser to allow exclusion of specific zones and countries.
- Exclude the Riyadh Solar Time zones. The rules are only for 1987 to 1989 and take a long time to generate and process. Riyadh Solar Time is no longer observed.
- The last TimezonePeriod for each Timezone is now written out with an unbounded rather than arbitrary end time.
- Construct the Rational offset in TimezonePeriod once when the TimezonePeriod is constructed rather than each time it is needed.
- Timezone and Country now keep a cache of loaded instances to avoid running require which can be slow on some platforms.
- Updated to tzdata version 2005n.
- Removed debug output accidently included in the previous release.
- Fixed a bug in the generation of friendly zone identifiers (was inserting apostrophes into UTC, GMT, etc).
- Fixed Country <=> operator (was comparing non-existant attribute)
- Fixed Timezone.period_for_local error when period not found.
- Added testcases for Timezone, TimezoneProxy, TimezonePeriod, Country and some selected timezones.
- Reduced visibility of some methods added in Timezone#setup and Country#setup.
- Added name method to Timezone (returns the identifier).
- Added friendly_identifier method to Timezone. Returns a more friendly version of the identifier.
- Added to_s method to Timezone. Returns the friendly identifier.
- Added == and <=> operators to Timezone (compares identifiers).
- Timezone now includes Comparable.
- Added to_s method to Country.
- Added == and <=> operators to Country (compares ISO 3166 country codes).
- Country now includes Comparable.
- New TimezoneProxy class that behaves the same as a Timezone but doesn't actually load in its definition until it is actually required.
- Modified Timezone and Country methods that return Timezones to return TimezoneProxy instances instead. This makes these methods much quicker.
In Ruby on Rails, you can now show a drop-down list of all timezones using the Rails time_zone_select helper method:
<%= time_zone_select 'user', 'time_zone', TZInfo::Timezone.all.sort, :model => TZInfo::Timezone %>
- Country and Timezone data is now loaded into class rather than instance variables. This makes Timezone links more efficient and saves memory if creating specific Timezone and Country classes directly.
- TimezonePeriod zone_identifier is now defined as a symbol to save memory (was previously a string).
- TimezonePeriod zone_identifiers that were previously '' are now :Unknown.
- Timezones and Countries can now be returned using Timezone.new(identifier) and Country.new(identifier). When passed an identifier, the new method calls get to return an instance of the specified timezone or country.
- Added new class methods to Timezone to return sets of zones and identifiers.
Thanks to Scott Barron of Lunchbox Software for the suggestions in his article about using TZInfo with Rails (http://lunchroom.lunchboxsoftware.com/pages/tzinfo_rails)