diff --git a/contrib/tzdata/Makefile b/contrib/tzdata/Makefile
index 88240ad70e0..b68f843d08e 100644
--- a/contrib/tzdata/Makefile
+++ b/contrib/tzdata/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/contrib/tzdata/NEWS b/contrib/tzdata/NEWS
index 6a0d5c50272..c4abb32cd4d 100644
--- a/contrib/tzdata/NEWS
+++ b/contrib/tzdata/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/contrib/tzdata/asia b/contrib/tzdata/asia
index def9b204c05..6e3ea4b36e7 100644
--- a/contrib/tzdata/asia
+++ b/contrib/tzdata/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/contrib/tzdata/theory.html b/contrib/tzdata/theory.html
index 2b14c511468..56390ae44a8 100644
--- a/contrib/tzdata/theory.html
+++ b/contrib/tzdata/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
tzselect program in the tz code.
-The Unicode Common Locale Data
+The Unicode Common Locale Data
Repository contains data that may be useful for other selection
interfaces; it maps timezone names like Europe/Prague to
locale-dependent strings like "Prague", "Praha", "Прага", and "布拉格".
@@ -571,7 +571,7 @@ in decreasing order of importance:
locations while uninhabited.
The leading '-' is a flag that the UT offset is in
some sense undefined; this notation is derived
- from Internet
+ from Internet
RFC 3339.
@@ -624,7 +624,7 @@ Errors in the tz database arise from many sources:
should be observed.
In her 2015 book
The
+ href="https://www.hup.harvard.edu/catalog.php?isbn=9780674286146">The
Global Transformation of Time, 1870–1950,
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.
Measurement of
the Earth's rotation: 720 BC to AD 2015.
- Proc Royal Soc A. 2016 Dec 7;472:20160404.
+ Proc Royal Soc A. 2016;472:20160404.
Also see: Espenak F. Uncertainty
in Delta T (ΔT).
@@ -1036,7 +1036,7 @@ an older zic.
and numeric data as described above.
The file's format is TZif,
a timezone information format that contains binary data; see
- Internet
+ Internet
RFC 8536.
The daylight saving time rules to be used for a
particular timezone are encoded in the
@@ -1064,11 +1064,12 @@ an older zic.
struct tm, e.g., tm_gmtoff.
- struct tm, e.g., tm_zone.
+ in struct tm, e.g., tm_gmtoff,
+ or with a time zone abbreviation member in
+ struct tm, e.g., tm_zone. As noted
+ in Austin
+ Group defect 1533, a future version of POSIX is planned to
+ require tm_gmtoff and tm_zone.
tzalloc, tzfree,
@@ -1129,7 +1130,8 @@ The vestigial APIs are:
APIs.
Although it can still be used in arguments to
mktime to disambiguate timestamps near
- a DST transition when the clock jumps back, this
+ a DST transition when the clock jumps back on
+ platforms lacking tm_gmtoff, 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 UT offset.
@@ -1277,7 +1279,7 @@ the operating system kernel clock as described in
Precision timekeeping,
and this package by default installs a leapseconds file
commonly used by
-NTP
+NTP
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/contrib/tzdata/version b/contrib/tzdata/version
index 7c9f279dc3c..9fcedf24a67 100644
--- a/contrib/tzdata/version
+++ b/contrib/tzdata/version
@@ -1 +1 @@
-2022b
+2022c
diff --git a/contrib/tzdata/ziguard.awk b/contrib/tzdata/ziguard.awk
index 0728baa5134..0556cc4a9db 100644
--- a/contrib/tzdata/ziguard.awk
+++ b/contrib/tzdata/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/contrib/tzdata/zone1970.tab b/contrib/tzdata/zone1970.tab
index ffab5ab299f..756cdf04d97 100644
--- a/contrib/tzdata/zone1970.tab
+++ b/contrib/tzdata/zone1970.tab
@@ -352,3 +352,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