<div dir="ltr">Fixing up a small typo in the comments.<div><br></div><div>One drawback of this approach is that such lines will need to be merged into the appropriate long-term zonenow entry after the date listed.<br><div><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">--<br>Tim Parenti<br></div></div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 19 Dec 2023 at 02:30, Paul Eggert via tz <<a href="mailto:tz@iana.org">tz@iana.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">* Makefile (ZONETABLES, VERSION_DEPS): Add zonenow.tab.<br>
(CHECK_NOW_TIMESTAMP, CHECK_NOW_FUTURE_YEARS, CHECK_NOW_FUTURE_SECS):<br>
New macros.<br>
(check_now): New target rule.<br>
(check_mild): Depend on it.<br>
* NEWS: Mention this new feature.<br>
* checknow.awk, zonenow.tab: New files.<br>
* checktab.awk: Adjust (i.e., loosen) checks for zonenow.tab.<br>
* tzselect.ksh (TZ_ZONETABTYPE_TABLE, TZ_ZONENOW_TABLE):<br>
New vars, so that the code can switch back and for easily between<br>
zone1970.tab and zonenow.tab.<br>
(TZ_ZONE_TABLE): Set to one of those two vars, depending on user.<br>
Let users choose ‘now’ if they care only about timestamps from now on.<br>
Narrow ‘regions’ based on ‘now’ selection, if possible (which it<br>
always is, with the current data).<br>
---<br>
 Makefile     |  31 +++++-<br>
 NEWS         |  11 ++<br>
 checknow.awk |  53 +++++++++<br>
 checktab.awk |   7 +-<br>
 tzselect.ksh |  49 +++++++--<br>
 zonenow.tab  | 298 +++++++++++++++++++++++++++++++++++++++++++++++++++<br>
 6 files changed, 435 insertions(+), 14 deletions(-)<br>
 create mode 100644 checknow.awk<br>
 create mode 100644 zonenow.tab<br>
<br>
diff --git a/Makefile b/Makefile<br>
index a6051531..f473af67 100644<br>
--- a/Makefile<br>
+++ b/Makefile<br>
@@ -580,7 +580,7 @@ YDATA=              $(PRIMARY_YDATA) etcetera<br>
 NDATA=         factory<br>
 TDATA_TO_CHECK=        $(YDATA) $(NDATA) backward<br>
 TDATA=         $(YDATA) $(NDATA) $(BACKWARD)<br>
-ZONETABLES=    zone1970.tab zone.tab<br>
+ZONETABLES=    zone.tab zone1970.tab zonenow.tab<br>
 TABDATA=       iso3166.tab $(TZDATA_TEXT) $(ZONETABLES)<br>
 LEAP_DEPS=     leapseconds.awk leap-seconds.list<br>
 TZDATA_ZI_DEPS=        ziguard.awk zishrink.awk version $(TDATA) \<br>
@@ -619,7 +619,7 @@ VERSION_DEPS= \<br>
                tzfile.5 tzfile.h tzselect.8 tzselect.ksh \<br>
                workman.sh zdump.8 zdump.c zic.8 zic.c \<br>
                ziguard.awk zishrink.awk \<br>
-               zone.tab zone1970.tab<br>
+               zone.tab zone1970.tab zonenow.tab<br>
<br>
 all:           tzselect zic zdump libtz.a $(TABDATA) \<br>
                  vanguard.zi main.zi rearguard.zi<br>
@@ -825,7 +825,8 @@ tzselect:   tzselect.ksh version<br>
<br>
 check: check_back check_mild<br>
 check_mild:    check_character_set check_white_space check_links \<br>
-                 check_name_lengths check_slashed_abbrs check_sorted \<br>
+                 check_name_lengths check_now \<br>
+                 check_slashed_abbrs check_sorted \<br>
                  check_tables check_web check_ziguard check_zishrink check_tzs<br>
<br>
 check_character_set: $(ENCHILADA)<br>
@@ -893,7 +894,29 @@ check_links:       checklinks.awk tzdata.zi<br>
                  -f checklinks.awk tzdata.zi<br>
                touch $@<br>
<br>
-check_tables:  checktab.awk $(YDATA) backward $(ZONETABLES)<br>
+# Check timestamps from now through 28 years from now, to make sure<br>
+# that zonenow.tab contains all sequences of planned timestamps,<br>
+# without any duplicate sequences.  In theory this might require<br>
+# 2800 years but that would take a long time to check.<br>
+CHECK_NOW_TIMESTAMP = `./date +%s`<br>
+CHECK_NOW_FUTURE_YEARS = 28<br>
+CHECK_NOW_FUTURE_SECS = $(CHECK_NOW_FUTURE_YEARS) '*' 366 '*' 24 '*' 60 '*' 60<br>
+check_now:     checknow.awk date tzdata.zi zdump zic zone1970.tab zonenow.tab<br>
+               rm -fr $@.dir<br>
+               mkdir $@.dir<br>
+               ./zic -d $@.dir tzdata.zi<br>
+               now=$(CHECK_NOW_TIMESTAMP) && \<br>
+                 future=`expr $(CHECK_NOW_FUTURE_SECS) + $$now` && \<br>
+                 ./zdump -i -t $$now,$$future \<br>
+                    $$(find $$PWD/$@.dir/????*/ -type f) \<br>
+                    >$@.dir/zdump.tab<br>
+               $(AWK) \<br>
+                 -v zdump_table=$@.dir/zdump.tab \<br>
+                 -f checknow.awk zonenow.tab<br>
+               rm -fr $@.dir<br>
+               touch $@<br>
+<br>
+check_tables:  checktab.awk $(YDATA) backward zone.tab zone1970.tab<br>
                for tab in $(ZONETABLES); do \<br>
                  test "$$tab" = zone.tab && links='$(BACKWARD)' || links=''; \<br>
                  $(AWK) -f checktab.awk -v zone_table=$$tab $(YDATA) $$links \<br>
diff --git a/NEWS b/NEWS<br>
index f2d0bc3c..43070aae 100644<br>
--- a/NEWS<br>
+++ b/NEWS<br>
@@ -5,6 +5,7 @@ Unreleased, experimental changes<br>
   Briefly:<br>
     Ittoqqortoormiit, Greenland changes time zones on 2024-03-31.<br>
     Code and data fixes for Palestine timestamps starting in 2072.<br>
+    A new data file zonenow.tab for timestamps starting now.<br>
<br>
   Changes to future timestamps<br>
<br>
@@ -25,6 +26,13 @@ Unreleased, experimental changes<br>
     This does not affect UTC offsets, only the tm_isdst flag.<br>
     (Thanks to Thomas M. Steenholdt.)<br>
<br>
+  New data file<br>
+<br>
+    A new data file zonenow.tab helps configure applications that use<br>
+    timestamps dated from now on.  This simplifies configuration,<br>
+    since users choose from a smaller Zone set.  The file's format is<br>
+    experimental and subject to change.<br>
+<br>
   Changes to code<br>
<br>
     localtime.c no longer mishandles TZif files that contain a single<br>
@@ -32,6 +40,9 @@ Unreleased, experimental changes<br>
     DST was in effect before the transition too.  (Thanks to Alois<br>
     Treindl for debugging help.)<br>
<br>
+    tzselect now optionally reads zonenow.tab, to simplify when<br>
+    configuring only for timestamps dated from now on.<br>
+<br>
     tzselect no longer creates temporary files.<br>
<br>
     tzselect no longer mishandles the following:<br>
diff --git a/checknow.awk b/checknow.awk<br>
new file mode 100644<br>
index 00000000..51ee998f<br>
--- /dev/null<br>
+++ b/checknow.awk<br>
@@ -0,0 +1,53 @@<br>
+# Check zonenow.tab for consistency with primary data.<br>
+<br>
+# Contributed by Paul Eggert.  This file is in the public domain.<br>
+<br>
+function record_zone(zone, data) {<br>
+  if (zone) {<br>
+    zone_data[zone] = data<br>
+    zones[data] = zones[data] " " zone<br>
+  }<br>
+}<br>
+<br>
+BEGIN {<br>
+  while (getline <zdump_table) {<br>
+    if ($0 ~ /^TZ/) {<br>
+      record_zone(zone, data)<br>
+      zone = $0<br>
+      sub(/.*\.dir\//, "", zone)<br>
+      sub(/"/, "", zone)<br>
+      data = ""<br>
+    } else if ($0 ~ /./)<br>
+      data = data $0 "\n"<br>
+  }<br>
+  record_zone(zone, data)<br>
+  FS = "\t"<br>
+}<br>
+<br>
+/^[^#]/ {<br>
+  zone = $3<br>
+  data = zone_data[zone]<br>
+  if (!data) {<br>
+    printf "%s: no data\n"<br>
+    status = 1<br>
+  } else {<br>
+    zone2 = zonenow[data]<br>
+    if (zone2) {<br>
+      printf "zones %s and %s identical from now on\n", zone, zone2<br>
+      status = 1<br>
+    } else<br>
+      zonenow[data] = zone<br>
+  }<br>
+}<br>
+<br>
+END {<br>
+ for (zone in zone_data) {<br>
+    data = zone_data[zone]<br>
+    if (!zonenow[data]) {<br>
+      printf "checknow.tab should have one of:%s\n", zones[data]<br>
+      zonenow[data] = zone # This suppresses duplicate diagnostics.<br>
+      status = 1<br>
+    }<br>
+ }<br>
+ exit status<br>
+}<br>
diff --git a/checktab.awk b/checktab.awk<br>
index 2dbf485f..9a26e465 100644<br>
--- a/checktab.awk<br>
+++ b/checktab.awk<br>
@@ -83,7 +83,7 @@ BEGIN {<br>
                    cc = cca[i]<br>
                    if (cc2name[cc]) {<br>
                        cc_used[cc]++<br>
-                   } else {<br>
+                   } else if (! (cc == "XX" && zone_table == "zonenow.tab")) {<br>
                        printf "%s:%d: %s: unknown country code\n", \<br>
                                zone_table, zone_NR, cc >>"/dev/stderr"<br>
                        status = 1<br>
@@ -110,7 +110,7 @@ BEGIN {<br>
              used_max_cc = cc<br>
            }<br>
          }<br>
-         if (used_max <= 1 && comments) {<br>
+         if (used_max <= 1 && comments && zone_table != "zonenow.tab") {<br>
            printf "%s:%d: unnecessary comment '%s'\n", \<br>
              zone_table, i, comments \<br>
              >>"/dev/stderr"<br>
@@ -149,7 +149,8 @@ $1 ~ /^#/ { next }<br>
                if ($3 ~ /%/) rulePercentUsed[$2] = 1<br>
        }<br>
        if (tz && tz ~ /\// && tz !~ /^Etc\//) {<br>
-               if (!tztab[tz] && FILENAME != "backward") {<br>
+               if (!tztab[tz] && FILENAME != "backward" \<br>
+                   && zone_table != "zonenow.tab") {<br>
                        printf "%s: no data for '%s'\n", zone_table, tz \<br>
                                >>"/dev/stderr"<br>
                        status = 1<br>
diff --git a/tzselect.ksh b/tzselect.ksh<br>
index f894bb56..70bda9c0 100644<br>
--- a/tzselect.ksh<br>
+++ b/tzselect.ksh<br>
@@ -196,7 +196,8 @@ read_file() {<br>
   }<br>
 }<br>
 read_file TZ_COUNTRY_TABLE "$TZDIR/iso3166.tab"<br>
-read_file TZ_ZONE_TABLE "$TZDIR/$zonetabtype.tab"<br>
+read_file TZ_ZONETABTYPE_TABLE "$TZDIR/$zonetabtype.tab"<br>
+TZ_ZONENOW_TABLE=<br>
<br>
 newline='<br>
 '<br>
@@ -385,6 +386,7 @@ while<br>
   country_result=<br>
   region=<br>
   time=<br>
+  TZ_ZONE_TABLE=$TZ_ZONETABTYPE_TABLE<br>
<br>
   case $coord in<br>
   ?*)<br>
@@ -393,7 +395,8 @@ while<br>
<br>
     # Ask the user for continent or ocean.<br>
<br>
-    echo >&2 'Please select a continent, ocean, "coord", "TZ", or "time".'<br>
+    echo >&2 \<br>
+      'Please select a continent, ocean, "coord", "TZ", "time", or "now".'<br>
<br>
     quoted_continents=`<br>
       $AWK '<br>
@@ -406,10 +409,10 @@ while<br>
          printf "'\''%s'\''\n", entry<br>
        }<br>
        BEGIN {<br>
-         TZ_ZONE_TABLE = substr(ARGV[1], 2)<br>
+         TZ_ZONETABTYPE_TABLE = substr(ARGV[1], 2)<br>
          ARGV[1] = ""<br>
          FS = "\t"<br>
-         nlines = split(TZ_ZONE_TABLE, line, /\n/)<br>
+         nlines = split(TZ_ZONETABTYPE_TABLE, line, /\n/)<br>
          for (i = 1; i <= nlines; i++) {<br>
            $0 = line[i]<br>
            if ($0 ~ /^[^#]/)<br>
@@ -421,7 +424,7 @@ while<br>
            }<br>
          }<br>
        }<br>
-      ' ="$TZ_ZONE_TABLE" |<br>
+      ' ="$TZ_ZONETABTYPE_TABLE" |<br>
       sort -u |<br>
       tr '\n' ' '<br>
       echo ''<br>
@@ -431,12 +434,19 @@ while<br>
       doselect '"$quoted_continents"' \<br>
        "coord - I want to use geographical coordinates." \<br>
        "TZ - I want to specify the timezone using the POSIX TZ format." \<br>
-       "time - I know local time already."<br>
+       "time - I know local time already." \<br>
+       "now - Like \"time\", but configure only for timestamps from now on."<br>
       continent=$select_result<br>
       case $continent in<br>
       Americas) continent=America;;<br>
       *" "*)    continent=`expr "$continent" : '\''\([^ ]*\)'\''`<br>
       esac<br>
+      case $zonetabtype,$continent in<br>
+      zonenow,*) ;;<br>
+      *,now)<br>
+       ${TZ_ZONENOW_TABLE:+:} read_file TZ_ZONENOW_TABLE "$TZDIR/zonenow.tab"<br>
+       TZ_ZONE_TABLE=$TZ_ZONENOW_TABLE<br>
+      esac<br>
     '<br>
   esac<br>
<br>
@@ -529,7 +539,7 @@ while<br>
       `;;<br>
     *)<br>
       case $continent in<br>
-      time)<br>
+      now|time)<br>
        minute_format='%a %b %d %H:%M'<br>
        old_minute=`TZ=UTC0 date +"$minute_format"`<br>
        for i in 1 2 3<br>
@@ -609,6 +619,31 @@ while<br>
          ="$continent_re" ="$TZ_COUNTRY_TABLE" ="$zone_table" |<br>
        sort -f<br>
       `<br>
+      # If all zone table entries have comments, and there are<br>
+      # at most 22 entries, asked based on those comments.<br>
+      # This fits the prompt onto old-fashioned 24-line screens.<br>
+      regions=`<br>
+       $AWK '<br>
+         BEGIN {<br>
+           TZ_ZONE_TABLE = substr(ARGV[1], 2)<br>
+           ARGV[1] = ""<br>
+           FS = "\t"<br>
+           nlines = split(TZ_ZONE_TABLE, line, /\n/)<br>
+           for (i = 1; i <= nlines; i++) {<br>
+             $0 = line[i]<br>
+             if ($0 ~ /^[^#]/ && !missing_comment) {<br>
+               if ($4)<br>
+                 comment[++inlines] = $4<br>
+               else<br>
+                 missing_comment = 1<br>
+             }<br>
+           }<br>
+           if (!missing_comment && inlines <= 22)<br>
+             for (i = 1; i <= inlines; i++)<br>
+               print comment[i]<br>
+         }<br>
+       ' ="$zone_table"<br>
+      `<br>
<br>
       # If there's more than one country, ask the user which one.<br>
       case $countries in<br>
diff --git a/zonenow.tab b/zonenow.tab<br>
new file mode 100644<br>
index 00000000..b1c1f332<br>
--- /dev/null<br>
+++ b/zonenow.tab<br>
@@ -0,0 +1,298 @@<br>
+# tzdb timezone descriptions, for users who do not care about old timestamps<br>
+#<br>
+# This file is in the public domain.<br>
+#<br>
+# From Paul Eggert (2023-12-18):<br>
+# This file contains a table where each row stands for a timezone<br>
+# where civil timestamps are predicted to agree from now on.<br>
+# This file is like zone1970.tab (see zone1970.tab's coments),<br>
+# but with the following changes:<br>
+#<br>
+# 1.  Each timezone corresponds to a set of clocks that are planned<br>
+#     to agree from now on.  This is a larger set of clocks than in<br>
+#     zone1970.tab, where each timezone's clocks must agree from 1970 on.<br>
+# 2.  The first column is irrelevant and ignored.<br>
+# 3.  The table is sorted in a different way:<br>
+#     first by standard time UTC offset;<br>
+#     then, if DST is used, by daylight saving UTC offset;<br>
+#     then by time zone abbreviation.<br>
+#<br>
+# The format of this table is experimental, and may change in future versions.<br>
+#<br>
+# This table is intended as an aid for users, to help them select timezones<br>
+# appropriate for their practical needs.  It is not intended to take or<br>
+# endorse any position on legal or territorial claims.<br>
+#<br>
+#XX    coordinates     TZ      comments<br>
+#<br>
+# -11 - SST<br>
+XX     -1416-17042     Pacific/Pago_Pago       Midway; Samoa ("SST")<br>
+#<br>
+# -11<br>
+XX     -1901-16955     Pacific/Niue    Niue<br>
+#<br>
+# -10 - HST<br>
+XX     +211825-1575130 Pacific/Honolulu        Hawaii ("HST")<br>
+#<br>
+# -10<br>
+XX     -1732-14934     Pacific/Tahiti  Tahiti; Cook Islands<br>
+#<br>
+# -10/-09 - HST / HDT (North America DST)<br>
+XX     +515248-1763929 America/Adak    western Aleutians in Alaska ("HST/HDT")<br>
+#<br>
+# -09:30<br>
+XX     -0900-13930     Pacific/Marquesas       Marquesas<br>
+#<br>
+# -09<br>
+XX     -2308-13457     Pacific/Gambier Gambier<br>
+#<br>
+# -09/-08 - AKST/AKDT (North America DST)<br>
+XX     +611305-1495401 America/Anchorage       most of Alaska ("AKST/AKDT")<br>
+#<br>
+# -08<br>
+XX     -2504-13005     Pacific/Pitcairn        Pitcairn<br>
+#<br>
+# -08/-07 - PST/PDT (North America DST)<br>
+XX     +340308-1181434 America/Los_Angeles     Pacific ("PST/PDT") - US & Canada; Mexico near US border<br>
+#<br>
+# -07 - MST<br>
+XX     +332654-1120424 America/Phoenix Mountain Standard ("MST") - Arizona; western Mexico; Yukon<br>
+#<br>
+# -07/-06 - MST/MDT (North America DST)<br>
+XX     +394421-1045903 America/Denver  Mountain ("MST/MDT") - US & Canada; Mexico near US border<br>
+#<br>
+# -06<br>
+XX     -0054-08936     Pacific/Galapagos       Galápagos<br>
+#<br>
+# -06 - CST<br>
+XX     +1924-09909     America/Mexico_City     Central Standard ("CST") - Saskatchewan; central Mexico; Central America<br>
+#<br>
+# -06/-05 (Chile DST)<br>
+XX     -2709-10926     Pacific/Easter  Easter Island<br>
+#<br>
+# -06/-05 - CST/CDT (North America DST)<br>
+XX     +415100-0873900 America/Chicago Central ("CST/CDT") - US & Canada; Mexico near US border<br>
+#<br>
+# -05<br>
+XX     -1203-07703     America/Lima    eastern South America<br>
+#<br>
+# -05 - EST<br>
+XX     +175805-0764736 America/Jamaica Eastern Standard ("EST") - Caymans; Jamaica; eastern Mexico; Panama<br>
+#<br>
+# -05/-04 - CST/CDT (Cuba DST)<br>
+XX     +2308-08222     America/Havana  Cuba<br>
+#<br>
+# -05/-04 - EST/EDT (North America DST)<br>
+XX     +404251-0740023 America/New_York        Eastern ("EST/EDT") - US & Canada<br>
+#<br>
+# -04<br>
+XX     +1030-06656     America/Caracas western South America<br>
+#<br>
+# -04 - AST<br>
+XX     +1828-06954     America/Santo_Domingo   Atlantic Standard ("AST") - eastern Caribbean<br>
+#<br>
+# -04/-03 (Chile DST)<br>
+XX     -3327-07040     America/Santiago        most of Chile<br>
+#<br>
+# -04/-03 (Paraguay DST)<br>
+XX     -2516-05740     America/Asuncion        Paraguay<br>
+#<br>
+# -04/-03 - AST/ADT (North America DST)<br>
+XX     +4439-06336     America/Halifax Atlantic ("AST/ADT") - Canada; Bermuda<br>
+#<br>
+# -03:30/-02:30 - NST/NDT (North America DST)<br>
+XX     +4734-05243     America/St_Johns        Newfoundland ("NST/NDT")<br>
+#<br>
+# -03<br>
+XX     -2332-04637     America/Sao_Paulo       eastern South America<br>
+#<br>
+# -03/-02 (North America DST)<br>
+XX     +4703-05620     America/Miquelon        St Pierre & Miquelon<br>
+#<br>
+# -02<br>
+XX     -0351-03225     America/Noronha Fernando de Noronha; South Georgia<br>
+#<br>
+# -02/-01 (EU DST)<br>
+XX     +6411-05144     America/Nuuk    most of Greenland<br>
+#<br>
+# -01<br>
+XX     +1455-02331     Atlantic/Cape_Verde     Cape Verde<br>
+#<br>
+# -01/+00 (EU DST)<br>
+XX     +3744-02540     Atlantic/Azores Azores<br>
+# -01/+00 (EU DST) until 2024-03-01; then -02/-01 (EU DST)<br>
+XX     +7029-02158     America/Scoresbysund    Ittoqqortoormiit<br>
+#<br>
+# +00 - GMT<br>
+XX     +0519-00402     Africa/Abidjan  far western Africa; Iceland ("GMT")<br>
+#<br>
+# +00/+01 - GMT/BST (EU DST)<br>
+XX     +513030-0000731 Europe/London   United Kingdom ("GMT/BST")<br>
+#<br>
+# +00/+01 - WET/WEST (EU DST)<br>
+XX     +3843-00908     Europe/Lisbon   western Europe ("WET/WEST")<br>
+#<br>
+# +00/+01 - Troll DST<br>
+XX     -720041+0023206 Antarctica/Troll        Troll Station in Antarctica<br>
+#<br>
+# +01 - CET<br>
+XX     +3647+00303     Africa/Algiers  Algeria, Tunisia ("CET")<br>
+#<br>
+# +01 - WAT<br>
+XX     +0627+00324     Africa/Lagos    western Africa ("WAT")<br>
+#<br>
+# +01/+00 - IST/GMT (EU DST in reverse)<br>
+XX     +5320-00615     Europe/Dublin   Ireland ("IST/GMT")<br>
+#<br>
+# +01/+00 - (Morocco DST)<br>
+XX     +3339-00735     Africa/Casablanca       Morocco<br>
+#<br>
+# +01/+02 - CET/CEST (EU DST)<br>
+XX     +4852+00220     Europe/Paris    central Europe ("CET/CEST")<br>
+#<br>
+# +02 - CAT<br>
+XX     -2558+03235     Africa/Maputo   central Africa ("CAT")<br>
+#<br>
+# +02 - EET<br>
+XX     +3254+01311     Africa/Tripoli  Libya; Kaliningrad ("EET")<br>
+#<br>
+# +02 - SAST<br>
+XX     -2615+02800     Africa/Johannesburg     southern Africa ("SAST")<br>
+#<br>
+# +02/+03 - EET/EEST (EU DST)<br>
+XX     +3758+02343     Europe/Athens   eastern Europe ("EET/EEST")<br>
+#<br>
+# +02/+03 - EET/EEST (Egypt DST)<br>
+XX     +3003+03115     Africa/Cairo    Egypt<br>
+#<br>
+# +02/+03 - EET/EEST (Lebanon DST)<br>
+XX     +3353+03530     Asia/Beirut     Lebanon<br>
+#<br>
+# +02/+03 - EET/EEST (Moldova DST)<br>
+XX     +4700+02850     Europe/Chisinau Moldova<br>
+#<br>
+# +02/+03 - EET/EEST (Palestine DST)<br>
+XX     +3130+03428     Asia/Gaza       Palestine<br>
+#<br>
+# +02/+03 - IST/IDT (Israel DST)<br>
+XX     +314650+0351326 Asia/Jerusalem  Israel<br>
+#<br>
+# +03<br>
+XX     +4101+02858     Europe/Istanbul Near East; Belarus<br>
+#<br>
+# +03 - EAT<br>
+XX     -0117+03649     Africa/Nairobi  eastern Africa ("EAT")<br>
+#<br>
+# +03 - MSK<br>
+XX     +554521+0373704 Europe/Moscow   Moscow ("MSK")<br>
+#<br>
+# +03:30<br>
+XX     +3540+05126     Asia/Tehran     Iran<br>
+#<br>
+# +04<br>
+XX     +2518+05518     Asia/Dubai      Russia; Caucasus; Persian Gulf; Seychelles; Réunion<br>
+#<br>
+# +04:30<br>
+XX     +3431+06912     Asia/Kabul      Afghanistan<br>
+#<br>
+# +05<br>
+XX     +4120+06918     Asia/Tashkent   Russia; Tajikistan; Turkmenistan; Uzbekistan; Maldives<br>
+#<br>
+# +05 - PKT<br>
+XX     +2452+06703     Asia/Karachi    Pakistan ("PKT")<br>
+#<br>
+# +05:30<br>
+XX     +0656+07951     Asia/Colombo    Sri Lanka<br>
+#<br>
+# +05:30 - IST<br>
+XX     +2232+08822     Asia/Kolkata    India ("IST")<br>
+#<br>
+# +05:45<br>
+XX     +2743+08519     Asia/Kathmandu  Nepal<br>
+#<br>
+# +06<br>
+XX     +2343+09025     Asia/Dhaka      Russia; Kyrgyzstan; Bhutan; Bangladesh; Chagos<br>
+#<br>
+# +06:30<br>
+XX     +1647+09610     Asia/Yangon     Myanmar; Cocos<br>
+#<br>
+# +07<br>
+XX     +1345+10031     Asia/Bangkok    Russia; Indochina; Christmas Island<br>
+#<br>
+# +07 - WIB<br>
+XX     -0610+10648     Asia/Jakarta    Indonesia ("WIB")<br>
+#<br>
+# +08<br>
+XX     +0117+10351     Asia/Singapore  Russia; Brunei; Malaysia; Singapore<br>
+#<br>
+# +08 - AWST<br>
+XX     -3157+11551     Australia/Perth Western Australia ("AWST")<br>
+#<br>
+# +08 - CST<br>
+XX     +3114+12128     Asia/Shanghai   China ("CST")<br>
+#<br>
+# +08 - HKT<br>
+XX     +2217+11409     Asia/Hong_Kong  Hong Kong ("HKT")<br>
+#<br>
+# +08 - PHT<br>
+XX     +1435+12100     Asia/Manila     Philippines ("PHT")<br>
+#<br>
+# +08 - WITA<br>
+XX     -0507+11924     Asia/Makassar   Indonesia ("WITA")<br>
+#<br>
+# +08:45<br>
+XX     -3143+12852     Australia/Eucla Eucla<br>
+#<br>
+# +09<br>
+XX     +5203+11328     Asia/Chita      Russia; Palau; East Timor<br>
+#<br>
+# +09 - JST<br>
+XX     +353916+1394441 Asia/Tokyo      Japan ("JST")<br>
+#<br>
+# +09 - KST<br>
+XX     +3733+12658     Asia/Seoul      Korea ("KST")<br>
+#<br>
+# +09 - WIT<br>
+XX     -0232+14042     Asia/Jayapura   Indonesia ("WIT")<br>
+#<br>
+# +09:30 - ACST<br>
+XX     -1228+13050     Australia/Darwin        Northern Territory ("ACST")<br>
+#<br>
+# +09:30/+10:30 - ACST/ACDT (Australia DST)<br>
+XX     -3455+13835     Australia/Adelaide      South Australia ("ACST/ACDT")<br>
+#<br>
+# +10<br>
+XX     +4310+13156     Asia/Vladivostok        Russia; Yap; Chuuk; Papua New Guinea; Dumont d'Urville<br>
+#<br>
+# +10 - AEST<br>
+XX     -2728+15302     Australia/Brisbane      Queensland ("AEST")<br>
+#<br>
+# +10 - ChST<br>
+XX     +1328+14445     Pacific/Guam    Mariana Islands ("ChST")<br>
+#<br>
+# +10/+11 - AEST/AEDT (Australia DST)<br>
+XX     -3352+15113     Australia/Sydney        southeast Australia ("AEST/AEDT")<br>
+#<br>
+# +10:30/+11<br>
+XX     -3133+15905     Australia/Lord_Howe     Lord Howe Island<br>
+#<br>
+# +11<br>
+XX     -0613+15534     Pacific/Bougainville    Russia; Kosrae; Bougainville; Solomons<br>
+#<br>
+# +11/+12 (Australia DST)<br>
+XX     -2903+16758     Pacific/Norfolk Norfolk Island<br>
+#<br>
+# +12<br>
+XX     +5301+15839     Asia/Kamchatka  Russia; Tuvalu; Fiji; etc.<br>
+#<br>
+# +12/+13 (New Zealand DST)<br>
+XX     -3652+17446     Pacific/Auckland        New Zealand ("NZST/NZDT")<br>
+#<br>
+# +12:45/+13:45 (Chatham DST)<br>
+XX     -4357-17633     Pacific/Chatham Chatham Islands<br>
+#<br>
+# +13<br>
+XX     -210800-1751200 Pacific/Tongatapu       Kanton; Tokelau; Samoa (western); Tonga<br>
+#<br>
+# +14<br>
+XX     +0152-15720     Pacific/Kiritimati      Kiritimati<br>
-- <br>
2.40.1<br>
<br>
</blockquote></div>