aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Paeps <philip@FreeBSD.org>2024-09-06 01:33:05 +0000
committerPhilip Paeps <philip@FreeBSD.org>2024-09-06 01:33:05 +0000
commit62ad5eff805323c79d60cd902863fa8c29b863a8 (patch)
treeebfa96a08edb8fb73f77f34625764d0356eacbe2
parent76e31da7ab276bcd66122762d712fb99590f4d3a (diff)
Import tzdata 2024bvendor/tzdata/tzdata2024b
-rw-r--r--CONTRIBUTING18
-rw-r--r--Makefile412
-rw-r--r--NEWS124
-rw-r--r--africa73
-rw-r--r--antarctica58
-rw-r--r--asia442
-rw-r--r--australasia130
-rw-r--r--backward15
-rw-r--r--backzone35
-rw-r--r--checknow.awk4
-rw-r--r--etcetera54
-rw-r--r--europe713
-rw-r--r--leap-seconds.list30
-rw-r--r--leapseconds8
-rw-r--r--northamerica145
-rw-r--r--southamerica486
-rw-r--r--theory.html214
-rw-r--r--version2
-rw-r--r--ziguard.awk32
-rw-r--r--zone.tab3
-rw-r--r--zone1970.tab3
-rw-r--r--zonenow.tab8
22 files changed, 1768 insertions, 1241 deletions
diff --git a/CONTRIBUTING b/CONTRIBUTING
index 6d800e4c03a3..f6edbd3be7d3 100644
--- a/CONTRIBUTING
+++ b/CONTRIBUTING
@@ -23,10 +23,10 @@ such as renaming, adding or removing zones, please read
"Theory and pragmatics of the tz code and data"
<https://www.iana.org/time-zones/repository/theory.html>.
It is also good to browse the mailing list archives
-<https://mm.icann.org/pipermail/tz/> for examples of patches that tend
-to work well. Additions to data should contain commentary citing
-reliable sources as justification. Citations should use "https:" URLs
-if available.
+<https://lists.iana.org/hyperkitty/list/tz@iana.org/>
+for examples of patches that tend to work well.
+Changes should contain commentary citing reliable sources.
+Citations should use "https:" URLs if available.
For changes that fix sensitive security-related bugs, please see the
distribution's 'SECURITY' file.
@@ -63,12 +63,16 @@ If you use Git the following workflow may be helpful:
* Edit source files. Include commentary that justifies the
changes by citing reliable sources.
- * Debug the changes, e.g.:
+ * Debug the changes locally, e.g.:
- make check
- make install
+ make TOPDIR=$PWD/tz clean check install
./zdump -v America/Los_Angeles
+ Although builds assume only basic POSIX, they use extra features
+ if available. 'make check' accesses validator.w3.org unless you
+ lack 'curl' or use 'make CURL=:'. If you have the latest GCC,
+ "make CFLAGS='$(GCC_DEBUG_FLAGS)'" does extra checking.
+
* For each separable change, commit it in the new branch, e.g.:
git add northamerica
diff --git a/Makefile b/Makefile
index d48354c72df4..0087b4596515 100644
--- a/Makefile
+++ b/Makefile
@@ -3,17 +3,17 @@
# 2009-05-17 by Arthur David Olson.
# Request POSIX conformance; this must be the first non-comment line.
.POSIX:
-# On older platforms you may need to scrounge for a POSIX-conforming 'make'.
-# For example, on Solaris 10 (2005), use /usr/sfw/bin/gmake or
-# /usr/xpg4/bin/make, not /usr/ccs/bin/make.
+# On older platforms you may need to scrounge for POSIX conformance.
+# For example, on Solaris 10 (2005) with Sun Studio 12 aka Sun C 5.9 (2007),
+# use 'PATH=/usr/xpg4/bin:$PATH make CC=c99'.
# To affect how this Makefile works, you can run a shell script like this:
#
# #!/bin/sh
-# make CC='gcc -std=gnu11' "$@"
+# make CC='gcc -std=gnu23' "$@"
#
-# This example script is appropriate for a pre-2017 GNU/Linux system
-# where a non-default setting is needed to support this package's use of C99.
+# This example script is appropriate for a circa 2024 GNU/Linux system
+# where a non-default setting enables this package's optional use of C23.
#
# Alternatively, you can simply edit this Makefile to tailor the following
# macro definitions.
@@ -53,7 +53,7 @@ DATAFORM= main
LOCALTIME= Factory
-# The POSIXRULES macro controls interpretation of POSIX-2017.1-like TZ
+# The POSIXRULES macro controls interpretation of POSIX-like TZ
# settings like TZ='EET-2EEST' that lack DST transition rules.
# If POSIXRULES is '-', no template is installed; this is the default.
# Any other value for POSIXRULES is obsolete and should not be relied on, as:
@@ -132,8 +132,9 @@ LIBDIR = $(TOPDIR)/$(USRDIR)/lib
# Types to try, as an alternative to time_t.
TIME_T_ALTERNATIVES = $(TIME_T_ALTERNATIVES_HEAD) $(TIME_T_ALTERNATIVES_TAIL)
-TIME_T_ALTERNATIVES_HEAD = int_least64_t
-TIME_T_ALTERNATIVES_TAIL = int_least32_t uint_least32_t uint_least64_t
+TIME_T_ALTERNATIVES_HEAD = int_least64_t.ck
+TIME_T_ALTERNATIVES_TAIL = int_least32_t.ck uint_least32_t.ck \
+ uint_least64_t.ck
# What kind of TZif data files to generate. (TZif is the binary time
# zone data format that zic generates; see Internet RFC 8536.)
@@ -219,6 +220,7 @@ LDLIBS=
# than what POSIX specifies, assuming local time is UT.
# For example, N is 252460800 on AmigaOS.
# -DHAVE_DECL_ASCTIME_R=0 if <time.h> does not declare asctime_r
+# on POSIX platforms predating POSIX.1-2024
# -DHAVE_DECL_ENVIRON if <unistd.h> declares 'environ'
# -DHAVE_DECL_TIMEGM=0 if <time.h> does not declare timegm
# -DHAVE_DIRECT_H if mkdir needs <direct.h> (MS-Windows)
@@ -229,7 +231,7 @@ LDLIBS=
# where LDLIBS also needs to contain -lintl on some hosts;
# -DHAVE_GETTEXT=0 to avoid using gettext
# -DHAVE_INCOMPATIBLE_CTIME_R if your system's time.h declares
-# ctime_r and asctime_r incompatibly with the POSIX standard
+# ctime_r and asctime_r incompatibly with POSIX.1-2017 and earlier
# (Solaris when _POSIX_PTHREAD_SEMANTICS is not defined).
# -DHAVE_INTTYPES_H=0 if <inttypes.h> does not work*+
# -DHAVE_LINK=0 if your system lacks a link function
@@ -261,8 +263,11 @@ LDLIBS=
# -DRESERVE_STD_EXT_IDS if your platform reserves standard identifiers
# with external linkage, e.g., applications cannot define 'localtime'.
# -Dssize_t=long on hosts like MS-Windows that lack ssize_t
-# -DSUPPORT_C89 if the tzcode library should support C89 callers+
-# However, this might trigger latent bugs in C99-or-later callers.
+# -DSUPPORT_C89=0 if the tzcode library should not support C89 callers
+# Although -DSUPPORT_C89=0 might work around latent bugs in callers,
+# it does not conform to POSIX.
+# -DSUPPORT_POSIX2008 if the library should support older POSIX callers+
+# However, this might cause problems in POSIX.1-2024-or-later callers.
# -DSUPPRESS_TZDIR to not prepend TZDIR to file names; this has
# security implications and is not recommended for general use
# -DTHREAD_SAFE to make localtime.c thread-safe, as POSIX requires;
@@ -274,7 +279,7 @@ LDLIBS=
# -DTZ_DOMAINDIR=\"/path\" to use "/path" for gettext directory;
# the default is system-supplied, typically "/usr/lib/locale"
# -DTZDEFRULESTRING=\",date/time,date/time\" to default to the specified
-# DST transitions for POSIX.1-2017-style TZ strings lacking them,
+# DST transitions for proleptic format TZ strings lacking them,
# in the usual case where POSIXRULES is '-'. If not specified,
# TZDEFRULESTRING defaults to US rules for future DST transitions.
# This mishandles some past timestamps, as US DST rules have changed.
@@ -302,23 +307,25 @@ LDLIBS=
#
# * Options marked "*" can be omitted if your compiler is C23 compatible.
# * Options marked "+" are obsolescent and are planned to be removed
-# once the code assumes C99 or later, say in the year 2029.
+# once the code assumes C99 or later (say in the year 2029)
+# and POSIX.1-2024 or later (say in the year 2034).
#
# Select instrumentation via "make GCC_INSTRUMENT='whatever'".
GCC_INSTRUMENT = \
-fsanitize=undefined -fsanitize-address-use-after-scope \
-fsanitize-undefined-trap-on-error -fstack-protector
# Omit -fanalyzer from GCC_DEBUG_FLAGS, as it makes GCC too slow.
-GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \
+GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 \
$(GCC_INSTRUMENT) \
-Wall -Wextra \
-Walloc-size-larger-than=100000 -Warray-bounds=2 \
-Wbad-function-cast -Wbidi-chars=any,ucn -Wcast-align=strict -Wdate-time \
-Wdeclaration-after-statement -Wdouble-promotion \
- -Wduplicated-branches -Wduplicated-cond \
+ -Wduplicated-branches -Wduplicated-cond -Wflex-array-member-not-at-end \
-Wformat=2 -Wformat-overflow=2 -Wformat-signedness -Wformat-truncation \
-Wimplicit-fallthrough=5 -Winit-self -Wlogical-op \
- -Wmissing-declarations -Wmissing-prototypes -Wnested-externs \
+ -Wmissing-declarations -Wmissing-prototypes \
+ -Wmissing-variable-declarations -Wnested-externs \
-Wnull-dereference \
-Wold-style-definition -Woverlength-strings -Wpointer-arith \
-Wshadow -Wshift-overflow=2 -Wstrict-overflow \
@@ -327,10 +334,9 @@ GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \
-Wsuggest-attribute=const -Wsuggest-attribute=format \
-Wsuggest-attribute=malloc \
-Wsuggest-attribute=noreturn -Wsuggest-attribute=pure \
- -Wtrampolines -Wundef -Wuninitialized -Wunused-macros -Wuse-after-free=3 \
+ -Wtrampolines -Wundef -Wunused-macros -Wuse-after-free=3 \
-Wvariadic-macros -Wvla -Wwrite-strings \
- -Wno-address -Wno-format-nonliteral -Wno-sign-compare \
- -Wno-type-limits
+ -Wno-format-nonliteral -Wno-sign-compare
#
# If your system has a "GMT offset" field in its "struct tm"s
# (or if you decide to add such a field in your system's "time.h" file),
@@ -341,9 +347,8 @@ GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \
# Similarly, if your system has a "zone abbreviation" field, define
# -DTM_ZONE=tm_zone
# and define NO_TM_ZONE to suppress any guessing.
-# Although these two fields are not required by POSIX.1-2017,
-# POSIX 202x/D4 requires them and they are widely available
-# on GNU/Linux and BSD systems.
+# Although POSIX.1-2024 requires these fields and they are widely available
+# on GNU/Linux and BSD systems, some older systems lack them.
#
# The next batch of options control support for external variables
# exported by tzcode. In practice these variables are less useful
@@ -353,7 +358,9 @@ GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \
# # -DHAVE_TZNAME=0 # do not support "tzname"
# # -DHAVE_TZNAME=1 # support "tzname", which is defined by system library
# # -DHAVE_TZNAME=2 # support and define "tzname"
-# # to the "CFLAGS=" line. "tzname" is required by POSIX.1-1988 and later.
+# # to the "CFLAGS=" line. Although "tzname" is required by POSIX.1-1988
+# # and later, its contents are unspecified if you use a geographical TZ
+# # and the variable is planned to be removed in a future POSIX edition.
# # If not defined, the code attempts to guess HAVE_TZNAME from other macros.
# # Warning: unless time_tz is also defined, HAVE_TZNAME=1 can cause
# # crashes when combined with some platforms' standard libraries,
@@ -364,7 +371,9 @@ GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \
# # -DUSG_COMPAT=1 # support, and variables are defined by system library
# # -DUSG_COMPAT=2 # support and define variables
# # to the "CFLAGS=" line; "timezone" and "daylight" are inspired by Unix
-# # Systems Group code and are required by POSIX.1-2008 and later (with XSI).
+# # Systems Group code and are required by POSIX.1-2008 and later (with XSI),
+# # although their contents are unspecified if you use a geographical TZ
+# # and the variables are planned to be removed in a future edition of POSIX.
# # If not defined, the code attempts to guess USG_COMPAT from other macros.
# #
# # To support the external variable "altzone", add
@@ -428,18 +437,13 @@ GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \
# The name of a POSIX-like library archiver, its flags, C compiler,
# linker flags, and 'make' utility. Ordinarily the defaults suffice.
-# The commented-out values are the defaults specified by POSIX.1-202x/D4.
+# The commented-out values are the defaults specified by POSIX.1-2024.
#AR = ar
#ARFLAGS = -rv
#CC = c17
#LDFLAGS =
#MAKE = make
-# For leap seconds, this Makefile uses LEAPSECONDS='-L leapseconds' in
-# submake command lines. The default is no leap seconds.
-
-LEAPSECONDS=
-
# Where to fetch leap-seconds.list from.
leaplist_URI = \
https://hpiers.obspm.fr/iers/bul/bulc/ntp/leap-seconds.list
@@ -461,7 +465,7 @@ ZFLAGS=
# How to use zic to install TZif files.
-ZIC_INSTALL= $(ZIC) -d '$(DESTDIR)$(TZDIR)' $(LEAPSECONDS)
+ZIC_INSTALL= $(ZIC) -d '$(DESTDIR)$(TZDIR)'
# The name of a POSIX-compliant 'awk' on your system.
# mawk 1.3.3 and Solaris 10 /usr/bin/awk do not work.
@@ -480,6 +484,7 @@ KSHELL= /bin/bash
# Name of curl <https://curl.haxx.se/>, used for HTML validation
# and to fetch leap-seconds.list from upstream.
+# Set CURL=: to disable use of the Internet.
CURL= curl
# Name of GNU Privacy Guard <https://gnupg.org/>, used to sign distributions.
@@ -533,21 +538,28 @@ OK_LINE= '^'$(OK_CHAR)'*$$'
# Flags to give 'tar' when making a distribution.
# Try to use flags appropriate for GNU tar.
-GNUTARFLAGS= --format=pax --pax-option='delete=atime,delete=ctime' \
+GNUTARFLAGS= --format=pax --pax-option=delete=atime,delete=ctime \
--numeric-owner --owner=0 --group=0 \
--mode=go+u,go-w --sort=name
-TARFLAGS= `if tar $(GNUTARFLAGS) --version >/dev/null 2>&1; \
- then echo $(GNUTARFLAGS); \
- else :; \
- fi`
+SETUP_TAR= \
+ export LC_ALL=C && \
+ if tar $(GNUTARFLAGS) --version >/dev/null 2>&1; then \
+ TAR='tar $(GNUTARFLAGS)'; \
+ else \
+ TAR=tar; \
+ fi
# Flags to give 'gzip' when making a distribution.
GZIPFLAGS= -9n
# When comparing .tzs files, use GNU diff's -F'^TZ=' option if supported.
# This makes it easier to see which Zone has been affected.
-DIFF_TZS= diff -u$$(! diff -u -F'^TZ=' - - <>/dev/null >&0 2>&1 \
- || echo ' -F^TZ=')
+SETUP_DIFF_TZS = \
+ if diff -u -F'^TZ=' - - <>/dev/null >&0 2>&1; then \
+ DIFF_TZS='diff -u -F^TZ='; \
+ else \
+ DIFF_TZS='diff -u'; \
+ fi
# ':' on typical hosts; 'ranlib' on the ancient hosts that still need ranlib.
RANLIB= :
@@ -561,8 +573,8 @@ RANLIB= :
TZCOBJS= zic.o
-TZDOBJS= zdump.o localtime.o asctime.o strftime.o
-DATEOBJS= date.o localtime.o strftime.o asctime.o
+TZDOBJS= zdump.o localtime.o strftime.o
+DATEOBJS= date.o localtime.o strftime.o
LIBSRCS= localtime.c asctime.c difftime.c strftime.c
LIBOBJS= localtime.o asctime.o difftime.o strftime.o
HEADERS= tzfile.h private.h
@@ -579,8 +591,7 @@ MANTXTS= newctime.3.txt newstrftime.3.txt newtzset.3.txt \
COMMON= calendars CONTRIBUTING LICENSE Makefile \
NEWS README SECURITY theory.html version
WEB_PAGES= tz-art.html tz-how-to.html tz-link.html
-CHECK_WEB_PAGES=check_theory.html check_tz-art.html \
- check_tz-how-to.html check_tz-link.html
+CHECK_WEB_PAGES=theory.ck tz-art.ck tz-how-to.ck tz-link.ck
DOCS= $(MANS) date.1 $(MANTXTS) $(WEB_PAGES)
PRIMARY_YDATA= africa antarctica asia australasia \
europe northamerica southamerica
@@ -641,8 +652,7 @@ install: all $(DATA) $(REDO) $(MANS)
'$(DESTDIR)$(MANDIR)/man3' '$(DESTDIR)$(MANDIR)/man5' \
'$(DESTDIR)$(MANDIR)/man8'
$(ZIC_INSTALL) -l $(LOCALTIME) \
- `case '$(POSIXRULES)' in ?*) echo '-p';; esac \
- ` $(POSIXRULES) \
+ -p $(POSIXRULES) \
-t '$(DESTDIR)$(TZDEFAULT)'
cp -f $(TABDATA) '$(DESTDIR)$(TZDIR)/.'
cp tzselect '$(DESTDIR)$(BINDIR)/.'
@@ -665,10 +675,10 @@ INSTALL: ALL install date.1
# and append "-dirty" if the contents do not already end in "-dirty".
version: $(VERSION_DEPS)
{ (type git) >/dev/null 2>&1 && \
- V=`git describe --match '[0-9][0-9][0-9][0-9][a-z]*' \
- --abbrev=7 --dirty` || \
- if test '$(VERSION)' = unknown && V=`cat $@`; then \
- case $$V in *-dirty);; *) V=$$V-dirty;; esac; \
+ V=$$(git describe --match '[0-9][0-9][0-9][0-9][a-z]*' \
+ --abbrev=7 --dirty) || \
+ if test '$(VERSION)' = unknown && read -r V <$@; then \
+ V=$${V%-dirty}-dirty; \
else \
V='$(VERSION)'; \
fi; } && \
@@ -678,7 +688,7 @@ version: $(VERSION_DEPS)
# These files can be tailored by setting BACKWARD, PACKRATDATA, PACKRATLIST.
vanguard.zi main.zi rearguard.zi: $(DSTDATA_ZI_DEPS)
$(AWK) \
- -v DATAFORM=`expr $@ : '\(.*\).zi'` \
+ -v DATAFORM=$(@:.zi=) \
-v PACKRATDATA='$(PACKRATDATA)' \
-v PACKRATLIST='$(PACKRATLIST)' \
-f ziguard.awk \
@@ -687,7 +697,7 @@ vanguard.zi main.zi rearguard.zi: $(DSTDATA_ZI_DEPS)
# This file has a version comment that attempts to capture any tailoring
# via BACKWARD, DATAFORM, PACKRATDATA, PACKRATLIST, and REDO.
tzdata.zi: $(DATAFORM).zi version zishrink.awk
- version=`sed 1q version` && \
+ read -r version <version && \
LC_ALL=C $(AWK) \
-v dataform='$(DATAFORM)' \
-v deps='$(DSTDATA_ZI_DEPS) zishrink.awk' \
@@ -708,7 +718,7 @@ tzdir.h:
mv $@.out $@
version.h: version
- VERSION=`cat version` && printf '%s\n' \
+ read -r VERSION <version && printf '%s\n' \
'static char const PKGVERSION[]="($(PACKAGE)) ";' \
"static char const TZVERSION[]=\"$$VERSION\";" \
'static char const REPORT_BUGS_TO[]="$(BUGEMAIL)";' \
@@ -748,12 +758,11 @@ commit-leap-seconds.list: fetch-leap-seconds.list
git commit --author="$$author" --date="$$date" -m'make $@' \
leap-seconds.list
-# Arguments to pass to submakes of install_data.
+# Arguments to pass to submakes.
# They can be overridden by later submake arguments.
INSTALLARGS = \
BACKWARD='$(BACKWARD)' \
DESTDIR='$(DESTDIR)' \
- LEAPSECONDS='$(LEAPSECONDS)' \
PACKRATDATA='$(PACKRATDATA)' \
PACKRATLIST='$(PACKRATLIST)' \
TZDEFAULT='$(TZDEFAULT)' \
@@ -762,16 +771,11 @@ INSTALLARGS = \
INSTALL_DATA_DEPS = zic leapseconds tzdata.zi
-# 'make install_data' installs one set of TZif files.
-install_data: $(INSTALL_DATA_DEPS)
- $(ZIC_INSTALL) tzdata.zi
-
posix_only: $(INSTALL_DATA_DEPS)
- $(MAKE) $(INSTALLARGS) LEAPSECONDS= install_data
+ $(ZIC_INSTALL) tzdata.zi
right_only: $(INSTALL_DATA_DEPS)
- $(MAKE) $(INSTALLARGS) LEAPSECONDS='-L leapseconds' \
- install_data
+ $(ZIC_INSTALL) -L leapseconds tzdata.zi
# In earlier versions of this makefile, the other two directories were
# subdirectories of $(TZDIR). However, this led to configuration errors.
@@ -802,8 +806,7 @@ ZDS = dummy.zd
# Rule used only by submakes invoked by the $(TZS_NEW) rule.
# It is separate so that GNU 'make -j' can run instances in parallel.
$(ZDS): zdump
- ./zdump -i $(TZS_CUTOFF_FLAG) '$(wd)/'$$(expr $@ : '\(.*\).zd') \
- >$@
+ ./zdump -i $(TZS_CUTOFF_FLAG) "$$PWD/$(@:.zd=)" >$@
TZS_NEW_DEPS = tzdata.zi zdump zic
$(TZS_NEW): $(TZS_NEW_DEPS)
@@ -812,20 +815,19 @@ $(TZS_NEW): $(TZS_NEW_DEPS)
$(zic) -d tzs$(TZS_YEAR).dir tzdata.zi
$(AWK) '/^L/{print "Link\t" $$2 "\t" $$3}' \
tzdata.zi | LC_ALL=C sort >$@.out
- wd=`pwd` && \
- x=`$(AWK) '/^Z/{print "tzs$(TZS_YEAR).dir/" $$2 ".zd"}' \
+ x=$$($(AWK) '/^Z/{print "tzs$(TZS_YEAR).dir/" $$2 ".zd"}' \
tzdata.zi \
- | LC_ALL=C sort -t . -k 2,2` && \
+ | LC_ALL=C sort -t . -k 2,2) && \
set x $$x && \
shift && \
ZDS=$$* && \
- $(MAKE) wd="$$wd" TZS_CUTOFF_FLAG="$(TZS_CUTOFF_FLAG)" \
+ $(MAKE) TZS_CUTOFF_FLAG="$(TZS_CUTOFF_FLAG)" \
ZDS="$$ZDS" $$ZDS && \
sed 's,^TZ=".*\.dir/,TZ=",' $$ZDS >>$@.out
rm -fr tzs$(TZS_YEAR).dir
mv $@.out $@
-# If $(TZS) exists but 'make check_tzs' fails, a maintainer should inspect the
+# If $(TZS) exists but 'make tzs.ck' fails, a maintainer should inspect the
# failed output and fix the inconsistency, perhaps by running 'make force_tzs'.
$(TZS):
touch $@
@@ -842,7 +844,7 @@ date: $(DATEOBJS)
$(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(DATEOBJS) $(LDLIBS)
tzselect: tzselect.ksh version
- VERSION=`cat version` && sed \
+ read -r VERSION <version && sed \
-e "s'#!/bin/bash'#!"'$(KSHELL)'\' \
-e s\''\(AWK\)=[^}]*'\''\1=\'\''$(AWK)\'\'\' \
-e s\''\(PKGVERSION\)=.*'\''\1=\'\''($(PACKAGE)) \'\'\' \
@@ -853,11 +855,11 @@ tzselect: tzselect.ksh version
chmod +x $@.out
mv $@.out $@
-check: check_back check_mild
-check_mild: check_character_set check_white_space check_links \
- check_name_lengths check_now \
- check_slashed_abbrs check_sorted \
- check_tables check_web check_ziguard check_zishrink check_tzs
+check: check_mild back.ck
+check_mild: check_web check_zishrink \
+ character-set.ck white-space.ck links.ck mainguard.ck \
+ name-lengths.ck now.ck slashed-abbrs.ck sorted.ck \
+ tables.ck ziguard.ck tzs.ck
# True if UTF8_LOCALE does not work;
# otherwise, false but with LC_ALL set to $(UTF8_LOCALE).
@@ -865,9 +867,9 @@ UTF8_LOCALE_MISSING = \
{ test ! '$(UTF8_LOCALE)' \
|| ! printf 'A\304\200B\n' \
| LC_ALL='$(UTF8_LOCALE)' grep -q '^A.B$$' >/dev/null 2>&1 \
- || { LC_ALL='$(UTF8_LOCALE)'; export LC_ALL; false; }; }
+ || { export LC_ALL='$(UTF8_LOCALE)'; false; }; }
-check_character_set: $(ENCHILADA)
+character-set.ck: $(ENCHILADA)
$(UTF8_LOCALE_MISSING) || { \
sharp='#' && \
! grep -Env $(SAFE_LINE) $(MANS) date.1 $(MANTXTS) \
@@ -882,48 +884,55 @@ check_character_set: $(ENCHILADA)
}
touch $@
-check_white_space: $(ENCHILADA)
+white-space.ck: $(ENCHILADA)
$(UTF8_LOCALE_MISSING) || { \
- patfmt=' \t|[\f\r\v]' && pat=`printf "$$patfmt\\n"` && \
+ enchilada='$(ENCHILADA)' && \
+ patfmt=' \t|[\f\r\v]' && pat=$$(printf "$$patfmt\\n") && \
! grep -En "$$pat|[$s]\$$" \
- $$(ls $(ENCHILADA) | grep -Fvx leap-seconds.list); \
+ $${enchilada%leap-seconds.list*} \
+ $${enchilada#*leap-seconds.list}; \
}
touch $@
PRECEDES_FILE_NAME = ^(Zone|Link[$s]+[^$s]+)[$s]+
FILE_NAME_COMPONENT_TOO_LONG = $(PRECEDES_FILE_NAME)[^$s]*[^/$s]{15}
-check_name_lengths: $(TDATA_TO_CHECK) backzone
- ! grep -En '$(FILE_NAME_COMPONENT_TOO_LONG)' \
+name-lengths.ck: $(TDATA_TO_CHECK) backzone
+ :;! grep -En '$(FILE_NAME_COMPONENT_TOO_LONG)' \
$(TDATA_TO_CHECK) backzone
touch $@
+mainguard.ck: main.zi
+ test '$(PACKRATLIST)' || \
+ cat $(TDATA) $(PACKRATDATA) | diff -u - main.zi
+ touch $@
+
PRECEDES_STDOFF = ^(Zone[$s]+[^$s]+)?[$s]+
STDOFF = [-+]?[0-9:.]+
RULELESS_SAVE = (-|$(STDOFF)[sd]?)
RULELESS_SLASHED_ABBRS = \
$(PRECEDES_STDOFF)$(STDOFF)[$s]+$(RULELESS_SAVE)[$s]+[^$s]*/
-check_slashed_abbrs: $(TDATA_TO_CHECK)
- ! grep -En '$(RULELESS_SLASHED_ABBRS)' $(TDATA_TO_CHECK)
+slashed-abbrs.ck: $(TDATA_TO_CHECK)
+ :;! grep -En '$(RULELESS_SLASHED_ABBRS)' $(TDATA_TO_CHECK)
touch $@
CHECK_CC_LIST = { n = split($$1,a,/,/); for (i=2; i<=n; i++) print a[1], a[i]; }
-check_sorted: backward backzone
+sorted.ck: backward backzone
$(AWK) '/^Link/ {printf "%.5d %s\n", g, $$3} !/./ {g++}' \
backward | LC_ALL=C sort -cu
- $(AWK) '/^Zone/ {print $$2}' backzone | LC_ALL=C sort -cu
+ $(AWK) '/^Zone.*\// {print $$2}' backzone | LC_ALL=C sort -cu
touch $@
-check_back: checklinks.awk $(TDATA_TO_CHECK)
+back.ck: checklinks.awk $(TDATA_TO_CHECK)
$(AWK) \
-v DATAFORM=$(DATAFORM) \
-v backcheck=backward \
-f checklinks.awk $(TDATA_TO_CHECK)
touch $@
-check_links: checklinks.awk tzdata.zi
+links.ck: checklinks.awk tzdata.zi
$(AWK) \
-v DATAFORM=$(DATAFORM) \
-f checklinks.awk tzdata.zi
@@ -932,26 +941,36 @@ check_links: checklinks.awk tzdata.zi
# Check timestamps from now through 28 years from now, to make sure
# that zonenow.tab contains all sequences of planned timestamps,
# without any duplicate sequences. In theory this might require
-# 2800 years but that would take a long time to check.
-CHECK_NOW_TIMESTAMP = `./date +%s`
+# 2800+ years but that would take a long time to check.
+CHECK_NOW_TIMESTAMP = $$(./date +%s)
CHECK_NOW_FUTURE_YEARS = 28
-CHECK_NOW_FUTURE_SECS = $(CHECK_NOW_FUTURE_YEARS) '*' 366 '*' 24 '*' 60 '*' 60
-check_now: checknow.awk date tzdata.zi zdump zic zone1970.tab zonenow.tab
- rm -fr $@.dir
- mkdir $@.dir
- ./zic -d $@.dir tzdata.zi
+CHECK_NOW_FUTURE_SECS = $(CHECK_NOW_FUTURE_YEARS) * 366 * 24 * 60 * 60
+now.ck: checknow.awk date tzdata.zi zdump zic zone1970.tab zonenow.tab
+ rm -fr $@d
+ mkdir $@d
+ ./zic -d $@d tzdata.zi
now=$(CHECK_NOW_TIMESTAMP) && \
- future=`expr $(CHECK_NOW_FUTURE_SECS) + $$now` && \
+ future=$$(($(CHECK_NOW_FUTURE_SECS) + $$now)) && \
./zdump -i -t $$now,$$future \
- $$(find $$PWD/$@.dir/????*/ -type f) \
- >$@.dir/zdump.tab
+ $$(find "$$PWD/$@d"/????*/ -type f) \
+ >$@d/zdump-now.tab && \
+ ./zdump -i -t 0,$$future \
+ $$(find "$$PWD/$@d" -name Etc -prune \
+ -o -type f ! -name '*.tab' -print) \
+ >$@d/zdump-1970.tab
$(AWK) \
- -v zdump_table=$@.dir/zdump.tab \
+ -v zdump_table=$@d/zdump-now.tab \
-f checknow.awk zonenow.tab
- rm -fr $@.dir
+ $(AWK) \
+ 'BEGIN {print "-\t-\tUTC"} /^Zone/ {print "-\t-\t" $$2}' \
+ $(PRIMARY_YDATA) backward factory | \
+ $(AWK) \
+ -v zdump_table=$@d/zdump-1970.tab \
+ -f checknow.awk
+ rm -fr $@d
touch $@
-check_tables: checktab.awk $(YDATA) backward zone.tab zone1970.tab
+tables.ck: checktab.awk $(YDATA) backward zone.tab zone1970.tab
for tab in $(ZONETABLES); do \
test "$$tab" = zone.tab && links='$(BACKWARD)' || links=''; \
$(AWK) -f checktab.awk -v zone_table=$$tab $(YDATA) $$links \
@@ -959,26 +978,24 @@ check_tables: checktab.awk $(YDATA) backward zone.tab zone1970.tab
done
touch $@
-check_tzs: $(TZS) $(TZS_NEW)
+tzs.ck: $(TZS) $(TZS_NEW)
if test -s $(TZS); then \
- $(DIFF_TZS) $(TZS) $(TZS_NEW); \
+ $(SETUP_DIFF_TZS) && $$DIFF_TZS $(TZS) $(TZS_NEW); \
else \
cp $(TZS_NEW) $(TZS); \
fi
touch $@
check_web: $(CHECK_WEB_PAGES)
-check_theory.html: theory.html
-check_tz-art.html: tz-art.html
-check_tz-how-to.html: tz-how-to.html
-check_tz-link.html: tz-link.html
-check_theory.html check_tz-art.html check_tz-how-to.html check_tz-link.html:
- $(CURL) -sS --url https://validator.w3.org/nu/ -F out=gnu \
- -F file=@$$(expr $@ : 'check_\(.*\)') -o $@.out && \
+.SUFFIXES: .ck .html
+.html.ck:
+ { ! ($(CURL) --version) >/dev/null 2>&1 || \
+ $(CURL) -sS --url https://validator.w3.org/nu/ -F out=gnu \
+ -F file=@$<; } >$@.out && \
test ! -s $@.out || { cat $@.out; exit 1; }
mv $@.out $@
-check_ziguard: rearguard.zi vanguard.zi ziguard.awk
+ziguard.ck: rearguard.zi vanguard.zi ziguard.awk
$(AWK) -v DATAFORM=rearguard -f ziguard.awk vanguard.zi | \
diff -u rearguard.zi -
$(AWK) -v DATAFORM=vanguard -f ziguard.awk rearguard.zi | \
@@ -987,36 +1004,35 @@ check_ziguard: rearguard.zi vanguard.zi ziguard.awk
# Check that zishrink.awk does not alter the data, and that ziguard.awk
# preserves main-format data.
-check_zishrink: check_zishrink_posix check_zishrink_right
-check_zishrink_posix check_zishrink_right: \
+check_zishrink: zishrink-posix.ck zishrink-right.ck
+zishrink-posix.ck zishrink-right.ck: \
zic leapseconds $(PACKRATDATA) $(PACKRATLIST) \
$(TDATA) $(DATAFORM).zi tzdata.zi
- rm -fr $@.dir $@-t.dir $@-shrunk.dir
- mkdir $@.dir $@-t.dir $@-shrunk.dir
+ rm -fr $@d t-$@d shrunk-$@d
+ mkdir $@d t-$@d shrunk-$@d
case $@ in \
- *_right) leap='-L leapseconds';; \
+ *right*) leap='-L leapseconds';; \
*) leap=;; \
esac && \
- $(ZIC) $$leap -d $@.dir $(DATAFORM).zi && \
- $(ZIC) $$leap -d $@-shrunk.dir tzdata.zi && \
+ $(ZIC) $$leap -d $@d $(DATAFORM).zi && \
+ $(ZIC) $$leap -d shrunk-$@d tzdata.zi && \
case $(DATAFORM),$(PACKRATLIST) in \
main,) \
- $(ZIC) $$leap -d $@-t.dir $(TDATA) && \
+ $(ZIC) $$leap -d t-$@d $(TDATA) && \
$(AWK) '/^Rule/' $(TDATA) | \
- $(ZIC) $$leap -d $@-t.dir - $(PACKRATDATA) && \
- diff -r $@.dir $@-t.dir;; \
+ $(ZIC) $$leap -d t-$@d - $(PACKRATDATA) && \
+ diff -r $@d t-$@d;; \
esac
- diff -r $@.dir $@-shrunk.dir
- rm -fr $@.dir $@-t.dir $@-shrunk.dir
+ diff -r $@d shrunk-$@d
+ rm -fr $@d t-$@d shrunk-$@d
touch $@
clean_misc:
- rm -fr check_*.dir typecheck_*.dir
- rm -f *.o *.out $(TIME_T_ALTERNATIVES) \
- check_* core typecheck_* \
+ rm -fr *.ckd *.dir
+ rm -f *.ck *.core *.o *.out core core.* \
date tzdir.h tzselect version.h zdump zic libtz.a
clean: clean_misc
- rm -fr *.dir tzdb-*/
+ rm -fr tzdb-*/
rm -f *.zi $(TZS_NEW)
maintainer-clean: clean
@@ -1027,7 +1043,7 @@ maintainer-clean: clean
names:
@echo $(ENCHILADA)
-public: check check_public $(CHECK_TIME_T_ALTERNATIVES) \
+public: check public.ck $(CHECK_TIME_T_ALTERNATIVES) \
tarballs signatures
date.1.txt: date.1
@@ -1041,7 +1057,7 @@ zdump.8.txt: zdump.8
zic.8.txt: zic.8
$(MANTXTS): workman.sh
- LC_ALL=C sh workman.sh `expr $@ : '\(.*\)\.txt$$'` >$@.out
+ LC_ALL=C sh workman.sh $(@:.txt=) >$@.out
mv $@.out $@
# Set file timestamps deterministically if possible,
@@ -1054,13 +1070,13 @@ SET_TIMESTAMP_N = sh -c '\
n=$$0 dest=$$1; shift; \
<"$$dest" && \
if test $$n != 0 && \
- lsout=`ls -nt --time-style="+%s" "$$@" 2>/dev/null`; then \
+ lsout=$$(ls -nt --time-style="+%s" "$$@" 2>/dev/null); then \
set x $$lsout && \
- timestamp=`expr $$7 + $$n` && \
+ timestamp=$$(($$7 + $$n)) && \
echo "+ touch -md @$$timestamp $$dest" && \
touch -md @$$timestamp "$$dest"; \
else \
- newest=`ls -t "$$@" | sed 1q` && \
+ newest=$$(ls -t "$$@" | sed 1q) && \
echo "+ touch -mr $$newest $$dest" && \
touch -mr "$$newest" "$$dest"; \
fi'
@@ -1083,15 +1099,15 @@ SET_TIMESTAMP_DEP = $(SET_TIMESTAMP_N) 1
set-timestamps.out: $(EIGHT_YARDS)
rm -f $@
if (type git) >/dev/null 2>&1 && \
- files=`git ls-files $(EIGHT_YARDS)` && \
+ files=$$(git ls-files $(EIGHT_YARDS)) && \
touch -md @1 test.out; then \
rm -f test.out && \
for file in $$files; do \
if git diff --quiet $$file; then \
- time=`TZ=UTC0 git log -1 \
+ time=$$(TZ=UTC0 git log -1 \
--format='tformat:%cd' \
--date='format:%Y-%m-%dT%H:%M:%SZ' \
- $$file` && \
+ $$file) && \
echo "+ touch -md $$time $$file" && \
touch -md $$time $$file; \
else \
@@ -1100,8 +1116,8 @@ set-timestamps.out: $(EIGHT_YARDS)
done; \
fi
$(SET_TIMESTAMP_DEP) leapseconds $(LEAP_DEPS)
- for file in `ls $(MANTXTS) | sed 's/\.txt$$//'`; do \
- $(SET_TIMESTAMP_DEP) $$file.txt $$file workman.sh || \
+ for file in $(MANTXTS); do \
+ $(SET_TIMESTAMP_DEP) $$file $${file%.txt} workman.sh || \
exit; \
done
$(SET_TIMESTAMP_DEP) version $(VERSION_DEPS)
@@ -1114,30 +1130,29 @@ set-tzs-timestamp.out: $(TZS)
# The zics below ensure that each data file can stand on its own.
# We also do an all-files run to catch links to links.
-check_public: $(VERSION_DEPS)
- rm -fr public.dir
- mkdir public.dir
- ln $(VERSION_DEPS) public.dir
- cd public.dir \
+public.ck: $(VERSION_DEPS)
+ rm -fr $@d
+ mkdir $@d
+ ln $(VERSION_DEPS) $@d
+ cd $@d \
&& $(MAKE) CFLAGS='$(GCC_DEBUG_FLAGS)' TZDIR='$(TZDIR)' ALL
- for i in $(TDATA_TO_CHECK) public.dir/tzdata.zi \
- public.dir/vanguard.zi public.dir/main.zi \
- public.dir/rearguard.zi; \
+ for i in $(TDATA_TO_CHECK) \
+ tzdata.zi vanguard.zi main.zi rearguard.zi; \
do \
- public.dir/zic -v -d public.dir/zoneinfo $$i 2>&1 || exit; \
+ $@d/zic -v -d $@d/zoneinfo $@d/$$i || exit; \
done
- public.dir/zic -v -d public.dir/zoneinfo-all $(TDATA_TO_CHECK)
+ $@d/zic -v -d $@d/zoneinfo-all $(TDATA_TO_CHECK)
:
: Also check 'backzone' syntax.
- rm public.dir/main.zi
- cd public.dir && $(MAKE) PACKRATDATA=backzone main.zi
- public.dir/zic -d public.dir/zoneinfo main.zi
- rm public.dir/main.zi
- cd public.dir && \
+ rm $@d/main.zi
+ cd $@d && $(MAKE) PACKRATDATA=backzone main.zi
+ $@d/zic -d $@d/zoneinfo main.zi
+ rm $@d/main.zi
+ cd $@d && \
$(MAKE) PACKRATDATA=backzone PACKRATLIST=zone.tab main.zi
- public.dir/zic -d public.dir/zoneinfo main.zi
+ $@d/zic -d $@d/zoneinfo main.zi
:
- rm -fr public.dir
+ rm -fr $@d
touch $@
# Check that the code works under various alternative
@@ -1145,46 +1160,47 @@ check_public: $(VERSION_DEPS)
check_time_t_alternatives: $(TIME_T_ALTERNATIVES)
$(TIME_T_ALTERNATIVES_TAIL): $(TIME_T_ALTERNATIVES_HEAD)
$(TIME_T_ALTERNATIVES): $(VERSION_DEPS)
- rm -fr $@.dir
- mkdir $@.dir
- ln $(VERSION_DEPS) $@.dir
+ rm -fr $@d
+ mkdir $@d
+ ln $(VERSION_DEPS) $@d
case $@ in \
- int*32_t) range=-2147483648,2147483648;; \
+ *32_t*) range=-2147483648,2147483648;; \
u*) range=0,4294967296;; \
*) range=-4294967296,4294967296;; \
esac && \
- wd=`pwd` && \
- zones=`$(AWK) '/^[^#]/ { print $$3 }' <zone1970.tab` && \
+ wd=$$PWD && \
+ zones=$$($(AWK) '/^[^#]/ { print $$3 }' <zone1970.tab) && \
if test $@ = $(TIME_T_ALTERNATIVES_HEAD); then \
range_target=; \
else \
range_target=to$$range.tzs; \
fi && \
- (cd $@.dir && \
- $(MAKE) TOPDIR="$$wd/$@.dir" \
- CFLAGS='$(CFLAGS) -Dtime_tz='"'$@'" \
+ (cd $@d && \
+ $(MAKE) TOPDIR="$$wd/$@d" \
+ CFLAGS='$(CFLAGS) -Dtime_tz='"'$(@:.ck=)'" \
REDO='$(REDO)' \
- D=$$wd/$@.dir \
+ D="$$wd/$@d" \
TZS_YEAR="$$range" TZS_CUTOFF_FLAG="-t $$range" \
install $$range_target) && \
test $@ = $(TIME_T_ALTERNATIVES_HEAD) || { \
- (cd $(TIME_T_ALTERNATIVES_HEAD).dir && \
- $(MAKE) TOPDIR="$$wd/$@.dir" \
+ (cd $(TIME_T_ALTERNATIVES_HEAD)d && \
+ $(MAKE) TOPDIR="$$wd/$@d" \
TZS_YEAR="$$range" TZS_CUTOFF_FLAG="-t $$range" \
- D=$$wd/$@.dir \
+ D="$$wd/$@d" \
to$$range.tzs) && \
- $(DIFF_TZS) $(TIME_T_ALTERNATIVES_HEAD).dir/to$$range.tzs \
- $@.dir/to$$range.tzs && \
+ $(SETUP_DIFF_TZS) && \
+ $$DIFF_TZS $(TIME_T_ALTERNATIVES_HEAD)d/to$$range.tzs \
+ $@d/to$$range.tzs && \
if diff -q Makefile Makefile 2>/dev/null; then \
quiet_option='-q'; \
else \
quiet_option=''; \
fi && \
- diff $$quiet_option -r $(TIME_T_ALTERNATIVES_HEAD).dir/etc \
- $@.dir/etc && \
+ diff $$quiet_option -r $(TIME_T_ALTERNATIVES_HEAD)d/etc \
+ $@d/etc && \
diff $$quiet_option -r \
- $(TIME_T_ALTERNATIVES_HEAD).dir/usr/share \
- $@.dir/usr/share; \
+ $(TIME_T_ALTERNATIVES_HEAD)d/usr/share \
+ $@d/usr/share; \
}
touch $@
@@ -1199,7 +1215,7 @@ ALL_ASC = $(TRADITIONAL_ASC) $(REARGUARD_ASC) \
tarballs rearguard_tarballs tailored_tarballs traditional_tarballs \
signatures rearguard_signatures traditional_signatures: \
version set-timestamps.out rearguard.zi vanguard.zi
- VERSION=`cat version` && \
+ read -r VERSION <version && \
$(MAKE) AWK='$(AWK)' VERSION="$$VERSION" $@_version
# These *_version rules are intended for use if VERSION is set by some
@@ -1218,15 +1234,15 @@ rearguard_signatures_version: $(REARGUARD_ASC)
traditional_signatures_version: $(TRADITIONAL_ASC)
tzcode$(VERSION).tar.gz: set-timestamps.out
- LC_ALL=C && export LC_ALL && \
- tar $(TARFLAGS) -cf - \
+ $(SETUP_TAR) && \
+ $$TAR -cf - \
$(COMMON) $(DOCS) $(SOURCES) | \
gzip $(GZIPFLAGS) >$@.out
mv $@.out $@
tzdata$(VERSION).tar.gz: set-timestamps.out
- LC_ALL=C && export LC_ALL && \
- tar $(TARFLAGS) -cf - $(TZDATA_DIST) | \
+ $(SETUP_TAR) && \
+ $$TAR -cf - $(TZDATA_DIST) | \
gzip $(GZIPFLAGS) >$@.out
mv $@.out $@
@@ -1251,9 +1267,9 @@ tzdata$(VERSION)-rearguard.tar.gz: rearguard.zi set-timestamps.out
: The dummy pacificnew pacifies TZUpdater 2.3.1 and earlier.
$(CREATE_EMPTY) $@.dir/pacificnew
touch -mr version $@.dir/version
- LC_ALL=C && export LC_ALL && \
+ $(SETUP_TAR) && \
(cd $@.dir && \
- tar $(TARFLAGS) -cf - \
+ $$TAR -cf - \
$(TZDATA_DIST) pacificnew | \
gzip $(GZIPFLAGS)) >$@.out
mv $@.out $@
@@ -1269,9 +1285,14 @@ tzdata$(VERSION)-tailored.tar.gz: set-timestamps.out
rm -fr $@.dir
mkdir $@.dir
: The dummy pacificnew pacifies TZUpdater 2.3.1 and earlier.
+ if test $(DATAFORM) = vanguard; then \
+ pacificnew=; \
+ else \
+ pacificnew=pacificnew; \
+ fi && \
cd $@.dir && \
$(CREATE_EMPTY) $(PRIMARY_YDATA) $(NDATA) backward \
- `test $(DATAFORM) = vanguard || echo pacificnew`
+ $$pacificnew
(grep '^#' tzdata.zi && echo && cat $(DATAFORM).zi) \
>$@.dir/etcetera
touch -mr tzdata.zi $@.dir/etcetera
@@ -1291,9 +1312,9 @@ tzdata$(VERSION)-tailored.tar.gz: set-timestamps.out
test -f $@.dir/$$file || links="$$links $$file"; \
done && \
ln $$links $@.dir
- LC_ALL=C && export LC_ALL && \
+ $(SETUP_TAR) && \
(cd $@.dir && \
- tar $(TARFLAGS) -cf - * | gzip $(GZIPFLAGS)) >$@.out
+ $$TAR -cf - * | gzip $(GZIPFLAGS)) >$@.out
mv $@.out $@
tzdb-$(VERSION).tar.lz: set-timestamps.out set-tzs-timestamp.out
@@ -1301,8 +1322,8 @@ tzdb-$(VERSION).tar.lz: set-timestamps.out set-tzs-timestamp.out
mkdir tzdb-$(VERSION)
ln $(ENCHILADA) tzdb-$(VERSION)
$(SET_TIMESTAMP) tzdb-$(VERSION) tzdb-$(VERSION)/*
- LC_ALL=C && export LC_ALL && \
- tar $(TARFLAGS) -cf - tzdb-$(VERSION) | lzip -9 >$@.out
+ $(SETUP_TAR) && \
+ $$TAR -cf - tzdb-$(VERSION) | lzip -9 >$@.out
mv $@.out $@
tzcode$(VERSION).tar.gz.asc: tzcode$(VERSION).tar.gz
@@ -1313,22 +1334,21 @@ $(ALL_ASC):
$(GPG) --armor --detach-sign $?
TYPECHECK_CFLAGS = $(CFLAGS) -DTYPECHECK -D__time_t_defined -D_TIME_T
-typecheck: typecheck_long_long typecheck_unsigned
-typecheck_long_long typecheck_unsigned: $(VERSION_DEPS)
- rm -fr $@.dir
- mkdir $@.dir
- ln $(VERSION_DEPS) $@.dir
- cd $@.dir && \
+typecheck: long-long.ck unsigned.ck
+long-long.ck unsigned.ck: $(VERSION_DEPS)
+ rm -fr $@d
+ mkdir $@d
+ ln $(VERSION_DEPS) $@d
+ cd $@d && \
case $@ in \
- *_long_long) i="long long";; \
- *_unsigned ) i="unsigned" ;; \
+ long-long.*) i="long long";; \
+ unsigned.* ) i="unsigned" ;; \
esac && \
- typecheck_cflags='' && \
$(MAKE) \
CFLAGS="$(TYPECHECK_CFLAGS) \"-Dtime_t=$$i\"" \
- TOPDIR="`pwd`" \
+ TOPDIR="$$PWD" \
install
- $@.dir/zdump -i -c 1970,1971 Europe/Rome
+ $@d/zdump -i -c 1970,1971 Europe/Rome
touch $@
zonenames: tzdata.zi
@@ -1347,7 +1367,7 @@ zic.o: private.h tzfile.h tzdir.h version.h
.PHONY: check_web check_zishrink
.PHONY: clean clean_misc commit-leap-seconds.list dummy.zd
.PHONY: fetch-leap-seconds.list force_tzs
-.PHONY: install install_data maintainer-clean names
+.PHONY: install maintainer-clean names
.PHONY: posix_only posix_right public
.PHONY: rearguard_signatures rearguard_signatures_version
.PHONY: rearguard_tarballs rearguard_tarballs_version
diff --git a/NEWS b/NEWS
index d407342a50e6..83b8b8c8d39c 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,125 @@
News for the tz database
+Release 2024b - 2024-09-04 12:27:47 -0700
+
+ Briefly:
+ Improve historical data for Mexico, Mongolia, and Portugal.
+ System V names are now obsolescent.
+ The main data form now uses %z.
+ The code now conforms to RFC 8536 for early timestamps.
+ Support POSIX.1-2024, which removes asctime_r and ctime_r.
+ Assume POSIX.2-1992 or later for shell scripts.
+ SUPPORT_C89 now defaults to 1.
+
+ Changes to past timestamps
+
+ Asia/Choibalsan is now an alias for Asia/Ulaanbaatar rather than
+ being a separate Zone with differing behavior before April 2008.
+ This seems better given our wildly conflicting information about
+ Mongolia's time zone history. (Thanks to Heitor David Pinto.)
+
+ Historical transitions for Mexico have been updated based on
+ official Mexican decrees. The affected timestamps occur during
+ the years 1921-1927, 1931, 1945, 1949-1970, and 1981-1997.
+ The affected zones are America/Bahia_Banderas, America/Cancun,
+ America/Chihuahua, America/Ciudad_Juarez, America/Hermosillo,
+ America/Mazatlan, America/Merida, America/Mexico_City,
+ America/Monterrey, America/Ojinaga, and America/Tijuana.
+ (Thanks to Heitor David Pinto.)
+
+ Historical transitions for Portugal, represented by Europe/Lisbon,
+ Atlantic/Azores, and Atlantic/Madeira, have been updated based on a
+ close reading of old Portuguese legislation, replacing previous data
+ mainly originating from Whitman and Shanks & Pottenger. These
+ changes affect a few transitions in 1917-1921, 1924, and 1940
+ throughout these regions by a few hours or days, and various
+ timestamps between 1977 and 1993 depending on the region. In
+ particular, the Azores and Madeira did not observe DST from 1977 to
+ 1981. Additionally, the adoption of standard zonal time in former
+ Portuguese colonies have been adjusted: Africa/Maputo in 1909, and
+ Asia/Dili by 22 minutes at the start of 1912.
+ (Thanks to Tim Parenti.)
+
+ Changes to past tm_isdst flags
+
+ The period from 1966-04-03 through 1966-10-02 in Portugal is now
+ modeled as DST, to more closely reflect how contemporaneous changes
+ in law entered into force.
+
+ Changes to data
+
+ Names present only for compatibility with UNIX System V
+ (last released in the 1990s) have been moved to 'backward'.
+ These names, which for post-1970 timestamps mostly just duplicate
+ data of geographical names, were confusing downstream uses.
+ Names moved to 'backward' are now links to geographical names.
+ This affects behavior for TZ='EET' for some pre-1981 timestamps,
+ for TZ='CET' for some pre-1947 timestamps, and for TZ='WET' for
+ some pre-1996 timestamps. Also, TZ='MET' now behaves like
+ TZ='CET' and so uses the abbreviation "CET" rather than "MET".
+ Those needing the previous TZDB behavior, which does not match any
+ real-world clocks, can find the old entries in 'backzone'.
+ (Problem reported by Justin Grant.)
+
+ The main source files' time zone abbreviations now use %z,
+ supported by zic since release 2015f and used in vanguard form
+ since release 2022b. For example, America/Sao_Paulo now contains
+ the zone continuation line "-3:00 Brazil %z", which is less error
+ prone than the old "-3:00 Brazil -03/-02". This does not change
+ the represented data: the generated TZif files are unchanged.
+ Rearguard form still avoids %z, to support obsolescent parsers.
+
+ Asia/Almaty has been removed from zonenow.tab as it now agrees
+ with Asia/Tashkent for future timestamps, due to Kazakhstan's
+ 2024-02-29 time zone change. Similarly, America/Scoresbysund
+ has been removed, as it now agrees with America/Nuuk due to
+ its 2024-03-31 time zone change.
+
+ Changes to code
+
+ localtime.c now always uses a TZif file's time type 0 to handle
+ timestamps before the file's first transition. Formerly,
+ localtime.c sometimes inferred a different time type, in order to
+ handle problematic data generated by zic 2018e or earlier. As it
+ is now safe to assume more recent versions of zic, there is no
+ longer a pressing need to fail to conform RFC 8536 section 3.2,
+ which requires using time type 0 in this situation. This change
+ does not affect behavior when reading TZif files generated by zic
+ 2018f and later.
+
+ POSIX.1-2024 removes asctime_r and ctime_r and does not let
+ libraries define them, so remove them except when needed to
+ conform to earlier POSIX. These functions are dangerous as they
+ can overrun user buffers. If you still need them, add
+ -DSUPPORT_POSIX2008 to CFLAGS.
+
+ The SUPPORT_C89 option now defaults to 1 instead of 0, fixing a
+ POSIX-conformance bug introduced in 2023a.
+
+ tzselect now supports POSIX.1-2024 proleptic TZ strings. Also, it
+ assumes POSIX.2-1992 or later, as practical porting targets now
+ all support that, and it uses some features from POSIX.1-2024 if
+ available.
+
+ Changes to build procedure
+
+ 'make check' no longer requires curl and Internet access.
+
+ The build procedure now assumes POSIX.2-1992 or later, to simplify
+ maintenance. To build on Solaris 10, the only extant system still
+ defaulting to pre-POSIX, prepend /usr/xpg4/bin to PATH.
+
+ Changes to documentation
+
+ The documentation now reflects POSIX.1-2024.
+
+ Changes to commentary
+
+ Commentary about historical transitions in Portugal and her former
+ colonies has been expanded with links to many relevant legislation.
+ (Thanks to Tim Parenti.)
+
+
Release 2024a - 2024-02-01 09:28:56 -0800
Briefly:
@@ -161,7 +281,7 @@ Release 2023d - 2023-12-21 20:02:24 -0800
* It uses the special .POSIX target.
* It quotes special characters more carefully.
* It no longer mishandles builds in an ISO 8859 locale.
- Due to the CC changes, TZDIR is now #defined in a file tzfile.h
+ Due to the CC changes, TZDIR is now #defined in a file tzdir.h
built by 'make', not in a $(CC) -D option. Also, TZDEFAULT is
now treated like TZDIR as they have similar roles.
@@ -283,7 +403,7 @@ Release 2023a - 2023-03-22 12:39:33 -0700
To improve tzselect diagnostics, zone1970.tab's comments column is
now limited to countries that have multiple timezones.
- Note that leap seconds are planned to be discontinued by 2035.
+ Note that there are plans to discontinue leap seconds by 2035.
Release 2022g - 2022-11-29 08:58:31 -0800
diff --git a/africa b/africa
index 92d823a0515c..fd6c44aaa5b7 100644
--- a/africa
+++ b/africa
@@ -103,17 +103,16 @@ Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 16
# Cape Verde / Cabo Verde
#
-# From Paul Eggert (2018-02-16):
-# Shanks gives 1907 for the transition to +02.
-# For now, ignore that and follow the 1911-05-26 Portuguese decree
-# (see Europe/Lisbon).
+# From Tim Parenti (2024-07-01), per Paul Eggert (2018-02-16):
+# For timestamps before independence, see commentary for Europe/Lisbon.
+# Shanks gives 1907 instead for the transition to -02.
#
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Atlantic/Cape_Verde -1:34:04 - LMT 1912 Jan 01 2:00u # Praia
- -2:00 - -02 1942 Sep
- -2:00 1:00 -01 1945 Oct 15
- -2:00 - -02 1975 Nov 25 2:00
- -1:00 - -01
+ -2:00 - %z 1942 Sep
+ -2:00 1:00 %z 1945 Oct 15
+ -2:00 - %z 1975 Nov 25 2:00
+ -1:00 - %z
# Chad
# Zone NAME STDOFF RULES FORMAT [UNTIL]
@@ -345,14 +344,12 @@ Zone Africa/Cairo 2:05:09 - LMT 1900 Oct
# Guinea-Bissau
#
-# From Paul Eggert (2018-02-16):
-# Shanks gives 1911-05-26 for the transition to WAT,
-# evidently confusing the date of the Portuguese decree
-# (see Europe/Lisbon) with the date that it took effect.
+# From Tim Parenti (2024-07-01), per Paul Eggert (2018-02-16):
+# For timestamps before independence, see commentary for Europe/Lisbon.
#
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1 1:00u
- -1:00 - -01 1975
+ -1:00 - %z 1975
0:00 - GMT
# Comoros
@@ -417,10 +414,10 @@ Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1 1:00u
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Africa/Nairobi 2:27:16 - LMT 1908 May
- 2:30 - +0230 1928 Jun 30 24:00
+ 2:30 - %z 1928 Jun 30 24:00
3:00 - EAT 1930 Jan 4 24:00
- 2:30 - +0230 1936 Dec 31 24:00
- 2:45 - +0245 1942 Jul 31 24:00
+ 2:30 - %z 1936 Dec 31 24:00
+ 2:45 - %z 1942 Jul 31 24:00
3:00 - EAT
# Liberia
@@ -591,7 +588,7 @@ Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 -
Rule Mauritius 2009 only - Mar lastSun 2:00 0 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
- 4:00 Mauritius +04/+05
+ 4:00 Mauritius %z
# Agalega Is, Rodriguez
# no information; probably like Indian/Mauritius
@@ -1071,10 +1068,10 @@ Rule Morocco 2087 only - May 11 2:00 0 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
- 0:00 Morocco +00/+01 1984 Mar 16
- 1:00 - +01 1986
- 0:00 Morocco +00/+01 2018 Oct 28 3:00
- 1:00 Morocco +01/+00
+ 0:00 Morocco %z 1984 Mar 16
+ 1:00 - %z 1986
+ 0:00 Morocco %z 2018 Oct 28 3:00
+ 1:00 Morocco %z
# Western Sahara
#
@@ -1088,9 +1085,9 @@ Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
# since most of it was then controlled by Morocco.
Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan # El Aaiún
- -1:00 - -01 1976 Apr 14
- 0:00 Morocco +00/+01 2018 Oct 28 3:00
- 1:00 Morocco +01/+00
+ -1:00 - %z 1976 Apr 14
+ 0:00 Morocco %z 2018 Oct 28 3:00
+ 1:00 Morocco %z
# Botswana
# Burundi
@@ -1101,13 +1098,27 @@ Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan # El Aaiún
# Zambia
# Zimbabwe
#
-# Shanks gives 1903-03-01 for the transition to CAT.
-# Perhaps the 1911-05-26 Portuguese decree
-# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
-# merely made it official?
+# From Tim Parenti (2024-07-01):
+# For timestamps before Mozambique's independence, see commentary for
+# Europe/Lisbon.
+#
+# From Paul Eggert (2024-05-24):
+# The London Gazette, 1903-04-03, page 2245, says that
+# as of 1903-03-03 a time ball at the port of Lourenço Marques
+# (as Maputo was then called) was dropped daily at 13:00:00 LMT,
+# corresponding to 22:49:41.7 GMT, so local time was +02:10:18.3.
+# Conversely, the newspaper South Africa, 1909-02-09, page 321,
+# says the port had just installed an apparatus that communicated
+# "from the controlling clock in the new Observatory at Reuben Point ...
+# exact mean South African time, i.e., 30 deg., or 2 hours East of Greenwich".
+# Although Shanks gives 1903-03-01 for the transition to CAT,
+# evidently the port transitioned to CAT after 1903-03-03 but before
+# the Portuguese legal transition of 1912-01-01 (see Europe/Lisbon commentary).
+# For lack of better info, list 1909 as the transition date.
#
# Zone NAME STDOFF RULES FORMAT [UNTIL]
-Zone Africa/Maputo 2:10:20 - LMT 1903 Mar
+ #STDOFF 2:10:18.3
+Zone Africa/Maputo 2:10:18 - LMT 1909
2:00 - CAT
# Namibia
@@ -1172,7 +1183,7 @@ Rule Namibia 1995 2017 - Apr Sun>=1 2:00 -1:00 WAT
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
- 1:30 - +0130 1903 Mar
+ 1:30 - %z 1903 Mar
2:00 - SAST 1942 Sep 20 2:00
2:00 1:00 SAST 1943 Mar 21 2:00
2:00 - SAST 1990 Mar 21 # independence
@@ -1260,7 +1271,7 @@ Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
Zone Africa/Lagos 0:13:35 - LMT 1905 Jul 1
0:00 - GMT 1908 Jul 1
0:13:35 - LMT 1914 Jan 1
- 0:30 - +0030 1919 Sep 1
+ 0:30 - %z 1919 Sep 1
1:00 - WAT
# São Tomé and Príncipe
diff --git a/antarctica b/antarctica
index 763c27253c99..8d5d6cd1cdd0 100644
--- a/antarctica
+++ b/antarctica
@@ -87,34 +87,34 @@
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Antarctica/Casey 0 - -00 1969
- 8:00 - +08 2009 Oct 18 2:00
- 11:00 - +11 2010 Mar 5 2:00
- 8:00 - +08 2011 Oct 28 2:00
- 11:00 - +11 2012 Feb 21 17:00u
- 8:00 - +08 2016 Oct 22
- 11:00 - +11 2018 Mar 11 4:00
- 8:00 - +08 2018 Oct 7 4:00
- 11:00 - +11 2019 Mar 17 3:00
- 8:00 - +08 2019 Oct 4 3:00
- 11:00 - +11 2020 Mar 8 3:00
- 8:00 - +08 2020 Oct 4 0:01
- 11:00 - +11 2021 Mar 14 0:00
- 8:00 - +08 2021 Oct 3 0:01
- 11:00 - +11 2022 Mar 13 0:00
- 8:00 - +08 2022 Oct 2 0:01
- 11:00 - +11 2023 Mar 9 3:00
- 8:00 - +08
+ 8:00 - %z 2009 Oct 18 2:00
+ 11:00 - %z 2010 Mar 5 2:00
+ 8:00 - %z 2011 Oct 28 2:00
+ 11:00 - %z 2012 Feb 21 17:00u
+ 8:00 - %z 2016 Oct 22
+ 11:00 - %z 2018 Mar 11 4:00
+ 8:00 - %z 2018 Oct 7 4:00
+ 11:00 - %z 2019 Mar 17 3:00
+ 8:00 - %z 2019 Oct 4 3:00
+ 11:00 - %z 2020 Mar 8 3:00
+ 8:00 - %z 2020 Oct 4 0:01
+ 11:00 - %z 2021 Mar 14 0:00
+ 8:00 - %z 2021 Oct 3 0:01
+ 11:00 - %z 2022 Mar 13 0:00
+ 8:00 - %z 2022 Oct 2 0:01
+ 11:00 - %z 2023 Mar 9 3:00
+ 8:00 - %z
Zone Antarctica/Davis 0 - -00 1957 Jan 13
- 7:00 - +07 1964 Nov
+ 7:00 - %z 1964 Nov
0 - -00 1969 Feb
- 7:00 - +07 2009 Oct 18 2:00
- 5:00 - +05 2010 Mar 10 20:00u
- 7:00 - +07 2011 Oct 28 2:00
- 5:00 - +05 2012 Feb 21 20:00u
- 7:00 - +07
+ 7:00 - %z 2009 Oct 18 2:00
+ 5:00 - %z 2010 Mar 10 20:00u
+ 7:00 - %z 2011 Oct 28 2:00
+ 5:00 - %z 2012 Feb 21 20:00u
+ 7:00 - %z
Zone Antarctica/Mawson 0 - -00 1954 Feb 13
- 6:00 - +06 2009 Oct 18 2:00
- 5:00 - +05
+ 6:00 - %z 2009 Oct 18 2:00
+ 5:00 - %z
# References:
# Casey Weather (1998-02-26)
# http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html
@@ -290,10 +290,10 @@ Zone Antarctica/Troll 0 - -00 2005 Feb 12
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Antarctica/Vostok 0 - -00 1957 Dec 16
- 7:00 - +07 1994 Feb
+ 7:00 - %z 1994 Feb
0 - -00 1994 Nov
- 7:00 - +07 2023 Dec 18 2:00
- 5:00 - +05
+ 7:00 - %z 2023 Dec 18 2:00
+ 5:00 - %z
# S Africa - year-round bases
# Marion Island, -4653+03752
@@ -326,7 +326,7 @@ Zone Antarctica/Vostok 0 - -00 1957 Dec 16
#
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Antarctica/Rothera 0 - -00 1976 Dec 1
- -3:00 - -03
+ -3:00 - %z
# Uruguay - year round base
# Artigas, King George Island, -621104-0585107
diff --git a/asia b/asia
index 05683b9ebaa3..a2480b021225 100644
--- a/asia
+++ b/asia
@@ -83,8 +83,8 @@ Rule RussiaAsia 1996 2010 - Oct lastSun 2:00s 0 -
# Afghanistan
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Kabul 4:36:48 - LMT 1890
- 4:00 - +04 1945
- 4:30 - +0430
+ 4:00 - %z 1945
+ 4:30 - %z
# Armenia
# From Paul Eggert (2006-03-22):
@@ -116,12 +116,12 @@ Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 -
Rule Armenia 2011 only - Oct lastSun 2:00s 0 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
- 3:00 - +03 1957 Mar
- 4:00 RussiaAsia +04/+05 1991 Mar 31 2:00s
- 3:00 RussiaAsia +03/+04 1995 Sep 24 2:00s
- 4:00 - +04 1997
- 4:00 RussiaAsia +04/+05 2011
- 4:00 Armenia +04/+05
+ 3:00 - %z 1957 Mar
+ 4:00 RussiaAsia %z 1991 Mar 31 2:00s
+ 3:00 RussiaAsia %z 1995 Sep 24 2:00s
+ 4:00 - %z 1997
+ 4:00 RussiaAsia %z 2011
+ 4:00 Armenia %z
# Azerbaijan
@@ -142,12 +142,12 @@ Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 -
Rule Azer 1997 2015 - Oct lastSun 5:00 0 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Baku 3:19:24 - LMT 1924 May 2
- 3:00 - +03 1957 Mar
- 4:00 RussiaAsia +04/+05 1991 Mar 31 2:00s
- 3:00 RussiaAsia +03/+04 1992 Sep lastSun 2:00s
- 4:00 - +04 1996
- 4:00 EUAsia +04/+05 1997
- 4:00 Azer +04/+05
+ 3:00 - %z 1957 Mar
+ 4:00 RussiaAsia %z 1991 Mar 31 2:00s
+ 3:00 RussiaAsia %z 1992 Sep lastSun 2:00s
+ 4:00 - %z 1996
+ 4:00 EUAsia %z 1997
+ 4:00 Azer %z
# Bangladesh
# From Alexander Krivenyshev (2009-05-13):
@@ -228,17 +228,17 @@ Rule Dhaka 2009 only - Dec 31 24:00 0 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Dhaka 6:01:40 - LMT 1890
5:53:20 - HMT 1941 Oct # Howrah Mean Time?
- 6:30 - +0630 1942 May 15
- 5:30 - +0530 1942 Sep
- 6:30 - +0630 1951 Sep 30
- 6:00 - +06 2009
- 6:00 Dhaka +06/+07
+ 6:30 - %z 1942 May 15
+ 5:30 - %z 1942 Sep
+ 6:30 - %z 1951 Sep 30
+ 6:00 - %z 2009
+ 6:00 Dhaka %z
# Bhutan
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Thimphu 5:58:36 - LMT 1947 Aug 15 # or Thimbu
- 5:30 - +0530 1987 Oct
- 6:00 - +06
+ 5:30 - %z 1987 Oct
+ 6:00 - %z
# British Indian Ocean Territory
# Whitman and the 1995 CIA time zone map say 5:00, but the
@@ -248,8 +248,8 @@ Zone Asia/Thimphu 5:58:36 - LMT 1947 Aug 15 # or Thimbu
# then contained the Chagos Archipelago).
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Indian/Chagos 4:49:40 - LMT 1907
- 5:00 - +05 1996
- 6:00 - +06
+ 5:00 - %z 1996
+ 6:00 - %z
# Cocos (Keeling) Islands
# Myanmar (Burma)
@@ -265,9 +265,9 @@ Zone Indian/Chagos 4:49:40 - LMT 1907
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Yangon 6:24:47 - LMT 1880 # or Rangoon
6:24:47 - RMT 1920 # Rangoon local time
- 6:30 - +0630 1942 May
- 9:00 - +09 1945 May 3
- 6:30 - +0630
+ 6:30 - %z 1942 May
+ 9:00 - %z 1945 May 3
+ 6:30 - %z
# China
@@ -656,7 +656,7 @@ Zone Asia/Shanghai 8:05:43 - LMT 1901
# Xinjiang time, used by many in western China; represented by Ürümqi / Ürümchi
# / Wulumuqi. (Please use Asia/Shanghai if you prefer Beijing time.)
Zone Asia/Urumqi 5:50:20 - LMT 1928
- 6:00 - +06
+ 6:00 - %z
# Hong Kong
@@ -1114,7 +1114,7 @@ Rule Macau 1979 only - Oct Sun>=16 03:30 0 S
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Macau 7:34:10 - LMT 1904 Oct 30
8:00 - CST 1941 Dec 21 23:00
- 9:00 Macau +09/+10 1945 Sep 30 24:00
+ 9:00 Macau %z 1945 Sep 30 24:00
8:00 Macau C%sT
@@ -1157,7 +1157,7 @@ Zone Asia/Nicosia 2:13:28 - LMT 1921 Nov 14
Zone Asia/Famagusta 2:15:48 - LMT 1921 Nov 14
2:00 Cyprus EE%sT 1998 Sep
2:00 EUAsia EE%sT 2016 Sep 8
- 3:00 - +03 2017 Oct 29 1:00u
+ 3:00 - %z 2017 Oct 29 1:00u
2:00 EUAsia EE%sT
# Georgia
@@ -1198,18 +1198,25 @@ Zone Asia/Famagusta 2:15:48 - LMT 1921 Nov 14
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Tbilisi 2:59:11 - LMT 1880
2:59:11 - TBMT 1924 May 2 # Tbilisi Mean Time
- 3:00 - +03 1957 Mar
- 4:00 RussiaAsia +04/+05 1991 Mar 31 2:00s
- 3:00 RussiaAsia +03/+04 1992
- 3:00 E-EurAsia +03/+04 1994 Sep lastSun
- 4:00 E-EurAsia +04/+05 1996 Oct lastSun
- 4:00 1:00 +05 1997 Mar lastSun
- 4:00 E-EurAsia +04/+05 2004 Jun 27
- 3:00 RussiaAsia +03/+04 2005 Mar lastSun 2:00
- 4:00 - +04
+ 3:00 - %z 1957 Mar
+ 4:00 RussiaAsia %z 1991 Mar 31 2:00s
+ 3:00 RussiaAsia %z 1992
+ 3:00 E-EurAsia %z 1994 Sep lastSun
+ 4:00 E-EurAsia %z 1996 Oct lastSun
+ 4:00 1:00 %z 1997 Mar lastSun
+ 4:00 E-EurAsia %z 2004 Jun 27
+ 3:00 RussiaAsia %z 2005 Mar lastSun 2:00
+ 4:00 - %z
# East Timor
+# From Tim Parenti (2024-07-01):
+# The 1912-01-01 transition occurred at 00:00 new time, per the 1911-05-24
+# Portuguese decree (see Europe/Lisbon). A provision in article 5(c) of the
+# decree prescribed that Timor "will keep counting time in harmony with
+# neighboring foreign colonies, [for] as long as they do not adopt the time
+# that belongs to them in [the Washington Convention] system."
+
# See Indonesia for the 1945 transition.
# From João Carrascalão, brother of the former governor of East Timor, in
@@ -1233,11 +1240,11 @@ Zone Asia/Tbilisi 2:59:11 - LMT 1880
# midnight on Saturday, September 16.
# Zone NAME STDOFF RULES FORMAT [UNTIL]
-Zone Asia/Dili 8:22:20 - LMT 1912 Jan 1
- 8:00 - +08 1942 Feb 21 23:00
- 9:00 - +09 1976 May 3
- 8:00 - +08 2000 Sep 17 0:00
- 9:00 - +09
+Zone Asia/Dili 8:22:20 - LMT 1911 Dec 31 16:00u
+ 8:00 - %z 1942 Feb 21 23:00
+ 9:00 - %z 1976 May 3
+ 8:00 - %z 2000 Sep 17 0:00
+ 9:00 - %z
# India
@@ -1303,9 +1310,9 @@ Zone Asia/Kolkata 5:53:28 - LMT 1854 Jun 28 # Kolkata
5:53:20 - HMT 1870 # Howrah Mean Time?
5:21:10 - MMT 1906 Jan 1 # Madras local time
5:30 - IST 1941 Oct
- 5:30 1:00 +0630 1942 May 15
+ 5:30 1:00 %z 1942 May 15
5:30 - IST 1942 Sep
- 5:30 1:00 +0630 1945 Oct 15
+ 5:30 1:00 %z 1945 Oct 15
5:30 - IST
# Since 1970 the following are like Asia/Kolkata:
# Andaman Is
@@ -1357,33 +1364,33 @@ Zone Asia/Jakarta 7:07:12 - LMT 1867 Aug 10
# Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
# but this must be a typo.
7:07:12 - BMT 1923 Dec 31 16:40u # Batavia
- 7:20 - +0720 1932 Nov
- 7:30 - +0730 1942 Mar 23
- 9:00 - +09 1945 Sep 23
- 7:30 - +0730 1948 May
- 8:00 - +08 1950 May
- 7:30 - +0730 1964
+ 7:20 - %z 1932 Nov
+ 7:30 - %z 1942 Mar 23
+ 9:00 - %z 1945 Sep 23
+ 7:30 - %z 1948 May
+ 8:00 - %z 1950 May
+ 7:30 - %z 1964
7:00 - WIB
# west and central Borneo
Zone Asia/Pontianak 7:17:20 - LMT 1908 May
7:17:20 - PMT 1932 Nov # Pontianak MT
- 7:30 - +0730 1942 Jan 29
- 9:00 - +09 1945 Sep 23
- 7:30 - +0730 1948 May
- 8:00 - +08 1950 May
- 7:30 - +0730 1964
+ 7:30 - %z 1942 Jan 29
+ 9:00 - %z 1945 Sep 23
+ 7:30 - %z 1948 May
+ 8:00 - %z 1950 May
+ 7:30 - %z 1964
8:00 - WITA 1988 Jan 1
7:00 - WIB
# Sulawesi, Lesser Sundas, east and south Borneo
Zone Asia/Makassar 7:57:36 - LMT 1920
7:57:36 - MMT 1932 Nov # Macassar MT
- 8:00 - +08 1942 Feb 9
- 9:00 - +09 1945 Sep 23
+ 8:00 - %z 1942 Feb 9
+ 9:00 - %z 1945 Sep 23
8:00 - WITA
# Maluku Islands, West Papua, Papua
Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
- 9:00 - +09 1944 Sep 1
- 9:30 - +0930 1964
+ 9:00 - %z 1944 Sep 1
+ 9:30 - %z 1964
9:00 - WIT
# Iran
@@ -1619,9 +1626,9 @@ Rule Iran 2021 2022 - Sep 21 24:00 0 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Tehran 3:25:44 - LMT 1916
3:25:44 - TMT 1935 Jun 13 # Tehran Mean Time
- 3:30 Iran +0330/+0430 1977 Oct 20 24:00
- 4:00 Iran +04/+05 1979
- 3:30 Iran +0330/+0430
+ 3:30 Iran %z 1977 Oct 20 24:00
+ 4:00 Iran %z 1979
+ 3:30 Iran %z
# Iraq
@@ -1664,8 +1671,8 @@ Rule Iraq 1991 2007 - Oct 1 3:00s 0 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Baghdad 2:57:40 - LMT 1890
2:57:36 - BMT 1918 # Baghdad Mean Time?
- 3:00 - +03 1982 May
- 3:00 Iraq +03/+04
+ 3:00 - %z 1982 May
+ 3:00 Iraq %z
###############################################################################
@@ -2262,7 +2269,7 @@ Rule Jordan 2022 only - Feb lastThu 24:00 1:00 S
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Amman 2:23:44 - LMT 1931
2:00 Jordan EE%sT 2022 Oct 28 0:00s
- 3:00 - +03
+ 3:00 - %z
# Kazakhstan
@@ -2473,88 +2480,88 @@ Zone Asia/Amman 2:23:44 - LMT 1931
# Almaty (formerly Alma-Ata), representing most locations in Kazakhstan
# This includes Abai/Abay (ISO 3166-2 code KZ-10), Aqmola/Akmola (KZ-11),
# Almaty (KZ-19), Almaty city (KZ-75), Astana city (KZ-71),
-# East Kazkhstan (KZ-63), Jambyl/Zhambyl (KZ-31), Jetisu/Zhetysu (KZ-33),
+# East Kazakhstan (KZ-63), Jambyl/Zhambyl (KZ-31), Jetisu/Zhetysu (KZ-33),
# Karaganda (KZ-35), North Kazakhstan (KZ-59), Pavlodar (KZ-55),
-# Shyumkent city (KZ-79), Turkistan (KZ-61), and Ulytau (KZ-62).
+# Shymkent city (KZ-79), Turkistan (KZ-61), and Ulytau (KZ-62).
Zone Asia/Almaty 5:07:48 - LMT 1924 May 2 # or Alma-Ata
- 5:00 - +05 1930 Jun 21
- 6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
- 5:00 RussiaAsia +05/+06 1992 Jan 19 2:00s
- 6:00 RussiaAsia +06/+07 2004 Oct 31 2:00s
- 6:00 - +06 2024 Mar 1 0:00
- 5:00 - +05
+ 5:00 - %z 1930 Jun 21
+ 6:00 RussiaAsia %z 1991 Mar 31 2:00s
+ 5:00 RussiaAsia %z 1992 Jan 19 2:00s
+ 6:00 RussiaAsia %z 2004 Oct 31 2:00s
+ 6:00 - %z 2024 Mar 1 0:00
+ 5:00 - %z
# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) (KZ-43)
Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2
- 4:00 - +04 1930 Jun 21
- 5:00 - +05 1981 Apr 1
- 5:00 1:00 +06 1981 Oct 1
- 6:00 - +06 1982 Apr 1
- 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
- 4:00 RussiaAsia +04/+05 1991 Sep 29 2:00s
- 5:00 RussiaAsia +05/+06 1992 Jan 19 2:00s
- 6:00 RussiaAsia +06/+07 1992 Mar 29 2:00s
- 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
- 6:00 - +06 2018 Dec 21 0:00
- 5:00 - +05
+ 4:00 - %z 1930 Jun 21
+ 5:00 - %z 1981 Apr 1
+ 5:00 1:00 %z 1981 Oct 1
+ 6:00 - %z 1982 Apr 1
+ 5:00 RussiaAsia %z 1991 Mar 31 2:00s
+ 4:00 RussiaAsia %z 1991 Sep 29 2:00s
+ 5:00 RussiaAsia %z 1992 Jan 19 2:00s
+ 6:00 RussiaAsia %z 1992 Mar 29 2:00s
+ 5:00 RussiaAsia %z 2004 Oct 31 2:00s
+ 6:00 - %z 2018 Dec 21 0:00
+ 5:00 - %z
# Qostanay (aka Kostanay, Kustanay) (KZ-39)
# The 1991/2 rules are unclear partly because of the 1997 Turgai
# reorganization.
Zone Asia/Qostanay 4:14:28 - LMT 1924 May 2
- 4:00 - +04 1930 Jun 21
- 5:00 - +05 1981 Apr 1
- 5:00 1:00 +06 1981 Oct 1
- 6:00 - +06 1982 Apr 1
- 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
- 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
- 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
- 6:00 - +06 2024 Mar 1 0:00
- 5:00 - +05
+ 4:00 - %z 1930 Jun 21
+ 5:00 - %z 1981 Apr 1
+ 5:00 1:00 %z 1981 Oct 1
+ 6:00 - %z 1982 Apr 1
+ 5:00 RussiaAsia %z 1991 Mar 31 2:00s
+ 4:00 RussiaAsia %z 1992 Jan 19 2:00s
+ 5:00 RussiaAsia %z 2004 Oct 31 2:00s
+ 6:00 - %z 2024 Mar 1 0:00
+ 5:00 - %z
# Aqtöbe (aka Aktobe, formerly Aktyubinsk) (KZ-15)
Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2
- 4:00 - +04 1930 Jun 21
- 5:00 - +05 1981 Apr 1
- 5:00 1:00 +06 1981 Oct 1
- 6:00 - +06 1982 Apr 1
- 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
- 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
- 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
- 5:00 - +05
+ 4:00 - %z 1930 Jun 21
+ 5:00 - %z 1981 Apr 1
+ 5:00 1:00 %z 1981 Oct 1
+ 6:00 - %z 1982 Apr 1
+ 5:00 RussiaAsia %z 1991 Mar 31 2:00s
+ 4:00 RussiaAsia %z 1992 Jan 19 2:00s
+ 5:00 RussiaAsia %z 2004 Oct 31 2:00s
+ 5:00 - %z
# Mangghystaū (KZ-47)
# Aqtau was not founded until 1963, but it represents an inhabited region,
# so include timestamps before 1963.
Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2
- 4:00 - +04 1930 Jun 21
- 5:00 - +05 1981 Oct 1
- 6:00 - +06 1982 Apr 1
- 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
- 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
- 5:00 RussiaAsia +05/+06 1994 Sep 25 2:00s
- 4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s
- 5:00 - +05
+ 4:00 - %z 1930 Jun 21
+ 5:00 - %z 1981 Oct 1
+ 6:00 - %z 1982 Apr 1
+ 5:00 RussiaAsia %z 1991 Mar 31 2:00s
+ 4:00 RussiaAsia %z 1992 Jan 19 2:00s
+ 5:00 RussiaAsia %z 1994 Sep 25 2:00s
+ 4:00 RussiaAsia %z 2004 Oct 31 2:00s
+ 5:00 - %z
# Atyraū (KZ-23) is like Mangghystaū except it switched from
# +04/+05 to +05/+06 in spring 1999, not fall 1994.
Zone Asia/Atyrau 3:27:44 - LMT 1924 May 2
- 3:00 - +03 1930 Jun 21
- 5:00 - +05 1981 Oct 1
- 6:00 - +06 1982 Apr 1
- 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
- 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
- 5:00 RussiaAsia +05/+06 1999 Mar 28 2:00s
- 4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s
- 5:00 - +05
+ 3:00 - %z 1930 Jun 21
+ 5:00 - %z 1981 Oct 1
+ 6:00 - %z 1982 Apr 1
+ 5:00 RussiaAsia %z 1991 Mar 31 2:00s
+ 4:00 RussiaAsia %z 1992 Jan 19 2:00s
+ 5:00 RussiaAsia %z 1999 Mar 28 2:00s
+ 4:00 RussiaAsia %z 2004 Oct 31 2:00s
+ 5:00 - %z
# West Kazakhstan (KZ-27)
# From Paul Eggert (2016-03-18):
# The 1989 transition is from USSR act No. 227 (1989-03-14).
Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk
- 3:00 - +03 1930 Jun 21
- 5:00 - +05 1981 Apr 1
- 5:00 1:00 +06 1981 Oct 1
- 6:00 - +06 1982 Apr 1
- 5:00 RussiaAsia +05/+06 1989 Mar 26 2:00s
- 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
- 5:00 RussiaAsia +05/+06 1992 Mar 29 2:00s
- 4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s
- 5:00 - +05
+ 3:00 - %z 1930 Jun 21
+ 5:00 - %z 1981 Apr 1
+ 5:00 1:00 %z 1981 Oct 1
+ 6:00 - %z 1982 Apr 1
+ 5:00 RussiaAsia %z 1989 Mar 26 2:00s
+ 4:00 RussiaAsia %z 1992 Jan 19 2:00s
+ 5:00 RussiaAsia %z 1992 Mar 29 2:00s
+ 4:00 RussiaAsia %z 2004 Oct 31 2:00s
+ 5:00 - %z
# Kyrgyzstan (Kirgizstan)
# Transitions through 1991 are from Shanks & Pottenger.
@@ -2575,11 +2582,11 @@ Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 -
Rule Kyrgyz 1997 2004 - Oct lastSun 2:30 0 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2
- 5:00 - +05 1930 Jun 21
- 6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
- 5:00 RussiaAsia +05/+06 1991 Aug 31 2:00
- 5:00 Kyrgyz +05/+06 2005 Aug 12
- 6:00 - +06
+ 5:00 - %z 1930 Jun 21
+ 6:00 RussiaAsia %z 1991 Mar 31 2:00s
+ 5:00 RussiaAsia %z 1991 Aug 31 2:00
+ 5:00 Kyrgyz %z 2005 Aug 12
+ 6:00 - %z
###############################################################################
@@ -2786,16 +2793,16 @@ Rule NBorneo 1935 1941 - Dec 14 0:00 0 -
# and 1982 transition dates are from Mok Ly Yng.
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Kuching 7:21:20 - LMT 1926 Mar
- 7:30 - +0730 1933
- 8:00 NBorneo +08/+0820 1942 Feb 16
- 9:00 - +09 1945 Sep 12
- 8:00 - +08
+ 7:30 - %z 1933
+ 8:00 NBorneo %z 1942 Feb 16
+ 9:00 - %z 1945 Sep 12
+ 8:00 - %z
# Maldives
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Indian/Maldives 4:54:00 - LMT 1880 # Malé
4:54:00 - MMT 1960 # Malé Mean Time
- 5:00 - +05
+ 5:00 - %z
# Mongolia
@@ -2897,9 +2904,37 @@ Zone Indian/Maldives 4:54:00 - LMT 1880 # Malé
# From Arthur David Olson (2008-05-19):
# Assume that Choibalsan is indeed offset by 8:00.
-# XXX--in the absence of better information, assume that transition
-# was at the start of 2008-03-31 (the day of Steffen Thorsen's report);
-# this is almost surely wrong.
+
+# From Heitor David Pinto (2024-06-23):
+# Sources about time zones in Mongolia seem to list one of two conflicting
+# configurations. The first configuration, mentioned in a comment to the TZ
+# database in 1999, citing a Mongolian government website, lists the provinces
+# of Bayan-Ölgii, Khovd and Uvs in UTC+7, and the rest of the country in
+# UTC+8. The second configuration, mentioned in a comment to the database in
+# 2001, lists Bayan-Ölgii, Khovd, Uvs, Govi-Altai and Zavkhan in UTC+7, Dornod
+# and Sükhbaatar in UTC+9, and the rest of the country in UTC+8.
+#
+# The first configuration is still mentioned by several Mongolian travel
+# agencies:
+# https://www.adventurerider.mn/en/page/about_mongolia
+# http://www.naturetours.mn/nt/mongolia.php
+# https://www.newjuulchin.mn/web/content/7506?unique=fa24a0f6e96e022a3578ee5195ac879638c734ce
+#
+# It also matches these flight schedules in 2013:
+# http://web.archive.org/web/20130722023600/https://www.hunnuair.com/en/timetabled
+# The flight times imply that the airports of Uliastai (Zavkhan), Choibalsan
+# (Dornod) and Altai (Govi-Altai) are in the same time zone as Ulaanbaatar,
+# and Khovd is one hour behind....
+#
+# The second configuration was mentioned by an official of the Mongolian
+# standards agency in an interview in 2014: https://ikon.mn/n/9v6
+# And it's still listed by the Mongolian aviation agency:
+# https://ais.mn/files/aip/eAIP/2023-12-25/html/eSUP/ZM-eSUP-23-04-en-MN.html
+#
+# ... I believe that the first configuration is what is actually observed in
+# Mongolia and has been so all along, at least since 1999. The second
+# configuration closely matches the ideal time zone boundaries at 97.5° E and
+# 112.5° E but it doesn't seem to be used in practice.
# From Ganbold Tsagaankhuu (2015-03-10):
# It seems like yesterday Mongolian Government meeting has concluded to use
@@ -2938,25 +2973,18 @@ Rule Mongol 2015 2016 - Sep lastSat 0:00 0 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
# Hovd, a.k.a. Chovd, Dund-Us, Dzhargalant, Khovd, Jirgalanta
Zone Asia/Hovd 6:06:36 - LMT 1905 Aug
- 6:00 - +06 1978
- 7:00 Mongol +07/+08
+ 6:00 - %z 1978
+ 7:00 Mongol %z
# Ulaanbaatar, a.k.a. Ulan Bataar, Ulan Bator, Urga
Zone Asia/Ulaanbaatar 7:07:32 - LMT 1905 Aug
- 7:00 - +07 1978
- 8:00 Mongol +08/+09
-# Choibalsan, a.k.a. Bajan Tümen, Bajan Tumen, Chojbalsan,
-# Choybalsan, Sanbejse, Tchoibalsan
-Zone Asia/Choibalsan 7:38:00 - LMT 1905 Aug
- 7:00 - +07 1978
- 8:00 - +08 1983 Apr
- 9:00 Mongol +09/+10 2008 Mar 31
- 8:00 Mongol +08/+09
+ 7:00 - %z 1978
+ 8:00 Mongol %z
# Nepal
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Kathmandu 5:41:16 - LMT 1920
- 5:30 - +0530 1986
- 5:45 - +0545
+ 5:30 - %z 1986
+ 5:45 - %z
# Pakistan
@@ -3102,10 +3130,10 @@ Rule Pakistan 2009 only - Apr 15 0:00 1:00 S
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Karachi 4:28:12 - LMT 1907
- 5:30 - +0530 1942 Sep
- 5:30 1:00 +0630 1945 Oct 15
- 5:30 - +0530 1951 Sep 30
- 5:00 - +05 1971 Mar 26
+ 5:30 - %z 1942 Sep
+ 5:30 1:00 %z 1945 Oct 15
+ 5:30 - %z 1951 Sep 30
+ 5:00 - %z 1971 Mar 26
5:00 Pakistan PK%sT # Pakistan Time
# Palestine
@@ -3653,14 +3681,14 @@ Zone Asia/Hebron 2:20:23 - LMT 1900 Oct
# Philippine Star 2014-08-05
# http://www.philstar.com/headlines/2014/08/05/1354152/pnoy-urged-declare-use-daylight-saving-time
-# From Paul Goyette (2018-06-15):
+# From Paul Goyette (2018-06-15) with URLs updated by Guy Harris (2024-02-15):
# In the Philippines, there is a national law, Republic Act No. 10535
# which declares the official time here as "Philippine Standard Time".
# The act [1] even specifies use of PST as the abbreviation, although
# the FAQ provided by PAGASA [2] uses the "acronym PhST to distinguish
# it from the Pacific Standard Time (PST)."
-# [1] http://www.officialgazette.gov.ph/2013/05/15/republic-act-no-10535/
-# [2] https://www1.pagasa.dost.gov.ph/index.php/astronomy/philippine-standard-time#republic-act-10535
+# [1] https://www.officialgazette.gov.ph/2013/05/15/republic-act-no-10535/
+# [2] https://prsd.pagasa.dost.gov.ph/index.php/28-astronomy/302-philippine-standard-time
#
# From Paul Eggert (2018-06-19):
# I surveyed recent news reports, and my impression is that "PST" is
@@ -3693,8 +3721,8 @@ Zone Asia/Manila -15:56:00 - LMT 1844 Dec 31
# Qatar
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha
- 4:00 - +04 1972 Jun
- 3:00 - +03
+ 4:00 - %z 1972 Jun
+ 3:00 - %z
# Kuwait
# Saudi Arabia
@@ -3744,7 +3772,7 @@ Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha
#
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Riyadh 3:06:52 - LMT 1947 Mar 14
- 3:00 - +03
+ 3:00 - %z
# Singapore
# taken from Mok Ly Yng (2003-10-30)
@@ -3752,13 +3780,13 @@ Zone Asia/Riyadh 3:06:52 - LMT 1947 Mar 14
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
- 7:00 - +07 1933 Jan 1
- 7:00 0:20 +0720 1936 Jan 1
- 7:20 - +0720 1941 Sep 1
- 7:30 - +0730 1942 Feb 16
- 9:00 - +09 1945 Sep 12
- 7:30 - +0730 1981 Dec 31 16:00u
- 8:00 - +08
+ 7:00 - %z 1933 Jan 1
+ 7:00 0:20 %z 1936 Jan 1
+ 7:20 - %z 1941 Sep 1
+ 7:30 - %z 1942 Feb 16
+ 9:00 - %z 1945 Sep 12
+ 7:30 - %z 1981 Dec 31 16:00u
+ 8:00 - %z
# Spratly Is
# no information
@@ -3816,13 +3844,13 @@ Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Colombo 5:19:24 - LMT 1880
5:19:32 - MMT 1906 # Moratuwa Mean Time
- 5:30 - +0530 1942 Jan 5
- 5:30 0:30 +06 1942 Sep
- 5:30 1:00 +0630 1945 Oct 16 2:00
- 5:30 - +0530 1996 May 25 0:00
- 6:30 - +0630 1996 Oct 26 0:30
- 6:00 - +06 2006 Apr 15 0:30
- 5:30 - +0530
+ 5:30 - %z 1942 Jan 5
+ 5:30 0:30 %z 1942 Sep
+ 5:30 1:00 %z 1945 Oct 16 2:00
+ 5:30 - %z 1996 May 25 0:00
+ 6:30 - %z 1996 Oct 26 0:30
+ 6:00 - %z 2006 Apr 15 0:30
+ 5:30 - %z
# Syria
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
@@ -3993,16 +4021,16 @@ Rule Syria 2009 2022 - Oct lastFri 0:00 0 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
2:00 Syria EE%sT 2022 Oct 28 0:00
- 3:00 - +03
+ 3:00 - %z
# Tajikistan
# From Shanks & Pottenger.
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
- 5:00 - +05 1930 Jun 21
- 6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
- 5:00 1:00 +06 1991 Sep 9 2:00s
- 5:00 - +05
+ 5:00 - %z 1930 Jun 21
+ 6:00 RussiaAsia %z 1991 Mar 31 2:00s
+ 5:00 1:00 %z 1991 Sep 9 2:00s
+ 5:00 - %z
# Cambodia
# Christmas I
@@ -4012,16 +4040,16 @@ Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Bangkok 6:42:04 - LMT 1880
6:42:04 - BMT 1920 Apr # Bangkok Mean Time
- 7:00 - +07
+ 7:00 - %z
# Turkmenistan
# From Shanks & Pottenger.
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad
- 4:00 - +04 1930 Jun 21
- 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00
- 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00
- 5:00 - +05
+ 4:00 - %z 1930 Jun 21
+ 5:00 RussiaAsia %z 1991 Mar 31 2:00
+ 4:00 RussiaAsia %z 1992 Jan 19 2:00
+ 5:00 - %z
# Oman
# Réunion
@@ -4031,25 +4059,25 @@ Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad
# The Crozet Is also observe Réunion time; see the 'antarctica' file.
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Dubai 3:41:12 - LMT 1920
- 4:00 - +04
+ 4:00 - %z
# Uzbekistan
# Byalokoz 1919 says Uzbekistan was 4:27:53.
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Samarkand 4:27:53 - LMT 1924 May 2
- 4:00 - +04 1930 Jun 21
- 5:00 - +05 1981 Apr 1
- 5:00 1:00 +06 1981 Oct 1
- 6:00 - +06 1982 Apr 1
- 5:00 RussiaAsia +05/+06 1992
- 5:00 - +05
+ 4:00 - %z 1930 Jun 21
+ 5:00 - %z 1981 Apr 1
+ 5:00 1:00 %z 1981 Oct 1
+ 6:00 - %z 1982 Apr 1
+ 5:00 RussiaAsia %z 1992
+ 5:00 - %z
# Milne says Tashkent was 4:37:10.8.
#STDOFF 4:37:10.8
Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
- 5:00 - +05 1930 Jun 21
- 6:00 RussiaAsia +06/+07 1991 Mar 31 2:00
- 5:00 RussiaAsia +05/+06 1992
- 5:00 - +05
+ 5:00 - %z 1930 Jun 21
+ 6:00 RussiaAsia %z 1991 Mar 31 2:00
+ 5:00 RussiaAsia %z 1992
+ 5:00 - %z
# Vietnam (southern)
@@ -4107,7 +4135,7 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
# Võ Nguyên Giáp, Việt Nam Dân Quốc Công Báo, No. 1 (1945-09-29), page 13
# http://baochi.nlv.gov.vn/baochi/cgi-bin/baochi?a=d&d=JwvzO19450929.2.5&dliv=none
# It says that on 1945-09-01 at 24:00, Vietnam moved back two hours, to +07.
-# It also mentions a 1945-03-29 decree (by a Japanese Goveror-General)
+# It also mentions a 1945-03-29 decree (by a Japanese Governor-General)
# to set the time zone to +09, but does not say whether that decree
# merely legalized an earlier change to +09.
#
@@ -4128,14 +4156,14 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
#STDOFF 7:06:30.13
Zone Asia/Ho_Chi_Minh 7:06:30 - LMT 1906 Jul 1
7:06:30 - PLMT 1911 May 1 # Phù Liễn MT
- 7:00 - +07 1942 Dec 31 23:00
- 8:00 - +08 1945 Mar 14 23:00
- 9:00 - +09 1945 Sep 1 24:00
- 7:00 - +07 1947 Apr 1
- 8:00 - +08 1955 Jul 1 01:00
- 7:00 - +07 1959 Dec 31 23:00
- 8:00 - +08 1975 Jun 13
- 7:00 - +07
+ 7:00 - %z 1942 Dec 31 23:00
+ 8:00 - %z 1945 Mar 14 23:00
+ 9:00 - %z 1945 Sep 1 24:00
+ 7:00 - %z 1947 Apr 1
+ 8:00 - %z 1955 Jul 1 01:00
+ 7:00 - %z 1959 Dec 31 23:00
+ 8:00 - %z 1975 Jun 13
+ 7:00 - %z
# From Paul Eggert (2019-02-19):
#
diff --git a/australasia b/australasia
index 0e9c2592e4be..359f9c1f1e10 100644
--- a/australasia
+++ b/australasia
@@ -43,8 +43,8 @@ Zone Australia/Perth 7:43:24 - LMT 1895 Dec
8:00 Aus AW%sT 1943 Jul
8:00 AW AW%sT
Zone Australia/Eucla 8:35:28 - LMT 1895 Dec
- 8:45 Aus +0845/+0945 1943 Jul
- 8:45 AW +0845/+0945
+ 8:45 Aus %z 1943 Jul
+ 8:45 AW %z
# Queensland
#
@@ -209,8 +209,8 @@ Rule LH 2008 max - Apr Sun>=1 2:00 0 -
Rule LH 2008 max - Oct Sun>=1 2:00 0:30 -
Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
10:00 - AEST 1981 Mar
- 10:30 LH +1030/+1130 1985 Jul
- 10:30 LH +1030/+11
+ 10:30 LH %z 1985 Jul
+ 10:30 LH %z
# Australian miscellany
#
@@ -416,16 +416,16 @@ Rule Fiji 2019 only - Nov Sun>=8 2:00 1:00 -
Rule Fiji 2020 only - Dec 20 2:00 1:00 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
- 12:00 Fiji +12/+13
+ 12:00 Fiji %z
# French Polynesia
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct 1 # Rikitea
- -9:00 - -09
+ -9:00 - %z
Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct 1
- -9:30 - -0930
+ -9:30 - %z
Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct 1 # Papeete
- -10:00 - -10
+ -10:00 - %z
# Clipperton (near North America) is administered from French Polynesia;
# it is uninhabited.
@@ -468,7 +468,7 @@ Rule Guam 1977 only - Aug 28 2:00 0 S
Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31
9:39:00 - LMT 1901 # Agana
10:00 - GST 1941 Dec 10 # Guam
- 9:00 - +09 1944 Jul 31
+ 9:00 - %z 1944 Jul 31
10:00 Guam G%sT 2000 Dec 23
10:00 - ChST # Chamorro Standard Time
@@ -480,30 +480,30 @@ Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31
# Wallis & Futuna
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
- 12:00 - +12
+ 12:00 - %z
# Kiribati (except Gilbert Is)
# See Pacific/Tarawa for the Gilbert Is.
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Kanton 0 - -00 1937 Aug 31
- -12:00 - -12 1979 Oct
- -11:00 - -11 1994 Dec 31
- 13:00 - +13
+ -12:00 - %z 1979 Oct
+ -11:00 - %z 1994 Dec 31
+ 13:00 - %z
Zone Pacific/Kiritimati -10:29:20 - LMT 1901
- -10:40 - -1040 1979 Oct
- -10:00 - -10 1994 Dec 31
- 14:00 - +14
+ -10:40 - %z 1979 Oct
+ -10:00 - %z 1994 Dec 31
+ 14:00 - %z
# Marshall Is
# See Pacific/Tarawa for most locations.
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Kwajalein 11:09:20 - LMT 1901
- 11:00 - +11 1937
- 10:00 - +10 1941 Apr 1
- 9:00 - +09 1944 Feb 6
- 11:00 - +11 1969 Oct
- -12:00 - -12 1993 Aug 20 24:00
- 12:00 - +12
+ 11:00 - %z 1937
+ 10:00 - %z 1941 Apr 1
+ 9:00 - %z 1944 Feb 6
+ 11:00 - %z 1969 Oct
+ -12:00 - %z 1993 Aug 20 24:00
+ 12:00 - %z
# Micronesia
# For Chuuk and Yap see Pacific/Port_Moresby.
@@ -511,22 +511,22 @@ Zone Pacific/Kwajalein 11:09:20 - LMT 1901
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Kosrae -13:08:04 - LMT 1844 Dec 31
10:51:56 - LMT 1901
- 11:00 - +11 1914 Oct
- 9:00 - +09 1919 Feb 1
- 11:00 - +11 1937
- 10:00 - +10 1941 Apr 1
- 9:00 - +09 1945 Aug
- 11:00 - +11 1969 Oct
- 12:00 - +12 1999
- 11:00 - +11
+ 11:00 - %z 1914 Oct
+ 9:00 - %z 1919 Feb 1
+ 11:00 - %z 1937
+ 10:00 - %z 1941 Apr 1
+ 9:00 - %z 1945 Aug
+ 11:00 - %z 1969 Oct
+ 12:00 - %z 1999
+ 11:00 - %z
# Nauru
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
- 11:30 - +1130 1942 Aug 29
- 9:00 - +09 1945 Sep 8
- 11:30 - +1130 1979 Feb 10 2:00
- 12:00 - +12
+ 11:30 - %z 1942 Aug 29
+ 9:00 - %z 1945 Sep 8
+ 11:30 - %z 1979 Feb 10 2:00
+ 12:00 - %z
# New Caledonia
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
@@ -537,7 +537,7 @@ Rule NC 1996 only - Dec 1 2:00s 1:00 -
Rule NC 1997 only - Mar 2 2:00s 0 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Noumea 11:05:48 - LMT 1912 Jan 13 # Nouméa
- 11:00 NC +11/+12
+ 11:00 NC %z
###############################################################################
@@ -581,8 +581,8 @@ Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2
12:00 NZ NZ%sT
Zone Pacific/Chatham 12:13:48 - LMT 1868 Nov 2
- 12:15 - +1215 1946 Jan 1
- 12:45 Chatham +1245/+1345
+ 12:15 - %z 1946 Jan 1
+ 12:45 Chatham %z
# Auckland Is
# uninhabited; Māori and Moriori, colonial settlers, pastoralists, sealers,
@@ -635,8 +635,8 @@ Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Rarotonga 13:20:56 - LMT 1899 Dec 26 # Avarua
-10:39:04 - LMT 1952 Oct 16
- -10:30 - -1030 1978 Nov 12
- -10:00 Cook -10/-0930
+ -10:30 - %z 1978 Nov 12
+ -10:00 Cook %z
###############################################################################
@@ -653,30 +653,30 @@ Zone Pacific/Rarotonga 13:20:56 - LMT 1899 Dec 26 # Avarua
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Niue -11:19:40 - LMT 1952 Oct 16 # Alofi
- -11:20 - -1120 1964 Jul
- -11:00 - -11
+ -11:20 - %z 1964 Jul
+ -11:00 - %z
# Norfolk
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston
- 11:12 - +1112 1951
- 11:30 - +1130 1974 Oct 27 02:00s
- 11:30 1:00 +1230 1975 Mar 2 02:00s
- 11:30 - +1130 2015 Oct 4 02:00s
- 11:00 - +11 2019 Jul
- 11:00 AN +11/+12
+ 11:12 - %z 1951
+ 11:30 - %z 1974 Oct 27 02:00s
+ 11:30 1:00 %z 1975 Mar 2 02:00s
+ 11:30 - %z 2015 Oct 4 02:00s
+ 11:00 - %z 2019 Jul
+ 11:00 AN %z
# Palau (Belau)
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Palau -15:02:04 - LMT 1844 Dec 31 # Koror
8:57:56 - LMT 1901
- 9:00 - +09
+ 9:00 - %z
# Papua New Guinea
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Port_Moresby 9:48:40 - LMT 1880
9:48:32 - PMMT 1895 # Port Moresby Mean Time
- 10:00 - +10
+ 10:00 - %z
#
# From Paul Eggert (2014-10-13):
# Base the Bougainville entry on the Arawa-Kieta region, which appears to have
@@ -697,16 +697,16 @@ Zone Pacific/Port_Moresby 9:48:40 - LMT 1880
#
Zone Pacific/Bougainville 10:22:16 - LMT 1880
9:48:32 - PMMT 1895
- 10:00 - +10 1942 Jul
- 9:00 - +09 1945 Aug 21
- 10:00 - +10 2014 Dec 28 2:00
- 11:00 - +11
+ 10:00 - %z 1942 Jul
+ 9:00 - %z 1945 Aug 21
+ 10:00 - %z 2014 Dec 28 2:00
+ 11:00 - %z
# Pitcairn
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Pitcairn -8:40:20 - LMT 1901 # Adamstown
- -8:30 - -0830 1998 Apr 27 0:00
- -8:00 - -08
+ -8:30 - %z 1998 Apr 27 0:00
+ -8:00 - %z
# American Samoa
# Midway
@@ -795,15 +795,15 @@ Rule WS 2012 2020 - Sep lastSun 3:00 1 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Apia 12:33:04 - LMT 1892 Jul 5
-11:26:56 - LMT 1911
- -11:30 - -1130 1950
- -11:00 WS -11/-10 2011 Dec 29 24:00
- 13:00 WS +13/+14
+ -11:30 - %z 1950
+ -11:00 WS %z 2011 Dec 29 24:00
+ 13:00 WS %z
# Solomon Is
# excludes Bougainville, for which see Papua New Guinea
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct 1 # Honiara
- 11:00 - +11
+ 11:00 - %z
# Tokelau
#
@@ -826,8 +826,8 @@ Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct 1 # Honiara
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Fakaofo -11:24:56 - LMT 1901
- -11:00 - -11 2011 Dec 30
- 13:00 - +13
+ -11:00 - %z 2011 Dec 30
+ 13:00 - %z
# Tonga
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
@@ -839,9 +839,9 @@ Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 -
Rule Tonga 2017 only - Jan Sun>=15 3:00 0 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Tongatapu 12:19:12 - LMT 1945 Sep 10
- 12:20 - +1220 1961
- 13:00 - +13 1999
- 13:00 Tonga +13/+14
+ 12:20 - %z 1961
+ 13:00 - %z 1999
+ 13:00 Tonga %z
# US minor outlying islands
@@ -930,7 +930,7 @@ Rule Vanuatu 1992 1993 - Jan Sat>=22 24:00 0 -
Rule Vanuatu 1992 only - Oct Sat>=22 24:00 1:00 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
- 11:00 Vanuatu +11/+12
+ 11:00 Vanuatu %z
###############################################################################
diff --git a/backward b/backward
index 65c711b37bf4..0236751df1da 100644
--- a/backward
+++ b/backward
@@ -1,9 +1,10 @@
-# tzdb links for backward compatibility
+# Links and zones for backward compatibility
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
# This file provides links from old or merged timezone names to current ones.
+# It also provides a few zone entries for old naming conventions.
# Many names changed in 1993 and in 1995, and many merged names moved here
# in the period from 2013 through 2022. Several of these names are
# also present in the file 'backzone', which has data important only
@@ -44,6 +45,8 @@ Link America/Rio_Branco Brazil/Acre #= America/Porto_Acre
Link America/Noronha Brazil/DeNoronha
Link America/Sao_Paulo Brazil/East
Link America/Manaus Brazil/West
+Link Europe/Brussels CET
+Link America/Chicago CST6CDT
Link America/Halifax Canada/Atlantic
Link America/Winnipeg Canada/Central
# This line is commented out, as the name exceeded the 14-character limit
@@ -58,6 +61,9 @@ Link America/Whitehorse Canada/Yukon
Link America/Santiago Chile/Continental
Link Pacific/Easter Chile/EasterIsland
Link America/Havana Cuba
+Link Europe/Athens EET
+Link America/Panama EST
+Link America/New_York EST5EDT
Link Africa/Cairo Egypt
Link Europe/Dublin Eire
# Vanguard section, for most .zi parsers.
@@ -96,6 +102,9 @@ Link America/Jamaica Jamaica
Link Asia/Tokyo Japan
Link Pacific/Kwajalein Kwajalein
Link Africa/Tripoli Libya
+Link Europe/Brussels MET
+Link America/Phoenix MST
+Link America/Denver MST7MDT
Link America/Tijuana Mexico/BajaNorte
Link America/Mazatlan Mexico/BajaSur
Link America/Mexico_City Mexico/General
@@ -275,6 +284,7 @@ Link America/Denver America/Shiprock
Link America/Toronto America/Thunder_Bay
Link America/Edmonton America/Yellowknife
Link Pacific/Auckland Antarctica/South_Pole
+Link Asia/Ulaanbaatar Asia/Choibalsan
Link Asia/Shanghai Asia/Chongqing
Link Asia/Shanghai Asia/Harbin
Link Asia/Urumqi Asia/Kashgar
@@ -289,6 +299,7 @@ Link Europe/Kyiv Europe/Zaporozhye
Link Pacific/Kanton Pacific/Enderbury
Link Pacific/Honolulu Pacific/Johnston
Link Pacific/Port_Moresby Pacific/Yap
+Link Europe/Lisbon WET
# Alternate names for the same location
@@ -314,5 +325,7 @@ Link Europe/Kyiv Europe/Kiev
# Classically, Cyprus is in Asia; e.g. see Herodotus, Histories, I.72.
# However, for various reasons many users expect to find it under Europe.
Link Asia/Nicosia Europe/Nicosia
+Link Pacific/Honolulu HST
+Link America/Los_Angeles PST8PDT
Link Pacific/Guadalcanal Pacific/Ponape #= Pacific/Pohnpei
Link Pacific/Port_Moresby Pacific/Truk #= Pacific/Chuuk
diff --git a/backzone b/backzone
index f45250340493..dd7a86758374 100644
--- a/backzone
+++ b/backzone
@@ -346,10 +346,8 @@ Zone Africa/Lome 0:04:52 - LMT 1893
# Angola
#
-# From Paul Eggert (2018-02-16):
-# Shanks gives 1911-05-26 for the transition to WAT,
-# evidently confusing the date of the Portuguese decree
-# (see Europe/Lisbon) with the date that it took effect.
+# From Tim Parenti (2024-07-01), per Paul Eggert (2018-02-16):
+# For timestamps before independence, see commentary for Europe/Lisbon.
#
Zone Africa/Luanda 0:52:56 - LMT 1892
0:52:04 - LMT 1911 Dec 31 23:00u # Luanda MT?
@@ -1086,10 +1084,10 @@ Zone Asia/Muscat 3:54:24 - LMT 1920
4:00 - +04
# India
-# From Paul Eggert (2014-08-11), after a heads-up from Stephen Colebourne:
-# According to a Portuguese decree (1911-05-26)
-# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
-# Portuguese India switched to UT +05 on 1912-01-01.
+# From Tim Parenti (2024-07-01), per Paul Eggert (2014-08-11), after a
+# heads-up from Stephen Colebourne:
+# According to a Portuguese decree (1911-05-24), Portuguese India switched to
+# UT +05 on 1912-01-01 (see Europe/Lisbon).
#Zone Asia/Panaji [not enough info to complete]
# Cambodia
@@ -1829,6 +1827,27 @@ Zone Pacific/Wake 11:06:28 - LMT 1901
Zone Pacific/Wallis 12:15:20 - LMT 1901
12:00 - +12
+
+# From Paul Eggert (2024-05-22):
+# The following zones pretend that standard time extends backward
+# indefinitely into the past, and so are ahistorical.
+# In current TZDB these entries are links to geographical locations
+# that agree with the ahistorical zones since 1970.
+# These are in numeric rather than alphabetic order.
+
+# Zone NAME STDOFF RULES FORMAT [UNTIL]
+Zone HST -10:00 - HST
+Zone PST8PDT -8:00 US P%sT
+Zone MST -7:00 - MST
+Zone MST7MDT -7:00 US M%sT
+Zone CST6CDT -6:00 US C%sT
+Zone EST -5:00 - EST
+Zone EST5EDT -5:00 US E%sT
+Zone WET 0:00 EU WE%sT
+Zone CET 1:00 C-Eur CE%sT
+Zone MET 1:00 C-Eur ME%sT
+Zone EET 2:00 EU EE%sT
+
# Local Variables:
# coding: utf-8
# End:
diff --git a/checknow.awk b/checknow.awk
index 57ff3c02e789..8b7881d2e27f 100644
--- a/checknow.awk
+++ b/checknow.awk
@@ -14,7 +14,7 @@ BEGIN {
if ($0 ~ /^TZ/) {
record_zone(zone, data)
zone = $0
- sub(/.*\.dir\//, "", zone)
+ sub(/.*\.ckd\//, "", zone)
sub(/\/\//, "/", zone)
sub(/"/, "", zone)
data = ""
@@ -45,7 +45,7 @@ END {
for (zone in zone_data) {
data = zone_data[zone]
if (!zonenow[data]) {
- printf "zonenow.tab should have one of:%s\n", zones[data]
+ printf "Zone table should have one of:%s\n", zones[data]
zonenow[data] = zone # This suppresses duplicate diagnostics.
status = 1
}
diff --git a/etcetera b/etcetera
index 29fbed9b9290..a5ecd6de1f6e 100644
--- a/etcetera
+++ b/etcetera
@@ -5,7 +5,7 @@
# These entries are for uses not otherwise covered by the tz database.
# Their main practical use is for platforms like Android that lack
-# support for POSIX.1-2017-style TZ strings. On such platforms these entries
+# support for POSIX proleptic TZ strings. On such platforms these entries
# can be useful if the timezone database is wrong or if a ship or
# aircraft at sea is not in a timezone.
@@ -51,29 +51,29 @@ Link Etc/GMT GMT
# so we moved the names into the Etc subdirectory.
# Also, the time zone abbreviations are now compatible with %z.
-Zone Etc/GMT-14 14 - +14
-Zone Etc/GMT-13 13 - +13
-Zone Etc/GMT-12 12 - +12
-Zone Etc/GMT-11 11 - +11
-Zone Etc/GMT-10 10 - +10
-Zone Etc/GMT-9 9 - +09
-Zone Etc/GMT-8 8 - +08
-Zone Etc/GMT-7 7 - +07
-Zone Etc/GMT-6 6 - +06
-Zone Etc/GMT-5 5 - +05
-Zone Etc/GMT-4 4 - +04
-Zone Etc/GMT-3 3 - +03
-Zone Etc/GMT-2 2 - +02
-Zone Etc/GMT-1 1 - +01
-Zone Etc/GMT+1 -1 - -01
-Zone Etc/GMT+2 -2 - -02
-Zone Etc/GMT+3 -3 - -03
-Zone Etc/GMT+4 -4 - -04
-Zone Etc/GMT+5 -5 - -05
-Zone Etc/GMT+6 -6 - -06
-Zone Etc/GMT+7 -7 - -07
-Zone Etc/GMT+8 -8 - -08
-Zone Etc/GMT+9 -9 - -09
-Zone Etc/GMT+10 -10 - -10
-Zone Etc/GMT+11 -11 - -11
-Zone Etc/GMT+12 -12 - -12
+Zone Etc/GMT-14 14 - %z
+Zone Etc/GMT-13 13 - %z
+Zone Etc/GMT-12 12 - %z
+Zone Etc/GMT-11 11 - %z
+Zone Etc/GMT-10 10 - %z
+Zone Etc/GMT-9 9 - %z
+Zone Etc/GMT-8 8 - %z
+Zone Etc/GMT-7 7 - %z
+Zone Etc/GMT-6 6 - %z
+Zone Etc/GMT-5 5 - %z
+Zone Etc/GMT-4 4 - %z
+Zone Etc/GMT-3 3 - %z
+Zone Etc/GMT-2 2 - %z
+Zone Etc/GMT-1 1 - %z
+Zone Etc/GMT+1 -1 - %z
+Zone Etc/GMT+2 -2 - %z
+Zone Etc/GMT+3 -3 - %z
+Zone Etc/GMT+4 -4 - %z
+Zone Etc/GMT+5 -5 - %z
+Zone Etc/GMT+6 -6 - %z
+Zone Etc/GMT+7 -7 - %z
+Zone Etc/GMT+8 -8 - %z
+Zone Etc/GMT+9 -9 - %z
+Zone Etc/GMT+10 -10 - %z
+Zone Etc/GMT+11 -11 - %z
+Zone Etc/GMT+12 -12 - %z
diff --git a/europe b/europe
index c6b5270316b9..f9063949eb83 100644
--- a/europe
+++ b/europe
@@ -730,14 +730,6 @@ Rule Russia 1996 2010 - Oct lastSun 2:00s 0 -
# Take "abolishing daylight saving time" to mean that time is now considered
# to be standard.
-# These are for backward compatibility with older versions.
-
-# Zone NAME STDOFF RULES FORMAT [UNTIL]
-Zone WET 0:00 EU WE%sT
-Zone CET 1:00 C-Eur CE%sT
-Zone MET 1:00 C-Eur ME%sT
-Zone EET 2:00 EU EE%sT
-
# Previous editions of this database used abbreviations like MET DST
# for Central European Summer Time, but this didn't agree with common usage.
@@ -871,7 +863,7 @@ Zone Europe/Minsk 1:50:16 - LMT 1880
3:00 Russia MSK/MSD 1990
3:00 - MSK 1991 Mar 31 2:00s
2:00 Russia EE%sT 2011 Mar 27 2:00s
- 3:00 - +03
+ 3:00 - %z
# Belgium
# Luxembourg
@@ -1176,22 +1168,22 @@ Rule Thule 2007 max - Nov Sun>=1 2:00 0 S
#
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28
- -3:00 - -03 1980 Apr 6 2:00
- -3:00 EU -03/-02 1996
+ -3:00 - %z 1980 Apr 6 2:00
+ -3:00 EU %z 1996
0:00 - GMT
#
# Use the old name Scoresbysund, as the current name Ittoqqortoormiit
# exceeds tzdb's 14-letter limit and has no common English abbreviation.
Zone America/Scoresbysund -1:27:52 - LMT 1916 Jul 28 # Ittoqqortoormiit
- -2:00 - -02 1980 Apr 6 2:00
- -2:00 C-Eur -02/-01 1981 Mar 29
- -1:00 EU -01/+00 2024 Mar 31
- -2:00 EU -02/-01
+ -2:00 - %z 1980 Apr 6 2:00
+ -2:00 C-Eur %z 1981 Mar 29
+ -1:00 EU %z 2024 Mar 31
+ -2:00 EU %z
Zone America/Nuuk -3:26:56 - LMT 1916 Jul 28 # Godthåb
- -3:00 - -03 1980 Apr 6 2:00
- -3:00 EU -03/-02 2023 Mar 26 1:00u
- -2:00 - -02 2023 Oct 29 1:00u
- -2:00 EU -02/-01
+ -3:00 - %z 1980 Apr 6 2:00
+ -3:00 EU %z 2023 Mar 26 1:00u
+ -2:00 - %z 2023 Oct 29 1:00u
+ -2:00 EU %z
Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik
-4:00 Thule A%sT
@@ -2063,10 +2055,39 @@ Zone Europe/Warsaw 1:24:00 - LMT 1880
# Portugal
-# From Paul Eggert (2014-08-11), after a heads-up from Stephen Colebourne:
-# According to a Portuguese decree (1911-05-26)
-# https://dre.pt/application/dir/pdf1sdip/1911/05/12500/23132313.pdf
-# Lisbon was at -0:36:44.68, but switched to GMT on 1912-01-01 at 00:00.
+# From Tim Parenti (2024-07-01), per Alois Treindl (2021-02-07) and Michael
+# Deckers (2021-02-10):
+# http://oal.ul.pt/documentos/2018/01/hl1911a2018.pdf/
+# The Astronomical Observatory of Lisbon has published a list detailing the
+# historical transitions in legal time within continental Portugal. It
+# directly references many decrees and ordinances which are, in turn,
+# referenced below. They can be viewed in the public archives of the Diário da
+# República (until 1976-04-09 known as the Diário do Govêrno) at
+# https://dre.pt/ (in Portuguese).
+#
+# Most of the Rules below have been updated simply to match the Observatory's
+# listing for continental (mainland) Portugal. Although there are over 50
+# referenced decrees and ordinances, only the handful with comments below have
+# been verified against the text, typically to provide additional confidence
+# wherever dates provided by Whitman and Shanks & Pottenger had disagreed.
+# See further below for the Azores and Madeira.
+
+# From Tim Parenti (2024-07-01), per Paul Eggert (2014-08-11), after a
+# heads-up from Stephen Colebourne:
+# According to a 1911-05-24 Portuguese decree, Lisbon was at -0:36:44.68, but
+# switched to GMT on 1912-01-01 at 00:00.
+# https://dre.pt/dr/detalhe/decreto/593090
+# https://dre.pt/application/conteudo/593090
+# The decree made legal time throughout Portugal and her possessions
+# "subordinate to the Greenwich meridian, according to the principle adopted at
+# the Washington Convention in 1884" and eliminated the "difference of five
+# minutes between the internal and external clocks of railway stations".
+#
+# The decree was gazetted in the 1911-05-30 issue of Diário do Govêrno, and is
+# considered to be dated 1911-05-24 by that issue's summary; however, the text
+# of the decree itself is dated 1911-05-26. The Diário da República website
+# notes the discrepancy, but later laws and the Observatory all seem to refer
+# to this decree by the 1911-05-24 date.
#
# From Michael Deckers (2018-02-15):
# article 5 [of the 1911 decree; Deckers's translation] ...:
@@ -2074,37 +2095,62 @@ Zone Europe/Warsaw 1:24:00 - LMT 1880
# according to the 2nd article, the civil day January 1, 1912 begins,
# all clocks therefore having to be advanced or set back correspondingly ...
-# From Rui Pedro Salgueiro (1992-11-12):
-# Portugal has recently (September, 27) changed timezone
-# (from WET to MET or CET) to harmonize with EEC.
-#
-# Martin Bruckmann (1996-02-29) reports via Peter Ilieve
-# that Portugal is reverting to 0:00 by not moving its clocks this spring.
-# The new Prime Minister was fed up with getting up in the dark in the winter.
-#
-# From Paul Eggert (1996-11-12):
-# IATA SSIM (1991-09) reports several 1991-09 and 1992-09 transitions
-# at 02:00u, not 01:00u. Assume that these are typos.
-# IATA SSIM (1991/1992) reports that the Azores were at -1:00.
-# IATA SSIM (1993-02) says +0:00; later issues (through 1996-09) say -1:00.
-# Guess that the Azores changed to EU rules in 1992 (since that's when Portugal
-# harmonized with EU rules), and that they stayed +0:00 that winter.
-#
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
-# DSH writes that despite Decree 1,469 (1915), the change to the clocks was not
-# done every year, depending on what Spain did, because of railroad schedules.
-# Go with Shanks & Pottenger.
+# From Tim Parenti (2024-07-01), per Paul Eggert (1999-01-30):
+# DSH writes in their history that Decreto 1469 of 1915-03-30 established
+# summer time and that, "despite" this, the change to the clocks was not done
+# every year, depending on what Spain did, because of railroad schedules.
+# In fact, that decree had nothing to do with DST; rather, it regulated the
+# sending of time signals. But we do see linkage to Spain in the 1920s below.
+# https://dre.pt/dr/detalhe/decreto/1469-1915-285721
+# https://dre.pt/application/conteudo/285721
+#
+# According to the Observatory, standard time was first advanced by Decreto
+# 2433 of 1916-06-09 and restored by Decreto 2712 of 1916-10-28. While Whitman
+# gives 1916-10-31 for the latter transition, Shanks & Pottenger agrees more
+# closely with the decree, which stated that its provision "will start sixty
+# minutes after the end of 31 October, according to the current time," i.e.,
+# 01:00 on 1 November.
+# https://dre.pt/dr/detalhe/decreto/2433-1916-267192
+# https://dre.pt/application/conteudo/267192
+# https://dre.pt/dr/detalhe/decreto/2712-1916-590937
+# https://dre.pt/application/conteudo/590937
Rule Port 1916 only - Jun 17 23:00 1:00 S
-# Whitman gives 1916 Oct 31; go with Shanks & Pottenger.
Rule Port 1916 only - Nov 1 1:00 0 -
-Rule Port 1917 only - Feb 28 23:00s 1:00 S
-Rule Port 1917 1921 - Oct 14 23:00s 0 -
-Rule Port 1918 only - Mar 1 23:00s 1:00 S
-Rule Port 1919 only - Feb 28 23:00s 1:00 S
-Rule Port 1920 only - Feb 29 23:00s 1:00 S
-Rule Port 1921 only - Feb 28 23:00s 1:00 S
+# From Tim Parenti (2024-07-01):
+# Article 7 of Decreto 2922 of 1916-12-30 stated that "the legal time will be
+# advanced by sixty minutes from 1 March to 31 October." Per Article 15, this
+# came into force from 1917-01-01. Just before the first fall back, Decreto
+# 3446 of 1917-10-11 changed the annual end date to 14 October.
+# https://dre.pt/dr/detalhe/decreto/2922-1916-261894
+# https://dre.pt/application/conteudo/261894
+# https://dre.pt/dr/detalhe/decreto/3446-1917-495161
+# https://dre.pt/application/conteudo/495161
+# This annual change was revoked by Decreto 8038 of 1922-02-18.
+# https://dre.pt/dr/detalhe/decreto/8038-1922-569751
+# https://dre.pt/application/conteudo/569751
+Rule Port 1917 1921 - Mar 1 0:00 1:00 S
+Rule Port 1917 1921 - Oct 14 24:00 0 -
+# From Tim Parenti (2024-07-01):
+# Decreto 9592 of 1924-04-14 noted that "France maintains the advance of legal
+# time in the summer and Spain has now adopted it for the first time" and
+# considered "that the absence of similar measures would cause serious
+# difficulties for international rail connections with consequent repercussions
+# on domestic service hours..." along with "inconvenient analogues...for postal
+# and telegraph services." Summer time would be in effect from 17 April to 4
+# October, with the spring change explicitly specified by bringing clocks
+# forward from 16 April 23:00.
+# https://dre.pt/dr/detalhe/decreto/9592-1924-652133
+# https://dre.pt/application/conteudo/652133
+#
+# Decreto 10700, issued 1925-04-16, noted that Spain had not continued summer
+# time, declared that "the current legal hour prior to 17 April remains
+# unchanged from that day forward", and revoked legislation to the contrary,
+# just a day before summer time would have otherwise resumed.
+# https://dre.pt/dr/detalhe/decreto/10700-1925-437826
+# https://dre.pt/application/conteudo/437826
Rule Port 1924 only - Apr 16 23:00s 1:00 S
-Rule Port 1924 only - Oct 14 23:00s 0 -
+Rule Port 1924 only - Oct 4 23:00s 0 -
Rule Port 1926 only - Apr 17 23:00s 1:00 S
Rule Port 1926 1929 - Oct Sat>=1 23:00s 0 -
Rule Port 1927 only - Apr 9 23:00s 1:00 S
@@ -2116,6 +2162,8 @@ Rule Port 1931 1932 - Oct Sat>=1 23:00s 0 -
Rule Port 1932 only - Apr 2 23:00s 1:00 S
Rule Port 1934 only - Apr 7 23:00s 1:00 S
# Whitman gives 1934 Oct 5; go with Shanks & Pottenger.
+# Note: The 1935 law specified 10-06 00:00, not 10-05 24:00, but the following
+# is equivalent and more succinct.
Rule Port 1934 1938 - Oct Sat>=1 23:00s 0 -
# Shanks & Pottenger give 1935 Apr 30; go with Whitman.
Rule Port 1935 only - Mar 30 23:00s 1:00 S
@@ -2126,10 +2174,19 @@ Rule Port 1938 only - Mar 26 23:00s 1:00 S
Rule Port 1939 only - Apr 15 23:00s 1:00 S
# Whitman gives 1939 Oct 7; go with Shanks & Pottenger.
Rule Port 1939 only - Nov 18 23:00s 0 -
+# From Tim Parenti (2024-07-01):
+# Portaria 9465 of 1940-02-17 advanced clocks from Saturday 1940-02-24 23:00.
+# The clocks were restored by Portaria 9658, issued Monday 1940-10-07,
+# effective from 24:00 that very night, which agrees with Shanks & Pottenger;
+# Whitman gives Saturday 1940-10-05 instead.
+# https://dre.pt/dr/detalhe/portaria/9465-1940-189096
+# https://dre.pt/application/conteudo/189096
+# https://dre.pt/dr/detalhe/portaria/9658-1940-196729
+# https://dre.pt/application/conteudo/196729
Rule Port 1940 only - Feb 24 23:00s 1:00 S
-# Shanks & Pottenger give 1940 Oct 7; go with Whitman.
-Rule Port 1940 1941 - Oct 5 23:00s 0 -
+Rule Port 1940 only - Oct 7 23:00s 0 -
Rule Port 1941 only - Apr 5 23:00s 1:00 S
+Rule Port 1941 only - Oct 5 23:00s 0 -
Rule Port 1942 1945 - Mar Sat>=8 23:00s 1:00 S
Rule Port 1942 only - Apr 25 22:00s 2:00 M # Midsummer
Rule Port 1942 only - Aug 15 22:00s 1:00 S
@@ -2139,66 +2196,195 @@ Rule Port 1943 1945 - Aug Sat>=25 22:00s 1:00 S
Rule Port 1944 1945 - Apr Sat>=21 22:00s 2:00 M
Rule Port 1946 only - Apr Sat>=1 23:00s 1:00 S
Rule Port 1946 only - Oct Sat>=1 23:00s 0 -
-# Whitman says DST was not observed in 1950; go with Shanks & Pottenger.
-# Whitman gives Oct lastSun for 1952 on; go with Shanks & Pottenger.
-Rule Port 1947 1965 - Apr Sun>=1 2:00s 1:00 S
+# From Tim Parenti (2024-07-01), per Alois Treindl (2021-02-07):
+# The Astronomical Observatory of Lisbon cites Portaria 11767 of 1947-03-28 for
+# 1947 and Portaria 12286 of 1948-02-19 for 1948.
+# https://dre.pt/dr/detalhe/portaria/11767-1947-414787
+# https://dre.pt/application/conteudo/414787
+# https://dre.pt/dr/detalhe/portaria/12286-1948-152953
+# https://dre.pt/application/conteudo/152953
+#
+# Although the latter ordinance explicitly had the 1948-10-03 transition
+# scheduled for 02:00 rather than 03:00 as had been used in 1947, Decreto-Lei
+# 37048 of 1948-09-07 recognized "that it is advisable to definitely set...the
+# 'summer time' regime", and fixed the fall transition at 03:00 moving forward.
+# https://dre.pt/dr/detalhe/decreto-lei/37048-1948-373810
+# https://dre.pt/application/conteudo/373810
+# While the Observatory only cites this act for 1949-1965 and not for 1948, it
+# does not appear to have had any provision delaying its effect, so assume that
+# it overrode the prior ordinance for 1948-10-03.
+#
+# Whitman says DST was not observed in 1950 and gives Oct lastSun for 1952 on.
+# The Observatory, however, agrees with Shanks & Pottenger that 1950 was not an
+# exception and that Oct Sun>=1 was maintained through 1965.
+Rule Port 1947 1966 - Apr Sun>=1 2:00s 1:00 S
Rule Port 1947 1965 - Oct Sun>=1 2:00s 0 -
-Rule Port 1977 only - Mar 27 0:00s 1:00 S
-Rule Port 1977 only - Sep 25 0:00s 0 -
-Rule Port 1978 1979 - Apr Sun>=1 0:00s 1:00 S
-Rule Port 1978 only - Oct 1 0:00s 0 -
-Rule Port 1979 1982 - Sep lastSun 1:00s 0 -
-Rule Port 1980 only - Mar lastSun 0:00s 1:00 S
-Rule Port 1981 1982 - Mar lastSun 1:00s 1:00 S
-Rule Port 1983 only - Mar lastSun 2:00s 1:00 S
+# From Tim Parenti (2024-07-01):
+# Decreto-Lei 47233 of 1966-10-01 considered that the "duality" in time was
+# "the cause of serious disturbances" and noted that "the countries with which
+# we have the most frequent contacts...have already adopted" a solution
+# coinciding with the extant "summer time". It established that the former
+# "summer time" would apply year-round on the mainland and adjacent islands
+# with immediate effect, as the fall back would have otherwise occurred later
+# that evening.
+# https://dre.pt/dr/detalhe/decreto-lei/47233-1966-293729
+# Model this by changing zones without changing clocks at the
+# previously-appointed fall back time.
+#
+# Decreto-Lei 309/76 of 1976-04-27 acknowledged that those international
+# contacts had returned to adopting seasonal times, and considered that the
+# year-round advancement "entails considerable sacrifices for the vast majority
+# of the working population during the winter months", including morning
+# visibility concerns for schoolchildren. It specified, beginning 1976-09-26
+# 01:00, an annual return to UT+00 on the mainland from 00:00 UT on Sep lastSun
+# to 00:00 UT on Mar lastSun (unless the latter date fell on Easter, in which
+# case it was to be brought forward to the preceding Sunday). It also assigned
+# the Permanent Time Commission to study and propose revisions for the Azores
+# and Madeira, neither of which resumed DST until 1982 (as described further
+# below).
+# https://dre.pt/dr/detalhe/decreto-lei/309-1976-502063
+Rule Port 1976 only - Sep lastSun 1:00 0 -
+Rule Port 1977 only - Mar lastSun 0:00s 1:00 S
+Rule Port 1977 only - Sep lastSun 0:00s 0 -
+# From Tim Parenti (2024-07-01):
+# Beginning in 1978, rather than triggering the Easter rule of the 1976 decree
+# (Easter fell on 1978-03-26), Article 5 was used instead, which allowed DST
+# dates to be changed by order of the Minister of Education and Scientific
+# Research, upon consultation with the Permanent Time Commission, "whenever
+# considered convenient." As such, a series of one-off ordinances were
+# promulgated for the mainland in 1978 through 1980, after which the 1976
+# decree naturally came back into force from 1981.
+Rule Port 1978 1980 - Apr Sun>=1 1:00s 1:00 S
+Rule Port 1978 only - Oct 1 1:00s 0 -
+Rule Port 1979 1980 - Sep lastSun 1:00s 0 -
+Rule Port 1981 1986 - Mar lastSun 0:00s 1:00 S
+Rule Port 1981 1985 - Sep lastSun 0:00s 0 -
+# From Tim Parenti (2024-07-01):
+# Decreto-Lei 44-B/86 of 1986-03-07 switched mainland Portugal's transition
+# times from 0:00s to 1:00u to harmonize with the EEC from 1986-03-30.
+# https://dre.pt/dr/detalhe/decreto-lei/44-b-1986-628280
+# (Transitions of 1:00s as previously reported and used by the W-Eur rules,
+# though equivalent, appear to have been fiction here.) Madeira continued to
+# use 0:00s for spring 1986 before joining with the mainland using 1:00u in the
+# fall; meanwhile, in the Azores the two were equivalent, so the law specifying
+# 0:00s wasn't touched until 1992. (See below for more on the islands.)
+#
+# From Rui Pedro Salgueiro (1992-11-12):
+# Portugal has recently (September, 27) changed timezone
+# (from WET to MET or CET) to harmonize with EEC.
+#
+# Martin Bruckmann (1996-02-29) reports via Peter Ilieve
+# that Portugal is reverting to 0:00 by not moving its clocks this spring.
+# The new Prime Minister was fed up with getting up in the dark in the winter.
+#
+# From Paul Eggert (1996-11-12):
+# IATA SSIM (1991-09) reports several 1991-09 and 1992-09 transitions
+# at 02:00u, not 01:00u. Assume that these are typos.
#
# Zone NAME STDOFF RULES FORMAT [UNTIL]
#STDOFF -0:36:44.68
Zone Europe/Lisbon -0:36:45 - LMT 1884
-0:36:45 - LMT 1912 Jan 1 0:00u # Lisbon MT
- 0:00 Port WE%sT 1966 Apr 3 2:00
+ 0:00 Port WE%sT 1966 Oct 2 2:00s
1:00 - CET 1976 Sep 26 1:00
- 0:00 Port WE%sT 1983 Sep 25 1:00s
- 0:00 W-Eur WE%sT 1992 Sep 27 1:00s
+ 0:00 Port WE%sT 1986
+ 0:00 EU WE%sT 1992 Sep 27 1:00u
1:00 EU CE%sT 1996 Mar 31 1:00u
0:00 EU WE%sT
+
+# From Tim Parenti (2024-07-01):
+# For the Azores and Madeira, legislation was followed from the laws currently
+# in force as listed at:
+# https://oal.ul.pt/hora-legal/legislacao/
+# working backward through references of revocation and abrogation to
+# Decreto-Lei 47233 of 1966-10-01, the last time DST was abolished across the
+# mainland and its adjacent islands. Because of that reference, it is
+# therefore assumed that DST rules in the islands prior to 1966 were like that
+# of the mainland, though most legislation of the time didn't explicitly
+# specify DST practices for the islands.
Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada
-1:54:32 - HMT 1912 Jan 1 2:00u # Horta MT
# Vanguard section, for zic and other parsers that support %z.
-# -2:00 Port %z 1966 Apr 3 2:00
-# -1:00 Port %z 1983 Sep 25 1:00s
-# -1:00 W-Eur %z 1992 Sep 27 1:00s
+ -2:00 Port %z 1966 Oct 2 2:00s
+# From Tim Parenti (2024-07-01):
+# While Decreto-Lei 309/76 of 1976-04-27 reintroduced DST on the mainland by
+# falling back on 1976-09-26, it assigned the Permanent Time Commission to
+# study and propose revisions for the Azores and Madeira. Decreto Regional
+# 9/77/A of 1977-05-17 affirmed that "the legal time remained unchanged in the
+# Azores" at UT-1, and would remain there year-round.
+# https://dre.pt/dr/detalhe/decreto-regional/9-1977-252066
+#
+# Decreto Regional 2/82/A, published 1982-03-02, adopted DST in the same
+# fashion as the mainland used at the time.
+# https://dre.pt/dr/detalhe/decreto-regional/2-1982-599965
+# Though transitions in the Azores officially remained at 0:00s through 1992,
+# this was equivalent to the EU-style 1:00u adopted by the mainland in 1986, so
+# model it as such.
+ -1:00 - %z 1982 Mar 28 0:00s
+ -1:00 Port %z 1986
# Rearguard section, for parsers lacking %z; see ziguard.awk.
- -2:00 Port -02/-01 1942 Apr 25 22:00s
- -2:00 Port +00 1942 Aug 15 22:00s
- -2:00 Port -02/-01 1943 Apr 17 22:00s
- -2:00 Port +00 1943 Aug 28 22:00s
- -2:00 Port -02/-01 1944 Apr 22 22:00s
- -2:00 Port +00 1944 Aug 26 22:00s
- -2:00 Port -02/-01 1945 Apr 21 22:00s
- -2:00 Port +00 1945 Aug 25 22:00s
- -2:00 Port -02/-01 1966 Apr 3 2:00
- -1:00 Port -01/+00 1983 Sep 25 1:00s
- -1:00 W-Eur -01/+00 1992 Sep 27 1:00s
+# -2:00 Port -02/-01 1942 Apr 25 22:00s
+# -2:00 Port +00 1942 Aug 15 22:00s
+# -2:00 Port -02/-01 1943 Apr 17 22:00s
+# -2:00 Port +00 1943 Aug 28 22:00s
+# -2:00 Port -02/-01 1944 Apr 22 22:00s
+# -2:00 Port +00 1944 Aug 26 22:00s
+# -2:00 Port -02/-01 1945 Apr 21 22:00s
+# -2:00 Port +00 1945 Aug 25 22:00s
+# -2:00 Port -02/-01 1966 Oct 2 2:00s
+# -1:00 - -01 1982 Mar 28 0:00s
+# -1:00 Port -01/+00 1986
# End of rearguard section.
- 0:00 EU WE%sT 1993 Mar 28 1:00u
- -1:00 EU -01/+00
+#
+# From Paul Eggert (1996-11-12):
+# IATA SSIM (1991/1992) reports that the Azores were at -1:00.
+# IATA SSIM (1993-02) says +0:00; later issues (through 1996-09) say -1:00.
+#
+# From Tim Parenti (2024-07-01):
+# After mainland Portugal had shifted forward an hour from 1992-09-27, Decreto
+# Legislativo Regional 29/92/A of 1992-12-23 sought to "reduce the time
+# difference" by shifting the Azores forward as well from 1992-12-27. Just six
+# months later, this was revoked by Decreto Legislativo Regional 9/93/A, citing
+# "major changes in work habits and way of life." Though the revocation didn't
+# give a transition time, it was signed Wednesday 1993-06-16; assume it took
+# effect later that evening, and that an EU-style spring forward (to +01) was
+# still observed in the interim on 1993-03-28.
+# https://dre.pt/dr/detalhe/decreto-legislativo-regional/29-1992-621553
+# https://dre.pt/dr/detalhe/decreto-legislativo-regional/9-1993-389633
+ -1:00 EU %z 1992 Dec 27 1:00s
+ 0:00 EU WE%sT 1993 Jun 17 1:00u
+ -1:00 EU %z
+
Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal
-1:07:36 - FMT 1912 Jan 1 1:00u # Funchal MT
# Vanguard section, for zic and other parsers that support %z.
-# -1:00 Port %z 1966 Apr 3 2:00
+ -1:00 Port %z 1966 Oct 2 2:00s
# Rearguard section, for parsers lacking %z; see ziguard.awk.
- -1:00 Port -01/+00 1942 Apr 25 22:00s
- -1:00 Port +01 1942 Aug 15 22:00s
- -1:00 Port -01/+00 1943 Apr 17 22:00s
- -1:00 Port +01 1943 Aug 28 22:00s
- -1:00 Port -01/+00 1944 Apr 22 22:00s
- -1:00 Port +01 1944 Aug 26 22:00s
- -1:00 Port -01/+00 1945 Apr 21 22:00s
- -1:00 Port +01 1945 Aug 25 22:00s
- -1:00 Port -01/+00 1966 Apr 3 2:00
+# -1:00 Port -01/+00 1942 Apr 25 22:00s
+# -1:00 Port +01 1942 Aug 15 22:00s
+# -1:00 Port -01/+00 1943 Apr 17 22:00s
+# -1:00 Port +01 1943 Aug 28 22:00s
+# -1:00 Port -01/+00 1944 Apr 22 22:00s
+# -1:00 Port +01 1944 Aug 26 22:00s
+# -1:00 Port -01/+00 1945 Apr 21 22:00s
+# -1:00 Port +01 1945 Aug 25 22:00s
+# -1:00 Port -01/+00 1966 Oct 2 2:00s
# End of rearguard section.
- 0:00 Port WE%sT 1983 Sep 25 1:00s
+#
+# From Tim Parenti (2024-07-01):
+# Decreto Regional 5/82/M, published 1982-04-03, established DST transitions at
+# 0:00u, which for Madeira is equivalent to the mainland's rules (0:00s) at the
+# time. It came into effect the day following its publication, Sunday
+# 1982-04-04, thus resuming Madeira's DST practice about a week later than the
+# mainland and the Azores.
+# https://dre.pt/dr/detalhe/decreto-regional/5-1982-608273
+#
+# Decreto Legislativo Regional 18/86/M, published 1986-10-01, adopted EU-style
+# rules (1:00u) and entered into immediate force after being signed on
+# 1986-07-31.
+# https://dre.pt/dr/detalhe/decreto-legislativo-regional/18-1986-221705
+ 0:00 - WET 1982 Apr 4
+ 0:00 Port WE%sT 1986 Jul 31
0:00 EU WE%sT
# Romania
@@ -2410,7 +2596,7 @@ Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr
2:00 Poland EE%sT 1946 Apr 7
3:00 Russia MSK/MSD 1989 Mar 26 2:00s
2:00 Russia EE%sT 2011 Mar 27 2:00s
- 3:00 - +03 2014 Oct 26 2:00s
+ 3:00 - %z 2014 Oct 26 2:00s
2:00 - EET
@@ -2660,14 +2846,14 @@ Zone Europe/Simferopol 2:16:24 - LMT 1880
# http://publication.pravo.gov.ru/Document/View/0001201602150056
Zone Europe/Astrakhan 3:12:12 - LMT 1924 May
- 3:00 - +03 1930 Jun 21
- 4:00 Russia +04/+05 1989 Mar 26 2:00s
- 3:00 Russia +03/+04 1991 Mar 31 2:00s
- 4:00 - +04 1992 Mar 29 2:00s
- 3:00 Russia +03/+04 2011 Mar 27 2:00s
- 4:00 - +04 2014 Oct 26 2:00s
- 3:00 - +03 2016 Mar 27 2:00s
- 4:00 - +04
+ 3:00 - %z 1930 Jun 21
+ 4:00 Russia %z 1989 Mar 26 2:00s
+ 3:00 Russia %z 1991 Mar 31 2:00s
+ 4:00 - %z 1992 Mar 29 2:00s
+ 3:00 Russia %z 2011 Mar 27 2:00s
+ 4:00 - %z 2014 Oct 26 2:00s
+ 3:00 - %z 2016 Mar 27 2:00s
+ 4:00 - %z
# From Paul Eggert (2016-11-11):
# Europe/Volgograd covers:
@@ -2697,15 +2883,15 @@ Zone Europe/Astrakhan 3:12:12 - LMT 1924 May
# http://publication.pravo.gov.ru/Document/View/0001202012220002
Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3
- 3:00 - +03 1930 Jun 21
- 4:00 - +04 1961 Nov 11
- 4:00 Russia +04/+05 1988 Mar 27 2:00s
+ 3:00 - %z 1930 Jun 21
+ 4:00 - %z 1961 Nov 11
+ 4:00 Russia %z 1988 Mar 27 2:00s
3:00 Russia MSK/MSD 1991 Mar 31 2:00s
- 4:00 - +04 1992 Mar 29 2:00s
+ 4:00 - %z 1992 Mar 29 2:00s
3:00 Russia MSK/MSD 2011 Mar 27 2:00s
4:00 - MSK 2014 Oct 26 2:00s
3:00 - MSK 2018 Oct 28 2:00s
- 4:00 - +04 2020 Dec 27 2:00s
+ 4:00 - %z 2020 Dec 27 2:00s
3:00 - MSK
# From Paul Eggert (2016-11-11):
@@ -2720,14 +2906,14 @@ Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3
# http://publication.pravo.gov.ru/Document/View/0001201611220031
Zone Europe/Saratov 3:04:18 - LMT 1919 Jul 1 0:00u
- 3:00 - +03 1930 Jun 21
- 4:00 Russia +04/+05 1988 Mar 27 2:00s
- 3:00 Russia +03/+04 1991 Mar 31 2:00s
- 4:00 - +04 1992 Mar 29 2:00s
- 3:00 Russia +03/+04 2011 Mar 27 2:00s
- 4:00 - +04 2014 Oct 26 2:00s
- 3:00 - +03 2016 Dec 4 2:00s
- 4:00 - +04
+ 3:00 - %z 1930 Jun 21
+ 4:00 Russia %z 1988 Mar 27 2:00s
+ 3:00 Russia %z 1991 Mar 31 2:00s
+ 4:00 - %z 1992 Mar 29 2:00s
+ 3:00 Russia %z 2011 Mar 27 2:00s
+ 4:00 - %z 2014 Oct 26 2:00s
+ 3:00 - %z 2016 Dec 4 2:00s
+ 4:00 - %z
# From Paul Eggert (2016-03-18):
# Europe/Kirov covers:
@@ -2735,10 +2921,10 @@ Zone Europe/Saratov 3:04:18 - LMT 1919 Jul 1 0:00u
# The 1989 transition is from USSR act No. 227 (1989-03-14).
#
Zone Europe/Kirov 3:18:48 - LMT 1919 Jul 1 0:00u
- 3:00 - +03 1930 Jun 21
- 4:00 Russia +04/+05 1989 Mar 26 2:00s
+ 3:00 - %z 1930 Jun 21
+ 4:00 Russia %z 1989 Mar 26 2:00s
3:00 Russia MSK/MSD 1991 Mar 31 2:00s
- 4:00 - +04 1992 Mar 29 2:00s
+ 4:00 - %z 1992 Mar 29 2:00s
3:00 Russia MSK/MSD 2011 Mar 27 2:00s
4:00 - MSK 2014 Oct 26 2:00s
3:00 - MSK
@@ -2753,15 +2939,15 @@ Zone Europe/Kirov 3:18:48 - LMT 1919 Jul 1 0:00u
# The 1989 transition is from USSR act No. 227 (1989-03-14).
Zone Europe/Samara 3:20:20 - LMT 1919 Jul 1 0:00u
- 3:00 - +03 1930 Jun 21
- 4:00 - +04 1935 Jan 27
- 4:00 Russia +04/+05 1989 Mar 26 2:00s
- 3:00 Russia +03/+04 1991 Mar 31 2:00s
- 2:00 Russia +02/+03 1991 Sep 29 2:00s
- 3:00 - +03 1991 Oct 20 3:00
- 4:00 Russia +04/+05 2010 Mar 28 2:00s
- 3:00 Russia +03/+04 2011 Mar 27 2:00s
- 4:00 - +04
+ 3:00 - %z 1930 Jun 21
+ 4:00 - %z 1935 Jan 27
+ 4:00 Russia %z 1989 Mar 26 2:00s
+ 3:00 Russia %z 1991 Mar 31 2:00s
+ 2:00 Russia %z 1991 Sep 29 2:00s
+ 3:00 - %z 1991 Oct 20 3:00
+ 4:00 Russia %z 2010 Mar 28 2:00s
+ 3:00 Russia %z 2011 Mar 27 2:00s
+ 4:00 - %z
# From Paul Eggert (2016-03-18):
# Europe/Ulyanovsk covers:
@@ -2777,14 +2963,14 @@ Zone Europe/Samara 3:20:20 - LMT 1919 Jul 1 0:00u
# http://publication.pravo.gov.ru/Document/View/0001201603090051
Zone Europe/Ulyanovsk 3:13:36 - LMT 1919 Jul 1 0:00u
- 3:00 - +03 1930 Jun 21
- 4:00 Russia +04/+05 1989 Mar 26 2:00s
- 3:00 Russia +03/+04 1991 Mar 31 2:00s
- 2:00 Russia +02/+03 1992 Jan 19 2:00s
- 3:00 Russia +03/+04 2011 Mar 27 2:00s
- 4:00 - +04 2014 Oct 26 2:00s
- 3:00 - +03 2016 Mar 27 2:00s
- 4:00 - +04
+ 3:00 - %z 1930 Jun 21
+ 4:00 Russia %z 1989 Mar 26 2:00s
+ 3:00 Russia %z 1991 Mar 31 2:00s
+ 2:00 Russia %z 1992 Jan 19 2:00s
+ 3:00 Russia %z 2011 Mar 27 2:00s
+ 4:00 - %z 2014 Oct 26 2:00s
+ 3:00 - %z 2016 Mar 27 2:00s
+ 4:00 - %z
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
# Asia/Yekaterinburg covers...
@@ -2809,12 +2995,12 @@ Zone Europe/Ulyanovsk 3:13:36 - LMT 1919 Jul 1 0:00u
#STDOFF 4:02:32.9
Zone Asia/Yekaterinburg 4:02:33 - LMT 1916 Jul 3
3:45:05 - PMT 1919 Jul 15 4:00
- 4:00 - +04 1930 Jun 21
- 5:00 Russia +05/+06 1991 Mar 31 2:00s
- 4:00 Russia +04/+05 1992 Jan 19 2:00s
- 5:00 Russia +05/+06 2011 Mar 27 2:00s
- 6:00 - +06 2014 Oct 26 2:00s
- 5:00 - +05
+ 4:00 - %z 1930 Jun 21
+ 5:00 Russia %z 1991 Mar 31 2:00s
+ 4:00 Russia %z 1992 Jan 19 2:00s
+ 5:00 Russia %z 2011 Mar 27 2:00s
+ 6:00 - %z 2014 Oct 26 2:00s
+ 5:00 - %z
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
@@ -2824,12 +3010,12 @@ Zone Asia/Yekaterinburg 4:02:33 - LMT 1916 Jul 3
# Byalokoz 1919 says Omsk was 4:53:30.
Zone Asia/Omsk 4:53:30 - LMT 1919 Nov 14
- 5:00 - +05 1930 Jun 21
- 6:00 Russia +06/+07 1991 Mar 31 2:00s
- 5:00 Russia +05/+06 1992 Jan 19 2:00s
- 6:00 Russia +06/+07 2011 Mar 27 2:00s
- 7:00 - +07 2014 Oct 26 2:00s
- 6:00 - +06
+ 5:00 - %z 1930 Jun 21
+ 6:00 Russia %z 1991 Mar 31 2:00s
+ 5:00 Russia %z 1992 Jan 19 2:00s
+ 6:00 Russia %z 2011 Mar 27 2:00s
+ 7:00 - %z 2014 Oct 26 2:00s
+ 6:00 - %z
# From Paul Eggert (2016-02-22):
# Asia/Barnaul covers:
@@ -2862,14 +3048,14 @@ Zone Asia/Omsk 4:53:30 - LMT 1919 Nov 14
# http://publication.pravo.gov.ru/Document/View/0001201603090038
Zone Asia/Barnaul 5:35:00 - LMT 1919 Dec 10
- 6:00 - +06 1930 Jun 21
- 7:00 Russia +07/+08 1991 Mar 31 2:00s
- 6:00 Russia +06/+07 1992 Jan 19 2:00s
- 7:00 Russia +07/+08 1995 May 28
- 6:00 Russia +06/+07 2011 Mar 27 2:00s
- 7:00 - +07 2014 Oct 26 2:00s
- 6:00 - +06 2016 Mar 27 2:00s
- 7:00 - +07
+ 6:00 - %z 1930 Jun 21
+ 7:00 Russia %z 1991 Mar 31 2:00s
+ 6:00 Russia %z 1992 Jan 19 2:00s
+ 7:00 Russia %z 1995 May 28
+ 6:00 Russia %z 2011 Mar 27 2:00s
+ 7:00 - %z 2014 Oct 26 2:00s
+ 6:00 - %z 2016 Mar 27 2:00s
+ 7:00 - %z
# From Paul Eggert (2016-03-18):
# Asia/Novosibirsk covers:
@@ -2883,14 +3069,14 @@ Zone Asia/Barnaul 5:35:00 - LMT 1919 Dec 10
# http://publication.pravo.gov.ru/Document/View/0001201607040064
Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
- 6:00 - +06 1930 Jun 21
- 7:00 Russia +07/+08 1991 Mar 31 2:00s
- 6:00 Russia +06/+07 1992 Jan 19 2:00s
- 7:00 Russia +07/+08 1993 May 23 # say Shanks & P.
- 6:00 Russia +06/+07 2011 Mar 27 2:00s
- 7:00 - +07 2014 Oct 26 2:00s
- 6:00 - +06 2016 Jul 24 2:00s
- 7:00 - +07
+ 6:00 - %z 1930 Jun 21
+ 7:00 Russia %z 1991 Mar 31 2:00s
+ 6:00 Russia %z 1992 Jan 19 2:00s
+ 7:00 Russia %z 1993 May 23 # say Shanks & P.
+ 6:00 Russia %z 2011 Mar 27 2:00s
+ 7:00 - %z 2014 Oct 26 2:00s
+ 6:00 - %z 2016 Jul 24 2:00s
+ 7:00 - %z
# From Paul Eggert (2016-03-18):
# Asia/Tomsk covers:
@@ -2935,14 +3121,14 @@ Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
# http://publication.pravo.gov.ru/Document/View/0001201604260048
Zone Asia/Tomsk 5:39:51 - LMT 1919 Dec 22
- 6:00 - +06 1930 Jun 21
- 7:00 Russia +07/+08 1991 Mar 31 2:00s
- 6:00 Russia +06/+07 1992 Jan 19 2:00s
- 7:00 Russia +07/+08 2002 May 1 3:00
- 6:00 Russia +06/+07 2011 Mar 27 2:00s
- 7:00 - +07 2014 Oct 26 2:00s
- 6:00 - +06 2016 May 29 2:00s
- 7:00 - +07
+ 6:00 - %z 1930 Jun 21
+ 7:00 Russia %z 1991 Mar 31 2:00s
+ 6:00 Russia %z 1992 Jan 19 2:00s
+ 7:00 Russia %z 2002 May 1 3:00
+ 6:00 Russia %z 2011 Mar 27 2:00s
+ 7:00 - %z 2014 Oct 26 2:00s
+ 6:00 - %z 2016 May 29 2:00s
+ 7:00 - %z
# From Tim Parenti (2014-07-03):
@@ -2973,12 +3159,12 @@ Zone Asia/Tomsk 5:39:51 - LMT 1919 Dec 22
# realigning itself with KRAT.
Zone Asia/Novokuznetsk 5:48:48 - LMT 1924 May 1
- 6:00 - +06 1930 Jun 21
- 7:00 Russia +07/+08 1991 Mar 31 2:00s
- 6:00 Russia +06/+07 1992 Jan 19 2:00s
- 7:00 Russia +07/+08 2010 Mar 28 2:00s
- 6:00 Russia +06/+07 2011 Mar 27 2:00s
- 7:00 - +07
+ 6:00 - %z 1930 Jun 21
+ 7:00 Russia %z 1991 Mar 31 2:00s
+ 6:00 Russia %z 1992 Jan 19 2:00s
+ 7:00 Russia %z 2010 Mar 28 2:00s
+ 6:00 Russia %z 2011 Mar 27 2:00s
+ 7:00 - %z
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
# Asia/Krasnoyarsk covers...
@@ -2992,12 +3178,12 @@ Zone Asia/Novokuznetsk 5:48:48 - LMT 1924 May 1
# Byalokoz 1919 says Krasnoyarsk was 6:11:26.
Zone Asia/Krasnoyarsk 6:11:26 - LMT 1920 Jan 6
- 6:00 - +06 1930 Jun 21
- 7:00 Russia +07/+08 1991 Mar 31 2:00s
- 6:00 Russia +06/+07 1992 Jan 19 2:00s
- 7:00 Russia +07/+08 2011 Mar 27 2:00s
- 8:00 - +08 2014 Oct 26 2:00s
- 7:00 - +07
+ 6:00 - %z 1930 Jun 21
+ 7:00 Russia %z 1991 Mar 31 2:00s
+ 6:00 Russia %z 1992 Jan 19 2:00s
+ 7:00 Russia %z 2011 Mar 27 2:00s
+ 8:00 - %z 2014 Oct 26 2:00s
+ 7:00 - %z
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
@@ -3014,12 +3200,12 @@ Zone Asia/Krasnoyarsk 6:11:26 - LMT 1920 Jan 6
Zone Asia/Irkutsk 6:57:05 - LMT 1880
6:57:05 - IMT 1920 Jan 25 # Irkutsk Mean Time
- 7:00 - +07 1930 Jun 21
- 8:00 Russia +08/+09 1991 Mar 31 2:00s
- 7:00 Russia +07/+08 1992 Jan 19 2:00s
- 8:00 Russia +08/+09 2011 Mar 27 2:00s
- 9:00 - +09 2014 Oct 26 2:00s
- 8:00 - +08
+ 7:00 - %z 1930 Jun 21
+ 8:00 Russia %z 1991 Mar 31 2:00s
+ 7:00 Russia %z 1992 Jan 19 2:00s
+ 8:00 Russia %z 2011 Mar 27 2:00s
+ 9:00 - %z 2014 Oct 26 2:00s
+ 8:00 - %z
# From Tim Parenti (2014-07-06):
@@ -3036,13 +3222,13 @@ Zone Asia/Irkutsk 6:57:05 - LMT 1880
# http://publication.pravo.gov.ru/Document/View/0001201512300107
Zone Asia/Chita 7:33:52 - LMT 1919 Dec 15
- 8:00 - +08 1930 Jun 21
- 9:00 Russia +09/+10 1991 Mar 31 2:00s
- 8:00 Russia +08/+09 1992 Jan 19 2:00s
- 9:00 Russia +09/+10 2011 Mar 27 2:00s
- 10:00 - +10 2014 Oct 26 2:00s
- 8:00 - +08 2016 Mar 27 2:00
- 9:00 - +09
+ 8:00 - %z 1930 Jun 21
+ 9:00 Russia %z 1991 Mar 31 2:00s
+ 8:00 Russia %z 1992 Jan 19 2:00s
+ 9:00 Russia %z 2011 Mar 27 2:00s
+ 10:00 - %z 2014 Oct 26 2:00s
+ 8:00 - %z 2016 Mar 27 2:00
+ 9:00 - %z
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
@@ -3082,12 +3268,12 @@ Zone Asia/Chita 7:33:52 - LMT 1919 Dec 15
# Byalokoz 1919 says Yakutsk was 8:38:58.
Zone Asia/Yakutsk 8:38:58 - LMT 1919 Dec 15
- 8:00 - +08 1930 Jun 21
- 9:00 Russia +09/+10 1991 Mar 31 2:00s
- 8:00 Russia +08/+09 1992 Jan 19 2:00s
- 9:00 Russia +09/+10 2011 Mar 27 2:00s
- 10:00 - +10 2014 Oct 26 2:00s
- 9:00 - +09
+ 8:00 - %z 1930 Jun 21
+ 9:00 Russia %z 1991 Mar 31 2:00s
+ 8:00 Russia %z 1992 Jan 19 2:00s
+ 9:00 Russia %z 2011 Mar 27 2:00s
+ 10:00 - %z 2014 Oct 26 2:00s
+ 9:00 - %z
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
@@ -3105,12 +3291,12 @@ Zone Asia/Yakutsk 8:38:58 - LMT 1919 Dec 15
# Go with Byalokoz.
Zone Asia/Vladivostok 8:47:31 - LMT 1922 Nov 15
- 9:00 - +09 1930 Jun 21
- 10:00 Russia +10/+11 1991 Mar 31 2:00s
- 9:00 Russia +09/+10 1992 Jan 19 2:00s
- 10:00 Russia +10/+11 2011 Mar 27 2:00s
- 11:00 - +11 2014 Oct 26 2:00s
- 10:00 - +10
+ 9:00 - %z 1930 Jun 21
+ 10:00 Russia %z 1991 Mar 31 2:00s
+ 9:00 Russia %z 1992 Jan 19 2:00s
+ 10:00 Russia %z 2011 Mar 27 2:00s
+ 11:00 - %z 2014 Oct 26 2:00s
+ 10:00 - %z
# From Tim Parenti (2014-07-03):
@@ -3128,14 +3314,14 @@ Zone Asia/Vladivostok 8:47:31 - LMT 1922 Nov 15
# This transition is no doubt wrong, but we have no better info.
Zone Asia/Khandyga 9:02:13 - LMT 1919 Dec 15
- 8:00 - +08 1930 Jun 21
- 9:00 Russia +09/+10 1991 Mar 31 2:00s
- 8:00 Russia +08/+09 1992 Jan 19 2:00s
- 9:00 Russia +09/+10 2004
- 10:00 Russia +10/+11 2011 Mar 27 2:00s
- 11:00 - +11 2011 Sep 13 0:00s # Decree 725?
- 10:00 - +10 2014 Oct 26 2:00s
- 9:00 - +09
+ 8:00 - %z 1930 Jun 21
+ 9:00 Russia %z 1991 Mar 31 2:00s
+ 8:00 Russia %z 1992 Jan 19 2:00s
+ 9:00 Russia %z 2004
+ 10:00 Russia %z 2011 Mar 27 2:00s
+ 11:00 - %z 2011 Sep 13 0:00s # Decree 725?
+ 10:00 - %z 2014 Oct 26 2:00s
+ 9:00 - %z
# From Tim Parenti (2014-07-03):
@@ -3151,14 +3337,14 @@ Zone Asia/Khandyga 9:02:13 - LMT 1919 Dec 15
# The Zone name should be Asia/Yuzhno-Sakhalinsk, but that's too long.
Zone Asia/Sakhalin 9:30:48 - LMT 1905 Aug 23
- 9:00 - +09 1945 Aug 25
- 11:00 Russia +11/+12 1991 Mar 31 2:00s # Sakhalin T
- 10:00 Russia +10/+11 1992 Jan 19 2:00s
- 11:00 Russia +11/+12 1997 Mar lastSun 2:00s
- 10:00 Russia +10/+11 2011 Mar 27 2:00s
- 11:00 - +11 2014 Oct 26 2:00s
- 10:00 - +10 2016 Mar 27 2:00s
- 11:00 - +11
+ 9:00 - %z 1945 Aug 25
+ 11:00 Russia %z 1991 Mar 31 2:00s # Sakhalin T
+ 10:00 Russia %z 1992 Jan 19 2:00s
+ 11:00 Russia %z 1997 Mar lastSun 2:00s
+ 10:00 Russia %z 2011 Mar 27 2:00s
+ 11:00 - %z 2014 Oct 26 2:00s
+ 10:00 - %z 2016 Mar 27 2:00s
+ 11:00 - %z
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
@@ -3181,13 +3367,13 @@ Zone Asia/Sakhalin 9:30:48 - LMT 1905 Aug 23
# http://publication.pravo.gov.ru/Document/View/0001201604050038
Zone Asia/Magadan 10:03:12 - LMT 1924 May 2
- 10:00 - +10 1930 Jun 21 # Magadan Time
- 11:00 Russia +11/+12 1991 Mar 31 2:00s
- 10:00 Russia +10/+11 1992 Jan 19 2:00s
- 11:00 Russia +11/+12 2011 Mar 27 2:00s
- 12:00 - +12 2014 Oct 26 2:00s
- 10:00 - +10 2016 Apr 24 2:00s
- 11:00 - +11
+ 10:00 - %z 1930 Jun 21 # Magadan Time
+ 11:00 Russia %z 1991 Mar 31 2:00s
+ 10:00 Russia %z 1992 Jan 19 2:00s
+ 11:00 Russia %z 2011 Mar 27 2:00s
+ 12:00 - %z 2014 Oct 26 2:00s
+ 10:00 - %z 2016 Apr 24 2:00s
+ 11:00 - %z
# From Tim Parenti (2014-07-06):
@@ -3232,12 +3418,12 @@ Zone Asia/Magadan 10:03:12 - LMT 1924 May 2
# Go with Srednekolymsk.
Zone Asia/Srednekolymsk 10:14:52 - LMT 1924 May 2
- 10:00 - +10 1930 Jun 21
- 11:00 Russia +11/+12 1991 Mar 31 2:00s
- 10:00 Russia +10/+11 1992 Jan 19 2:00s
- 11:00 Russia +11/+12 2011 Mar 27 2:00s
- 12:00 - +12 2014 Oct 26 2:00s
- 11:00 - +11
+ 10:00 - %z 1930 Jun 21
+ 11:00 Russia %z 1991 Mar 31 2:00s
+ 10:00 Russia %z 1992 Jan 19 2:00s
+ 11:00 Russia %z 2011 Mar 27 2:00s
+ 12:00 - %z 2014 Oct 26 2:00s
+ 11:00 - %z
# From Tim Parenti (2014-07-03):
@@ -3255,14 +3441,14 @@ Zone Asia/Srednekolymsk 10:14:52 - LMT 1924 May 2
# UTC+12 since at least then, too.
Zone Asia/Ust-Nera 9:32:54 - LMT 1919 Dec 15
- 8:00 - +08 1930 Jun 21
- 9:00 Russia +09/+10 1981 Apr 1
- 11:00 Russia +11/+12 1991 Mar 31 2:00s
- 10:00 Russia +10/+11 1992 Jan 19 2:00s
- 11:00 Russia +11/+12 2011 Mar 27 2:00s
- 12:00 - +12 2011 Sep 13 0:00s # Decree 725?
- 11:00 - +11 2014 Oct 26 2:00s
- 10:00 - +10
+ 8:00 - %z 1930 Jun 21
+ 9:00 Russia %z 1981 Apr 1
+ 11:00 Russia %z 1991 Mar 31 2:00s
+ 10:00 Russia %z 1992 Jan 19 2:00s
+ 11:00 Russia %z 2011 Mar 27 2:00s
+ 12:00 - %z 2011 Sep 13 0:00s # Decree 725?
+ 11:00 - %z 2014 Oct 26 2:00s
+ 10:00 - %z
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
@@ -3275,12 +3461,12 @@ Zone Asia/Ust-Nera 9:32:54 - LMT 1919 Dec 15
# The Zone name should be Asia/Petropavlovsk-Kamchatski or perhaps
# Asia/Petropavlovsk-Kamchatsky, but these are too long.
Zone Asia/Kamchatka 10:34:36 - LMT 1922 Nov 10
- 11:00 - +11 1930 Jun 21
- 12:00 Russia +12/+13 1991 Mar 31 2:00s
- 11:00 Russia +11/+12 1992 Jan 19 2:00s
- 12:00 Russia +12/+13 2010 Mar 28 2:00s
- 11:00 Russia +11/+12 2011 Mar 27 2:00s
- 12:00 - +12
+ 11:00 - %z 1930 Jun 21
+ 12:00 Russia %z 1991 Mar 31 2:00s
+ 11:00 Russia %z 1992 Jan 19 2:00s
+ 12:00 Russia %z 2010 Mar 28 2:00s
+ 11:00 Russia %z 2011 Mar 27 2:00s
+ 12:00 - %z
# From Tim Parenti (2014-07-03):
@@ -3288,13 +3474,13 @@ Zone Asia/Kamchatka 10:34:36 - LMT 1922 Nov 10
# 87 RU-CHU Chukotka Autonomous Okrug
Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2
- 12:00 - +12 1930 Jun 21
- 13:00 Russia +13/+14 1982 Apr 1 0:00s
- 12:00 Russia +12/+13 1991 Mar 31 2:00s
- 11:00 Russia +11/+12 1992 Jan 19 2:00s
- 12:00 Russia +12/+13 2010 Mar 28 2:00s
- 11:00 Russia +11/+12 2011 Mar 27 2:00s
- 12:00 - +12
+ 12:00 - %z 1930 Jun 21
+ 13:00 Russia %z 1982 Apr 1 0:00s
+ 12:00 Russia %z 1991 Mar 31 2:00s
+ 11:00 Russia %z 1992 Jan 19 2:00s
+ 12:00 Russia %z 2010 Mar 28 2:00s
+ 11:00 Russia %z 2011 Mar 27 2:00s
+ 12:00 - %z
# Bosnia & Herzegovina
# Croatia
@@ -3413,7 +3599,7 @@ Zone Africa/Ceuta -0:21:16 - LMT 1901 Jan 1 0:00u
1:00 - CET 1986
1:00 EU CE%sT
Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
- -1:00 - -01 1946 Sep 30 1:00
+ -1:00 - %z 1946 Sep 30 1:00
0:00 - WET 1980 Apr 6 0:00s
0:00 1:00 WEST 1980 Sep 28 1:00u
0:00 EU WE%sT
@@ -3494,8 +3680,8 @@ Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
# but if no one is present after 11 at night, could be postponed until one
# hour before the beginning of service.
-# From Paul Eggert (2013-09-11):
-# Round BMT to the nearest even second, 0:29:46.
+# From Paul Eggert (2024-05-24):
+# Express BMT as 0:29:45.500, approximately the same precision 7° 26' 22.50".
#
# We can find no reliable source for Shanks's assertion that all of Switzerland
# except Geneva switched to Bern Mean Time at 00:00 on 1848-09-12. This book:
@@ -3534,6 +3720,7 @@ Rule Swiss 1941 1942 - May Mon>=1 1:00 1:00 S
Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16 # See above comment.
+ #STDOFF 0:29:45.500
0:29:46 - BMT 1894 Jun # Bern Mean Time
1:00 Swiss CE%sT 1981
1:00 EU CE%sT
@@ -3731,7 +3918,7 @@ Rule Turkey 1996 2006 - Oct lastSun 1:00s 0 -
Zone Europe/Istanbul 1:55:52 - LMT 1880
1:56:56 - IMT 1910 Oct # Istanbul Mean Time?
2:00 Turkey EE%sT 1978 Jun 29
- 3:00 Turkey +03/+04 1984 Nov 1 2:00
+ 3:00 Turkey %z 1984 Nov 1 2:00
2:00 Turkey EE%sT 2007
2:00 EU EE%sT 2011 Mar 27 1:00u
2:00 - EET 2011 Mar 28 1:00u
@@ -3740,7 +3927,7 @@ Zone Europe/Istanbul 1:55:52 - LMT 1880
2:00 EU EE%sT 2015 Oct 25 1:00u
2:00 1:00 EEST 2015 Nov 8 1:00u
2:00 EU EE%sT 2016 Sep 7
- 3:00 - +03
+ 3:00 - %z
# Ukraine
#
diff --git a/leap-seconds.list b/leap-seconds.list
index e52effc257b2..da0efc8c8566 100644
--- a/leap-seconds.list
+++ b/leap-seconds.list
@@ -1,5 +1,5 @@
-# ATOMIC TIME.
-# The Coordinated Universal Time (UTC) is the reference time scale derived
+# ATOMIC TIME
+# Coordinated Universal Time (UTC) is the reference time scale derived
# from The "Temps Atomique International" (TAI) calculated by the Bureau
# International des Poids et Mesures (BIPM) using a worldwide network of atomic
# clocks. UTC differs from TAI by an integer number of seconds; it is the basis
@@ -8,34 +8,34 @@
#
# ASTRONOMICAL TIME (UT1) is the time scale based on the rate of rotation of the earth.
# It is now mainly derived from Very Long Baseline Interferometry (VLBI). The various
-# irregular fluctuations progressively detected in the rotation rate of the Earth lead
+# irregular fluctuations progressively detected in the rotation rate of the Earth led
# in 1972 to the replacement of UT1 by UTC as the reference time scale.
#
#
# LEAP SECOND
-# Atomic clocks are more stable than the rate of the earth rotation since the latter
+# Atomic clocks are more stable than the rate of the earth's rotation since the latter
# undergoes a full range of geophysical perturbations at various time scales: lunisolar
-# and core-mantle torques, atmospheric and oceanic effetcs, etc.
+# and core-mantle torques, atmospheric and oceanic effects, etc.
# Leap seconds are needed to keep the two time scales in agreement, i.e. UT1-UTC smaller
-# than 0.9 second. Therefore, when necessary a "leap second" is applied to UTC.
+# than 0.9 seconds. Therefore, when necessary a "leap second" is applied to UTC.
# Since the adoption of this system in 1972 it has been necessary to add a number of seconds to UTC,
# firstly due to the initial choice of the value of the second (1/86400 mean solar day of
# the year 1820) and secondly to the general slowing down of the Earth's rotation. It is
-# theorically possible to have a negative leap second (a second removed from UTC), but so far,
+# theoretically possible to have a negative leap second (a second removed from UTC), but so far,
# all leap seconds have been positive (a second has been added to UTC). Based on what we know about
# the earth's rotation, it is unlikely that we will ever have a negative leap second.
#
#
# HISTORY
-# The first leap second was added on June 30, 1972. Until yhe year 2000, it was necessary in average to add a
+# The first leap second was added on June 30, 1972. Until the year 2000, it was necessary in average to add a
# leap second at a rate of 1 to 2 years. Since the year 2000 leap seconds are introduced with an
-# average interval of 3 to 4 years due to the acceleration of the Earth rotation speed.
+# average interval of 3 to 4 years due to the acceleration of the Earth's rotation speed.
#
#
-# RESPONSABILITY OF THE DECISION TO INTRODUCE A LEAP SECOND IN UTC
+# RESPONSIBILITY OF THE DECISION TO INTRODUCE A LEAP SECOND IN UTC
# The decision to introduce a leap second in UTC is the responsibility of the Earth Orientation Center of
# the International Earth Rotation and reference System Service (IERS). This center is located at Paris
-# Observatory. According to international agreements, leap seconds should only be scheduled for certain dates:
+# Observatory. According to international agreements, leap seconds should be scheduled only for certain dates:
# first preference is given to the end of December and June, and second preference at the end of March
# and September. Since the introduction of leap seconds in 1972, only dates in June and December were used.
#
@@ -60,15 +60,15 @@
#
# The following line shows the last update of this file in NTP timestamp:
#
-#$ 3913697179
+#$ 3929093563
#
# 2) Expiration date of the file given on a semi-annual basis: last June or last December
#
-# File expires on 28 December 2024
+# File expires on 28 June 2025
#
# Expire date in NTP timestamp:
#
-#@ 3944332800
+#@ 3960057600
#
#
# LIST OF LEAP SECONDS
@@ -117,4 +117,4 @@
# please see the readme file in the 'source' directory :
# https://hpiers.obspm.fr/iers/bul/bulc/ntp/sources/README
#
-#h 9dac5845 8acd32c0 2947d462 daf4a943 f58d9391
+#h be738595 57b0cf1b b0218343 fb77062f 5a775e7
diff --git a/leapseconds b/leapseconds
index ce150bfe0dca..6c715cb20b01 100644
--- a/leapseconds
+++ b/leapseconds
@@ -69,11 +69,11 @@ Leap 2016 Dec 31 23:59:60 + S
# Any additional leap seconds will come after this.
# This Expires line is commented out for now,
# so that pre-2020a zic implementations do not reject this file.
-#Expires 2024 Dec 28 00:00:00
+#Expires 2025 Jun 28 00:00:00
# POSIX timestamps for the data in this file:
-#updated 1704708379 (2024-01-08 10:06:19 UTC)
-#expires 1735344000 (2024-12-28 00:00:00 UTC)
+#updated 1720104763 (2024-07-04 14:52:43 UTC)
+#expires 1751068800 (2025-06-28 00:00:00 UTC)
# Updated through IERS Bulletin C (https://hpiers.obspm.fr/iers/bul/bulc/bulletinc.dat)
-# File expires on 28 December 2024
+# File expires on 28 June 2025
diff --git a/northamerica b/northamerica
index bbfce49ba193..01f392e0e6a4 100644
--- a/northamerica
+++ b/northamerica
@@ -185,26 +185,6 @@ Rule US 1987 2006 - Apr Sun>=1 2:00 1:00 D
Rule US 2007 max - Mar Sun>=8 2:00 1:00 D
Rule US 2007 max - Nov Sun>=1 2:00 0 S
-# From Arthur David Olson, 2005-12-19
-# We generate the files specified below to guard against old files with
-# obsolete information being left in the time zone binary directory.
-# We limit the list to names that have appeared in previous versions of
-# this time zone package.
-# We do these as separate Zones rather than as Links to avoid problems if
-# a particular place changes whether it observes DST.
-# We put these specifications here in the northamerica file both to
-# increase the chances that they'll actually get compiled and to
-# avoid the need to duplicate the US rules in another file.
-
-# Zone NAME STDOFF RULES FORMAT [UNTIL]
-Zone EST -5:00 - EST
-Zone MST -7:00 - MST
-Zone HST -10:00 - HST
-Zone EST5EDT -5:00 US E%sT
-Zone CST6CDT -6:00 US C%sT
-Zone MST7MDT -7:00 US M%sT
-Zone PST8PDT -8:00 US P%sT
-
# From U. S. Naval Observatory (1989-01-19):
# USA EASTERN 5 H BEHIND UTC NEW YORK, WASHINGTON
# USA EASTERN 4 H BEHIND UTC APR 3 - OCT 30
@@ -2373,6 +2353,81 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
# the researchers who prepared the Decrees page failed to find some of
# the relevant documents.
+# From Heitor David Pinto (2024-08-04):
+# In 1931, the decree implementing DST specified that it would take
+# effect on 30 April....
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?cod_diario=192270&pagina=2&seccion=1
+#
+# In 1981, the decree changing Campeche, Yucatán and Quintana Roo to UTC-5
+# specified that it would enter into force on 26 December 1981 at 2:00....
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4705667&fecha=23/12/1981&cod_diario=202796
+#
+# In 1982, the decree returning Campeche and Yucatán to UTC-6 specified that
+# it would enter into force on 2 November 1982 at 2:00....
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?cod_diario=205689&pagina=3&seccion=0
+#
+# Quintana Roo changed to UTC-6 on 4 January 1983 at 0:00, and again
+# to UTC-5 on 26 October 1997 at 2:00....
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4787355&fecha=28/12/1982&cod_diario=206112
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?cod_diario=209559&pagina=15&seccion=0
+#
+# Durango, Coahuila, Nuevo León and Tamaulipas were set to UTC-7 on 1 January
+# 1922, and changed to UTC-6 on 10 June 1927. Then Durango, Coahuila and
+# Nuevo León (but not Tamaulipas) returned to UTC-7 on 15 November 1930,
+# observed DST in 1931, and changed again to UTC-6 on 1 April 1932....
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4441846&fecha=29/12/1921&cod_diario=187468
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4541520&fecha=09/06/1927&cod_diario=193920
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4491963&fecha=15/11/1930&cod_diario=190835
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4418437&fecha=21/01/1932&cod_diario=185588
+#
+# ... the ... 10 June 1927 ... decree only said 10 June 1927, without
+# specifying a time, so I suppose that it should be considered at 0:00.
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4541520&fecha=09/06/1927&cod_diario=193920
+#
+# In 1942, the decree changing Baja California, Baja California Sur, Sonora,
+# Sinaloa and Nayarit to UTC-7 was published on 24 April, but it said that it
+# would apply from 1 April, so it's unclear when the change actually
+# occurred. The database currently shows 24 April 1942.
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?cod_diario=192203&pagina=2&seccion=1
+#
+# Baja California Sur, Sonora, Sinaloa and Nayarit never used UTC-8. The ...
+# 14 January 1949 ... change [to UTC-8] only occurred in Baja California.
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4515613&fecha=13/01/1949&cod_diario=192309
+#
+# In 1945, the decree changing Baja California to UTC-8 specified that it
+# would take effect on the third day from its publication.
+# It was published on 12 November, so it would take effect on 15 November....
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4555049&fecha=12/11/1945&cod_diario=194763
+#
+# In 1948, the decree changing Baja California to UTC-7 specified that it
+# would take effect on "this date". The decree was made on 13 March,
+# but published on 5 April, so it's unclear when the change actually occurred.
+# The database currently shows 5 April 1948.
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?cod_diario=188624&pagina=2&seccion=0
+#
+# In 1949, the decree changing Baja California to UTC-8 was published on 13
+# January, but it said that it would apply from 1 January, so it's unclear when
+# the change actually occurred. The database currently shows 14 January 1949.
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4515613&fecha=13/01/1949&cod_diario=192309
+#
+# Baja California also observed UTC-7 from 1 May to 24 September 1950,
+# from 29 April to 30 September 1951 at 2:00,
+# and from 27 April to 28 September 1952 at 2:00....
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4600403&fecha=29/04/1950&cod_diario=197505
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4623553&fecha=23/09/1950&cod_diario=198805
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4469444&fecha=27/04/1951&cod_diario=189317
+# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4533868&fecha=10/03/1952&cod_diario=193465
+#
+# All changes in Baja California from 1948 to 1952 match those in California,
+# on the same dates or with a difference of one day.
+# So it may be easier to implement these changes as DST with rule CA
+# during this whole period.
+#
+# From Paul Eggert (2024-08-18):
+# For now, maintain the slightly-different history for Baja California,
+# as we have no information on whether 1948/1952 clocks in Tijuana followed
+# the decrees or followed San Diego.
+
# From Alan Perry (1996-02-15):
# A guy from our Mexico subsidiary finally found the Presidential Decree
# outlining the timezone changes in Mexico.
@@ -2576,7 +2631,7 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
# http://puentelibre.mx/noticia/ciudad_juarez_cambio_horario_noviembre_2022/
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
-Rule Mexico 1931 only - May 1 23:00 1:00 D
+Rule Mexico 1931 only - April 30 0:00 1:00 D
Rule Mexico 1931 only - Oct 1 0:00 0 S
Rule Mexico 1939 only - Feb 5 0:00 1:00 D
Rule Mexico 1939 only - Jun 25 0:00 0 S
@@ -2595,14 +2650,16 @@ Rule Mexico 2002 2022 - Oct lastSun 2:00 0 S
# Zone NAME STDOFF RULES FORMAT [UNTIL]
# Quintana Roo; represented by Cancún
Zone America/Cancun -5:47:04 - LMT 1922 Jan 1 6:00u
- -6:00 - CST 1981 Dec 23
+ -6:00 - CST 1981 Dec 26 2:00
+ -5:00 - EST 1983 Jan 4 0:00
+ -6:00 Mexico C%sT 1997 Oct 26 2:00
-5:00 Mexico E%sT 1998 Aug 2 2:00
-6:00 Mexico C%sT 2015 Feb 1 2:00
-5:00 - EST
# Campeche, Yucatán; represented by Mérida
Zone America/Merida -5:58:28 - LMT 1922 Jan 1 6:00u
- -6:00 - CST 1981 Dec 23
- -5:00 - EST 1982 Dec 2
+ -6:00 - CST 1981 Dec 26 2:00
+ -5:00 - EST 1982 Nov 2 2:00
-6:00 Mexico C%sT
# Coahuila, Nuevo León, Tamaulipas (near US border)
# This includes the following municipios:
@@ -2619,12 +2676,15 @@ Zone America/Matamoros -6:30:00 - LMT 1922 Jan 1 6:00u
-6:00 US C%sT
# Durango; Coahuila, Nuevo León, Tamaulipas (away from US border)
Zone America/Monterrey -6:41:16 - LMT 1922 Jan 1 6:00u
+ -7:00 - MST 1927 Jun 10
+ -6:00 - CST 1930 Nov 15
+ -7:00 Mexico M%sT 1932 Apr 1
-6:00 - CST 1988
-6:00 US C%sT 1989
-6:00 Mexico C%sT
# Central Mexico
Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 7:00u
- -7:00 - MST 1927 Jun 10 23:00
+ -7:00 - MST 1927 Jun 10
-6:00 - CST 1930 Nov 15
-7:00 Mexico M%sT 1932 Apr 1
-6:00 Mexico C%sT 2001 Sep 30 2:00
@@ -2635,7 +2695,7 @@ Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 7:00u
# Práxedis G Guerrero.
# http://gaceta.diputados.gob.mx/PDF/65/2a022/nov/20221124-VII.pdf
Zone America/Ciudad_Juarez -7:05:56 - LMT 1922 Jan 1 7:00u
- -7:00 - MST 1927 Jun 10 23:00
+ -7:00 - MST 1927 Jun 10
-6:00 - CST 1930 Nov 15
-7:00 Mexico M%sT 1932 Apr 1
-6:00 - CST 1996
@@ -2650,7 +2710,7 @@ Zone America/Ciudad_Juarez -7:05:56 - LMT 1922 Jan 1 7:00u
# Benavides.
# http://gaceta.diputados.gob.mx/PDF/65/2a022/nov/20221124-VII.pdf
Zone America/Ojinaga -6:57:40 - LMT 1922 Jan 1 7:00u
- -7:00 - MST 1927 Jun 10 23:00
+ -7:00 - MST 1927 Jun 10
-6:00 - CST 1930 Nov 15
-7:00 Mexico M%sT 1932 Apr 1
-6:00 - CST 1996
@@ -2662,7 +2722,7 @@ Zone America/Ojinaga -6:57:40 - LMT 1922 Jan 1 7:00u
-6:00 US C%sT
# Chihuahua (away from US border)
Zone America/Chihuahua -7:04:20 - LMT 1922 Jan 1 7:00u
- -7:00 - MST 1927 Jun 10 23:00
+ -7:00 - MST 1927 Jun 10
-6:00 - CST 1930 Nov 15
-7:00 Mexico M%sT 1932 Apr 1
-6:00 - CST 1996
@@ -2672,23 +2732,21 @@ Zone America/Chihuahua -7:04:20 - LMT 1922 Jan 1 7:00u
-6:00 - CST
# Sonora
Zone America/Hermosillo -7:23:52 - LMT 1922 Jan 1 7:00u
- -7:00 - MST 1927 Jun 10 23:00
+ -7:00 - MST 1927 Jun 10
-6:00 - CST 1930 Nov 15
-7:00 Mexico M%sT 1932 Apr 1
-6:00 - CST 1942 Apr 24
- -7:00 - MST 1949 Jan 14
- -8:00 - PST 1970
+ -7:00 - MST 1996
-7:00 Mexico M%sT 1999
-7:00 - MST
# Baja California Sur, Nayarit (except Bahía de Banderas), Sinaloa
Zone America/Mazatlan -7:05:40 - LMT 1922 Jan 1 7:00u
- -7:00 - MST 1927 Jun 10 23:00
+ -7:00 - MST 1927 Jun 10
-6:00 - CST 1930 Nov 15
-7:00 Mexico M%sT 1932 Apr 1
-6:00 - CST 1942 Apr 24
- -7:00 - MST 1949 Jan 14
- -8:00 - PST 1970
+ -7:00 - MST 1970
-7:00 Mexico M%sT
# Bahía de Banderas
@@ -2721,27 +2779,32 @@ Zone America/Mazatlan -7:05:40 - LMT 1922 Jan 1 7:00u
# Use "Bahia_Banderas" to keep the name to fourteen characters.
Zone America/Bahia_Banderas -7:01:00 - LMT 1922 Jan 1 7:00u
- -7:00 - MST 1927 Jun 10 23:00
+ -7:00 - MST 1927 Jun 10
-6:00 - CST 1930 Nov 15
-7:00 Mexico M%sT 1932 Apr 1
-6:00 - CST 1942 Apr 24
- -7:00 - MST 1949 Jan 14
- -8:00 - PST 1970
+ -7:00 - MST 1970
-7:00 Mexico M%sT 2010 Apr 4 2:00
-6:00 Mexico C%sT
# Baja California
Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 7:00u
-7:00 - MST 1924
- -8:00 - PST 1927 Jun 10 23:00
+ -8:00 - PST 1927 Jun 10
-7:00 - MST 1930 Nov 15
-8:00 - PST 1931 Apr 1
-8:00 1:00 PDT 1931 Sep 30
-8:00 - PST 1942 Apr 24
-8:00 1:00 PWT 1945 Aug 14 23:00u
- -8:00 1:00 PPT 1945 Nov 12 # Peace
+ -8:00 1:00 PPT 1945 Nov 15 # Peace
-8:00 - PST 1948 Apr 5
-8:00 1:00 PDT 1949 Jan 14
+ -8:00 - PST 1950 May 1
+ -8:00 1:00 PDT 1950 Sep 24
+ -8:00 - PST 1951 Apr 29 2:00
+ -8:00 1:00 PDT 1951 Sep 30 2:00
+ -8:00 - PST 1952 Apr 27 2:00
+ -8:00 1:00 PDT 1952 Sep 28 2:00
-8:00 - PST 1954
-8:00 CA P%sT 1961
-8:00 - PST 1976
@@ -3550,8 +3613,8 @@ Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone America/Miquelon -3:44:40 - LMT 1911 Jun 15 # St Pierre
-4:00 - AST 1980 May
- -3:00 - -03 1987
- -3:00 Canada -03/-02
+ -3:00 - %z 1987
+ -3:00 Canada %z
# Turks and Caicos
#
diff --git a/southamerica b/southamerica
index 344e67f38f4c..c8d9097aeb14 100644
--- a/southamerica
+++ b/southamerica
@@ -402,11 +402,11 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 -
Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
#STDOFF -4:16:48.25
-4:16:48 - CMT 1920 May # Córdoba Mean Time
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 Arg -03/-02
+ -4:00 - %z 1930 Dec
+ -4:00 Arg %z 1969 Oct 5
+ -3:00 Arg %z 1999 Oct 3
+ -4:00 Arg %z 2000 Mar 3
+ -3:00 Arg %z
#
# Córdoba (CB), Santa Fe (SF), Entre Ríos (ER), Corrientes (CN), Misiones (MN),
# Chaco (CC), Formosa (FM), Santiago del Estero (SE)
@@ -421,120 +421,120 @@ Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
#STDOFF -4:16:48.25
Zone America/Argentina/Cordoba -4:16:48 - LMT 1894 Oct 31
-4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1991 Mar 3
- -4:00 - -04 1991 Oct 20
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 Arg -03/-02
+ -4:00 - %z 1930 Dec
+ -4:00 Arg %z 1969 Oct 5
+ -3:00 Arg %z 1991 Mar 3
+ -4:00 - %z 1991 Oct 20
+ -3:00 Arg %z 1999 Oct 3
+ -4:00 Arg %z 2000 Mar 3
+ -3:00 Arg %z
#
# Salta (SA), La Pampa (LP), Neuquén (NQ), Rio Negro (RN)
Zone America/Argentina/Salta -4:21:40 - LMT 1894 Oct 31
#STDOFF -4:16:48.25
-4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1991 Mar 3
- -4:00 - -04 1991 Oct 20
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 Arg -03/-02 2008 Oct 18
- -3:00 - -03
+ -4:00 - %z 1930 Dec
+ -4:00 Arg %z 1969 Oct 5
+ -3:00 Arg %z 1991 Mar 3
+ -4:00 - %z 1991 Oct 20
+ -3:00 Arg %z 1999 Oct 3
+ -4:00 Arg %z 2000 Mar 3
+ -3:00 Arg %z 2008 Oct 18
+ -3:00 - %z
#
# Tucumán (TM)
Zone America/Argentina/Tucuman -4:20:52 - LMT 1894 Oct 31
#STDOFF -4:16:48.25
-4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1991 Mar 3
- -4:00 - -04 1991 Oct 20
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 - -03 2004 Jun 1
- -4:00 - -04 2004 Jun 13
- -3:00 Arg -03/-02
+ -4:00 - %z 1930 Dec
+ -4:00 Arg %z 1969 Oct 5
+ -3:00 Arg %z 1991 Mar 3
+ -4:00 - %z 1991 Oct 20
+ -3:00 Arg %z 1999 Oct 3
+ -4:00 Arg %z 2000 Mar 3
+ -3:00 - %z 2004 Jun 1
+ -4:00 - %z 2004 Jun 13
+ -3:00 Arg %z
#
# La Rioja (LR)
Zone America/Argentina/La_Rioja -4:27:24 - LMT 1894 Oct 31
#STDOFF -4:16:48.25
-4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1991 Mar 1
- -4:00 - -04 1991 May 7
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 - -03 2004 Jun 1
- -4:00 - -04 2004 Jun 20
- -3:00 Arg -03/-02 2008 Oct 18
- -3:00 - -03
+ -4:00 - %z 1930 Dec
+ -4:00 Arg %z 1969 Oct 5
+ -3:00 Arg %z 1991 Mar 1
+ -4:00 - %z 1991 May 7
+ -3:00 Arg %z 1999 Oct 3
+ -4:00 Arg %z 2000 Mar 3
+ -3:00 - %z 2004 Jun 1
+ -4:00 - %z 2004 Jun 20
+ -3:00 Arg %z 2008 Oct 18
+ -3:00 - %z
#
# San Juan (SJ)
Zone America/Argentina/San_Juan -4:34:04 - LMT 1894 Oct 31
#STDOFF -4:16:48.25
-4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1991 Mar 1
- -4:00 - -04 1991 May 7
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 - -03 2004 May 31
- -4:00 - -04 2004 Jul 25
- -3:00 Arg -03/-02 2008 Oct 18
- -3:00 - -03
+ -4:00 - %z 1930 Dec
+ -4:00 Arg %z 1969 Oct 5
+ -3:00 Arg %z 1991 Mar 1
+ -4:00 - %z 1991 May 7
+ -3:00 Arg %z 1999 Oct 3
+ -4:00 Arg %z 2000 Mar 3
+ -3:00 - %z 2004 May 31
+ -4:00 - %z 2004 Jul 25
+ -3:00 Arg %z 2008 Oct 18
+ -3:00 - %z
#
# Jujuy (JY)
Zone America/Argentina/Jujuy -4:21:12 - LMT 1894 Oct 31
#STDOFF -4:16:48.25
-4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1990 Mar 4
- -4:00 - -04 1990 Oct 28
- -4:00 1:00 -03 1991 Mar 17
- -4:00 - -04 1991 Oct 6
- -3:00 1:00 -02 1992
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 Arg -03/-02 2008 Oct 18
- -3:00 - -03
+ -4:00 - %z 1930 Dec
+ -4:00 Arg %z 1969 Oct 5
+ -3:00 Arg %z 1990 Mar 4
+ -4:00 - %z 1990 Oct 28
+ -4:00 1:00 %z 1991 Mar 17
+ -4:00 - %z 1991 Oct 6
+ -3:00 1:00 %z 1992
+ -3:00 Arg %z 1999 Oct 3
+ -4:00 Arg %z 2000 Mar 3
+ -3:00 Arg %z 2008 Oct 18
+ -3:00 - %z
#
# Catamarca (CT), Chubut (CH)
Zone America/Argentina/Catamarca -4:23:08 - LMT 1894 Oct 31
#STDOFF -4:16:48.25
-4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1991 Mar 3
- -4:00 - -04 1991 Oct 20
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 - -03 2004 Jun 1
- -4:00 - -04 2004 Jun 20
- -3:00 Arg -03/-02 2008 Oct 18
- -3:00 - -03
+ -4:00 - %z 1930 Dec
+ -4:00 Arg %z 1969 Oct 5
+ -3:00 Arg %z 1991 Mar 3
+ -4:00 - %z 1991 Oct 20
+ -3:00 Arg %z 1999 Oct 3
+ -4:00 Arg %z 2000 Mar 3
+ -3:00 - %z 2004 Jun 1
+ -4:00 - %z 2004 Jun 20
+ -3:00 Arg %z 2008 Oct 18
+ -3:00 - %z
#
# Mendoza (MZ)
Zone America/Argentina/Mendoza -4:35:16 - LMT 1894 Oct 31
#STDOFF -4:16:48.25
-4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1990 Mar 4
- -4:00 - -04 1990 Oct 15
- -4:00 1:00 -03 1991 Mar 1
- -4:00 - -04 1991 Oct 15
- -4:00 1:00 -03 1992 Mar 1
- -4:00 - -04 1992 Oct 18
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 - -03 2004 May 23
- -4:00 - -04 2004 Sep 26
- -3:00 Arg -03/-02 2008 Oct 18
- -3:00 - -03
+ -4:00 - %z 1930 Dec
+ -4:00 Arg %z 1969 Oct 5
+ -3:00 Arg %z 1990 Mar 4
+ -4:00 - %z 1990 Oct 15
+ -4:00 1:00 %z 1991 Mar 1
+ -4:00 - %z 1991 Oct 15
+ -4:00 1:00 %z 1992 Mar 1
+ -4:00 - %z 1992 Oct 18
+ -3:00 Arg %z 1999 Oct 3
+ -4:00 Arg %z 2000 Mar 3
+ -3:00 - %z 2004 May 23
+ -4:00 - %z 2004 Sep 26
+ -3:00 Arg %z 2008 Oct 18
+ -3:00 - %z
#
# San Luis (SL)
@@ -544,53 +544,53 @@ Rule SanLuis 2007 2008 - Oct Sun>=8 0:00 1:00 -
Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31
#STDOFF -4:16:48.25
-4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1990
- -3:00 1:00 -02 1990 Mar 14
- -4:00 - -04 1990 Oct 15
- -4:00 1:00 -03 1991 Mar 1
- -4:00 - -04 1991 Jun 1
- -3:00 - -03 1999 Oct 3
- -4:00 1:00 -03 2000 Mar 3
- -3:00 - -03 2004 May 31
- -4:00 - -04 2004 Jul 25
- -3:00 Arg -03/-02 2008 Jan 21
- -4:00 SanLuis -04/-03 2009 Oct 11
- -3:00 - -03
+ -4:00 - %z 1930 Dec
+ -4:00 Arg %z 1969 Oct 5
+ -3:00 Arg %z 1990
+ -3:00 1:00 %z 1990 Mar 14
+ -4:00 - %z 1990 Oct 15
+ -4:00 1:00 %z 1991 Mar 1
+ -4:00 - %z 1991 Jun 1
+ -3:00 - %z 1999 Oct 3
+ -4:00 1:00 %z 2000 Mar 3
+ -3:00 - %z 2004 May 31
+ -4:00 - %z 2004 Jul 25
+ -3:00 Arg %z 2008 Jan 21
+ -4:00 SanLuis %z 2009 Oct 11
+ -3:00 - %z
#
# Santa Cruz (SC)
Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
#STDOFF -4:16:48.25
-4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 - -03 2004 Jun 1
- -4:00 - -04 2004 Jun 20
- -3:00 Arg -03/-02 2008 Oct 18
- -3:00 - -03
+ -4:00 - %z 1930 Dec
+ -4:00 Arg %z 1969 Oct 5
+ -3:00 Arg %z 1999 Oct 3
+ -4:00 Arg %z 2000 Mar 3
+ -3:00 - %z 2004 Jun 1
+ -4:00 - %z 2004 Jun 20
+ -3:00 Arg %z 2008 Oct 18
+ -3:00 - %z
#
# Tierra del Fuego, Antártida e Islas del Atlántico Sur (TF)
Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
#STDOFF -4:16:48.25
-4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 - -03 2004 May 30
- -4:00 - -04 2004 Jun 20
- -3:00 Arg -03/-02 2008 Oct 18
- -3:00 - -03
+ -4:00 - %z 1930 Dec
+ -4:00 Arg %z 1969 Oct 5
+ -3:00 Arg %z 1999 Oct 3
+ -4:00 Arg %z 2000 Mar 3
+ -3:00 - %z 2004 May 30
+ -4:00 - %z 2004 Jun 20
+ -3:00 Arg %z 2008 Oct 18
+ -3:00 - %z
# Bolivia
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone America/La_Paz -4:32:36 - LMT 1890
-4:32:36 - CMT 1931 Oct 15 # Calamarca MT
-4:32:36 1:00 BST 1932 Mar 21 # Bolivia ST
- -4:00 - -04
+ -4:00 - %z
# Brazil
@@ -961,12 +961,12 @@ Rule Brazil 2018 only - Nov Sun>=1 0:00 1:00 -
#
# Fernando de Noronha (administratively part of PE)
Zone America/Noronha -2:09:40 - LMT 1914
- -2:00 Brazil -02/-01 1990 Sep 17
- -2:00 - -02 1999 Sep 30
- -2:00 Brazil -02/-01 2000 Oct 15
- -2:00 - -02 2001 Sep 13
- -2:00 Brazil -02/-01 2002 Oct 1
- -2:00 - -02
+ -2:00 Brazil %z 1990 Sep 17
+ -2:00 - %z 1999 Sep 30
+ -2:00 Brazil %z 2000 Oct 15
+ -2:00 - %z 2001 Sep 13
+ -2:00 Brazil %z 2002 Oct 1
+ -2:00 - %z
# Other Atlantic islands have no permanent settlement.
# These include Trindade and Martim Vaz (administratively part of ES),
# Rocas Atoll (RN), and the St Peter and St Paul Archipelago (PE).
@@ -979,119 +979,119 @@ Zone America/Noronha -2:09:40 - LMT 1914
# In the north a very small part from the river Javary (now Jari I guess,
# the border with Amapá) to the Amazon, then to the Xingu.
Zone America/Belem -3:13:56 - LMT 1914
- -3:00 Brazil -03/-02 1988 Sep 12
- -3:00 - -03
+ -3:00 Brazil %z 1988 Sep 12
+ -3:00 - %z
#
# west Pará (PA)
# West Pará includes Altamira, Óbidos, Prainha, Oriximiná, and Santarém.
Zone America/Santarem -3:38:48 - LMT 1914
- -4:00 Brazil -04/-03 1988 Sep 12
- -4:00 - -04 2008 Jun 24 0:00
- -3:00 - -03
+ -4:00 Brazil %z 1988 Sep 12
+ -4:00 - %z 2008 Jun 24 0:00
+ -3:00 - %z
#
# Maranhão (MA), Piauí (PI), Ceará (CE), Rio Grande do Norte (RN),
# Paraíba (PB)
Zone America/Fortaleza -2:34:00 - LMT 1914
- -3:00 Brazil -03/-02 1990 Sep 17
- -3:00 - -03 1999 Sep 30
- -3:00 Brazil -03/-02 2000 Oct 22
- -3:00 - -03 2001 Sep 13
- -3:00 Brazil -03/-02 2002 Oct 1
- -3:00 - -03
+ -3:00 Brazil %z 1990 Sep 17
+ -3:00 - %z 1999 Sep 30
+ -3:00 Brazil %z 2000 Oct 22
+ -3:00 - %z 2001 Sep 13
+ -3:00 Brazil %z 2002 Oct 1
+ -3:00 - %z
#
# Pernambuco (PE) (except Atlantic islands)
Zone America/Recife -2:19:36 - LMT 1914
- -3:00 Brazil -03/-02 1990 Sep 17
- -3:00 - -03 1999 Sep 30
- -3:00 Brazil -03/-02 2000 Oct 15
- -3:00 - -03 2001 Sep 13
- -3:00 Brazil -03/-02 2002 Oct 1
- -3:00 - -03
+ -3:00 Brazil %z 1990 Sep 17
+ -3:00 - %z 1999 Sep 30
+ -3:00 Brazil %z 2000 Oct 15
+ -3:00 - %z 2001 Sep 13
+ -3:00 Brazil %z 2002 Oct 1
+ -3:00 - %z
#
# Tocantins (TO)
Zone America/Araguaina -3:12:48 - LMT 1914
- -3:00 Brazil -03/-02 1990 Sep 17
- -3:00 - -03 1995 Sep 14
- -3:00 Brazil -03/-02 2003 Sep 24
- -3:00 - -03 2012 Oct 21
- -3:00 Brazil -03/-02 2013 Sep
- -3:00 - -03
+ -3:00 Brazil %z 1990 Sep 17
+ -3:00 - %z 1995 Sep 14
+ -3:00 Brazil %z 2003 Sep 24
+ -3:00 - %z 2012 Oct 21
+ -3:00 Brazil %z 2013 Sep
+ -3:00 - %z
#
# Alagoas (AL), Sergipe (SE)
Zone America/Maceio -2:22:52 - LMT 1914
- -3:00 Brazil -03/-02 1990 Sep 17
- -3:00 - -03 1995 Oct 13
- -3:00 Brazil -03/-02 1996 Sep 4
- -3:00 - -03 1999 Sep 30
- -3:00 Brazil -03/-02 2000 Oct 22
- -3:00 - -03 2001 Sep 13
- -3:00 Brazil -03/-02 2002 Oct 1
- -3:00 - -03
+ -3:00 Brazil %z 1990 Sep 17
+ -3:00 - %z 1995 Oct 13
+ -3:00 Brazil %z 1996 Sep 4
+ -3:00 - %z 1999 Sep 30
+ -3:00 Brazil %z 2000 Oct 22
+ -3:00 - %z 2001 Sep 13
+ -3:00 Brazil %z 2002 Oct 1
+ -3:00 - %z
#
# Bahia (BA)
# There are too many Salvadors elsewhere, so use America/Bahia instead
# of America/Salvador.
Zone America/Bahia -2:34:04 - LMT 1914
- -3:00 Brazil -03/-02 2003 Sep 24
- -3:00 - -03 2011 Oct 16
- -3:00 Brazil -03/-02 2012 Oct 21
- -3:00 - -03
+ -3:00 Brazil %z 2003 Sep 24
+ -3:00 - %z 2011 Oct 16
+ -3:00 Brazil %z 2012 Oct 21
+ -3:00 - %z
#
# Goiás (GO), Distrito Federal (DF), Minas Gerais (MG),
# Espírito Santo (ES), Rio de Janeiro (RJ), São Paulo (SP), Paraná (PR),
# Santa Catarina (SC), Rio Grande do Sul (RS)
Zone America/Sao_Paulo -3:06:28 - LMT 1914
- -3:00 Brazil -03/-02 1963 Oct 23 0:00
- -3:00 1:00 -02 1964
- -3:00 Brazil -03/-02
+ -3:00 Brazil %z 1963 Oct 23 0:00
+ -3:00 1:00 %z 1964
+ -3:00 Brazil %z
#
# Mato Grosso do Sul (MS)
Zone America/Campo_Grande -3:38:28 - LMT 1914
- -4:00 Brazil -04/-03
+ -4:00 Brazil %z
#
# Mato Grosso (MT)
Zone America/Cuiaba -3:44:20 - LMT 1914
- -4:00 Brazil -04/-03 2003 Sep 24
- -4:00 - -04 2004 Oct 1
- -4:00 Brazil -04/-03
+ -4:00 Brazil %z 2003 Sep 24
+ -4:00 - %z 2004 Oct 1
+ -4:00 Brazil %z
#
# Rondônia (RO)
Zone America/Porto_Velho -4:15:36 - LMT 1914
- -4:00 Brazil -04/-03 1988 Sep 12
- -4:00 - -04
+ -4:00 Brazil %z 1988 Sep 12
+ -4:00 - %z
#
# Roraima (RR)
Zone America/Boa_Vista -4:02:40 - LMT 1914
- -4:00 Brazil -04/-03 1988 Sep 12
- -4:00 - -04 1999 Sep 30
- -4:00 Brazil -04/-03 2000 Oct 15
- -4:00 - -04
+ -4:00 Brazil %z 1988 Sep 12
+ -4:00 - %z 1999 Sep 30
+ -4:00 Brazil %z 2000 Oct 15
+ -4:00 - %z
#
# east Amazonas (AM): Boca do Acre, Jutaí, Manaus, Floriano Peixoto
# The great circle line from Tabatinga to Porto Acre divides
# east from west Amazonas.
Zone America/Manaus -4:00:04 - LMT 1914
- -4:00 Brazil -04/-03 1988 Sep 12
- -4:00 - -04 1993 Sep 28
- -4:00 Brazil -04/-03 1994 Sep 22
- -4:00 - -04
+ -4:00 Brazil %z 1988 Sep 12
+ -4:00 - %z 1993 Sep 28
+ -4:00 Brazil %z 1994 Sep 22
+ -4:00 - %z
#
# west Amazonas (AM): Atalaia do Norte, Boca do Maoco, Benjamin Constant,
# Eirunepé, Envira, Ipixuna
Zone America/Eirunepe -4:39:28 - LMT 1914
- -5:00 Brazil -05/-04 1988 Sep 12
- -5:00 - -05 1993 Sep 28
- -5:00 Brazil -05/-04 1994 Sep 22
- -5:00 - -05 2008 Jun 24 0:00
- -4:00 - -04 2013 Nov 10
- -5:00 - -05
+ -5:00 Brazil %z 1988 Sep 12
+ -5:00 - %z 1993 Sep 28
+ -5:00 Brazil %z 1994 Sep 22
+ -5:00 - %z 2008 Jun 24 0:00
+ -4:00 - %z 2013 Nov 10
+ -5:00 - %z
#
# Acre (AC)
Zone America/Rio_Branco -4:31:12 - LMT 1914
- -5:00 Brazil -05/-04 1988 Sep 12
- -5:00 - -05 2008 Jun 24 0:00
- -4:00 - -04 2013 Nov 10
- -5:00 - -05
+ -5:00 Brazil %z 1988 Sep 12
+ -5:00 - %z 2008 Jun 24 0:00
+ -4:00 - %z 2013 Nov 10
+ -5:00 - %z
# Chile
@@ -1359,36 +1359,36 @@ Rule Chile 2023 max - Sep Sun>=2 4:00u 1:00 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone America/Santiago -4:42:45 - LMT 1890
-4:42:45 - SMT 1910 Jan 10 # Santiago Mean Time
- -5:00 - -05 1916 Jul 1
+ -5:00 - %z 1916 Jul 1
-4:42:45 - SMT 1918 Sep 10
- -4:00 - -04 1919 Jul 1
+ -4:00 - %z 1919 Jul 1
-4:42:45 - SMT 1927 Sep 1
- -5:00 Chile -05/-04 1932 Sep 1
- -4:00 - -04 1942 Jun 1
- -5:00 - -05 1942 Aug 1
- -4:00 - -04 1946 Jul 14 24:00
- -4:00 1:00 -03 1946 Aug 28 24:00 # central CL
- -5:00 1:00 -04 1947 Mar 31 24:00
- -5:00 - -05 1947 May 21 23:00
- -4:00 Chile -04/-03
+ -5:00 Chile %z 1932 Sep 1
+ -4:00 - %z 1942 Jun 1
+ -5:00 - %z 1942 Aug 1
+ -4:00 - %z 1946 Jul 14 24:00
+ -4:00 1:00 %z 1946 Aug 28 24:00 # central CL
+ -5:00 1:00 %z 1947 Mar 31 24:00
+ -5:00 - %z 1947 May 21 23:00
+ -4:00 Chile %z
Zone America/Punta_Arenas -4:43:40 - LMT 1890
-4:42:45 - SMT 1910 Jan 10
- -5:00 - -05 1916 Jul 1
+ -5:00 - %z 1916 Jul 1
-4:42:45 - SMT 1918 Sep 10
- -4:00 - -04 1919 Jul 1
+ -4:00 - %z 1919 Jul 1
-4:42:45 - SMT 1927 Sep 1
- -5:00 Chile -05/-04 1932 Sep 1
- -4:00 - -04 1942 Jun 1
- -5:00 - -05 1942 Aug 1
- -4:00 - -04 1946 Aug 28 24:00
- -5:00 1:00 -04 1947 Mar 31 24:00
- -5:00 - -05 1947 May 21 23:00
- -4:00 Chile -04/-03 2016 Dec 4
- -3:00 - -03
+ -5:00 Chile %z 1932 Sep 1
+ -4:00 - %z 1942 Jun 1
+ -5:00 - %z 1942 Aug 1
+ -4:00 - %z 1946 Aug 28 24:00
+ -5:00 1:00 %z 1947 Mar 31 24:00
+ -5:00 - %z 1947 May 21 23:00
+ -4:00 Chile %z 2016 Dec 4
+ -3:00 - %z
Zone Pacific/Easter -7:17:28 - LMT 1890
-7:17:28 - EMT 1932 Sep # Easter Mean Time
- -7:00 Chile -07/-06 1982 Mar 14 3:00u # Easter Time
- -6:00 Chile -06/-05
+ -7:00 Chile %z 1982 Mar 14 3:00u # Easter Time
+ -6:00 Chile %z
#
# Salas y Gómez Island is uninhabited.
# Other Chilean locations, including Juan Fernández Is, Desventuradas Is,
@@ -1408,10 +1408,10 @@ Zone Pacific/Easter -7:17:28 - LMT 1890
#
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Antarctica/Palmer 0 - -00 1965
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1982 May
- -4:00 Chile -04/-03 2016 Dec 4
- -3:00 - -03
+ -4:00 Arg %z 1969 Oct 5
+ -3:00 Arg %z 1982 May
+ -4:00 Chile %z 2016 Dec 4
+ -3:00 - %z
# Colombia
@@ -1430,7 +1430,7 @@ Rule CO 1993 only - Feb 6 24:00 0 -
#STDOFF -4:56:16.4
Zone America/Bogota -4:56:16 - LMT 1884 Mar 13
-4:56:16 - BMT 1914 Nov 23 # Bogotá Mean Time
- -5:00 CO -05/-04
+ -5:00 CO %z
# Malpelo, Providencia, San Andres
# no information; probably like America/Bogota
@@ -1461,10 +1461,10 @@ Rule Ecuador 1993 only - Feb 5 0:00 0 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone America/Guayaquil -5:19:20 - LMT 1890
-5:14:00 - QMT 1931 # Quito Mean Time
- -5:00 Ecuador -05/-04
+ -5:00 Ecuador %z
Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
- -5:00 - -05 1986
- -6:00 Ecuador -06/-05
+ -5:00 - %z 1986
+ -6:00 Ecuador %z
# Falklands
@@ -1564,10 +1564,10 @@ Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Atlantic/Stanley -3:51:24 - LMT 1890
-3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
- -4:00 Falk -04/-03 1983 May
- -3:00 Falk -03/-02 1985 Sep 15
- -4:00 Falk -04/-03 2010 Sep 5 2:00
- -3:00 - -03
+ -4:00 Falk %z 1983 May
+ -3:00 Falk %z 1985 Sep 15
+ -4:00 Falk %z 2010 Sep 5 2:00
+ -3:00 - %z
# French Guiana
# For the 1911/1912 establishment of standard time in French possessions, see:
@@ -1575,8 +1575,8 @@ Zone Atlantic/Stanley -3:51:24 - LMT 1890
# page 752, 18b.
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone America/Cayenne -3:29:20 - LMT 1911 Jul 1
- -4:00 - -04 1967 Oct
- -3:00 - -03
+ -4:00 - %z 1967 Oct
+ -3:00 - %z
# Guyana
@@ -1610,10 +1610,10 @@ Zone America/Cayenne -3:29:20 - LMT 1911 Jul 1
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone America/Guyana -3:52:39 - LMT 1911 Aug 1 # Georgetown
- -4:00 - -04 1915 Mar 1
- -3:45 - -0345 1975 Aug 1
- -3:00 - -03 1992 Mar 29 1:00
- -4:00 - -04
+ -4:00 - %z 1915 Mar 1
+ -3:45 - %z 1975 Aug 1
+ -3:00 - %z 1992 Mar 29 1:00
+ -4:00 - %z
# Paraguay
#
@@ -1711,9 +1711,9 @@ Rule Para 2013 max - Mar Sun>=22 0:00 0 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone America/Asuncion -3:50:40 - LMT 1890
-3:50:40 - AMT 1931 Oct 10 # Asunción Mean Time
- -4:00 - -04 1972 Oct
- -3:00 - -03 1974 Apr
- -4:00 Para -04/-03
+ -4:00 - %z 1972 Oct
+ -3:00 - %z 1974 Apr
+ -4:00 Para %z
# Peru
#
@@ -1740,12 +1740,12 @@ Rule Peru 1994 only - Apr 1 0:00 0 -
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone America/Lima -5:08:12 - LMT 1890
-5:08:36 - LMT 1908 Jul 28 # Lima Mean Time?
- -5:00 Peru -05/-04
+ -5:00 Peru %z
# South Georgia
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
- -2:00 - -02
+ -2:00 - %z
# South Sandwich Is
# uninhabited; scientific personnel have wintered
@@ -1755,8 +1755,8 @@ Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
Zone America/Paramaribo -3:40:40 - LMT 1911
-3:40:52 - PMT 1935 # Paramaribo Mean Time
-3:40:36 - PMT 1945 Oct # The capital moved?
- -3:30 - -0330 1984 Oct
- -3:00 - -03
+ -3:30 - %z 1984 Oct
+ -3:00 - %z
# Uruguay
# From Paul Eggert (1993-11-18):
@@ -1971,15 +1971,15 @@ Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 -
# This Zone can be simplified once we assume zic %z.
Zone America/Montevideo -3:44:51 - LMT 1908 Jun 10
-3:44:51 - MMT 1920 May 1 # Montevideo MT
- -4:00 - -04 1923 Oct 1
- -3:30 Uruguay -0330/-03 1942 Dec 14
- -3:00 Uruguay -03/-0230 1960
- -3:00 Uruguay -03/-02 1968
- -3:00 Uruguay -03/-0230 1970
- -3:00 Uruguay -03/-02 1974
- -3:00 Uruguay -03/-0130 1974 Mar 10
- -3:00 Uruguay -03/-0230 1974 Dec 22
- -3:00 Uruguay -03/-02
+ -4:00 - %z 1923 Oct 1
+ -3:30 Uruguay %z 1942 Dec 14
+ -3:00 Uruguay %z 1960
+ -3:00 Uruguay %z 1968
+ -3:00 Uruguay %z 1970
+ -3:00 Uruguay %z 1974
+ -3:00 Uruguay %z 1974 Mar 10
+ -3:00 Uruguay %z 1974 Dec 22
+ -3:00 Uruguay %z
# Venezuela
#
@@ -2013,7 +2013,7 @@ Zone America/Montevideo -3:44:51 - LMT 1908 Jun 10
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone America/Caracas -4:27:44 - LMT 1890
-4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time?
- -4:30 - -0430 1965 Jan 1 0:00
- -4:00 - -04 2007 Dec 9 3:00
- -4:30 - -0430 2016 May 1 2:30
- -4:00 - -04
+ -4:30 - %z 1965 Jan 1 0:00
+ -4:00 - %z 2007 Dec 9 3:00
+ -4:30 - %z 2016 May 1 2:30
+ -4:00 - %z
diff --git a/theory.html b/theory.html
index 516d2a525111..d3573ede0dfb 100644
--- a/theory.html
+++ b/theory.html
@@ -89,13 +89,15 @@ The <code><abbr>tz</abbr></code> code is upwards compatible with <a
href="https://en.wikipedia.org/wiki/POSIX">POSIX</a>, an international
standard for <a
href="https://en.wikipedia.org/wiki/Unix">UNIX</a>-like systems.
-As of this writing, the current edition of POSIX is: <a
+As of this writing, the current edition of POSIX is POSIX.1-2024,
+which has been published but not yet in HTML form.
+Unlike its predecessor POSIX.1-2017 (<a
href="https://pubs.opengroup.org/onlinepubs/9699919799/"> The Open
Group Base Specifications Issue 7</a>, IEEE Std 1003.1-2017, 2018
-Edition.
-Because the database's scope encompasses real-world changes to civil
-timekeeping, its model for describing time is more complex than the
-standard and daylight saving times supported by POSIX.1-2017.
+Edition), POSIX.1-2024 requires support for the
+<code><abbr>tz</abbr></code> database, which has a
+model for describing civil time that is more complex than the
+standard and daylight saving times required by POSIX.1-2017.
A <code><abbr>tz</abbr></code> timezone corresponds to a ruleset that can
have more than two changes per year, these changes need not merely
flip back and forth between two alternatives, and the rules themselves
@@ -159,7 +161,7 @@ among the following goals:
</ul>
<p>
-Names normally have the form
+Names normally have the format
<var>AREA</var><code>/</code><var>LOCATION</var>, where
<var>AREA</var> is a continent or ocean, and
<var>LOCATION</var> is a specific location within the area.
@@ -187,7 +189,7 @@ in decreasing order of importance:
href="https://en.wikipedia.org/wiki/ASCII">ASCII</a> letters,
'<code>.</code>', '<code>-</code>' and '<code>_</code>'.
Do not use digits, as that might create an ambiguity with <a
- href="https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03">POSIX.1-2017
+ href="https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03">POSIX's proleptic
<code>TZ</code> strings</a>.
A file name component must not exceed 14 characters or start with
'<code>-</code>'.
@@ -378,7 +380,8 @@ nowadays distributions typically use it
and no great weight should be attached to whether a link
is defined in <code>backward</code> or in some other file.
The source file <code>etcetera</code> defines names that may be useful
-on platforms that do not support POSIX.1-2017-style <code>TZ</code> strings;
+on platforms that do not support proleptic <code>TZ</code> strings
+like <code>&lt;+08&gt;-8</code>;
no other source file other than <code>backward</code>
contains links to its zones.
One of <code>etcetera</code>'s names is <code>Etc/UTC</code>,
@@ -425,8 +428,8 @@ in decreasing order of importance:
In other words, in the C locale the POSIX extended regular
expression <code>[-+[:alnum:]]{3,6}</code> should match the
abbreviation.
- This guarantees that all abbreviations could have been specified by a
- POSIX.1-2017 <code>TZ</code> string.
+ This guarantees that all abbreviations could have been specified
+ explicitly by a POSIX proleptic <code>TZ</code> string.
</p>
</li>
<li>
@@ -578,6 +581,11 @@ in decreasing order of importance:
some sense undefined; this notation is derived
from <a href="https://datatracker.ietf.org/doc/html/rfc3339">Internet
<abbr title="Request For Comments">RFC</abbr> 3339</a>.
+ (The abbreviation 'Z' that
+ <a href="https://datatracker.ietf.org/doc/html/rfc9557">Internet
+ <abbr>RFC</abbr> 9557</a> uses for this concept
+ would violate the POSIX requirement
+ of at least three characters in an abbreviation.)
</li>
</ul>
@@ -775,7 +783,7 @@ href="https://www.dissentmagazine.org/blog/booked-a-global-history-of-time-vanes
the Western 06:00 to be 12:00. These practices are largely outside
the scope of the <code><abbr>tz</abbr></code> code and data, which
provide only limited support for date and time localization
- such as that required by POSIX.1-2017.
+ such as that required by POSIX.
If <abbr>DST</abbr> is not used a different time zone
can often do the trick; for example, in Kenya a <code>TZ</code> setting
like <code>&lt;-03&gt;3</code> or <code>America/Cayenne</code> starts
@@ -866,29 +874,62 @@ Code compatible with this package is already
<a href="tz-link.html#tzdb">part of many platforms</a>, where the
primary use of this package is to update obsolete time-related files.
To do this, you may need to compile the time zone compiler
-'<code>zic</code>' supplied with this package instead of using the
-system '<code>zic</code>', since the format of <code>zic</code>'s
+<code>zic</code> supplied with this package instead of using the
+system <code>zic</code>, since the format of <code>zic</code>'s
input is occasionally extended, and a platform may still be shipping
an older <code>zic</code>.
</p>
-<h3 id="POSIX">POSIX.1-2017 properties and limitations</h3>
+<p>
+In POSIX, time display in a process is controlled by the
+environment variable <code>TZ</code>, which can have two forms:
+</p>
<ul>
<li>
+ A <dfn>proleptic <code>TZ</code></dfn> value
+ like <code>CET-1CEST,M3.5.0,M10.5.0/3</code> uses a complex
+ notation that specifies a single standard time along with daylight
+ saving rules that apply to all years past, present, and future.
+ </li>
+ <li>
+ A <dfn>geographical <code>TZ</code></dfn> value
+ like <code>Europe/Berlin</code> names a location that stands for
+ civil time near that location, which can have more than
+ one standard time and more than one set of daylight saving rules,
+ to record timekeeping practice more accurately.
+ These names are defined by the <code><abbr>tz</abbr></code> database.
+ </li>
+</ul>
+
+<h3 id="POSIX.1-2017">POSIX.1-2017 properties and limitations</h3>
+<p>
+Some platforms support only the features required by POSIX.1-2017,
+and have not yet upgraded to POSIX.1-2024.
+Code intended to be portable to these platforms must deal
+with problems that were fixed in later POSIX editions.
+</p>
+
+<ul>
+ <li>
+ POSIX.1-2017 does not require support for geographical <code>TZ</code>,
+ and there is no convenient and efficient way to determine
+ the <abbr>UT</abbr> offset and time zone abbreviation of arbitrary
+ timestamps, particularly for timezones
+ that do not fit into the POSIX model.
+ </li>
+ <li>
<p>
- In POSIX.1-2017, time display in a process is controlled by the
- environment variable <code>TZ</code>.
- Unfortunately, the POSIX.1-2017
- <code>TZ</code> string takes a form that is hard to describe and
- is error-prone in practice.
- Also, POSIX.1-2017 <code>TZ</code> strings cannot deal with daylight
+ The proleptic <code>TZ</code> string,
+ which is all that POSIX.1-2017 requires,
+ has a format that is hard to describe and is error-prone in practice.
+ Also, proleptic <code>TZ</code> strings cannot deal with daylight
saving time rules not based on the Gregorian calendar (as in
Morocco), or with situations where more than two time zone
abbreviations or <abbr>UT</abbr> offsets are used in an area.
</p>
<p>
- The POSIX.1-2017 <code>TZ</code> string takes the following form:
+ A proleptic <code>TZ</code> string has the following format:
</p>
<p>
@@ -955,7 +996,7 @@ an older <code>zic</code>.
</dl>
<p>
- Here is an example POSIX.1-2017 <code>TZ</code> string for New
+ Here is an example proleptic <code>TZ</code> string for New
Zealand after 2007.
It says that standard time (<abbr>NZST</abbr>) is 12 hours ahead
of <abbr>UT</abbr>, and that daylight saving time
@@ -966,26 +1007,46 @@ an older <code>zic</code>.
<pre><code>TZ='NZST-12NZDT,M9.5.0,M4.1.0/3'</code></pre>
<p>
- This POSIX.1-2017 <code>TZ</code> string is hard to remember, and
+ This proleptic <code>TZ</code> string is hard to remember, and
mishandles some timestamps before 2008.
- With this package you can use this instead:
+ With this package you can use a geographical <code>TZ</code> instead:
</p>
<pre><code>TZ='Pacific/Auckland'</code></pre>
</li>
+</ul>
+
+<p>
+POSIX.1-2017 also has the limitations of POSIX.1-2024,
+discussed in the next section.
+</p>
+
+<h3 id="POSIX.1-2024">POSIX.1-2024 properties and limitations</h3>
+<p>
+POSIX.1-2024 extends POSIX.1-2017 in the following significant ways:
+</p>
+<ul>
<li>
- POSIX does not define the <abbr>DST</abbr> transitions
- for <code>TZ</code> values like
- "<code>EST5EDT</code>".
- Traditionally the current <abbr>US</abbr> <abbr>DST</abbr> rules
- were used to interpret such values, but this meant that the
- <abbr>US</abbr> <abbr>DST</abbr> rules were compiled into each
- time conversion package, and when
- <abbr>US</abbr> time conversion rules changed (as in the United
- States in 1987 and again in 2007), all packages that
- interpreted <code>TZ</code> values had to be updated
- to ensure proper results.
+ POSIX.1-2024 requires support for geographical <code>TZ</code>.
+ Earlier POSIX editions require support only for proleptic <code>TZ</code>.
+ </li>
+ <li>
+ POSIX.1-2024 requires <code>struct tm</code>
+ to have a <abbr>UT</abbr> offset member <code>tm_gmtoff</code>
+ and a time zone abbreviation member <code>tm_zone</code>.
+ Earlier POSIX editions lack this requirement.
+ </li>
+ <li>
+ DST transition times can range from &minus;167:59:59
+ to 167:59:59 instead of merely from 00:00:00 to 24:59:59.
+ This allows for proleptic TZ strings
+ like <code>"&lt;-02&gt;2&lt;-01&gt;,M3.5.0/-1,M10.5.0/0"</code>
+ where the transition time &minus;1:00 means 23:00 the previous day.
</li>
+</ul>
+<p>
+However POSIX.1-2024, like earlier POSIX editions, has some limitations:
+<ul>
<li>
The <code>TZ</code> environment variable is process-global, which
makes it hard to write efficient, thread-safe applications that
@@ -1004,16 +1065,34 @@ an older <code>zic</code>.
limit phone calls to off-peak hours.
</li>
<li>
- POSIX.1-2017 provides no convenient and efficient way to determine
- the <abbr>UT</abbr> offset and time zone abbreviation of arbitrary
- timestamps, particularly for timezones
- that do not fit into the POSIX model.
- </li>
- <li>
POSIX requires that <code>time_t</code> clock counts exclude leap
seconds.
</li>
<li>
+ POSIX does not define the <abbr>DST</abbr> transitions
+ for <code>TZ</code> values like
+ "<code>EST5EDT</code>".
+ Traditionally the current <abbr>US</abbr> <abbr>DST</abbr> rules
+ were used to interpret such values, but this meant that the
+ <abbr>US</abbr> <abbr>DST</abbr> rules were compiled into each
+ time conversion package, and when
+ <abbr>US</abbr> time conversion rules changed (as in the United
+ States in 1987 and again in 2007), all packages that
+ interpreted <code>TZ</code> values had to be updated
+ to ensure proper results.
+ </li>
+</ul>
+
+<h3 id="POSIX-extensions">Extensions to POSIX in the
+<code><abbr>tz</abbr></code> code</h3>
+<p>
+ The <code><abbr>tz</abbr></code> code defines some properties
+ left unspecified by POSIX, and attempts to support some
+ extensions to POSIX.
+</p>
+
+<ul>
+ <li>
The <code><abbr>tz</abbr></code> code attempts to support all the
<code>time_t</code> implementations allowed by POSIX.
The <code>time_t</code> type represents a nonnegative count of seconds
@@ -1026,21 +1105,14 @@ an older <code>zic</code>.
and 40-bit integers are also used occasionally.
Although earlier POSIX versions allowed <code>time_t</code> to be a
floating-point type, this was not supported by any practical system,
- and POSIX.1-2013 and the <code><abbr>tz</abbr></code> code both
+ and POSIX.1-2013+ and the <code><abbr>tz</abbr></code> code both
require <code>time_t</code> to be an integer type.
</li>
-</ul>
-
-<h3 id="POSIX-extensions">Extensions to POSIX.1-2017 in the
-<code><abbr>tz</abbr></code> code</h3>
-<ul>
<li>
<p>
- The <code>TZ</code> environment variable is used in generating
- the name of a file from which time-related information is read
- (or is interpreted à la POSIX.1-2017); <code>TZ</code> is no longer
- constrained to be a string containing abbreviations
- and numeric data as described <a href="#POSIX">above</a>.
+ If the <code>TZ</code> environment variable uses the geographical format,
+ it is used in generating
+ the name of a file from which time-related information is read.
The file's format is <dfn><abbr>TZif</abbr></dfn>,
a timezone information format that contains binary data; see
<a href="https://datatracker.ietf.org/doc/html/8536">Internet
@@ -1053,10 +1125,11 @@ an older <code>zic</code>.
abbreviations are used.
</p>
<p>
- It was recognized that allowing the <code>TZ</code> environment
+ When the <code><abbr>tz</abbr></code> code was developed in the 1980s,
+ it was recognized that allowing the <code>TZ</code> environment
variable to take on values such as '<code>America/New_York</code>'
might cause "old" programs (that expect <code>TZ</code> to have a
- certain form) to operate incorrectly; consideration was given to using
+ certain format) to operate incorrectly; consideration was given to using
some other environment variable (for example, <code>TIMEZONE</code>)
to hold the string used to generate the <abbr>TZif</abbr> file's name.
In the end, however, it was decided to continue using
@@ -1070,15 +1143,6 @@ an older <code>zic</code>.
</p>
</li>
<li>
- The code supports platforms with a <abbr>UT</abbr> offset member
- 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>,
<code>localtime_rz</code>, and <code>mktime_z</code> for
more-efficient thread-safe applications that need to use multiple
@@ -1088,7 +1152,7 @@ an older <code>zic</code>.
and <code>localtime_rz</code> and <code>mktime_z</code> are
like <code>localtime_r</code> and <code>mktime</code> with an
extra <code>timezone_t</code> argument.
- The functions were inspired by <a href="https://netbsd.org/">NetBSD</a>.
+ The functions were inspired by <a href="https://netbsd.org">NetBSD</a>.
</li>
<li>
Negative <code>time_t</code> values are supported, on systems
@@ -1116,6 +1180,7 @@ The vestigial <abbr>API</abbr>s are:
<li>
The POSIX <code>tzname</code> variable does not suffice and is no
longer needed.
+ It is planned to be removed in a future edition of POSIX.
To get a timestamp's time zone abbreviation, consult
the <code>tm_zone</code> member if available; otherwise,
use <code>strftime</code>'s <code>"%Z"</code> conversion
@@ -1124,6 +1189,7 @@ The vestigial <abbr>API</abbr>s are:
<li>
The POSIX <code>daylight</code> and <code>timezone</code>
variables do not suffice and are no longer needed.
+ They are planned to be removed in a future edition of POSIX.
To get a timestamp's <abbr>UT</abbr> offset, consult
the <code>tm_gmtoff</code> member if available; otherwise,
subtract values returned by <code>localtime</code>
@@ -1278,13 +1344,13 @@ between now and the future time.
<p>
Leap seconds were introduced in 1972 to accommodate the
difference between atomic time and the less regular rotation of the earth.
-Unfortunately they caused so many problems with civil
-timekeeping that they
-are <a href="https://www.bipm.org/en/cgpm-2022/resolution-4">planned
-to be discontinued by 2035</a>, with some as-yet-undetermined
-mechanism replacing them, perhaps after the year 2135.
-Despite their impending obsolescence, a record of leap seconds is still
-needed to resolve timestamps from 1972 through 2035.
+Unfortunately they have caused so many problems with civil
+timekeeping that there are
+<a href="https://www.bipm.org/en/cgpm-2022/resolution-4">plans
+to discontinue them by 2035</a>.
+Even if these plans come to fruition, a record of leap seconds will still be
+needed to resolve timestamps from 1972 through 2035,
+and there may also be a need to record whatever mechanism replaces them.
</p>
<p>
@@ -1374,6 +1440,12 @@ href='https://www.esa.int/Applications/Navigation/Telling_time_on_the_Moon'>cons
the establishment of a reference timescale for the Moon, which has
days roughly equivalent to 29.5 Earth days, and where relativistic
effects cause clocks to tick slightly faster than on Earth.
+Also, <abbr title="National Aeronautics and Space Administration">NASA</abbr>
+has been <a
+href='https://www.whitehouse.gov/wp-content/uploads/2024/04/Celestial-Time-Standardization-Policy.pdf'>ordered</a>
+to consider the establishment of Coordinated Lunar Time (<abbr>LTC</abbr>).
+It is not yet known whether the US and European efforts will result in
+multiple timescales on the Moon.
</p>
<p>
diff --git a/version b/version
index 04fe6744432f..699e50d4d38e 100644
--- a/version
+++ b/version
@@ -1 +1 @@
-2024a
+2024b
diff --git a/ziguard.awk b/ziguard.awk
index 7a3404fa4fcc..c0acb72a0380 100644
--- a/ziguard.awk
+++ b/ziguard.awk
@@ -5,14 +5,10 @@
# This is not a general-purpose converter; it is designed for current tzdata.
# It just converts from current source to main, vanguard, and rearguard forms.
# Although it might be nice for it to be idempotent, or to be useful
-# for converting back and forth between vanguard and rearguard formats,
+# for converting back and forth between formats,
# it does not do these nonessential tasks now.
#
-# Although main and vanguard forms are currently equivalent,
-# this need not always be the case. When the two forms differ,
-# this script can convert either from main to vanguard form (needed then),
-# or from vanguard to main form (this conversion would be needed later,
-# after main became rearguard and vanguard became main).
+# This script can convert from main to vanguard form and vice versa.
# There is no need to convert rearguard to other forms.
#
# When converting to vanguard form, the output can use the line
@@ -145,12 +141,12 @@ 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 ($0 ~ /^#?[\t ]+-[12]:00[\t ]+Port[\t ]+[%+-]/) {
- if (($0 ~ /%z/) == (DATAFORM == "vanguard")) {
- uncomment = in_comment
- } else {
+ # comment out the undesired version and uncomment the desired one.
+ if ($0 ~ /^#?[\t ]+-[12]:00[\t ]+((Port|W-Eur)[\t ]+[%+-]|-[\t ]+(%z|-01)[\t ]+1982 Mar 28)/) {
+ if (($0 ~ /%z/) == (DATAFORM == "rearguard")) {
comment_out = !in_comment
+ } else {
+ uncomment = in_comment
}
}
@@ -172,13 +168,8 @@ DATAFORM != "main" {
sub(/^/, "#")
}
- # Prefer %z in vanguard form, explicit abbreviations otherwise.
- if (DATAFORM == "vanguard") {
- sub(/^(Zone[\t ]+[^\t ]+)?[\t ]+[^\t ]+[\t ]+[^\t ]+[\t ]+[-+][^\t ]+/, \
- "&CHANGE-TO-%z")
- sub(/-00CHANGE-TO-%z/, "-00")
- sub(/[-+][^\t ]+CHANGE-TO-/, "")
- } else {
+ # Prefer explicit abbreviations in rearguard form, %z otherwise.
+ if (DATAFORM == "rearguard") {
if ($0 ~ /^[^#]*%z/) {
stdoff_column = 2 * ($0 ~ /^Zone/) + 1
rules_column = stdoff_column + 1
@@ -216,6 +207,11 @@ DATAFORM != "main" {
}
sub(/%z/, abbr)
}
+ } else {
+ sub(/^(Zone[\t ]+[^\t ]+)?[\t ]+[^\t ]+[\t ]+[^\t ]+[\t ]+[-+][^\t ]+/, \
+ "&CHANGE-TO-%z")
+ sub(/-00CHANGE-TO-%z/, "-00")
+ sub(/[-+][^\t ]+CHANGE-TO-/, "")
}
# Normally, prefer whole seconds. However, prefer subseconds
diff --git a/zone.tab b/zone.tab
index 3fa9306afbad..bfc0b5933044 100644
--- a/zone.tab
+++ b/zone.tab
@@ -264,8 +264,7 @@ MK +4159+02126 Europe/Skopje
ML +1239-00800 Africa/Bamako
MM +1647+09610 Asia/Yangon
MN +4755+10653 Asia/Ulaanbaatar most of Mongolia
-MN +4801+09139 Asia/Hovd Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan
-MN +4804+11430 Asia/Choibalsan Dornod, Sukhbaatar
+MN +4801+09139 Asia/Hovd Bayan-Olgii, Hovd, Uvs
MO +221150+1133230 Asia/Macau
MP +1512+14545 Pacific/Saipan
MQ +1436-06105 America/Martinique
diff --git a/zone1970.tab b/zone1970.tab
index abd9489753f1..7726f39a0922 100644
--- a/zone1970.tab
+++ b/zone1970.tab
@@ -209,8 +209,7 @@ MD +4700+02850 Europe/Chisinau
MH +0905+16720 Pacific/Kwajalein Kwajalein
MM,CC +1647+09610 Asia/Yangon
MN +4755+10653 Asia/Ulaanbaatar most of Mongolia
-MN +4801+09139 Asia/Hovd Bayan-Ölgii, Govi-Altai, Hovd, Uvs, Zavkhan
-MN +4804+11430 Asia/Choibalsan Dornod, Sükhbaatar
+MN +4801+09139 Asia/Hovd Bayan-Ölgii, Hovd, Uvs
MO +221150+1133230 Asia/Macau
MQ +1436-06105 America/Martinique
MT +3554+01431 Europe/Malta
diff --git a/zonenow.tab b/zonenow.tab
index b6f2910956fb..01f536b3ba38 100644
--- a/zonenow.tab
+++ b/zonenow.tab
@@ -5,7 +5,7 @@
# From Paul Eggert (2023-12-18):
# This file contains a table where each row stands for a timezone
# where civil timestamps are predicted to agree from now on.
-# This file is like zone1970.tab (see zone1970.tab's coments),
+# This file is like zone1970.tab (see zone1970.tab's comments),
# but with the following changes:
#
# 1. Each timezone corresponds to a set of clocks that are planned
@@ -123,8 +123,6 @@ XX +1455-02331 Atlantic/Cape_Verde Cape Verde
#
# -01/+00 (EU DST)
XX +3744-02540 Atlantic/Azores Azores
-# -01/+00 (EU DST) until 2024-03-31; then -02/-01 (EU DST)
-XX +7029-02158 America/Scoresbysund Ittoqqortoormiit
#
# +00 - GMT
XX +0519-00402 Africa/Abidjan far western Africa; Iceland ("GMT")
@@ -199,7 +197,7 @@ XX +2518+05518 Asia/Dubai Russia; Caucasus; Persian Gulf; Seychelles; Réunion
XX +3431+06912 Asia/Kabul Afghanistan
#
# +05
-XX +4120+06918 Asia/Tashkent Russia; west Kazakhstan; Tajikistan; Turkmenistan; Uzbekistan; Maldives
+XX +4120+06918 Asia/Tashkent Russia; Kazakhstan; Tajikistan; Turkmenistan; Uzbekistan; Maldives
#
# +05 - PKT
XX +2452+06703 Asia/Karachi Pakistan ("PKT")
@@ -215,8 +213,6 @@ XX +2743+08519 Asia/Kathmandu Nepal
#
# +06
XX +2343+09025 Asia/Dhaka Russia; Kyrgyzstan; Bhutan; Bangladesh; Chagos
-# +06 until 2024-03-01; then +05
-XX +4315+07657 Asia/Almaty Kazakhstan (except western areas)
#
# +06:30
XX +1647+09610 Asia/Yangon Myanmar; Cocos