tz_shift/3 added, underscores removed from timezones names.

This commit is contained in:
Dmitry Melnikov 2010-12-18 22:09:01 +03:00
parent add59e5cc6
commit 055e6f0804
4 changed files with 121 additions and 108 deletions

1
README
View file

@ -5,6 +5,7 @@ This library contains next public exported methods:
* local_to_local(DateTime, TimezoneFrom, TimezoneTo) - converts local time to local
* tz_name(DateTime, Timezone) - returns a timezone name (E.g. MSK, MSD, etc)
* tz_shift(DateTime, Timezone) - returns shift from local datetime to GMT
* tz_shift(DateTime, TimezoneFrom, TimezoneTo) - returns shift from local datetime to required timezone
Where
DateTime = {date(), time()}
TimeZone(To, From) = String(). E.g. “Europe/Moscow”, “America/NewYork”. Or abbreviation "MSK", "MSD", etc. Note:

View file

@ -37,7 +37,7 @@
[
{"Africa/Abidjan",{"GMT","GMT"},undef,0,0,undef,{0,0},undef,{0,0}},
{"Africa/Accra",{"GMT","GMT"},undef,0,0,undef,{0,0},undef,{0,0}},
{"Africa/Addis_Ababa",{"EAT","EAT"},undef,180,0,undef,{0,0},undef,{0,0}},
{"Africa/Addis Ababa",{"EAT","EAT"},undef,180,0,undef,{0,0},undef,{0,0}},
{"Africa/Algiers",{"CET","CET"},undef,60,0,undef,{0,0},undef,{0,0}},
{"Africa/Asmera",{"EAT","EAT"},undef,180,0,undef,{0,0},undef,{0,0}},
{"Africa/Bamako",{"GMT","GMT"},undef,0,0,undef,{0,0},undef,{0,0}},
@ -52,10 +52,10 @@
{"Africa/Ceuta",{"CET","CET"},{"CEST","CEST"},60,60,{last,sun,mar},{2,0},{last,sun,oct},{3,0}},
{"Africa/Conakry",{"GMT","GMT"},undef,0,0,undef,{0,0},undef,{0,0}},
{"Africa/Dakar",{"GMT","GMT"},undef,0,0,undef,{0,0},undef,{0,0}},
{"Africa/Dar_es_Salaam",{"EAT","EAT"},undef,180,0,undef,{0,0},undef,{0,0}},
{"Africa/Dar es Salaam",{"EAT","EAT"},undef,180,0,undef,{0,0},undef,{0,0}},
{"Africa/Djibouti",{"EAT","EAT"},undef,180,0,undef,{0,0},undef,{0,0}},
{"Africa/Douala",{"WAT","WAT"},undef,60,0,undef,{0,0},undef,{0,0}},
{"Africa/El_Aaiun",{"WET","WET"},undef,0,0,undef,{0,0},undef,{0,0}},
{"Africa/El Aaiun",{"WET","WET"},undef,0,0,undef,{0,0},undef,{0,0}},
{"Africa/Freetown",{"GMT","GMT"},undef,0,0,undef,{0,0},undef,{0,0}},
{"Africa/Gaborone",{"CAT","CAT"},undef,120,0,undef,{0,0},undef,{0,0}},
{"Africa/Harare",{"CAT","CAT"},undef,120,0,undef,{0,0},undef,{0,0}},
@ -82,7 +82,7 @@
{"Africa/Nouakchott",{"GMT","GMT"},undef,0,0,undef,{0,0},undef,{0,0}},
{"Africa/Ouagadougou",{"GMT","GMT"},undef,0,0,undef,{0,0},undef,{0,0}},
{"Africa/Porto-Novo",{"WAT","WAT"},undef,60,0,undef,{0,0},undef,{0,0}},
{"Africa/Sao_Tome",{"GMT","GMT"},undef,0,0,undef,{0,0},undef,{0,0}},
{"Africa/Sao Tome",{"GMT","GMT"},undef,0,0,undef,{0,0},undef,{0,0}},
{"Africa/Timbuktu",{"GMT","GMT"},undef,0,0,undef,{0,0},undef,{0,0}},
{"Africa/Tripoli",{"EET","EET"},undef,120,0,undef,{0,0},undef,{0,0}},
{"Africa/Tunis",{"CET","CET"},undef,60,0,undef,{0,0},undef,{0,0}},
@ -97,11 +97,11 @@
{"America/Barbados",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Belem",{"BRT","BRT"},undef,-180,0,undef,{0,0},undef,{0,0}},
{"America/Belize",{"CST","CST"},undef,-360,0,undef,{0,0},undef,{0,0}},
{"America/Boa_Vista",{"AMT","AMT"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Boa Vista",{"AMT","AMT"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Bogota",{"COT","COT"},undef,-300,0,undef,{0,0},undef,{0,0}},
{"America/Boise",{"MST","MST"},{"MDT","MDT"},-420,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Buenos_Aires",{"ART","ART"},undef,-180,0,undef,{0,0},undef,{0,0}},
{"America/Cambridge_Bay",{"MST","MST"},{"MDT","MDT"},-420,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Buenos Aires",{"ART","ART"},undef,-180,0,undef,{0,0},undef,{0,0}},
{"America/Cambridge Bay",{"MST","MST"},{"MDT","MDT"},-420,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Cancun",{"CST","CST"},{"CDT","CDT"},-360,60,{1,sun,apr},{2,0},{last,sun,oct},{2,0}},
{"America/Caracas",{"VET","VET"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Catamarca",{"ART","ART"},undef,-180,0,undef,{0,0},undef,{0,0}},
@ -110,23 +110,23 @@
{"America/Chicago",{"CST","Central Standard Time"},{"CDT","Central Daylight Time"},-360,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Chihuahua",{"MST","MST"},{"MDT","MDT"},-420,60,{1,sun,apr},{2,0},{last,sun,oct},{2,0}},
{"America/Cordoba",{"ART","ART"},undef,-180,0,undef,{0,0},undef,{0,0}},
{"America/Costa_Rica",{"CST","CST"},undef,-360,0,undef,{0,0},undef,{0,0}},
{"America/Costa Rica",{"CST","CST"},undef,-360,0,undef,{0,0},undef,{0,0}},
{"America/Cuiaba",{"AMT","AMT"},{"AMST","AMST"},-240,60,{2,sun,oct},{0,0},{3,sun,feb},{0,0}},
{"America/Curacao",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Danmarkshavn",{"GMT","GMT"},undef,0,0,undef,{0,0},undef,{0,0}},
{"America/Dawson",{"PST","PST"},{"PDT","PDT"},-480,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Dawson_Creek",{"MST","MST"},undef,-420,0,undef,{0,0},undef,{0,0}},
{"America/Dawson Creek",{"MST","MST"},undef,-420,0,undef,{0,0},undef,{0,0}},
{"America/Denver",{"MST","Mountain Standard Time"},{"MDT","Mountain Daylight Time"},-420,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Detroit",{"EST","EST"},{"EDT","EDT"},-300,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Dominica",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Edmonton",{"MST","MST"},{"MDT","MDT"},-420,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Eirunepe",{"ACT","ACT"},undef,-300,0,undef,{0,0},undef,{0,0}},
{"America/El_Salvador",{"CST","CST"},undef,-360,0,undef,{0,0},undef,{0,0}},
{"America/El Salvador",{"CST","CST"},undef,-360,0,undef,{0,0},undef,{0,0}},
{"America/Fortaleza",{"BRT","BRT"},{"BRST","BRST"},-180,60,{2,sun,oct},{0,0},{3,sun,feb},{0,0}},
{"America/Glace_Bay",{"AST","AST"},{"ADT","ADT"},-240,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Glace Bay",{"AST","AST"},{"ADT","ADT"},-240,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Godthab",{"WGT","WGT"},{"WGST","WGST"},-180,60,{last,sat,mar},{22,0},{last,sat,oct},{23,0}},
{"America/Goose_Bay",{"AST","AST"},{"ADT","ADT"},-240,60,{1,sun,apr},{0,1},{last,sun,oct},{0,1}},
{"America/Grand_Turk",{"EST","EST"},{"EDT","EDT"},-300,60,{1,sun,apr},{0,0},{last,sun,oct},{0,0}},
{"America/Goose Bay",{"AST","AST"},{"ADT","ADT"},-240,60,{1,sun,apr},{0,1},{last,sun,oct},{0,1}},
{"America/Grand Turk",{"EST","EST"},{"EDT","EDT"},-300,60,{1,sun,apr},{0,0},{last,sun,oct},{0,0}},
{"America/Grenada",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Guadeloupe",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Guatemala",{"CST","CST"},undef,-360,0,undef,{0,0},undef,{0,0}},
@ -147,9 +147,9 @@
{"America/Juneau",{"AKST","AKST"},{"AKDT","AKDT"},-540,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Kentucky/Louisville",{"EST","EST"},{"EDT","EDT"},-300,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Kentucky/Monticello",{"EST","EST"},{"EDT","EDT"},-300,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/La_Paz",{"BOT","BOT"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/La Paz",{"BOT","BOT"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Lima",{"PET","PET"},undef,-300,0,undef,{0,0},undef,{0,0}},
{"America/Los_Angeles",{"PST","Pacific Standard Time"},{"PDT","Pacific Daylight Time"},-480,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Los Angeles",{"PST","Pacific Standard Time"},{"PDT","Pacific Daylight Time"},-480,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Louisville",{"EST","EST"},{"EDT","EDT"},-300,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Maceio",{"BRT","BRT"},{"BRST","BRST"},-180,60,{2,sun,oct},{0,0},{3,sun,feb},{0,0}},
{"America/Managua",{"CST","CST"},undef,-360,0,undef,{0,0},undef,{0,0}},
@ -159,46 +159,46 @@
{"America/Mendoza",{"ART","ART"},undef,-180,0,undef,{0,0},undef,{0,0}},
{"America/Menominee",{"CST","CST"},{"CDT","CDT"},-360,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Merida",{"CST","CST"},{"CDT","CDT"},-360,60,{1,sun,apr},{2,0},{last,sun,oct},{2,0}},
{"America/Mexico_City",{"CST","CST"},{"CDT","CDT"},-360,60,{1,sun,apr},{2,0},{last,sun,oct},{2,0}},
{"America/Mexico City",{"CST","CST"},{"CDT","CDT"},-360,60,{1,sun,apr},{2,0},{last,sun,oct},{2,0}},
{"America/Miquelon",{"PMST","PMST"},{"PMDT","PMDT"},-180,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Monterrey",{"CST","CST"},{"CDT","CDT"},-360,60,{1,sun,apr},{2,0},{last,sun,oct},{2,0}},
{"America/Montevideo",{"UYT","UYT"},undef,-180,0,undef,{0,0},undef,{0,0}},
{"America/Montreal",{"EST","EST"},{"EDT","EDT"},-300,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Montserrat",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Nassau",{"EST","EST"},{"EDT","EDT"},-300,60,{1,sun,apr},{2,0},{last,sun,oct},{2,0}},
{"America/New_York",{"EST","Eastern Standard Time"},{"EDT","Eastern Daylight Time"},-300,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/New York",{"EST","Eastern Standard Time"},{"EDT","Eastern Daylight Time"},-300,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Nipigon",{"EST","EST"},{"EDT","EDT"},-300,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Nome",{"AKST","AKST"},{"AKDT","AKDT"},-540,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Noronha",{"FNT","FNT"},undef,-120,0,undef,{0,0},undef,{0,0}},
{"America/North_Dakota/Center",{"CST","CST"},{"CDT","CDT"},-360,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/North Dakota/Center",{"CST","CST"},{"CDT","CDT"},-360,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Panama",{"EST","EST"},undef,-300,0,undef,{0,0},undef,{0,0}},
{"America/Pangnirtung",{"EST","EST"},{"EDT","EDT"},-300,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Paramaribo",{"SRT","SRT"},undef,-180,0,undef,{0,0},undef,{0,0}},
{"America/Phoenix",{"MST","Mountain Standard Time"},undef,-420,0,undef,{0,0},undef,{0,0}},
{"America/Port-au-Prince",{"EST","EST"},undef,-300,0,undef,{0,0},undef,{0,0}},
{"America/Port_of_Spain",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Porto_Velho",{"AMT","AMT"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Puerto_Rico",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Rainy_River",{"CST","CST"},{"CDT","CDT"},-360,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Rankin_Inlet",{"CST","CST"},{"CDT","CDT"},-360,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Port of Spain",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Porto Velho",{"AMT","AMT"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Puerto Rico",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Rainy River",{"CST","CST"},{"CDT","CDT"},-360,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Rankin Inlet",{"CST","CST"},{"CDT","CDT"},-360,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Recife",{"BRT","BRT"},{"BRST","BRST"},-180,60,{2,sun,oct},{0,0},{3,sun,feb},{0,0}},
{"America/Regina",{"CST","CST"},undef,-360,0,undef,{0,0},undef,{0,0}},
{"America/Rio_Branco",{"ACT","ACT"},undef,-300,0,undef,{0,0},undef,{0,0}},
{"America/Rio Branco",{"ACT","ACT"},undef,-300,0,undef,{0,0},undef,{0,0}},
{"America/Rosario",{"ART","ART"},undef,-180,0,undef,{0,0},undef,{0,0}},
{"America/Santiago",{"CLT","CLT"},{"CLST","CLST"},-240,60,{2,sun,oct},{0,0},{2,sun,mar},{0,0}},
{"America/Santo_Domingo",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Sao_Paulo",{"BRT","BRT"},{"BRST","BRST"},-180,60,{2,sun,oct},{0,0},{3,sun,feb},{0,0}},
{"America/Santo Domingo",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Sao Paulo",{"BRT","BRT"},{"BRST","BRST"},-180,60,{2,sun,oct},{0,0},{3,sun,feb},{0,0}},
{"America/Scoresbysund",{"EGT","EGT"},{"EGST","EGST"},-60,60,{last,sun,mar},{0,0},{last,sun,oct},{1,0}},
{"America/Shiprock",{"MST","MST"},{"MDT","MDT"},-420,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/St_Johns",{"NST","NST"},{"NDT","NDT"},-210,60,{1,sun,apr},{0,1},{last,sun,oct},{0,1}},
{"America/St_Kitts",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/St_Lucia",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/St_Thomas",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/St_Vincent",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Swift_Current",{"CST","CST"},undef,-360,0,undef,{0,0},undef,{0,0}},
{"America/St Johns",{"NST","NST"},{"NDT","NDT"},-210,60,{1,sun,apr},{0,1},{last,sun,oct},{0,1}},
{"America/St Kitts",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/St Lucia",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/St Thomas",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/St Vincent",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Swift Current",{"CST","CST"},undef,-360,0,undef,{0,0},undef,{0,0}},
{"America/Tegucigalpa",{"CST","CST"},undef,-360,0,undef,{0,0},undef,{0,0}},
{"America/Thule",{"AST","AST"},undef,-240,0,{2,sun,mar},{0,0},{1,sun,nov},{0,0}},
{"America/Thunder_Bay",{"EST","EST"},{"EDT","EDT"},-300,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Thunder Bay",{"EST","EST"},{"EDT","EDT"},-300,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
{"America/Tijuana",{"PST","PST"},{"PDT","PDT"},-480,60,{1,sun,apr},{2,0},{last,sun,oct},{2,0}},
{"America/Tortola",{"AST","AST"},undef,-240,0,undef,{0,0},undef,{0,0}},
{"America/Vancouver",{"PST","PST"},{"PDT","PDT"},-480,60,{2,sun,mar},{2,0},{1,sun,nov},{2,0}},
@ -212,7 +212,7 @@
{"Antarctica/Mawson",{"MAWT","MAWT"},undef,360,0,undef,{0,0},undef,{0,0}},
{"Antarctica/McMurdo",{"NZST","NZST"},{"NZDT","NZDT"},720,60,{1,sun,oct},{2,0},{3,sun,mar},{3,0}},
{"Antarctica/Palmer",{"CLT","CLT"},{"CLST","CLST"},-240,60,{2,sun,oct},{0,0},{2,sun,mar},{0,0}},
{"Antarctica/South_Pole",{"NZST","NZST"},{"NZDT","NZDT"},720,60,{1,sun,oct},{2,0},{3,sun,mar},{3,0}},
{"Antarctica/South Pole",{"NZST","NZST"},{"NZDT","NZDT"},720,60,{1,sun,oct},{2,0},{3,sun,mar},{3,0}},
{"Antarctica/Syowa",{"SYOT","SYOT"},undef,180,0,undef,{0,0},undef,{0,0}},
{"Antarctica/Vostok",{"VOST","VOST"},undef,360,0,undef,{0,0},undef,{0,0}},
{"Arctic/Longyearbyen",{"CET","CET"},{"CEST","CEST"},60,60,{last,sun,mar},{2,0},{last,sun,oct},{3,0}},
@ -241,7 +241,7 @@
{"Asia/Dushanbe",{"TJT","TJT"},undef,300,0,undef,{0,0},undef,{0,0}},
{"Asia/Gaza",{"EET","EET"},{"EEST","EEST"},120,60,{3,fri,apr},{0,0},{3,fri,oct},{0,0}},
{"Asia/Harbin",{"CST","CST"},undef,480,0,undef,{0,0},undef,{0,0}},
{"Asia/Hong_Kong",{"HKT","HKT"},undef,480,0,undef,{0,0},undef,{0,0}},
{"Asia/Hong Kong",{"HKT","HKT"},undef,480,0,undef,{0,0},undef,{0,0}},
{"Asia/Hovd",{"HOVT","HOVT"},undef,420,0,undef,{0,0},undef,{0,0}},
{"Asia/Irkutsk",{"IRKT","IRKT"},{"IRKST","IRKST"},480,60,{last,sun,mar},{2,0},{last,sun,oct},{3,0}},
{"Asia/Istanbul",{"EET","EET"},{"EEST","EEST"},120,60,{last,sun,mar},{3,0},{last,sun,oct},{4,0}},
@ -254,7 +254,7 @@
{"Asia/Kashgar",{"CST","CST"},undef,480,0,undef,{0,0},undef,{0,0}},
{"Asia/Katmandu",{"NPT","NPT"},undef,345,0,undef,{0,0},undef,{0,0}},
{"Asia/Krasnoyarsk",{"KRAT","KRAT"},{"KRAST","KRAST"},420,60,{last,sun,mar},{2,0},{last,sun,oct},{3,0}},
{"Asia/Kuala_Lumpur",{"MYT","MYT"},undef,480,0,undef,{0,0},undef,{0,0}},
{"Asia/Kuala Lumpur",{"MYT","MYT"},undef,480,0,undef,{0,0},undef,{0,0}},
{"Asia/Kuching",{"MYT","MYT"},undef,480,0,undef,{0,0},undef,{0,0}},
{"Asia/Kuwait",{"AST","AST"},undef,180,0,undef,{0,0},undef,{0,0}},
{"Asia/Macao",{"CST","CST"},undef,480,0,undef,{0,0},undef,{0,0}},
@ -267,7 +267,7 @@
{"Asia/Novosibirsk",{"NOVT","NOVT"},{"NOVST","NOVST"},360,60,{last,sun,mar},{2,0},{last,sun,oct},{3,0}},
{"Asia/Omsk",{"OMST","OMST"},{"OMSST","OMSST"},360,60,{last,sun,mar},{2,0},{last,sun,oct},{3,0}},
{"Asia/Oral",{"WST","WST"},undef,300,0,undef,{0,0},undef,{0,0}},
{"Asia/Phnom_Penh",{"ICT","ICT"},undef,420,0,undef,{0,0},undef,{0,0}},
{"Asia/Phnom Penh",{"ICT","ICT"},undef,420,0,undef,{0,0},undef,{0,0}},
{"Asia/Pontianak",{"WIT","WIT"},undef,420,0,undef,{0,0},undef,{0,0}},
{"Asia/Pyongyang",{"KST","KST"},undef,540,0,undef,{0,0},undef,{0,0}},
{"Asia/Qyzylorda",{"KST","KST"},undef,360,0,undef,{0,0},undef,{0,0}},
@ -286,7 +286,7 @@
{"Asia/Tehran",{"IRT","IRT"},undef,210,0,undef,{0,0},undef,{0,0}},
{"Asia/Thimphu",{"BTT","BTT"},undef,360,0,undef,{0,0},undef,{0,0}},
{"Asia/Tokyo",{"JST","JST"},undef,540,0,undef,{0,0},undef,{0,0}},
{"Asia/Ujung_Pandang",{"CIT","CIT"},undef,480,0,undef,{0,0},undef,{0,0}},
{"Asia/Ujung Pandang",{"CIT","CIT"},undef,480,0,undef,{0,0},undef,{0,0}},
{"Asia/Ulaanbaatar",{"ULAT","ULAT"},undef,480,0,undef,{0,0},undef,{0,0}},
{"Asia/Urumqi",{"CST","CST"},undef,480,0,undef,{0,0},undef,{0,0}},
{"Asia/Vientiane",{"ICT","ICT"},undef,420,0,undef,{0,0},undef,{0,0}},
@ -297,21 +297,21 @@
{"Atlantic/Azores",{"AZOT","AZOT"},{"AZOST","AZOST"},-60,60,{last,sun,mar},{0,0},{last,sun,oct},{1,0}},
{"Atlantic/Bermuda",{"AST","AST"},{"ADT","ADT"},-240,60,{1,sun,apr},{2,0},{last,sun,oct},{2,0}},
{"Atlantic/Canary",{"WET","WET"},{"WEST","WEST"},0,60,{last,sun,mar},{1,0},{last,sun,oct},{2,0}},
{"Atlantic/Cape_Verde",{"CVT","CVT"},undef,-60,0,undef,{0,0},undef,{0,0}},
{"Atlantic/Cape Verde",{"CVT","CVT"},undef,-60,0,undef,{0,0},undef,{0,0}},
{"Atlantic/Faeroe",{"WET","WET"},{"WEST","WEST"},0,60,{last,sun,mar},{1,0},{last,sun,oct},{2,0}},
{"Atlantic/Jan_Mayen",{"CET","CET"},{"CEST","CEST"},60,60,{last,sun,mar},{2,0},{last,sun,oct},{3,0}},
{"Atlantic/Jan Mayen",{"CET","CET"},{"CEST","CEST"},60,60,{last,sun,mar},{2,0},{last,sun,oct},{3,0}},
{"Atlantic/Madeira",{"WET","WET"},{"WEST","WEST"},0,60,{last,sun,mar},{1,0},{last,sun,oct},{2,0}},
{"Atlantic/Reykjavik",{"GMT","GMT"},undef,0,0,undef,{0,0},undef,{0,0}},
{"Atlantic/South_Georgia",{"GST","GST"},undef,-120,0,undef,{0,0},undef,{0,0}},
{"Atlantic/St_Helena",{"GMT","GMT"},undef,0,0,undef,{0,0},undef,{0,0}},
{"Atlantic/South Georgia",{"GST","GST"},undef,-120,0,undef,{0,0},undef,{0,0}},
{"Atlantic/St Helena",{"GMT","GMT"},undef,0,0,undef,{0,0},undef,{0,0}},
{"Atlantic/Stanley",{"FKT","FKT"},{"FKST","FKST"},-240,60,{1,sun,sep},{2,0},{3,sun,apr},{2,0}},
{"Australia/Adelaide",{"CST","CST"},{"CST","CST"},570,60,{last,sun,oct},{2,0},{last,sun,mar},{3,0}},
{"Australia/Brisbane",{"EST","EST"},undef,600,0,undef,{0,0},undef,{0,0}},
{"Australia/Broken_Hill",{"CST","CST"},{"CST","CST"},570,60,{last,sun,oct},{2,0},{last,sun,mar},{3,0}},
{"Australia/Broken Hill",{"CST","CST"},{"CST","CST"},570,60,{last,sun,oct},{2,0},{last,sun,mar},{3,0}},
{"Australia/Darwin",{"CST","CST"},undef,570,0,undef,{0,0},undef,{0,0}},
{"Australia/Hobart",{"EST","EST"},{"EST","EST"},600,60,{1,sun,oct},{2,0},{last,sun,mar},{3,0}},
{"Australia/Lindeman",{"EST","EST"},undef,600,0,undef,{0,0},undef,{0,0}},
{"Australia/Lord_Howe",{"LHST","LHST"},{"LHST","LHST"},630,30,{last,sun,oct},{2,0},{last,sun,mar},{2,0}},
{"Australia/Lord Howe",{"LHST","LHST"},{"LHST","LHST"},630,30,{last,sun,oct},{2,0},{last,sun,mar},{2,0}},
{"Australia/Melbourne",{"EST","EST"},{"EST","EST"},600,60,{last,sun,oct},{2,0},{last,sun,mar},{3,0}},
{"Australia/Perth",{"WST","WST"},undef,480,0,undef,{0,0},undef,{0,0}},
{"Australia/Sydney",{"EST","EST"},{"EST","EST"},600,60,{last,sun,oct},{2,0},{last,sun,mar},{3,0}},
@ -349,7 +349,7 @@
{"Europe/Riga",{"EET","EET"},{"EEST","EEST"},120,60,{last,sun,mar},{3,0},{last,sun,oct},{4,0}},
{"Europe/Rome",{"CET","CET"},{"CEST","CEST"},60,60,{last,sun,mar},{2,0},{last,sun,oct},{3,0}},
{"Europe/Samara",{"SAMT","SAMT"},{"SAMST","SAMST"},240,60,{last,sun,mar},{2,0},{last,sun,oct},{3,0}},
{"Europe/San_Marino",{"CET","CET"},{"CEST","CEST"},60,60,{last,sun,mar},{2,0},{last,sun,oct},{3,0}},
{"Europe/San Marino",{"CET","CET"},{"CEST","CEST"},60,60,{last,sun,mar},{2,0},{last,sun,oct},{3,0}},
{"Europe/Sarajevo",{"CET","CET"},{"CEST","CEST"},60,60,{last,sun,mar},{2,0},{last,sun,oct},{3,0}},
{"Europe/Simferopol",{"EET","EET"},{"EEST","EEST"},120,60,{last,sun,mar},{3,0},{last,sun,oct},{4,0}},
{"Europe/Skopje",{"CET","CET"},{"CEST","CEST"},60,60,{last,sun,mar},{2,0},{last,sun,oct},{3,0}},
@ -402,11 +402,11 @@
{"Pacific/Niue",{"NUT","NUT"},undef,-660,0,undef,{0,0},undef,{0,0}},
{"Pacific/Norfolk",{"NFT","NFT"},undef,690,0,undef,{0,0},undef,{0,0}},
{"Pacific/Noumea",{"NCT","NCT"},undef,660,0,undef,{0,0},undef,{0,0}},
{"Pacific/Pago_Pago",{"SST","SST"},undef,-660,0,undef,{0,0},undef,{0,0}},
{"Pacific/Pago Pago",{"SST","SST"},undef,-660,0,undef,{0,0},undef,{0,0}},
{"Pacific/Palau",{"PWT","PWT"},undef,540,0,undef,{0,0},undef,{0,0}},
{"Pacific/Pitcairn",{"PST","PST"},undef,-480,0,undef,{0,0},undef,{0,0}},
{"Pacific/Ponape",{"PONT","PONT"},undef,660,0,undef,{0,0},undef,{0,0}},
{"Pacific/Port_Moresby",{"PGT","PGT"},undef,600,0,undef,{0,0},undef,{0,0}},
{"Pacific/Port Moresby",{"PGT","PGT"},undef,600,0,undef,{0,0},undef,{0,0}},
{"Pacific/Rarotonga",{"CKT","CKT"},undef,-600,0,undef,{0,0},undef,{0,0}},
{"Pacific/Saipan",{"ChST","ChST"},undef,600,0,undef,{0,0},undef,{0,0}},
{"Pacific/Tahiti",{"TAHT","TAHT"},undef,-600,0,undef,{0,0},undef,{0,0}},

View file

@ -4,16 +4,16 @@
[["NPT","Asia/Katmandu"],["CCT","Indian/Cocos"]],
[["DAVT","Antarctica/Davis"],
["AZT","Asia/Baku"],
["HKT","Asia/Hong_Kong"],
["HKT","Asia/Hong Kong"],
["IRT","Asia/Tehran"]],
[["MST","America/Boise","America/Cambridge_Bay",
"America/Chihuahua","America/Dawson_Creek",
[["MST","America/Boise","America/Cambridge Bay",
"America/Chihuahua","America/Dawson Creek",
"America/Denver","America/Edmonton",
"America/Hermosillo","America/Inuvik",
"America/Mazatlan","America/Phoenix",
"America/Shiprock","America/Yellowknife"],
["YAKST","Asia/Yakutsk"]],
[["ADT","America/Glace_Bay","America/Goose_Bay",
[["ADT","America/Glace Bay","America/Goose Bay",
"America/Halifax","Asia/Baghdad",
"Atlantic/Bermuda"],
["DDUT","Antarctica/DumontDUrville"],
@ -31,16 +31,16 @@
"Europe/Riga","Europe/Simferopol","Europe/Sofia",
"Europe/Tallinn","Europe/Uzhgorod",
"Europe/Vilnius","Europe/Zaporozhye"],
["NDT","America/St_Johns"],
["NDT","America/St Johns"],
["GST","Asia/Dubai","Asia/Muscat",
"Atlantic/South_Georgia"],
"Atlantic/South Georgia"],
["SAKST","Asia/Sakhalin"],
["SGT","Asia/Singapore"]],
[["SAKT","Asia/Sakhalin"],
["UZT","Asia/Samarkand","Asia/Tashkent"],
["GEST","Asia/Tbilisi"],
["LHST","Australia/Lord_Howe",
"Australia/Lord_Howe"],
["LHST","Australia/Lord Howe",
"Australia/Lord Howe"],
["MSK","Europe/Moscow"],
["RET","Indian/Reunion"],
["PHOT","Pacific/Enderbury"],
@ -52,20 +52,20 @@
["AST","America/Anguilla","America/Antigua",
"America/Aruba","America/Barbados",
"America/Curacao","America/Dominica",
"America/Glace_Bay","America/Goose_Bay",
"America/Glace Bay","America/Goose Bay",
"America/Grenada","America/Guadeloupe",
"America/Halifax","America/Martinique",
"America/Montserrat","America/Port_of_Spain",
"America/Puerto_Rico","America/Santo_Domingo",
"America/St_Kitts","America/St_Lucia",
"America/St_Thomas","America/St_Vincent",
"America/Montserrat","America/Port of Spain",
"America/Puerto Rico","America/Santo Domingo",
"America/St Kitts","America/St Lucia",
"America/St Thomas","America/St Vincent",
"America/Thule","America/Tortola","Asia/Aden",
"Asia/Baghdad","Asia/Bahrain","Asia/Kuwait",
"Asia/Qatar","Asia/Riyadh","Atlantic/Bermuda"],
["PETST","Asia/Kamchatka"],
["FKST","Atlantic/Stanley"],
["EASST","Pacific/Easter"]],
[["NST","America/St_Johns"],
[["NST","America/St Johns"],
["AQTST","Asia/Aqtau","Asia/Aqtobe"],
["YEKT","Asia/Yekaterinburg"]],
[["BDT","Asia/Dhaka"],
@ -108,50 +108,50 @@
"Africa/Mbabane"],
["CDT","America/Cancun","America/Chicago",
"America/Havana","America/Menominee",
"America/Merida","America/Mexico_City",
"America/Monterrey","America/North_Dakota/Center",
"America/Rainy_River","America/Rankin_Inlet",
"America/Merida","America/Mexico City",
"America/Monterrey","America/North Dakota/Center",
"America/Rainy River","America/Rankin Inlet",
"America/Winnipeg"],
["CHAST","Pacific/Chatham"]],
[["HAST","America/Adak"],
["PYST","America/Asuncion"],
["PDT","America/Dawson","America/Los_Angeles",
["PDT","America/Dawson","America/Los Angeles",
"America/Tijuana","America/Vancouver",
"America/Whitehorse"],
["IST","Asia/Calcutta","Asia/Jerusalem",
"Europe/Dublin"],
["CIT","Asia/Makassar","Asia/Ujung_Pandang"],
["CIT","Asia/Makassar","Asia/Ujung Pandang"],
["GET","Asia/Tbilisi"],
["SAMST","Europe/Samara"]]},
{[["PMDT","America/Miquelon"]],
[["EAT","Africa/Addis_Ababa","Africa/Asmera",
"Africa/Dar_es_Salaam","Africa/Djibouti",
[["EAT","Africa/Addis Ababa","Africa/Asmera",
"Africa/Dar es Salaam","Africa/Djibouti",
"Africa/Kampala","Africa/Khartoum",
"Africa/Mogadishu","Africa/Nairobi",
"Indian/Antananarivo","Indian/Comoro",
"Indian/Mayotte"],
["CST","America/Belize","America/Cancun",
"America/Chicago","America/Costa_Rica",
"America/El_Salvador","America/Guatemala",
"America/Chicago","America/Costa Rica",
"America/El Salvador","America/Guatemala",
"America/Havana","America/Managua",
"America/Menominee","America/Merida",
"America/Mexico_City","America/Monterrey",
"America/North_Dakota/Center",
"America/Rainy_River","America/Rankin_Inlet",
"America/Regina","America/Swift_Current",
"America/Mexico City","America/Monterrey",
"America/North Dakota/Center",
"America/Rainy River","America/Rankin Inlet",
"America/Regina","America/Swift Current",
"America/Tegucigalpa","America/Winnipeg",
"Asia/Chongqing","Asia/Harbin","Asia/Kashgar",
"Asia/Macao","Asia/Macau","Asia/Shanghai",
"Asia/Taipei","Asia/Urumqi","Australia/Adelaide",
"Australia/Adelaide","Australia/Broken_Hill",
"Australia/Broken_Hill","Australia/Darwin"],
"Australia/Adelaide","Australia/Broken Hill",
"Australia/Broken Hill","Australia/Darwin"],
["TJT","Asia/Dushanbe"],
["KRAT","Asia/Krasnoyarsk"],
["MYT","Asia/Kuala_Lumpur","Asia/Kuching"],
["MYT","Asia/Kuala Lumpur","Asia/Kuching"],
["VLAST","Asia/Vladivostok"],
["SCT","Indian/Mahe"]],
[["CEST","Africa/Ceuta","Arctic/Longyearbyen",
"Atlantic/Jan_Mayen","Europe/Amsterdam",
"Atlantic/Jan Mayen","Europe/Amsterdam",
"Europe/Andorra","Europe/Belgrade",
"Europe/Berlin","Europe/Bratislava",
"Europe/Brussels","Europe/Budapest",
@ -159,12 +159,12 @@
"Europe/Ljubljana","Europe/Luxembourg",
"Europe/Madrid","Europe/Malta","Europe/Monaco",
"Europe/Oslo","Europe/Paris","Europe/Prague",
"Europe/Rome","Europe/San_Marino",
"Europe/Rome","Europe/San Marino",
"Europe/Sarajevo","Europe/Skopje",
"Europe/Stockholm","Europe/Tirane","Europe/Vaduz",
"Europe/Vatican","Europe/Vienna","Europe/Warsaw",
"Europe/Zagreb","Europe/Zurich"],
["PST","America/Dawson","America/Los_Angeles",
["PST","America/Dawson","America/Los Angeles",
"America/Tijuana","America/Vancouver",
"America/Whitehorse","Pacific/Pitcairn"],
["SYOT","Antarctica/Syowa"],
@ -198,45 +198,45 @@
"America/Nome","America/Yakutat"],
["BRST","America/Araguaina","America/Fortaleza",
"America/Maceio","America/Recife",
"America/Sao_Paulo"],
"America/Sao Paulo"],
["CLT","America/Santiago","Antarctica/Palmer"],
["EGST","America/Scoresbysund"],
["LKT","Asia/Colombo"],
["OMST","Asia/Omsk"],
["WEST","Atlantic/Canary","Atlantic/Faeroe",
"Atlantic/Madeira","Europe/Lisbon"],
["PGT","Pacific/Port_Moresby"]],
["PGT","Pacific/Port Moresby"]],
[["GMT","Africa/Abidjan","Africa/Accra",
"Africa/Bamako","Africa/Banjul","Africa/Bissau",
"Africa/Conakry","Africa/Dakar","Africa/Freetown",
"Africa/Lome","Africa/Monrovia",
"Africa/Nouakchott","Africa/Ouagadougou",
"Africa/Sao_Tome","Africa/Timbuktu",
"Africa/Sao Tome","Africa/Timbuktu",
"America/Danmarkshavn","Atlantic/Reykjavik",
"Atlantic/St_Helena","Europe/Belfast",
"Atlantic/St Helena","Europe/Belfast",
"Europe/Dublin","Europe/London"],
["ACT","America/Eirunepe","America/Rio_Branco"],
["ACT","America/Eirunepe","America/Rio Branco"],
["NZDT","Antarctica/McMurdo",
"Antarctica/South_Pole","Pacific/Auckland"],
"Antarctica/South Pole","Pacific/Auckland"],
["YEKST","Asia/Yekaterinburg"],
["GALT","Pacific/Galapagos"]],
[["EDT","America/Detroit","America/Grand_Turk",
[["EDT","America/Detroit","America/Grand Turk",
"America/Iqaluit","America/Kentucky/Louisville",
"America/Kentucky/Monticello",
"America/Louisville","America/Montreal",
"America/Nassau","America/New_York",
"America/Nassau","America/New York",
"America/Nipigon","America/Pangnirtung",
"America/Thunder_Bay"],
["BOT","America/La_Paz"],
"America/Thunder Bay"],
["BOT","America/La Paz"],
["TMT","Asia/Ashgabat"],
["PETT","Asia/Kamchatka"],
["KRAST","Asia/Krasnoyarsk"],
["CVT","Atlantic/Cape_Verde"],
["CVT","Atlantic/Cape Verde"],
["FKT","Atlantic/Stanley"],
["EAST","Pacific/Easter"],
["NCT","Pacific/Noumea"]],
[["AMT","America/Boa_Vista","America/Cuiaba",
"America/Manaus","America/Porto_Velho",
[["AMT","America/Boa Vista","America/Cuiaba",
"America/Manaus","America/Porto Velho",
"Asia/Yerevan"],
["WGT","America/Godthab"],
["UYT","America/Montevideo"],
@ -245,17 +245,17 @@
["KST","Asia/Pyongyang","Asia/Qyzylorda",
"Asia/Seoul"],
["BTT","Asia/Thimphu"]],
[["ART","America/Buenos_Aires","America/Catamarca",
[["ART","America/Buenos Aires","America/Catamarca",
"America/Cordoba","America/Jujuy",
"America/Mendoza","America/Rosario"],
["VET","America/Caracas"],
["NZST","Antarctica/McMurdo",
"Antarctica/South_Pole","Pacific/Auckland"],
"Antarctica/South Pole","Pacific/Auckland"],
["TRUT","Pacific/Truk"],
["WAKT","Pacific/Wake"]],
[["CET","Africa/Algiers","Africa/Ceuta",
"Africa/Tunis","Arctic/Longyearbyen",
"Atlantic/Jan_Mayen","Europe/Amsterdam",
"Atlantic/Jan Mayen","Europe/Amsterdam",
"Europe/Andorra","Europe/Belgrade",
"Europe/Berlin","Europe/Bratislava",
"Europe/Brussels","Europe/Budapest",
@ -263,13 +263,13 @@
"Europe/Ljubljana","Europe/Luxembourg",
"Europe/Madrid","Europe/Malta","Europe/Monaco",
"Europe/Oslo","Europe/Paris","Europe/Prague",
"Europe/Rome","Europe/San_Marino",
"Europe/Rome","Europe/San Marino",
"Europe/Sarajevo","Europe/Skopje",
"Europe/Stockholm","Europe/Tirane","Europe/Vaduz",
"Europe/Vatican","Europe/Vienna","Europe/Warsaw",
"Europe/Zagreb","Europe/Zurich"],
["EST","America/Cayman","America/Detroit",
"America/Grand_Turk",
"America/Grand Turk",
"America/Indiana/Indianapolis",
"America/Indiana/Knox","America/Indiana/Marengo",
"America/Indiana/Vevay","America/Indianapolis",
@ -277,10 +277,10 @@
"America/Kentucky/Louisville",
"America/Kentucky/Monticello",
"America/Louisville","America/Montreal",
"America/Nassau","America/New_York",
"America/Nassau","America/New York",
"America/Nipigon","America/Panama",
"America/Pangnirtung","America/Port-au-Prince",
"America/Thunder_Bay","Australia/Brisbane",
"America/Thunder Bay","Australia/Brisbane",
"Australia/Hobart","Australia/Hobart",
"Australia/Lindeman","Australia/Melbourne",
"Australia/Melbourne","Australia/Sydney",
@ -298,21 +298,21 @@
["TFT","Indian/Kerguelen"],
["MUT","Indian/Mauritius"]],
[["AFT","Asia/Kabul"],["TKT","Pacific/Fakaofo"]],
[["WET","Africa/Casablanca","Africa/El_Aaiun",
[["WET","Africa/Casablanca","Africa/El Aaiun",
"Atlantic/Canary","Atlantic/Faeroe",
"Atlantic/Madeira","Europe/Lisbon"],
["BRT","America/Araguaina","America/Belem",
"America/Fortaleza","America/Maceio",
"America/Recife","America/Sao_Paulo"],
"America/Recife","America/Sao Paulo"],
["FNT","America/Noronha"],
["EGT","America/Scoresbysund"],
["ICT","Asia/Bangkok","Asia/Phnom_Penh",
["ICT","Asia/Bangkok","Asia/Phnom Penh",
"Asia/Saigon","Asia/Vientiane"],
["TPT","Asia/Dili"],
["NFT","Pacific/Norfolk"],
["GILT","Pacific/Tarawa"]]},
{[["PYT","America/Asuncion"],
["MDT","America/Boise","America/Cambridge_Bay",
["MDT","America/Boise","America/Cambridge Bay",
"America/Chihuahua","America/Denver",
"America/Edmonton","America/Inuvik",
"America/Mazatlan","America/Shiprock",
@ -323,7 +323,7 @@
[["AQTT","Asia/Aqtau","Asia/Aqtobe"],
["AZST","Asia/Baku"],
["ChST","Pacific/Guam","Pacific/Saipan"],
["SST","Pacific/Midway","Pacific/Pago_Pago"]],
["SST","Pacific/Midway","Pacific/Pago Pago"]],
[["WAST","Africa/Windhoek"],["NUT","Pacific/Niue"]],
[["PHT","Asia/Manila"]],
[],[],[],[],[],[],[],[],[],[],[],[]},

View file

@ -27,6 +27,7 @@
,local_to_local/3
,tz_name/2
,tz_shift/2
,tz_shift/3
]).
% utc_to_local(UtcDateTime, Timezone) -> LocalDateTime | {error, ErrDescr}
@ -138,7 +139,7 @@ tz_shift(LocalDateTime, Timezone) ->
false ->
{error, unknown_tz};
{_Tz, _StdName, undef, Shift, _DstShift, undef, _DstStartTime, undef, _DstEndTime} ->
Shift;
fmt_min(Shift);
TzRule = {_, _StdName, _DstName, Shift, DstShift, _, _, _, _} ->
case localtime_dst:check(LocalDateTime, TzRule) of
is_in_dst ->
@ -152,6 +153,12 @@ tz_shift(LocalDateTime, Timezone) ->
end
end.
tz_shift(LocalDateTime, TimezoneFrom, TimezoneTo) ->
FromShift = fmt_shift(tz_shift(LocalDateTime, TimezoneFrom)),
DateTimeTo = localtime:local_to_local(LocalDateTime, TimezoneFrom, TimezoneTo),
ToShift = fmt_shift(tz_shift(DateTimeTo, TimezoneTo)),
fmt_min(ToShift-FromShift).
adjust_datetime(DateTime, Minutes) ->
Seconds = calendar:datetime_to_gregorian_seconds(DateTime) + Minutes * 60,
calendar:gregorian_seconds_to_datetime(Seconds).
@ -164,6 +171,11 @@ fmt_min(Shift) when Shift < 0 ->
fmt_min(Shift) ->
{'+', Shift div 60, Shift rem 60}.
fmt_shift({'+', H, M}) ->
H * 60 + M;
fmt_shift({'-', H, M}) ->
-(H * 60 + M).
get_timezone(TimeZone) ->
case dict:find(TimeZone, ?tz_index) of
error ->