Class: TZInfo::Timezone

Inherits:
Object
  • Object
show all
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

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.



47
48
49
# File 'lib/tzinfo/timezone.rb', line 47

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.



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

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’).

This method will take a substantial time to return the first time it is called as all the Timezone classes will have to be loaded by Ruby. If you just want the zone identifiers use all_country_zone_identifiers instead.



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

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.



54
55
56
# File 'lib/tzinfo/timezone.rb', line 54

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.



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

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).



36
37
38
39
40
41
42
# File 'lib/tzinfo/timezone.rb', line 36

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

.us_zone_identifiersObject

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



91
92
93
# File 'lib/tzinfo/timezone.rb', line 91

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. If you only need the zone identifiers, use us_zone_identifiers instead.



85
86
87
# File 'lib/tzinfo/timezone.rb', line 85

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

Instance Method Details

#current_periodObject

Returns the TimezonePeriod for the current time.



200
201
202
# File 'lib/tzinfo/timezone.rb', line 200

def current_period
  period_for_utc(Time.now.utc)
end

#current_period_and_timeObject

Returns the current time and TimezonePeriod as an array.



205
206
207
208
# File 'lib/tzinfo/timezone.rb', line 205

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

#identifierObject

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



96
97
98
# File 'lib/tzinfo/timezone.rb', line 96

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.



188
189
190
191
192
# File 'lib/tzinfo/timezone.rb', line 188

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

#nowObject

Returns the current time in the timezone as a Time.



195
196
197
# File 'lib/tzinfo/timezone.rb', line 195

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.



140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# File 'lib/tzinfo/timezone.rb', line 140

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.



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/tzinfo/timezone.rb', line 105

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

#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).



172
173
174
175
176
# File 'lib/tzinfo/timezone.rb', line 172

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