Class: TZInfo::Timezone

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/tzinfo/timezone.rb

Overview

Timezone is the base class of all timezones. It provides a factory method get to access timezones by identifier. Once a specific Timezone has been retrieved, DateTimes and Times can be converted between the UTC and the local time for the zone. For example:

tz = TZInfo::Timezone.get('America/New_York')
puts tz.utc_to_local(DateTime.new(2005,8,29,15,35,0)).to_s
puts tz.local_to_utc(Time.utc(2005,8,29,11,35,0)).to_s

The timezone information all comes from the tz database (see www.twinsun.com/tz/tz-link.htm)

Direct Known Subclasses

Definitions::Africa::Abidjan, Definitions::Africa::Accra, Definitions::Africa::Addis_Ababa, Definitions::Africa::Algiers, Definitions::Africa::Asmera, Definitions::Africa::Bamako, Definitions::Africa::Bangui, Definitions::Africa::Banjul, Definitions::Africa::Bissau, Definitions::Africa::Blantyre, Definitions::Africa::Brazzaville, Definitions::Africa::Bujumbura, Definitions::Africa::Cairo, Definitions::Africa::Casablanca, Definitions::Africa::Ceuta, Definitions::Africa::Conakry, Definitions::Africa::Dakar, Definitions::Africa::Dar_es_Salaam, Definitions::Africa::Djibouti, Definitions::Africa::Douala, Definitions::Africa::El_Aaiun, Definitions::Africa::Freetown, Definitions::Africa::Gaborone, Definitions::Africa::Harare, Definitions::Africa::Johannesburg, Definitions::Africa::Kampala, Definitions::Africa::Khartoum, Definitions::Africa::Kigali, Definitions::Africa::Kinshasa, Definitions::Africa::Lagos, Definitions::Africa::Libreville, Definitions::Africa::Lome, Definitions::Africa::Luanda, Definitions::Africa::Lubumbashi, Definitions::Africa::Lusaka, Definitions::Africa::Malabo, Definitions::Africa::Maputo, Definitions::Africa::Maseru, Definitions::Africa::Mbabane, Definitions::Africa::Mogadishu, Definitions::Africa::Monrovia, Definitions::Africa::Nairobi, Definitions::Africa::Ndjamena, Definitions::Africa::Niamey, Definitions::Africa::Nouakchott, Definitions::Africa::Ouagadougou, Definitions::Africa::Porto__m__Novo, Definitions::Africa::Sao_Tome, Definitions::Africa::Tripoli, Definitions::Africa::Tunis, Definitions::Africa::Windhoek, Definitions::America::Adak, Definitions::America::Anchorage, Definitions::America::Anguilla, Definitions::America::Antigua, Definitions::America::Araguaina, Definitions::America::Argentina::Buenos_Aires, Definitions::America::Argentina::Catamarca, Definitions::America::Argentina::Cordoba, Definitions::America::Argentina::Jujuy, Definitions::America::Argentina::La_Rioja, Definitions::America::Argentina::Mendoza, Definitions::America::Argentina::Rio_Gallegos, Definitions::America::Argentina::San_Juan, Definitions::America::Argentina::Tucuman, Definitions::America::Argentina::Ushuaia, Definitions::America::Aruba, Definitions::America::Asuncion, Definitions::America::Bahia, Definitions::America::Barbados, Definitions::America::Belem, Definitions::America::Belize, Definitions::America::Boa_Vista, Definitions::America::Bogota, Definitions::America::Boise, Definitions::America::Cambridge_Bay, Definitions::America::Campo_Grande, Definitions::America::Cancun, Definitions::America::Caracas, Definitions::America::Cayenne, Definitions::America::Cayman, Definitions::America::Chicago, Definitions::America::Chihuahua, Definitions::America::Coral_Harbour, Definitions::America::Costa_Rica, Definitions::America::Cuiaba, Definitions::America::Curacao, Definitions::America::Danmarkshavn, Definitions::America::Dawson, Definitions::America::Dawson_Creek, Definitions::America::Denver, Definitions::America::Detroit, Definitions::America::Dominica, Definitions::America::Edmonton, Definitions::America::Eirunepe, Definitions::America::El_Salvador, Definitions::America::Fortaleza, Definitions::America::Glace_Bay, Definitions::America::Godthab, Definitions::America::Goose_Bay, Definitions::America::Grand_Turk, Definitions::America::Grenada, Definitions::America::Guadeloupe, Definitions::America::Guatemala, Definitions::America::Guayaquil, Definitions::America::Guyana, Definitions::America::Halifax, Definitions::America::Havana, Definitions::America::Hermosillo, Definitions::America::Indiana::Indianapolis, Definitions::America::Indiana::Knox, Definitions::America::Indiana::Marengo, Definitions::America::Indiana::Vevay, Definitions::America::Inuvik, Definitions::America::Iqaluit, Definitions::America::Jamaica, Definitions::America::Juneau, Definitions::America::Kentucky::Louisville, Definitions::America::Kentucky::Monticello, Definitions::America::La_Paz, Definitions::America::Lima, Definitions::America::Los_Angeles, Definitions::America::Maceio, Definitions::America::Managua, Definitions::America::Manaus, Definitions::America::Martinique, Definitions::America::Mazatlan, Definitions::America::Menominee, Definitions::America::Merida, Definitions::America::Mexico_City, Definitions::America::Miquelon, Definitions::America::Monterrey, Definitions::America::Montevideo, Definitions::America::Montreal, Definitions::America::Montserrat, Definitions::America::Nassau, Definitions::America::New_York, Definitions::America::Nipigon, Definitions::America::Nome, Definitions::America::Noronha, Definitions::America::North_Dakota::Center, Definitions::America::Panama, Definitions::America::Pangnirtung, Definitions::America::Paramaribo, Definitions::America::Phoenix, Definitions::America::Port__m__au__m__Prince, Definitions::America::Port_of_Spain, Definitions::America::Porto_Velho, Definitions::America::Puerto_Rico, Definitions::America::Rainy_River, Definitions::America::Rankin_Inlet, Definitions::America::Recife, Definitions::America::Regina, Definitions::America::Rio_Branco, Definitions::America::Santiago, Definitions::America::Santo_Domingo, Definitions::America::Sao_Paulo, Definitions::America::Scoresbysund, Definitions::America::St_Johns, Definitions::America::St_Kitts, Definitions::America::St_Lucia, Definitions::America::St_Thomas, Definitions::America::St_Vincent, Definitions::America::Swift_Current, Definitions::America::Tegucigalpa, Definitions::America::Thule, Definitions::America::Thunder_Bay, Definitions::America::Tijuana, Definitions::America::Toronto, Definitions::America::Tortola, Definitions::America::Vancouver, Definitions::America::Whitehorse, Definitions::America::Winnipeg, Definitions::America::Yakutat, Definitions::America::Yellowknife, Definitions::Antarctica::Casey, Definitions::Antarctica::Davis, Definitions::Antarctica::DumontDUrville, Definitions::Antarctica::Mawson, Definitions::Antarctica::McMurdo, Definitions::Antarctica::Palmer, Definitions::Antarctica::Rothera, Definitions::Antarctica::Syowa, Definitions::Antarctica::Vostok, Definitions::Asia::Aden, Definitions::Asia::Almaty, Definitions::Asia::Amman, Definitions::Asia::Anadyr, Definitions::Asia::Aqtau, Definitions::Asia::Aqtobe, Definitions::Asia::Ashgabat, Definitions::Asia::Baghdad, Definitions::Asia::Bahrain, Definitions::Asia::Baku, Definitions::Asia::Bangkok, Definitions::Asia::Beirut, Definitions::Asia::Bishkek, Definitions::Asia::Brunei, Definitions::Asia::Calcutta, Definitions::Asia::Choibalsan, Definitions::Asia::Chongqing, Definitions::Asia::Colombo, Definitions::Asia::Damascus, Definitions::Asia::Dhaka, Definitions::Asia::Dili, Definitions::Asia::Dubai, Definitions::Asia::Dushanbe, Definitions::Asia::Gaza, Definitions::Asia::Harbin, Definitions::Asia::Hong_Kong, Definitions::Asia::Hovd, Definitions::Asia::Irkutsk, Definitions::Asia::Jakarta, Definitions::Asia::Jayapura, Definitions::Asia::Jerusalem, Definitions::Asia::Kabul, Definitions::Asia::Kamchatka, Definitions::Asia::Karachi, Definitions::Asia::Kashgar, Definitions::Asia::Katmandu, Definitions::Asia::Krasnoyarsk, Definitions::Asia::Kuala_Lumpur, Definitions::Asia::Kuching, Definitions::Asia::Kuwait, Definitions::Asia::Macau, Definitions::Asia::Magadan, Definitions::Asia::Makassar, Definitions::Asia::Manila, Definitions::Asia::Muscat, Definitions::Asia::Nicosia, Definitions::Asia::Novosibirsk, Definitions::Asia::Omsk, Definitions::Asia::Oral, Definitions::Asia::Phnom_Penh, Definitions::Asia::Pontianak, Definitions::Asia::Pyongyang, Definitions::Asia::Qatar, Definitions::Asia::Qyzylorda, Definitions::Asia::Rangoon, Definitions::Asia::Riyadh, Definitions::Asia::Riyadh87, Definitions::Asia::Riyadh88, Definitions::Asia::Riyadh89, Definitions::Asia::Saigon, Definitions::Asia::Sakhalin, Definitions::Asia::Samarkand, Definitions::Asia::Seoul, Definitions::Asia::Shanghai, Definitions::Asia::Singapore, Definitions::Asia::Taipei, Definitions::Asia::Tashkent, Definitions::Asia::Tbilisi, Definitions::Asia::Tehran, Definitions::Asia::Thimphu, Definitions::Asia::Tokyo, Definitions::Asia::Ulaanbaatar, Definitions::Asia::Urumqi, Definitions::Asia::Vientiane, Definitions::Asia::Vladivostok, Definitions::Asia::Yakutsk, Definitions::Asia::Yekaterinburg, Definitions::Asia::Yerevan, Definitions::Atlantic::Azores, Definitions::Atlantic::Bermuda, Definitions::Atlantic::Canary, Definitions::Atlantic::Cape_Verde, Definitions::Atlantic::Faeroe, Definitions::Atlantic::Madeira, Definitions::Atlantic::Reykjavik, Definitions::Atlantic::South_Georgia, Definitions::Atlantic::St_Helena, Definitions::Atlantic::Stanley, Definitions::Australia::Adelaide, Definitions::Australia::Brisbane, Definitions::Australia::Broken_Hill, Definitions::Australia::Currie, Definitions::Australia::Darwin, Definitions::Australia::Hobart, Definitions::Australia::Lindeman, Definitions::Australia::Lord_Howe, Definitions::Australia::Melbourne, Definitions::Australia::Perth, Definitions::Australia::Sydney, Definitions::CET, Definitions::EET, Definitions::Etc::GMT, Definitions::Etc::GMT__m__1, Definitions::Etc::GMT__m__10, Definitions::Etc::GMT__m__11, Definitions::Etc::GMT__m__12, Definitions::Etc::GMT__m__13, Definitions::Etc::GMT__m__14, Definitions::Etc::GMT__m__2, Definitions::Etc::GMT__m__3, Definitions::Etc::GMT__m__4, Definitions::Etc::GMT__m__5, Definitions::Etc::GMT__m__6, Definitions::Etc::GMT__m__7, Definitions::Etc::GMT__m__8, Definitions::Etc::GMT__m__9, Definitions::Etc::GMT__p__1, Definitions::Etc::GMT__p__10, Definitions::Etc::GMT__p__11, Definitions::Etc::GMT__p__12, Definitions::Etc::GMT__p__2, Definitions::Etc::GMT__p__3, Definitions::Etc::GMT__p__4, Definitions::Etc::GMT__p__5, Definitions::Etc::GMT__p__6, Definitions::Etc::GMT__p__7, Definitions::Etc::GMT__p__8, Definitions::Etc::GMT__p__9, Definitions::Etc::UCT, Definitions::Etc::UTC, Definitions::Europe::Amsterdam, Definitions::Europe::Andorra, Definitions::Europe::Athens, Definitions::Europe::Belgrade, Definitions::Europe::Berlin, Definitions::Europe::Brussels, Definitions::Europe::Bucharest, Definitions::Europe::Budapest, Definitions::Europe::Chisinau, Definitions::Europe::Copenhagen, Definitions::Europe::Dublin, Definitions::Europe::Gibraltar, Definitions::Europe::Helsinki, Definitions::Europe::Istanbul, Definitions::Europe::Kaliningrad, Definitions::Europe::Kiev, Definitions::Europe::Lisbon, Definitions::Europe::London, Definitions::Europe::Luxembourg, Definitions::Europe::Madrid, Definitions::Europe::Malta, Definitions::Europe::Minsk, Definitions::Europe::Monaco, Definitions::Europe::Moscow, Definitions::Europe::Oslo, Definitions::Europe::Paris, Definitions::Europe::Prague, Definitions::Europe::Riga, Definitions::Europe::Rome, Definitions::Europe::Samara, Definitions::Europe::Simferopol, Definitions::Europe::Sofia, Definitions::Europe::Stockholm, Definitions::Europe::Tallinn, Definitions::Europe::Tirane, Definitions::Europe::Uzhgorod, Definitions::Europe::Vaduz, Definitions::Europe::Vienna, Definitions::Europe::Vilnius, Definitions::Europe::Warsaw, Definitions::Europe::Zaporozhye, Definitions::Europe::Zurich, Definitions::Indian::Antananarivo, Definitions::Indian::Chagos, Definitions::Indian::Christmas, Definitions::Indian::Cocos, Definitions::Indian::Comoro, Definitions::Indian::Kerguelen, Definitions::Indian::Mahe, Definitions::Indian::Maldives, Definitions::Indian::Mauritius, Definitions::Indian::Mayotte, Definitions::Indian::Reunion, Definitions::MET, Definitions::Pacific::Apia, Definitions::Pacific::Auckland, Definitions::Pacific::Chatham, Definitions::Pacific::Easter, Definitions::Pacific::Efate, Definitions::Pacific::Enderbury, Definitions::Pacific::Fakaofo, Definitions::Pacific::Fiji, Definitions::Pacific::Funafuti, Definitions::Pacific::Galapagos, Definitions::Pacific::Gambier, Definitions::Pacific::Guadalcanal, Definitions::Pacific::Guam, Definitions::Pacific::Honolulu, Definitions::Pacific::Johnston, Definitions::Pacific::Kiritimati, Definitions::Pacific::Kosrae, Definitions::Pacific::Kwajalein, Definitions::Pacific::Majuro, Definitions::Pacific::Marquesas, Definitions::Pacific::Midway, Definitions::Pacific::Nauru, Definitions::Pacific::Niue, Definitions::Pacific::Norfolk, Definitions::Pacific::Noumea, Definitions::Pacific::Pago_Pago, Definitions::Pacific::Palau, Definitions::Pacific::Pitcairn, Definitions::Pacific::Ponape, Definitions::Pacific::Port_Moresby, Definitions::Pacific::Rarotonga, Definitions::Pacific::Saipan, Definitions::Pacific::Tahiti, Definitions::Pacific::Tarawa, Definitions::Pacific::Tongatapu, Definitions::Pacific::Truk, Definitions::Pacific::Wake, Definitions::Pacific::Wallis, Definitions::WET, TimezoneProxy

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.allObject

At the moment, returns the result of all_country_zones. May be changed in the future to return all the Timezone instances including non-country specific zones.



50
51
52
# File 'lib/tzinfo/timezone.rb', line 50

def self.all
  all_country_zones
end

.all_country_zone_identifiersObject

Returns all the zone identifiers defined for all Countries. This is not the complete set of zone identifiers as some are not country specific (e.g. ‘Etc/GMT’). You can obtain a Timezone instance for a given identifier with the get method.



77
78
79
80
81
# File 'lib/tzinfo/timezone.rb', line 77

def self.all_country_zone_identifiers
  Country.all_codes.inject([]) {|zones,country|
    zones += Country.get(country).zone_identifiers
  }
end

.all_country_zonesObject

Returns all the Timezones defined for all Countries. This is not the complete set of Timezones as some are not country specific (e.g. ‘Etc/GMT’).

Returns TimezoneProxy objects to avoid the overhead of loading Timezone definitions until a conversion is actually required.



67
68
69
70
71
# File 'lib/tzinfo/timezone.rb', line 67

def self.all_country_zones
  Country.all_codes.inject([]) {|zones,country|
    zones += Country.get(country).zones
  }
end

.all_identifiersObject

At the moment, returns the result of all_country_zone_identifiers. May be changed in the future to return all the zone identifiers including non-country specific zones.



57
58
59
# File 'lib/tzinfo/timezone.rb', line 57

def self.all_identifiers
  all_country_zone_identifiers
end

.get(identifier) ⇒ Object

Returns a timezone by its identifier (e.g. “Europe/London”, “America/Chicago” or “UTC”).

Raises an exception of the timezone couldn’t be found.



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/tzinfo/timezone.rb', line 25

def self.get(identifier)
  raise 'Invalid identifier' if identifier !~ /^[A-z0-9\+\-_]+(\/[A-z0-9\+\-_]+)*$/
  identifier = identifier.gsub(/-/, '__m__').gsub(/\+/, '__p__')
  require "tzinfo/definitions/#{identifier}"
  
  m = Definitions
  identifier.split(/\//).each {|part|
    m = m.const_get(part)
  }
  m.instance      
end

.new(identifier = nil) ⇒ Object

If identifier is nil calls super(), else calls get(identifier).



38
39
40
41
42
43
44
45
# File 'lib/tzinfo/timezone.rb', line 38

def self.new(identifier = nil)
  if identifier
    puts 'getting'
    get(identifier)
  else
    super()
  end
end

.us_zone_identifiersObject

Returns all US zone identifiers. A shortcut for TZInfo::Country.get(‘US’).zone_identifiers.



94
95
96
# File 'lib/tzinfo/timezone.rb', line 94

def self.us_zone_identifiers
  Country.get('US').zone_identifiers
end

.us_zonesObject

Returns all US Timezone instances. A shortcut for TZInfo::Country.get(‘US’).zones.

Returns TimezoneProxy objects to avoid the overhead of loading Timezone definitions until a conversion is actually required.



88
89
90
# File 'lib/tzinfo/timezone.rb', line 88

def self.us_zones
  Country.get('US').zones
end

Instance Method Details

#<=>(tz) ⇒ Object

Compare two Timezones based on their identifier. Returns -1 if tz is less than self, 0 if tz is equal to self and +1 if tz is greater than self.



268
269
270
# File 'lib/tzinfo/timezone.rb', line 268

def <=>(tz)
  identifier <=> tz.identifier
end

#==(tz) ⇒ Object

Two Timezones are considered to be equal if their identifiers are the same.



262
263
264
# File 'lib/tzinfo/timezone.rb', line 262

def ==(tz)
  identifier == tz.identifier
end

#current_periodObject

Returns the TimezonePeriod for the current time.



251
252
253
# File 'lib/tzinfo/timezone.rb', line 251

def current_period
  period_for_utc(Time.now.utc)
end

#current_period_and_timeObject

Returns the current time and TimezonePeriod as an array.



256
257
258
259
# File 'lib/tzinfo/timezone.rb', line 256

def current_period_and_time
  utc = Time.now.utc
  [utc_to_local(utc), period_for_utc(utc)]
end

#friendly_identifier(skip_first_part = false) ⇒ Object

Returns a friendlier version of the idenfitifer. Set skip_first_part to omit the first part of the identifier (typically a region name) where there is more than one part.



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/tzinfo/timezone.rb', line 117

def friendly_identifier(skip_first_part = false)
  parts = identifier.split('/')
  if parts.empty?
    # shouldn't happen
    identifier
  elsif parts.length == 1        
    parts[0]
  else
    if skip_first_part
      result = ''
    else
      result = parts[0] + ' - '
    end
    
    parts[1, parts.length - 1].reverse_each {|part|
      part.gsub!(/_/, ' ')
      
      # Missing a space if a lower case followed by an upper case and the
      # name isn't McXxxx.
      part.gsub!(/[^M]([a-z])([A-Z])/, '\1 \2')
      part.gsub!(/[M]([a-bd-z])([A-Z])/, '\1 \2')
      
      # Missing an apostrophe if two consecutive upper case characters.
      part.gsub!(/([A-Z])([A-Z])/, '\1\'\2')
      
      result << part
      result << ', '
    }
    
    result.slice!(result.length - 2, 2)
    result
  end
end

#identifierObject

The identifier of the timezone, e.g. “Europe/Paris”.



99
100
101
# File 'lib/tzinfo/timezone.rb', line 99

def identifier
  'Unknown'
end

#local_to_utc(local) ⇒ Object

Converts a time in the local timezone to UTC. local can either be a DateTime or a Time. The returned time has the same type as local. Any timezone information in local is ignored (it is treated as a local time).

During the period when daylight savings reverts to standard time and there are two possible UTC times for each local time, local_to_utc returns the earlier time.

For times skipped during a change to daylight savings, PeriodNotFound is raised.



239
240
241
242
243
# File 'lib/tzinfo/timezone.rb', line 239

def local_to_utc(local)
  run_on_datetime(local) {|local|      
    period_for_local(local).to_utc(local)
  }
end

#nameObject

An alias for identifier.



104
105
106
107
# File 'lib/tzinfo/timezone.rb', line 104

def name
  # Don't use alias, as identifier gets overridden.
  identifier
end

#nowObject

Returns the current time in the timezone as a Time.



246
247
248
# File 'lib/tzinfo/timezone.rb', line 246

def now
  utc_to_local(Time.now.utc)
end

#period_for_local(local) ⇒ Object

Returns the TimezonePeriod for the given local time. local can either be a DateTime or a Time. Any timezone information in local is ignored (it is treated as a time in the current timezone).

If no TimezonePeriod could be found, PeriodNotFound is raised. This will happen when a change to daylight savings occurs and an hour is skipped.



191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
# File 'lib/tzinfo/timezone.rb', line 191

def period_for_local(local)  
  run_on_datetime(local) {|local|
    # dumb search for now      
    periods.each {|period|
      if period.valid_for_local?(local)
        return period          
      end
    }
      
    # if nothing found, assume the first and last periods are unbounded
    if periods.length > 0
      
      last = periods[periods.length - 1] 
      if last.local_after_start?(local)
        last
      else
        first = periods[0]
        if first.local_before_end?(local)
          first
        else
          raise PeriodNotFound, "No time period found for #{utc}. This could be because a change to daylight savings time caused an hour to be skipped."
        end
      end
    else
      raise PeriodNotFound, "No time period found for #{utc}. This could be because a change to daylight savings time caused an hour to be skipped."
    end
  }
end

#period_for_utc(utc) ⇒ Object

Returns the TimezonePeriod for the given UTC time. utc can either be a DateTime or a Time. Any timezone information in utc is ignored (it is treated as a UTC time).

If no TimezonePeriod could be found, PeriodNotFound is raised.



156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# File 'lib/tzinfo/timezone.rb', line 156

def period_for_utc(utc)
  run_on_datetime(utc) {|utc|
    # dumb search for now      
    periods.each {|period|
      if period.valid_for_utc?(utc)
        return period          
      end
    }
      
    # if nothing found, assume the first and last periods are unbounded
    if periods.length > 0
      
      last = periods[periods.length - 1] 
      if last.utc_after_start?(utc)
        last
      else
        first = periods[0]
        if first.utc_before_end?(utc)
          first
        else            
          raise PeriodNotFound, "No time period found for #{utc}"
        end
      end
    else
      raise PeriodNotFound, "No time period found for #{utc}"
    end
  }
end

#to_sObject

Returns a friendlier version of the idenfitifer.



110
111
112
# File 'lib/tzinfo/timezone.rb', line 110

def to_s
  friendly_identifier
end

#utc_to_local(utc) ⇒ Object

Converts a time in UTC to the local timezone. utc can either be a DateTime or a Time. The returned time has the same type as utc. Any timezone information in utc is ignored (it is treated as a UTC time).



223
224
225
226
227
# File 'lib/tzinfo/timezone.rb', line 223

def utc_to_local(utc)
  run_on_datetime(utc) {|utc|
    period_for_utc(utc).to_local(utc)
  }
end