<div dir="ltr"><div><div><div><div><div><div><div><div>> I'm somewhat inclined to add one more hand-maintained table, zone-<span class="">now</span>.tab,<br>> which is like zone-1970.tab except using a cutoff of "<span class="">now</span>"...<br><br></div>Since time zone version 2 files end with POSIX-style strings, it may be possible to automate the generation of zone-now.tab from zone-1970.tab:<br></div>    slurp the lines of zone-1970.tab<br></div>    for each line describes a zone, get the associated POSIX-style string<br></div>    output each zone-1970.tab line, except for the second and subsequent lines associated with a particular POSIX-style string.<br><br></div>This would undoubtedly lead to some unwanted mergers, so an exception mechanism (presumably in the form of magic zone-1970.tab comments) would be needed.<br><br></div>As a start, here's a script that runs through a time zone binary directory and tells which files are associated with which POSIX-style strings:<br><br>#!/bin/perl<br><br>if ($#ARGV != 0) {<br>    die("$0: usage is $0 dir");<br>}<br><br>$dir = $ARGV[0];<br><br>chdir ($dir) || die("cannot chdir $dir");<br><br>for (`find * -type f`) {<br>    s@[\r\n]@@;<br>    $zone = $_;<br>    open(S, "<$_") || next;<br>    if (<S> =~ /^TZif2/) {<br>        $last = "";<br>        while (<S>) {<br>            $posix = $_;<br>        }<br>        $posix =~ s@[\r\n]@@;<br>        if ($zones{$posix} ne "") {<br>            $zones{$posix} .= " ";<br>        }<br>        $zones{$posix} .= $zone;<br>        ++$counts{$posix};<br>    }<br>    close(S);<br>}<br><br>for $posix (sort keys %zones) {<br>    print "\"$posix\"\t$counts{$posix}\t$zones{$posix}\r\n";<br>}<br><br></div>Below find the resullts of the above applied to a recent time zone binary directory.<br><br></div>    @dashdashado<br><br>"<+04>-4"    2    Europe/Astrakhan Europe/Ulyanovsk<br>"<+07>-7"    1    Asia/Barnaul<br>"<GMT+10>10"    1    Etc/GMT+10<br>"<GMT+11>11"    1    Etc/GMT+11<br>"<GMT+12>12"    1    Etc/GMT+12<br>"<GMT+1>1"    1    Etc/GMT+1<br>"<GMT+2>2"    1    Etc/GMT+2<br>"<GMT+3>3"    1    Etc/GMT+3<br>"<GMT+4>4"    1    Etc/GMT+4<br>"<GMT+5>5"    1    Etc/GMT+5<br>"<GMT+6>6"    1    Etc/GMT+6<br>"<GMT+7>7"    1    Etc/GMT+7<br>"<GMT+8>8"    1    Etc/GMT+8<br>"<GMT+9>9"    1    Etc/GMT+9<br>"<GMT-10>-10"    1    Etc/GMT-10<br>"<GMT-11>-11"    1    Etc/GMT-11<br>"<GMT-12>-12"    1    Etc/GMT-12<br>"<GMT-13>-13"    1    Etc/GMT-13<br>"<GMT-14>-14"    1    Etc/GMT-14<br>"<GMT-1>-1"    1    Etc/GMT-1<br>"<GMT-2>-2"    1    Etc/GMT-2<br>"<GMT-3>-3"    1    Etc/GMT-3<br>"<GMT-4>-4"    1    Etc/GMT-4<br>"<GMT-5>-5"    1    Etc/GMT-5<br>"<GMT-6>-6"    1    Etc/GMT-6<br>"<GMT-7>-7"    1    Etc/GMT-7<br>"<GMT-8>-8"    1    Etc/GMT-8<br>"<GMT-9>-9"    1    Etc/GMT-9<br>"<Local time zone must be set--see zic manual page>0"    1    Factory<br>"ACST-9:30"    2    Australia/Darwin Australia/North<br>"ACST-9:30ACDT,M10.1.0,M4.1.0/3"    4    Australia/Adelaide Australia/Broken_Hill Australia/South Australia/Yancowinna<br>"ACT5"    4    America/Eirunepe America/Porto_Acre America/Rio_Branco Brazil/Acre<br>"ACWST-8:45"    1    Australia/Eucla<br>"AEST-10"    3    Australia/Brisbane Australia/Lindeman Australia/Queensland<br>"AEST-10AEDT,M10.1.0,M4.1.0/3"    9    Australia/ACT Australia/Canberra Australia/Currie Australia/Hobart Australia/Melbourne Australia/NSW Australia/Sydney Australia/Tasmania Australia/Victoria<br>"AFT-4:30"    1    Asia/Kabul<br>"AKST9AKDT,M3.2.0,M11.1.0"    7    America/Anchorage America/Juneau America/Metlakatla America/Nome America/Sitka America/Yakutat US/Alaska<br>"ALMT-6"    1    Asia/Almaty<br>"AMT-4"    1    Asia/Yerevan<br>"AMT4"    4    America/Boa_Vista America/Manaus America/Porto_Velho Brazil/West<br>"AMT4AMST,M10.3.0/0,M2.3.0/0"    2    America/Campo_Grande America/Cuiaba<br>"ANAT-12"    1    Asia/Anadyr<br>"AQTT-5"    2    Asia/Aqtau Asia/Aqtobe<br>"ART3"    19    America/Argentina/Buenos_Aires America/Argentina/Catamarca America/Argentina/ComodRivadavia America/Argentina/Cordoba America/Argentina/Jujuy America/Argentina/La_Rioja America/Argentina/Mendoza America/Argentina/Rio_Gallegos America/Argentina/Salta America/Argentina/San_Juan America/Argentina/San_Luis America/Argentina/Tucuman America/Argentina/Ushuaia America/Buenos_Aires America/Catamarca America/Cordoba America/Jujuy America/Mendoza America/Rosario<br>"AST-3"    6    Asia/Aden Asia/Baghdad Asia/Bahrain Asia/Kuwait Asia/Qatar Asia/Riyadh<br>"AST4"    25    America/Anguilla America/Antigua America/Aruba America/Barbados America/Blanc-Sablon America/Curacao America/Dominica America/Grand_Turk America/Grenada America/Guadeloupe America/Kralendijk America/Lower_Princes America/Marigot America/Martinique America/Montserrat America/Port_of_Spain America/Puerto_Rico America/Santo_Domingo America/St_Barthelemy America/St_Kitts America/St_Lucia America/St_Thomas America/St_Vincent America/Tortola America/Virgin<br>"AST4ADT,M3.2.0,M11.1.0"    7    America/Glace_Bay America/Goose_Bay America/Halifax America/Moncton America/Thule Atlantic/Bermuda Canada/Atlantic<br>"AWST-8"    3    Antarctica/Casey Australia/Perth Australia/West<br>"AZOT1AZOST,M3.5.0/0,M10.5.0/1"    1    Atlantic/Azores<br>"AZT-4AZST,M3.5.0/4,M10.5.0/5"    1    Asia/Baku<br>"BDT-6"    2    Asia/Dacca Asia/Dhaka<br>"BNT-8"    1    Asia/Brunei<br>"BOT4"    1    America/La_Paz<br>"BRT3"    7    America/Araguaina America/Bahia America/Belem America/Fortaleza America/Maceio America/Recife America/Santarem<br>"BRT3BRST,M10.3.0/0,M2.3.0/0"    2    America/Sao_Paulo Brazil/East<br>"BST-11"    1    Pacific/Bougainville<br>"BTT-6"    2    Asia/Thimbu Asia/Thimphu<br>"CAT-2"    8    Africa/Blantyre Africa/Bujumbura Africa/Gaborone Africa/Harare Africa/Kigali Africa/Lubumbashi Africa/Lusaka Africa/Maputo<br>"CCT-6:30"    1    Indian/Cocos<br>"CET-1"    2    Africa/Algiers Africa/Tunis<br>"CET-1CEST,M3.5.0,M10.5.0/3"    36    Africa/Ceuta Arctic/Longyearbyen Atlantic/Jan_Mayen CET Europe/Amsterdam Europe/Andorra Europe/Belgrade Europe/Berlin Europe/Bratislava Europe/Brussels Europe/Budapest Europe/Busingen Europe/Copenhagen Europe/Gibraltar Europe/Ljubljana Europe/Luxembourg Europe/Madrid Europe/Malta Europe/Monaco Europe/Oslo Europe/Paris Europe/Podgorica Europe/Prague 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 Poland<br>"CHAST-12:45CHADT,M9.5.0/2:45,M4.1.0/3:45"    2    NZ-CHAT Pacific/Chatham<br>"CHOT-8CHOST,M3.5.6,M9.5.6/0"    1    Asia/Choibalsan<br>"CHUT-10"    3    Pacific/Chuuk Pacific/Truk Pacific/Yap<br>"CKT10"    1    Pacific/Rarotonga<br>"CLT3"    3    America/Santiago Antarctica/Palmer Chile/Continental<br>"COT5"    1    America/Bogota<br>"CST-8"    9    Asia/Chongqing Asia/Chungking Asia/Harbin Asia/Macao Asia/Macau Asia/Shanghai Asia/Taipei PRC ROC<br>"CST5CDT,M3.2.0/0,M11.1.0/1"    2    America/Havana Cuba<br>"CST6"    10    America/Belize America/Costa_Rica America/El_Salvador America/Guatemala America/Managua America/Regina America/Swift_Current America/Tegucigalpa Canada/East-Saskatchewan Canada/Saskatchewan<br>"CST6CDT,M3.2.0,M11.1.0"    17    America/Chicago America/Indiana/Knox America/Indiana/Tell_City America/Knox_IN America/Matamoros America/Menominee America/North_Dakota/Beulah America/North_Dakota/Center America/North_Dakota/New_Salem America/Rainy_River America/Rankin_Inlet America/Resolute America/Winnipeg Canada/Central CST6CDT US/Central US/Indiana-Starke<br>"CST6CDT,M4.1.0,M10.5.0"    5    America/Bahia_Banderas America/Merida America/Mexico_City America/Monterrey Mexico/General<br>"CVT1"    1    Atlantic/Cape_Verde<br>"CXT-7"    1    Indian/Christmas<br>"ChST-10"    2    Pacific/Guam Pacific/Saipan<br>"DAVT-7"    1    Antarctica/Davis<br>"DDUT-10"    1    Antarctica/DumontDUrville<br>"EAST5"    2    Chile/EasterIsland Pacific/Easter<br>"EAT-3"    13    Africa/Addis_Ababa Africa/Asmara Africa/Asmera Africa/Dar_es_Salaam Africa/Djibouti Africa/Juba Africa/Kampala Africa/Khartoum Africa/Mogadishu Africa/Nairobi Indian/Antananarivo Indian/Comoro Indian/Mayotte<br>"ECT5"    1    America/Guayaquil<br>"EET-2"    5    Africa/Cairo Africa/Tripoli Egypt Europe/Kaliningrad Libya<br>"EET-2EEST,M3.5.0,M10.5.0/3"    2    Europe/Chisinau Europe/Tiraspol<br>"EET-2EEST,M3.5.0/0,M10.5.0/0"    1    Asia/Beirut<br>"EET-2EEST,M3.5.0/3,M10.5.0/4"    17    Asia/Istanbul Asia/Nicosia EET Europe/Athens Europe/Bucharest Europe/Helsinki Europe/Istanbul Europe/Kiev Europe/Mariehamn Europe/Nicosia Europe/Riga Europe/Sofia Europe/Tallinn Europe/Uzhgorod Europe/Vilnius Europe/Zaporozhye Turkey<br>"EET-2EEST,M3.5.4/24,M10.5.5/1"    1    Asia/Amman<br>"EET-2EEST,M3.5.5/0,M10.5.5/0"    1    Asia/Damascus<br>"EGT1EGST,M3.5.0/0,M10.5.0/1"    1    America/Scoresbysund<br>"EST5"    8    America/Atikokan America/Cancun America/Cayman America/Coral_Harbour America/Jamaica America/Panama EST Jamaica<br>"EST5EDT,M3.2.0,M11.1.0"    27    America/Detroit America/Fort_Wayne America/Indiana/Indianapolis America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Indiana/Vincennes America/Indiana/Winamac America/Indianapolis America/Iqaluit America/Kentucky/Louisville America/Kentucky/Monticello America/Louisville America/Montreal America/Nassau America/New_York America/Nipigon America/Pangnirtung America/Port-au-Prince America/Thunder_Bay America/Toronto Canada/Eastern EST5EDT posixrules US/East-Indiana US/Eastern US/Michigan<br>"FJT-12FJST,M11.1.0,M1.3.0/3"    1    Pacific/Fiji<br>"FKST3"    1    Atlantic/Stanley<br>"FNT2"    2    America/Noronha Brazil/DeNoronha<br>"GALT6"    1    Pacific/Galapagos<br>"GAMT9"    1    Pacific/Gambier<br>"GET-4"    1    Asia/Tbilisi<br>"GFT3"    1    America/Cayenne<br>"GILT-12"    1    Pacific/Tarawa<br>"GMT0"    29    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 America/Danmarkshavn Atlantic/Reykjavik Atlantic/St_Helena Etc/GMT Etc/GMT+0 Etc/GMT-0 Etc/GMT0 Etc/Greenwich GMT GMT+0 GMT0 GMT-0 Greenwich Iceland localtime<br>"GMT0BST,M3.5.0/1,M10.5.0"    7    Europe/Belfast Europe/Guernsey Europe/Isle_of_Man Europe/Jersey Europe/London GB GB-Eire<br>"GMT0IST,M3.5.0/1,M10.5.0"    2    Eire Europe/Dublin<br>"GST-4"    2    Asia/Dubai Asia/Muscat<br>"GST2"    1    Atlantic/South_Georgia<br>"GYT4"    1    America/Guyana<br>"HKT-8"    2    Asia/Hong_Kong Hongkong<br>"HOVT-7HOVST,M3.5.6,M9.5.6/0"    1    Asia/Hovd<br>"HST10"    4    HST Pacific/Honolulu Pacific/Johnston US/Hawaii<br>"HST10HDT,M3.2.0,M11.1.0"    3    America/Adak America/Atka US/Aleutian<br>"ICT-7"    5    Asia/Bangkok Asia/Ho_Chi_Minh Asia/Phnom_Penh Asia/Saigon Asia/Vientiane<br>"IOT-6"    1    Indian/Chagos<br>"IRKT-8"    1    Asia/Irkutsk<br>"IRST-3:30IRDT,J80/0,J264/0"    2    Asia/Tehran Iran<br>"IST-5:30"    3    Asia/Calcutta Asia/Colombo Asia/Kolkata<br>"JST-9"    2    Asia/Tokyo Japan<br>"KGT-6"    1    Asia/Bishkek<br>"KOST-11"    1    Pacific/Kosrae<br>"KRAT-7"    2    Asia/Krasnoyarsk Asia/Novokuznetsk<br>"KST-8:30"    1    Asia/Pyongyang<br>"KST-9"    2    Asia/Seoul ROK<br>"LHST-10:30LHDT-11,M10.1.0,M4.1.0"    2    Australia/LHI Australia/Lord_Howe<br>"LINT-14"    1    Pacific/Kiritimati<br>"MAGT-10"    1    Asia/Magadan<br>"MART9:30"    1    Pacific/Marquesas<br>"MAWT-5"    1    Antarctica/Mawson<br>"MET-1MEST,M3.5.0,M10.5.0/3"    1    MET<br>"MHT-12"    3    Kwajalein Pacific/Kwajalein Pacific/Majuro<br>"MIST-11"    1    Antarctica/Macquarie<br>"MMT-6:30"    1    Asia/Rangoon<br>"MSK-3"    5    Europe/Minsk Europe/Moscow Europe/Simferopol Europe/Volgograd W-SU<br>"MST7"    7    America/Creston America/Dawson_Creek America/Fort_Nelson America/Hermosillo America/Phoenix MST US/Arizona<br>"MST7MDT,M3.2.0,M11.1.0"    12    America/Boise America/Cambridge_Bay America/Denver America/Edmonton America/Inuvik America/Ojinaga America/Shiprock America/Yellowknife Canada/Mountain MST7MDT Navajo US/Mountain<br>"MST7MDT,M4.1.0,M10.5.0"    3    America/Chihuahua America/Mazatlan Mexico/BajaSur<br>"MUT-4"    1    Indian/Mauritius<br>"MVT-5"    1    Indian/Maldives<br>"MYT-8"    2    Asia/Kuala_Lumpur Asia/Kuching<br>"NCT-11"    1    Pacific/Noumea<br>"NFT-11"    1    Pacific/Norfolk<br>"NOVT-6"    1    Asia/Novosibirsk<br>"NPT-5:45"    2    Asia/Kathmandu Asia/Katmandu<br>"NRT-12"    1    Pacific/Nauru<br>"NST3:30NDT,M3.2.0,M11.1.0"    2    America/St_Johns Canada/Newfoundland<br>"NUT11"    1    Pacific/Niue<br>"NZST-12NZDT,M9.5.0,M4.1.0/3"    4    Antarctica/McMurdo Antarctica/South_Pole NZ Pacific/Auckland<br>"OMST-6"    1    Asia/Omsk<br>"ORAT-5"    1    Asia/Oral<br>"PET5"    1    America/Lima<br>"PETT-12"    1    Asia/Kamchatka<br>"PGT-10"    1    Pacific/Port_Moresby<br>"PHOT-13"    1    Pacific/Enderbury<br>"PHT-8"    1    Asia/Manila<br>"PKT-5"    1    Asia/Karachi<br>"PMST3PMDT,M3.2.0,M11.1.0"    1    America/Miquelon<br>"PONT-11"    2    Pacific/Pohnpei Pacific/Ponape<br>"PST8"    1    Pacific/Pitcairn<br>"PST8PDT,M3.2.0,M11.1.0"    13    America/Dawson America/Ensenada America/Los_Angeles America/Santa_Isabel America/Tijuana America/Vancouver America/Whitehorse Canada/Pacific Canada/Yukon Mexico/BajaNorte PST8PDT US/Pacific US/Pacific-New<br>"PWT-9"    1    Pacific/Palau<br>"PYT4PYST,M10.1.0/0,M3.4.0/0"    1    America/Asuncion<br>"QYZT-6"    1    Asia/Qyzylorda<br>"RET-4"    1    Indian/Reunion<br>"ROTT3"    1    Antarctica/Rothera<br>"SAKT-11"    1    Asia/Sakhalin<br>"SAMT-4"    1    Europe/Samara<br>"SAST-2"    3    Africa/Johannesburg Africa/Maseru Africa/Mbabane<br>"SBT-11"    1    Pacific/Guadalcanal<br>"SCT-4"    1    Indian/Mahe<br>"SGT-8"    2    Asia/Singapore Singapore<br>"SRET-11"    1    Asia/Srednekolymsk<br>"SRT3"    1    America/Paramaribo<br>"SST11"    4    Pacific/Midway Pacific/Pago_Pago Pacific/Samoa US/Samoa<br>"SYOT-3"    1    Antarctica/Syowa<br>"TAHT10"    1    Pacific/Tahiti<br>"TFT-5"    1    Indian/Kerguelen<br>"TJT-5"    1    Asia/Dushanbe<br>"TKT-13"    1    Pacific/Fakaofo<br>"TLT-9"    1    Asia/Dili<br>"TMT-5"    2    Asia/Ashgabat Asia/Ashkhabad<br>"TOT-13"    1    Pacific/Tongatapu<br>"TVT-12"    1    Pacific/Funafuti<br>"UCT0"    2    Etc/UCT UCT<br>"ULAT-8ULAST,M3.5.6,M9.5.6/0"    2    Asia/Ulaanbaatar Asia/Ulan_Bator<br>"UTC0"    6    Etc/Universal Etc/UTC Etc/Zulu Universal UTC Zulu<br>"UTC0CEST-2,M3.5.0/1,M10.5.0/3"    1    Antarctica/Troll<br>"UYT3"    1    America/Montevideo<br>"UZT-5"    2    Asia/Samarkand Asia/Tashkent<br>"VET4:30"    1    America/Caracas<br>"VLAT-10"    2    Asia/Ust-Nera Asia/Vladivostok<br>"VOST-6"    1    Antarctica/Vostok<br>"VUT-11"    1    Pacific/Efate<br>"WAKT-12"    1    Pacific/Wake<br>"WAT-1"    11    Africa/Bangui Africa/Brazzaville Africa/Douala Africa/Kinshasa Africa/Lagos Africa/Libreville Africa/Luanda Africa/Malabo Africa/Ndjamena Africa/Niamey Africa/Porto-Novo<br>"WAT-1WAST,M9.1.0,M4.1.0"    1    Africa/Windhoek<br>"WET0WEST,M3.5.0,M10.5.0/3"    2    Africa/Casablanca Africa/El_Aaiun<br>"WET0WEST,M3.5.0/1,M10.5.0"    7    Atlantic/Canary Atlantic/Faeroe Atlantic/Faroe Atlantic/Madeira Europe/Lisbon Portugal WET<br>"WFT-12"    1    Pacific/Wallis<br>"WIB-7"    2    Asia/Jakarta Asia/Pontianak<br>"WIT-9"    1    Asia/Jayapura<br>"WITA-8"    2    Asia/Makassar Asia/Ujung_Pandang<br>"WSST-13WSDT,M9.5.0/3,M4.1.0/4"    1    Pacific/Apia<br>"XJT-6"    2    Asia/Kashgar Asia/Urumqi<br>"YAKT-9"    3    Asia/Chita Asia/Khandyga Asia/Yakutsk<br>"YEKT-5"    1    Asia/Yekaterinburg<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Apr 18, 2016 at 12:52 PM, Paul Eggert <span dir="ltr"><<a href="mailto:eggert@cs.ucla.edu" target="_blank">eggert@cs.ucla.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 04/18/2016 09:04 AM, Matt Johnson wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
To my knowledge, there is no project that maintains localized translations for comments in zone.tab. Not even CLDR.<br>
</blockquote>
<br></span>
I don't know of any either. Perhaps CLDR could take this on too?<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I've computed a "threshold date" for each zone, where the zones are identical from the threshold date forward. That date can be set by the developer of the application to limit the subset of zones to choose from without imposing too much opinion. I'm curious if anyone else has explored this space before, or used similar techniques?<br>
</blockquote>
<br></span>
I did something along those lines, but gave up on it as being too hard to automate well. For example, if the threshold is 2001-01-01 00:00:00 UTC, then we should merge America/Boise, America/Denver, America/Edmonton, and America/Yellowknife. How does the automated procedure choose the ID of the merged region? It should be America/Denver, as that has the greatest population, but how is the population recorded and what happens as population changes? Furthermore, how does the automated procedure derive the comment for the merged region?  And how would CLDR translate this automatically-derived comment?<br>
<br>
For this reason I'm somewhat inclined to add one more hand-maintained table, zone-now.tab, which is like zone-1970.tab except using a cutoff of "now" (a deliberatly moving target) instead of a cutoff of 1970. That should be good enough for applications that don't need historical time stamps, and will be easier to automate and CLDRize.<br>
<br>
</blockquote></div><br></div>