diff --git a/src/lib/tzcode/CMakeLists.txt b/src/lib/tzcode/CMakeLists.txt index 0157f9c2672f75fd0d952385969f3b1b47307028..51791554153df28a7aed4576f5f65bf5d3760061 100644 --- a/src/lib/tzcode/CMakeLists.txt +++ b/src/lib/tzcode/CMakeLists.txt @@ -4,8 +4,10 @@ target_link_libraries(tzcode) set(TZCODE_PROJECT tzcode-iana) set(TZCODE_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}) -set(TZCODE_PREFIX ${TZCODE_BUILD_DIR}/tz) +set(TZCODE_PREFIX_DIR tz) +set(TZCODE_PREFIX ${TZCODE_BUILD_DIR}/${TZCODE_PREFIX_DIR}) set(TZDATA_TARGET main.zi) +set(TZCODE_SRC ${PROJECT_SOURCE_DIR}/src/lib/tzcode) set(TZDATA_FULL_TARGET ${TZCODE_PREFIX}/src/${TZCODE_PROJECT}/${TZDATA_TARGET}) @@ -15,7 +17,9 @@ ExternalProject_Add(${TZCODE_PROJECT} GIT_TAG 2022a GIT_SHALLOW YES + EXCLUDE_FROM_ALL 1 INSTALL_DIR ${TZCODE_BUILD_DIR}/install + PREFIX ${TZCODE_PREFIX_DIR} UPDATE_COMMAND "" CONFIGURE_COMMAND "" @@ -30,3 +34,21 @@ ExternalProject_Add(${TZCODE_PROJECT} INSTALL_COMMAND make DESTDIR=<INSTALL_DIR> install BUILD_BYPRODUCTS ${TZDATA_FULL_TARGET} ) + +find_program(PERL perl) + +add_custom_target(gen-timezones DEPENDS ${TZCODE_PROJECT}) +add_custom_command(TARGET gen-timezones + COMMAND + ${PERL} ${TZCODE_SRC}/gen-zone-abbrevs.pl ${TZCODE_SRC}/zone-abbrevs.txt + ${TZDATA_FULL_TARGET} > ${TZCODE_SRC}/timezones.h + COMMENT "Generating timezones.h" +) + +# We excluded build of gen-timezones and tzcode-iana (main.zi) targets +# from ALL dependencies (see EXCLUDE_FROM_ALL=1) if you, by either reason +# need to regenerate timezones.h then invoke target manually: +# ```sh +# make gen-timezones VERBOSE=1 +# ``` +# it will regenerate `timezones.h` in-place, in their repository location. diff --git a/src/lib/tzcode/gen-zone-abbrevs.pl b/src/lib/tzcode/gen-zone-abbrevs.pl index a477d4b1d6f3b77a4b80510c17dcc2a03c8e6e15..37dda6219ff704aed3e0597eceea48574d6e3367 100755 --- a/src/lib/tzcode/gen-zone-abbrevs.pl +++ b/src/lib/tzcode/gen-zone-abbrevs.pl @@ -129,6 +129,7 @@ my $EntryRx = do { }; my %ZoneAbbrevs; +my %ZoneAbbrevNames; # read zone-abbrevs.txt with definition of all currently known # timezone abbreviations. @@ -176,36 +177,43 @@ sub read_abbrevs_file($) { } $ZoneAbbrevs{$encoded} = [ $flags, $offset, $name ]; + $ZoneAbbrevNames{$name}++; } } my %ZoneNames; +my %ZoneIds; +my %Aliases; sub read_zi_file($) { my $filename = shift; open( my $fh, '<:raw', $filename ) or die qq<Could not open '$filename' for reading: '$!'>; - my $zone; - my $format; + while (<$fh>) { next if /^#/; if (/^Zone\s+([A-Za-z\-\_\/]+)\s+/) { - $zone = $1; - $ZoneNames{$zone}++ if $zone =~ q|/|; - next; + my $zone = $1; + next unless $zone =~ q|/|; + $ZoneNames{$zone}++; + } elsif (/^[#]?Link\s+(\S+)\s+(\S+)/) { + my $zone = $1; + my $link = $2; + # do not create alias if it's known abbreviation + next if defined $ZoneAbbrevNames{$link}; + $Aliases{$link} = $zone; } } } -sub gen_header() { - printf "/* Automatically generated by gen-zone-abbrevs.pl */\n"; - - # first we generate abbreviations list +# first we generate abbreviations list +sub gen_abbrevs() { foreach my $encoded ( sort { $a <=> $b } keys %ZoneAbbrevs ) { my ( $flags, $offset, $name ) = @{ $ZoneAbbrevs{$encoded} }; my $nextid = next_id($name); + $ZoneIds{$nextid} = $name; if ( $flags != 0 ) { my @names; @@ -221,14 +229,34 @@ sub gen_header() { printf "ZONE_ABBREV(%4d, %4d, \"%s\", %s)\n", $nextid, $offset, $name, $flags; } +} - # second we enumerate all known from main.zi primary zone names +# second we enumerate all known from main.zi primary zone names +sub gen_primary_zones() { foreach my $zonename (sort keys %ZoneNames) { my $nextid = next_id($zonename); + $ZoneIds{$zonename} = $nextid; printf "ZONE_UNIQUE(%4d, \"%s\")\n", $nextid, $zonename; } } +# third we enumerate all aliases for primary zones +sub gen_aliases() { + foreach my $alias ( sort keys %Aliases ) { + my $zonename = $Aliases{$alias}; + printf "ZONE_ALIAS(%4d, \"%s\", \"%s\")\n", $ZoneIds{$zonename}, + $alias, $zonename; + } +} + +sub gen_header() { + printf "/* Automatically generated by gen-zone-abbrevs.pl */\n"; + + gen_abbrevs(); + gen_primary_zones(); + gen_aliases(); +} + read_abbrevs_file($zone_abbrevs_file); read_zi_file($tzdata_zi_file); gen_header(); diff --git a/src/lib/tzcode/localtime.c b/src/lib/tzcode/localtime.c index d2482a19497cb02654807f1d562ae41da5e1ab9e..c28c0e1bf1e47537153c0c75c445a83eda2bac46 100644 --- a/src/lib/tzcode/localtime.c +++ b/src/lib/tzcode/localtime.c @@ -15,8 +15,9 @@ #include <unistd.h> #define LOCALTIME_IMPLEMENTATION #include "private.h" - #include "tzfile.h" +#include "tzcode.h" + #include <fcntl.h> #ifndef TZ_ABBR_MAX_LEN @@ -66,10 +67,10 @@ #define WILDABBR " " #endif /* !defined WILDABBR */ -static const char wildabbr[] = WILDABBR; - static const char gmt[] = "GMT"; +static const char wildabbr[] = WILDABBR; + /* ** The DST rules to use if TZ has no rules and we can't load TZDEFRULES. ** Default to US rules as of 2017-05-07. diff --git a/src/lib/tzcode/timezone.c b/src/lib/tzcode/timezone.c index d4e17a598ef76fcd682bd842dbb4ea96c6da7eff..94b73b63faf40928c075ed8402b4a2289619c233 100644 --- a/src/lib/tzcode/timezone.c +++ b/src/lib/tzcode/timezone.c @@ -31,7 +31,9 @@ timezone_flags(const struct date_time_zone *zone) static const char * zone_names[] = { #define ZONE_ABBREV(id, offset, name, flags) [id] = name, #define ZONE_UNIQUE(id, name) [id] = name, +#define ZONE_ALIAS(id, alias, name) #include "timezones.h" +#undef ZONE_ALIAS #undef ZONE_UNIQUE #undef ZONE_ABBREV }; @@ -45,9 +47,10 @@ timezone_name(int64_t index) static struct date_time_zone zone_abbrevs[] = { #define ZONE_ABBREV(id, offset, name, flags) { name, id, flags, offset }, -#define ZONE_UNIQUE(id, name) { name, id, TZ_NYI, 0 }, - +#define ZONE_UNIQUE(id, name) { name, id, TZ_OLSON, 0 }, +#define ZONE_ALIAS(id, alias, name) { alias, id, TZ_OLSON|TZ_ALIAS, 0 }, #include "timezones.h" +#undef ZONE_ALIAS #undef ZONE_UNIQUE #undef ZONE_ABBREV }; diff --git a/src/lib/tzcode/timezone.h b/src/lib/tzcode/timezone.h index f9fa9f9a14805be1aee23c7048c5bc578fcb3194..b2b984e3523efa871d209f7a206c94ae65dc6df3 100644 --- a/src/lib/tzcode/timezone.h +++ b/src/lib/tzcode/timezone.h @@ -17,6 +17,8 @@ enum { TZ_MILITARY = 0x04, TZ_AMBIGUOUS = 0x08, TZ_NYI = 0x10, + TZ_OLSON = 0x20, + TZ_ALIAS = 0x40, }; /** diff --git a/src/lib/tzcode/timezones.h b/src/lib/tzcode/timezones.h index cd18acc5b779bda373f9331a8d1248ed6fd663ad..b412b585b6c378cb92316c9cd35f4db08be9de15 100644 --- a/src/lib/tzcode/timezones.h +++ b/src/lib/tzcode/timezones.h @@ -290,434 +290,557 @@ ZONE_ABBREV( 649, 360, "YEKST", 0) ZONE_ABBREV( 656, 540, "CHODST", 0) ZONE_ABBREV( 664, 480, "HOVDST", 0) ZONE_UNIQUE( 672, "Africa/Abidjan") -ZONE_UNIQUE( 673, "Africa/Accra") -ZONE_UNIQUE( 674, "Africa/Addis_Ababa") -ZONE_UNIQUE( 675, "Africa/Algiers") -ZONE_UNIQUE( 676, "Africa/Asmara") -ZONE_UNIQUE( 677, "Africa/Bamako") -ZONE_UNIQUE( 678, "Africa/Bangui") -ZONE_UNIQUE( 679, "Africa/Banjul") -ZONE_UNIQUE( 680, "Africa/Bissau") -ZONE_UNIQUE( 681, "Africa/Blantyre") -ZONE_UNIQUE( 682, "Africa/Brazzaville") -ZONE_UNIQUE( 683, "Africa/Bujumbura") -ZONE_UNIQUE( 684, "Africa/Cairo") -ZONE_UNIQUE( 685, "Africa/Casablanca") -ZONE_UNIQUE( 686, "Africa/Ceuta") -ZONE_UNIQUE( 687, "Africa/Conakry") -ZONE_UNIQUE( 688, "Africa/Dakar") -ZONE_UNIQUE( 689, "Africa/Dar_es_Salaam") -ZONE_UNIQUE( 690, "Africa/Djibouti") -ZONE_UNIQUE( 691, "Africa/Douala") -ZONE_UNIQUE( 692, "Africa/El_Aaiun") -ZONE_UNIQUE( 693, "Africa/Freetown") -ZONE_UNIQUE( 694, "Africa/Gaborone") -ZONE_UNIQUE( 695, "Africa/Harare") -ZONE_UNIQUE( 696, "Africa/Johannesburg") -ZONE_UNIQUE( 697, "Africa/Juba") -ZONE_UNIQUE( 698, "Africa/Kampala") -ZONE_UNIQUE( 699, "Africa/Khartoum") -ZONE_UNIQUE( 700, "Africa/Kigali") -ZONE_UNIQUE( 701, "Africa/Kinshasa") -ZONE_UNIQUE( 702, "Africa/Lagos") -ZONE_UNIQUE( 703, "Africa/Libreville") -ZONE_UNIQUE( 704, "Africa/Lome") -ZONE_UNIQUE( 705, "Africa/Luanda") -ZONE_UNIQUE( 706, "Africa/Lubumbashi") -ZONE_UNIQUE( 707, "Africa/Lusaka") -ZONE_UNIQUE( 708, "Africa/Malabo") -ZONE_UNIQUE( 709, "Africa/Maputo") -ZONE_UNIQUE( 710, "Africa/Maseru") -ZONE_UNIQUE( 711, "Africa/Mbabane") -ZONE_UNIQUE( 712, "Africa/Mogadishu") -ZONE_UNIQUE( 713, "Africa/Monrovia") -ZONE_UNIQUE( 714, "Africa/Nairobi") -ZONE_UNIQUE( 715, "Africa/Ndjamena") -ZONE_UNIQUE( 716, "Africa/Niamey") -ZONE_UNIQUE( 717, "Africa/Nouakchott") -ZONE_UNIQUE( 718, "Africa/Ouagadougou") -ZONE_UNIQUE( 719, "Africa/Porto-Novo") -ZONE_UNIQUE( 720, "Africa/Sao_Tome") -ZONE_UNIQUE( 721, "Africa/Timbuktu") -ZONE_UNIQUE( 722, "Africa/Tripoli") -ZONE_UNIQUE( 723, "Africa/Tunis") -ZONE_UNIQUE( 724, "Africa/Windhoek") -ZONE_UNIQUE( 725, "America/Adak") -ZONE_UNIQUE( 726, "America/Anchorage") -ZONE_UNIQUE( 727, "America/Anguilla") -ZONE_UNIQUE( 728, "America/Antigua") -ZONE_UNIQUE( 729, "America/Araguaina") -ZONE_UNIQUE( 730, "America/Argentina/Buenos_Aires") -ZONE_UNIQUE( 731, "America/Argentina/Catamarca") -ZONE_UNIQUE( 732, "America/Argentina/ComodRivadavia") -ZONE_UNIQUE( 733, "America/Argentina/Cordoba") -ZONE_UNIQUE( 734, "America/Argentina/Jujuy") -ZONE_UNIQUE( 735, "America/Argentina/La_Rioja") -ZONE_UNIQUE( 736, "America/Argentina/Mendoza") -ZONE_UNIQUE( 737, "America/Argentina/Rio_Gallegos") -ZONE_UNIQUE( 738, "America/Argentina/Salta") -ZONE_UNIQUE( 739, "America/Argentina/San_Juan") -ZONE_UNIQUE( 740, "America/Argentina/San_Luis") -ZONE_UNIQUE( 741, "America/Argentina/Tucuman") -ZONE_UNIQUE( 742, "America/Argentina/Ushuaia") -ZONE_UNIQUE( 743, "America/Aruba") -ZONE_UNIQUE( 744, "America/Asuncion") -ZONE_UNIQUE( 745, "America/Atikokan") -ZONE_UNIQUE( 746, "America/Bahia") -ZONE_UNIQUE( 747, "America/Bahia_Banderas") -ZONE_UNIQUE( 748, "America/Barbados") -ZONE_UNIQUE( 749, "America/Belem") -ZONE_UNIQUE( 750, "America/Belize") -ZONE_UNIQUE( 751, "America/Blanc-Sablon") -ZONE_UNIQUE( 752, "America/Boa_Vista") -ZONE_UNIQUE( 753, "America/Bogota") -ZONE_UNIQUE( 754, "America/Boise") -ZONE_UNIQUE( 755, "America/Cambridge_Bay") -ZONE_UNIQUE( 756, "America/Campo_Grande") -ZONE_UNIQUE( 757, "America/Cancun") -ZONE_UNIQUE( 758, "America/Caracas") -ZONE_UNIQUE( 759, "America/Cayenne") -ZONE_UNIQUE( 760, "America/Cayman") -ZONE_UNIQUE( 761, "America/Chicago") -ZONE_UNIQUE( 762, "America/Chihuahua") -ZONE_UNIQUE( 763, "America/Coral_Harbour") -ZONE_UNIQUE( 764, "America/Costa_Rica") -ZONE_UNIQUE( 765, "America/Creston") -ZONE_UNIQUE( 766, "America/Cuiaba") -ZONE_UNIQUE( 767, "America/Curacao") -ZONE_UNIQUE( 768, "America/Danmarkshavn") -ZONE_UNIQUE( 769, "America/Dawson") -ZONE_UNIQUE( 770, "America/Dawson_Creek") -ZONE_UNIQUE( 771, "America/Denver") -ZONE_UNIQUE( 772, "America/Detroit") -ZONE_UNIQUE( 773, "America/Dominica") -ZONE_UNIQUE( 774, "America/Edmonton") -ZONE_UNIQUE( 775, "America/Eirunepe") -ZONE_UNIQUE( 776, "America/El_Salvador") -ZONE_UNIQUE( 777, "America/Ensenada") -ZONE_UNIQUE( 778, "America/Fort_Nelson") -ZONE_UNIQUE( 779, "America/Fortaleza") -ZONE_UNIQUE( 780, "America/Glace_Bay") -ZONE_UNIQUE( 781, "America/Goose_Bay") -ZONE_UNIQUE( 782, "America/Grand_Turk") -ZONE_UNIQUE( 783, "America/Grenada") -ZONE_UNIQUE( 784, "America/Guadeloupe") -ZONE_UNIQUE( 785, "America/Guatemala") -ZONE_UNIQUE( 786, "America/Guayaquil") -ZONE_UNIQUE( 787, "America/Guyana") -ZONE_UNIQUE( 788, "America/Halifax") -ZONE_UNIQUE( 789, "America/Havana") -ZONE_UNIQUE( 790, "America/Hermosillo") -ZONE_UNIQUE( 791, "America/Indiana/Indianapolis") -ZONE_UNIQUE( 792, "America/Indiana/Knox") -ZONE_UNIQUE( 793, "America/Indiana/Marengo") -ZONE_UNIQUE( 794, "America/Indiana/Petersburg") -ZONE_UNIQUE( 795, "America/Indiana/Tell_City") -ZONE_UNIQUE( 796, "America/Indiana/Vevay") -ZONE_UNIQUE( 797, "America/Indiana/Vincennes") -ZONE_UNIQUE( 798, "America/Indiana/Winamac") -ZONE_UNIQUE( 799, "America/Inuvik") -ZONE_UNIQUE( 800, "America/Iqaluit") -ZONE_UNIQUE( 801, "America/Jamaica") -ZONE_UNIQUE( 802, "America/Juneau") -ZONE_UNIQUE( 803, "America/Kentucky/Louisville") -ZONE_UNIQUE( 804, "America/Kentucky/Monticello") -ZONE_UNIQUE( 805, "America/La_Paz") -ZONE_UNIQUE( 806, "America/Lima") -ZONE_UNIQUE( 807, "America/Los_Angeles") -ZONE_UNIQUE( 808, "America/Maceio") -ZONE_UNIQUE( 809, "America/Managua") -ZONE_UNIQUE( 810, "America/Manaus") -ZONE_UNIQUE( 811, "America/Martinique") -ZONE_UNIQUE( 812, "America/Matamoros") -ZONE_UNIQUE( 813, "America/Mazatlan") -ZONE_UNIQUE( 814, "America/Menominee") -ZONE_UNIQUE( 815, "America/Merida") -ZONE_UNIQUE( 816, "America/Metlakatla") -ZONE_UNIQUE( 817, "America/Mexico_City") -ZONE_UNIQUE( 818, "America/Miquelon") -ZONE_UNIQUE( 819, "America/Moncton") -ZONE_UNIQUE( 820, "America/Monterrey") -ZONE_UNIQUE( 821, "America/Montevideo") -ZONE_UNIQUE( 822, "America/Montreal") -ZONE_UNIQUE( 823, "America/Montserrat") -ZONE_UNIQUE( 824, "America/Nassau") -ZONE_UNIQUE( 825, "America/New_York") -ZONE_UNIQUE( 826, "America/Nipigon") -ZONE_UNIQUE( 827, "America/Nome") -ZONE_UNIQUE( 828, "America/Noronha") -ZONE_UNIQUE( 829, "America/North_Dakota/Beulah") -ZONE_UNIQUE( 830, "America/North_Dakota/Center") -ZONE_UNIQUE( 831, "America/North_Dakota/New_Salem") -ZONE_UNIQUE( 832, "America/Nuuk") -ZONE_UNIQUE( 833, "America/Ojinaga") -ZONE_UNIQUE( 834, "America/Panama") -ZONE_UNIQUE( 835, "America/Pangnirtung") -ZONE_UNIQUE( 836, "America/Paramaribo") -ZONE_UNIQUE( 837, "America/Phoenix") -ZONE_UNIQUE( 838, "America/Port-au-Prince") -ZONE_UNIQUE( 839, "America/Port_of_Spain") -ZONE_UNIQUE( 840, "America/Porto_Velho") -ZONE_UNIQUE( 841, "America/Puerto_Rico") -ZONE_UNIQUE( 842, "America/Punta_Arenas") -ZONE_UNIQUE( 843, "America/Rainy_River") -ZONE_UNIQUE( 844, "America/Rankin_Inlet") -ZONE_UNIQUE( 845, "America/Recife") -ZONE_UNIQUE( 846, "America/Regina") -ZONE_UNIQUE( 847, "America/Resolute") -ZONE_UNIQUE( 848, "America/Rio_Branco") -ZONE_UNIQUE( 849, "America/Rosario") -ZONE_UNIQUE( 850, "America/Santarem") -ZONE_UNIQUE( 851, "America/Santiago") -ZONE_UNIQUE( 852, "America/Santo_Domingo") -ZONE_UNIQUE( 853, "America/Sao_Paulo") -ZONE_UNIQUE( 854, "America/Scoresbysund") -ZONE_UNIQUE( 855, "America/Sitka") -ZONE_UNIQUE( 856, "America/St_Johns") -ZONE_UNIQUE( 857, "America/St_Kitts") -ZONE_UNIQUE( 858, "America/St_Lucia") -ZONE_UNIQUE( 859, "America/St_Thomas") -ZONE_UNIQUE( 860, "America/St_Vincent") -ZONE_UNIQUE( 861, "America/Swift_Current") -ZONE_UNIQUE( 862, "America/Tegucigalpa") -ZONE_UNIQUE( 863, "America/Thule") -ZONE_UNIQUE( 864, "America/Thunder_Bay") -ZONE_UNIQUE( 865, "America/Tijuana") -ZONE_UNIQUE( 866, "America/Toronto") -ZONE_UNIQUE( 867, "America/Tortola") -ZONE_UNIQUE( 868, "America/Vancouver") -ZONE_UNIQUE( 869, "America/Whitehorse") -ZONE_UNIQUE( 870, "America/Winnipeg") -ZONE_UNIQUE( 871, "America/Yakutat") -ZONE_UNIQUE( 872, "America/Yellowknife") -ZONE_UNIQUE( 873, "Antarctica/Casey") -ZONE_UNIQUE( 874, "Antarctica/Davis") -ZONE_UNIQUE( 875, "Antarctica/DumontDUrville") -ZONE_UNIQUE( 876, "Antarctica/Macquarie") -ZONE_UNIQUE( 877, "Antarctica/Mawson") -ZONE_UNIQUE( 878, "Antarctica/McMurdo") -ZONE_UNIQUE( 879, "Antarctica/Palmer") -ZONE_UNIQUE( 880, "Antarctica/Rothera") -ZONE_UNIQUE( 881, "Antarctica/Syowa") -ZONE_UNIQUE( 882, "Antarctica/Troll") -ZONE_UNIQUE( 883, "Antarctica/Vostok") -ZONE_UNIQUE( 884, "Asia/Aden") -ZONE_UNIQUE( 885, "Asia/Almaty") -ZONE_UNIQUE( 886, "Asia/Amman") -ZONE_UNIQUE( 887, "Asia/Anadyr") -ZONE_UNIQUE( 888, "Asia/Aqtau") -ZONE_UNIQUE( 889, "Asia/Aqtobe") -ZONE_UNIQUE( 890, "Asia/Ashgabat") -ZONE_UNIQUE( 891, "Asia/Atyrau") -ZONE_UNIQUE( 892, "Asia/Baghdad") -ZONE_UNIQUE( 893, "Asia/Bahrain") -ZONE_UNIQUE( 894, "Asia/Baku") -ZONE_UNIQUE( 895, "Asia/Bangkok") -ZONE_UNIQUE( 896, "Asia/Barnaul") -ZONE_UNIQUE( 897, "Asia/Beirut") -ZONE_UNIQUE( 898, "Asia/Bishkek") -ZONE_UNIQUE( 899, "Asia/Brunei") -ZONE_UNIQUE( 900, "Asia/Chita") -ZONE_UNIQUE( 901, "Asia/Choibalsan") -ZONE_UNIQUE( 902, "Asia/Chongqing") -ZONE_UNIQUE( 903, "Asia/Colombo") -ZONE_UNIQUE( 904, "Asia/Damascus") -ZONE_UNIQUE( 905, "Asia/Dhaka") -ZONE_UNIQUE( 906, "Asia/Dili") -ZONE_UNIQUE( 907, "Asia/Dubai") -ZONE_UNIQUE( 908, "Asia/Dushanbe") -ZONE_UNIQUE( 909, "Asia/Famagusta") -ZONE_UNIQUE( 910, "Asia/Gaza") -ZONE_UNIQUE( 911, "Asia/Hanoi") -ZONE_UNIQUE( 912, "Asia/Harbin") -ZONE_UNIQUE( 913, "Asia/Hebron") -ZONE_UNIQUE( 914, "Asia/Ho_Chi_Minh") -ZONE_UNIQUE( 915, "Asia/Hong_Kong") -ZONE_UNIQUE( 916, "Asia/Hovd") -ZONE_UNIQUE( 917, "Asia/Irkutsk") -ZONE_UNIQUE( 918, "Asia/Jakarta") -ZONE_UNIQUE( 919, "Asia/Jayapura") -ZONE_UNIQUE( 920, "Asia/Jerusalem") -ZONE_UNIQUE( 921, "Asia/Kabul") -ZONE_UNIQUE( 922, "Asia/Kamchatka") -ZONE_UNIQUE( 923, "Asia/Karachi") -ZONE_UNIQUE( 924, "Asia/Kashgar") -ZONE_UNIQUE( 925, "Asia/Kathmandu") -ZONE_UNIQUE( 926, "Asia/Khandyga") -ZONE_UNIQUE( 927, "Asia/Kolkata") -ZONE_UNIQUE( 928, "Asia/Krasnoyarsk") -ZONE_UNIQUE( 929, "Asia/Kuala_Lumpur") -ZONE_UNIQUE( 930, "Asia/Kuching") -ZONE_UNIQUE( 931, "Asia/Kuwait") -ZONE_UNIQUE( 932, "Asia/Macau") -ZONE_UNIQUE( 933, "Asia/Magadan") -ZONE_UNIQUE( 934, "Asia/Makassar") -ZONE_UNIQUE( 935, "Asia/Manila") -ZONE_UNIQUE( 936, "Asia/Muscat") -ZONE_UNIQUE( 937, "Asia/Nicosia") -ZONE_UNIQUE( 938, "Asia/Novokuznetsk") -ZONE_UNIQUE( 939, "Asia/Novosibirsk") -ZONE_UNIQUE( 940, "Asia/Omsk") -ZONE_UNIQUE( 941, "Asia/Oral") -ZONE_UNIQUE( 942, "Asia/Phnom_Penh") -ZONE_UNIQUE( 943, "Asia/Pontianak") -ZONE_UNIQUE( 944, "Asia/Pyongyang") -ZONE_UNIQUE( 945, "Asia/Qatar") -ZONE_UNIQUE( 946, "Asia/Qostanay") -ZONE_UNIQUE( 947, "Asia/Qyzylorda") -ZONE_UNIQUE( 948, "Asia/Riyadh") -ZONE_UNIQUE( 949, "Asia/Sakhalin") -ZONE_UNIQUE( 950, "Asia/Samarkand") -ZONE_UNIQUE( 951, "Asia/Seoul") -ZONE_UNIQUE( 952, "Asia/Shanghai") -ZONE_UNIQUE( 953, "Asia/Singapore") -ZONE_UNIQUE( 954, "Asia/Srednekolymsk") -ZONE_UNIQUE( 955, "Asia/Taipei") -ZONE_UNIQUE( 956, "Asia/Tashkent") -ZONE_UNIQUE( 957, "Asia/Tbilisi") -ZONE_UNIQUE( 958, "Asia/Tehran") -ZONE_UNIQUE( 959, "Asia/Tel_Aviv") -ZONE_UNIQUE( 960, "Asia/Thimphu") -ZONE_UNIQUE( 961, "Asia/Tokyo") -ZONE_UNIQUE( 962, "Asia/Tomsk") -ZONE_UNIQUE( 963, "Asia/Ulaanbaatar") -ZONE_UNIQUE( 964, "Asia/Urumqi") -ZONE_UNIQUE( 965, "Asia/Ust-Nera") -ZONE_UNIQUE( 966, "Asia/Vientiane") -ZONE_UNIQUE( 967, "Asia/Vladivostok") -ZONE_UNIQUE( 968, "Asia/Yakutsk") -ZONE_UNIQUE( 969, "Asia/Yangon") -ZONE_UNIQUE( 970, "Asia/Yekaterinburg") -ZONE_UNIQUE( 971, "Asia/Yerevan") -ZONE_UNIQUE( 972, "Atlantic/Azores") -ZONE_UNIQUE( 973, "Atlantic/Bermuda") -ZONE_UNIQUE( 974, "Atlantic/Canary") -ZONE_UNIQUE( 975, "Atlantic/Cape_Verde") -ZONE_UNIQUE( 976, "Atlantic/Faroe") -ZONE_UNIQUE( 977, "Atlantic/Jan_Mayen") -ZONE_UNIQUE( 978, "Atlantic/Madeira") -ZONE_UNIQUE( 979, "Atlantic/Reykjavik") -ZONE_UNIQUE( 980, "Atlantic/South_Georgia") -ZONE_UNIQUE( 981, "Atlantic/St_Helena") -ZONE_UNIQUE( 982, "Atlantic/Stanley") -ZONE_UNIQUE( 983, "Australia/Adelaide") -ZONE_UNIQUE( 984, "Australia/Brisbane") -ZONE_UNIQUE( 985, "Australia/Broken_Hill") -ZONE_UNIQUE( 986, "Australia/Currie") -ZONE_UNIQUE( 987, "Australia/Darwin") -ZONE_UNIQUE( 988, "Australia/Eucla") -ZONE_UNIQUE( 989, "Australia/Hobart") -ZONE_UNIQUE( 990, "Australia/Lindeman") -ZONE_UNIQUE( 991, "Australia/Lord_Howe") -ZONE_UNIQUE( 992, "Australia/Melbourne") -ZONE_UNIQUE( 993, "Australia/Perth") -ZONE_UNIQUE( 994, "Australia/Sydney") -ZONE_UNIQUE(1000, "Etc/GMT") -ZONE_UNIQUE(1001, "Etc/UTC") -ZONE_UNIQUE(1002, "Europe/Amsterdam") -ZONE_UNIQUE(1003, "Europe/Andorra") -ZONE_UNIQUE(1004, "Europe/Astrakhan") -ZONE_UNIQUE(1005, "Europe/Athens") -ZONE_UNIQUE(1006, "Europe/Belfast") -ZONE_UNIQUE(1007, "Europe/Belgrade") -ZONE_UNIQUE(1008, "Europe/Berlin") -ZONE_UNIQUE(1009, "Europe/Brussels") -ZONE_UNIQUE(1010, "Europe/Bucharest") -ZONE_UNIQUE(1011, "Europe/Budapest") -ZONE_UNIQUE(1012, "Europe/Chisinau") -ZONE_UNIQUE(1013, "Europe/Copenhagen") -ZONE_UNIQUE(1014, "Europe/Dublin") -ZONE_UNIQUE(1015, "Europe/Gibraltar") -ZONE_UNIQUE(1016, "Europe/Guernsey") -ZONE_UNIQUE(1017, "Europe/Helsinki") -ZONE_UNIQUE(1018, "Europe/Isle_of_Man") -ZONE_UNIQUE(1019, "Europe/Istanbul") -ZONE_UNIQUE(1020, "Europe/Jersey") -ZONE_UNIQUE(1021, "Europe/Kaliningrad") -ZONE_UNIQUE(1022, "Europe/Kiev") -ZONE_UNIQUE(1023, "Europe/Kirov") -ZONE_UNIQUE(1024, "Europe/Lisbon") -ZONE_UNIQUE(1025, "Europe/Ljubljana") -ZONE_UNIQUE(1026, "Europe/London") -ZONE_UNIQUE(1027, "Europe/Luxembourg") -ZONE_UNIQUE(1028, "Europe/Madrid") -ZONE_UNIQUE(1029, "Europe/Malta") -ZONE_UNIQUE(1030, "Europe/Minsk") -ZONE_UNIQUE(1031, "Europe/Monaco") -ZONE_UNIQUE(1032, "Europe/Moscow") -ZONE_UNIQUE(1033, "Europe/Oslo") -ZONE_UNIQUE(1034, "Europe/Paris") -ZONE_UNIQUE(1035, "Europe/Prague") -ZONE_UNIQUE(1036, "Europe/Riga") -ZONE_UNIQUE(1037, "Europe/Rome") -ZONE_UNIQUE(1038, "Europe/Samara") -ZONE_UNIQUE(1039, "Europe/Sarajevo") -ZONE_UNIQUE(1040, "Europe/Saratov") -ZONE_UNIQUE(1041, "Europe/Simferopol") -ZONE_UNIQUE(1042, "Europe/Skopje") -ZONE_UNIQUE(1043, "Europe/Sofia") -ZONE_UNIQUE(1044, "Europe/Stockholm") -ZONE_UNIQUE(1045, "Europe/Tallinn") -ZONE_UNIQUE(1046, "Europe/Tirane") -ZONE_UNIQUE(1047, "Europe/Tiraspol") -ZONE_UNIQUE(1048, "Europe/Ulyanovsk") -ZONE_UNIQUE(1049, "Europe/Uzhgorod") -ZONE_UNIQUE(1050, "Europe/Vaduz") -ZONE_UNIQUE(1051, "Europe/Vienna") -ZONE_UNIQUE(1052, "Europe/Vilnius") -ZONE_UNIQUE(1053, "Europe/Volgograd") -ZONE_UNIQUE(1054, "Europe/Warsaw") -ZONE_UNIQUE(1055, "Europe/Zagreb") -ZONE_UNIQUE(1056, "Europe/Zaporozhye") -ZONE_UNIQUE(1057, "Europe/Zurich") -ZONE_UNIQUE(1064, "Indian/Antananarivo") -ZONE_UNIQUE(1065, "Indian/Chagos") -ZONE_UNIQUE(1066, "Indian/Christmas") -ZONE_UNIQUE(1067, "Indian/Cocos") -ZONE_UNIQUE(1068, "Indian/Comoro") -ZONE_UNIQUE(1069, "Indian/Kerguelen") -ZONE_UNIQUE(1070, "Indian/Mahe") -ZONE_UNIQUE(1071, "Indian/Maldives") -ZONE_UNIQUE(1072, "Indian/Mauritius") -ZONE_UNIQUE(1073, "Indian/Mayotte") -ZONE_UNIQUE(1074, "Indian/Reunion") -ZONE_UNIQUE(1080, "Pacific/Apia") -ZONE_UNIQUE(1081, "Pacific/Auckland") -ZONE_UNIQUE(1082, "Pacific/Bougainville") -ZONE_UNIQUE(1083, "Pacific/Chatham") -ZONE_UNIQUE(1084, "Pacific/Chuuk") -ZONE_UNIQUE(1085, "Pacific/Easter") -ZONE_UNIQUE(1086, "Pacific/Efate") -ZONE_UNIQUE(1087, "Pacific/Enderbury") -ZONE_UNIQUE(1088, "Pacific/Fakaofo") -ZONE_UNIQUE(1089, "Pacific/Fiji") -ZONE_UNIQUE(1090, "Pacific/Funafuti") -ZONE_UNIQUE(1091, "Pacific/Galapagos") -ZONE_UNIQUE(1092, "Pacific/Gambier") -ZONE_UNIQUE(1093, "Pacific/Guadalcanal") -ZONE_UNIQUE(1094, "Pacific/Guam") -ZONE_UNIQUE(1095, "Pacific/Honolulu") -ZONE_UNIQUE(1096, "Pacific/Johnston") -ZONE_UNIQUE(1097, "Pacific/Kanton") -ZONE_UNIQUE(1098, "Pacific/Kiritimati") -ZONE_UNIQUE(1099, "Pacific/Kosrae") -ZONE_UNIQUE(1100, "Pacific/Kwajalein") -ZONE_UNIQUE(1101, "Pacific/Majuro") -ZONE_UNIQUE(1102, "Pacific/Marquesas") -ZONE_UNIQUE(1103, "Pacific/Midway") -ZONE_UNIQUE(1104, "Pacific/Nauru") -ZONE_UNIQUE(1105, "Pacific/Niue") -ZONE_UNIQUE(1106, "Pacific/Norfolk") -ZONE_UNIQUE(1107, "Pacific/Noumea") -ZONE_UNIQUE(1108, "Pacific/Pago_Pago") -ZONE_UNIQUE(1109, "Pacific/Palau") -ZONE_UNIQUE(1110, "Pacific/Pitcairn") -ZONE_UNIQUE(1111, "Pacific/Pohnpei") -ZONE_UNIQUE(1112, "Pacific/Port_Moresby") -ZONE_UNIQUE(1113, "Pacific/Rarotonga") -ZONE_UNIQUE(1114, "Pacific/Saipan") -ZONE_UNIQUE(1115, "Pacific/Tahiti") -ZONE_UNIQUE(1116, "Pacific/Tarawa") -ZONE_UNIQUE(1117, "Pacific/Tongatapu") -ZONE_UNIQUE(1118, "Pacific/Wake") -ZONE_UNIQUE(1119, "Pacific/Wallis") +ZONE_UNIQUE( 673, "Africa/Algiers") +ZONE_UNIQUE( 674, "Africa/Bissau") +ZONE_UNIQUE( 675, "Africa/Cairo") +ZONE_UNIQUE( 676, "Africa/Casablanca") +ZONE_UNIQUE( 677, "Africa/Ceuta") +ZONE_UNIQUE( 678, "Africa/El_Aaiun") +ZONE_UNIQUE( 679, "Africa/Johannesburg") +ZONE_UNIQUE( 680, "Africa/Juba") +ZONE_UNIQUE( 681, "Africa/Khartoum") +ZONE_UNIQUE( 682, "Africa/Lagos") +ZONE_UNIQUE( 683, "Africa/Maputo") +ZONE_UNIQUE( 684, "Africa/Monrovia") +ZONE_UNIQUE( 685, "Africa/Nairobi") +ZONE_UNIQUE( 686, "Africa/Ndjamena") +ZONE_UNIQUE( 687, "Africa/Sao_Tome") +ZONE_UNIQUE( 688, "Africa/Tripoli") +ZONE_UNIQUE( 689, "Africa/Tunis") +ZONE_UNIQUE( 690, "Africa/Windhoek") +ZONE_UNIQUE( 691, "America/Adak") +ZONE_UNIQUE( 692, "America/Anchorage") +ZONE_UNIQUE( 693, "America/Araguaina") +ZONE_UNIQUE( 694, "America/Argentina/Buenos_Aires") +ZONE_UNIQUE( 695, "America/Argentina/Catamarca") +ZONE_UNIQUE( 696, "America/Argentina/Cordoba") +ZONE_UNIQUE( 697, "America/Argentina/Jujuy") +ZONE_UNIQUE( 698, "America/Argentina/La_Rioja") +ZONE_UNIQUE( 699, "America/Argentina/Mendoza") +ZONE_UNIQUE( 700, "America/Argentina/Rio_Gallegos") +ZONE_UNIQUE( 701, "America/Argentina/Salta") +ZONE_UNIQUE( 702, "America/Argentina/San_Juan") +ZONE_UNIQUE( 703, "America/Argentina/San_Luis") +ZONE_UNIQUE( 704, "America/Argentina/Tucuman") +ZONE_UNIQUE( 705, "America/Argentina/Ushuaia") +ZONE_UNIQUE( 706, "America/Asuncion") +ZONE_UNIQUE( 707, "America/Bahia") +ZONE_UNIQUE( 708, "America/Bahia_Banderas") +ZONE_UNIQUE( 709, "America/Barbados") +ZONE_UNIQUE( 710, "America/Belem") +ZONE_UNIQUE( 711, "America/Belize") +ZONE_UNIQUE( 712, "America/Boa_Vista") +ZONE_UNIQUE( 713, "America/Bogota") +ZONE_UNIQUE( 714, "America/Boise") +ZONE_UNIQUE( 715, "America/Cambridge_Bay") +ZONE_UNIQUE( 716, "America/Campo_Grande") +ZONE_UNIQUE( 717, "America/Cancun") +ZONE_UNIQUE( 718, "America/Caracas") +ZONE_UNIQUE( 719, "America/Cayenne") +ZONE_UNIQUE( 720, "America/Chicago") +ZONE_UNIQUE( 721, "America/Chihuahua") +ZONE_UNIQUE( 722, "America/Costa_Rica") +ZONE_UNIQUE( 723, "America/Cuiaba") +ZONE_UNIQUE( 724, "America/Danmarkshavn") +ZONE_UNIQUE( 725, "America/Dawson") +ZONE_UNIQUE( 726, "America/Dawson_Creek") +ZONE_UNIQUE( 727, "America/Denver") +ZONE_UNIQUE( 728, "America/Detroit") +ZONE_UNIQUE( 729, "America/Edmonton") +ZONE_UNIQUE( 730, "America/Eirunepe") +ZONE_UNIQUE( 731, "America/El_Salvador") +ZONE_UNIQUE( 732, "America/Fort_Nelson") +ZONE_UNIQUE( 733, "America/Fortaleza") +ZONE_UNIQUE( 734, "America/Glace_Bay") +ZONE_UNIQUE( 735, "America/Goose_Bay") +ZONE_UNIQUE( 736, "America/Grand_Turk") +ZONE_UNIQUE( 737, "America/Guatemala") +ZONE_UNIQUE( 738, "America/Guayaquil") +ZONE_UNIQUE( 739, "America/Guyana") +ZONE_UNIQUE( 740, "America/Halifax") +ZONE_UNIQUE( 741, "America/Havana") +ZONE_UNIQUE( 742, "America/Hermosillo") +ZONE_UNIQUE( 743, "America/Indiana/Indianapolis") +ZONE_UNIQUE( 744, "America/Indiana/Knox") +ZONE_UNIQUE( 745, "America/Indiana/Marengo") +ZONE_UNIQUE( 746, "America/Indiana/Petersburg") +ZONE_UNIQUE( 747, "America/Indiana/Tell_City") +ZONE_UNIQUE( 748, "America/Indiana/Vevay") +ZONE_UNIQUE( 749, "America/Indiana/Vincennes") +ZONE_UNIQUE( 750, "America/Indiana/Winamac") +ZONE_UNIQUE( 751, "America/Inuvik") +ZONE_UNIQUE( 752, "America/Iqaluit") +ZONE_UNIQUE( 753, "America/Jamaica") +ZONE_UNIQUE( 754, "America/Juneau") +ZONE_UNIQUE( 755, "America/Kentucky/Louisville") +ZONE_UNIQUE( 756, "America/Kentucky/Monticello") +ZONE_UNIQUE( 757, "America/La_Paz") +ZONE_UNIQUE( 758, "America/Lima") +ZONE_UNIQUE( 759, "America/Los_Angeles") +ZONE_UNIQUE( 760, "America/Maceio") +ZONE_UNIQUE( 761, "America/Managua") +ZONE_UNIQUE( 762, "America/Manaus") +ZONE_UNIQUE( 763, "America/Martinique") +ZONE_UNIQUE( 764, "America/Matamoros") +ZONE_UNIQUE( 765, "America/Mazatlan") +ZONE_UNIQUE( 766, "America/Menominee") +ZONE_UNIQUE( 767, "America/Merida") +ZONE_UNIQUE( 768, "America/Metlakatla") +ZONE_UNIQUE( 769, "America/Mexico_City") +ZONE_UNIQUE( 770, "America/Miquelon") +ZONE_UNIQUE( 771, "America/Moncton") +ZONE_UNIQUE( 772, "America/Monterrey") +ZONE_UNIQUE( 773, "America/Montevideo") +ZONE_UNIQUE( 774, "America/New_York") +ZONE_UNIQUE( 775, "America/Nipigon") +ZONE_UNIQUE( 776, "America/Nome") +ZONE_UNIQUE( 777, "America/Noronha") +ZONE_UNIQUE( 778, "America/North_Dakota/Beulah") +ZONE_UNIQUE( 779, "America/North_Dakota/Center") +ZONE_UNIQUE( 780, "America/North_Dakota/New_Salem") +ZONE_UNIQUE( 781, "America/Nuuk") +ZONE_UNIQUE( 782, "America/Ojinaga") +ZONE_UNIQUE( 783, "America/Panama") +ZONE_UNIQUE( 784, "America/Pangnirtung") +ZONE_UNIQUE( 785, "America/Paramaribo") +ZONE_UNIQUE( 786, "America/Phoenix") +ZONE_UNIQUE( 787, "America/Port-au-Prince") +ZONE_UNIQUE( 788, "America/Porto_Velho") +ZONE_UNIQUE( 789, "America/Puerto_Rico") +ZONE_UNIQUE( 790, "America/Punta_Arenas") +ZONE_UNIQUE( 791, "America/Rainy_River") +ZONE_UNIQUE( 792, "America/Rankin_Inlet") +ZONE_UNIQUE( 793, "America/Recife") +ZONE_UNIQUE( 794, "America/Regina") +ZONE_UNIQUE( 795, "America/Resolute") +ZONE_UNIQUE( 796, "America/Rio_Branco") +ZONE_UNIQUE( 797, "America/Santarem") +ZONE_UNIQUE( 798, "America/Santiago") +ZONE_UNIQUE( 799, "America/Santo_Domingo") +ZONE_UNIQUE( 800, "America/Sao_Paulo") +ZONE_UNIQUE( 801, "America/Scoresbysund") +ZONE_UNIQUE( 802, "America/Sitka") +ZONE_UNIQUE( 803, "America/St_Johns") +ZONE_UNIQUE( 804, "America/Swift_Current") +ZONE_UNIQUE( 805, "America/Tegucigalpa") +ZONE_UNIQUE( 806, "America/Thule") +ZONE_UNIQUE( 807, "America/Thunder_Bay") +ZONE_UNIQUE( 808, "America/Tijuana") +ZONE_UNIQUE( 809, "America/Toronto") +ZONE_UNIQUE( 810, "America/Vancouver") +ZONE_UNIQUE( 811, "America/Whitehorse") +ZONE_UNIQUE( 812, "America/Winnipeg") +ZONE_UNIQUE( 813, "America/Yakutat") +ZONE_UNIQUE( 814, "America/Yellowknife") +ZONE_UNIQUE( 815, "Antarctica/Casey") +ZONE_UNIQUE( 816, "Antarctica/Davis") +ZONE_UNIQUE( 817, "Antarctica/Macquarie") +ZONE_UNIQUE( 818, "Antarctica/Mawson") +ZONE_UNIQUE( 819, "Antarctica/Palmer") +ZONE_UNIQUE( 820, "Antarctica/Rothera") +ZONE_UNIQUE( 821, "Antarctica/Troll") +ZONE_UNIQUE( 822, "Antarctica/Vostok") +ZONE_UNIQUE( 823, "Asia/Almaty") +ZONE_UNIQUE( 824, "Asia/Amman") +ZONE_UNIQUE( 825, "Asia/Anadyr") +ZONE_UNIQUE( 826, "Asia/Aqtau") +ZONE_UNIQUE( 827, "Asia/Aqtobe") +ZONE_UNIQUE( 828, "Asia/Ashgabat") +ZONE_UNIQUE( 829, "Asia/Atyrau") +ZONE_UNIQUE( 830, "Asia/Baghdad") +ZONE_UNIQUE( 831, "Asia/Baku") +ZONE_UNIQUE( 832, "Asia/Bangkok") +ZONE_UNIQUE( 833, "Asia/Barnaul") +ZONE_UNIQUE( 834, "Asia/Beirut") +ZONE_UNIQUE( 835, "Asia/Bishkek") +ZONE_UNIQUE( 836, "Asia/Brunei") +ZONE_UNIQUE( 837, "Asia/Chita") +ZONE_UNIQUE( 838, "Asia/Choibalsan") +ZONE_UNIQUE( 839, "Asia/Colombo") +ZONE_UNIQUE( 840, "Asia/Damascus") +ZONE_UNIQUE( 841, "Asia/Dhaka") +ZONE_UNIQUE( 842, "Asia/Dili") +ZONE_UNIQUE( 843, "Asia/Dubai") +ZONE_UNIQUE( 844, "Asia/Dushanbe") +ZONE_UNIQUE( 845, "Asia/Famagusta") +ZONE_UNIQUE( 846, "Asia/Gaza") +ZONE_UNIQUE( 847, "Asia/Hebron") +ZONE_UNIQUE( 848, "Asia/Ho_Chi_Minh") +ZONE_UNIQUE( 849, "Asia/Hong_Kong") +ZONE_UNIQUE( 850, "Asia/Hovd") +ZONE_UNIQUE( 851, "Asia/Irkutsk") +ZONE_UNIQUE( 852, "Asia/Jakarta") +ZONE_UNIQUE( 853, "Asia/Jayapura") +ZONE_UNIQUE( 854, "Asia/Jerusalem") +ZONE_UNIQUE( 855, "Asia/Kabul") +ZONE_UNIQUE( 856, "Asia/Kamchatka") +ZONE_UNIQUE( 857, "Asia/Karachi") +ZONE_UNIQUE( 858, "Asia/Kathmandu") +ZONE_UNIQUE( 859, "Asia/Khandyga") +ZONE_UNIQUE( 860, "Asia/Kolkata") +ZONE_UNIQUE( 861, "Asia/Krasnoyarsk") +ZONE_UNIQUE( 862, "Asia/Kuala_Lumpur") +ZONE_UNIQUE( 863, "Asia/Kuching") +ZONE_UNIQUE( 864, "Asia/Macau") +ZONE_UNIQUE( 865, "Asia/Magadan") +ZONE_UNIQUE( 866, "Asia/Makassar") +ZONE_UNIQUE( 867, "Asia/Manila") +ZONE_UNIQUE( 868, "Asia/Nicosia") +ZONE_UNIQUE( 869, "Asia/Novokuznetsk") +ZONE_UNIQUE( 870, "Asia/Novosibirsk") +ZONE_UNIQUE( 871, "Asia/Omsk") +ZONE_UNIQUE( 872, "Asia/Oral") +ZONE_UNIQUE( 873, "Asia/Pontianak") +ZONE_UNIQUE( 874, "Asia/Pyongyang") +ZONE_UNIQUE( 875, "Asia/Qatar") +ZONE_UNIQUE( 876, "Asia/Qostanay") +ZONE_UNIQUE( 877, "Asia/Qyzylorda") +ZONE_UNIQUE( 878, "Asia/Riyadh") +ZONE_UNIQUE( 879, "Asia/Sakhalin") +ZONE_UNIQUE( 880, "Asia/Samarkand") +ZONE_UNIQUE( 881, "Asia/Seoul") +ZONE_UNIQUE( 882, "Asia/Shanghai") +ZONE_UNIQUE( 883, "Asia/Singapore") +ZONE_UNIQUE( 884, "Asia/Srednekolymsk") +ZONE_UNIQUE( 885, "Asia/Taipei") +ZONE_UNIQUE( 886, "Asia/Tashkent") +ZONE_UNIQUE( 887, "Asia/Tbilisi") +ZONE_UNIQUE( 888, "Asia/Tehran") +ZONE_UNIQUE( 889, "Asia/Thimphu") +ZONE_UNIQUE( 890, "Asia/Tokyo") +ZONE_UNIQUE( 891, "Asia/Tomsk") +ZONE_UNIQUE( 892, "Asia/Ulaanbaatar") +ZONE_UNIQUE( 893, "Asia/Urumqi") +ZONE_UNIQUE( 894, "Asia/Ust-Nera") +ZONE_UNIQUE( 895, "Asia/Vladivostok") +ZONE_UNIQUE( 896, "Asia/Yakutsk") +ZONE_UNIQUE( 897, "Asia/Yangon") +ZONE_UNIQUE( 898, "Asia/Yekaterinburg") +ZONE_UNIQUE( 899, "Asia/Yerevan") +ZONE_UNIQUE( 900, "Atlantic/Azores") +ZONE_UNIQUE( 901, "Atlantic/Bermuda") +ZONE_UNIQUE( 902, "Atlantic/Canary") +ZONE_UNIQUE( 903, "Atlantic/Cape_Verde") +ZONE_UNIQUE( 904, "Atlantic/Faroe") +ZONE_UNIQUE( 905, "Atlantic/Madeira") +ZONE_UNIQUE( 906, "Atlantic/Reykjavik") +ZONE_UNIQUE( 907, "Atlantic/South_Georgia") +ZONE_UNIQUE( 908, "Atlantic/Stanley") +ZONE_UNIQUE( 909, "Australia/Adelaide") +ZONE_UNIQUE( 910, "Australia/Brisbane") +ZONE_UNIQUE( 911, "Australia/Broken_Hill") +ZONE_UNIQUE( 912, "Australia/Darwin") +ZONE_UNIQUE( 913, "Australia/Eucla") +ZONE_UNIQUE( 914, "Australia/Hobart") +ZONE_UNIQUE( 915, "Australia/Lindeman") +ZONE_UNIQUE( 916, "Australia/Lord_Howe") +ZONE_UNIQUE( 917, "Australia/Melbourne") +ZONE_UNIQUE( 918, "Australia/Perth") +ZONE_UNIQUE( 919, "Australia/Sydney") +ZONE_UNIQUE( 920, "Etc/GMT") +ZONE_UNIQUE( 921, "Etc/UTC") +ZONE_UNIQUE( 922, "Europe/Amsterdam") +ZONE_UNIQUE( 923, "Europe/Andorra") +ZONE_UNIQUE( 924, "Europe/Astrakhan") +ZONE_UNIQUE( 925, "Europe/Athens") +ZONE_UNIQUE( 926, "Europe/Belgrade") +ZONE_UNIQUE( 927, "Europe/Berlin") +ZONE_UNIQUE( 928, "Europe/Brussels") +ZONE_UNIQUE( 929, "Europe/Bucharest") +ZONE_UNIQUE( 930, "Europe/Budapest") +ZONE_UNIQUE( 931, "Europe/Chisinau") +ZONE_UNIQUE( 932, "Europe/Copenhagen") +ZONE_UNIQUE( 933, "Europe/Dublin") +ZONE_UNIQUE( 934, "Europe/Gibraltar") +ZONE_UNIQUE( 935, "Europe/Helsinki") +ZONE_UNIQUE( 936, "Europe/Istanbul") +ZONE_UNIQUE( 937, "Europe/Kaliningrad") +ZONE_UNIQUE( 938, "Europe/Kiev") +ZONE_UNIQUE( 939, "Europe/Kirov") +ZONE_UNIQUE( 940, "Europe/Lisbon") +ZONE_UNIQUE( 941, "Europe/London") +ZONE_UNIQUE( 942, "Europe/Luxembourg") +ZONE_UNIQUE( 943, "Europe/Madrid") +ZONE_UNIQUE( 944, "Europe/Malta") +ZONE_UNIQUE( 945, "Europe/Minsk") +ZONE_UNIQUE( 946, "Europe/Monaco") +ZONE_UNIQUE( 947, "Europe/Moscow") +ZONE_UNIQUE( 948, "Europe/Oslo") +ZONE_UNIQUE( 949, "Europe/Paris") +ZONE_UNIQUE( 950, "Europe/Prague") +ZONE_UNIQUE( 951, "Europe/Riga") +ZONE_UNIQUE( 952, "Europe/Rome") +ZONE_UNIQUE( 953, "Europe/Samara") +ZONE_UNIQUE( 954, "Europe/Saratov") +ZONE_UNIQUE( 955, "Europe/Simferopol") +ZONE_UNIQUE( 956, "Europe/Sofia") +ZONE_UNIQUE( 957, "Europe/Stockholm") +ZONE_UNIQUE( 958, "Europe/Tallinn") +ZONE_UNIQUE( 959, "Europe/Tirane") +ZONE_UNIQUE( 960, "Europe/Ulyanovsk") +ZONE_UNIQUE( 961, "Europe/Uzhgorod") +ZONE_UNIQUE( 962, "Europe/Vienna") +ZONE_UNIQUE( 963, "Europe/Vilnius") +ZONE_UNIQUE( 964, "Europe/Volgograd") +ZONE_UNIQUE( 965, "Europe/Warsaw") +ZONE_UNIQUE( 966, "Europe/Zaporozhye") +ZONE_UNIQUE( 967, "Europe/Zurich") +ZONE_UNIQUE( 968, "Indian/Chagos") +ZONE_UNIQUE( 969, "Indian/Christmas") +ZONE_UNIQUE( 970, "Indian/Cocos") +ZONE_UNIQUE( 971, "Indian/Kerguelen") +ZONE_UNIQUE( 972, "Indian/Mahe") +ZONE_UNIQUE( 973, "Indian/Maldives") +ZONE_UNIQUE( 974, "Indian/Mauritius") +ZONE_UNIQUE( 975, "Indian/Reunion") +ZONE_UNIQUE( 976, "Pacific/Apia") +ZONE_UNIQUE( 977, "Pacific/Auckland") +ZONE_UNIQUE( 978, "Pacific/Bougainville") +ZONE_UNIQUE( 979, "Pacific/Chatham") +ZONE_UNIQUE( 980, "Pacific/Chuuk") +ZONE_UNIQUE( 981, "Pacific/Easter") +ZONE_UNIQUE( 982, "Pacific/Efate") +ZONE_UNIQUE( 983, "Pacific/Fakaofo") +ZONE_UNIQUE( 984, "Pacific/Fiji") +ZONE_UNIQUE( 985, "Pacific/Funafuti") +ZONE_UNIQUE( 986, "Pacific/Galapagos") +ZONE_UNIQUE( 987, "Pacific/Gambier") +ZONE_UNIQUE( 988, "Pacific/Guadalcanal") +ZONE_UNIQUE( 989, "Pacific/Guam") +ZONE_UNIQUE( 990, "Pacific/Honolulu") +ZONE_UNIQUE( 991, "Pacific/Kanton") +ZONE_UNIQUE( 992, "Pacific/Kiritimati") +ZONE_UNIQUE( 993, "Pacific/Kosrae") +ZONE_UNIQUE( 994, "Pacific/Kwajalein") +ZONE_UNIQUE( 995, "Pacific/Majuro") +ZONE_UNIQUE( 996, "Pacific/Marquesas") +ZONE_UNIQUE( 997, "Pacific/Nauru") +ZONE_UNIQUE( 998, "Pacific/Niue") +ZONE_UNIQUE( 999, "Pacific/Norfolk") +ZONE_UNIQUE(1000, "Pacific/Noumea") +ZONE_UNIQUE(1001, "Pacific/Pago_Pago") +ZONE_UNIQUE(1002, "Pacific/Palau") +ZONE_UNIQUE(1003, "Pacific/Pitcairn") +ZONE_UNIQUE(1004, "Pacific/Pohnpei") +ZONE_UNIQUE(1005, "Pacific/Port_Moresby") +ZONE_UNIQUE(1006, "Pacific/Rarotonga") +ZONE_UNIQUE(1007, "Pacific/Tahiti") +ZONE_UNIQUE(1008, "Pacific/Tarawa") +ZONE_UNIQUE(1009, "Pacific/Tongatapu") +ZONE_UNIQUE(1010, "Pacific/Wake") +ZONE_UNIQUE(1011, "Pacific/Wallis") +ZONE_ALIAS( 672, "Africa/Accra", "Africa/Abidjan") +ZONE_ALIAS( 685, "Africa/Addis_Ababa", "Africa/Nairobi") +ZONE_ALIAS( 685, "Africa/Asmara", "Africa/Nairobi") +ZONE_ALIAS( 685, "Africa/Asmera", "Africa/Nairobi") +ZONE_ALIAS( 672, "Africa/Bamako", "Africa/Abidjan") +ZONE_ALIAS( 682, "Africa/Bangui", "Africa/Lagos") +ZONE_ALIAS( 672, "Africa/Banjul", "Africa/Abidjan") +ZONE_ALIAS( 683, "Africa/Blantyre", "Africa/Maputo") +ZONE_ALIAS( 682, "Africa/Brazzaville", "Africa/Lagos") +ZONE_ALIAS( 683, "Africa/Bujumbura", "Africa/Maputo") +ZONE_ALIAS( 672, "Africa/Conakry", "Africa/Abidjan") +ZONE_ALIAS( 672, "Africa/Dakar", "Africa/Abidjan") +ZONE_ALIAS( 685, "Africa/Dar_es_Salaam", "Africa/Nairobi") +ZONE_ALIAS( 685, "Africa/Djibouti", "Africa/Nairobi") +ZONE_ALIAS( 682, "Africa/Douala", "Africa/Lagos") +ZONE_ALIAS( 672, "Africa/Freetown", "Africa/Abidjan") +ZONE_ALIAS( 683, "Africa/Gaborone", "Africa/Maputo") +ZONE_ALIAS( 683, "Africa/Harare", "Africa/Maputo") +ZONE_ALIAS( 685, "Africa/Kampala", "Africa/Nairobi") +ZONE_ALIAS( 683, "Africa/Kigali", "Africa/Maputo") +ZONE_ALIAS( 682, "Africa/Kinshasa", "Africa/Lagos") +ZONE_ALIAS( 682, "Africa/Libreville", "Africa/Lagos") +ZONE_ALIAS( 672, "Africa/Lome", "Africa/Abidjan") +ZONE_ALIAS( 682, "Africa/Luanda", "Africa/Lagos") +ZONE_ALIAS( 683, "Africa/Lubumbashi", "Africa/Maputo") +ZONE_ALIAS( 683, "Africa/Lusaka", "Africa/Maputo") +ZONE_ALIAS( 682, "Africa/Malabo", "Africa/Lagos") +ZONE_ALIAS( 679, "Africa/Maseru", "Africa/Johannesburg") +ZONE_ALIAS( 679, "Africa/Mbabane", "Africa/Johannesburg") +ZONE_ALIAS( 685, "Africa/Mogadishu", "Africa/Nairobi") +ZONE_ALIAS( 682, "Africa/Niamey", "Africa/Lagos") +ZONE_ALIAS( 672, "Africa/Nouakchott", "Africa/Abidjan") +ZONE_ALIAS( 672, "Africa/Ouagadougou", "Africa/Abidjan") +ZONE_ALIAS( 682, "Africa/Porto-Novo", "Africa/Lagos") +ZONE_ALIAS( 672, "Africa/Timbuktu", "Africa/Abidjan") +ZONE_ALIAS( 789, "America/Anguilla", "America/Puerto_Rico") +ZONE_ALIAS( 789, "America/Antigua", "America/Puerto_Rico") +ZONE_ALIAS( 695, "America/Argentina/ComodRivadavia", "America/Argentina/Catamarca") +ZONE_ALIAS( 789, "America/Aruba", "America/Puerto_Rico") +ZONE_ALIAS( 783, "America/Atikokan", "America/Panama") +ZONE_ALIAS( 691, "America/Atka", "America/Adak") +ZONE_ALIAS( 789, "America/Blanc-Sablon", "America/Puerto_Rico") +ZONE_ALIAS( 694, "America/Buenos_Aires", "America/Argentina/Buenos_Aires") +ZONE_ALIAS( 695, "America/Catamarca", "America/Argentina/Catamarca") +ZONE_ALIAS( 783, "America/Cayman", "America/Panama") +ZONE_ALIAS( 783, "America/Coral_Harbour", "America/Panama") +ZONE_ALIAS( 696, "America/Cordoba", "America/Argentina/Cordoba") +ZONE_ALIAS( 786, "America/Creston", "America/Phoenix") +ZONE_ALIAS( 789, "America/Curacao", "America/Puerto_Rico") +ZONE_ALIAS( 789, "America/Dominica", "America/Puerto_Rico") +ZONE_ALIAS( 808, "America/Ensenada", "America/Tijuana") +ZONE_ALIAS( 743, "America/Fort_Wayne", "America/Indiana/Indianapolis") +ZONE_ALIAS( 781, "America/Godthab", "America/Nuuk") +ZONE_ALIAS( 789, "America/Grenada", "America/Puerto_Rico") +ZONE_ALIAS( 789, "America/Guadeloupe", "America/Puerto_Rico") +ZONE_ALIAS( 743, "America/Indianapolis", "America/Indiana/Indianapolis") +ZONE_ALIAS( 697, "America/Jujuy", "America/Argentina/Jujuy") +ZONE_ALIAS( 744, "America/Knox_IN", "America/Indiana/Knox") +ZONE_ALIAS( 789, "America/Kralendijk", "America/Puerto_Rico") +ZONE_ALIAS( 755, "America/Louisville", "America/Kentucky/Louisville") +ZONE_ALIAS( 789, "America/Lower_Princes", "America/Puerto_Rico") +ZONE_ALIAS( 789, "America/Marigot", "America/Puerto_Rico") +ZONE_ALIAS( 699, "America/Mendoza", "America/Argentina/Mendoza") +ZONE_ALIAS( 809, "America/Montreal", "America/Toronto") +ZONE_ALIAS( 789, "America/Montserrat", "America/Puerto_Rico") +ZONE_ALIAS( 809, "America/Nassau", "America/Toronto") +ZONE_ALIAS( 789, "America/Port_of_Spain", "America/Puerto_Rico") +ZONE_ALIAS( 796, "America/Porto_Acre", "America/Rio_Branco") +ZONE_ALIAS( 696, "America/Rosario", "America/Argentina/Cordoba") +ZONE_ALIAS( 808, "America/Santa_Isabel", "America/Tijuana") +ZONE_ALIAS( 727, "America/Shiprock", "America/Denver") +ZONE_ALIAS( 789, "America/St_Barthelemy", "America/Puerto_Rico") +ZONE_ALIAS( 789, "America/St_Kitts", "America/Puerto_Rico") +ZONE_ALIAS( 789, "America/St_Lucia", "America/Puerto_Rico") +ZONE_ALIAS( 789, "America/St_Thomas", "America/Puerto_Rico") +ZONE_ALIAS( 789, "America/St_Vincent", "America/Puerto_Rico") +ZONE_ALIAS( 789, "America/Tortola", "America/Puerto_Rico") +ZONE_ALIAS( 789, "America/Virgin", "America/Puerto_Rico") +ZONE_ALIAS(1005, "Antarctica/DumontDUrville", "Pacific/Port_Moresby") +ZONE_ALIAS( 977, "Antarctica/McMurdo", "Pacific/Auckland") +ZONE_ALIAS( 977, "Antarctica/South_Pole", "Pacific/Auckland") +ZONE_ALIAS( 878, "Antarctica/Syowa", "Asia/Riyadh") +ZONE_ALIAS( 948, "Arctic/Longyearbyen", "Europe/Oslo") +ZONE_ALIAS( 878, "Asia/Aden", "Asia/Riyadh") +ZONE_ALIAS( 828, "Asia/Ashkhabad", "Asia/Ashgabat") +ZONE_ALIAS( 875, "Asia/Bahrain", "Asia/Qatar") +ZONE_ALIAS( 860, "Asia/Calcutta", "Asia/Kolkata") +ZONE_ALIAS( 882, "Asia/Chongqing", "Asia/Shanghai") +ZONE_ALIAS( 882, "Asia/Chungking", "Asia/Shanghai") +ZONE_ALIAS( 841, "Asia/Dacca", "Asia/Dhaka") +ZONE_ALIAS( 882, "Asia/Harbin", "Asia/Shanghai") +ZONE_ALIAS( 936, "Asia/Istanbul", "Europe/Istanbul") +ZONE_ALIAS( 893, "Asia/Kashgar", "Asia/Urumqi") +ZONE_ALIAS( 858, "Asia/Katmandu", "Asia/Kathmandu") +ZONE_ALIAS( 878, "Asia/Kuwait", "Asia/Riyadh") +ZONE_ALIAS( 864, "Asia/Macao", "Asia/Macau") +ZONE_ALIAS( 843, "Asia/Muscat", "Asia/Dubai") +ZONE_ALIAS( 832, "Asia/Phnom_Penh", "Asia/Bangkok") +ZONE_ALIAS( 897, "Asia/Rangoon", "Asia/Yangon") +ZONE_ALIAS( 848, "Asia/Saigon", "Asia/Ho_Chi_Minh") +ZONE_ALIAS( 854, "Asia/Tel_Aviv", "Asia/Jerusalem") +ZONE_ALIAS( 889, "Asia/Thimbu", "Asia/Thimphu") +ZONE_ALIAS( 866, "Asia/Ujung_Pandang", "Asia/Makassar") +ZONE_ALIAS( 892, "Asia/Ulan_Bator", "Asia/Ulaanbaatar") +ZONE_ALIAS( 832, "Asia/Vientiane", "Asia/Bangkok") +ZONE_ALIAS( 904, "Atlantic/Faeroe", "Atlantic/Faroe") +ZONE_ALIAS( 948, "Atlantic/Jan_Mayen", "Europe/Oslo") +ZONE_ALIAS( 672, "Atlantic/St_Helena", "Africa/Abidjan") +ZONE_ALIAS( 919, "Australia/ACT", "Australia/Sydney") +ZONE_ALIAS( 919, "Australia/Canberra", "Australia/Sydney") +ZONE_ALIAS( 914, "Australia/Currie", "Australia/Hobart") +ZONE_ALIAS( 916, "Australia/LHI", "Australia/Lord_Howe") +ZONE_ALIAS( 919, "Australia/NSW", "Australia/Sydney") +ZONE_ALIAS( 912, "Australia/North", "Australia/Darwin") +ZONE_ALIAS( 910, "Australia/Queensland", "Australia/Brisbane") +ZONE_ALIAS( 909, "Australia/South", "Australia/Adelaide") +ZONE_ALIAS( 914, "Australia/Tasmania", "Australia/Hobart") +ZONE_ALIAS( 917, "Australia/Victoria", "Australia/Melbourne") +ZONE_ALIAS( 918, "Australia/West", "Australia/Perth") +ZONE_ALIAS( 911, "Australia/Yancowinna", "Australia/Broken_Hill") +ZONE_ALIAS( 796, "Brazil/Acre", "America/Rio_Branco") +ZONE_ALIAS( 777, "Brazil/DeNoronha", "America/Noronha") +ZONE_ALIAS( 800, "Brazil/East", "America/Sao_Paulo") +ZONE_ALIAS( 762, "Brazil/West", "America/Manaus") +ZONE_ALIAS( 740, "Canada/Atlantic", "America/Halifax") +ZONE_ALIAS( 812, "Canada/Central", "America/Winnipeg") +ZONE_ALIAS( 809, "Canada/Eastern", "America/Toronto") +ZONE_ALIAS( 729, "Canada/Mountain", "America/Edmonton") +ZONE_ALIAS( 803, "Canada/Newfoundland", "America/St_Johns") +ZONE_ALIAS( 810, "Canada/Pacific", "America/Vancouver") +ZONE_ALIAS( 794, "Canada/Saskatchewan", "America/Regina") +ZONE_ALIAS( 811, "Canada/Yukon", "America/Whitehorse") +ZONE_ALIAS( 798, "Chile/Continental", "America/Santiago") +ZONE_ALIAS( 981, "Chile/EasterIsland", "Pacific/Easter") +ZONE_ALIAS( 741, "Cuba", "America/Havana") +ZONE_ALIAS( 675, "Egypt", "Africa/Cairo") +ZONE_ALIAS( 933, "Eire", "Europe/Dublin") +ZONE_ALIAS( 920, "Etc/GMT+0", "Etc/GMT") +ZONE_ALIAS( 920, "Etc/GMT-0", "Etc/GMT") +ZONE_ALIAS( 920, "Etc/GMT0", "Etc/GMT") +ZONE_ALIAS( 920, "Etc/Greenwich", "Etc/GMT") +ZONE_ALIAS( 921, "Etc/UCT", "Etc/UTC") +ZONE_ALIAS( 921, "Etc/Universal", "Etc/UTC") +ZONE_ALIAS( 921, "Etc/Zulu", "Etc/UTC") +ZONE_ALIAS( 941, "Europe/Belfast", "Europe/London") +ZONE_ALIAS( 950, "Europe/Bratislava", "Europe/Prague") +ZONE_ALIAS( 967, "Europe/Busingen", "Europe/Zurich") +ZONE_ALIAS( 941, "Europe/Guernsey", "Europe/London") +ZONE_ALIAS( 941, "Europe/Isle_of_Man", "Europe/London") +ZONE_ALIAS( 941, "Europe/Jersey", "Europe/London") +ZONE_ALIAS( 926, "Europe/Ljubljana", "Europe/Belgrade") +ZONE_ALIAS( 935, "Europe/Mariehamn", "Europe/Helsinki") +ZONE_ALIAS( 868, "Europe/Nicosia", "Asia/Nicosia") +ZONE_ALIAS( 926, "Europe/Podgorica", "Europe/Belgrade") +ZONE_ALIAS( 952, "Europe/San_Marino", "Europe/Rome") +ZONE_ALIAS( 926, "Europe/Sarajevo", "Europe/Belgrade") +ZONE_ALIAS( 926, "Europe/Skopje", "Europe/Belgrade") +ZONE_ALIAS( 931, "Europe/Tiraspol", "Europe/Chisinau") +ZONE_ALIAS( 967, "Europe/Vaduz", "Europe/Zurich") +ZONE_ALIAS( 952, "Europe/Vatican", "Europe/Rome") +ZONE_ALIAS( 926, "Europe/Zagreb", "Europe/Belgrade") +ZONE_ALIAS( 941, "GB", "Europe/London") +ZONE_ALIAS( 941, "GB-Eire", "Europe/London") +ZONE_ALIAS( 920, "GMT+0", "Etc/GMT") +ZONE_ALIAS( 920, "GMT-0", "Etc/GMT") +ZONE_ALIAS( 920, "GMT0", "Etc/GMT") +ZONE_ALIAS( 920, "Greenwich", "Etc/GMT") +ZONE_ALIAS( 849, "Hongkong", "Asia/Hong_Kong") +ZONE_ALIAS( 906, "Iceland", "Atlantic/Reykjavik") +ZONE_ALIAS( 685, "Indian/Antananarivo", "Africa/Nairobi") +ZONE_ALIAS( 685, "Indian/Comoro", "Africa/Nairobi") +ZONE_ALIAS( 685, "Indian/Mayotte", "Africa/Nairobi") +ZONE_ALIAS( 888, "Iran", "Asia/Tehran") +ZONE_ALIAS( 854, "Israel", "Asia/Jerusalem") +ZONE_ALIAS( 753, "Jamaica", "America/Jamaica") +ZONE_ALIAS( 890, "Japan", "Asia/Tokyo") +ZONE_ALIAS( 994, "Kwajalein", "Pacific/Kwajalein") +ZONE_ALIAS( 688, "Libya", "Africa/Tripoli") +ZONE_ALIAS( 808, "Mexico/BajaNorte", "America/Tijuana") +ZONE_ALIAS( 765, "Mexico/BajaSur", "America/Mazatlan") +ZONE_ALIAS( 769, "Mexico/General", "America/Mexico_City") +ZONE_ALIAS( 977, "NZ", "Pacific/Auckland") +ZONE_ALIAS( 979, "NZ-CHAT", "Pacific/Chatham") +ZONE_ALIAS( 727, "Navajo", "America/Denver") +ZONE_ALIAS( 882, "PRC", "Asia/Shanghai") +ZONE_ALIAS( 991, "Pacific/Enderbury", "Pacific/Kanton") +ZONE_ALIAS( 990, "Pacific/Johnston", "Pacific/Honolulu") +ZONE_ALIAS(1001, "Pacific/Midway", "Pacific/Pago_Pago") +ZONE_ALIAS(1004, "Pacific/Ponape", "Pacific/Pohnpei") +ZONE_ALIAS( 989, "Pacific/Saipan", "Pacific/Guam") +ZONE_ALIAS(1001, "Pacific/Samoa", "Pacific/Pago_Pago") +ZONE_ALIAS( 980, "Pacific/Truk", "Pacific/Chuuk") +ZONE_ALIAS( 980, "Pacific/Yap", "Pacific/Chuuk") +ZONE_ALIAS( 965, "Poland", "Europe/Warsaw") +ZONE_ALIAS( 940, "Portugal", "Europe/Lisbon") +ZONE_ALIAS( 885, "ROC", "Asia/Taipei") +ZONE_ALIAS( 881, "ROK", "Asia/Seoul") +ZONE_ALIAS( 883, "Singapore", "Asia/Singapore") +ZONE_ALIAS( 936, "Turkey", "Europe/Istanbul") +ZONE_ALIAS( 921, "UCT", "Etc/UTC") +ZONE_ALIAS( 692, "US/Alaska", "America/Anchorage") +ZONE_ALIAS( 691, "US/Aleutian", "America/Adak") +ZONE_ALIAS( 786, "US/Arizona", "America/Phoenix") +ZONE_ALIAS( 720, "US/Central", "America/Chicago") +ZONE_ALIAS( 743, "US/East-Indiana", "America/Indiana/Indianapolis") +ZONE_ALIAS( 774, "US/Eastern", "America/New_York") +ZONE_ALIAS( 990, "US/Hawaii", "Pacific/Honolulu") +ZONE_ALIAS( 744, "US/Indiana-Starke", "America/Indiana/Knox") +ZONE_ALIAS( 728, "US/Michigan", "America/Detroit") +ZONE_ALIAS( 727, "US/Mountain", "America/Denver") +ZONE_ALIAS( 759, "US/Pacific", "America/Los_Angeles") +ZONE_ALIAS(1001, "US/Samoa", "Pacific/Pago_Pago") +ZONE_ALIAS( 921, "Universal", "Etc/UTC") +ZONE_ALIAS( 947, "W-SU", "Europe/Moscow") +ZONE_ALIAS( 921, "Zulu", "Etc/UTC") diff --git a/src/lib/tzcode/tzcode.h b/src/lib/tzcode/tzcode.h index 59bb6c94eb991d525ebf23abbcc225309bd354b3..8e752c6325414cc7b6b87a337604ab31f156ee9d 100644 --- a/src/lib/tzcode/tzcode.h +++ b/src/lib/tzcode/tzcode.h @@ -66,6 +66,13 @@ char * tnt_strptime(const char *__restrict buf, const char *__restrict fmt, struct tnt_tm *__restrict tm); +typedef struct state *timezone_t; + +/** Find installed timezone definition and load it to memory */ +timezone_t tzalloc(const char *); +/** Free loaded timezone definition */ +void tzfree(timezone_t); + #if defined(__cplusplus) } /* extern "C" */ #endif /* defined(__cplusplus) */