summaryrefslogtreecommitdiffstats
path: root/timezone
diff options
context:
space:
mode:
Diffstat (limited to 'timezone')
-rwxr-xr-xtimezone/generate_timeZone.pl75
-rw-r--r--timezone/timezone.txt717
2 files changed, 792 insertions, 0 deletions
diff --git a/timezone/generate_timeZone.pl b/timezone/generate_timeZone.pl
new file mode 100755
index 0000000..8c4c742
--- /dev/null
+++ b/timezone/generate_timeZone.pl
@@ -0,0 +1,75 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use autodie;
+
+use Text::CSV_XS ();
+
+# Obtain timezone.txt from http://www.maxmind.com/timezone.txt
+
+# Used to generate timeZone.c
+# usage: ./generate_timeZone.pl > ../libGeoIP/timeZone.c
+
+my $tz;
+
+open my $fh, '<:encoding(latin1)', 'timezone.txt';
+
+my $csv = Text::CSV_XS->new( { binary => 1, auto_diag => 1 } );
+
+print "#include <string.h> \n";
+print
+ "const char* GeoIP_time_zone_by_country_and_region(const char * country,const char * region) {\n";
+print " const char* timezone = NULL;\n";
+print " if (country == NULL) {\n";
+print " return NULL;\n";
+print " }\n";
+print " if (region == NULL) {\n";
+print ' region = "";', "\n";
+print " }\n";
+
+<$fh>; # skip first line
+while ( my $row = $csv->getline($fh) ) {
+ my ( $country, $region, $timezone ) = @{$row};
+ die "$_ $.\n" unless $timezone;
+ $tz->{$country}->{ $region || q{} } = $timezone;
+}
+
+my $first_country;
+
+$first_country = 0;
+for my $c ( sort keys %$tz ) {
+ print(' if');
+ $first_country ||= $c;
+ my $def = delete $tz->{$c}->{q{}};
+ if ( my @reg = sort keys %{ $tz->{$c} } ) {
+ my @tz = map { $tz->{$c}->{$_} } @reg;
+
+ printf( qq! ( strcmp (country, "%s") == 0 ) {\n!, $c );
+ for ( 0 .. $#reg ) {
+
+ # have regions
+
+ print( ( $_ == 0 ) ? ' if' : ' else if' );
+ printf( qq! ( strcmp (region, "%s") == 0 ) {\n!, $reg[$_] );
+ printf( qq! return "%s";\n!, $tz[$_] );
+ printf(qq! }\n!);
+ }
+ if ( defined $def ) {
+ printf( qq! else { return "%s"; }\n!, $def );
+ }
+ else {
+ print " else {\n return NULL;\n }\n";
+ }
+ print qq[ }\n];
+ }
+ else {
+
+ # only default tz
+ printf( qq! ( strcmp (country, "%s") == 0 ) {\n!, $c );
+ printf( qq! return "%s";\n!, $def );
+ printf(qq! }\n!);
+
+ }
+}
+
+print qq[ return timezone;\n}\n];
diff --git a/timezone/timezone.txt b/timezone/timezone.txt
new file mode 100644
index 0000000..e35c760
--- /dev/null
+++ b/timezone/timezone.txt
@@ -0,0 +1,717 @@
+"country","region","timezone"
+AD,,"Europe/Andorra"
+AE,,"Asia/Dubai"
+AF,,"Asia/Kabul"
+AG,,"America/Antigua"
+AI,,"America/Anguilla"
+AL,,"Europe/Tirane"
+AM,,"Asia/Yerevan"
+AN,,"America/Curacao"
+AO,,"Africa/Luanda"
+AQ,,"Antarctica/South_Pole"
+AR,01,"America/Argentina/Buenos_Aires"
+AR,02,"America/Argentina/Catamarca"
+AR,03,"America/Argentina/Tucuman"
+AR,04,"America/Argentina/Rio_Gallegos"
+AR,05,"America/Argentina/Cordoba"
+AR,06,"America/Argentina/Tucuman"
+AR,07,"America/Argentina/Buenos_Aires"
+AR,08,"America/Argentina/Buenos_Aires"
+AR,09,"America/Argentina/Tucuman"
+AR,10,"America/Argentina/Jujuy"
+AR,11,"America/Argentina/San_Luis"
+AR,12,"America/Argentina/La_Rioja"
+AR,13,"America/Argentina/Mendoza"
+AR,14,"America/Argentina/Buenos_Aires"
+AR,15,"America/Argentina/San_Luis"
+AR,16,"America/Argentina/Buenos_Aires"
+AR,17,"America/Argentina/Salta"
+AR,18,"America/Argentina/San_Juan"
+AR,19,"America/Argentina/San_Luis"
+AR,20,"America/Argentina/Rio_Gallegos"
+AR,21,"America/Argentina/Buenos_Aires"
+AR,22,"America/Argentina/Catamarca"
+AR,23,"America/Argentina/Ushuaia"
+AR,24,"America/Argentina/Tucuman"
+AS,,"Pacific/Pago_Pago"
+AT,,"Europe/Vienna"
+AU,01,"Australia/Sydney"
+AU,02,"Australia/Sydney"
+AU,03,"Australia/Darwin"
+AU,04,"Australia/Brisbane"
+AU,05,"Australia/Adelaide"
+AU,06,"Australia/Hobart"
+AU,07,"Australia/Melbourne"
+AU,08,"Australia/Perth"
+AW,,"America/Aruba"
+AX,,"Europe/Mariehamn"
+AZ,,"Asia/Baku"
+BA,,"Europe/Sarajevo"
+BB,,"America/Barbados"
+BD,,"Asia/Dhaka"
+BE,,"Europe/Brussels"
+BF,,"Africa/Ouagadougou"
+BG,,"Europe/Sofia"
+BH,,"Asia/Bahrain"
+BI,,"Africa/Bujumbura"
+BJ,,"Africa/Porto-Novo"
+BL,,"America/St_Barthelemy"
+BM,,"Atlantic/Bermuda"
+BN,,"Asia/Brunei"
+BO,,"America/La_Paz"
+BQ,,"America/Curacao"
+BR,01,"America/Rio_Branco"
+BR,02,"America/Maceio"
+BR,03,"America/Sao_Paulo"
+BR,04,"America/Manaus"
+BR,05,"America/Bahia"
+BR,06,"America/Fortaleza"
+BR,07,"America/Sao_Paulo"
+BR,08,"America/Sao_Paulo"
+BR,11,"America/Campo_Grande"
+BR,13,"America/Belem"
+BR,14,"America/Cuiaba"
+BR,15,"America/Sao_Paulo"
+BR,16,"America/Belem"
+BR,17,"America/Recife"
+BR,18,"America/Sao_Paulo"
+BR,20,"America/Fortaleza"
+BR,21,"America/Sao_Paulo"
+BR,22,"America/Recife"
+BR,23,"America/Sao_Paulo"
+BR,24,"America/Porto_Velho"
+BR,25,"America/Boa_Vista"
+BR,26,"America/Sao_Paulo"
+BR,27,"America/Sao_Paulo"
+BR,28,"America/Maceio"
+BR,29,"America/Sao_Paulo"
+BR,30,"America/Recife"
+BR,31,"America/Araguaina"
+BS,,"America/Nassau"
+BT,,"Asia/Thimphu"
+BV,,"Antarctica/Syowa"
+BW,,"Africa/Gaborone"
+BY,,"Europe/Minsk"
+BZ,,"America/Belize"
+CA,AB,"America/Edmonton"
+CA,BC,"America/Vancouver"
+CA,MB,"America/Winnipeg"
+CA,NB,"America/Halifax"
+CA,NL,"America/St_Johns"
+CA,NS,"America/Halifax"
+CA,NT,"America/Yellowknife"
+CA,NU,"America/Rankin_Inlet"
+CA,ON,"America/Toronto"
+CA,PE,"America/Halifax"
+CA,QC,"America/Montreal"
+CA,SK,"America/Regina"
+CA,YT,"America/Whitehorse"
+CC,,"Indian/Cocos"
+CD,01,"Africa/Kinshasa"
+CD,02,"Africa/Kinshasa"
+CD,03,"Africa/Kinshasa"
+CD,04,"Africa/Lubumbashi"
+CD,05,"Africa/Lubumbashi"
+CD,06,"Africa/Kinshasa"
+CD,07,"Africa/Lubumbashi"
+CD,08,"Africa/Kinshasa"
+CD,09,"Africa/Lubumbashi"
+CD,10,"Africa/Lubumbashi"
+CD,11,"Africa/Lubumbashi"
+CD,12,"Africa/Lubumbashi"
+CF,,"Africa/Bangui"
+CG,,"Africa/Brazzaville"
+CH,,"Europe/Zurich"
+CI,,"Africa/Abidjan"
+CK,,"Pacific/Rarotonga"
+CL,,"America/Santiago"
+CM,,"Africa/Lagos"
+CN,01,"Asia/Shanghai"
+CN,02,"Asia/Shanghai"
+CN,03,"Asia/Shanghai"
+CN,04,"Asia/Shanghai"
+CN,05,"Asia/Harbin"
+CN,06,"Asia/Chongqing"
+CN,07,"Asia/Shanghai"
+CN,08,"Asia/Harbin"
+CN,09,"Asia/Shanghai"
+CN,10,"Asia/Shanghai"
+CN,11,"Asia/Chongqing"
+CN,12,"Asia/Shanghai"
+CN,13,"Asia/Urumqi"
+CN,14,"Asia/Chongqing"
+CN,15,"Asia/Chongqing"
+CN,16,"Asia/Chongqing"
+CN,18,"Asia/Chongqing"
+CN,19,"Asia/Harbin"
+CN,20,"Asia/Harbin"
+CN,21,"Asia/Chongqing"
+CN,22,"Asia/Harbin"
+CN,23,"Asia/Shanghai"
+CN,24,"Asia/Chongqing"
+CN,25,"Asia/Shanghai"
+CN,26,"Asia/Chongqing"
+CN,28,"Asia/Shanghai"
+CN,29,"Asia/Chongqing"
+CN,30,"Asia/Chongqing"
+CN,31,"Asia/Chongqing"
+CN,32,"Asia/Chongqing"
+CN,33,"Asia/Chongqing"
+CO,,"America/Bogota"
+CR,,"America/Costa_Rica"
+CU,,"America/Havana"
+CV,,"Atlantic/Cape_Verde"
+CW,,"America/Curacao"
+CX,,"Indian/Christmas"
+CY,,"Asia/Nicosia"
+CZ,,"Europe/Prague"
+DE,,"Europe/Berlin"
+DJ,,"Africa/Djibouti"
+DK,,"Europe/Copenhagen"
+DM,,"America/Dominica"
+DO,,"America/Santo_Domingo"
+DZ,,"Africa/Algiers"
+EC,01,"Pacific/Galapagos"
+EC,02,"America/Guayaquil"
+EC,03,"America/Guayaquil"
+EC,04,"America/Guayaquil"
+EC,05,"America/Guayaquil"
+EC,06,"America/Guayaquil"
+EC,07,"America/Guayaquil"
+EC,08,"America/Guayaquil"
+EC,09,"America/Guayaquil"
+EC,10,"America/Guayaquil"
+EC,11,"America/Guayaquil"
+EC,12,"America/Guayaquil"
+EC,13,"America/Guayaquil"
+EC,14,"America/Guayaquil"
+EC,15,"America/Guayaquil"
+EC,17,"America/Guayaquil"
+EC,18,"America/Guayaquil"
+EC,19,"America/Guayaquil"
+EC,20,"America/Guayaquil"
+EC,22,"America/Guayaquil"
+EC,24,"America/Guayaquil"
+EE,,"Europe/Tallinn"
+EG,,"Africa/Cairo"
+EH,,"Africa/El_Aaiun"
+ER,,"Africa/Asmara"
+ES,07,"Europe/Madrid"
+ES,27,"Europe/Madrid"
+ES,29,"Europe/Madrid"
+ES,31,"Europe/Madrid"
+ES,32,"Europe/Madrid"
+ES,34,"Europe/Madrid"
+ES,39,"Europe/Madrid"
+ES,51,"Africa/Ceuta"
+ES,52,"Europe/Madrid"
+ES,53,"Atlantic/Canary"
+ES,54,"Europe/Madrid"
+ES,55,"Europe/Madrid"
+ES,56,"Europe/Madrid"
+ES,57,"Europe/Madrid"
+ES,58,"Europe/Madrid"
+ES,59,"Europe/Madrid"
+ES,60,"Europe/Madrid"
+ET,,"Africa/Addis_Ababa"
+FI,,"Europe/Helsinki"
+FJ,,"Pacific/Fiji"
+FK,,"Atlantic/Stanley"
+FM,,"Pacific/Pohnpei"
+FO,,"Atlantic/Faroe"
+FR,,"Europe/Paris"
+FX,,"Europe/Paris"
+GA,,"Africa/Libreville"
+GB,,"Europe/London"
+GD,,"America/Grenada"
+GE,,"Asia/Tbilisi"
+GF,,"America/Cayenne"
+GG,,"Europe/Guernsey"
+GH,,"Africa/Accra"
+GI,,"Europe/Gibraltar"
+GL,01,"America/Thule"
+GL,02,"America/Godthab"
+GL,03,"America/Godthab"
+GM,,"Africa/Banjul"
+GN,,"Africa/Conakry"
+GP,,"America/Guadeloupe"
+GQ,,"Africa/Malabo"
+GR,,"Europe/Athens"
+GS,,"Atlantic/South_Georgia"
+GT,,"America/Guatemala"
+GU,,"Pacific/Guam"
+GW,,"Africa/Bissau"
+GY,,"America/Guyana"
+HK,,"Asia/Hong_Kong"
+HN,,"America/Tegucigalpa"
+HR,,"Europe/Zagreb"
+HT,,"America/Port-au-Prince"
+HU,,"Europe/Budapest"
+ID,01,"Asia/Pontianak"
+ID,02,"Asia/Makassar"
+ID,03,"Asia/Jakarta"
+ID,04,"Asia/Jakarta"
+ID,05,"Asia/Jakarta"
+ID,06,"Asia/Jakarta"
+ID,07,"Asia/Jakarta"
+ID,08,"Asia/Jakarta"
+ID,09,"Asia/Jayapura"
+ID,10,"Asia/Jakarta"
+ID,11,"Asia/Pontianak"
+ID,12,"Asia/Makassar"
+ID,13,"Asia/Makassar"
+ID,14,"Asia/Makassar"
+ID,15,"Asia/Jakarta"
+ID,16,"Asia/Makassar"
+ID,17,"Asia/Makassar"
+ID,18,"Asia/Makassar"
+ID,19,"Asia/Pontianak"
+ID,20,"Asia/Makassar"
+ID,21,"Asia/Makassar"
+ID,22,"Asia/Makassar"
+ID,23,"Asia/Makassar"
+ID,24,"Asia/Jakarta"
+ID,25,"Asia/Pontianak"
+ID,26,"Asia/Pontianak"
+ID,28,"Asia/Jayapura"
+ID,29,"Asia/Makassar"
+ID,30,"Asia/Jakarta"
+ID,31,"Asia/Makassar"
+ID,32,"Asia/Jakarta"
+ID,33,"Asia/Jakarta"
+ID,34,"Asia/Makassar"
+ID,35,"Asia/Pontianak"
+ID,36,"Asia/Jayapura"
+ID,37,"Asia/Pontianak"
+ID,38,"Asia/Makassar"
+ID,39,"Asia/Jayapura"
+ID,40,"Asia/Pontianak"
+ID,41,"Asia/Makassar"
+IE,,"Europe/Dublin"
+IL,,"Asia/Jerusalem"
+IM,,"Europe/Isle_of_Man"
+IN,,"Asia/Kolkata"
+IO,,"Indian/Chagos"
+IQ,,"Asia/Baghdad"
+IR,,"Asia/Tehran"
+IS,,"Atlantic/Reykjavik"
+IT,,"Europe/Rome"
+JE,,"Europe/Jersey"
+JM,,"America/Jamaica"
+JO,,"Asia/Amman"
+JP,,"Asia/Tokyo"
+KE,,"Africa/Nairobi"
+KG,,"Asia/Bishkek"
+KH,,"Asia/Phnom_Penh"
+KI,,"Pacific/Tarawa"
+KM,,"Indian/Comoro"
+KN,,"America/St_Kitts"
+KP,,"Asia/Pyongyang"
+KR,,"Asia/Seoul"
+KW,,"Asia/Kuwait"
+KY,,"America/Cayman"
+KZ,01,"Asia/Almaty"
+KZ,02,"Asia/Almaty"
+KZ,03,"Asia/Qyzylorda"
+KZ,04,"Asia/Aqtobe"
+KZ,05,"Asia/Qyzylorda"
+KZ,06,"Asia/Aqtau"
+KZ,07,"Asia/Oral"
+KZ,08,"Asia/Qyzylorda"
+KZ,09,"Asia/Aqtau"
+KZ,10,"Asia/Qyzylorda"
+KZ,11,"Asia/Almaty"
+KZ,12,"Asia/Qyzylorda"
+KZ,13,"Asia/Aqtobe"
+KZ,14,"Asia/Qyzylorda"
+KZ,15,"Asia/Almaty"
+KZ,16,"Asia/Aqtobe"
+KZ,17,"Asia/Almaty"
+LA,,"Asia/Vientiane"
+LB,,"Asia/Beirut"
+LC,,"America/St_Lucia"
+LI,,"Europe/Vaduz"
+LK,,"Asia/Colombo"
+LR,,"Africa/Monrovia"
+LS,,"Africa/Maseru"
+LT,,"Europe/Vilnius"
+LU,,"Europe/Luxembourg"
+LV,,"Europe/Riga"
+LY,,"Africa/Tripoli"
+MA,,"Africa/Casablanca"
+MC,,"Europe/Monaco"
+MD,,"Europe/Chisinau"
+ME,,"Europe/Podgorica"
+MF,,"America/Marigot"
+MG,,"Indian/Antananarivo"
+MH,,"Pacific/Kwajalein"
+MK,,"Europe/Skopje"
+ML,,"Africa/Bamako"
+MM,,"Asia/Rangoon"
+MN,06,"Asia/Choibalsan"
+MN,11,"Asia/Ulaanbaatar"
+MN,17,"Asia/Choibalsan"
+MN,19,"Asia/Hovd"
+MN,20,"Asia/Ulaanbaatar"
+MN,21,"Asia/Ulaanbaatar"
+MN,25,"Asia/Ulaanbaatar"
+MO,,"Asia/Macau"
+MP,,"Pacific/Saipan"
+MQ,,"America/Martinique"
+MR,,"Africa/Nouakchott"
+MS,,"America/Montserrat"
+MT,,"Europe/Malta"
+MU,,"Indian/Mauritius"
+MV,,"Indian/Maldives"
+MW,,"Africa/Blantyre"
+MX,01,"America/Mexico_City"
+MX,02,"America/Tijuana"
+MX,03,"America/Hermosillo"
+MX,04,"America/Merida"
+MX,05,"America/Mexico_City"
+MX,06,"America/Chihuahua"
+MX,07,"America/Monterrey"
+MX,08,"America/Mexico_City"
+MX,09,"America/Mexico_City"
+MX,10,"America/Mazatlan"
+MX,11,"America/Mexico_City"
+MX,12,"America/Mexico_City"
+MX,13,"America/Mexico_City"
+MX,14,"America/Mazatlan"
+MX,15,"America/Chihuahua"
+MX,16,"America/Mexico_City"
+MX,17,"America/Mexico_City"
+MX,18,"America/Mazatlan"
+MX,19,"America/Monterrey"
+MX,20,"America/Mexico_City"
+MX,21,"America/Mexico_City"
+MX,22,"America/Mexico_City"
+MX,23,"America/Cancun"
+MX,24,"America/Mexico_City"
+MX,25,"America/Mazatlan"
+MX,26,"America/Hermosillo"
+MX,27,"America/Merida"
+MX,28,"America/Monterrey"
+MX,29,"America/Mexico_City"
+MX,30,"America/Mexico_City"
+MX,31,"America/Merida"
+MX,32,"America/Monterrey"
+MY,01,"Asia/Kuala_Lumpur"
+MY,02,"Asia/Kuala_Lumpur"
+MY,03,"Asia/Kuala_Lumpur"
+MY,04,"Asia/Kuala_Lumpur"
+MY,05,"Asia/Kuala_Lumpur"
+MY,06,"Asia/Kuala_Lumpur"
+MY,07,"Asia/Kuala_Lumpur"
+MY,08,"Asia/Kuala_Lumpur"
+MY,09,"Asia/Kuala_Lumpur"
+MY,11,"Asia/Kuching"
+MY,12,"Asia/Kuala_Lumpur"
+MY,13,"Asia/Kuala_Lumpur"
+MY,14,"Asia/Kuala_Lumpur"
+MY,15,"Asia/Kuching"
+MY,16,"Asia/Kuching"
+MZ,,"Africa/Maputo"
+NA,,"Africa/Windhoek"
+NC,,"Pacific/Noumea"
+NE,,"Africa/Niamey"
+NF,,"Pacific/Norfolk"
+NG,,"Africa/Lagos"
+NI,,"America/Managua"
+NL,,"Europe/Amsterdam"
+NO,,"Europe/Oslo"
+NP,,"Asia/Kathmandu"
+NR,,"Pacific/Nauru"
+NU,,"Pacific/Niue"
+NZ,85,"Pacific/Auckland"
+NZ,E7,"Pacific/Auckland"
+NZ,E8,"Pacific/Auckland"
+NZ,E9,"Pacific/Auckland"
+NZ,F1,"Pacific/Auckland"
+NZ,F2,"Pacific/Auckland"
+NZ,F3,"Pacific/Auckland"
+NZ,F4,"Pacific/Auckland"
+NZ,F5,"Pacific/Auckland"
+NZ,F6,"Pacific/Auckland"
+NZ,F7,"Pacific/Chatham"
+NZ,F8,"Pacific/Auckland"
+NZ,F9,"Pacific/Auckland"
+NZ,G1,"Pacific/Auckland"
+NZ,G2,"Pacific/Auckland"
+NZ,G3,"Pacific/Auckland"
+OM,,"Asia/Muscat"
+PA,,"America/Panama"
+PE,,"America/Lima"
+PF,,"Pacific/Marquesas"
+PG,,"Pacific/Port_Moresby"
+PH,,"Asia/Manila"
+PK,,"Asia/Karachi"
+PL,,"Europe/Warsaw"
+PM,,"America/Miquelon"
+PN,,"Pacific/Pitcairn"
+PR,,"America/Puerto_Rico"
+PS,,"Asia/Gaza"
+PT,02,"Europe/Lisbon"
+PT,03,"Europe/Lisbon"
+PT,04,"Europe/Lisbon"
+PT,05,"Europe/Lisbon"
+PT,06,"Europe/Lisbon"
+PT,07,"Europe/Lisbon"
+PT,08,"Europe/Lisbon"
+PT,09,"Europe/Lisbon"
+PT,10,"Atlantic/Madeira"
+PT,11,"Europe/Lisbon"
+PT,13,"Europe/Lisbon"
+PT,14,"Europe/Lisbon"
+PT,16,"Europe/Lisbon"
+PT,17,"Europe/Lisbon"
+PT,18,"Europe/Lisbon"
+PT,19,"Europe/Lisbon"
+PT,20,"Europe/Lisbon"
+PT,21,"Europe/Lisbon"
+PT,22,"Europe/Lisbon"
+PT,23,"Atlantic/Azores"
+PW,,"Pacific/Palau"
+PY,,"America/Asuncion"
+QA,,"Asia/Qatar"
+RE,,"Indian/Reunion"
+RO,,"Europe/Bucharest"
+RS,,"Europe/Belgrade"
+RU,01,"Europe/Volgograd"
+RU,02,"Asia/Irkutsk"
+RU,03,"Asia/Novokuznetsk"
+RU,04,"Asia/Novosibirsk"
+RU,05,"Asia/Vladivostok"
+RU,06,"Europe/Moscow"
+RU,07,"Europe/Volgograd"
+RU,08,"Europe/Samara"
+RU,09,"Europe/Moscow"
+RU,10,"Europe/Moscow"
+RU,11,"Asia/Irkutsk"
+RU,12,"Europe/Volgograd"
+RU,13,"Asia/Yekaterinburg"
+RU,14,"Asia/Irkutsk"
+RU,15,"Asia/Anadyr"
+RU,16,"Europe/Samara"
+RU,17,"Europe/Volgograd"
+RU,18,"Asia/Krasnoyarsk"
+RU,20,"Asia/Irkutsk"
+RU,21,"Europe/Moscow"
+RU,22,"Europe/Volgograd"
+RU,23,"Europe/Kaliningrad"
+RU,24,"Europe/Volgograd"
+RU,25,"Europe/Moscow"
+RU,26,"Asia/Kamchatka"
+RU,27,"Europe/Volgograd"
+RU,28,"Europe/Moscow"
+RU,29,"Asia/Novokuznetsk"
+RU,30,"Asia/Vladivostok"
+RU,31,"Asia/Krasnoyarsk"
+RU,32,"Asia/Omsk"
+RU,33,"Asia/Yekaterinburg"
+RU,34,"Asia/Yekaterinburg"
+RU,35,"Asia/Yekaterinburg"
+RU,36,"Asia/Anadyr"
+RU,37,"Europe/Moscow"
+RU,38,"Europe/Volgograd"
+RU,39,"Asia/Krasnoyarsk"
+RU,40,"Asia/Yekaterinburg"
+RU,41,"Europe/Moscow"
+RU,42,"Europe/Moscow"
+RU,43,"Europe/Moscow"
+RU,44,"Asia/Magadan"
+RU,45,"Europe/Samara"
+RU,46,"Europe/Samara"
+RU,47,"Europe/Moscow"
+RU,48,"Europe/Moscow"
+RU,49,"Europe/Moscow"
+RU,50,"Asia/Yekaterinburg"
+RU,51,"Europe/Moscow"
+RU,52,"Europe/Moscow"
+RU,53,"Asia/Novosibirsk"
+RU,54,"Asia/Omsk"
+RU,55,"Europe/Samara"
+RU,56,"Europe/Moscow"
+RU,57,"Europe/Samara"
+RU,58,"Asia/Yekaterinburg"
+RU,59,"Asia/Vladivostok"
+RU,60,"Europe/Kaliningrad"
+RU,61,"Europe/Volgograd"
+RU,62,"Europe/Moscow"
+RU,63,"Asia/Yakutsk"
+RU,64,"Asia/Sakhalin"
+RU,65,"Europe/Samara"
+RU,66,"Europe/Moscow"
+RU,67,"Europe/Samara"
+RU,68,"Europe/Volgograd"
+RU,69,"Europe/Moscow"
+RU,70,"Europe/Volgograd"
+RU,71,"Asia/Yekaterinburg"
+RU,72,"Europe/Moscow"
+RU,73,"Europe/Samara"
+RU,74,"Asia/Krasnoyarsk"
+RU,75,"Asia/Novosibirsk"
+RU,76,"Europe/Moscow"
+RU,77,"Europe/Moscow"
+RU,78,"Asia/Yekaterinburg"
+RU,79,"Asia/Irkutsk"
+RU,80,"Asia/Yekaterinburg"
+RU,81,"Europe/Samara"
+RU,82,"Asia/Irkutsk"
+RU,83,"Europe/Moscow"
+RU,84,"Europe/Volgograd"
+RU,85,"Europe/Moscow"
+RU,86,"Europe/Moscow"
+RU,87,"Asia/Novosibirsk"
+RU,88,"Europe/Moscow"
+RU,89,"Asia/Vladivostok"
+RU,90,"Asia/Yekaterinburg"
+RU,91,"Asia/Krasnoyarsk"
+RU,92,"Asia/Anadyr"
+RU,93,"Asia/Irkutsk"
+RW,,"Africa/Kigali"
+SA,,"Asia/Riyadh"
+SB,,"Pacific/Guadalcanal"
+SC,,"Indian/Mahe"
+SD,,"Africa/Khartoum"
+SE,,"Europe/Stockholm"
+SG,,"Asia/Singapore"
+SH,,"Atlantic/St_Helena"
+SI,,"Europe/Ljubljana"
+SJ,,"Arctic/Longyearbyen"
+SK,,"Europe/Bratislava"
+SL,,"Africa/Freetown"
+SM,,"Europe/San_Marino"
+SN,,"Africa/Dakar"
+SO,,"Africa/Mogadishu"
+SR,,"America/Paramaribo"
+SS,,"Africa/Juba"
+ST,,"Africa/Sao_Tome"
+SV,,"America/El_Salvador"
+SX,,"America/Curacao"
+SY,,"Asia/Damascus"
+SZ,,"Africa/Mbabane"
+TC,,"America/Grand_Turk"
+TD,,"Africa/Ndjamena"
+TF,,"Indian/Kerguelen"
+TG,,"Africa/Lome"
+TH,,"Asia/Bangkok"
+TJ,,"Asia/Dushanbe"
+TK,,"Pacific/Fakaofo"
+TL,,"Asia/Dili"
+TM,,"Asia/Ashgabat"
+TN,,"Africa/Tunis"
+TO,,"Pacific/Tongatapu"
+TR,,"Asia/Istanbul"
+TT,,"America/Port_of_Spain"
+TV,,"Pacific/Funafuti"
+TW,,"Asia/Taipei"
+TZ,,"Africa/Dar_es_Salaam"
+UA,01,"Europe/Kiev"
+UA,02,"Europe/Kiev"
+UA,03,"Europe/Uzhgorod"
+UA,04,"Europe/Zaporozhye"
+UA,05,"Europe/Zaporozhye"
+UA,06,"Europe/Uzhgorod"
+UA,07,"Europe/Zaporozhye"
+UA,08,"Europe/Simferopol"
+UA,09,"Europe/Kiev"
+UA,10,"Europe/Zaporozhye"
+UA,11,"Europe/Simferopol"
+UA,12,"Europe/Kiev"
+UA,13,"Europe/Kiev"
+UA,14,"Europe/Zaporozhye"
+UA,15,"Europe/Uzhgorod"
+UA,16,"Europe/Zaporozhye"
+UA,17,"Europe/Simferopol"
+UA,18,"Europe/Zaporozhye"
+UA,19,"Europe/Kiev"
+UA,20,"Europe/Simferopol"
+UA,21,"Europe/Kiev"
+UA,22,"Europe/Uzhgorod"
+UA,23,"Europe/Kiev"
+UA,24,"Europe/Uzhgorod"
+UA,25,"Europe/Uzhgorod"
+UA,26,"Europe/Zaporozhye"
+UA,27,"Europe/Kiev"
+UG,,"Africa/Kampala"
+UM,,"Pacific/Wake"
+US,AK,"America/Anchorage"
+US,AL,"America/Chicago"
+US,AR,"America/Chicago"
+US,AZ,"America/Phoenix"
+US,CA,"America/Los_Angeles"
+US,CO,"America/Denver"
+US,CT,"America/New_York"
+US,DC,"America/New_York"
+US,DE,"America/New_York"
+US,FL,"America/New_York"
+US,GA,"America/New_York"
+US,HI,"Pacific/Honolulu"
+US,IA,"America/Chicago"
+US,ID,"America/Denver"
+US,IL,"America/Chicago"
+US,IN,"America/Indiana/Indianapolis"
+US,KS,"America/Chicago"
+US,KY,"America/New_York"
+US,LA,"America/Chicago"
+US,MA,"America/New_York"
+US,MD,"America/New_York"
+US,ME,"America/New_York"
+US,MI,"America/New_York"
+US,MN,"America/Chicago"
+US,MO,"America/Chicago"
+US,MS,"America/Chicago"
+US,MT,"America/Denver"
+US,NC,"America/New_York"
+US,ND,"America/Chicago"
+US,NE,"America/Chicago"
+US,NH,"America/New_York"
+US,NJ,"America/New_York"
+US,NM,"America/Denver"
+US,NV,"America/Los_Angeles"
+US,NY,"America/New_York"
+US,OH,"America/New_York"
+US,OK,"America/Chicago"
+US,OR,"America/Los_Angeles"
+US,PA,"America/New_York"
+US,RI,"America/New_York"
+US,SC,"America/New_York"
+US,SD,"America/Chicago"
+US,TN,"America/Chicago"
+US,TX,"America/Chicago"
+US,UT,"America/Denver"
+US,VA,"America/New_York"
+US,VT,"America/New_York"
+US,WA,"America/Los_Angeles"
+US,WI,"America/Chicago"
+US,WV,"America/New_York"
+US,WY,"America/Denver"
+UY,,"America/Montevideo"
+UZ,01,"Asia/Tashkent"
+UZ,02,"Asia/Samarkand"
+UZ,03,"Asia/Tashkent"
+UZ,05,"Asia/Samarkand"
+UZ,06,"Asia/Tashkent"
+UZ,07,"Asia/Samarkand"
+UZ,08,"Asia/Samarkand"
+UZ,09,"Asia/Samarkand"
+UZ,10,"Asia/Samarkand"
+UZ,12,"Asia/Samarkand"
+UZ,13,"Asia/Tashkent"
+UZ,14,"Asia/Tashkent"
+VA,,"Europe/Vatican"
+VC,,"America/St_Vincent"
+VE,,"America/Caracas"
+VG,,"America/Tortola"
+VI,,"America/St_Thomas"
+VN,,"Asia/Phnom_Penh"
+VU,,"Pacific/Efate"
+WF,,"Pacific/Wallis"
+WS,,"Pacific/Pago_Pago"
+YE,,"Asia/Aden"
+YT,,"Indian/Mayotte"
+YU,,"Europe/Belgrade"
+ZA,,"Africa/Johannesburg"
+ZM,,"Africa/Lusaka"
+ZW,,"Africa/Harare"