aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile9
-rw-r--r--NEWS26
-rw-r--r--asia4
-rw-r--r--theory.html26
-rw-r--r--version2
-rw-r--r--ziguard.awk37
-rw-r--r--zone1970.tab24
7 files changed, 91 insertions, 37 deletions
diff --git a/Makefile b/Makefile
index 88240ad70e0e..b68f843d08ee 100644
--- a/Makefile
+++ b/Makefile
@@ -298,8 +298,9 @@ GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \
# guess TM_GMTOFF from other macros; define NO_TM_GMTOFF to suppress this.
# Similarly, if your system has a "zone abbreviation" field, define
# -DTM_ZONE=tm_zone
-# and define NO_TM_ZONE to suppress any guessing. These two fields are not
-# required by POSIX, but are widely available on GNU/Linux and BSD systems.
+# and define NO_TM_ZONE to suppress any guessing. Although these two fields
+# not required by POSIX, a future version of POSIX is planned to require them
+# and they are widely available on GNU/Linux and BSD systems.
#
# The next batch of options control support for external variables
# exported by tzcode. In practice these variables are less useful
@@ -538,7 +539,7 @@ DATA= $(TDATA_TO_CHECK) backzone iso3166.tab leap-seconds.list \
leapseconds $(ZONETABLES)
AWK_SCRIPTS= checklinks.awk checktab.awk leapseconds.awk \
ziguard.awk zishrink.awk
-MISC= $(AWK_SCRIPTS) zoneinfo2tdf.pl
+MISC= $(AWK_SCRIPTS)
TZS_YEAR= 2050
TZS_CUTOFF_FLAG= -c $(TZS_YEAR)
TZS= to$(TZS_YEAR).tzs
@@ -567,7 +568,7 @@ VERSION_DEPS= \
tzfile.5 tzfile.h tzselect.8 tzselect.ksh \
workman.sh zdump.8 zdump.c zic.8 zic.c \
ziguard.awk zishrink.awk \
- zone.tab zone1970.tab zoneinfo2tdf.pl
+ zone.tab zone1970.tab
# And for the benefit of csh users on systems that assume the user
# shell should be used to handle commands in Makefiles. . .
diff --git a/NEWS b/NEWS
index 6a0d5c502727..c4abb32cd4dc 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,29 @@
News for the tz database
+Release 2022c - 2022-08-15 17:47:18 -0700
+
+ Briefly:
+ Work around awk bug in FreeBSD, macOS, etc.
+ Improve tzselect on intercontinental Zones.
+
+ Changes to code
+
+ Work around a bug in onetrueawk that broke commands like
+ 'make traditional_tarballs' on FreeBSD, macOS, etc.
+ (Problem reported by Deborah Goldsmith.)
+
+ Add code to tzselect that uses experimental structured comments in
+ zone1970.tab to clarify whether Zones like Africa/Abidjan and
+ Europe/Istanbul cross continent or ocean boundaries.
+ (Inspired by a problem reported by Peter Krefting.)
+
+ Fix bug with 'zic -d /a/b/c' when /a is unwritable but the
+ directory /a/b already exists.
+
+ Remove zoneinfo2tdf.pl, as it was unused and triggered false
+ malware alarms on some email servers.
+
+
Release 2022b - 2022-08-10 15:38:32 -0700
Briefly:
@@ -83,7 +107,7 @@ Release 2022b - 2022-08-10 15:38:32 -0700
zic no longer complains "can't determine time zone abbreviation to
use just after until time" when a transition to a new standard
- time occurs simultanously with the first DST fallback transition.
+ time occurs simultaneously with the first DST fallback transition.
Changes to build procedure
diff --git a/asia b/asia
index def9b204c053..6e3ea4b36e7e 100644
--- a/asia
+++ b/asia
@@ -1505,8 +1505,8 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
# onwards (which was during the Islamic Republic).
# From Francis Santoni (2022-06-01):
-# for Iran and 1977 the effective change is only 20 october
-# (UIT No. 143 17.XI.1977) and not 23 september (UIT No. 141 13.IX.1977).
+# for Iran and 1977 the effective change is only 20 October
+# (UIT No. 143 17.XI.1977) and not 23 September (UIT No. 141 13.IX.1977).
# UIT is the Operational Bulletin of International Telecommunication Union.
# From Roozbeh Pournader (2003-03-15):
diff --git a/theory.html b/theory.html
index 2b14c5114686..56390ae44a8d 100644
--- a/theory.html
+++ b/theory.html
@@ -122,7 +122,7 @@ If geolocation information is available, a selection interface can
locate the user on a timezone map or prioritize names that are
geographically close. For an example selection interface, see the
<code>tzselect</code> program in the <code><abbr>tz</abbr></code> code.
-The <a href="http://cldr.unicode.org">Unicode Common Locale Data
+The <a href="https://cldr.unicode.org">Unicode Common Locale Data
Repository</a> contains data that may be useful for other selection
interfaces; it maps timezone names like <code>Europe/Prague</code> to
locale-dependent strings like "Prague", "Praha", "Прага", and "布拉格".
@@ -571,7 +571,7 @@ in decreasing order of importance:
locations while uninhabited.
The leading '<code>-</code>' is a flag that the <abbr>UT</abbr> offset is in
some sense undefined; this notation is derived
- from <a href="https://tools.ietf.org/html/rfc3339">Internet
+ from <a href="https://datatracker.ietf.org/doc/html/rfc3339">Internet
<abbr title="Request For Comments">RFC</abbr> 3339</a>.
</li>
</ul>
@@ -624,7 +624,7 @@ Errors in the <code><abbr>tz</abbr></code> database arise from many sources:
should be observed.
In her 2015 book
<cite><a
- href="http://www.hup.harvard.edu/catalog.php?isbn=9780674286146">The
+ href="https://www.hup.harvard.edu/catalog.php?isbn=9780674286146">The
Global Transformation of Time, 1870&ndash;1950</a></cite>,
Vanessa Ogle writes
"Outside of Europe and North America there was no system of time
@@ -810,7 +810,7 @@ href="https://www.dissentmagazine.org/blog/booked-a-global-history-of-time-vanes
See: Stephenson FR, Morrison LV, Hohenkerk CY.
<a href="https://dx.doi.org/10.1098/rspa.2016.0404">Measurement of
the Earth's rotation: 720 BC to AD 2015</a>.
- <cite>Proc Royal Soc A</cite>. 2016 Dec 7;472:20160404.
+ <cite>Proc Royal Soc A</cite>. 2016;472:20160404.
Also see: Espenak F. <a
href="https://eclipse.gsfc.nasa.gov/SEhelp/uncertainty2004.html">Uncertainty
in Delta T (ΔT)</a>.
@@ -1036,7 +1036,7 @@ an older <code>zic</code>.
and numeric data as described <a href="#POSIX">above</a>.
The file's format is <dfn><abbr>TZif</abbr></dfn>,
a timezone information format that contains binary data; see
- <a href="https://tools.ietf.org/html/8536">Internet
+ <a href="https://datatracker.ietf.org/doc/html/8536">Internet
<abbr>RFC</abbr> 8536</a>.
The daylight saving time rules to be used for a
particular timezone are encoded in the
@@ -1064,11 +1064,12 @@ an older <code>zic</code>.
</li>
<li>
The code supports platforms with a <abbr>UT</abbr> offset member
- in <code>struct tm</code>, e.g., <code>tm_gmtoff</code>.
- </li>
- <li>
- The code supports platforms with a time zone abbreviation member in
- <code>struct tm</code>, e.g., <code>tm_zone</code>.
+ in <code>struct tm</code>, e.g., <code>tm_gmtoff</code>,
+ or with a time zone abbreviation member in
+ <code>struct tm</code>, e.g., <code>tm_zone</code>. As noted
+ in <a href="https://austingroupbugs.net/view.php?id=1533">Austin
+ Group defect 1533</a>, a future version of POSIX is planned to
+ require <code>tm_gmtoff</code> and <code>tm_zone</code>.
</li>
<li>
Functions <code>tzalloc</code>, <code>tzfree</code>,
@@ -1129,7 +1130,8 @@ The vestigial <abbr>API</abbr>s are:
<abbr>API</abbr>s.
Although it can still be used in arguments to
<code>mktime</code> to disambiguate timestamps near
- a <abbr>DST</abbr> transition when the clock jumps back, this
+ a <abbr>DST</abbr> transition when the clock jumps back on
+ platforms lacking <code>tm_gmtoff</code>, this
disambiguation does not work when standard time itself jumps back,
which can occur when a location changes to a time zone with a
lesser <abbr>UT</abbr> offset.
@@ -1277,7 +1279,7 @@ the operating system kernel clock as described in
<a href="tz-link.html#precision">Precision timekeeping</a>,
and this package by default installs a <samp>leapseconds</samp> file
commonly used by
-<a href="http://www.ntp.org"><abbr title="Network Time Protocol">NTP</abbr></a>
+<a href="https://www.ntp.org"><abbr title="Network Time Protocol">NTP</abbr></a>
software that adjusts the kernel clock.
However, kernel-clock twiddling approximates UTC only roughly,
and systems needing more-precise UTC can use this package's leap
diff --git a/version b/version
index 7c9f279dc3c4..9fcedf24a675 100644
--- a/version
+++ b/version
@@ -1 +1 @@
-2022b
+2022c
diff --git a/ziguard.awk b/ziguard.awk
index 0728baa51343..0556cc4a9dbb 100644
--- a/ziguard.awk
+++ b/ziguard.awk
@@ -91,12 +91,13 @@ $1 == "#PACKRATLIST" && $2 == PACKRATLIST {
/^Zone/ { zone = $2 }
DATAFORM != "main" {
- in_comment = /^#/
+ in_comment = $0 ~ /^#/
uncomment = comment_out = 0
# If this line should differ due to Czechoslovakia using negative SAVE values,
# uncomment the desired version and comment out the undesired one.
- if (zone == "Europe/Prague" && /^#?[\t ]+[01]:00[\t ]/ && /1947 Feb 23/) {
+ if (zone == "Europe/Prague" && $0 ~ /^#?[\t ]+[01]:00[\t ]/ \
+ && $0 ~ /1947 Feb 23/) {
if (($(in_comment + 2) != "-") == (DATAFORM != "rearguard")) {
uncomment = in_comment
} else {
@@ -106,9 +107,9 @@ DATAFORM != "main" {
# If this line should differ due to Ireland using negative SAVE values,
# uncomment the desired version and comment out the undesired one.
- Rule_Eire = /^#?Rule[\t ]+Eire[\t ]/
+ Rule_Eire = $0 ~ /^#?Rule[\t ]+Eire[\t ]/
Zone_Dublin_post_1968 \
- = (zone == "Europe/Dublin" && /^#?[\t ]+[01]:00[\t ]/ \
+ = (zone == "Europe/Dublin" && $0 ~ /^#?[\t ]+[01]:00[\t ]/ \
&& (!$(in_comment + 4) || 1968 < $(in_comment + 4)))
if (Rule_Eire || Zone_Dublin_post_1968) {
if ((Rule_Eire \
@@ -122,9 +123,9 @@ DATAFORM != "main" {
# If this line should differ due to Namibia using negative SAVE values,
# uncomment the desired version and comment out the undesired one.
- Rule_Namibia = /^#?Rule[\t ]+Namibia[\t ]/
+ Rule_Namibia = $0 ~ /^#?Rule[\t ]+Namibia[\t ]/
Zone_using_Namibia_rule \
- = (zone == "Africa/Windhoek" && /^#?[\t ]+[12]:00[\t ]/ \
+ = (zone == "Africa/Windhoek" && $0 ~ /^#?[\t ]+[12]:00[\t ]/ \
&& ($(in_comment + 2) == "Namibia" \
|| ($(in_comment + 2) == "-" && $(in_comment + 3) == "CAT" \
&& ((1994 <= $(in_comment + 4) && $(in_comment + 4) <= 2017) \
@@ -142,8 +143,8 @@ DATAFORM != "main" {
# If this line should differ due to Portugal benefiting from %z if supported,
# uncomment the desired version and comment out the undesired one.
- if (/^#?[\t ]+-[12]:00[\t ]+Port[\t ]+[%+-]/) {
- if (/%z/ == (DATAFORM == "vanguard")) {
+ if ($0 ~ /^#?[\t ]+-[12]:00[\t ]+Port[\t ]+[%+-]/) {
+ if (($0 ~ /%z/) == (DATAFORM == "vanguard")) {
uncomment = in_comment
} else {
comment_out = !in_comment
@@ -164,8 +165,8 @@ DATAFORM != "main" {
sub(/-00CHANGE-TO-%z/, "-00")
sub(/[-+][^\t ]+CHANGE-TO-/, "")
} else {
- if (/^[^#]*%z/) {
- stdoff_column = 2 * /^Zone/ + 1
+ if ($0 ~ /^[^#]*%z/) {
+ stdoff_column = 2 * ($0 ~ /^Zone/) + 1
rules_column = stdoff_column + 1
stdoff = get_minutes($stdoff_column)
rules = $rules_column
@@ -184,9 +185,9 @@ DATAFORM != "main" {
dstoff = 20
} else if (((rules == "Cook" || rules == "LH") && NF == 3) \
|| (rules == "Uruguay" \
- && /[\t ](1942 Dec 14|1960|1970|1974 Dec 22)$/)) {
+ && $0 ~ /[\t ](1942 Dec 14|1960|1970|1974 Dec 22)$/)) {
dstoff = 30
- } else if (rules == "Uruguay" && /[\t ]1974 Mar 10$/) {
+ } else if (rules == "Uruguay" && $0 ~ /[\t ]1974 Mar 10$/) {
dstoff = 90
} else {
dstoff = 60
@@ -222,7 +223,7 @@ DATAFORM != "main" {
stdoff_subst[1] = rounded_stdoff
}
} else if (stdoff_subst[0]) {
- stdoff_column = 2 * /^Zone/ + 1
+ stdoff_column = 2 * ($0 ~ /^Zone/) + 1
stdoff_column_val = $stdoff_column
if (stdoff_column_val == stdoff_subst[0]) {
sub(stdoff_subst[0], stdoff_subst[1])
@@ -233,7 +234,7 @@ DATAFORM != "main" {
# In rearguard form, change the Japan rule line with "Sat>=8 25:00"
# to "Sun>=9 1:00", to cater to zic before 2007 and to older Java.
- if (/^Rule/ && $2 == "Japan") {
+ if ($0 ~ /^Rule/ && $2 == "Japan") {
if (DATAFORM == "rearguard") {
if ($7 == "Sat>=8" && $8 == "25:00") {
sub(/Sat>=8/, "Sun>=9")
@@ -250,7 +251,7 @@ DATAFORM != "main" {
# In rearguard form, change the Morocco lines with negative SAVE values
# to use positive SAVE values.
if ($2 == "Morocco") {
- if (/^Rule/) {
+ if ($0 ~ /^Rule/) {
if ($4 ~ /^201[78]$/ && $6 == "Oct") {
if (DATAFORM == "rearguard") {
sub(/\t2018\t/, "\t2017\t")
@@ -290,8 +291,10 @@ DATAFORM != "main" {
/^Zone/ {
packrat_ignored = FILENAME == PACKRATDATA && PACKRATLIST && !packratlist[$2];
}
-packrat_ignored && !/^Rule/ {
- sub(/^/, "#")
+{
+ if (packrat_ignored && $0 !~ /^Rule/) {
+ sub(/^/, "#")
+ }
}
# If a Link line is followed by a Link or Zone line for the same data, comment
diff --git a/zone1970.tab b/zone1970.tab
index 3e1948cbb741..19515f7ab60c 100644
--- a/zone1970.tab
+++ b/zone1970.tab
@@ -351,3 +351,27 @@ VN +1045+10640 Asia/Ho_Chi_Minh Vietnam (south)
VU -1740+16825 Pacific/Efate
WS -1350-17144 Pacific/Apia
ZA,LS,SZ -2615+02800 Africa/Johannesburg
+#
+# The next section contains experimental tab-separated comments for
+# use by user agents like tzselect that identify continents and oceans.
+#
+# For example, the comment "#@AQ<tab>Antarctica/" means the country code
+# AQ is in the continent Antarctica regardless of the Zone name,
+# so Pacific/Auckland should be listed under Antarctica as well as
+# under the Pacific because its line's country codes include AQ.
+#
+# If more than one country code is affected each is listed separated
+# by commas, e.g., #@IS,SH<tab>Atlantic/". If a country code is in
+# more than one continent or ocean, each is listed separated by
+# commas, e.g., the second column of "#@CY,TR<tab>Asia/,Europe/".
+#
+# These experimental comments are present only for country codes where
+# the continent or ocean is not already obvious from the Zone name.
+# For example, there is no such comment for RU since it already
+# corresponds to Zone names starting with both "Europe/" and "Asia/".
+#
+#@AQ Antarctica/
+#@IS,SH Atlantic/
+#@CY,TR Asia/,Europe/
+#@SJ Arctic/
+#@CC,CX,KM,MG,YT Indian/