tz (empty) → 0.0.0.1
raw patch · 593 files changed
+1973/−0 lines, 593 filesdep +HUnitdep +QuickCheckdep +basesetup-changedbinary-added
Dependencies added: HUnit, QuickCheck, base, binary, bindings-posix, bytestring, criterion, lens, test-framework, test-framework-hunit, test-framework-quickcheck2, test-framework-th, thyme, time, timezone-olson, timezone-series, tz, unix, vector
Files
- Data/Time/Zones.hs +229/−0
- Data/Time/Zones/Read.hs +164/−0
- Data/Time/Zones/Types.hs +24/−0
- LICENSE +201/−0
- README.md +4/−0
- Setup.hs +2/−0
- benchmarks/benchGreg.hs +123/−0
- benchmarks/benchTZ.hs +114/−0
- benchmarks/bench_c_localtime.hs +99/−0
- tests/testTZ.hs +168/−0
- tz.cabal +118/−0
- tzdata/Africa/Abidjan.zone binary
- tzdata/Africa/Accra.zone binary
- tzdata/Africa/Addis_Ababa.zone binary
- tzdata/Africa/Algiers.zone binary
- tzdata/Africa/Asmara.zone binary
- tzdata/Africa/Asmera.zone binary
- tzdata/Africa/Bamako.zone binary
- tzdata/Africa/Bangui.zone binary
- tzdata/Africa/Banjul.zone binary
- tzdata/Africa/Bissau.zone binary
- tzdata/Africa/Blantyre.zone binary
- tzdata/Africa/Brazzaville.zone binary
- tzdata/Africa/Bujumbura.zone binary
- tzdata/Africa/Cairo.zone binary
- tzdata/Africa/Casablanca.zone binary
- tzdata/Africa/Ceuta.zone binary
- tzdata/Africa/Conakry.zone binary
- tzdata/Africa/Dakar.zone binary
- tzdata/Africa/Dar_es_Salaam.zone binary
- tzdata/Africa/Djibouti.zone binary
- tzdata/Africa/Douala.zone binary
- tzdata/Africa/El_Aaiun.zone binary
- tzdata/Africa/Freetown.zone binary
- tzdata/Africa/Gaborone.zone binary
- tzdata/Africa/Harare.zone binary
- tzdata/Africa/Johannesburg.zone binary
- tzdata/Africa/Juba.zone binary
- tzdata/Africa/Kampala.zone binary
- tzdata/Africa/Khartoum.zone binary
- tzdata/Africa/Kigali.zone binary
- tzdata/Africa/Kinshasa.zone binary
- tzdata/Africa/Lagos.zone binary
- tzdata/Africa/Libreville.zone binary
- tzdata/Africa/Lome.zone binary
- tzdata/Africa/Luanda.zone binary
- tzdata/Africa/Lubumbashi.zone binary
- tzdata/Africa/Lusaka.zone binary
- tzdata/Africa/Malabo.zone binary
- tzdata/Africa/Maputo.zone binary
- tzdata/Africa/Maseru.zone binary
- tzdata/Africa/Mbabane.zone binary
- tzdata/Africa/Mogadishu.zone binary
- tzdata/Africa/Monrovia.zone binary
- tzdata/Africa/Nairobi.zone binary
- tzdata/Africa/Ndjamena.zone binary
- tzdata/Africa/Niamey.zone binary
- tzdata/Africa/Nouakchott.zone binary
- tzdata/Africa/Ouagadougou.zone binary
- tzdata/Africa/Porto-Novo.zone binary
- tzdata/Africa/Sao_Tome.zone binary
- tzdata/Africa/Timbuktu.zone binary
- tzdata/Africa/Tripoli.zone binary
- tzdata/Africa/Tunis.zone binary
- tzdata/Africa/Windhoek.zone binary
- tzdata/America/Adak.zone binary
- tzdata/America/Anchorage.zone binary
- tzdata/America/Anguilla.zone binary
- tzdata/America/Antigua.zone binary
- tzdata/America/Araguaina.zone binary
- tzdata/America/Argentina/Buenos_Aires.zone binary
- tzdata/America/Argentina/Catamarca.zone binary
- tzdata/America/Argentina/ComodRivadavia.zone binary
- tzdata/America/Argentina/Cordoba.zone binary
- tzdata/America/Argentina/Jujuy.zone binary
- tzdata/America/Argentina/La_Rioja.zone binary
- tzdata/America/Argentina/Mendoza.zone binary
- tzdata/America/Argentina/Rio_Gallegos.zone binary
- tzdata/America/Argentina/Salta.zone binary
- tzdata/America/Argentina/San_Juan.zone binary
- tzdata/America/Argentina/San_Luis.zone binary
- tzdata/America/Argentina/Tucuman.zone binary
- tzdata/America/Argentina/Ushuaia.zone binary
- tzdata/America/Aruba.zone binary
- tzdata/America/Asuncion.zone binary
- tzdata/America/Atikokan.zone binary
- tzdata/America/Atka.zone binary
- tzdata/America/Bahia.zone binary
- tzdata/America/Bahia_Banderas.zone binary
- tzdata/America/Barbados.zone binary
- tzdata/America/Belem.zone binary
- tzdata/America/Belize.zone binary
- tzdata/America/Blanc-Sablon.zone binary
- tzdata/America/Boa_Vista.zone binary
- tzdata/America/Bogota.zone binary
- tzdata/America/Boise.zone binary
- tzdata/America/Buenos_Aires.zone binary
- tzdata/America/Cambridge_Bay.zone binary
- tzdata/America/Campo_Grande.zone binary
- tzdata/America/Cancun.zone binary
- tzdata/America/Caracas.zone binary
- tzdata/America/Catamarca.zone binary
- tzdata/America/Cayenne.zone binary
- tzdata/America/Cayman.zone binary
- tzdata/America/Chicago.zone binary
- tzdata/America/Chihuahua.zone binary
- tzdata/America/Coral_Harbour.zone binary
- tzdata/America/Cordoba.zone binary
- tzdata/America/Costa_Rica.zone binary
- tzdata/America/Creston.zone binary
- tzdata/America/Cuiaba.zone binary
- tzdata/America/Curacao.zone binary
- tzdata/America/Danmarkshavn.zone binary
- tzdata/America/Dawson.zone binary
- tzdata/America/Dawson_Creek.zone binary
- tzdata/America/Denver.zone binary
- tzdata/America/Detroit.zone binary
- tzdata/America/Dominica.zone binary
- tzdata/America/Edmonton.zone binary
- tzdata/America/Eirunepe.zone binary
- tzdata/America/El_Salvador.zone binary
- tzdata/America/Ensenada.zone binary
- tzdata/America/Fort_Wayne.zone binary
- tzdata/America/Fortaleza.zone binary
- tzdata/America/Glace_Bay.zone binary
- tzdata/America/Godthab.zone binary
- tzdata/America/Goose_Bay.zone binary
- tzdata/America/Grand_Turk.zone binary
- tzdata/America/Grenada.zone binary
- tzdata/America/Guadeloupe.zone binary
- tzdata/America/Guatemala.zone binary
- tzdata/America/Guayaquil.zone binary
- tzdata/America/Guyana.zone binary
- tzdata/America/Halifax.zone binary
- tzdata/America/Havana.zone binary
- tzdata/America/Hermosillo.zone binary
- tzdata/America/Indiana/Indianapolis.zone binary
- tzdata/America/Indiana/Knox.zone binary
- tzdata/America/Indiana/Marengo.zone binary
- tzdata/America/Indiana/Petersburg.zone binary
- tzdata/America/Indiana/Tell_City.zone binary
- tzdata/America/Indiana/Vevay.zone binary
- tzdata/America/Indiana/Vincennes.zone binary
- tzdata/America/Indiana/Winamac.zone binary
- tzdata/America/Indianapolis.zone binary
- tzdata/America/Inuvik.zone binary
- tzdata/America/Iqaluit.zone binary
- tzdata/America/Jamaica.zone binary
- tzdata/America/Jujuy.zone binary
- tzdata/America/Juneau.zone binary
- tzdata/America/Kentucky/Louisville.zone binary
- tzdata/America/Kentucky/Monticello.zone binary
- tzdata/America/Knox_IN.zone binary
- tzdata/America/Kralendijk.zone binary
- tzdata/America/La_Paz.zone binary
- tzdata/America/Lima.zone binary
- tzdata/America/Los_Angeles.zone binary
- tzdata/America/Louisville.zone binary
- tzdata/America/Lower_Princes.zone binary
- tzdata/America/Maceio.zone binary
- tzdata/America/Managua.zone binary
- tzdata/America/Manaus.zone binary
- tzdata/America/Marigot.zone binary
- tzdata/America/Martinique.zone binary
- tzdata/America/Matamoros.zone binary
- tzdata/America/Mazatlan.zone binary
- tzdata/America/Mendoza.zone binary
- tzdata/America/Menominee.zone binary
- tzdata/America/Merida.zone binary
- tzdata/America/Metlakatla.zone binary
- tzdata/America/Mexico_City.zone binary
- tzdata/America/Miquelon.zone binary
- tzdata/America/Moncton.zone binary
- tzdata/America/Monterrey.zone binary
- tzdata/America/Montevideo.zone binary
- tzdata/America/Montreal.zone binary
- tzdata/America/Montserrat.zone binary
- tzdata/America/Nassau.zone binary
- tzdata/America/New_York.zone binary
- tzdata/America/Nipigon.zone binary
- tzdata/America/Nome.zone binary
- tzdata/America/Noronha.zone binary
- tzdata/America/North_Dakota/Beulah.zone binary
- tzdata/America/North_Dakota/Center.zone binary
- tzdata/America/North_Dakota/New_Salem.zone binary
- tzdata/America/Ojinaga.zone binary
- tzdata/America/Panama.zone binary
- tzdata/America/Pangnirtung.zone binary
- tzdata/America/Paramaribo.zone binary
- tzdata/America/Phoenix.zone binary
- tzdata/America/Port-au-Prince.zone binary
- tzdata/America/Port_of_Spain.zone binary
- tzdata/America/Porto_Acre.zone binary
- tzdata/America/Porto_Velho.zone binary
- tzdata/America/Puerto_Rico.zone binary
- tzdata/America/Rainy_River.zone binary
- tzdata/America/Rankin_Inlet.zone binary
- tzdata/America/Recife.zone binary
- tzdata/America/Regina.zone binary
- tzdata/America/Resolute.zone binary
- tzdata/America/Rio_Branco.zone binary
- tzdata/America/Rosario.zone binary
- tzdata/America/Santa_Isabel.zone binary
- tzdata/America/Santarem.zone binary
- tzdata/America/Santiago.zone binary
- tzdata/America/Santo_Domingo.zone binary
- tzdata/America/Sao_Paulo.zone binary
- tzdata/America/Scoresbysund.zone binary
- tzdata/America/Shiprock.zone binary
- tzdata/America/Sitka.zone binary
- tzdata/America/St_Barthelemy.zone binary
- tzdata/America/St_Johns.zone binary
- tzdata/America/St_Kitts.zone binary
- tzdata/America/St_Lucia.zone binary
- tzdata/America/St_Thomas.zone binary
- tzdata/America/St_Vincent.zone binary
- tzdata/America/Swift_Current.zone binary
- tzdata/America/Tegucigalpa.zone binary
- tzdata/America/Thule.zone binary
- tzdata/America/Thunder_Bay.zone binary
- tzdata/America/Tijuana.zone binary
- tzdata/America/Toronto.zone binary
- tzdata/America/Tortola.zone binary
- tzdata/America/Vancouver.zone binary
- tzdata/America/Virgin.zone binary
- tzdata/America/Whitehorse.zone binary
- tzdata/America/Winnipeg.zone binary
- tzdata/America/Yakutat.zone binary
- tzdata/America/Yellowknife.zone binary
- tzdata/Antarctica/Casey.zone binary
- tzdata/Antarctica/Davis.zone binary
- tzdata/Antarctica/DumontDUrville.zone binary
- tzdata/Antarctica/Macquarie.zone binary
- tzdata/Antarctica/Mawson.zone binary
- tzdata/Antarctica/McMurdo.zone binary
- tzdata/Antarctica/Palmer.zone binary
- tzdata/Antarctica/Rothera.zone binary
- tzdata/Antarctica/South_Pole.zone binary
- tzdata/Antarctica/Syowa.zone binary
- tzdata/Antarctica/Troll.zone binary
- tzdata/Antarctica/Vostok.zone binary
- tzdata/Arctic/Longyearbyen.zone binary
- tzdata/Asia/Aden.zone binary
- tzdata/Asia/Almaty.zone binary
- tzdata/Asia/Amman.zone binary
- tzdata/Asia/Anadyr.zone binary
- tzdata/Asia/Aqtau.zone binary
- tzdata/Asia/Aqtobe.zone binary
- tzdata/Asia/Ashgabat.zone binary
- tzdata/Asia/Ashkhabad.zone binary
- tzdata/Asia/Baghdad.zone binary
- tzdata/Asia/Bahrain.zone binary
- tzdata/Asia/Baku.zone binary
- tzdata/Asia/Bangkok.zone binary
- tzdata/Asia/Beirut.zone binary
- tzdata/Asia/Bishkek.zone binary
- tzdata/Asia/Brunei.zone binary
- tzdata/Asia/Calcutta.zone binary
- tzdata/Asia/Choibalsan.zone binary
- tzdata/Asia/Chongqing.zone binary
- tzdata/Asia/Chungking.zone binary
- tzdata/Asia/Colombo.zone binary
- tzdata/Asia/Dacca.zone binary
- tzdata/Asia/Damascus.zone binary
- tzdata/Asia/Dhaka.zone binary
- tzdata/Asia/Dili.zone binary
- tzdata/Asia/Dubai.zone binary
- tzdata/Asia/Dushanbe.zone binary
- tzdata/Asia/Gaza.zone binary
- tzdata/Asia/Harbin.zone binary
- tzdata/Asia/Hebron.zone binary
- tzdata/Asia/Ho_Chi_Minh.zone binary
- tzdata/Asia/Hong_Kong.zone binary
- tzdata/Asia/Hovd.zone binary
- tzdata/Asia/Irkutsk.zone binary
- tzdata/Asia/Istanbul.zone binary
- tzdata/Asia/Jakarta.zone binary
- tzdata/Asia/Jayapura.zone binary
- tzdata/Asia/Jerusalem.zone binary
- tzdata/Asia/Kabul.zone binary
- tzdata/Asia/Kamchatka.zone binary
- tzdata/Asia/Karachi.zone binary
- tzdata/Asia/Kashgar.zone binary
- tzdata/Asia/Kathmandu.zone binary
- tzdata/Asia/Katmandu.zone binary
- tzdata/Asia/Khandyga.zone binary
- tzdata/Asia/Kolkata.zone binary
- tzdata/Asia/Krasnoyarsk.zone binary
- tzdata/Asia/Kuala_Lumpur.zone binary
- tzdata/Asia/Kuching.zone binary
- tzdata/Asia/Kuwait.zone binary
- tzdata/Asia/Macao.zone binary
- tzdata/Asia/Macau.zone binary
- tzdata/Asia/Magadan.zone binary
- tzdata/Asia/Makassar.zone binary
- tzdata/Asia/Manila.zone binary
- tzdata/Asia/Muscat.zone binary
- tzdata/Asia/Nicosia.zone binary
- tzdata/Asia/Novokuznetsk.zone binary
- tzdata/Asia/Novosibirsk.zone binary
- tzdata/Asia/Omsk.zone binary
- tzdata/Asia/Oral.zone binary
- tzdata/Asia/Phnom_Penh.zone binary
- tzdata/Asia/Pontianak.zone binary
- tzdata/Asia/Pyongyang.zone binary
- tzdata/Asia/Qatar.zone binary
- tzdata/Asia/Qyzylorda.zone binary
- tzdata/Asia/Rangoon.zone binary
- tzdata/Asia/Riyadh.zone binary
- tzdata/Asia/Saigon.zone binary
- tzdata/Asia/Sakhalin.zone binary
- tzdata/Asia/Samarkand.zone binary
- tzdata/Asia/Seoul.zone binary
- tzdata/Asia/Shanghai.zone binary
- tzdata/Asia/Singapore.zone binary
- tzdata/Asia/Taipei.zone binary
- tzdata/Asia/Tashkent.zone binary
- tzdata/Asia/Tbilisi.zone binary
- tzdata/Asia/Tehran.zone binary
- tzdata/Asia/Tel_Aviv.zone binary
- tzdata/Asia/Thimbu.zone binary
- tzdata/Asia/Thimphu.zone binary
- tzdata/Asia/Tokyo.zone binary
- tzdata/Asia/Ujung_Pandang.zone binary
- tzdata/Asia/Ulaanbaatar.zone binary
- tzdata/Asia/Ulan_Bator.zone binary
- tzdata/Asia/Urumqi.zone binary
- tzdata/Asia/Ust-Nera.zone binary
- tzdata/Asia/Vientiane.zone binary
- tzdata/Asia/Vladivostok.zone binary
- tzdata/Asia/Yakutsk.zone binary
- tzdata/Asia/Yekaterinburg.zone binary
- tzdata/Asia/Yerevan.zone binary
- tzdata/Atlantic/Azores.zone binary
- tzdata/Atlantic/Bermuda.zone binary
- tzdata/Atlantic/Canary.zone binary
- tzdata/Atlantic/Cape_Verde.zone binary
- tzdata/Atlantic/Faeroe.zone binary
- tzdata/Atlantic/Faroe.zone binary
- tzdata/Atlantic/Jan_Mayen.zone binary
- tzdata/Atlantic/Madeira.zone binary
- tzdata/Atlantic/Reykjavik.zone binary
- tzdata/Atlantic/South_Georgia.zone binary
- tzdata/Atlantic/St_Helena.zone binary
- tzdata/Atlantic/Stanley.zone binary
- tzdata/Australia/ACT.zone binary
- tzdata/Australia/Adelaide.zone binary
- tzdata/Australia/Brisbane.zone binary
- tzdata/Australia/Broken_Hill.zone binary
- tzdata/Australia/Canberra.zone binary
- tzdata/Australia/Currie.zone binary
- tzdata/Australia/Darwin.zone binary
- tzdata/Australia/Eucla.zone binary
- tzdata/Australia/Hobart.zone binary
- tzdata/Australia/LHI.zone binary
- tzdata/Australia/Lindeman.zone binary
- tzdata/Australia/Lord_Howe.zone binary
- tzdata/Australia/Melbourne.zone binary
- tzdata/Australia/NSW.zone binary
- tzdata/Australia/North.zone binary
- tzdata/Australia/Perth.zone binary
- tzdata/Australia/Queensland.zone binary
- tzdata/Australia/South.zone binary
- tzdata/Australia/Sydney.zone binary
- tzdata/Australia/Tasmania.zone binary
- tzdata/Australia/Victoria.zone binary
- tzdata/Australia/West.zone binary
- tzdata/Australia/Yancowinna.zone binary
- tzdata/Brazil/Acre.zone binary
- tzdata/Brazil/DeNoronha.zone binary
- tzdata/Brazil/East.zone binary
- tzdata/Brazil/West.zone binary
- tzdata/CET.zone binary
- tzdata/CST6CDT.zone binary
- tzdata/Canada/Atlantic.zone binary
- tzdata/Canada/Central.zone binary
- tzdata/Canada/East-Saskatchewan.zone binary
- tzdata/Canada/Eastern.zone binary
- tzdata/Canada/Mountain.zone binary
- tzdata/Canada/Newfoundland.zone binary
- tzdata/Canada/Pacific.zone binary
- tzdata/Canada/Saskatchewan.zone binary
- tzdata/Canada/Yukon.zone binary
- tzdata/Chile/Continental.zone binary
- tzdata/Chile/EasterIsland.zone binary
- tzdata/Cuba.zone binary
- tzdata/EET.zone binary
- tzdata/EST.zone binary
- tzdata/EST5EDT.zone binary
- tzdata/Egypt.zone binary
- tzdata/Eire.zone binary
- tzdata/Etc/GMT+0.zone binary
- tzdata/Etc/GMT+1.zone binary
- tzdata/Etc/GMT+10.zone binary
- tzdata/Etc/GMT+11.zone binary
- tzdata/Etc/GMT+12.zone binary
- tzdata/Etc/GMT+2.zone binary
- tzdata/Etc/GMT+3.zone binary
- tzdata/Etc/GMT+4.zone binary
- tzdata/Etc/GMT+5.zone binary
- tzdata/Etc/GMT+6.zone binary
- tzdata/Etc/GMT+7.zone binary
- tzdata/Etc/GMT+8.zone binary
- tzdata/Etc/GMT+9.zone binary
- tzdata/Etc/GMT-0.zone binary
- tzdata/Etc/GMT-1.zone binary
- tzdata/Etc/GMT-10.zone binary
- tzdata/Etc/GMT-11.zone binary
- tzdata/Etc/GMT-12.zone binary
- tzdata/Etc/GMT-13.zone binary
- tzdata/Etc/GMT-14.zone binary
- tzdata/Etc/GMT-2.zone binary
- tzdata/Etc/GMT-3.zone binary
- tzdata/Etc/GMT-4.zone binary
- tzdata/Etc/GMT-5.zone binary
- tzdata/Etc/GMT-6.zone binary
- tzdata/Etc/GMT-7.zone binary
- tzdata/Etc/GMT-8.zone binary
- tzdata/Etc/GMT-9.zone binary
- tzdata/Etc/GMT.zone binary
- tzdata/Etc/GMT0.zone binary
- tzdata/Etc/Greenwich.zone binary
- tzdata/Etc/UCT.zone binary
- tzdata/Etc/UTC.zone binary
- tzdata/Etc/Universal.zone binary
- tzdata/Etc/Zulu.zone binary
- tzdata/Europe/Amsterdam.zone binary
- tzdata/Europe/Andorra.zone binary
- tzdata/Europe/Athens.zone binary
- tzdata/Europe/Belfast.zone binary
- tzdata/Europe/Belgrade.zone binary
- tzdata/Europe/Berlin.zone binary
- tzdata/Europe/Bratislava.zone binary
- tzdata/Europe/Brussels.zone binary
- tzdata/Europe/Bucharest.zone binary
- tzdata/Europe/Budapest.zone binary
- tzdata/Europe/Busingen.zone binary
- tzdata/Europe/Chisinau.zone binary
- tzdata/Europe/Copenhagen.zone binary
- tzdata/Europe/Dublin.zone binary
- tzdata/Europe/Gibraltar.zone binary
- tzdata/Europe/Guernsey.zone binary
- tzdata/Europe/Helsinki.zone binary
- tzdata/Europe/Isle_of_Man.zone binary
- tzdata/Europe/Istanbul.zone binary
- tzdata/Europe/Jersey.zone binary
- tzdata/Europe/Kaliningrad.zone binary
- tzdata/Europe/Kiev.zone binary
- tzdata/Europe/Lisbon.zone binary
- tzdata/Europe/Ljubljana.zone binary
- tzdata/Europe/London.zone binary
- tzdata/Europe/Luxembourg.zone binary
- tzdata/Europe/Madrid.zone binary
- tzdata/Europe/Malta.zone binary
- tzdata/Europe/Mariehamn.zone binary
- tzdata/Europe/Minsk.zone binary
- tzdata/Europe/Monaco.zone binary
- tzdata/Europe/Moscow.zone binary
- tzdata/Europe/Nicosia.zone binary
- tzdata/Europe/Oslo.zone binary
- tzdata/Europe/Paris.zone binary
- tzdata/Europe/Podgorica.zone binary
- tzdata/Europe/Prague.zone binary
- tzdata/Europe/Riga.zone binary
- tzdata/Europe/Rome.zone binary
- tzdata/Europe/Samara.zone binary
- tzdata/Europe/San_Marino.zone binary
- tzdata/Europe/Sarajevo.zone binary
- tzdata/Europe/Simferopol.zone binary
- tzdata/Europe/Skopje.zone binary
- tzdata/Europe/Sofia.zone binary
- tzdata/Europe/Stockholm.zone binary
- tzdata/Europe/Tallinn.zone binary
- tzdata/Europe/Tirane.zone binary
- tzdata/Europe/Tiraspol.zone binary
- tzdata/Europe/Uzhgorod.zone binary
- tzdata/Europe/Vaduz.zone binary
- tzdata/Europe/Vatican.zone binary
- tzdata/Europe/Vienna.zone binary
- tzdata/Europe/Vilnius.zone binary
- tzdata/Europe/Volgograd.zone binary
- tzdata/Europe/Warsaw.zone binary
- tzdata/Europe/Zagreb.zone binary
- tzdata/Europe/Zaporozhye.zone binary
- tzdata/Europe/Zurich.zone binary
- tzdata/Factory.zone binary
- tzdata/GB-Eire.zone binary
- tzdata/GB.zone binary
- tzdata/GMT+0.zone binary
- tzdata/GMT-0.zone binary
- tzdata/GMT.zone binary
- tzdata/GMT0.zone binary
- tzdata/Greenwich.zone binary
- tzdata/HST.zone binary
- tzdata/Hongkong.zone binary
- tzdata/Iceland.zone binary
- tzdata/Indian/Antananarivo.zone binary
- tzdata/Indian/Chagos.zone binary
- tzdata/Indian/Christmas.zone binary
- tzdata/Indian/Cocos.zone binary
- tzdata/Indian/Comoro.zone binary
- tzdata/Indian/Kerguelen.zone binary
- tzdata/Indian/Mahe.zone binary
- tzdata/Indian/Maldives.zone binary
- tzdata/Indian/Mauritius.zone binary
- tzdata/Indian/Mayotte.zone binary
- tzdata/Indian/Reunion.zone binary
- tzdata/Iran.zone binary
- tzdata/Israel.zone binary
- tzdata/Jamaica.zone binary
- tzdata/Japan.zone binary
- tzdata/Kwajalein.zone binary
- tzdata/Libya.zone binary
- tzdata/MET.zone binary
- tzdata/MST.zone binary
- tzdata/MST7MDT.zone binary
- tzdata/Mexico/BajaNorte.zone binary
- tzdata/Mexico/BajaSur.zone binary
- tzdata/Mexico/General.zone binary
- tzdata/NZ-CHAT.zone binary
- tzdata/NZ.zone binary
- tzdata/Navajo.zone binary
- tzdata/PRC.zone binary
- tzdata/PST8PDT.zone binary
- tzdata/Pacific/Apia.zone binary
- tzdata/Pacific/Auckland.zone binary
- tzdata/Pacific/Chatham.zone binary
- tzdata/Pacific/Chuuk.zone binary
- tzdata/Pacific/Easter.zone binary
- tzdata/Pacific/Efate.zone binary
- tzdata/Pacific/Enderbury.zone binary
- tzdata/Pacific/Fakaofo.zone binary
- tzdata/Pacific/Fiji.zone binary
- tzdata/Pacific/Funafuti.zone binary
- tzdata/Pacific/Galapagos.zone binary
- tzdata/Pacific/Gambier.zone binary
- tzdata/Pacific/Guadalcanal.zone binary
- tzdata/Pacific/Guam.zone binary
- tzdata/Pacific/Honolulu.zone binary
- tzdata/Pacific/Johnston.zone binary
- tzdata/Pacific/Kiritimati.zone binary
- tzdata/Pacific/Kosrae.zone binary
- tzdata/Pacific/Kwajalein.zone binary
- tzdata/Pacific/Majuro.zone binary
- tzdata/Pacific/Marquesas.zone binary
- tzdata/Pacific/Midway.zone binary
- tzdata/Pacific/Nauru.zone binary
- tzdata/Pacific/Niue.zone binary
- tzdata/Pacific/Norfolk.zone binary
- tzdata/Pacific/Noumea.zone binary
- tzdata/Pacific/Pago_Pago.zone binary
- tzdata/Pacific/Palau.zone binary
- tzdata/Pacific/Pitcairn.zone binary
- tzdata/Pacific/Pohnpei.zone binary
- tzdata/Pacific/Ponape.zone binary
- tzdata/Pacific/Port_Moresby.zone binary
- tzdata/Pacific/Rarotonga.zone binary
- tzdata/Pacific/Saipan.zone binary
- tzdata/Pacific/Samoa.zone binary
- tzdata/Pacific/Tahiti.zone binary
- tzdata/Pacific/Tarawa.zone binary
- tzdata/Pacific/Tongatapu.zone binary
- tzdata/Pacific/Truk.zone binary
- tzdata/Pacific/Wake.zone binary
- tzdata/Pacific/Wallis.zone binary
- tzdata/Pacific/Yap.zone binary
- tzdata/Poland.zone binary
- tzdata/Portugal.zone binary
- tzdata/ROC.zone binary
- tzdata/ROK.zone binary
- tzdata/Singapore.zone binary
- tzdata/Turkey.zone binary
- tzdata/UCT.zone binary
- tzdata/US/Alaska.zone binary
- tzdata/US/Aleutian.zone binary
- tzdata/US/Arizona.zone binary
- tzdata/US/Central.zone binary
- tzdata/US/East-Indiana.zone binary
- tzdata/US/Eastern.zone binary
- tzdata/US/Hawaii.zone binary
- tzdata/US/Indiana-Starke.zone binary
- tzdata/US/Michigan.zone binary
- tzdata/US/Mountain.zone binary
- tzdata/US/Pacific-New.zone binary
- tzdata/US/Pacific.zone binary
- tzdata/US/Samoa.zone binary
- tzdata/UTC.zone binary
- tzdata/Universal.zone binary
- tzdata/W-SU.zone binary
- tzdata/WET.zone binary
- tzdata/Zulu.zone binary
- tzdata/iso3166.tab +275/−0
- tzdata/zone.tab +452/−0
@@ -0,0 +1,229 @@+{- |+Module : Data.Time.Zones+Copyright : (C) 2014 Mihaly Barasz+License : Apache-2.0, see LICENSE+Maintainer : Mihaly Barasz <klao@nilcons.com>+Stability : experimental+-}++{-# LANGUAGE BangPatterns #-}++module Data.Time.Zones (+ TZ,+ utcTZ,+ -- * Universal -> Local direction+ diffForPOSIX,+ timeZoneForPOSIX,+ timeZoneForUTCTime,+ utcToLocalTimeTZ,+ -- * Local -> Universal direction+ LocalToUTCResult(..),+ localTimeToUTCFull,+ localTimeToUTCTZ,+ -- TODO(klao): do we want to export these?+ FromLocal(..),+ localToPOSIX,+ -- * Acquiring `TZ` information+ loadTZFromFile,+ loadTZFromDB,+ loadSystemTZ,+ loadLocalTZ,+ ) where++import Data.Bits (shiftR)+import Data.Fixed (divMod')+import Data.Int (Int64)+import Data.Time+import qualified Data.Vector as VB+import qualified Data.Vector.Unboxed as VU+import Data.Time.Zones.Types+import Data.Time.Zones.Read++-- | Returns the time difference (in seconds) for TZ at the given+-- POSIX time.+diffForPOSIX :: TZ -> Int64 -> Int+{-# INLINE diffForPOSIX #-}+diffForPOSIX (TZ trans diffs _) t = VU.unsafeIndex diffs $ binarySearch trans t++timeZoneForIx :: TZ -> Int -> TimeZone+{-# INLINE timeZoneForIx #-}+timeZoneForIx (TZ _ diffs infos) i = TimeZone diffMins isDst name+ where+ diffMins = VU.unsafeIndex diffs i `div` 60+ (isDst, name) = VB.unsafeIndex infos i++-- | Returns the `TimeZone` for the `TZ` at the given POSIX time.+timeZoneForPOSIX :: TZ -> Int64 -> TimeZone+{-# INLINABLE timeZoneForPOSIX #-}+timeZoneForPOSIX tz@(TZ trans _ _) t = timeZoneForIx tz i+ where+ i = binarySearch trans t++-- | Returns the `TimeZone` for the `TZ` at the given `UTCTime`.+timeZoneForUTCTime :: TZ -> UTCTime -> TimeZone+{-# INLINABLE timeZoneForUTCTime #-}+timeZoneForUTCTime tz (UTCTime day tid)+ = timeZoneForPOSIX tz $ dayTimeToInt64 day tid++-- | Returns the `LocalTime` corresponding to the given `UTCTime` in `TZ`.+--+-- @utcToLocalTimeTZ tz ut@ is equivalent to @`utcToLocalTime`+-- (`timeZoneForPOSIX` tz ut) ut@ except when the time difference is not+-- an integral number of minutes+utcToLocalTimeTZ :: TZ -> UTCTime -> LocalTime+utcToLocalTimeTZ tz (UTCTime day dtime) = LocalTime day' tod+ where+ diff = diffForPOSIX tz $ dayTimeToInt64 day dtime+ (m', s) = (dtime + fromIntegral diff) `divMod'` 60+ (h', m) = m' `divMod` 60+ (d', h) = h' `divMod` 24+ day' = fromIntegral d' `addDays` day+ tod = TimeOfDay h m (realToFrac s)++-- | The `TZ` definition for UTC.+utcTZ :: TZ+utcTZ = TZ (VU.singleton minBound) (VU.singleton 0) (VB.singleton (False, "UTC"))++-- | Returns the largest index `i` such that `v ! i <= t`.+--+-- Assumes that `v` is sorted, has at least one element and `v ! 0 <= t`.+binarySearch :: (VU.Unbox a, Ord a) => VU.Vector a -> a -> Int+{-# INLINE binarySearch #-}+binarySearch v t | n == 1 = 0+ | otherwise = t `seq` go 1 n+ where+ n = VU.length v+ go !l !u | l >= u = (l - 1)+ | VU.unsafeIndex v k <= t = go (k+1) u+ | otherwise = go l k+ where+ k = (l + u) `shiftR` 1++--------------------------------------------------------------------------------+-- LocalTime to UTCTime++-- Representing LocalTimes as Int64s.+--+-- We want a simple and convenient mapping of+-- (year,month,day,hour,minutes,seconds) tuples onto a linear+-- scale. We adopt the following convention: an Int64 maps to the+-- tuple that a POSIX time represented by the same number would map in+-- UTC time zone. That is, 0 maps to '1970-01-01 00:00:00' and+-- 1395516860 maps to '2014-03-22 19:34:20'.+--+-- This is independent and without reference to any particular time+-- zone, it is completely analogous to LocalTime in that you need a+-- time zone to be able to interpret this as a point in time. And then+-- it may refer to an invalid time (spring time forward clock jump) or+-- two possible times (fall time backward jump).+--+-- So, it's basically another representation for LocalTimes (those+-- that can be represented within an Int64 and ignoring the fractional+-- seconds), except that LocalTime can contain invalid time-of-day+-- part (like 27:-05:107) and the Int64 representation can't and is+-- always unambiguous.+--+-- With that in mind, a UTCTime to LocalTime conversion can be seen as+-- 'TZ -> Int64 -> Int64', where the first Int64 is POSIX time and the+-- second is this kind of LocalTime representation.+++-- | Internal representation of LocalTime -> UTCTime conversion result:+data FromLocal+ = FLGap { _flIx :: {-# UNPACK #-} !Int+ , _flRes :: {-# UNPACK #-} !Int64 }+ | FLUnique { _flIx :: {-# UNPACK #-} !Int+ , _flRes :: {-# UNPACK #-} !Int64 }+ | FLDouble { _flIx :: {-# UNPACK #-} !Int+ , _flRes1 :: {-# UNPACK #-} !Int64+ , _flRes2 :: {-# UNPACK #-} !Int64 }+ deriving (Show)++-- We make the following two assumptions here:+--+-- 1. No diff in any time zone is ever bigger than 24 hours.+--+-- 2. No two consecutive transitions in any zone file ever fall within+-- 48 hours of each other.+--+-- As a consequence, a local time might correspond to two different+-- points in time, but never three.+--+-- TODO(klao): check that these assuptions hold.+localToPOSIX :: TZ -> Int64 -> FromLocal+{-# INLINABLE localToPOSIX #-}+localToPOSIX (TZ trans diffs _) !lTime = res+ where+ lBound = lTime - 86400+ ix = binarySearch trans lBound+ cand1 = lTime - fromIntegral (VU.unsafeIndex diffs ix)+ res = if ix == VU.length trans+ then FLUnique ix cand1 -- TODO(klao): extend when rule handling is added+ else res'+ + ix' = ix + 1+ nextTrans = VU.unsafeIndex trans ix'+ cand2 = lTime - fromIntegral (VU.unsafeIndex diffs ix')+ res' = case (cand1 < nextTrans, cand2 >= nextTrans) of+ (False, False) -> FLGap ix cand1+ (True, False) -> FLUnique ix cand1+ (False, True) -> FLUnique ix' cand2+ (True, True) -> FLDouble ix cand1 cand2++-- | Fully descriptive result of a LocalTime to UTCTime conversion.+--+-- In case of LTUAmbiguous the first result is always earlier than the+-- second one. Generally this only happens during the daylight saving+-- -> standard time transition (ie. summer -> winter). So, the first+-- result corresponds to interpreting the LocalTime as a daylight+-- saving time and the second result as standard time in the given+-- location.+--+-- But, if the location had some kind of administrative time+-- transition during which the clocks jumped back, then both results+-- can correspond to standard times (or daylight saving times) just+-- before and after the transition. You can always inspect the+-- 'timeZoneSummerOnly' field of the returned 'TimeZone's to get an+-- idea what kind of transition was taking place.+--+-- TODO(klao): document the LTUNone behavior.+data LocalToUTCResult+ = LTUNone { _ltuResult :: UTCTime+ , _ltuZone :: TimeZone }+ | LTUUnique { _ltuResult :: UTCTime+ , _ltuZone :: TimeZone }+ | LTUAmbiguous { _ltuFirst :: UTCTime+ , _ltuSecond :: UTCTime+ , _ltuFirstZone :: TimeZone+ , _ltuSecondZone :: TimeZone+ } deriving (Eq, Show)++-- TODO(klao): measure the improvement+dayTimeToInt64 :: RealFrac a => Day -> a -> Int64+{-# INLINE dayTimeToInt64 #-}+dayTimeToInt64 (ModifiedJulianDay d) t = 86400 * (fromIntegral d - unixEpochDay) + floor t+ where+ unixEpochDay = 40587++-- TODO(klao): better name+localTimeToUTCFull :: TZ -> LocalTime -> LocalToUTCResult+localTimeToUTCFull tz@(TZ _ diffs _) (LocalTime day tod) = res+ where+ tid = timeOfDayToTime tod+ t = dayTimeToInt64 day tid+ addDiff i = UTCTime (addDays d day) tid'+ where+ diff = VU.unsafeIndex diffs i+ (d, tid') = (tid - fromIntegral diff) `divMod'` 86400+ res = case localToPOSIX tz t of+ FLGap i _ -> LTUNone (addDiff i) (timeZoneForIx tz i)+ FLUnique i _ -> LTUUnique (addDiff i) (timeZoneForIx tz i)+ FLDouble i _ _ -> LTUAmbiguous (addDiff i) (addDiff (i+1))+ (timeZoneForIx tz i) (timeZoneForIx tz (i+1))++localTimeToUTCTZ :: TZ -> LocalTime -> UTCTime+localTimeToUTCTZ tz lt =+ case localTimeToUTCFull tz lt of+ LTUNone ut _ -> ut+ LTUUnique ut _ -> ut+ LTUAmbiguous _ ut _ _ -> ut
@@ -0,0 +1,164 @@+{- |+Module : Data.Time.Zones+Copyright : (C) 2014 Mihaly Barasz+License : Apache-2.0, see LICENSE+Maintainer : Mihaly Barasz <klao@nilcons.com>+Stability : experimental+-}++{-# LANGUAGE OverloadedStrings #-}++module Data.Time.Zones.Read (+ loadTZFromFile,+ loadSystemTZ,+ loadLocalTZ,+ loadTZFromDB,+ olsonGet,+ ) where++import Control.Applicative+import Control.Monad (unless)+import Data.Binary+import Data.Binary.Get+import qualified Data.ByteString.Char8 as BS+import qualified Data.ByteString.Lazy.Char8 as BL+import Data.Maybe+import Data.Vector.Generic (stream, unstream)+import qualified Data.Vector.Unboxed as VU+import qualified Data.Vector as VB+import Data.Int+import Data.Time.Zones.Types+import System.Environment+import System.IO.Error++import Paths_tz hiding (version)++-- | Reads and parses a time zone information file (in @tzfile(5)@+-- aka. Olson file format) and returns the corresponding TZ data+-- structure.+loadTZFromFile :: FilePath -> IO TZ+loadTZFromFile fname = runGet olsonGet <$> BL.readFile fname++-- | Looks for the time zone file in the system timezone directory, which is+-- @\/usr\/share\/zoneinfo@, or if the @TZDIR@ environment variable is+-- set, then there.+loadSystemTZ :: String -> IO TZ+loadSystemTZ tzName = do+ dir <- fromMaybe "/usr/share/zoneinfo" <$> getEnvMaybe "TZDIR"+ loadTZFromFile $ dir ++ "/" ++ tzName++++-- | Returns the local `TZ` based on the @TZ@ and @TZDIR@+-- environment variables.+--+-- See @tzset(3)@ for details, but basically:+--+-- * If @TZ@ environment variable is unset, we @loadTZFromFile \"\/etc\/localtime\"@.+--+-- * If @TZ@ is set, but empty, we @loadSystemTZ \"UTC\"@.+--+-- * Otherwise, we just @loadSystemTZ@ it.+--+-- Note, this means we don't support POSIX-style @TZ@ variables (like+-- @\"EST5EDT\"@), only those that are explicitly present in the time+-- zone database.+loadLocalTZ :: IO TZ+loadLocalTZ = do+ tzEnv <- getEnvMaybe "TZ"+ case tzEnv of+ Nothing -> loadTZFromFile "/etc/localtime"+ Just "" -> loadSystemTZ "UTC"+ Just z -> loadSystemTZ z++getEnvMaybe :: String -> IO (Maybe String)+getEnvMaybe var =+ fmap Just (getEnv var) `catchIOError`+ (\e -> if isDoesNotExistError e then return Nothing else ioError e)++-- | Reads the corresponding file from the time zone database shipped+-- with this package.+loadTZFromDB :: String -> IO TZ+loadTZFromDB tzName = do+ -- TODO(klao): this probably won't work on Windows.+ fn <- getDataFileName $ tzName ++ ".zone"+ loadTZFromFile fn++olsonGet :: Get TZ+olsonGet = do+ version <- olsonHeader+ case () of+ () | version == '\0' -> olsonGetWith 4 getTime32+ () | version `elem` ['2', '3'] -> do+ skipOlson0+ _ <- olsonHeader+ olsonGetWith 8 getTime64+ -- TODO(klao): read the rule string+ _ -> fail $ "olsonGet: invalid version character: " ++ show version++olsonHeader :: Get Char+olsonHeader = do+ magic <- getByteString 4+ unless (magic == "TZif") $ fail "olsonHeader: bad magic"+ version <- toEnum <$> getInt8+ skip 15+ return version++skipOlson0 :: Get ()+skipOlson0 = do+ tzh_ttisgmtcnt <- getInt32+ tzh_ttisstdcnt <- getInt32+ tzh_leapcnt <- getInt32+ tzh_timecnt <- getInt32+ tzh_typecnt <- getInt32+ tzh_charcnt <- getInt32+ skip $ (4 * tzh_timecnt) + tzh_timecnt + (6 * tzh_typecnt) + tzh_charcnt ++ (8 * tzh_leapcnt) + tzh_ttisstdcnt + tzh_ttisgmtcnt++olsonGetWith :: Int -> Get Int64 -> Get TZ+olsonGetWith szTime getTime = do+ tzh_ttisgmtcnt <- getInt32+ tzh_ttisstdcnt <- getInt32+ tzh_leapcnt <- getInt32+ tzh_timecnt <- getInt32+ tzh_typecnt <- getInt32+ tzh_charcnt <- getInt32+ transitions <- VU.replicateM tzh_timecnt getTime+ indices <- VU.replicateM tzh_timecnt getInt8+ infos <- VU.replicateM tzh_typecnt getTTInfo+ abbrs <- getByteString tzh_charcnt+ skip $ tzh_leapcnt * (szTime + 4)+ skip tzh_ttisstdcnt+ skip tzh_ttisgmtcnt+ let isDst (_,x,_) = x+ gmtOff (x,_,_) = x+ isDstName (_,d,ni) = (d, abbrForInd ni abbrs)+ lInfos = VU.toList infos+ first = head $ filter (not . isDst) lInfos ++ lInfos+ vtrans = VU.cons minBound transitions+ eInfos = VU.cons first $ VU.map (infos VU.!) indices+ vdiffs = VU.map gmtOff eInfos+ vinfos = VB.map isDstName $ unstream $ stream eInfos+ return $ TZ vtrans vdiffs vinfos++abbrForInd :: Int -> BS.ByteString -> String+abbrForInd i = BS.unpack . BS.takeWhile (/= '\0') . BS.drop i++getTTInfo :: Get (Int, Bool, Int) -- (gmtoff, isdst, abbrind)+getTTInfo = (,,) <$> getInt32 <*> get <*> getInt8++getInt8 :: Get Int+{-# INLINE getInt8 #-}+getInt8 = fromIntegral <$> getWord8++getInt32 :: Get Int+{-# INLINE getInt32 #-}+getInt32 = (fromIntegral :: Int32 -> Int) . fromIntegral <$> getWord32be++getTime32 :: Get Int64+{-# INLINE getTime32 #-}+getTime32 = fromIntegral <$> getInt32++getTime64 :: Get Int64+{-# INLINE getTime64 #-}+getTime64 = fromIntegral <$> getWord64be
@@ -0,0 +1,24 @@+{- |+Module : Data.Time.Zones+Copyright : (C) 2014 Mihaly Barasz+License : Apache-2.0, see LICENSE+Maintainer : Mihaly Barasz <klao@nilcons.com>+Stability : experimental+-}++module Data.Time.Zones.Types (+ TZ(..),+ ) where++import Data.Int+import qualified Data.Vector.Unboxed as VU+import qualified Data.Vector as VB++data TZ = TZ {+ _tzTrans :: !(VU.Vector Int64),+ _tzDiffs :: !(VU.Vector Int),+ -- TODO(klao): maybe we should store it as a vector of indices and a+ -- (short) vector of expanded 'TimeZone's, similarly to how it's+ -- stored?+ _tzInfos :: !(VB.Vector (Bool, String)) -- (summer, name)+ } deriving (Eq,Show)
@@ -0,0 +1,201 @@+Apache License+ Version 2.0, January 2004+ http://www.apache.org/licenses/++ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION++ 1. Definitions.++ "License" shall mean the terms and conditions for use, reproduction,+ and distribution as defined by Sections 1 through 9 of this document.++ "Licensor" shall mean the copyright owner or entity authorized by+ the copyright owner that is granting the License.++ "Legal Entity" shall mean the union of the acting entity and all+ other entities that control, are controlled by, or are under common+ control with that entity. For the purposes of this definition,+ "control" means (i) the power, direct or indirect, to cause the+ direction or management of such entity, whether by contract or+ otherwise, or (ii) ownership of fifty percent (50%) or more of the+ outstanding shares, or (iii) beneficial ownership of such entity.++ "You" (or "Your") shall mean an individual or Legal Entity+ exercising permissions granted by this License.++ "Source" form shall mean the preferred form for making modifications,+ including but not limited to software source code, documentation+ source, and configuration files.++ "Object" form shall mean any form resulting from mechanical+ transformation or translation of a Source form, including but+ not limited to compiled object code, generated documentation,+ and conversions to other media types.++ "Work" shall mean the work of authorship, whether in Source or+ Object form, made available under the License, as indicated by a+ copyright notice that is included in or attached to the work+ (an example is provided in the Appendix below).++ "Derivative Works" shall mean any work, whether in Source or Object+ form, that is based on (or derived from) the Work and for which the+ editorial revisions, annotations, elaborations, or other modifications+ represent, as a whole, an original work of authorship. For the purposes+ of this License, Derivative Works shall not include works that remain+ separable from, or merely link (or bind by name) to the interfaces of,+ the Work and Derivative Works thereof.++ "Contribution" shall mean any work of authorship, including+ the original version of the Work and any modifications or additions+ to that Work or Derivative Works thereof, that is intentionally+ submitted to Licensor for inclusion in the Work by the copyright owner+ or by an individual or Legal Entity authorized to submit on behalf of+ the copyright owner. For the purposes of this definition, "submitted"+ means any form of electronic, verbal, or written communication sent+ to the Licensor or its representatives, including but not limited to+ communication on electronic mailing lists, source code control systems,+ and issue tracking systems that are managed by, or on behalf of, the+ Licensor for the purpose of discussing and improving the Work, but+ excluding communication that is conspicuously marked or otherwise+ designated in writing by the copyright owner as "Not a Contribution."++ "Contributor" shall mean Licensor and any individual or Legal Entity+ on behalf of whom a Contribution has been received by Licensor and+ subsequently incorporated within the Work.++ 2. Grant of Copyright License. Subject to the terms and conditions of+ this License, each Contributor hereby grants to You a perpetual,+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable+ copyright license to reproduce, prepare Derivative Works of,+ publicly display, publicly perform, sublicense, and distribute the+ Work and such Derivative Works in Source or Object form.++ 3. Grant of Patent License. Subject to the terms and conditions of+ this License, each Contributor hereby grants to You a perpetual,+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable+ (except as stated in this section) patent license to make, have made,+ use, offer to sell, sell, import, and otherwise transfer the Work,+ where such license applies only to those patent claims licensable+ by such Contributor that are necessarily infringed by their+ Contribution(s) alone or by combination of their Contribution(s)+ with the Work to which such Contribution(s) was submitted. If You+ institute patent litigation against any entity (including a+ cross-claim or counterclaim in a lawsuit) alleging that the Work+ or a Contribution incorporated within the Work constitutes direct+ or contributory patent infringement, then any patent licenses+ granted to You under this License for that Work shall terminate+ as of the date such litigation is filed.++ 4. Redistribution. You may reproduce and distribute copies of the+ Work or Derivative Works thereof in any medium, with or without+ modifications, and in Source or Object form, provided that You+ meet the following conditions:++ (a) You must give any other recipients of the Work or+ Derivative Works a copy of this License; and++ (b) You must cause any modified files to carry prominent notices+ stating that You changed the files; and++ (c) You must retain, in the Source form of any Derivative Works+ that You distribute, all copyright, patent, trademark, and+ attribution notices from the Source form of the Work,+ excluding those notices that do not pertain to any part of+ the Derivative Works; and++ (d) If the Work includes a "NOTICE" text file as part of its+ distribution, then any Derivative Works that You distribute must+ include a readable copy of the attribution notices contained+ within such NOTICE file, excluding those notices that do not+ pertain to any part of the Derivative Works, in at least one+ of the following places: within a NOTICE text file distributed+ as part of the Derivative Works; within the Source form or+ documentation, if provided along with the Derivative Works; or,+ within a display generated by the Derivative Works, if and+ wherever such third-party notices normally appear. The contents+ of the NOTICE file are for informational purposes only and+ do not modify the License. You may add Your own attribution+ notices within Derivative Works that You distribute, alongside+ or as an addendum to the NOTICE text from the Work, provided+ that such additional attribution notices cannot be construed+ as modifying the License.++ You may add Your own copyright statement to Your modifications and+ may provide additional or different license terms and conditions+ for use, reproduction, or distribution of Your modifications, or+ for any such Derivative Works as a whole, provided Your use,+ reproduction, and distribution of the Work otherwise complies with+ the conditions stated in this License.++ 5. Submission of Contributions. Unless You explicitly state otherwise,+ any Contribution intentionally submitted for inclusion in the Work+ by You to the Licensor shall be under the terms and conditions of+ this License, without any additional terms or conditions.+ Notwithstanding the above, nothing herein shall supersede or modify+ the terms of any separate license agreement you may have executed+ with Licensor regarding such Contributions.++ 6. Trademarks. This License does not grant permission to use the trade+ names, trademarks, service marks, or product names of the Licensor,+ except as required for reasonable and customary use in describing the+ origin of the Work and reproducing the content of the NOTICE file.++ 7. Disclaimer of Warranty. Unless required by applicable law or+ agreed to in writing, Licensor provides the Work (and each+ Contributor provides its Contributions) on an "AS IS" BASIS,+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or+ implied, including, without limitation, any warranties or conditions+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A+ PARTICULAR PURPOSE. You are solely responsible for determining the+ appropriateness of using or redistributing the Work and assume any+ risks associated with Your exercise of permissions under this License.++ 8. Limitation of Liability. In no event and under no legal theory,+ whether in tort (including negligence), contract, or otherwise,+ unless required by applicable law (such as deliberate and grossly+ negligent acts) or agreed to in writing, shall any Contributor be+ liable to You for damages, including any direct, indirect, special,+ incidental, or consequential damages of any character arising as a+ result of this License or out of the use or inability to use the+ Work (including but not limited to damages for loss of goodwill,+ work stoppage, computer failure or malfunction, or any and all+ other commercial damages or losses), even if such Contributor+ has been advised of the possibility of such damages.++ 9. Accepting Warranty or Additional Liability. While redistributing+ the Work or Derivative Works thereof, You may choose to offer,+ and charge a fee for, acceptance of support, warranty, indemnity,+ or other liability obligations and/or rights consistent with this+ License. However, in accepting such obligations, You may act only+ on Your own behalf and on Your sole responsibility, not on behalf+ of any other Contributor, and only if You agree to indemnify,+ defend, and hold each Contributor harmless for any liability+ incurred by, or claims asserted against, such Contributor by reason+ of your accepting any such warranty or additional liability.++ END OF TERMS AND CONDITIONS++ APPENDIX: How to apply the Apache License to your work.++ To apply the Apache License to your work, attach the following+ boilerplate notice, with the fields enclosed by brackets "{}"+ replaced with your own identifying information. (Don't include+ the brackets!) The text should be enclosed in the appropriate+ comment syntax for the file format. We also recommend that a+ file or class name and description of purpose be included on the+ same "printed page" as the copyright notice for easier+ identification within third-party archives.++ Copyright {yyyy} {name of copyright owner}++ Licensed under the Apache License, Version 2.0 (the "License");+ you may not use this file except in compliance with the License.+ You may obtain a copy of the License at++ http://www.apache.org/licenses/LICENSE-2.0++ Unless required by applicable law or agreed to in writing, software+ distributed under the License is distributed on an "AS IS" BASIS,+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+ See the License for the specific language governing permissions and+ limitations under the License.
@@ -0,0 +1,4 @@+haskell-tz+==========++Haskell package shipping the standard time zone database & library to use with it
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
@@ -0,0 +1,123 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE TemplateHaskell #-}++module Main where++import Criterion.Main+import Control.Lens+import Data.Bits+import Data.Time+import qualified Data.Thyme.Calendar.OrdinalDate as Th+import qualified Data.Thyme as Th+import Data.Time.Calendar.OrdinalDate++data YD = YD {+ _ydYear :: {-# UNPACK #-} !Int,+ _ydDay :: {-# UNPACK #-} !Int+ } deriving (Show)++makeLenses ''YD++toOrdinalDate' :: Int -> YD+{-# INLINE toOrdinalDate' #-}+toOrdinalDate' !day = YD (fromIntegral y) (fromIntegral d)+ where+ (!y,!d) = toOrdinalDate $ ModifiedJulianDay $ fromIntegral day++toOrdinalDateTh :: Int -> YD+{-# INLINE toOrdinalDateTh #-}+toOrdinalDateTh !day = YD y d+ where+ Th.OrdinalDate y d = Th.ModifiedJulianDay day ^. Th.ordinalDate++toOrdinalDateI :: Int -> YD+toOrdinalDateI !mjd = YD year yd+ where+ a = mjd + 678575+ quadcent = div a 146097+ b = mod a 146097+ cent = min (div b 36524) 3+ c = b - (cent * 36524)+ quad = div c 1461+ d = mod c 1461+ y = min (div d 365) 3+ yd = d - (y * 365) + 1+ year = quadcent * 400 + cent * 100 + quad * 4 + y + 1++toOrdinalDateDivMod :: Int -> YD+{-# NOINLINE toOrdinalDateDivMod #-}+toOrdinalDateDivMod !mjd = YD year yd+ where+ a = mjd + 678575+ (quadcent,b) = a `divMod` 146097+ cent = min (b `quot` 36524) 3+ c = b - (cent * 36524)+ (!quad,!d) = c `quotRem` 1461+ y = min (d `quot` 365) 3+ yd = d - (y * 365) + 1+ year = quadcent * 400 + cent * 100 + quad * 4 + y + 1++--------------------------------------------------------------------------------++isLeapYearI :: Int -> Bool+{-# INLINABLE isLeapYearI #-}+isLeapYearI !y = y .&. 3 == 0 && (r100 /= 0 || d100 .&. 3 == 0)+ where+ (d100,r100) = y `quotRem` 100++countLeapYears :: Int -> Int+{-# INLINE countLeapYears #-}+countLeapYears !ys = ys `shiftR` 2 - cs + cs `shiftR` 2+ where+ cs = ys `quot` 100++toOrdinalB0 :: Int -> YD+{-# INLINE toOrdinalB0 #-}+toOrdinalB0 b0 = res+ where+ (y, r) = (400 * b0) `quotRem` 146097+ ls = countLeapYears y+ res = if r < 146097 - 400+ then YD y (b0 - 365*y - ls)+ else let y' = if isLeapYearI (y+1) then y else y+1+ in YD y' (b0 - 365*y' - ls)++toOrdinalPr :: Int -> YD+{-# INLINABLE toOrdinalPr #-}+toOrdinalPr !mjd | b0 >= 0 = toOrdinalB0 b0+ | otherwise = toOrdinalB0 m & ydYear +~ d * 400+ where+ b0 = mjd + 678575+ (d,m) = b0 `divMod` 146097++test :: Integer -> Int -> Int -> IO ()+test y m md = do+ let d = fromIntegral $ toModifiedJulianDay $ fromGregorian y m md+ print $ d + 678575+ print $ toOrdinalDate' d+ let YD y' yd = toOrdinalPr d+ print $ YD (y'+1) (yd+1)+++benchmarks :: [Benchmark]+benchmarks = [+ bgroup "orig" [+ bench "toOrdinalDate" $ nf toOrdinalDate d1,+ bench "toOrdinalDate'" $ whnf toOrdinalDate' d1i+ ],+ bgroup "thyme" [+ bench "toOrdinalDateTh" $ whnf toOrdinalDateTh d1i+ ],+ bgroup "optim" [+ bench "directCopy" $ whnf toOrdinalDateI d1i,+ bench "divModQuotRem" $ whnf toOrdinalDateDivMod d1i,+ bench "divModPr" $ whnf toOrdinalPr d1i+ ]+ ]+ where+ d1 = fromGregorian 2014 3 25+ d1i = fromIntegral $ toModifiedJulianDay d1++main :: IO ()+main = do+ defaultMain benchmarks
@@ -0,0 +1,114 @@+module Main (main) where++import Bindings.Posix.Time+import Criterion.Main+import Data.Fixed+import Data.Int+import Data.Time+import Data.Time.LocalTime.TimeZone.Olson+import Data.Time.LocalTime.TimeZone.Series+import Data.Time.Zones+import System.Posix.Env++setupTZ :: String -> IO TZ+setupTZ zoneName = do+ setEnv "TZ" zoneName True+ c'tzset+ loadSystemTZ zoneName++mkLocal :: Integer -> Int -> Int -> Int -> Int -> Pico -> LocalTime+mkLocal y m d hh mm ss+ = LocalTime (fromGregorian y m d) (TimeOfDay hh mm ss)++mkUTC :: Integer -> Int -> Int -> Int -> Int -> Pico -> UTCTime+mkUTC y m d hh mm ss+ = UTCTime (fromGregorian y m d) (timeOfDayToTime $ TimeOfDay hh mm ss)++utcToLocalNano :: TZ -> Int64 -> Int64+{-# INLINE utcToLocalNano #-}+utcToLocalNano tz t = t + 1000000000 * fromIntegral diff+ where+ diff = diffForPOSIX tz (t `div` 1000000000)++tzBenchmarks :: TZ -> TimeZoneSeries -> [Benchmark]+tzBenchmarks tz series = [+ bgroup "rawDiff" [+ bench "past" $ whnf (diffForPOSIX tz) (-10000000000), -- Way back in the past+ bench "epoch" $ whnf (diffForPOSIX tz) 0,+ bench "now" $ whnf (diffForPOSIX tz) 1395572400,+ bench "future" $ whnf (diffForPOSIX tz) 10000000000 -- Way in the future+ ],+ bgroup "utcToLocalNano" [+ bench "past" $ whnf (utcToLocalNano tz) (-4000000000000000000),+ bench "epoch" $ whnf (utcToLocalNano tz) 0,+ bench "now" $ whnf (utcToLocalNano tz) 1395572400000000000,+ bench "future" $ whnf (utcToLocalNano tz) 4000000000000000000+ ],+ bgroup "rawDiffUTC" [+ bench "now" $ whnf (diffForPOSIX utcTZ) 1395572400+ ],+ bgroup "basicUTCToLocalTime" [+ bench "past" $ nf (utcToLocalTime cetTZ) ut0,+ bench "now" $ nf (utcToLocalTime cetTZ) ut1,+ bench "future" $ nf (utcToLocalTime cetTZ) ut2+ ],+ bgroup "utcToLocalTimeTZ" [+ bench "past" $ nf (utcToLocalTimeTZ tz) ut0,+ bench "now" $ nf (utcToLocalTimeTZ tz) ut1,+ bench "future" $ nf (utcToLocalTimeTZ tz) ut2+ ],+ bgroup "utcToLocalTimeSeries" [+ bench "past" $ nf (utcToLocalTime' series) ut0,+ bench "now" $ nf (utcToLocalTime' series) ut1,+ bench "future" $ nf (utcToLocalTime' series) ut2+ ],+ bgroup "timeZoneForPOSIX" [+ bench "past" $ nf (timeZoneForPOSIX tz) (-10000000000),+ bench "now" $ nf (timeZoneForPOSIX tz) 1395572400,+ bench "future" $ nf (timeZoneForPOSIX tz) 10000000000+ ],+ bgroup "timeZoneForUTCTime" [+ bench "past" $ nf (timeZoneForUTCTime tz) ut0,+ bench "now" $ nf (timeZoneForUTCTime tz) ut1,+ bench "future" $ nf (timeZoneForUTCTime tz) ut2+ ],+ bgroup "timeZoneFromSeries" [+ bench "past" $ nf (timeZoneFromSeries series) ut0,+ bench "now" $ nf (timeZoneFromSeries series) ut1,+ bench "future" $ nf (timeZoneFromSeries series) ut2+ ],+ bgroup "localToPOSIX" [+ bench "past" $ whnf (localToPOSIX tz) (-10000000000),+ bench "now" $ whnf (localToPOSIX tz) 1396142115,+ bench "future" $ whnf (localToPOSIX tz) 10000000000+ ],+ bgroup "basicLocalTimeToUTC" [+ bench "past" $ nf (localTimeToUTC cetTZ) lt0,+ bench "now" $ nf (localTimeToUTC cetTZ) lt1,+ bench "future" $ nf (localTimeToUTC cetTZ) lt2+ ],+ bgroup "localTimeToUTCTZ" [+ bench "past" $ nf (localTimeToUTCTZ tz) lt0,+ bench "now" $ nf (localTimeToUTCTZ tz) lt1,+ bench "future" $ nf (localTimeToUTCTZ tz) lt2+ ],+ bgroup "localTimeToUTCSeries" [+ bench "past" $ nf (localTimeToUTC' series) lt0,+ bench "now" $ nf (localTimeToUTC' series) lt1,+ bench "future" $ nf (localTimeToUTC' series) lt2+ ]+ ]+ where+ cetTZ = TimeZone 60 False "CET"+ ut0 = mkUTC 1500 07 07 07 07 07+ ut1 = mkUTC 2014 03 23 15 15 15+ ut2 = mkUTC 2222 10 10 10 10 10+ lt0 = mkLocal 1500 07 07 07 07 07+ lt1 = mkLocal 2014 03 30 03 15 15+ lt2 = mkLocal 2222 10 10 10 10 10++main :: IO ()+main = do+ tzBudapest <- setupTZ "Europe/Budapest"+ seriesBudapest <- getTimeZoneSeriesFromOlsonFile "/usr/share/zoneinfo/Europe/Budapest"+ defaultMain $ tzBenchmarks tzBudapest seriesBudapest
@@ -0,0 +1,99 @@+{-# LANGUAGE ViewPatterns #-}++module Main (main) where++import Bindings.Posix.Time+import Bindings.Posix.Sys.Types+import Criterion.Main+import Foreign.Safe+import Foreign.C+import System.Posix.Env++setupTZ :: String -> IO ()+setupTZ zoneName = do+ setEnv "TZ" zoneName True+ c'tzset++data C_tm = C_tm {+ _tm_sec :: {-# UNPACK #-} !CInt,+ _tm_min :: {-# UNPACK #-} !CInt,+ _tm_hour :: {-# UNPACK #-} !CInt,+ _tm_mday :: {-# UNPACK #-} !CInt,+ _tm_mon :: {-# UNPACK #-} !CInt,+ _tm_year :: {-# UNPACK #-} !CInt,+ _tm_wday :: {-# UNPACK #-} !CInt,+ _tm_yday :: {-# UNPACK #-} !CInt,+ _tm_isdst :: {-# UNPACK #-} !CInt+ -- _tm_gmtoff :: {-# UNPACK #-} !CInt+ -- _tm_zone :: {-# UNPACK #-} !Ptr CString (??)+ } deriving (Show)++instance Storable C_tm where+ -- Overestimate; it's 10 or 11 based on architecture.+ sizeOf _ = 16 * sizeOf (undefined :: CInt)+ alignment _ = alignment (undefined :: CLong)+ peek (castPtr -> p) = do+ s <- peekElemOff p 0+ mi <- peekElemOff p 1+ h <- peekElemOff p 2+ d <- peekElemOff p 3+ m <- peekElemOff p 4+ y <- peekElemOff p 5+ wd <- peekElemOff p 6+ yd <- peekElemOff p 7+ idst <- peekElemOff p 8+ return $ C_tm s mi h d m y wd yd idst+ poke (castPtr -> p) (C_tm s mi h d m y wd yd idst) = do+ pokeElemOff p 0 s+ pokeElemOff p 1 mi+ pokeElemOff p 2 h+ pokeElemOff p 3 d+ pokeElemOff p 4 m+ pokeElemOff p 5 y+ pokeElemOff p 6 wd+ pokeElemOff p 7 yd+ pokeElemOff p 8 idst++foreign import ccall unsafe "time.h localtime_r" c_localtime_r+ :: Ptr C'time_t -> Ptr C_tm -> IO (Ptr C_tm)++localtime :: Int -> IO C_tm+localtime t = with (fromIntegral t) $ \ptime ->+ alloca $ \ptm -> do+ res <- c_localtime_r ptime ptm+ if res /= nullPtr+ then peek res+ else fail "c_localtime_r failed"++-- This just wraps the binding from Bindings.Posix.Time.+--+-- Because it's foreign import ccall _safe_, it's more than two times+-- slower!+localtime' :: Int -> IO C'tm+localtime' t = with (fromIntegral t) $ \ptime ->+ alloca $ \ptm -> do+ res <- c'localtime_r ptime ptm+ if res /= nullPtr+ then peek res+ else fail "c'localtime_r failed"++benchmarks :: [Benchmark]+benchmarks = [+ bgroup "c'localtime_r" [+ bench "past" $ whnfIO $ localtime' (-2100000000),+ bench "epoch" $ whnfIO $ localtime' 0,+ bench "now" $ whnfIO $ localtime' 1395572400,+ bench "future" $ whnfIO $ localtime' 2100000000+ ],+ bgroup "our_localtime_r" [+ bench "past" $ whnfIO $ localtime (-2100000000),+ bench "epoch" $ whnfIO $ localtime 0,+ bench "now" $ whnfIO $ localtime 1395572400,+ bench "future" $ whnfIO $ localtime 2100000000+ ]+ ]++main :: IO ()+main = do+ setupTZ "Europe/Budapest"+ defaultMain benchmarks
@@ -0,0 +1,168 @@+{-# LANGUAGE TemplateHaskell #-}+{-# OPTIONS_GHC -fno-warn-missing-signatures #-}++module Main (main) where++import Bindings.Posix.Time+import Data.Bits+import Data.Int+import Data.IORef+import Data.Time+import Data.Time.Clock.POSIX+import Data.Time.Zones+import Test.Framework.Providers.HUnit+import Test.Framework.Providers.QuickCheck2+import Test.Framework.TH+import Test.HUnit hiding (Test, assert)+import Test.QuickCheck+import Test.QuickCheck.Monadic+import System.Posix.Env+import System.IO.Unsafe++setupTZ :: String -> IO TZ+setupTZ zoneName = do+ setEnv "TZ" zoneName True+ c'tzset+ loadSystemTZ zoneName++onceIO :: IO a -> IO a+{-# NOINLINE onceIO #-}+onceIO op = opWrap+ where+ {-# NOINLINE var #-}+ var = unsafePerformIO $ newIORef Nothing+ opWrap = do+ v <- readIORef var+ case v of+ Just x -> return x+ Nothing -> do+ x <- op+ atomicWriteIORef var $ Just x+ return x++-- On the Int32 range of POSIX times we should replicate the behavior+-- perfectly.+--+-- * After year 2038 we normally run into a range where the+-- envvar-like "rule" part of the TZif should be interpreted, which we+-- don't do yet.+--+-- * And below around -2^55 the localtime_r C function starts failing+-- with "value too large".+checkTimeZone :: String -> Int32 -> Property+checkTimeZone zoneName = prop+ where+ setup = onceIO $ setupTZ zoneName+ prop ut = monadicIO $ do+ tz <- run $ setup+ run $ print ut+ timeZone <- run $ getTimeZone $ posixSecondsToUTCTime $ fromIntegral ut+ run $ timeZoneForPOSIX tz (fromIntegral ut) @?= timeZone++-- See comment for the checkTimeZone.+checkTimeZone64 :: String -> Property+checkTimeZone64 zoneName = prop+ where+ setup = onceIO $ setupTZ zoneName+ two31 = 2147483647+ prop = monadicIO $ do+ tz <- run $ setup+ ut <- pick $ oneof [arbitrary, choose (-two31, two31)]+ pre $ ut < two31 && ut > -(1 `shiftL` 55)+ -- This is important. On 32 bit machines we want to limit+ -- testing to the Int range.+ pre $ ut > fromIntegral (minBound :: Int)+ timeZone <- run $ getTimeZone $ posixSecondsToUTCTime $ fromIntegral ut+ run $ timeZoneForPOSIX tz ut @?= timeZone++-- On the Int32 range of POSIX times we should mostly replicate the+-- behavior.+--+-- * After year 2038 we normally run into a range where the+-- envvar-like "rule" part of the TZif should be interpreted, which we+-- don't do yet.+--+-- * And the very first time diff in most of the TZif files is usually+-- the "Local Mean Time", which is generally a fractional number of+-- minutes, so we would get difference with getTimeZone too. Most of+-- the locations switch to some more standard time zone before or+-- around 1900, which happens to be less than -2^31 POSIX time. But+-- in some locations this transition falls within the Int32 range+-- (eg. China), so we can supply another lower bound.+checkLocalTime :: String -> Maybe Int32 -> Int32 -> Property+checkLocalTime zoneName mLower = prop+ where+ setup = onceIO $ setupTZ zoneName+ prop ut = monadicIO $ do+ case mLower of+ Nothing -> return ()+ Just lower -> pre $ ut > lower+ tz <- run $ setup+ let utcTime = posixSecondsToUTCTime $ fromIntegral ut+ timeZone <- run $ getTimeZone utcTime+ run $ utcToLocalTimeTZ tz utcTime @?= utcToLocalTime timeZone utcTime+++case_utcTZ_is_utc = timeZoneForPOSIX utcTZ 0 @?= utc++case_utcTZ_zero_diff = diffForPOSIX utcTZ 0 @?= 0++prop_Budapest_correct_TimeZone = checkTimeZone64 "Europe/Budapest"+prop_New_York_correct_TimeZone = checkTimeZone64 "America/New_York"+prop_Los_Angeles_correct_TimeZone = checkTimeZone64 "America/Los_Angeles"+prop_Shanghai_correct_TimeZone = checkTimeZone64 "Asia/Shanghai"+prop_Jerusalem_correct_TimeZone = checkTimeZone64 "Asia/Jerusalem"+prop_Antarctica_Palmer_correct_TimeZone = checkTimeZone64 "Antarctica/Palmer"+prop_Melbourne_correct_TimeZone = checkTimeZone64 "Australia/Melbourne"++prop_Budapest_correct_LocalTime = checkLocalTime "Europe/Budapest" Nothing+prop_New_York_correct_LocalTime = checkLocalTime "America/New_York" Nothing+prop_Los_Angeles_correct_LocalTime = checkLocalTime "America/Los_Angeles" Nothing+prop_Shanghai_correct_LocalTime = checkLocalTime "Asia/Shanghai" $ Just (-1325491558)+prop_Jerusalem_correct_LocalTime = checkLocalTime "Asia/Jerusalem" $ Just (-1641003641)+prop_Antarctica_Palmer_correct_LocalTime = checkLocalTime "Antarctica/Palmer" Nothing+prop_Melbourne_correct_LocalTime = checkLocalTime "Australia/Melbourne" Nothing++case_DB_utc_is_utc = do+ tz <- loadTZFromDB "UTC"+ tz @?= utcTZ++mkLocal y m d hh mm ss+ = LocalTime (fromGregorian y m d) (TimeOfDay hh mm ss)++mkUTC y m d hh mm ss+ = UTCTime (fromGregorian y m d) (timeOfDayToTime $ TimeOfDay hh mm ss)++case_Budapest_LocalToUTC = do+ tz <- loadTZFromDB "Europe/Budapest"+ let zWinter = TimeZone 60 False "CET"+ zSummer = TimeZone 120 True "CEST"+ -- Handle std times:+ localTimeToUTCFull tz (mkLocal 1970 01 01 01 00 00) @?=+ LTUUnique (mkUTC 1970 01 01 00 00 00) zWinter+ localTimeToUTCFull tz (mkLocal 2014 03 23 00 15 15.15) @?=+ LTUUnique (mkUTC 2014 03 22 23 15 15.15) zWinter++ -- Handle time in winter->summer transition:+ localTimeToUTCFull tz (mkLocal 2014 03 30 02 15 15) @?=+ LTUNone (mkUTC 2014 03 30 01 15 15) zWinter+ -- That utc time is acually in dst already:+ localTimeToUTCFull tz (mkLocal 2014 03 30 03 15 15) @?=+ LTUUnique (mkUTC 2014 03 30 01 15 15) zSummer++ -- Handle dst times:+ localTimeToUTCFull tz (mkLocal 2014 04 05 06 07 08.987654321999) @?=+ LTUUnique (mkUTC 2014 04 05 04 07 08.987654321999) zSummer++ -- Handle time in summer->winter transition:+ localTimeToUTCFull tz (mkLocal 2013 10 27 02 15 15) @?=+ LTUAmbiguous (mkUTC 2013 10 27 00 15 15) (mkUTC 2013 10 27 01 15 15)+ zSummer zWinter++main :: IO ()+main = do+ -- When we are running 'cabal test' the package is not yet+ -- installed, so we want to use the data directory from within the+ -- sources.+ setEnv "tz_datadir" "./tzdata" True+ $defaultMainGenerator
@@ -0,0 +1,118 @@+Name: tz+Version: 0.0.0.1+License: Apache-2.0+License-File: LICENSE+Author: Mihaly Barasz, Gergely Risko+Maintainer: Mihaly Barasz <klao@nilcons.com>, Gergely Risko <errge@nilcons.com>+Cabal-Version: >= 1.10+Build-Type: Simple+Category: Data+Stability: experimental+Homepage: https://github.com/nilcons/haskell-tz+Bug-Reports: https://github.com/nilcons/haskell-tz/issues+Synopsis: Time zones database and library+Description:+ This package has two main goals:+ .+ * To distribute the standard time zone database in a cabal package,+ so that it can be used in Haskell programs uniformly on all+ platforms.+ .+ * To provide a library that can read time zone info files+ (aka. Olson files), and does time zone conversions in a /pure/ and+ /efficient/ way.+ .+ The current version ships the @2014b@ version of the time zone+ database. See: <http://www.iana.org/time-zones> for more info.+ .+ The package is currently in a draft phase, I'm still experimenting+ with different ideas wrt. scope\/API\/implementation\/etc. All comments+ are welcome!++Data-Dir: tzdata+-- We have to explicitly list all the directories because of Cabal's limitations.+Data-Files: *.tab *.zone Chile/*.zone Etc/*.zone Canada/*.zone Indian/*.zone Africa/*.zone Asia/*.zone Antarctica/*.zone Europe/*.zone America/*.zone America/Kentucky/*.zone America/North_Dakota/*.zone America/Argentina/*.zone America/Indiana/*.zone Mexico/*.zone Brazil/*.zone Atlantic/*.zone Arctic/*.zone Australia/*.zone Pacific/*.zone US/*.zone++Extra-Source-Files:+ README.md++Source-Repository head+ Type: git+ Location: https://github.com/nilcons/haskell-tz.git++Library+ Exposed-Modules:+ Data.Time.Zones,+ Data.Time.Zones.Types,+ Data.Time.Zones.Read+ Other-Modules: Paths_tz+ Default-Language: Haskell2010+ GHC-Options: -Wall+ Build-Depends:+ base >= 4 && < 5,+ binary >= 0.5 && < 0.8,+ bytestring >= 0.9 && < 0.11,+ time >= 1.2 && < 1.5,+ vector >= 0.9 && < 0.11++Test-Suite tests+ Default-Language: Haskell2010+ Type: exitcode-stdio-1.0+ HS-Source-Dirs: tests+ Main-Is: testTZ.hs+ GHC-Options: -Wall+ Build-Depends:+ tz,+ base >= 4 && < 5,+ bindings-posix >= 1.2 && < 2,+ HUnit >= 1.2 && < 1.3,+ QuickCheck >= 2.4 && < 3,+ test-framework >= 0.4 && < 1,+ test-framework-hunit >= 0.2 && < 0.4,+ test-framework-quickcheck2 >= 0.2 && < 0.4,+ test-framework-th >= 0.2 && < 0.4,+ time >= 1.2 && < 1.5,+ unix >= 2.6 && < 3++Benchmark bench+ Default-Language: Haskell2010+ Type: exitcode-stdio-1.0+ HS-Source-Dirs: benchmarks+ Main-Is: benchTZ.hs+ GHC-Options: -Wall -O2+ Build-Depends:+ tz,+ base >= 4 && < 5,+ bindings-posix >= 1.2 && < 2,+ criterion >= 0.8 && < 0.9,+ time >= 1.2 && < 1.5,+ timezone-olson,+ timezone-series,+ unix >= 2.6 && < 3++Benchmark bench_c+ Default-Language: Haskell2010+ Type: exitcode-stdio-1.0+ HS-Source-Dirs: benchmarks+ Main-Is: bench_c_localtime.hs+ GHC-Options: -Wall -O2+ Build-Depends:+ tz,+ base >= 4 && < 5,+ bindings-posix >= 1.2 && < 2,+ criterion >= 0.8 && < 0.9,+ unix >= 2.6 && < 3++Benchmark bench_greg+ Default-Language: Haskell2010+ Type: exitcode-stdio-1.0+ HS-Source-Dirs: benchmarks+ Main-Is: benchGreg.hs+ GHC-Options: -Wall -O2+ Build-Depends:+ tz,+ base >= 4 && < 5,+ criterion >= 0.8 && < 0.9,+ lens,+ thyme,+ time
binary file changed (absent → 156 bytes)
binary file changed (absent → 378 bytes)
binary file changed (absent → 180 bytes)
binary file changed (absent → 734 bytes)
binary file changed (absent → 201 bytes)
binary file changed (absent → 201 bytes)
binary file changed (absent → 224 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 232 bytes)
binary file changed (absent → 194 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 140 bytes)
binary file changed (absent → 1906 bytes)
binary file changed (absent → 1679 bytes)
binary file changed (absent → 2049 bytes)
binary file changed (absent → 224 bytes)
binary file changed (absent → 194 bytes)
binary file changed (absent → 229 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 1509 bytes)
binary file changed (absent → 665 bytes)
binary file changed (absent → 234 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 245 bytes)
binary file changed (absent → 669 bytes)
binary file changed (absent → 269 bytes)
binary file changed (absent → 669 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 140 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 139 bytes)
binary file changed (absent → 178 bytes)
binary file changed (absent → 140 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 195 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 204 bytes)
binary file changed (absent → 160 bytes)
binary file changed (absent → 210 bytes)
binary file changed (absent → 215 bytes)
binary file changed (absent → 269 bytes)
binary file changed (absent → 211 bytes)
binary file changed (absent → 225 bytes)
binary file changed (absent → 224 bytes)
binary file changed (absent → 156 bytes)
binary file changed (absent → 195 bytes)
binary file changed (absent → 173 bytes)
binary file changed (absent → 224 bytes)
binary file changed (absent → 641 bytes)
binary file changed (absent → 684 bytes)
binary file changed (absent → 1556 bytes)
binary file changed (absent → 2353 bytes)
binary file changed (absent → 2358 bytes)
binary file changed (absent → 156 bytes)
binary file changed (absent → 194 bytes)
binary file changed (absent → 882 bytes)
binary file changed (absent → 1061 bytes)
binary file changed (absent → 1103 bytes)
binary file changed (absent → 1103 bytes)
binary file changed (absent → 1103 bytes)
binary file changed (absent → 1119 bytes)
binary file changed (absent → 1117 bytes)
binary file changed (absent → 1147 bytes)
binary file changed (absent → 1103 bytes)
binary file changed (absent → 1075 bytes)
binary file changed (absent → 1117 bytes)
binary file changed (absent → 1145 bytes)
binary file changed (absent → 1131 bytes)
binary file changed (absent → 1103 bytes)
binary file changed (absent → 194 bytes)
binary file changed (absent → 2036 bytes)
binary file changed (absent → 319 bytes)
binary file changed (absent → 2353 bytes)
binary file changed (absent → 1022 bytes)
binary file changed (absent → 1574 bytes)
binary file changed (absent → 330 bytes)
binary file changed (absent → 574 bytes)
binary file changed (absent → 962 bytes)
binary file changed (absent → 281 bytes)
binary file changed (absent → 630 bytes)
binary file changed (absent → 231 bytes)
binary file changed (absent → 2377 bytes)
binary file changed (absent → 1061 bytes)
binary file changed (absent → 2084 bytes)
binary file changed (absent → 2001 bytes)
binary file changed (absent → 1466 bytes)
binary file changed (absent → 240 bytes)
binary file changed (absent → 1103 bytes)
binary file changed (absent → 186 bytes)
binary file changed (absent → 177 bytes)
binary file changed (absent → 3559 bytes)
binary file changed (absent → 1508 bytes)
binary file changed (absent → 319 bytes)
binary file changed (absent → 1103 bytes)
binary file changed (absent → 315 bytes)
binary file changed (absent → 207 bytes)
binary file changed (absent → 1973 bytes)
binary file changed (absent → 194 bytes)
binary file changed (absent → 700 bytes)
binary file changed (absent → 2067 bytes)
binary file changed (absent → 1033 bytes)
binary file changed (absent → 2427 bytes)
binary file changed (absent → 2202 bytes)
binary file changed (absent → 156 bytes)
binary file changed (absent → 2388 bytes)
binary file changed (absent → 670 bytes)
binary file changed (absent → 236 bytes)
binary file changed (absent → 2342 bytes)
binary file changed (absent → 1649 bytes)
binary file changed (absent → 714 bytes)
binary file changed (absent → 2192 bytes)
binary file changed (absent → 1863 bytes)
binary file changed (absent → 3193 bytes)
binary file changed (absent → 1871 bytes)
binary file changed (absent → 156 bytes)
binary file changed (absent → 156 bytes)
binary file changed (absent → 292 bytes)
binary file changed (absent → 177 bytes)
binary file changed (absent → 256 bytes)
binary file changed (absent → 3424 bytes)
binary file changed (absent → 2411 bytes)
binary file changed (absent → 440 bytes)
binary file changed (absent → 1649 bytes)
binary file changed (absent → 2411 bytes)
binary file changed (absent → 1705 bytes)
binary file changed (absent → 1887 bytes)
binary file changed (absent → 1709 bytes)
binary file changed (absent → 1397 bytes)
binary file changed (absent → 1677 bytes)
binary file changed (absent → 1761 bytes)
binary file changed (absent → 1649 bytes)
binary file changed (absent → 1914 bytes)
binary file changed (absent → 2032 bytes)
binary file changed (absent → 481 bytes)
binary file changed (absent → 1119 bytes)
binary file changed (absent → 2336 bytes)
binary file changed (absent → 2755 bytes)
binary file changed (absent → 2335 bytes)
binary file changed (absent → 2411 bytes)
binary file changed (absent → 194 bytes)
binary file changed (absent → 217 bytes)
binary file changed (absent → 395 bytes)
binary file changed (absent → 2819 bytes)
binary file changed (absent → 2755 bytes)
binary file changed (absent → 194 bytes)
binary file changed (absent → 742 bytes)
binary file changed (absent → 437 bytes)
binary file changed (absent → 602 bytes)
binary file changed (absent → 156 bytes)
binary file changed (absent → 231 bytes)
binary file changed (absent → 1402 bytes)
binary file changed (absent → 1550 bytes)
binary file changed (absent → 1147 bytes)
binary file changed (absent → 2257 bytes)
binary file changed (absent → 1442 bytes)
binary file changed (absent → 717 bytes)
binary file changed (absent → 1604 bytes)
binary file changed (absent → 1670 bytes)
binary file changed (absent → 3137 bytes)
binary file changed (absent → 1402 bytes)
binary file changed (absent → 2134 bytes)
binary file changed (absent → 3477 bytes)
binary file changed (absent → 156 bytes)
binary file changed (absent → 2270 bytes)
binary file changed (absent → 3519 bytes)
binary file changed (absent → 2105 bytes)
binary file changed (absent → 2350 bytes)
binary file changed (absent → 714 bytes)
binary file changed (absent → 2363 bytes)
binary file changed (absent → 2363 bytes)
binary file changed (absent → 2363 bytes)
binary file changed (absent → 1508 bytes)
binary file changed (absent → 177 bytes)
binary file changed (absent → 2094 bytes)
binary file changed (absent → 294 bytes)
binary file changed (absent → 327 bytes)
binary file changed (absent → 1457 bytes)
binary file changed (absent → 156 bytes)
binary file changed (absent → 642 bytes)
binary file changed (absent → 574 bytes)
binary file changed (absent → 229 bytes)
binary file changed (absent → 2105 bytes)
binary file changed (absent → 1916 bytes)
binary file changed (absent → 714 bytes)
binary file changed (absent → 980 bytes)
binary file changed (absent → 1916 bytes)
binary file changed (absent → 642 bytes)
binary file changed (absent → 1103 bytes)
binary file changed (absent → 2342 bytes)
binary file changed (absent → 612 bytes)
binary file changed (absent → 2505 bytes)
binary file changed (absent → 463 bytes)
binary file changed (absent → 2001 bytes)
binary file changed (absent → 1911 bytes)
binary file changed (absent → 2427 bytes)
binary file changed (absent → 2324 bytes)
binary file changed (absent → 156 bytes)
binary file changed (absent → 3638 bytes)
binary file changed (absent → 156 bytes)
binary file changed (absent → 156 bytes)
binary file changed (absent → 156 bytes)
binary file changed (absent → 156 bytes)
binary file changed (absent → 560 bytes)
binary file changed (absent → 264 bytes)
binary file changed (absent → 1514 bytes)
binary file changed (absent → 2185 bytes)
binary file changed (absent → 2342 bytes)
binary file changed (absent → 3477 bytes)
binary file changed (absent → 156 bytes)
binary file changed (absent → 2875 bytes)
binary file changed (absent → 156 bytes)
binary file changed (absent → 2067 bytes)
binary file changed (absent → 2865 bytes)
binary file changed (absent → 2288 bytes)
binary file changed (absent → 1966 bytes)
binary file changed (absent → 255 bytes)
binary file changed (absent → 276 bytes)
binary file changed (absent → 213 bytes)
binary file changed (absent → 1496 bytes)
binary file changed (absent → 190 bytes)
binary file changed (absent → 2434 bytes)
binary file changed (absent → 2040 bytes)
binary file changed (absent → 159 bytes)
binary file changed (absent → 2434 bytes)
binary file changed (absent → 160 bytes)
binary file changed (absent → 1147 bytes)
binary file changed (absent → 160 bytes)
binary file changed (absent → 2225 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 922 bytes)
binary file changed (absent → 1863 bytes)
binary file changed (absent → 1183 bytes)
binary file changed (absent → 1128 bytes)
binary file changed (absent → 1038 bytes)
binary file changed (absent → 657 bytes)
binary file changed (absent → 657 bytes)
binary file changed (absent → 962 bytes)
binary file changed (absent → 195 bytes)
binary file changed (absent → 1942 bytes)
binary file changed (absent → 178 bytes)
binary file changed (absent → 2149 bytes)
binary file changed (absent → 1047 bytes)
binary file changed (absent → 187 bytes)
binary file changed (absent → 265 bytes)
binary file changed (absent → 890 bytes)
binary file changed (absent → 389 bytes)
binary file changed (absent → 389 bytes)
binary file changed (absent → 363 bytes)
binary file changed (absent → 364 bytes)
binary file changed (absent → 2306 bytes)
binary file changed (absent → 364 bytes)
binary file changed (absent → 295 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 597 bytes)
binary file changed (absent → 2287 bytes)
binary file changed (absent → 463 bytes)
binary file changed (absent → 2315 bytes)
binary file changed (absent → 255 bytes)
binary file changed (absent → 1175 bytes)
binary file changed (absent → 834 bytes)
binary file changed (absent → 1203 bytes)
binary file changed (absent → 2721 bytes)
binary file changed (absent → 344 bytes)
binary file changed (absent → 225 bytes)
binary file changed (absent → 2239 bytes)
binary file changed (absent → 173 bytes)
binary file changed (absent → 1167 bytes)
binary file changed (absent → 389 bytes)
binary file changed (absent → 419 bytes)
binary file changed (absent → 198 bytes)
binary file changed (absent → 198 bytes)
binary file changed (absent → 1281 bytes)
binary file changed (absent → 265 bytes)
binary file changed (absent → 1182 bytes)
binary file changed (absent → 372 bytes)
binary file changed (absent → 505 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 781 bytes)
binary file changed (absent → 781 bytes)
binary file changed (absent → 1183 bytes)
binary file changed (absent → 266 bytes)
binary file changed (absent → 335 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 2002 bytes)
binary file changed (absent → 1220 bytes)
binary file changed (absent → 1196 bytes)
binary file changed (absent → 1182 bytes)
binary file changed (absent → 1086 bytes)
binary file changed (absent → 255 bytes)
binary file changed (absent → 361 bytes)
binary file changed (absent → 258 bytes)
binary file changed (absent → 195 bytes)
binary file changed (absent → 1068 bytes)
binary file changed (absent → 259 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 255 bytes)
binary file changed (absent → 1213 bytes)
binary file changed (absent → 677 bytes)
binary file changed (absent → 396 bytes)
binary file changed (absent → 405 bytes)
binary file changed (absent → 402 bytes)
binary file changed (absent → 724 bytes)
binary file changed (absent → 667 bytes)
binary file changed (absent → 1116 bytes)
binary file changed (absent → 1647 bytes)
binary file changed (absent → 2239 bytes)
binary file changed (absent → 195 bytes)
binary file changed (absent → 195 bytes)
binary file changed (absent → 331 bytes)
binary file changed (absent → 266 bytes)
binary file changed (absent → 834 bytes)
binary file changed (absent → 834 bytes)
binary file changed (absent → 389 bytes)
binary file changed (absent → 1249 bytes)
binary file changed (absent → 255 bytes)
binary file changed (absent → 1197 bytes)
binary file changed (absent → 1183 bytes)
binary file changed (absent → 1252 bytes)
binary file changed (absent → 1263 bytes)
binary file changed (absent → 3462 bytes)
binary file changed (absent → 1990 bytes)
binary file changed (absent → 1899 bytes)
binary file changed (absent → 240 bytes)
binary file changed (absent → 1815 bytes)
binary file changed (absent → 1815 bytes)
binary file changed (absent → 2225 bytes)
binary file changed (absent → 3452 bytes)
binary file changed (absent → 1141 bytes)
binary file changed (absent → 139 bytes)
binary file changed (absent → 177 bytes)
binary file changed (absent → 1220 bytes)
binary file changed (absent → 2183 bytes)
binary file changed (absent → 2202 bytes)
binary file changed (absent → 413 bytes)
binary file changed (absent → 2237 bytes)
binary file changed (absent → 2183 bytes)
binary file changed (absent → 2183 bytes)
binary file changed (absent → 288 bytes)
binary file changed (absent → 446 bytes)
binary file changed (absent → 2295 bytes)
binary file changed (absent → 1821 bytes)
binary file changed (absent → 483 bytes)
binary file changed (absent → 1821 bytes)
binary file changed (absent → 2183 bytes)
binary file changed (absent → 2183 bytes)
binary file changed (absent → 288 bytes)
binary file changed (absent → 440 bytes)
binary file changed (absent → 413 bytes)
binary file changed (absent → 2202 bytes)
binary file changed (absent → 2183 bytes)
binary file changed (absent → 2295 bytes)
binary file changed (absent → 2183 bytes)
binary file changed (absent → 440 bytes)
binary file changed (absent → 2237 bytes)
binary file changed (absent → 642 bytes)
binary file changed (absent → 714 bytes)
binary file changed (absent → 2001 bytes)
binary file changed (absent → 602 bytes)
binary file changed (absent → 2102 bytes)
binary file changed (absent → 2294 bytes)
binary file changed (absent → 3424 bytes)
binary file changed (absent → 2865 bytes)
binary file changed (absent → 980 bytes)
binary file changed (absent → 3477 bytes)
binary file changed (absent → 2388 bytes)
binary file changed (absent → 3638 bytes)
binary file changed (absent → 2875 bytes)
binary file changed (absent → 980 bytes)
binary file changed (absent → 2067 bytes)
binary file changed (absent → 2505 bytes)
binary file changed (absent → 2269 bytes)
binary file changed (absent → 2411 bytes)
binary file changed (absent → 1876 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 2294 bytes)
binary file changed (absent → 1906 bytes)
binary file changed (absent → 3533 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 126 bytes)
binary file changed (absent → 130 bytes)
binary file changed (absent → 130 bytes)
binary file changed (absent → 130 bytes)
binary file changed (absent → 126 bytes)
binary file changed (absent → 126 bytes)
binary file changed (absent → 126 bytes)
binary file changed (absent → 126 bytes)
binary file changed (absent → 126 bytes)
binary file changed (absent → 126 bytes)
binary file changed (absent → 126 bytes)
binary file changed (absent → 126 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 127 bytes)
binary file changed (absent → 131 bytes)
binary file changed (absent → 131 bytes)
binary file changed (absent → 131 bytes)
binary file changed (absent → 131 bytes)
binary file changed (absent → 131 bytes)
binary file changed (absent → 127 bytes)
binary file changed (absent → 127 bytes)
binary file changed (absent → 127 bytes)
binary file changed (absent → 127 bytes)
binary file changed (absent → 127 bytes)
binary file changed (absent → 127 bytes)
binary file changed (absent → 127 bytes)
binary file changed (absent → 127 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 2917 bytes)
binary file changed (absent → 1725 bytes)
binary file changed (absent → 2245 bytes)
binary file changed (absent → 3661 bytes)
binary file changed (absent → 1931 bytes)
binary file changed (absent → 2309 bytes)
binary file changed (absent → 2246 bytes)
binary file changed (absent → 2944 bytes)
binary file changed (absent → 2195 bytes)
binary file changed (absent → 2407 bytes)
binary file changed (absent → 1892 bytes)
binary file changed (absent → 2407 bytes)
binary file changed (absent → 2134 bytes)
binary file changed (absent → 3533 bytes)
binary file changed (absent → 3035 bytes)
binary file changed (absent → 3661 bytes)
binary file changed (absent → 1883 bytes)
binary file changed (absent → 3661 bytes)
binary file changed (absent → 2721 bytes)
binary file changed (absent → 3661 bytes)
binary file changed (absent → 1494 bytes)
binary file changed (absent → 2071 bytes)
binary file changed (absent → 3439 bytes)
binary file changed (absent → 1931 bytes)
binary file changed (absent → 3661 bytes)
binary file changed (absent → 2960 bytes)
binary file changed (absent → 2593 bytes)
binary file changed (absent → 2603 bytes)
binary file changed (absent → 1883 bytes)
binary file changed (absent → 1328 bytes)
binary file changed (absent → 2927 bytes)
binary file changed (absent → 1464 bytes)
binary file changed (absent → 2002 bytes)
binary file changed (absent → 2225 bytes)
binary file changed (absent → 2945 bytes)
binary file changed (absent → 1931 bytes)
binary file changed (absent → 2246 bytes)
binary file changed (absent → 2209 bytes)
binary file changed (absent → 2652 bytes)
binary file changed (absent → 1330 bytes)
binary file changed (absent → 2652 bytes)
binary file changed (absent → 1931 bytes)
binary file changed (absent → 1448 bytes)
binary file changed (absent → 1931 bytes)
binary file changed (absent → 2104 bytes)
binary file changed (absent → 1892 bytes)
binary file changed (absent → 2175 bytes)
binary file changed (absent → 2084 bytes)
binary file changed (absent → 2407 bytes)
binary file changed (absent → 2077 bytes)
binary file changed (absent → 1892 bytes)
binary file changed (absent → 2652 bytes)
binary file changed (absent → 2211 bytes)
binary file changed (absent → 2173 bytes)
binary file changed (absent → 1234 bytes)
binary file changed (absent → 2679 bytes)
binary file changed (absent → 1931 bytes)
binary file changed (absent → 2085 bytes)
binary file changed (absent → 1892 bytes)
binary file changed (absent → 255 bytes)
binary file changed (absent → 3661 bytes)
binary file changed (absent → 3661 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 119 bytes)
binary file changed (absent → 1175 bytes)
binary file changed (absent → 1141 bytes)
binary file changed (absent → 227 bytes)
binary file changed (absent → 187 bytes)
binary file changed (absent → 140 bytes)
binary file changed (absent → 143 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 178 bytes)
binary file changed (absent → 239 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 157 bytes)
binary file changed (absent → 1647 bytes)
binary file changed (absent → 2239 bytes)
binary file changed (absent → 481 bytes)
binary file changed (absent → 331 bytes)
binary file changed (absent → 211 bytes)
binary file changed (absent → 641 bytes)
binary file changed (absent → 2102 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 2294 bytes)
binary file changed (absent → 2342 bytes)
binary file changed (absent → 1550 bytes)
binary file changed (absent → 1604 bytes)
binary file changed (absent → 2018 bytes)
binary file changed (absent → 2434 bytes)
binary file changed (absent → 2427 bytes)
binary file changed (absent → 405 bytes)
binary file changed (absent → 2294 bytes)
binary file changed (absent → 1079 bytes)
binary file changed (absent → 2434 bytes)
binary file changed (absent → 2018 bytes)
binary file changed (absent → 144 bytes)
binary file changed (absent → 2269 bytes)
binary file changed (absent → 464 bytes)
binary file changed (absent → 204 bytes)
binary file changed (absent → 171 bytes)
binary file changed (absent → 1064 bytes)
binary file changed (absent → 141 bytes)
binary file changed (absent → 197 bytes)
binary file changed (absent → 159 bytes)
binary file changed (absent → 158 bytes)
binary file changed (absent → 199 bytes)
binary file changed (absent → 250 bytes)
binary file changed (absent → 250 bytes)
binary file changed (absent → 204 bytes)
binary file changed (absent → 204 bytes)
binary file changed (absent → 211 bytes)
binary file changed (absent → 171 bytes)
binary file changed (absent → 162 bytes)
binary file changed (absent → 268 bytes)
binary file changed (absent → 240 bytes)
binary file changed (absent → 200 bytes)
binary file changed (absent → 182 bytes)
binary file changed (absent → 300 bytes)
binary file changed (absent → 290 bytes)
binary file changed (absent → 140 bytes)
binary file changed (absent → 177 bytes)
binary file changed (absent → 144 bytes)
binary file changed (absent → 144 bytes)
binary file changed (absent → 163 bytes)
binary file changed (absent → 548 bytes)
binary file changed (absent → 229 bytes)
binary file changed (absent → 290 bytes)
binary file changed (absent → 160 bytes)
binary file changed (absent → 144 bytes)
binary file changed (absent → 313 bytes)
binary file changed (absent → 144 bytes)
binary file changed (absent → 144 bytes)
binary file changed (absent → 141 bytes)
binary file changed (absent → 144 bytes)
binary file changed (absent → 2679 bytes)
binary file changed (absent → 3439 bytes)
binary file changed (absent → 724 bytes)
binary file changed (absent → 396 bytes)
binary file changed (absent → 402 bytes)
binary file changed (absent → 2721 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 2358 bytes)
binary file changed (absent → 2353 bytes)
binary file changed (absent → 327 bytes)
binary file changed (absent → 3559 bytes)
binary file changed (absent → 1649 bytes)
binary file changed (absent → 3519 bytes)
binary file changed (absent → 250 bytes)
binary file changed (absent → 2411 bytes)
binary file changed (absent → 2202 bytes)
binary file changed (absent → 2427 bytes)
binary file changed (absent → 2819 bytes)
binary file changed (absent → 2819 bytes)
binary file changed (absent → 290 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 118 bytes)
binary file changed (absent → 1464 bytes)
binary file changed (absent → 1873 bytes)
binary file changed (absent → 118 bytes)
@@ -0,0 +1,275 @@+# ISO 3166 alpha-2 country codes+#+# This file is in the public domain, so clarified as of+# 2009-05-17 by Arthur David Olson.+#+# From Paul Eggert (2013-05-27):+#+# This file contains a table with the following columns:+# 1. ISO 3166-1 alpha-2 country code, current as of+# ISO 3166-1 Newsletter VI-15 (2013-05-10). See: Updates on ISO 3166+# http://www.iso.org/iso/home/standards/country_codes/updates_on_iso_3166.htm+# 2. The usual English name for the coded region,+# chosen so that alphabetic sorting of subsets produces helpful lists.+# This is not the same as the English name in the ISO 3166 tables.+#+# Columns are separated by a single tab.+# The table is sorted by country code.+#+# Lines beginning with `#' are comments.+#+# This table is intended as an aid for users, to help them select time+# zone data appropriate for their practical needs. It is not intended+# to take or endorse any position on legal or territorial claims.+#+#country-+#code name of country, territory, area, or subdivision+AD Andorra+AE United Arab Emirates+AF Afghanistan+AG Antigua & Barbuda+AI Anguilla+AL Albania+AM Armenia+AO Angola+AQ Antarctica+AR Argentina+AS Samoa (American)+AT Austria+AU Australia+AW Aruba+AX Aaland Islands+AZ Azerbaijan+BA Bosnia & Herzegovina+BB Barbados+BD Bangladesh+BE Belgium+BF Burkina Faso+BG Bulgaria+BH Bahrain+BI Burundi+BJ Benin+BL St Barthelemy+BM Bermuda+BN Brunei+BO Bolivia+BQ Caribbean Netherlands+BR Brazil+BS Bahamas+BT Bhutan+BV Bouvet Island+BW Botswana+BY Belarus+BZ Belize+CA Canada+CC Cocos (Keeling) Islands+CD Congo (Dem. Rep.)+CF Central African Rep.+CG Congo (Rep.)+CH Switzerland+CI Cote d'Ivoire+CK Cook Islands+CL Chile+CM Cameroon+CN China+CO Colombia+CR Costa Rica+CU Cuba+CV Cape Verde+CW Curacao+CX Christmas Island+CY Cyprus+CZ Czech Republic+DE Germany+DJ Djibouti+DK Denmark+DM Dominica+DO Dominican Republic+DZ Algeria+EC Ecuador+EE Estonia+EG Egypt+EH Western Sahara+ER Eritrea+ES Spain+ET Ethiopia+FI Finland+FJ Fiji+FK Falkland Islands+FM Micronesia+FO Faroe Islands+FR France+GA Gabon+GB Britain (UK)+GD Grenada+GE Georgia+GF French Guiana+GG Guernsey+GH Ghana+GI Gibraltar+GL Greenland+GM Gambia+GN Guinea+GP Guadeloupe+GQ Equatorial Guinea+GR Greece+GS South Georgia & the South Sandwich Islands+GT Guatemala+GU Guam+GW Guinea-Bissau+GY Guyana+HK Hong Kong+HM Heard Island & McDonald Islands+HN Honduras+HR Croatia+HT Haiti+HU Hungary+ID Indonesia+IE Ireland+IL Israel+IM Isle of Man+IN India+IO British Indian Ocean Territory+IQ Iraq+IR Iran+IS Iceland+IT Italy+JE Jersey+JM Jamaica+JO Jordan+JP Japan+KE Kenya+KG Kyrgyzstan+KH Cambodia+KI Kiribati+KM Comoros+KN St Kitts & Nevis+KP Korea (North)+KR Korea (South)+KW Kuwait+KY Cayman Islands+KZ Kazakhstan+LA Laos+LB Lebanon+LC St Lucia+LI Liechtenstein+LK Sri Lanka+LR Liberia+LS Lesotho+LT Lithuania+LU Luxembourg+LV Latvia+LY Libya+MA Morocco+MC Monaco+MD Moldova+ME Montenegro+MF St Martin (French part)+MG Madagascar+MH Marshall Islands+MK Macedonia+ML Mali+MM Myanmar (Burma)+MN Mongolia+MO Macau+MP Northern Mariana Islands+MQ Martinique+MR Mauritania+MS Montserrat+MT Malta+MU Mauritius+MV Maldives+MW Malawi+MX Mexico+MY Malaysia+MZ Mozambique+NA Namibia+NC New Caledonia+NE Niger+NF Norfolk Island+NG Nigeria+NI Nicaragua+NL Netherlands+NO Norway+NP Nepal+NR Nauru+NU Niue+NZ New Zealand+OM Oman+PA Panama+PE Peru+PF French Polynesia+PG Papua New Guinea+PH Philippines+PK Pakistan+PL Poland+PM St Pierre & Miquelon+PN Pitcairn+PR Puerto Rico+PS Palestine+PT Portugal+PW Palau+PY Paraguay+QA Qatar+RE Reunion+RO Romania+RS Serbia+RU Russia+RW Rwanda+SA Saudi Arabia+SB Solomon Islands+SC Seychelles+SD Sudan+SE Sweden+SG Singapore+SH St Helena+SI Slovenia+SJ Svalbard & Jan Mayen+SK Slovakia+SL Sierra Leone+SM San Marino+SN Senegal+SO Somalia+SR Suriname+SS South Sudan+ST Sao Tome & Principe+SV El Salvador+SX St Maarten (Dutch part)+SY Syria+SZ Swaziland+TC Turks & Caicos Is+TD Chad+TF French Southern & Antarctic Lands+TG Togo+TH Thailand+TJ Tajikistan+TK Tokelau+TL East Timor+TM Turkmenistan+TN Tunisia+TO Tonga+TR Turkey+TT Trinidad & Tobago+TV Tuvalu+TW Taiwan+TZ Tanzania+UA Ukraine+UG Uganda+UM US minor outlying islands+US United States+UY Uruguay+UZ Uzbekistan+VA Vatican City+VC St Vincent+VE Venezuela+VG Virgin Islands (UK)+VI Virgin Islands (US)+VN Vietnam+VU Vanuatu+WF Wallis & Futuna+WS Samoa (western)+YE Yemen+YT Mayotte+ZA South Africa+ZM Zambia+ZW Zimbabwe
@@ -0,0 +1,452 @@+# TZ zone descriptions+#+# This file is in the public domain, so clarified as of+# 2009-05-17 by Arthur David Olson.+#+# From Paul Eggert (2013-08-14):+#+# This file contains a table where each row stands for an area that is+# the intersection of a region identified by a country code and of a+# zone where civil clocks have agreed since 1970. The columns of the+# table are as follows:+#+# 1. ISO 3166 2-character country code. See the file 'iso3166.tab'.+# 2. Latitude and longitude of the area's principal location+# in ISO 6709 sign-degrees-minutes-seconds format,+# either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,+# first latitude (+ is north), then longitude (+ is east).+# 3. Zone name used in value of TZ environment variable.+# Please see the 'Theory' file for how zone names are chosen.+# If multiple zones overlap a country, each has a row in the+# table, with column 1 being duplicated.+# 4. Comments; present if and only if the country has multiple rows.+#+# Columns are separated by a single tab.+# The table is sorted first by country, then an order within the country that+# (1) makes some geographical sense, and+# (2) puts the most populous areas first, where that does not contradict (1).+#+# Lines beginning with '#' are comments.+#+# This table is intended as an aid for users, to help them select time+# zone data appropriate for their practical needs. It is not intended+# to take or endorse any position on legal or territorial claims.+#+#country-+#code coordinates TZ comments+AD +4230+00131 Europe/Andorra+AE +2518+05518 Asia/Dubai+AF +3431+06912 Asia/Kabul+AG +1703-06148 America/Antigua+AI +1812-06304 America/Anguilla+AL +4120+01950 Europe/Tirane+AM +4011+04430 Asia/Yerevan+AO -0848+01314 Africa/Luanda+AQ -7750+16636 Antarctica/McMurdo McMurdo, South Pole, Scott (New Zealand time)+AQ -6734-06808 Antarctica/Rothera Rothera Station, Adelaide Island+AQ -6448-06406 Antarctica/Palmer Palmer Station, Anvers Island+AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay+AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills+AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula+AQ -7824+10654 Antarctica/Vostok Vostok Station, Lake Vostok+AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Terre Adelie+AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I+AQ -720041+0023206 Antarctica/Troll Troll Station, Queen Maud Land+AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF)+AR -3124-06411 America/Argentina/Cordoba most locations (CB, CC, CN, ER, FM, MN, SE, SF)+AR -2447-06525 America/Argentina/Salta (SA, LP, NQ, RN)+AR -2411-06518 America/Argentina/Jujuy Jujuy (JY)+AR -2649-06513 America/Argentina/Tucuman Tucuman (TM)+AR -2828-06547 America/Argentina/Catamarca Catamarca (CT), Chubut (CH)+AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR)+AR -3132-06831 America/Argentina/San_Juan San Juan (SJ)+AR -3253-06849 America/Argentina/Mendoza Mendoza (MZ)+AR -3319-06621 America/Argentina/San_Luis San Luis (SL)+AR -5138-06913 America/Argentina/Rio_Gallegos Santa Cruz (SC)+AR -5448-06818 America/Argentina/Ushuaia Tierra del Fuego (TF)+AS -1416-17042 Pacific/Pago_Pago+AT +4813+01620 Europe/Vienna+AU -3133+15905 Australia/Lord_Howe Lord Howe Island+AU -5430+15857 Antarctica/Macquarie Macquarie Island+AU -4253+14719 Australia/Hobart Tasmania - most locations+AU -3956+14352 Australia/Currie Tasmania - King Island+AU -3749+14458 Australia/Melbourne Victoria+AU -3352+15113 Australia/Sydney New South Wales - most locations+AU -3157+14127 Australia/Broken_Hill New South Wales - Yancowinna+AU -2728+15302 Australia/Brisbane Queensland - most locations+AU -2016+14900 Australia/Lindeman Queensland - Holiday Islands+AU -3455+13835 Australia/Adelaide South Australia+AU -1228+13050 Australia/Darwin Northern Territory+AU -3157+11551 Australia/Perth Western Australia - most locations+AU -3143+12852 Australia/Eucla Western Australia - Eucla area+AW +1230-06958 America/Aruba+AX +6006+01957 Europe/Mariehamn+AZ +4023+04951 Asia/Baku+BA +4352+01825 Europe/Sarajevo+BB +1306-05937 America/Barbados+BD +2343+09025 Asia/Dhaka+BE +5050+00420 Europe/Brussels+BF +1222-00131 Africa/Ouagadougou+BG +4241+02319 Europe/Sofia+BH +2623+05035 Asia/Bahrain+BI -0323+02922 Africa/Bujumbura+BJ +0629+00237 Africa/Porto-Novo+BL +1753-06251 America/St_Barthelemy+BM +3217-06446 Atlantic/Bermuda+BN +0456+11455 Asia/Brunei+BO -1630-06809 America/La_Paz+BQ +120903-0681636 America/Kralendijk+BR -0351-03225 America/Noronha Atlantic islands+BR -0127-04829 America/Belem Amapa, E Para+BR -0343-03830 America/Fortaleza NE Brazil (MA, PI, CE, RN, PB)+BR -0803-03454 America/Recife Pernambuco+BR -0712-04812 America/Araguaina Tocantins+BR -0940-03543 America/Maceio Alagoas, Sergipe+BR -1259-03831 America/Bahia Bahia+BR -2332-04637 America/Sao_Paulo S & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS)+BR -2027-05437 America/Campo_Grande Mato Grosso do Sul+BR -1535-05605 America/Cuiaba Mato Grosso+BR -0226-05452 America/Santarem W Para+BR -0846-06354 America/Porto_Velho Rondonia+BR +0249-06040 America/Boa_Vista Roraima+BR -0308-06001 America/Manaus E Amazonas+BR -0640-06952 America/Eirunepe W Amazonas+BR -0958-06748 America/Rio_Branco Acre+BS +2505-07721 America/Nassau+BT +2728+08939 Asia/Thimphu+BW -2439+02555 Africa/Gaborone+BY +5354+02734 Europe/Minsk+BZ +1730-08812 America/Belize+CA +4734-05243 America/St_Johns Newfoundland Time, including SE Labrador+CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), PEI+CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971+CA +4606-06447 America/Moncton Atlantic Time - New Brunswick+CA +5320-06025 America/Goose_Bay Atlantic Time - Labrador - most locations+CA +5125-05707 America/Blanc-Sablon Atlantic Standard Time - Quebec - Lower North Shore+CA +4339-07923 America/Toronto Eastern Time - Ontario & Quebec - most locations+CA +4901-08816 America/Nipigon Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973+CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario+CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations+CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut+CA +744144-0944945 America/Resolute Central Standard Time - Resolute, Nunavut+CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut+CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut+CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario+CA +4843-09434 America/Rainy_River Central Time - Rainy River & Fort Frances, Ontario+CA +5024-10439 America/Regina Central Standard Time - Saskatchewan - most locations+CA +5017-10750 America/Swift_Current Central Standard Time - Saskatchewan - midwest+CA +5333-11328 America/Edmonton Mountain Time - Alberta, east British Columbia & west Saskatchewan+CA +690650-1050310 America/Cambridge_Bay Mountain Time - west Nunavut+CA +6227-11421 America/Yellowknife Mountain Time - central Northwest Territories+CA +682059-1334300 America/Inuvik Mountain Time - west Northwest Territories+CA +4906-11631 America/Creston Mountain Standard Time - Creston, British Columbia+CA +5946-12014 America/Dawson_Creek Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia+CA +4916-12307 America/Vancouver Pacific Time - west British Columbia+CA +6043-13503 America/Whitehorse Pacific Time - south Yukon+CA +6404-13925 America/Dawson Pacific Time - north Yukon+CC -1210+09655 Indian/Cocos+CD -0418+01518 Africa/Kinshasa west Dem. Rep. of Congo+CD -1140+02728 Africa/Lubumbashi east Dem. Rep. of Congo+CF +0422+01835 Africa/Bangui+CG -0416+01517 Africa/Brazzaville+CH +4723+00832 Europe/Zurich+CI +0519-00402 Africa/Abidjan+CK -2114-15946 Pacific/Rarotonga+CL -3327-07040 America/Santiago most locations+CL -2709-10926 Pacific/Easter Easter Island & Sala y Gomez+CM +0403+00942 Africa/Douala+CN +3114+12128 Asia/Shanghai east China - Beijing, Guangdong, Shanghai, etc.+CN +4545+12641 Asia/Harbin Heilongjiang (except Mohe), Jilin+CN +2934+10635 Asia/Chongqing central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.+CN +4348+08735 Asia/Urumqi most of Tibet & Xinjiang+CN +3929+07559 Asia/Kashgar west Tibet & Xinjiang+CO +0436-07405 America/Bogota+CR +0956-08405 America/Costa_Rica+CU +2308-08222 America/Havana+CV +1455-02331 Atlantic/Cape_Verde+CW +1211-06900 America/Curacao+CX -1025+10543 Indian/Christmas+CY +3510+03322 Asia/Nicosia+CZ +5005+01426 Europe/Prague+DE +5230+01322 Europe/Berlin most locations+DE +4742+00841 Europe/Busingen Busingen+DJ +1136+04309 Africa/Djibouti+DK +5540+01235 Europe/Copenhagen+DM +1518-06124 America/Dominica+DO +1828-06954 America/Santo_Domingo+DZ +3647+00303 Africa/Algiers+EC -0210-07950 America/Guayaquil mainland+EC -0054-08936 Pacific/Galapagos Galapagos Islands+EE +5925+02445 Europe/Tallinn+EG +3003+03115 Africa/Cairo+EH +2709-01312 Africa/El_Aaiun+ER +1520+03853 Africa/Asmara+ES +4024-00341 Europe/Madrid mainland+ES +3553-00519 Africa/Ceuta Ceuta & Melilla+ES +2806-01524 Atlantic/Canary Canary Islands+ET +0902+03842 Africa/Addis_Ababa+FI +6010+02458 Europe/Helsinki+FJ -1808+17825 Pacific/Fiji+FK -5142-05751 Atlantic/Stanley+FM +0725+15147 Pacific/Chuuk Chuuk (Truk) and Yap+FM +0658+15813 Pacific/Pohnpei Pohnpei (Ponape)+FM +0519+16259 Pacific/Kosrae Kosrae+FO +6201-00646 Atlantic/Faroe+FR +4852+00220 Europe/Paris+GA +0023+00927 Africa/Libreville+GB +513030-0000731 Europe/London+GD +1203-06145 America/Grenada+GE +4143+04449 Asia/Tbilisi+GF +0456-05220 America/Cayenne+GG +4927-00232 Europe/Guernsey+GH +0533-00013 Africa/Accra+GI +3608-00521 Europe/Gibraltar+GL +6411-05144 America/Godthab most locations+GL +7646-01840 America/Danmarkshavn east coast, north of Scoresbysund+GL +7029-02158 America/Scoresbysund Scoresbysund / Ittoqqortoormiit+GL +7634-06847 America/Thule Thule / Pituffik+GM +1328-01639 Africa/Banjul+GN +0931-01343 Africa/Conakry+GP +1614-06132 America/Guadeloupe+GQ +0345+00847 Africa/Malabo+GR +3758+02343 Europe/Athens+GS -5416-03632 Atlantic/South_Georgia+GT +1438-09031 America/Guatemala+GU +1328+14445 Pacific/Guam+GW +1151-01535 Africa/Bissau+GY +0648-05810 America/Guyana+HK +2217+11409 Asia/Hong_Kong+HN +1406-08713 America/Tegucigalpa+HR +4548+01558 Europe/Zagreb+HT +1832-07220 America/Port-au-Prince+HU +4730+01905 Europe/Budapest+ID -0610+10648 Asia/Jakarta Java & Sumatra+ID -0002+10920 Asia/Pontianak west & central Borneo+ID -0507+11924 Asia/Makassar east & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor+ID -0232+14042 Asia/Jayapura west New Guinea (Irian Jaya) & Malukus (Moluccas)+IE +5320-00615 Europe/Dublin+IL +314650+0351326 Asia/Jerusalem+IM +5409-00428 Europe/Isle_of_Man+IN +2232+08822 Asia/Kolkata+IO -0720+07225 Indian/Chagos+IQ +3321+04425 Asia/Baghdad+IR +3540+05126 Asia/Tehran+IS +6409-02151 Atlantic/Reykjavik+IT +4154+01229 Europe/Rome+JE +4912-00207 Europe/Jersey+JM +175805-0764736 America/Jamaica+JO +3157+03556 Asia/Amman+JP +353916+1394441 Asia/Tokyo+KE -0117+03649 Africa/Nairobi+KG +4254+07436 Asia/Bishkek+KH +1133+10455 Asia/Phnom_Penh+KI +0125+17300 Pacific/Tarawa Gilbert Islands+KI -0308-17105 Pacific/Enderbury Phoenix Islands+KI +0152-15720 Pacific/Kiritimati Line Islands+KM -1141+04316 Indian/Comoro+KN +1718-06243 America/St_Kitts+KP +3901+12545 Asia/Pyongyang+KR +3733+12658 Asia/Seoul+KW +2920+04759 Asia/Kuwait+KY +1918-08123 America/Cayman+KZ +4315+07657 Asia/Almaty most locations+KZ +4448+06528 Asia/Qyzylorda Qyzylorda (Kyzylorda, Kzyl-Orda)+KZ +5017+05710 Asia/Aqtobe Aqtobe (Aktobe)+KZ +4431+05016 Asia/Aqtau Atyrau (Atirau, Gur'yev), Mangghystau (Mankistau)+KZ +5113+05121 Asia/Oral West Kazakhstan+LA +1758+10236 Asia/Vientiane+LB +3353+03530 Asia/Beirut+LC +1401-06100 America/St_Lucia+LI +4709+00931 Europe/Vaduz+LK +0656+07951 Asia/Colombo+LR +0618-01047 Africa/Monrovia+LS -2928+02730 Africa/Maseru+LT +5441+02519 Europe/Vilnius+LU +4936+00609 Europe/Luxembourg+LV +5657+02406 Europe/Riga+LY +3254+01311 Africa/Tripoli+MA +3339-00735 Africa/Casablanca+MC +4342+00723 Europe/Monaco+MD +4700+02850 Europe/Chisinau+ME +4226+01916 Europe/Podgorica+MF +1804-06305 America/Marigot+MG -1855+04731 Indian/Antananarivo+MH +0709+17112 Pacific/Majuro most locations+MH +0905+16720 Pacific/Kwajalein Kwajalein+MK +4159+02126 Europe/Skopje+ML +1239-00800 Africa/Bamako+MM +1647+09610 Asia/Rangoon+MN +4755+10653 Asia/Ulaanbaatar most locations+MN +4801+09139 Asia/Hovd Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan+MN +4804+11430 Asia/Choibalsan Dornod, Sukhbaatar+MO +2214+11335 Asia/Macau+MP +1512+14545 Pacific/Saipan+MQ +1436-06105 America/Martinique+MR +1806-01557 Africa/Nouakchott+MS +1643-06213 America/Montserrat+MT +3554+01431 Europe/Malta+MU -2010+05730 Indian/Mauritius+MV +0410+07330 Indian/Maldives+MW -1547+03500 Africa/Blantyre+MX +1924-09909 America/Mexico_City Central Time - most locations+MX +2105-08646 America/Cancun Central Time - Quintana Roo+MX +2058-08937 America/Merida Central Time - Campeche, Yucatan+MX +2540-10019 America/Monterrey Mexican Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas away from US border+MX +2550-09730 America/Matamoros US Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas near US border+MX +2313-10625 America/Mazatlan Mountain Time - S Baja, Nayarit, Sinaloa+MX +2838-10605 America/Chihuahua Mexican Mountain Time - Chihuahua away from US border+MX +2934-10425 America/Ojinaga US Mountain Time - Chihuahua near US border+MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora+MX +3232-11701 America/Tijuana US Pacific Time - Baja California near US border+MX +3018-11452 America/Santa_Isabel Mexican Pacific Time - Baja California away from US border+MX +2048-10515 America/Bahia_Banderas Mexican Central Time - Bahia de Banderas+MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia+MY +0133+11020 Asia/Kuching Sabah & Sarawak+MZ -2558+03235 Africa/Maputo+NA -2234+01706 Africa/Windhoek+NC -2216+16627 Pacific/Noumea+NE +1331+00207 Africa/Niamey+NF -2903+16758 Pacific/Norfolk+NG +0627+00324 Africa/Lagos+NI +1209-08617 America/Managua+NL +5222+00454 Europe/Amsterdam+NO +5955+01045 Europe/Oslo+NP +2743+08519 Asia/Kathmandu+NR -0031+16655 Pacific/Nauru+NU -1901-16955 Pacific/Niue+NZ -3652+17446 Pacific/Auckland most locations+NZ -4357-17633 Pacific/Chatham Chatham Islands+OM +2336+05835 Asia/Muscat+PA +0858-07932 America/Panama+PE -1203-07703 America/Lima+PF -1732-14934 Pacific/Tahiti Society Islands+PF -0900-13930 Pacific/Marquesas Marquesas Islands+PF -2308-13457 Pacific/Gambier Gambier Islands+PG -0930+14710 Pacific/Port_Moresby+PH +1435+12100 Asia/Manila+PK +2452+06703 Asia/Karachi+PL +5215+02100 Europe/Warsaw+PM +4703-05620 America/Miquelon+PN -2504-13005 Pacific/Pitcairn+PR +182806-0660622 America/Puerto_Rico+PS +3130+03428 Asia/Gaza Gaza Strip+PS +313200+0350542 Asia/Hebron West Bank+PT +3843-00908 Europe/Lisbon mainland+PT +3238-01654 Atlantic/Madeira Madeira Islands+PT +3744-02540 Atlantic/Azores Azores+PW +0720+13429 Pacific/Palau+PY -2516-05740 America/Asuncion+QA +2517+05132 Asia/Qatar+RE -2052+05528 Indian/Reunion+RO +4426+02606 Europe/Bucharest+RS +4450+02030 Europe/Belgrade+RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad+RU +5545+03735 Europe/Moscow Moscow+00 - west Russia+RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea+RU +5312+05009 Europe/Samara Moscow+00 - Samara, Udmurtia+RU +4457+03406 Europe/Simferopol Moscow+00 - Crimea+RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals+RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia+RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk+RU +5345+08707 Asia/Novokuznetsk Moscow+03 - Novokuznetsk+RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River+RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal+RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River+RU +623923+1353314 Asia/Khandyga Moscow+06 - Tomponsky, Ust-Maysky+RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River+RU +4658+14242 Asia/Sakhalin Moscow+07 - Sakhalin Island+RU +643337+1431336 Asia/Ust-Nera Moscow+07 - Oymyakonsky+RU +5934+15048 Asia/Magadan Moscow+08 - Magadan+RU +5301+15839 Asia/Kamchatka Moscow+08 - Kamchatka+RU +6445+17729 Asia/Anadyr Moscow+08 - Bering Sea+RW -0157+03004 Africa/Kigali+SA +2438+04643 Asia/Riyadh+SB -0932+16012 Pacific/Guadalcanal+SC -0440+05528 Indian/Mahe+SD +1536+03232 Africa/Khartoum+SE +5920+01803 Europe/Stockholm+SG +0117+10351 Asia/Singapore+SH -1555-00542 Atlantic/St_Helena+SI +4603+01431 Europe/Ljubljana+SJ +7800+01600 Arctic/Longyearbyen+SK +4809+01707 Europe/Bratislava+SL +0830-01315 Africa/Freetown+SM +4355+01228 Europe/San_Marino+SN +1440-01726 Africa/Dakar+SO +0204+04522 Africa/Mogadishu+SR +0550-05510 America/Paramaribo+SS +0451+03136 Africa/Juba+ST +0020+00644 Africa/Sao_Tome+SV +1342-08912 America/El_Salvador+SX +180305-0630250 America/Lower_Princes+SY +3330+03618 Asia/Damascus+SZ -2618+03106 Africa/Mbabane+TC +2128-07108 America/Grand_Turk+TD +1207+01503 Africa/Ndjamena+TF -492110+0701303 Indian/Kerguelen+TG +0608+00113 Africa/Lome+TH +1345+10031 Asia/Bangkok+TJ +3835+06848 Asia/Dushanbe+TK -0922-17114 Pacific/Fakaofo+TL -0833+12535 Asia/Dili+TM +3757+05823 Asia/Ashgabat+TN +3648+01011 Africa/Tunis+TO -2110-17510 Pacific/Tongatapu+TR +4101+02858 Europe/Istanbul+TT +1039-06131 America/Port_of_Spain+TV -0831+17913 Pacific/Funafuti+TW +2503+12130 Asia/Taipei+TZ -0648+03917 Africa/Dar_es_Salaam+UA +5026+03031 Europe/Kiev most locations+UA +4837+02218 Europe/Uzhgorod Ruthenia+UA +4750+03510 Europe/Zaporozhye Zaporozh'ye, E Lugansk / Zaporizhia, E Luhansk+UG +0019+03225 Africa/Kampala+UM +1645-16931 Pacific/Johnston Johnston Atoll+UM +2813-17722 Pacific/Midway Midway Islands+UM +1917+16637 Pacific/Wake Wake Island+US +404251-0740023 America/New_York Eastern Time+US +421953-0830245 America/Detroit Eastern Time - Michigan - most locations+US +381515-0854534 America/Kentucky/Louisville Eastern Time - Kentucky - Louisville area+US +364947-0845057 America/Kentucky/Monticello Eastern Time - Kentucky - Wayne County+US +394606-0860929 America/Indiana/Indianapolis Eastern Time - Indiana - most locations+US +384038-0873143 America/Indiana/Vincennes Eastern Time - Indiana - Daviess, Dubois, Knox & Martin Counties+US +410305-0863611 America/Indiana/Winamac Eastern Time - Indiana - Pulaski County+US +382232-0862041 America/Indiana/Marengo Eastern Time - Indiana - Crawford County+US +382931-0871643 America/Indiana/Petersburg Eastern Time - Indiana - Pike County+US +384452-0850402 America/Indiana/Vevay Eastern Time - Indiana - Switzerland County+US +415100-0873900 America/Chicago Central Time+US +375711-0864541 America/Indiana/Tell_City Central Time - Indiana - Perry County+US +411745-0863730 America/Indiana/Knox Central Time - Indiana - Starke County+US +450628-0873651 America/Menominee Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties+US +470659-1011757 America/North_Dakota/Center Central Time - North Dakota - Oliver County+US +465042-1012439 America/North_Dakota/New_Salem Central Time - North Dakota - Morton County (except Mandan area)+US +471551-1014640 America/North_Dakota/Beulah Central Time - North Dakota - Mercer County+US +394421-1045903 America/Denver Mountain Time+US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon+US +332654-1120424 America/Phoenix Mountain Standard Time - Arizona (except Navajo)+US +340308-1181434 America/Los_Angeles Pacific Time+US +611305-1495401 America/Anchorage Alaska Time+US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle+US +571035-1351807 America/Sitka Alaska Time - southeast Alaska panhandle+US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck+US +643004-1652423 America/Nome Alaska Time - west Alaska+US +515248-1763929 America/Adak Aleutian Islands+US +550737-1313435 America/Metlakatla Metlakatla Time - Annette Island+US +211825-1575130 Pacific/Honolulu Hawaii+UY -3453-05611 America/Montevideo+UZ +3940+06648 Asia/Samarkand west Uzbekistan+UZ +4120+06918 Asia/Tashkent east Uzbekistan+VA +415408+0122711 Europe/Vatican+VC +1309-06114 America/St_Vincent+VE +1030-06656 America/Caracas+VG +1827-06437 America/Tortola+VI +1821-06456 America/St_Thomas+VN +1045+10640 Asia/Ho_Chi_Minh+VU -1740+16825 Pacific/Efate+WF -1318-17610 Pacific/Wallis+WS -1350-17144 Pacific/Apia+YE +1245+04512 Asia/Aden+YT -1247+04514 Indian/Mayotte+ZA -2615+02800 Africa/Johannesburg+ZM -1525+02817 Africa/Lusaka+ZW -1750+03103 Africa/Harare