tzinfo 0.3.62 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of tzinfo might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/CHANGES +25 -158
- data/LICENSE +1 -1
- data/README +89 -55
- data/Rakefile +87 -282
- data/lib/tzinfo/country.rb +28 -34
- data/lib/tzinfo/country_index_definition.rb +2 -7
- data/lib/tzinfo/country_info.rb +20 -44
- data/lib/tzinfo/country_timezone.rb +1 -1
- data/lib/tzinfo/data_source.rb +182 -0
- data/lib/tzinfo/data_timezone.rb +1 -3
- data/lib/tzinfo/data_timezone_info.rb +11 -190
- data/lib/tzinfo/info_timezone.rb +1 -3
- data/lib/tzinfo/linked_timezone.rb +1 -4
- data/lib/tzinfo/linked_timezone_info.rb +9 -5
- data/lib/tzinfo/offset_rationals.rb +2 -4
- data/lib/tzinfo/ruby_core_support.rb +152 -82
- data/lib/tzinfo/ruby_country_info.rb +78 -0
- data/lib/tzinfo/ruby_data_source.rb +153 -0
- data/lib/tzinfo/time_or_datetime.rb +83 -52
- data/lib/tzinfo/timezone.rb +27 -69
- data/lib/tzinfo/timezone_definition.rb +4 -7
- data/lib/tzinfo/timezone_index_definition.rb +1 -6
- data/lib/tzinfo/timezone_info.rb +8 -4
- data/lib/tzinfo/timezone_offset_info.rb +1 -3
- data/lib/tzinfo/timezone_period.rb +31 -6
- data/lib/tzinfo/timezone_transition_info.rb +42 -12
- data/lib/tzinfo/transition_data_timezone_info.rb +223 -0
- data/lib/tzinfo/zoneinfo_country_info.rb +50 -0
- data/lib/tzinfo/zoneinfo_data_source.rb +297 -0
- data/lib/tzinfo/zoneinfo_timezone_info.rb +226 -0
- data/lib/tzinfo.rb +9 -7
- data/test/tc_country.rb +65 -9
- data/test/tc_country_index_definition.rb +27 -6
- data/test/tc_country_info.rb +23 -57
- data/test/tc_country_timezone.rb +23 -3
- data/test/tc_data_source.rb +194 -0
- data/test/tc_data_timezone.rb +23 -3
- data/test/tc_data_timezone_info.rb +30 -272
- data/test/tc_info_timezone.rb +23 -3
- data/test/tc_linked_timezone.rb +23 -4
- data/test/tc_linked_timezone_info.rb +30 -3
- data/test/tc_offset_rationals.rb +23 -3
- data/test/tc_ruby_core_support.rb +117 -31
- data/test/tc_ruby_country_info.rb +102 -0
- data/test/tc_ruby_data_source.rb +145 -0
- data/test/tc_time_or_datetime.rb +222 -19
- data/test/tc_timezone.rb +187 -57
- data/test/tc_timezone_definition.rb +26 -6
- data/test/tc_timezone_index_definition.rb +23 -3
- data/test/tc_timezone_info.rb +23 -3
- data/test/tc_timezone_london.rb +89 -56
- data/test/tc_timezone_melbourne.rb +88 -62
- data/test/tc_timezone_new_york.rb +73 -47
- data/test/tc_timezone_offset_info.rb +36 -4
- data/test/tc_timezone_period.rb +60 -22
- data/test/tc_timezone_proxy.rb +24 -4
- data/test/tc_timezone_transition_info.rb +305 -28
- data/test/tc_timezone_utc.rb +24 -4
- data/test/tc_transition_data_timezone_info.rb +345 -0
- data/test/tc_zoneinfo_country_info.rb +86 -0
- data/test/tc_zoneinfo_data_source.rb +601 -0
- data/test/tc_zoneinfo_timezone_info.rb +663 -0
- data/test/test_utils.rb +116 -21
- data/test/ts_all.rb +24 -4
- data/test/ts_all_ruby.rb +27 -0
- data/test/ts_all_zoneinfo.rb +29 -0
- data/test/tzinfo-data/tzinfo/data/definitions/America/Argentina/Buenos_Aires.rb +89 -0
- data/test/tzinfo-data/tzinfo/data/definitions/America/New_York.rb +313 -0
- data/test/tzinfo-data/tzinfo/data/definitions/Australia/Melbourne.rb +216 -0
- data/test/tzinfo-data/tzinfo/data/definitions/EST.rb +19 -0
- data/test/tzinfo-data/tzinfo/data/definitions/Etc/GMT__m__1.rb +21 -0
- data/test/tzinfo-data/tzinfo/data/definitions/Etc/GMT__p__1.rb +21 -0
- data/test/tzinfo-data/tzinfo/data/definitions/Etc/UTC.rb +21 -0
- data/test/tzinfo-data/tzinfo/data/definitions/Europe/Amsterdam.rb +259 -0
- data/test/tzinfo-data/tzinfo/data/definitions/Europe/Andorra.rb +184 -0
- data/test/tzinfo-data/tzinfo/data/definitions/Europe/London.rb +319 -0
- data/test/tzinfo-data/tzinfo/data/definitions/Europe/Paris.rb +263 -0
- data/test/tzinfo-data/tzinfo/data/definitions/Europe/Prague.rb +218 -0
- data/test/tzinfo-data/tzinfo/data/definitions/UTC.rb +16 -0
- data/test/tzinfo-data/tzinfo/data/indexes/countries.rb +929 -0
- data/test/tzinfo-data/tzinfo/data/indexes/timezones.rb +599 -0
- data/test/tzinfo-data/tzinfo/data/version.rb +36 -0
- data/test/tzinfo-data/tzinfo/data.rb +23 -0
- data/test/zoneinfo/America/Argentina/Buenos_Aires +0 -0
- data/test/zoneinfo/America/New_York +0 -0
- data/test/zoneinfo/Australia/Melbourne +0 -0
- data/test/zoneinfo/EST +0 -0
- data/test/zoneinfo/Etc/UTC +0 -0
- data/test/zoneinfo/Europe/Amsterdam +0 -0
- data/test/zoneinfo/Europe/Andorra +0 -0
- data/test/zoneinfo/Europe/London +0 -0
- data/test/zoneinfo/Europe/Paris +0 -0
- data/test/zoneinfo/Europe/Prague +0 -0
- data/test/zoneinfo/Factory +0 -0
- data/test/zoneinfo/UTC +0 -0
- data/test/zoneinfo/iso3166.tab +276 -0
- data/test/zoneinfo/localtime +0 -0
- data/test/zoneinfo/posix/Europe/London +0 -0
- data/test/zoneinfo/posixrules +0 -0
- data/test/zoneinfo/right/Europe/London +0 -0
- data/test/zoneinfo/zone.tab +444 -0
- metadata +134 -716
- data/.yardopts +0 -8
- data/lib/tzinfo/definitions/Africa/Abidjan.rb +0 -18
- data/lib/tzinfo/definitions/Africa/Accra.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Addis_Ababa.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Algiers.rb +0 -55
- data/lib/tzinfo/definitions/Africa/Asmara.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Asmera.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Bamako.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Bangui.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Banjul.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Bissau.rb +0 -20
- data/lib/tzinfo/definitions/Africa/Blantyre.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Brazzaville.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Bujumbura.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Cairo.rb +0 -247
- data/lib/tzinfo/definitions/Africa/Casablanca.rb +0 -189
- data/lib/tzinfo/definitions/Africa/Ceuta.rb +0 -218
- data/lib/tzinfo/definitions/Africa/Conakry.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Dakar.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Dar_es_Salaam.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Djibouti.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Douala.rb +0 -13
- data/lib/tzinfo/definitions/Africa/El_Aaiun.rb +0 -179
- data/lib/tzinfo/definitions/Africa/Freetown.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Gaborone.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Harare.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Johannesburg.rb +0 -25
- data/lib/tzinfo/definitions/Africa/Juba.rb +0 -54
- data/lib/tzinfo/definitions/Africa/Kampala.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Khartoum.rb +0 -54
- data/lib/tzinfo/definitions/Africa/Kigali.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Kinshasa.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Lagos.rb +0 -23
- data/lib/tzinfo/definitions/Africa/Libreville.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Lome.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Luanda.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Lubumbashi.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Lusaka.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Malabo.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Maputo.rb +0 -18
- data/lib/tzinfo/definitions/Africa/Maseru.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Mbabane.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Mogadishu.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Monrovia.rb +0 -22
- data/lib/tzinfo/definitions/Africa/Nairobi.rb +0 -24
- data/lib/tzinfo/definitions/Africa/Ndjamena.rb +0 -21
- data/lib/tzinfo/definitions/Africa/Niamey.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Nouakchott.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Ouagadougou.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Porto__m__Novo.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Sao_Tome.rb +0 -23
- data/lib/tzinfo/definitions/Africa/Timbuktu.rb +0 -13
- data/lib/tzinfo/definitions/Africa/Tripoli.rb +0 -51
- data/lib/tzinfo/definitions/Africa/Tunis.rb +0 -53
- data/lib/tzinfo/definitions/Africa/Windhoek.rb +0 -74
- data/lib/tzinfo/definitions/America/Adak.rb +0 -242
- data/lib/tzinfo/definitions/America/Anchorage.rb +0 -242
- data/lib/tzinfo/definitions/America/Anguilla.rb +0 -13
- data/lib/tzinfo/definitions/America/Antigua.rb +0 -13
- data/lib/tzinfo/definitions/America/Araguaina.rb +0 -69
- data/lib/tzinfo/definitions/America/Argentina/Buenos_Aires.rb +0 -84
- data/lib/tzinfo/definitions/America/Argentina/Catamarca.rb +0 -84
- data/lib/tzinfo/definitions/America/Argentina/ComodRivadavia.rb +0 -15
- data/lib/tzinfo/definitions/America/Argentina/Cordoba.rb +0 -84
- data/lib/tzinfo/definitions/America/Argentina/Jujuy.rb +0 -82
- data/lib/tzinfo/definitions/America/Argentina/La_Rioja.rb +0 -85
- data/lib/tzinfo/definitions/America/Argentina/Mendoza.rb +0 -84
- data/lib/tzinfo/definitions/America/Argentina/Rio_Gallegos.rb +0 -84
- data/lib/tzinfo/definitions/America/Argentina/Salta.rb +0 -82
- data/lib/tzinfo/definitions/America/Argentina/San_Juan.rb +0 -85
- data/lib/tzinfo/definitions/America/Argentina/San_Luis.rb +0 -85
- data/lib/tzinfo/definitions/America/Argentina/Tucuman.rb +0 -86
- data/lib/tzinfo/definitions/America/Argentina/Ushuaia.rb +0 -84
- data/lib/tzinfo/definitions/America/Aruba.rb +0 -13
- data/lib/tzinfo/definitions/America/Asuncion.rb +0 -220
- data/lib/tzinfo/definitions/America/Atikokan.rb +0 -13
- data/lib/tzinfo/definitions/America/Atka.rb +0 -13
- data/lib/tzinfo/definitions/America/Bahia.rb +0 -79
- data/lib/tzinfo/definitions/America/Bahia_Banderas.rb +0 -84
- data/lib/tzinfo/definitions/America/Barbados.rb +0 -34
- data/lib/tzinfo/definitions/America/Belem.rb +0 -47
- data/lib/tzinfo/definitions/America/Belize.rb +0 -119
- data/lib/tzinfo/definitions/America/Blanc__m__Sablon.rb +0 -13
- data/lib/tzinfo/definitions/America/Boa_Vista.rb +0 -51
- data/lib/tzinfo/definitions/America/Bogota.rb +0 -23
- data/lib/tzinfo/definitions/America/Boise.rb +0 -245
- data/lib/tzinfo/definitions/America/Buenos_Aires.rb +0 -13
- data/lib/tzinfo/definitions/America/Cambridge_Bay.rb +0 -232
- data/lib/tzinfo/definitions/America/Campo_Grande.rb +0 -109
- data/lib/tzinfo/definitions/America/Cancun.rb +0 -62
- data/lib/tzinfo/definitions/America/Caracas.rb +0 -24
- data/lib/tzinfo/definitions/America/Catamarca.rb +0 -13
- data/lib/tzinfo/definitions/America/Cayenne.rb +0 -20
- data/lib/tzinfo/definitions/America/Cayman.rb +0 -13
- data/lib/tzinfo/definitions/America/Chicago.rb +0 -329
- data/lib/tzinfo/definitions/America/Chihuahua.rb +0 -80
- data/lib/tzinfo/definitions/America/Ciudad_Juarez.rb +0 -183
- data/lib/tzinfo/definitions/America/Coral_Harbour.rb +0 -13
- data/lib/tzinfo/definitions/America/Cordoba.rb +0 -13
- data/lib/tzinfo/definitions/America/Costa_Rica.rb +0 -29
- data/lib/tzinfo/definitions/America/Creston.rb +0 -13
- data/lib/tzinfo/definitions/America/Cuiaba.rb +0 -107
- data/lib/tzinfo/definitions/America/Curacao.rb +0 -13
- data/lib/tzinfo/definitions/America/Danmarkshavn.rb +0 -53
- data/lib/tzinfo/definitions/America/Dawson.rb +0 -117
- data/lib/tzinfo/definitions/America/Dawson_Creek.rb +0 -79
- data/lib/tzinfo/definitions/America/Denver.rb +0 -250
- data/lib/tzinfo/definitions/America/Detroit.rb +0 -234
- data/lib/tzinfo/definitions/America/Dominica.rb +0 -13
- data/lib/tzinfo/definitions/America/Edmonton.rb +0 -242
- data/lib/tzinfo/definitions/America/Eirunepe.rb +0 -52
- data/lib/tzinfo/definitions/America/El_Salvador.rb +0 -23
- data/lib/tzinfo/definitions/America/Ensenada.rb +0 -13
- data/lib/tzinfo/definitions/America/Fort_Nelson.rb +0 -164
- data/lib/tzinfo/definitions/America/Fort_Wayne.rb +0 -13
- data/lib/tzinfo/definitions/America/Fortaleza.rb +0 -57
- data/lib/tzinfo/definitions/America/Glace_Bay.rb +0 -232
- data/lib/tzinfo/definitions/America/Godthab.rb +0 -13
- data/lib/tzinfo/definitions/America/Goose_Bay.rb +0 -301
- data/lib/tzinfo/definitions/America/Grand_Turk.rb +0 -207
- data/lib/tzinfo/definitions/America/Grenada.rb +0 -13
- data/lib/tzinfo/definitions/America/Guadeloupe.rb +0 -13
- data/lib/tzinfo/definitions/America/Guatemala.rb +0 -27
- data/lib/tzinfo/definitions/America/Guayaquil.rb +0 -23
- data/lib/tzinfo/definitions/America/Guyana.rb +0 -23
- data/lib/tzinfo/definitions/America/Halifax.rb +0 -320
- data/lib/tzinfo/definitions/America/Havana.rb +0 -247
- data/lib/tzinfo/definitions/America/Hermosillo.rb +0 -35
- data/lib/tzinfo/definitions/America/Indiana/Indianapolis.rb +0 -195
- data/lib/tzinfo/definitions/America/Indiana/Knox.rb +0 -249
- data/lib/tzinfo/definitions/America/Indiana/Marengo.rb +0 -199
- data/lib/tzinfo/definitions/America/Indiana/Petersburg.rb +0 -212
- data/lib/tzinfo/definitions/America/Indiana/Tell_City.rb +0 -194
- data/lib/tzinfo/definitions/America/Indiana/Vevay.rb +0 -177
- data/lib/tzinfo/definitions/America/Indiana/Vincennes.rb +0 -197
- data/lib/tzinfo/definitions/America/Indiana/Winamac.rb +0 -203
- data/lib/tzinfo/definitions/America/Indianapolis.rb +0 -13
- data/lib/tzinfo/definitions/America/Inuvik.rb +0 -225
- data/lib/tzinfo/definitions/America/Iqaluit.rb +0 -229
- data/lib/tzinfo/definitions/America/Jamaica.rb +0 -41
- data/lib/tzinfo/definitions/America/Jujuy.rb +0 -13
- data/lib/tzinfo/definitions/America/Juneau.rb +0 -241
- data/lib/tzinfo/definitions/America/Kentucky/Louisville.rb +0 -274
- data/lib/tzinfo/definitions/America/Kentucky/Monticello.rb +0 -244
- data/lib/tzinfo/definitions/America/Knox_IN.rb +0 -13
- data/lib/tzinfo/definitions/America/Kralendijk.rb +0 -13
- data/lib/tzinfo/definitions/America/La_Paz.rb +0 -22
- data/lib/tzinfo/definitions/America/Lima.rb +0 -35
- data/lib/tzinfo/definitions/America/Los_Angeles.rb +0 -278
- data/lib/tzinfo/definitions/America/Louisville.rb +0 -13
- data/lib/tzinfo/definitions/America/Lower_Princes.rb +0 -13
- data/lib/tzinfo/definitions/America/Maceio.rb +0 -59
- data/lib/tzinfo/definitions/America/Managua.rb +0 -36
- data/lib/tzinfo/definitions/America/Manaus.rb +0 -49
- data/lib/tzinfo/definitions/America/Marigot.rb +0 -13
- data/lib/tzinfo/definitions/America/Martinique.rb +0 -23
- data/lib/tzinfo/definitions/America/Matamoros.rb +0 -177
- data/lib/tzinfo/definitions/America/Mazatlan.rb +0 -83
- data/lib/tzinfo/definitions/America/Mendoza.rb +0 -13
- data/lib/tzinfo/definitions/America/Menominee.rb +0 -236
- data/lib/tzinfo/definitions/America/Merida.rb +0 -76
- data/lib/tzinfo/definitions/America/Metlakatla.rb +0 -176
- data/lib/tzinfo/definitions/America/Mexico_City.rb +0 -89
- data/lib/tzinfo/definitions/America/Miquelon.rb +0 -195
- data/lib/tzinfo/definitions/America/Moncton.rb +0 -300
- data/lib/tzinfo/definitions/America/Monterrey.rb +0 -75
- data/lib/tzinfo/definitions/America/Montevideo.rb +0 -110
- data/lib/tzinfo/definitions/America/Montreal.rb +0 -13
- data/lib/tzinfo/definitions/America/Montserrat.rb +0 -13
- data/lib/tzinfo/definitions/America/Nassau.rb +0 -13
- data/lib/tzinfo/definitions/America/New_York.rb +0 -328
- data/lib/tzinfo/definitions/America/Nipigon.rb +0 -13
- data/lib/tzinfo/definitions/America/Nome.rb +0 -242
- data/lib/tzinfo/definitions/America/Noronha.rb +0 -57
- data/lib/tzinfo/definitions/America/North_Dakota/Beulah.rb +0 -246
- data/lib/tzinfo/definitions/America/North_Dakota/Center.rb +0 -246
- data/lib/tzinfo/definitions/America/North_Dakota/New_Salem.rb +0 -246
- data/lib/tzinfo/definitions/America/Nuuk.rb +0 -209
- data/lib/tzinfo/definitions/America/Ojinaga.rb +0 -182
- data/lib/tzinfo/definitions/America/Panama.rb +0 -20
- data/lib/tzinfo/definitions/America/Pangnirtung.rb +0 -13
- data/lib/tzinfo/definitions/America/Paramaribo.rb +0 -24
- data/lib/tzinfo/definitions/America/Phoenix.rb +0 -30
- data/lib/tzinfo/definitions/America/Port__m__au__m__Prince.rb +0 -177
- data/lib/tzinfo/definitions/America/Port_of_Spain.rb +0 -13
- data/lib/tzinfo/definitions/America/Porto_Acre.rb +0 -13
- data/lib/tzinfo/definitions/America/Porto_Velho.rb +0 -47
- data/lib/tzinfo/definitions/America/Puerto_Rico.rb +0 -23
- data/lib/tzinfo/definitions/America/Punta_Arenas.rb +0 -139
- data/lib/tzinfo/definitions/America/Rainy_River.rb +0 -13
- data/lib/tzinfo/definitions/America/Rankin_Inlet.rb +0 -224
- data/lib/tzinfo/definitions/America/Recife.rb +0 -57
- data/lib/tzinfo/definitions/America/Regina.rb +0 -74
- data/lib/tzinfo/definitions/America/Resolute.rb +0 -224
- data/lib/tzinfo/definitions/America/Rio_Branco.rb +0 -50
- data/lib/tzinfo/definitions/America/Rosario.rb +0 -13
- data/lib/tzinfo/definitions/America/Santa_Isabel.rb +0 -13
- data/lib/tzinfo/definitions/America/Santarem.rb +0 -49
- data/lib/tzinfo/definitions/America/Santiago.rb +0 -251
- data/lib/tzinfo/definitions/America/Santo_Domingo.rb +0 -38
- data/lib/tzinfo/definitions/America/Sao_Paulo.rb +0 -109
- data/lib/tzinfo/definitions/America/Scoresbysund.rb +0 -209
- data/lib/tzinfo/definitions/America/Shiprock.rb +0 -13
- data/lib/tzinfo/definitions/America/Sitka.rb +0 -240
- data/lib/tzinfo/definitions/America/St_Barthelemy.rb +0 -13
- data/lib/tzinfo/definitions/America/St_Johns.rb +0 -334
- data/lib/tzinfo/definitions/America/St_Kitts.rb +0 -13
- data/lib/tzinfo/definitions/America/St_Lucia.rb +0 -13
- data/lib/tzinfo/definitions/America/St_Thomas.rb +0 -13
- data/lib/tzinfo/definitions/America/St_Vincent.rb +0 -13
- data/lib/tzinfo/definitions/America/Swift_Current.rb +0 -44
- data/lib/tzinfo/definitions/America/Tegucigalpa.rb +0 -25
- data/lib/tzinfo/definitions/America/Thule.rb +0 -185
- data/lib/tzinfo/definitions/America/Thunder_Bay.rb +0 -13
- data/lib/tzinfo/definitions/America/Tijuana.rb +0 -242
- data/lib/tzinfo/definitions/America/Toronto.rb +0 -325
- data/lib/tzinfo/definitions/America/Tortola.rb +0 -13
- data/lib/tzinfo/definitions/America/Vancouver.rb +0 -282
- data/lib/tzinfo/definitions/America/Virgin.rb +0 -13
- data/lib/tzinfo/definitions/America/Whitehorse.rb +0 -117
- data/lib/tzinfo/definitions/America/Winnipeg.rb +0 -278
- data/lib/tzinfo/definitions/America/Yakutat.rb +0 -239
- data/lib/tzinfo/definitions/America/Yellowknife.rb +0 -13
- data/lib/tzinfo/definitions/Antarctica/Casey.rb +0 -30
- data/lib/tzinfo/definitions/Antarctica/Davis.rb +0 -25
- data/lib/tzinfo/definitions/Antarctica/DumontDUrville.rb +0 -13
- data/lib/tzinfo/definitions/Antarctica/Macquarie.rb +0 -233
- data/lib/tzinfo/definitions/Antarctica/Mawson.rb +0 -20
- data/lib/tzinfo/definitions/Antarctica/McMurdo.rb +0 -13
- data/lib/tzinfo/definitions/Antarctica/Palmer.rb +0 -102
- data/lib/tzinfo/definitions/Antarctica/Rothera.rb +0 -18
- data/lib/tzinfo/definitions/Antarctica/South_Pole.rb +0 -13
- data/lib/tzinfo/definitions/Antarctica/Syowa.rb +0 -13
- data/lib/tzinfo/definitions/Antarctica/Troll.rb +0 -157
- data/lib/tzinfo/definitions/Antarctica/Vostok.rb +0 -13
- data/lib/tzinfo/definitions/Arctic/Longyearbyen.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Aden.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Almaty.rb +0 -71
- data/lib/tzinfo/definitions/Asia/Amman.rb +0 -106
- data/lib/tzinfo/definitions/Asia/Anadyr.rb +0 -86
- data/lib/tzinfo/definitions/Asia/Aqtau.rb +0 -71
- data/lib/tzinfo/definitions/Asia/Aqtobe.rb +0 -72
- data/lib/tzinfo/definitions/Asia/Ashgabat.rb +0 -45
- data/lib/tzinfo/definitions/Asia/Ashkhabad.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Atyrau.rb +0 -72
- data/lib/tzinfo/definitions/Asia/Baghdad.rb +0 -73
- data/lib/tzinfo/definitions/Asia/Bahrain.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Baku.rb +0 -86
- data/lib/tzinfo/definitions/Asia/Bangkok.rb +0 -20
- data/lib/tzinfo/definitions/Asia/Barnaul.rb +0 -87
- data/lib/tzinfo/definitions/Asia/Beirut.rb +0 -231
- data/lib/tzinfo/definitions/Asia/Bishkek.rb +0 -72
- data/lib/tzinfo/definitions/Asia/Brunei.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Calcutta.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Chita.rb +0 -87
- data/lib/tzinfo/definitions/Asia/Choibalsan.rb +0 -72
- data/lib/tzinfo/definitions/Asia/Chongqing.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Chungking.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Colombo.rb +0 -30
- data/lib/tzinfo/definitions/Asia/Dacca.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Damascus.rb +0 -140
- data/lib/tzinfo/definitions/Asia/Dhaka.rb +0 -28
- data/lib/tzinfo/definitions/Asia/Dili.rb +0 -22
- data/lib/tzinfo/definitions/Asia/Dubai.rb +0 -18
- data/lib/tzinfo/definitions/Asia/Dushanbe.rb +0 -44
- data/lib/tzinfo/definitions/Asia/Famagusta.rb +0 -217
- data/lib/tzinfo/definitions/Asia/Gaza.rb +0 -274
- data/lib/tzinfo/definitions/Asia/Harbin.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Hebron.rb +0 -276
- data/lib/tzinfo/definitions/Asia/Ho_Chi_Minh.rb +0 -29
- data/lib/tzinfo/definitions/Asia/Hong_Kong.rb +0 -89
- data/lib/tzinfo/definitions/Asia/Hovd.rb +0 -69
- data/lib/tzinfo/definitions/Asia/Irkutsk.rb +0 -88
- data/lib/tzinfo/definitions/Asia/Istanbul.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Jakarta.rb +0 -30
- data/lib/tzinfo/definitions/Asia/Jayapura.rb +0 -22
- data/lib/tzinfo/definitions/Asia/Jerusalem.rb +0 -241
- data/lib/tzinfo/definitions/Asia/Kabul.rb +0 -20
- data/lib/tzinfo/definitions/Asia/Kamchatka.rb +0 -84
- data/lib/tzinfo/definitions/Asia/Karachi.rb +0 -32
- data/lib/tzinfo/definitions/Asia/Kashgar.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Kathmandu.rb +0 -20
- data/lib/tzinfo/definitions/Asia/Katmandu.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Khandyga.rb +0 -90
- data/lib/tzinfo/definitions/Asia/Kolkata.rb +0 -27
- data/lib/tzinfo/definitions/Asia/Krasnoyarsk.rb +0 -86
- data/lib/tzinfo/definitions/Asia/Kuala_Lumpur.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Kuching.rb +0 -38
- data/lib/tzinfo/definitions/Asia/Kuwait.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Macao.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Macau.rb +0 -91
- data/lib/tzinfo/definitions/Asia/Magadan.rb +0 -87
- data/lib/tzinfo/definitions/Asia/Makassar.rb +0 -24
- data/lib/tzinfo/definitions/Asia/Manila.rb +0 -30
- data/lib/tzinfo/definitions/Asia/Muscat.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Nicosia.rb +0 -217
- data/lib/tzinfo/definitions/Asia/Novokuznetsk.rb +0 -84
- data/lib/tzinfo/definitions/Asia/Novosibirsk.rb +0 -87
- data/lib/tzinfo/definitions/Asia/Omsk.rb +0 -86
- data/lib/tzinfo/definitions/Asia/Oral.rb +0 -73
- data/lib/tzinfo/definitions/Asia/Phnom_Penh.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Pontianak.rb +0 -30
- data/lib/tzinfo/definitions/Asia/Pyongyang.rb +0 -24
- data/lib/tzinfo/definitions/Asia/Qatar.rb +0 -20
- data/lib/tzinfo/definitions/Asia/Qostanay.rb +0 -72
- data/lib/tzinfo/definitions/Asia/Qyzylorda.rb +0 -73
- data/lib/tzinfo/definitions/Asia/Rangoon.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Riyadh.rb +0 -18
- data/lib/tzinfo/definitions/Asia/Saigon.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Sakhalin.rb +0 -87
- data/lib/tzinfo/definitions/Asia/Samarkand.rb +0 -44
- data/lib/tzinfo/definitions/Asia/Seoul.rb +0 -50
- data/lib/tzinfo/definitions/Asia/Shanghai.rb +0 -47
- data/lib/tzinfo/definitions/Asia/Singapore.rb +0 -31
- data/lib/tzinfo/definitions/Asia/Srednekolymsk.rb +0 -86
- data/lib/tzinfo/definitions/Asia/Taipei.rb +0 -60
- data/lib/tzinfo/definitions/Asia/Tashkent.rb +0 -44
- data/lib/tzinfo/definitions/Asia/Tbilisi.rb +0 -73
- data/lib/tzinfo/definitions/Asia/Tehran.rb +0 -92
- data/lib/tzinfo/definitions/Asia/Tel_Aviv.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Thimbu.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Thimphu.rb +0 -20
- data/lib/tzinfo/definitions/Asia/Tokyo.rb +0 -27
- data/lib/tzinfo/definitions/Asia/Tomsk.rb +0 -87
- data/lib/tzinfo/definitions/Asia/Ujung_Pandang.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Ulaanbaatar.rb +0 -69
- data/lib/tzinfo/definitions/Asia/Ulan_Bator.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Urumqi.rb +0 -18
- data/lib/tzinfo/definitions/Asia/Ust__m__Nera.rb +0 -89
- data/lib/tzinfo/definitions/Asia/Vientiane.rb +0 -13
- data/lib/tzinfo/definitions/Asia/Vladivostok.rb +0 -86
- data/lib/tzinfo/definitions/Asia/Yakutsk.rb +0 -86
- data/lib/tzinfo/definitions/Asia/Yangon.rb +0 -23
- data/lib/tzinfo/definitions/Asia/Yekaterinburg.rb +0 -88
- data/lib/tzinfo/definitions/Asia/Yerevan.rb +0 -82
- data/lib/tzinfo/definitions/Atlantic/Azores.rb +0 -318
- data/lib/tzinfo/definitions/Atlantic/Bermuda.rb +0 -248
- data/lib/tzinfo/definitions/Atlantic/Canary.rb +0 -209
- data/lib/tzinfo/definitions/Atlantic/Cape_Verde.rb +0 -23
- data/lib/tzinfo/definitions/Atlantic/Faeroe.rb +0 -13
- data/lib/tzinfo/definitions/Atlantic/Faroe.rb +0 -205
- data/lib/tzinfo/definitions/Atlantic/Jan_Mayen.rb +0 -13
- data/lib/tzinfo/definitions/Atlantic/Madeira.rb +0 -317
- data/lib/tzinfo/definitions/Atlantic/Reykjavik.rb +0 -13
- data/lib/tzinfo/definitions/Atlantic/South_Georgia.rb +0 -18
- data/lib/tzinfo/definitions/Atlantic/St_Helena.rb +0 -13
- data/lib/tzinfo/definitions/Atlantic/Stanley.rb +0 -91
- data/lib/tzinfo/definitions/Australia/ACT.rb +0 -13
- data/lib/tzinfo/definitions/Australia/Adelaide.rb +0 -233
- data/lib/tzinfo/definitions/Australia/Brisbane.rb +0 -35
- data/lib/tzinfo/definitions/Australia/Broken_Hill.rb +0 -235
- data/lib/tzinfo/definitions/Australia/Canberra.rb +0 -13
- data/lib/tzinfo/definitions/Australia/Currie.rb +0 -13
- data/lib/tzinfo/definitions/Australia/Darwin.rb +0 -29
- data/lib/tzinfo/definitions/Australia/Eucla.rb +0 -37
- data/lib/tzinfo/definitions/Australia/Hobart.rb +0 -243
- data/lib/tzinfo/definitions/Australia/LHI.rb +0 -13
- data/lib/tzinfo/definitions/Australia/Lindeman.rb +0 -39
- data/lib/tzinfo/definitions/Australia/Lord_Howe.rb +0 -206
- data/lib/tzinfo/definitions/Australia/Melbourne.rb +0 -231
- data/lib/tzinfo/definitions/Australia/NSW.rb +0 -13
- data/lib/tzinfo/definitions/Australia/North.rb +0 -13
- data/lib/tzinfo/definitions/Australia/Perth.rb +0 -37
- data/lib/tzinfo/definitions/Australia/Queensland.rb +0 -13
- data/lib/tzinfo/definitions/Australia/South.rb +0 -13
- data/lib/tzinfo/definitions/Australia/Sydney.rb +0 -231
- data/lib/tzinfo/definitions/Australia/Tasmania.rb +0 -13
- data/lib/tzinfo/definitions/Australia/Victoria.rb +0 -13
- data/lib/tzinfo/definitions/Australia/West.rb +0 -13
- data/lib/tzinfo/definitions/Australia/Yancowinna.rb +0 -13
- data/lib/tzinfo/definitions/Brazil/Acre.rb +0 -13
- data/lib/tzinfo/definitions/Brazil/DeNoronha.rb +0 -13
- data/lib/tzinfo/definitions/Brazil/East.rb +0 -13
- data/lib/tzinfo/definitions/Brazil/West.rb +0 -13
- data/lib/tzinfo/definitions/CET.rb +0 -223
- data/lib/tzinfo/definitions/CST6CDT.rb +0 -238
- data/lib/tzinfo/definitions/Canada/Atlantic.rb +0 -13
- data/lib/tzinfo/definitions/Canada/Central.rb +0 -13
- data/lib/tzinfo/definitions/Canada/Eastern.rb +0 -13
- data/lib/tzinfo/definitions/Canada/Mountain.rb +0 -13
- data/lib/tzinfo/definitions/Canada/Newfoundland.rb +0 -13
- data/lib/tzinfo/definitions/Canada/Pacific.rb +0 -13
- data/lib/tzinfo/definitions/Canada/Saskatchewan.rb +0 -13
- data/lib/tzinfo/definitions/Canada/Yukon.rb +0 -13
- data/lib/tzinfo/definitions/Chile/Continental.rb +0 -13
- data/lib/tzinfo/definitions/Chile/EasterIsland.rb +0 -13
- data/lib/tzinfo/definitions/Cuba.rb +0 -11
- data/lib/tzinfo/definitions/EET.rb +0 -209
- data/lib/tzinfo/definitions/EST.rb +0 -14
- data/lib/tzinfo/definitions/EST5EDT.rb +0 -238
- data/lib/tzinfo/definitions/Egypt.rb +0 -11
- data/lib/tzinfo/definitions/Eire.rb +0 -11
- data/lib/tzinfo/definitions/Etc/GMT.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT0.rb +0 -13
- data/lib/tzinfo/definitions/Etc/GMT__m__0.rb +0 -13
- data/lib/tzinfo/definitions/Etc/GMT__m__1.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__m__10.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__m__11.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__m__12.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__m__13.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__m__14.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__m__2.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__m__3.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__m__4.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__m__5.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__m__6.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__m__7.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__m__8.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__m__9.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__p__0.rb +0 -13
- data/lib/tzinfo/definitions/Etc/GMT__p__1.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__p__10.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__p__11.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__p__12.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__p__2.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__p__3.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__p__4.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__p__5.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__p__6.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__p__7.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__p__8.rb +0 -16
- data/lib/tzinfo/definitions/Etc/GMT__p__9.rb +0 -16
- data/lib/tzinfo/definitions/Etc/Greenwich.rb +0 -13
- data/lib/tzinfo/definitions/Etc/UCT.rb +0 -13
- data/lib/tzinfo/definitions/Etc/UTC.rb +0 -16
- data/lib/tzinfo/definitions/Etc/Universal.rb +0 -13
- data/lib/tzinfo/definitions/Etc/Zulu.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Amsterdam.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Andorra.rb +0 -199
- data/lib/tzinfo/definitions/Europe/Astrakhan.rb +0 -84
- data/lib/tzinfo/definitions/Europe/Athens.rb +0 -231
- data/lib/tzinfo/definitions/Europe/Belfast.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Belgrade.rb +0 -209
- data/lib/tzinfo/definitions/Europe/Berlin.rb +0 -234
- data/lib/tzinfo/definitions/Europe/Bratislava.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Brussels.rb +0 -278
- data/lib/tzinfo/definitions/Europe/Bucharest.rb +0 -227
- data/lib/tzinfo/definitions/Europe/Budapest.rb +0 -241
- data/lib/tzinfo/definitions/Europe/Busingen.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Chisinau.rb +0 -237
- data/lib/tzinfo/definitions/Europe/Copenhagen.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Dublin.rb +0 -322
- data/lib/tzinfo/definitions/Europe/Gibraltar.rb +0 -291
- data/lib/tzinfo/definitions/Europe/Guernsey.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Helsinki.rb +0 -209
- data/lib/tzinfo/definitions/Europe/Isle_of_Man.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Istanbul.rb +0 -136
- data/lib/tzinfo/definitions/Europe/Jersey.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Kaliningrad.rb +0 -103
- data/lib/tzinfo/definitions/Europe/Kiev.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Kirov.rb +0 -85
- data/lib/tzinfo/definitions/Europe/Kyiv.rb +0 -216
- data/lib/tzinfo/definitions/Europe/Lisbon.rb +0 -316
- data/lib/tzinfo/definitions/Europe/Ljubljana.rb +0 -13
- data/lib/tzinfo/definitions/Europe/London.rb +0 -334
- data/lib/tzinfo/definitions/Europe/Luxembourg.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Madrid.rb +0 -255
- data/lib/tzinfo/definitions/Europe/Malta.rb +0 -259
- data/lib/tzinfo/definitions/Europe/Mariehamn.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Minsk.rb +0 -92
- data/lib/tzinfo/definitions/Europe/Monaco.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Moscow.rb +0 -104
- data/lib/tzinfo/definitions/Europe/Nicosia.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Oslo.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Paris.rb +0 -278
- data/lib/tzinfo/definitions/Europe/Podgorica.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Prague.rb +0 -236
- data/lib/tzinfo/definitions/Europe/Riga.rb +0 -222
- data/lib/tzinfo/definitions/Europe/Rome.rb +0 -261
- data/lib/tzinfo/definitions/Europe/Samara.rb +0 -85
- data/lib/tzinfo/definitions/Europe/San_Marino.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Sarajevo.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Saratov.rb +0 -84
- data/lib/tzinfo/definitions/Europe/Simferopol.rb +0 -99
- data/lib/tzinfo/definitions/Europe/Skopje.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Sofia.rb +0 -219
- data/lib/tzinfo/definitions/Europe/Stockholm.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Tallinn.rb +0 -218
- data/lib/tzinfo/definitions/Europe/Tirane.rb +0 -223
- data/lib/tzinfo/definitions/Europe/Tiraspol.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Ulyanovsk.rb +0 -88
- data/lib/tzinfo/definitions/Europe/Uzhgorod.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Vaduz.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Vatican.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Vienna.rb +0 -229
- data/lib/tzinfo/definitions/Europe/Vilnius.rb +0 -216
- data/lib/tzinfo/definitions/Europe/Volgograd.rb +0 -87
- data/lib/tzinfo/definitions/Europe/Warsaw.rb +0 -258
- data/lib/tzinfo/definitions/Europe/Zagreb.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Zaporozhye.rb +0 -13
- data/lib/tzinfo/definitions/Europe/Zurich.rb +0 -211
- data/lib/tzinfo/definitions/Factory.rb +0 -14
- data/lib/tzinfo/definitions/GB.rb +0 -11
- data/lib/tzinfo/definitions/GB__m__Eire.rb +0 -11
- data/lib/tzinfo/definitions/GMT.rb +0 -11
- data/lib/tzinfo/definitions/GMT0.rb +0 -11
- data/lib/tzinfo/definitions/GMT__m__0.rb +0 -11
- data/lib/tzinfo/definitions/GMT__p__0.rb +0 -11
- data/lib/tzinfo/definitions/Greenwich.rb +0 -11
- data/lib/tzinfo/definitions/HST.rb +0 -14
- data/lib/tzinfo/definitions/Hongkong.rb +0 -11
- data/lib/tzinfo/definitions/Iceland.rb +0 -11
- data/lib/tzinfo/definitions/Indian/Antananarivo.rb +0 -13
- data/lib/tzinfo/definitions/Indian/Chagos.rb +0 -20
- data/lib/tzinfo/definitions/Indian/Christmas.rb +0 -13
- data/lib/tzinfo/definitions/Indian/Cocos.rb +0 -13
- data/lib/tzinfo/definitions/Indian/Comoro.rb +0 -13
- data/lib/tzinfo/definitions/Indian/Kerguelen.rb +0 -13
- data/lib/tzinfo/definitions/Indian/Mahe.rb +0 -13
- data/lib/tzinfo/definitions/Indian/Maldives.rb +0 -20
- data/lib/tzinfo/definitions/Indian/Mauritius.rb +0 -23
- data/lib/tzinfo/definitions/Indian/Mayotte.rb +0 -13
- data/lib/tzinfo/definitions/Indian/Reunion.rb +0 -13
- data/lib/tzinfo/definitions/Iran.rb +0 -11
- data/lib/tzinfo/definitions/Israel.rb +0 -11
- data/lib/tzinfo/definitions/Jamaica.rb +0 -11
- data/lib/tzinfo/definitions/Japan.rb +0 -11
- data/lib/tzinfo/definitions/Kwajalein.rb +0 -11
- data/lib/tzinfo/definitions/Libya.rb +0 -11
- data/lib/tzinfo/definitions/MET.rb +0 -223
- data/lib/tzinfo/definitions/MST.rb +0 -14
- data/lib/tzinfo/definitions/MST7MDT.rb +0 -238
- data/lib/tzinfo/definitions/Mexico/BajaNorte.rb +0 -13
- data/lib/tzinfo/definitions/Mexico/BajaSur.rb +0 -13
- data/lib/tzinfo/definitions/Mexico/General.rb +0 -13
- data/lib/tzinfo/definitions/NZ.rb +0 -11
- data/lib/tzinfo/definitions/NZ__m__CHAT.rb +0 -11
- data/lib/tzinfo/definitions/Navajo.rb +0 -11
- data/lib/tzinfo/definitions/PRC.rb +0 -11
- data/lib/tzinfo/definitions/PST8PDT.rb +0 -238
- data/lib/tzinfo/definitions/Pacific/Apia.rb +0 -48
- data/lib/tzinfo/definitions/Pacific/Auckland.rb +0 -248
- data/lib/tzinfo/definitions/Pacific/Bougainville.rb +0 -25
- data/lib/tzinfo/definitions/Pacific/Chatham.rb +0 -219
- data/lib/tzinfo/definitions/Pacific/Chuuk.rb +0 -13
- data/lib/tzinfo/definitions/Pacific/Easter.rb +0 -231
- data/lib/tzinfo/definitions/Pacific/Efate.rb +0 -41
- data/lib/tzinfo/definitions/Pacific/Enderbury.rb +0 -13
- data/lib/tzinfo/definitions/Pacific/Fakaofo.rb +0 -20
- data/lib/tzinfo/definitions/Pacific/Fiji.rb +0 -47
- data/lib/tzinfo/definitions/Pacific/Funafuti.rb +0 -13
- data/lib/tzinfo/definitions/Pacific/Galapagos.rb +0 -23
- data/lib/tzinfo/definitions/Pacific/Gambier.rb +0 -18
- data/lib/tzinfo/definitions/Pacific/Guadalcanal.rb +0 -18
- data/lib/tzinfo/definitions/Pacific/Guam.rb +0 -42
- data/lib/tzinfo/definitions/Pacific/Honolulu.rb +0 -28
- data/lib/tzinfo/definitions/Pacific/Johnston.rb +0 -13
- data/lib/tzinfo/definitions/Pacific/Kanton.rb +0 -22
- data/lib/tzinfo/definitions/Pacific/Kiritimati.rb +0 -22
- data/lib/tzinfo/definitions/Pacific/Kosrae.rb +0 -30
- data/lib/tzinfo/definitions/Pacific/Kwajalein.rb +0 -27
- data/lib/tzinfo/definitions/Pacific/Majuro.rb +0 -13
- data/lib/tzinfo/definitions/Pacific/Marquesas.rb +0 -18
- data/lib/tzinfo/definitions/Pacific/Midway.rb +0 -13
- data/lib/tzinfo/definitions/Pacific/Nauru.rb +0 -23
- data/lib/tzinfo/definitions/Pacific/Niue.rb +0 -20
- data/lib/tzinfo/definitions/Pacific/Norfolk.rb +0 -134
- data/lib/tzinfo/definitions/Pacific/Noumea.rb +0 -25
- data/lib/tzinfo/definitions/Pacific/Pago_Pago.rb +0 -20
- data/lib/tzinfo/definitions/Pacific/Palau.rb +0 -20
- data/lib/tzinfo/definitions/Pacific/Pitcairn.rb +0 -20
- data/lib/tzinfo/definitions/Pacific/Pohnpei.rb +0 -13
- data/lib/tzinfo/definitions/Pacific/Ponape.rb +0 -13
- data/lib/tzinfo/definitions/Pacific/Port_Moresby.rb +0 -20
- data/lib/tzinfo/definitions/Pacific/Rarotonga.rb +0 -48
- data/lib/tzinfo/definitions/Pacific/Saipan.rb +0 -13
- data/lib/tzinfo/definitions/Pacific/Samoa.rb +0 -13
- data/lib/tzinfo/definitions/Pacific/Tahiti.rb +0 -18
- data/lib/tzinfo/definitions/Pacific/Tarawa.rb +0 -18
- data/lib/tzinfo/definitions/Pacific/Tongatapu.rb +0 -29
- data/lib/tzinfo/definitions/Pacific/Truk.rb +0 -13
- data/lib/tzinfo/definitions/Pacific/Wake.rb +0 -13
- data/lib/tzinfo/definitions/Pacific/Wallis.rb +0 -13
- data/lib/tzinfo/definitions/Pacific/Yap.rb +0 -13
- data/lib/tzinfo/definitions/Poland.rb +0 -11
- data/lib/tzinfo/definitions/Portugal.rb +0 -11
- data/lib/tzinfo/definitions/ROC.rb +0 -11
- data/lib/tzinfo/definitions/ROK.rb +0 -11
- data/lib/tzinfo/definitions/Singapore.rb +0 -11
- data/lib/tzinfo/definitions/Turkey.rb +0 -11
- data/lib/tzinfo/definitions/UCT.rb +0 -11
- data/lib/tzinfo/definitions/US/Alaska.rb +0 -13
- data/lib/tzinfo/definitions/US/Aleutian.rb +0 -13
- data/lib/tzinfo/definitions/US/Arizona.rb +0 -13
- data/lib/tzinfo/definitions/US/Central.rb +0 -13
- data/lib/tzinfo/definitions/US/East__m__Indiana.rb +0 -13
- data/lib/tzinfo/definitions/US/Eastern.rb +0 -13
- data/lib/tzinfo/definitions/US/Hawaii.rb +0 -13
- data/lib/tzinfo/definitions/US/Indiana__m__Starke.rb +0 -13
- data/lib/tzinfo/definitions/US/Michigan.rb +0 -13
- data/lib/tzinfo/definitions/US/Mountain.rb +0 -13
- data/lib/tzinfo/definitions/US/Pacific.rb +0 -13
- data/lib/tzinfo/definitions/US/Samoa.rb +0 -13
- data/lib/tzinfo/definitions/UTC.rb +0 -11
- data/lib/tzinfo/definitions/Universal.rb +0 -11
- data/lib/tzinfo/definitions/WET.rb +0 -209
- data/lib/tzinfo/definitions/W__m__SU.rb +0 -11
- data/lib/tzinfo/definitions/Zulu.rb +0 -11
- data/lib/tzinfo/indexes/countries.rb +0 -924
- data/lib/tzinfo/indexes/timezones.rb +0 -607
- data/lib/tzinfo/tzdataparser.rb +0 -1287
- data/test/in_load_path/payload.rb +0 -1
- data/tzinfo.gemspec +0 -19
@@ -0,0 +1,663 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
#--
|
4
|
+
# Copyright (c) 2012-2013 Philip Ross
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in all
|
14
|
+
# copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
#++
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'test_utils')
|
28
|
+
require 'tempfile'
|
29
|
+
|
30
|
+
include TZInfo
|
31
|
+
|
32
|
+
class TCZoneinfoTimezoneInfo < Test::Unit::TestCase
|
33
|
+
|
34
|
+
def assert_period(abbreviation, utc_offset, std_offset, dst, start_at, end_at, info)
|
35
|
+
if start_at
|
36
|
+
period = info.period_for_utc(start_at)
|
37
|
+
elsif end_at
|
38
|
+
period = info.period_for_utc(end_at - 1)
|
39
|
+
else
|
40
|
+
# no transitions, pick the epoch
|
41
|
+
period = info.period_for_utc(Time.utc(1970, 1, 1))
|
42
|
+
end
|
43
|
+
|
44
|
+
assert_equal(abbreviation, period.abbreviation)
|
45
|
+
assert_equal(utc_offset, period.utc_offset)
|
46
|
+
assert_equal(std_offset, period.std_offset)
|
47
|
+
assert_equal(dst, period.dst?)
|
48
|
+
|
49
|
+
if start_at
|
50
|
+
assert_not_nil(period.utc_start_time)
|
51
|
+
assert_equal(start_at, period.utc_start_time)
|
52
|
+
else
|
53
|
+
assert_nil(period.utc_start_time)
|
54
|
+
end
|
55
|
+
|
56
|
+
if end_at
|
57
|
+
assert_not_nil(period.utc_end_time)
|
58
|
+
assert_equal(end_at, period.utc_end_time)
|
59
|
+
else
|
60
|
+
assert_nil(period.utc_end_time)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def convert_times_to_i(items, key = :at)
|
65
|
+
items.each do |item|
|
66
|
+
if item[key].kind_of?(Time)
|
67
|
+
item[key] = item[key].utc.to_i
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def select_with_32bit_values(items, key = :at)
|
73
|
+
items.select do |item|
|
74
|
+
i = item[key]
|
75
|
+
i >= -2147483648 && i <= 2147483647
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def pack_int64_network_order(values)
|
80
|
+
values.collect {|value| [value >> 32, value & 0xFFFFFFFF]}.flatten.pack('NN' * values.length)
|
81
|
+
end
|
82
|
+
|
83
|
+
def pack_int64_signed_network_order(values)
|
84
|
+
# Convert to the equivalent 64-bit unsigned integer with the same bit representation
|
85
|
+
pack_int64_network_order(values.collect {|value| value < 0 ? value + 0x10000000000000000 : value})
|
86
|
+
end
|
87
|
+
|
88
|
+
def write_tzif(format, offsets, transitions, leaps = [], options = {})
|
89
|
+
|
90
|
+
# Options for testing malformed zoneinfo files.
|
91
|
+
magic = options[:magic]
|
92
|
+
abbrev_separator = options[:abbrev_separator] || "\0"
|
93
|
+
abbrev_offset_base = options[:abbrev_offset_base] || 0
|
94
|
+
|
95
|
+
unless magic
|
96
|
+
if format == 1
|
97
|
+
magic = "TZif\0"
|
98
|
+
elsif format == 2
|
99
|
+
magic = 'TZif2'
|
100
|
+
else
|
101
|
+
raise ArgumentError, 'Invalid format specified'
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
convert_times_to_i(transitions)
|
106
|
+
convert_times_to_i(leaps)
|
107
|
+
|
108
|
+
abbrevs = offsets.collect {|o| o[:abbrev]}.uniq
|
109
|
+
|
110
|
+
if abbrevs.length > 0
|
111
|
+
abbrevs = abbrevs.collect {|a| a.encode('UTF-8')} if abbrevs.first.respond_to?(:encode)
|
112
|
+
|
113
|
+
if abbrevs.first.respond_to?(:bytesize)
|
114
|
+
abbrevs_length = abbrevs.inject(0) {|sum, a| sum + a.bytesize + abbrev_separator.bytesize}
|
115
|
+
else
|
116
|
+
abbrevs_length = abbrevs.inject(0) {|sum, a| sum + a.length + abbrev_separator.length}
|
117
|
+
end
|
118
|
+
else
|
119
|
+
abbrevs_length = 0
|
120
|
+
end
|
121
|
+
|
122
|
+
b32_transitions = select_with_32bit_values(transitions)
|
123
|
+
b32_leaps = select_with_32bit_values(leaps)
|
124
|
+
|
125
|
+
Tempfile.open('tzinfo-test-zone') do |file|
|
126
|
+
file.binmode
|
127
|
+
|
128
|
+
file.write(
|
129
|
+
[magic, offsets.length, offsets.length, leaps.length,
|
130
|
+
b32_transitions.length, offsets.length, abbrevs_length].pack('a5 x15 NNNNNN'))
|
131
|
+
|
132
|
+
unless b32_transitions.empty?
|
133
|
+
file.write(b32_transitions.collect {|t| t[:at]}.pack('N' * b32_transitions.length))
|
134
|
+
file.write(b32_transitions.collect {|t| t[:offset_index]}.pack('C' * b32_transitions.length))
|
135
|
+
end
|
136
|
+
|
137
|
+
offsets.each do |offset|
|
138
|
+
index = abbrevs.index(offset[:abbrev])
|
139
|
+
abbrev_offset = abbrev_offset_base
|
140
|
+
0.upto(index - 1) {|i| abbrev_offset += abbrevs[i].length + 1}
|
141
|
+
|
142
|
+
file.write([offset[:gmtoff], offset[:isdst] ? 1 : 0, abbrev_offset].pack('NCC'))
|
143
|
+
end
|
144
|
+
|
145
|
+
abbrevs.each do |a|
|
146
|
+
file.write(a)
|
147
|
+
file.write(abbrev_separator)
|
148
|
+
end
|
149
|
+
|
150
|
+
b32_leaps.each do |leap|
|
151
|
+
file.write([leap[:at], leap[:seconds]].pack('NN'))
|
152
|
+
end
|
153
|
+
|
154
|
+
unless offsets.empty?
|
155
|
+
file.write("\0" * offsets.length * 2)
|
156
|
+
end
|
157
|
+
|
158
|
+
if format == 2
|
159
|
+
file.write(
|
160
|
+
[magic, offsets.length, offsets.length, leaps.length,
|
161
|
+
transitions.length, offsets.length, abbrevs_length].pack('a5 x15 NNNNNN'))
|
162
|
+
|
163
|
+
unless transitions.empty?
|
164
|
+
file.write(pack_int64_signed_network_order(transitions.collect {|t| t[:at]}))
|
165
|
+
file.write(transitions.collect {|t| t[:offset_index]}.pack('C' * transitions.length))
|
166
|
+
end
|
167
|
+
|
168
|
+
offsets.each do |offset|
|
169
|
+
index = abbrevs.index(offset[:abbrev])
|
170
|
+
abbrev_offset = abbrev_offset_base
|
171
|
+
0.upto(index - 1) {|i| abbrev_offset += abbrevs[i].length + 1}
|
172
|
+
|
173
|
+
file.write([offset[:gmtoff], offset[:isdst] ? 1 : 0, abbrev_offset].pack('NCC'))
|
174
|
+
end
|
175
|
+
|
176
|
+
abbrevs.each do |a|
|
177
|
+
file.write(a)
|
178
|
+
file.write(abbrev_separator)
|
179
|
+
end
|
180
|
+
|
181
|
+
leaps.each do |leap|
|
182
|
+
file.write(pack_int64_signed_network_order([leap[:at]]))
|
183
|
+
file.write([leap[:seconds]].pack('N'))
|
184
|
+
end
|
185
|
+
|
186
|
+
unless offsets.empty?
|
187
|
+
file.write("\0" * offsets.length * 2)
|
188
|
+
end
|
189
|
+
|
190
|
+
# Empty POSIX timezone string
|
191
|
+
file.write("\n\n")
|
192
|
+
end
|
193
|
+
|
194
|
+
file.flush
|
195
|
+
|
196
|
+
yield file.path, format
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
def tzif_test(offsets, transitions, leaps = [], options = {}, &block)
|
201
|
+
write_tzif(1, offsets, transitions, leaps, options, &block)
|
202
|
+
write_tzif(2, offsets, transitions, leaps, options, &block)
|
203
|
+
end
|
204
|
+
|
205
|
+
def test_load
|
206
|
+
offsets = [
|
207
|
+
{:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
|
208
|
+
{:gmtoff => 3600, :isdst => false, :abbrev => 'XST'},
|
209
|
+
{:gmtoff => 7200, :isdst => true, :abbrev => 'XDT'},
|
210
|
+
{:gmtoff => 0, :isdst => false, :abbrev => 'XNST'}]
|
211
|
+
|
212
|
+
transitions = [
|
213
|
+
{:at => Time.utc(1971, 1, 2), :offset_index => 1},
|
214
|
+
{:at => Time.utc(1980, 4, 22), :offset_index => 2},
|
215
|
+
{:at => Time.utc(1980, 10, 21), :offset_index => 1},
|
216
|
+
{:at => Time.utc(2000, 12, 31), :offset_index => 3}]
|
217
|
+
|
218
|
+
tzif_test(offsets, transitions) do |path, format|
|
219
|
+
info = ZoneinfoTimezoneInfo.new('Zone/One', path)
|
220
|
+
assert_equal('Zone/One', info.identifier)
|
221
|
+
|
222
|
+
assert_period(:LMT, 3542, 0, false, nil, Time.utc(1971, 1, 2), info)
|
223
|
+
assert_period(:XST, 3600, 0, false, Time.utc(1971, 1, 2), Time.utc(1980, 4, 22), info)
|
224
|
+
assert_period(:XDT, 3600, 3600, true, Time.utc(1980, 4, 22), Time.utc(1980, 10, 21), info)
|
225
|
+
assert_period(:XST, 3600, 0, false, Time.utc(1980, 10, 21), Time.utc(2000, 12, 31), info)
|
226
|
+
assert_period(:XNST, 0, 0, false, Time.utc(2000, 12, 31), nil, info)
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
def test_load_negative_utc_offset
|
231
|
+
offsets = [
|
232
|
+
{:gmtoff => -12492, :isdst => false, :abbrev => 'LMT'},
|
233
|
+
{:gmtoff => -12000, :isdst => false, :abbrev => 'XST'},
|
234
|
+
{:gmtoff => -8400, :isdst => true, :abbrev => 'XDT'},
|
235
|
+
{:gmtoff => -8400, :isdst => false, :abbrev => 'XNST'}]
|
236
|
+
|
237
|
+
transitions = [
|
238
|
+
{:at => Time.utc(1971, 7, 9, 3, 0, 0), :offset_index => 1},
|
239
|
+
{:at => Time.utc(1972, 10, 12, 3, 0, 0), :offset_index => 2},
|
240
|
+
{:at => Time.utc(1973, 4, 29, 3, 0, 0), :offset_index => 1},
|
241
|
+
{:at => Time.utc(1992, 4, 1, 4, 30, 0), :offset_index => 3}]
|
242
|
+
|
243
|
+
tzif_test(offsets, transitions) do |path, format|
|
244
|
+
info = ZoneinfoTimezoneInfo.new('Zone/One', path)
|
245
|
+
assert_equal('Zone/One', info.identifier)
|
246
|
+
|
247
|
+
assert_period(:LMT, -12492, 0, false, nil, Time.utc(1971, 7, 9, 3, 0, 0), info)
|
248
|
+
assert_period(:XST, -12000, 0, false, Time.utc(1971, 7, 9, 3, 0, 0), Time.utc(1972, 10, 12, 3, 0, 0), info)
|
249
|
+
assert_period(:XDT, -12000, 3600, true, Time.utc(1972, 10, 12, 3, 0, 0), Time.utc(1973, 4, 29, 3, 0, 0), info)
|
250
|
+
assert_period(:XST, -12000, 0, false, Time.utc(1973, 4, 29, 3, 0, 0), Time.utc(1992, 4, 1, 4, 30, 0), info)
|
251
|
+
assert_period(:XNST, -8400, 0, false, Time.utc(1992, 4, 1, 4, 30, 0), nil, info)
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
def test_load_dst_first
|
256
|
+
offsets = [
|
257
|
+
{:gmtoff => 7200, :isdst => true, :abbrev => 'XDT'},
|
258
|
+
{:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
|
259
|
+
{:gmtoff => 3600, :isdst => false, :abbrev => 'XST'},
|
260
|
+
{:gmtoff => 0, :isdst => false, :abbrev => 'XNST'}]
|
261
|
+
|
262
|
+
transitions = [
|
263
|
+
{:at => Time.utc(1979, 1, 2), :offset_index => 2},
|
264
|
+
{:at => Time.utc(1980, 4, 22), :offset_index => 0},
|
265
|
+
{:at => Time.utc(1980, 10, 21), :offset_index => 2},
|
266
|
+
{:at => Time.utc(2000, 12, 31), :offset_index => 3}]
|
267
|
+
|
268
|
+
tzif_test(offsets, transitions) do |path, format|
|
269
|
+
info = ZoneinfoTimezoneInfo.new('Zone/Two', path)
|
270
|
+
assert_equal('Zone/Two', info.identifier)
|
271
|
+
|
272
|
+
assert_period(:LMT, 3542, 0, false, nil, Time.utc(1979, 1, 2), info)
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
def test_load_no_transitions
|
277
|
+
offsets = [{:gmtoff => -12094, :isdst => false, :abbrev => 'LT'}]
|
278
|
+
|
279
|
+
tzif_test(offsets, []) do |path, format|
|
280
|
+
info = ZoneinfoTimezoneInfo.new('Zone/three', path)
|
281
|
+
assert_equal('Zone/three', info.identifier)
|
282
|
+
|
283
|
+
assert_period(:LT, -12094, 0, false, nil, nil, info)
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
def test_load_invalid_offset_index
|
288
|
+
offsets = [{:gmtoff => -0, :isdst => false, :abbrev => 'LMT'}]
|
289
|
+
transitions = [{:at => Time.utc(2000, 12, 31), :offset_index => 2}]
|
290
|
+
|
291
|
+
tzif_test(offsets, transitions) do |path, format|
|
292
|
+
assert_raises(InvalidZoneinfoFile) do
|
293
|
+
ZoneinfoTimezoneInfo.new('Zone', path)
|
294
|
+
end
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
def test_load_with_leap_seconds
|
299
|
+
offsets = [{:gmtoff => -0, :isdst => false, :abbrev => 'LMT'}]
|
300
|
+
leaps = [{:at => Time.utc(1972,6,30,23,59,60), :seconds => 1}]
|
301
|
+
|
302
|
+
tzif_test(offsets, [], leaps) do |path, format|
|
303
|
+
assert_raises(InvalidZoneinfoFile) do
|
304
|
+
ZoneinfoTimezoneInfo.new('Zone', path)
|
305
|
+
end
|
306
|
+
end
|
307
|
+
end
|
308
|
+
|
309
|
+
def test_load_invalid_magic
|
310
|
+
['TZif3', 'tzif2', '12345'].each do |magic|
|
311
|
+
offsets = [{:gmtoff => -12094, :isdst => false, :abbrev => 'LT'}]
|
312
|
+
|
313
|
+
tzif_test(offsets, [], [], :magic => magic) do |path, format|
|
314
|
+
assert_raises(InvalidZoneinfoFile) do
|
315
|
+
ZoneinfoTimezoneInfo.new('Zone2', path)
|
316
|
+
end
|
317
|
+
end
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
def test_load_invalid_format
|
322
|
+
Tempfile.open('tzinfo-test-zone') do |file|
|
323
|
+
file.write('Invalid')
|
324
|
+
file.flush
|
325
|
+
|
326
|
+
assert_raises(InvalidZoneinfoFile) do
|
327
|
+
ZoneinfoTimezoneInfo.new('Zone3', file.path)
|
328
|
+
end
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
def test_load_missing_abbrev_null_termination
|
333
|
+
offsets = [
|
334
|
+
{:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
|
335
|
+
{:gmtoff => 3600, :isdst => false, :abbrev => 'XST'}]
|
336
|
+
|
337
|
+
transitions = [
|
338
|
+
{:at => Time.utc(2000, 1, 1), :offset_index => 1}]
|
339
|
+
|
340
|
+
tzif_test(offsets, transitions, [], :abbrev_separator => '^') do |path, format|
|
341
|
+
assert_raises(InvalidZoneinfoFile) do
|
342
|
+
ZoneinfoTimezoneInfo.new('Zone', path)
|
343
|
+
end
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
347
|
+
def test_load_out_of_range_abbrev_offsets
|
348
|
+
offsets = [
|
349
|
+
{:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
|
350
|
+
{:gmtoff => 3600, :isdst => false, :abbrev => 'XST'}]
|
351
|
+
|
352
|
+
transitions = [
|
353
|
+
{:at => Time.utc(2000, 1, 1), :offset_index => 1}]
|
354
|
+
|
355
|
+
tzif_test(offsets, transitions, [], :abbrev_offset_base => 8) do |path, format|
|
356
|
+
assert_raises(InvalidZoneinfoFile) do
|
357
|
+
ZoneinfoTimezoneInfo.new('Zone', path)
|
358
|
+
end
|
359
|
+
end
|
360
|
+
end
|
361
|
+
|
362
|
+
def test_load_before_epoch
|
363
|
+
# Some platforms don't support negative numbers for times before the epoch.
|
364
|
+
# Check that they are returned when supported and skipped when not.
|
365
|
+
|
366
|
+
begin
|
367
|
+
Time.at(-1)
|
368
|
+
Time.at(-2147483648)
|
369
|
+
supports_negative = true
|
370
|
+
rescue ArgumentError
|
371
|
+
supports_negative = false
|
372
|
+
end
|
373
|
+
|
374
|
+
offsets = [
|
375
|
+
{:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
|
376
|
+
{:gmtoff => 3600, :isdst => false, :abbrev => 'XST'},
|
377
|
+
{:gmtoff => 7200, :isdst => true, :abbrev => 'XDT'},
|
378
|
+
{:gmtoff => 0, :isdst => false, :abbrev => 'XNST'}]
|
379
|
+
|
380
|
+
transitions = [
|
381
|
+
{:at => -694224000, :offset_index => 1}, # Time.utc(1948, 1, 2)
|
382
|
+
{:at => -21945600, :offset_index => 2}, # Time.utc(1969, 4, 22)
|
383
|
+
{:at => Time.utc(1970, 10, 21), :offset_index => 1},
|
384
|
+
{:at => Time.utc(2000, 12, 31), :offset_index => 3}]
|
385
|
+
|
386
|
+
tzif_test(offsets, transitions) do |path, format|
|
387
|
+
info = ZoneinfoTimezoneInfo.new('Zone/Negative', path)
|
388
|
+
assert_equal('Zone/Negative', info.identifier)
|
389
|
+
|
390
|
+
if supports_negative
|
391
|
+
assert_period(:LMT, 3542, 0, false, nil, Time.utc(1948, 1, 2), info)
|
392
|
+
assert_period(:XST, 3600, 0, false, Time.utc(1948, 1, 2), Time.utc(1969, 4, 22), info)
|
393
|
+
assert_period(:XDT, 3600, 3600, true, Time.utc(1969, 4, 22), Time.utc(1970, 10, 21), info)
|
394
|
+
else
|
395
|
+
assert_period(:LMT, 3542, 0, false, nil, Time.utc(1970, 10, 21), info)
|
396
|
+
end
|
397
|
+
|
398
|
+
assert_period(:XST, 3600, 0, false, Time.utc(1970, 10, 21), Time.utc(2000, 12, 31), info)
|
399
|
+
assert_period(:XNST, 0, 0, false, Time.utc(2000, 12, 31), nil, info)
|
400
|
+
end
|
401
|
+
end
|
402
|
+
|
403
|
+
def test_load_64bit
|
404
|
+
# Some platforms support 64-bit Times, others only 32-bit. The TZif version
|
405
|
+
# 2 format contains both 32-bit and 64-bit times.
|
406
|
+
|
407
|
+
# Where 64-bit is supported and a TZif 2 file is provided, the 64-bit times
|
408
|
+
# should be used, otherwise the 32-bit information should be used.
|
409
|
+
|
410
|
+
begin
|
411
|
+
Time.at(-2147483649)
|
412
|
+
Time.at(2147483648)
|
413
|
+
supports_64bit = true
|
414
|
+
rescue RangeError
|
415
|
+
supports_64bit = false
|
416
|
+
end
|
417
|
+
|
418
|
+
offsets = [
|
419
|
+
{:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
|
420
|
+
{:gmtoff => 3600, :isdst => false, :abbrev => 'XST'},
|
421
|
+
{:gmtoff => 7200, :isdst => true, :abbrev => 'XDT'},
|
422
|
+
{:gmtoff => 0, :isdst => false, :abbrev => 'XNST'}]
|
423
|
+
|
424
|
+
transitions = [
|
425
|
+
{:at => -3786739200, :offset_index => 1}, # Time.utc(1850, 1, 2)
|
426
|
+
{:at => Time.utc(2003, 4, 22), :offset_index => 2},
|
427
|
+
{:at => Time.utc(2003, 10, 21), :offset_index => 1},
|
428
|
+
{:at => 2240524800, :offset_index => 3}] # Time.utc(2040, 12, 31)
|
429
|
+
|
430
|
+
tzif_test(offsets, transitions) do |path, format|
|
431
|
+
info = ZoneinfoTimezoneInfo.new('Zone/SixtyFour', path)
|
432
|
+
assert_equal('Zone/SixtyFour', info.identifier)
|
433
|
+
|
434
|
+
if supports_64bit && format == 2
|
435
|
+
assert_period(:LMT, 3542, 0, false, nil, Time.utc(1850, 1, 2), info)
|
436
|
+
assert_period(:XST, 3600, 0, false, Time.utc(1850, 1, 2), Time.utc(2003, 4, 22), info)
|
437
|
+
assert_period(:XDT, 3600, 3600, true, Time.utc(2003, 4, 22), Time.utc(2003, 10, 21), info)
|
438
|
+
assert_period(:XST, 3600, 0, false, Time.utc(2003, 10, 21), Time.utc(2040, 12, 31), info)
|
439
|
+
assert_period(:XNST, 0, 0, false, Time.utc(2040, 12, 31), nil, info)
|
440
|
+
else
|
441
|
+
assert_period(:LMT, 3542, 0, false, nil, Time.utc(2003, 4, 22), info)
|
442
|
+
assert_period(:XDT, 3600, 3600, true, Time.utc(2003, 4, 22), Time.utc(2003, 10, 21), info)
|
443
|
+
assert_period(:XST, 3600, 0, false, Time.utc(2003, 10, 21), nil, info)
|
444
|
+
end
|
445
|
+
end
|
446
|
+
end
|
447
|
+
|
448
|
+
def test_load_std_offset_changes
|
449
|
+
# The zoneinfo files don't include the offset from standard time, so this
|
450
|
+
# has to be derived by looking at changes in the total UTC offset.
|
451
|
+
|
452
|
+
offsets = [
|
453
|
+
{:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
|
454
|
+
{:gmtoff => 3600, :isdst => false, :abbrev => 'XST'},
|
455
|
+
{:gmtoff => 7200, :isdst => true, :abbrev => 'XDT'},
|
456
|
+
{:gmtoff => 10800, :isdst => true, :abbrev => 'XDDT'}]
|
457
|
+
|
458
|
+
transitions = [
|
459
|
+
{:at => Time.utc(2000, 1, 1), :offset_index => 1},
|
460
|
+
{:at => Time.utc(2000, 2, 1), :offset_index => 2},
|
461
|
+
{:at => Time.utc(2000, 3, 1), :offset_index => 3},
|
462
|
+
{:at => Time.utc(2000, 4, 1), :offset_index => 1}]
|
463
|
+
|
464
|
+
tzif_test(offsets, transitions) do |path, format|
|
465
|
+
info = ZoneinfoTimezoneInfo.new('Zone/DoubleDaylight', path)
|
466
|
+
assert_equal('Zone/DoubleDaylight', info.identifier)
|
467
|
+
|
468
|
+
assert_period(:LMT, 3542, 0, false, nil, Time.utc(2000, 1, 1), info)
|
469
|
+
assert_period(:XST, 3600, 0, false, Time.utc(2000, 1, 1), Time.utc(2000, 2, 1), info)
|
470
|
+
assert_period(:XDT, 3600, 3600, true, Time.utc(2000, 2, 1), Time.utc(2000, 3, 1), info)
|
471
|
+
assert_period(:XDDT, 3600, 7200, true, Time.utc(2000, 3, 1), Time.utc(2000, 4, 1), info)
|
472
|
+
assert_period(:XST, 3600, 0, false, Time.utc(2000, 4, 1), nil, info)
|
473
|
+
end
|
474
|
+
end
|
475
|
+
|
476
|
+
def test_load_std_offset_changes_jump_to_double_dst
|
477
|
+
# The zoneinfo files don't include the offset from standard time, so this
|
478
|
+
# has to be derived by looking at changes in the total UTC offset.
|
479
|
+
|
480
|
+
offsets = [
|
481
|
+
{:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
|
482
|
+
{:gmtoff => 3600, :isdst => false, :abbrev => 'XST'},
|
483
|
+
{:gmtoff => 10800, :isdst => true, :abbrev => 'XDDT'}]
|
484
|
+
|
485
|
+
transitions = [
|
486
|
+
{:at => Time.utc(2000, 4, 1), :offset_index => 1},
|
487
|
+
{:at => Time.utc(2000, 5, 1), :offset_index => 2},
|
488
|
+
{:at => Time.utc(2000, 6, 1), :offset_index => 1}]
|
489
|
+
|
490
|
+
tzif_test(offsets, transitions) do |path, format|
|
491
|
+
info = ZoneinfoTimezoneInfo.new('Zone/DoubleDaylight', path)
|
492
|
+
assert_equal('Zone/DoubleDaylight', info.identifier)
|
493
|
+
|
494
|
+
assert_period(:LMT, 3542, 0, false, nil, Time.utc(2000, 4, 1), info)
|
495
|
+
assert_period(:XST, 3600, 0, false, Time.utc(2000, 4, 1), Time.utc(2000, 5, 1), info)
|
496
|
+
assert_period(:XDDT, 3600, 7200, true, Time.utc(2000, 5, 1), Time.utc(2000, 6, 1), info)
|
497
|
+
assert_period(:XST, 3600, 0, false, Time.utc(2000, 6, 1), nil, info)
|
498
|
+
end
|
499
|
+
end
|
500
|
+
|
501
|
+
def test_load_std_offset_changes_negative
|
502
|
+
# The zoneinfo files don't include the offset from standard time, so this
|
503
|
+
# has to be derived by looking at changes in the total UTC offset.
|
504
|
+
|
505
|
+
offsets = [
|
506
|
+
{:gmtoff => -10821, :isdst => false, :abbrev => 'LMT'},
|
507
|
+
{:gmtoff => -10800, :isdst => false, :abbrev => 'XST'},
|
508
|
+
{:gmtoff => -7200, :isdst => true, :abbrev => 'XDT'},
|
509
|
+
{:gmtoff => -3600, :isdst => true, :abbrev => 'XDDT'}]
|
510
|
+
|
511
|
+
transitions = [
|
512
|
+
{:at => Time.utc(2000, 1, 1), :offset_index => 1},
|
513
|
+
{:at => Time.utc(2000, 2, 1), :offset_index => 2},
|
514
|
+
{:at => Time.utc(2000, 3, 1), :offset_index => 3},
|
515
|
+
{:at => Time.utc(2000, 4, 1), :offset_index => 1},
|
516
|
+
{:at => Time.utc(2000, 5, 1), :offset_index => 3},
|
517
|
+
{:at => Time.utc(2000, 6, 1), :offset_index => 1}]
|
518
|
+
|
519
|
+
tzif_test(offsets, transitions) do |path, format|
|
520
|
+
info = ZoneinfoTimezoneInfo.new('Zone/DoubleDaylight', path)
|
521
|
+
assert_equal('Zone/DoubleDaylight', info.identifier)
|
522
|
+
|
523
|
+
assert_period(:LMT, -10821, 0, false, nil, Time.utc(2000, 1, 1), info)
|
524
|
+
assert_period(:XST, -10800, 0, false, Time.utc(2000, 1, 1), Time.utc(2000, 2, 1), info)
|
525
|
+
assert_period(:XDT, -10800, 3600, true, Time.utc(2000, 2, 1), Time.utc(2000, 3, 1), info)
|
526
|
+
assert_period(:XDDT, -10800, 7200, true, Time.utc(2000, 3, 1), Time.utc(2000, 4, 1), info)
|
527
|
+
assert_period(:XST, -10800, 0, false, Time.utc(2000, 4, 1), Time.utc(2000, 5, 1), info)
|
528
|
+
assert_period(:XDDT, -10800, 7200, true, Time.utc(2000, 5, 1), Time.utc(2000, 6, 1), info)
|
529
|
+
assert_period(:XST, -10800, 0, false, Time.utc(2000, 6, 1), nil, info)
|
530
|
+
end
|
531
|
+
end
|
532
|
+
|
533
|
+
def test_load_starts_two_hour_std_offset
|
534
|
+
# The zoneinfo files don't include the offset from standard time, so this
|
535
|
+
# has to be derived by looking at changes in the total UTC offset.
|
536
|
+
|
537
|
+
offsets = [
|
538
|
+
{:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
|
539
|
+
{:gmtoff => 3600, :isdst => false, :abbrev => 'XST'},
|
540
|
+
{:gmtoff => 7200, :isdst => true, :abbrev => 'XDT'},
|
541
|
+
{:gmtoff => 10800, :isdst => true, :abbrev => 'XDDT'}]
|
542
|
+
|
543
|
+
transitions = [
|
544
|
+
{:at => Time.utc(2000, 1, 1), :offset_index => 3},
|
545
|
+
{:at => Time.utc(2000, 2, 1), :offset_index => 2},
|
546
|
+
{:at => Time.utc(2000, 3, 1), :offset_index => 1}]
|
547
|
+
|
548
|
+
tzif_test(offsets, transitions) do |path, format|
|
549
|
+
info = ZoneinfoTimezoneInfo.new('Zone/DoubleDaylight', path)
|
550
|
+
assert_equal('Zone/DoubleDaylight', info.identifier)
|
551
|
+
|
552
|
+
assert_period(:LMT, 3542, 0, false, nil, Time.utc(2000, 1, 1), info)
|
553
|
+
assert_period(:XDDT, 3600, 7200, true, Time.utc(2000, 1, 1), Time.utc(2000, 2, 1), info)
|
554
|
+
assert_period(:XDT, 3600, 3600, true, Time.utc(2000, 2, 1), Time.utc(2000, 3, 1), info)
|
555
|
+
assert_period(:XST, 3600, 0, false, Time.utc(2000, 3, 1), nil, info)
|
556
|
+
end
|
557
|
+
end
|
558
|
+
|
559
|
+
def test_load_starts_all_same_dst_offset
|
560
|
+
# The zoneinfo files don't include the offset from standard time, so this
|
561
|
+
# has to be derived by looking at changes in the total UTC offset.
|
562
|
+
#
|
563
|
+
# If there are no changes in the UTC offset (ignoring the first offset,
|
564
|
+
# which is usually local mean time), then a value of 1 hour is used as the
|
565
|
+
# standard time offset.
|
566
|
+
|
567
|
+
offsets = [
|
568
|
+
{:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
|
569
|
+
{:gmtoff => 7200, :isdst => true, :abbrev => 'XDDT'}]
|
570
|
+
|
571
|
+
transitions = [
|
572
|
+
{:at => Time.utc(2000, 1, 1), :offset_index => 1}]
|
573
|
+
|
574
|
+
tzif_test(offsets, transitions) do |path, format|
|
575
|
+
info = ZoneinfoTimezoneInfo.new('Zone/DoubleDaylight', path)
|
576
|
+
assert_equal('Zone/DoubleDaylight', info.identifier)
|
577
|
+
|
578
|
+
assert_period(:LMT, 3542, 0, false, nil, Time.utc(2000, 1, 1), info)
|
579
|
+
assert_period(:XDDT, 3600, 3600, true, Time.utc(2000, 1, 1), nil, info)
|
580
|
+
end
|
581
|
+
end
|
582
|
+
|
583
|
+
def test_load_switch_to_dst_and_change_utc_offset
|
584
|
+
# The zoneinfo files don't include the offset from standard time, so this
|
585
|
+
# has to be derived by looking at changes in the total UTC offset.
|
586
|
+
|
587
|
+
# Switch from non-DST to DST at the same time as moving the UTC offset
|
588
|
+
# back an hour (i.e. wall clock time doesn't change).
|
589
|
+
|
590
|
+
offsets = [
|
591
|
+
{:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
|
592
|
+
{:gmtoff => 3600, :isdst => false, :abbrev => 'YST'},
|
593
|
+
{:gmtoff => 3600, :isdst => true, :abbrev => 'XDT'}]
|
594
|
+
|
595
|
+
transitions = [
|
596
|
+
{:at => Time.utc(2000, 1, 1), :offset_index => 1},
|
597
|
+
{:at => Time.utc(2000, 2, 1), :offset_index => 2}]
|
598
|
+
|
599
|
+
tzif_test(offsets, transitions) do |path, format|
|
600
|
+
info = ZoneinfoTimezoneInfo.new('Zone/DoubleDaylight', path)
|
601
|
+
assert_equal('Zone/DoubleDaylight', info.identifier)
|
602
|
+
|
603
|
+
assert_period(:LMT, 3542, 0, false, nil, Time.utc(2000, 1, 1), info)
|
604
|
+
assert_period(:YST, 3600, 0, false, Time.utc(2000, 1, 1), Time.utc(2000, 2, 1), info)
|
605
|
+
assert_period(:XDT, 0, 3600, true, Time.utc(2000, 2, 1), nil, info)
|
606
|
+
end
|
607
|
+
end
|
608
|
+
|
609
|
+
def test_load_in_safe_mode
|
610
|
+
offsets = [{:gmtoff => -12094, :isdst => false, :abbrev => 'LT'}]
|
611
|
+
|
612
|
+
tzif_test(offsets, []) do |path, format|
|
613
|
+
# untaint only required for Ruby 1.9.2
|
614
|
+
path.untaint
|
615
|
+
|
616
|
+
safe_test do
|
617
|
+
info = ZoneinfoTimezoneInfo.new('Zone/three', path)
|
618
|
+
assert_equal('Zone/three', info.identifier)
|
619
|
+
|
620
|
+
assert_period(:LT, -12094, 0, false, nil, nil, info)
|
621
|
+
end
|
622
|
+
end
|
623
|
+
end
|
624
|
+
|
625
|
+
def test_load_encoding
|
626
|
+
# tzfile.5 doesn't specify an encoding, but the source data is in ASCII.
|
627
|
+
# ZoneinfoTimezoneInfo will load as UTF-8 (a superset of ASCII).
|
628
|
+
|
629
|
+
offsets = [
|
630
|
+
{:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
|
631
|
+
{:gmtoff => 3600, :isdst => false, :abbrev => 'XST©'}]
|
632
|
+
|
633
|
+
transitions = [
|
634
|
+
{:at => Time.utc(1971, 1, 2), :offset_index => 1}]
|
635
|
+
|
636
|
+
tzif_test(offsets, transitions) do |path, format|
|
637
|
+
info = ZoneinfoTimezoneInfo.new('Zone/One', path)
|
638
|
+
assert_equal('Zone/One', info.identifier)
|
639
|
+
|
640
|
+
assert_period(:LMT, 3542, 0, false, nil, Time.utc(1971, 1, 2), info)
|
641
|
+
assert_period(:"XST©", 3600, 0, false, Time.utc(1971, 1, 2), nil, info)
|
642
|
+
end
|
643
|
+
end
|
644
|
+
|
645
|
+
def test_load_binmode
|
646
|
+
offsets = [
|
647
|
+
{:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
|
648
|
+
{:gmtoff => 3600, :isdst => false, :abbrev => 'XST'}]
|
649
|
+
|
650
|
+
# Transition time that includes CRLF (4EFF0D0A).
|
651
|
+
# Test that this doesn't get corrupted by translating CRLF to LF.
|
652
|
+
transitions = [
|
653
|
+
{:at => Time.utc(2011, 12, 31, 13, 24, 26), :offset_index => 1}]
|
654
|
+
|
655
|
+
tzif_test(offsets, transitions) do |path, format|
|
656
|
+
info = ZoneinfoTimezoneInfo.new('Zone/One', path)
|
657
|
+
assert_equal('Zone/One', info.identifier)
|
658
|
+
|
659
|
+
assert_period(:LMT, 3542, 0, false, nil, Time.utc(2011, 12, 31, 13, 24, 26), info)
|
660
|
+
assert_period(:XST, 3600, 0, false, Time.utc(2011, 12, 31, 13, 24, 26), nil, info)
|
661
|
+
end
|
662
|
+
end
|
663
|
+
end
|