summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStuart Bishop <stuart@stuartbishop.net>2014-09-01 10:11:26 +0000
committerStuart Bishop <stuart@stuartbishop.net>2014-09-01 10:11:26 +0000
commitc985dd429ec25d4233f1b26c0dc0517a66253b0c (patch)
treecce3e1ef8bd8d0c4e440f72a3d40e101b3b22e12
parent056207cdda4a8f01f7f0bd924e89d0df434c7547 (diff)
downloadpytz-c985dd429ec25d4233f1b26c0dc0517a66253b0c.tar.gz
Import 2014g
-rw-r--r--elsie.nci.nih.gov/src/CONTRIBUTING69
-rw-r--r--elsie.nci.nih.gov/src/Makefile198
-rw-r--r--elsie.nci.nih.gov/src/NEWS484
-rw-r--r--elsie.nci.nih.gov/src/README15
-rw-r--r--elsie.nci.nih.gov/src/Theory120
-rw-r--r--elsie.nci.nih.gov/src/africa713
-rw-r--r--elsie.nci.nih.gov/src/antarctica134
-rw-r--r--elsie.nci.nih.gov/src/asctime.c6
-rw-r--r--elsie.nci.nih.gov/src/asia920
-rw-r--r--elsie.nci.nih.gov/src/australasia962
-rw-r--r--elsie.nci.nih.gov/src/backward9
-rw-r--r--elsie.nci.nih.gov/src/backzone428
-rw-r--r--elsie.nci.nih.gov/src/checktab.awk103
-rw-r--r--elsie.nci.nih.gov/src/date.166
-rw-r--r--elsie.nci.nih.gov/src/date.1.txt12
-rw-r--r--elsie.nci.nih.gov/src/date.c175
-rw-r--r--elsie.nci.nih.gov/src/etcetera3
-rw-r--r--elsie.nci.nih.gov/src/europe1378
-rw-r--r--elsie.nci.nih.gov/src/factory1
-rw-r--r--elsie.nci.nih.gov/src/ialloc.c2
-rw-r--r--elsie.nci.nih.gov/src/iso3166.tab12
-rw-r--r--elsie.nci.nih.gov/src/leap-seconds.list158
-rw-r--r--elsie.nci.nih.gov/src/leapseconds.awk4
-rw-r--r--elsie.nci.nih.gov/src/localtime.c934
-rw-r--r--elsie.nci.nih.gov/src/newctime.3166
-rw-r--r--elsie.nci.nih.gov/src/newctime.3.txt99
-rw-r--r--elsie.nci.nih.gov/src/newstrftime.374
-rw-r--r--elsie.nci.nih.gov/src/newstrftime.3.txt10
-rw-r--r--elsie.nci.nih.gov/src/newtzset.3129
-rw-r--r--elsie.nci.nih.gov/src/newtzset.3.txt79
-rw-r--r--elsie.nci.nih.gov/src/northamerica695
-rw-r--r--elsie.nci.nih.gov/src/pacificnew1
-rw-r--r--elsie.nci.nih.gov/src/private.h275
-rw-r--r--elsie.nci.nih.gov/src/southamerica484
-rw-r--r--elsie.nci.nih.gov/src/strftime.c194
-rw-r--r--elsie.nci.nih.gov/src/systemv1
-rw-r--r--elsie.nci.nih.gov/src/time2posix.331
-rw-r--r--elsie.nci.nih.gov/src/time2posix.3.txt32
-rw-r--r--elsie.nci.nih.gov/src/tz-art.htm117
-rw-r--r--elsie.nci.nih.gov/src/tz-link.htm161
-rw-r--r--elsie.nci.nih.gov/src/tzfile.516
-rw-r--r--elsie.nci.nih.gov/src/tzfile.5.txt25
-rw-r--r--elsie.nci.nih.gov/src/tzfile.h10
-rw-r--r--elsie.nci.nih.gov/src/tzselect.839
-rw-r--r--elsie.nci.nih.gov/src/tzselect.8.txt18
-rw-r--r--elsie.nci.nih.gov/src/tzselect.ksh70
-rw-r--r--elsie.nci.nih.gov/src/workman.sh3
-rw-r--r--elsie.nci.nih.gov/src/yearistype.sh4
-rw-r--r--elsie.nci.nih.gov/src/zdump.831
-rw-r--r--elsie.nci.nih.gov/src/zdump.8.txt3
-rw-r--r--elsie.nci.nih.gov/src/zdump.c551
-rw-r--r--elsie.nci.nih.gov/src/zic.8175
-rw-r--r--elsie.nci.nih.gov/src/zic.8.txt73
-rw-r--r--elsie.nci.nih.gov/src/zic.c703
-rw-r--r--elsie.nci.nih.gov/src/zone.tab69
-rw-r--r--elsie.nci.nih.gov/src/zone1970.tab369
-rwxr-xr-xelsie.nci.nih.gov/src/zoneinfo2tdf.pl6
57 files changed, 6824 insertions, 4795 deletions
diff --git a/elsie.nci.nih.gov/src/CONTRIBUTING b/elsie.nci.nih.gov/src/CONTRIBUTING
new file mode 100644
index 0000000..358bc20
--- /dev/null
+++ b/elsie.nci.nih.gov/src/CONTRIBUTING
@@ -0,0 +1,69 @@
+Contributing to the tz code and data
+
+The time zone database is by no means authoritative: governments
+change timekeeping rules erratically and sometimes with little
+warning, the data entries do not cover all of civil time before
+1970, and undoubtedly errors remain in the code and data. Feel
+free to fill gaps or fix mistakes, and please email improvements
+to tz@iana.org for use in the future.
+
+To email small changes, please run a POSIX shell command like
+'diff -u old/europe new/europe >myfix.patch', and attach
+myfix.patch to the email.
+
+For more-elaborate changes, please read the Theory file and browse
+the mailing list archives <http://mm.icann.org/pipermail/tz/> for
+examples of patches that tend to work well. Ideally, additions to
+data should contain commentary citing reliable sources as
+justification.
+
+Please submit changes against either the latest release in
+<ftp://ftp.iana.org/tz/> or the master branch of the experimental
+Git repository. If you use Git the following workflow may be helpful:
+
+ * Copy the experimental repository.
+
+ git clone https://github.com/eggert/tz.git
+ cd tz
+
+ * Get current with the master branch.
+
+ git checkout master
+ git pull
+
+ * Switch to a new branch for the changes. Choose a different
+ branch name for each change set.
+
+ git checkout -b mybranch
+
+ * Edit source files. Include commentary that justifies the
+ changes by citing reliable sources.
+
+ * Debug the changes, e.g.:
+
+ make check
+ make install
+ ./zdump -v America/Los_Angeles
+
+ * For each separable change, commit it in the new branch, e.g.:
+
+ git add northamerica
+ git commit
+
+ See recent 'git log' output for the commit-message style.
+
+ * Create patch files 0001-*, 0002-*, ...
+
+ git format-patch master
+
+ * After reviewing the patch files, send the patches to tz@iana.org
+ for others to review.
+
+ git send-email master
+
+ * Start anew by getting current with the master branch again
+ (the second step above).
+
+Please do not create issues or pull requests on GitHub, as the
+proper procedure for proposing and distributing patches is via
+email as illustrated above.
diff --git a/elsie.nci.nih.gov/src/Makefile b/elsie.nci.nih.gov/src/Makefile
index 5e8fa91..00611dd 100644
--- a/elsie.nci.nih.gov/src/Makefile
+++ b/elsie.nci.nih.gov/src/Makefile
@@ -1,4 +1,3 @@
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
@@ -6,7 +5,7 @@
PACKAGE= tzcode
# Version numbers of the code and data distributions.
-VERSION= 2014d
+VERSION= 2014g
# Email address for bug reports.
BUGEMAIL= tz@iana.org
@@ -85,9 +84,11 @@ LIBDIR= $(TOPDIR)/lib
# below. If you want both sets of data available, with leap seconds counted
# normally, use
# REDO= right_posix
-# below.
+# below. If you want just POSIX-compatible time values, but with
+# out-of-scope and often-wrong data from the file 'backzone', use
+# REDO= posix_packrat
# POSIX mandates that leap seconds not be counted; for compatibility with it,
-# use either "posix_only" or "posix_right".
+# use "posix_only", "posix_right", or "posix_packrat".
REDO= posix_right
@@ -96,38 +97,51 @@ REDO= posix_right
YEARISTYPE= ./yearistype
# Non-default libraries needed to link.
-# Add -lintl if you want to use `gettext' on Solaris.
+# Add -lintl if you want to use 'gettext' on Solaris.
LDLIBS=
# Add the following to the end of the "CFLAGS=" line as needed.
# -DBIG_BANG=-9999999LL if the Big Bang occurred at time -9999999 (see zic.c)
-# -DHAVE_ADJTIME=0 if `adjtime' does not exist (SVR0?)
+# -DHAVE_ADJTIME=0 if 'adjtime' does not exist (SVR0?)
# -DHAVE_DOS_FILE_NAMES if file names have drive specifiers etc. (MS-DOS)
-# -DHAVE_GETTEXT=1 if `gettext' works (GNU, Linux, Solaris); also see LDLIBS
+# -DHAVE_GETTEXT=1 if 'gettext' works (GNU, Linux, Solaris); also see LDLIBS
# -DHAVE_INCOMPATIBLE_CTIME_R=1 if your system's time.h declares
# ctime_r and asctime_r incompatibly with the POSIX standard (Solaris 8).
# -DHAVE_INTTYPES_H=1 if you have a pre-C99 compiler with "inttypes.h"
# -DHAVE_LINK=0 if your system lacks a link function
+# -DHAVE_LOCALTIME_R=0 if your system lacks a localtime_r function
+# -DHAVE_LOCALTIME_RZ=0 if you do not want zdump to use localtime_rz
+# This defaults to 1 if a working localtime_rz seems to be available.
+# localtime_rz can make zdump significantly faster, but is nonstandard.
# -DHAVE_SETTIMEOFDAY=0 if settimeofday does not exist (SVR0?)
# -DHAVE_SETTIMEOFDAY=1 if settimeofday has just 1 arg (SVR4)
# -DHAVE_SETTIMEOFDAY=2 if settimeofday uses 2nd arg (4.3BSD)
# -DHAVE_SETTIMEOFDAY=3 if settimeofday ignores 2nd arg (4.4BSD)
# -DHAVE_STDINT_H=1 if you have a pre-C99 compiler with "stdint.h"
+# -DHAVE_STRFTIME_L=1 if <time.h> declares locale_t and strftime_l
+# This defaults to 0 if _POSIX_VERSION < 200809, 1 otherwise.
# -DHAVE_SYMLINK=0 if your system lacks the symlink function
# -DHAVE_SYS_STAT_H=0 if your compiler lacks a "sys/stat.h"
# -DHAVE_SYS_WAIT_H=0 if your compiler lacks a "sys/wait.h"
+# -DHAVE_TZSET=0 if your system lacks a tzset function
# -DHAVE_UNISTD_H=0 if your compiler lacks a "unistd.h" (Microsoft C++ 7?)
# -DHAVE_UTMPX_H=1 if your compiler has a "utmpx.h"
-# -DLOCALE_HOME=\"path\" if locales are in "path", not "/usr/lib/locale"
# -DNO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU=1
# if you do not want run time warnings about formats that may cause
# year 2000 grief
+# -DTHREAD_SAFE=1 to make localtime.c thread-safe, as POSIX requires;
+# not needed by the main-program tz code, which is single-threaded.
+# Append other compiler flags as needed, e.g., -pthread on GNU/Linux.
# -Dtime_tz=\"T\" to use T as the time_t type, rather than the system time_t
# -DTZ_DOMAIN=\"foo\" to use "foo" for gettext domain name; default is "tz"
-# -TTZ_DOMAINDIR=\"/path\" to use "/path" for gettext directory;
+# -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 if the time zone files cannot be accessed
+# -DUNINIT_TRAP=1 if reading uninitialized storage can cause problems
+# other than simply getting garbage data
+# -DUSE_LTZ=0 to build zdump with the system time zone library
+# Also set TZDOBJS=zdump.o and CHECK_TIME_T_ALTERNATIVES= below.
# -DZIC_MAX_ABBR_LEN_WO_WARN=3
# (or some other number) to set the maximum time zone abbreviation length
# that zic will accept without a warning (the default is 6)
@@ -135,14 +149,16 @@ LDLIBS=
GCC_DEBUG_FLAGS = -Dlint -g3 -O3 -fno-common -fstrict-aliasing \
-Wall -Wextra \
-Wbad-function-cast -Wcast-align -Wcast-qual \
- -Wformat=2 -Winit-self \
+ -Wdeclaration-after-statement \
+ -Wformat=2 -Winit-self -Wjump-misses-init \
-Wmissing-declarations -Wmissing-noreturn -Wmissing-prototypes \
-Wnested-externs -Wno-address -Wno-cast-qual \
-Wno-format-nonliteral -Wno-sign-compare -Wno-sign-conversion \
-Wno-type-limits \
-Wno-unused-parameter -Woverlength-strings -Wpointer-arith \
-Wshadow -Wstrict-prototypes -Wsuggest-attribute=const \
- -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure -Wtrampolines \
+ -Wsuggest-attribute=format -Wsuggest-attribute=noreturn \
+ -Wsuggest-attribute=pure -Wtrampolines \
-Wwrite-strings
#
# If you want to use System V compatibility code, add
@@ -155,25 +171,12 @@ GCC_DEBUG_FLAGS = -Dlint -g3 -O3 -fno-common -fstrict-aliasing \
# (or if you decide to add such a field in your system's "time.h" file),
# add the name to a define such as
# -DTM_GMTOFF=tm_gmtoff
-# or
-# -DTM_GMTOFF=_tm_gmtoff
-# to the end of the "CFLAGS=" line.
-# Neither tm_gmtoff nor _tm_gmtoff is described in X3J11's work;
-# in its work, use of "tm_gmtoff" is described as non-conforming.
-# Both Linux and BSD have done the equivalent of defining TM_GMTOFF in
-# their recent releases.
-#
-# If your system has a "zone abbreviation" field in its "struct tm"s
-# (or if you decide to add such a field in your system's "time.h" file),
-# add the name to a define such as
+# to the end of the "CFLAGS=" line. If not defined, the code attempts to
+# guess TM_GMTOFF from other macros; define NO_TM_GMTOFF to suppress this.
+# Similarly, if your system has a "zone abbreviation" field, define
# -DTM_ZONE=tm_zone
-# or
-# -DTM_ZONE=_tm_zone
-# to the end of the "CFLAGS=" line.
-# Neither tm_zone nor _tm_zone is described in X3J11's work;
-# in its work, use of "tm_zone" is described as non-conforming.
-# Both UCB and Sun have done the equivalent of defining TM_ZONE in
-# their recent releases.
+# and define NO_TM_ZONE to suppress any guessing. These two fields are not
+# required by POSIX, but are widely available on GNU/Linux and BSD systems.
#
# If you want functions that were inspired by early versions of X3J11's work,
# add
@@ -197,6 +200,17 @@ GCC_DEBUG_FLAGS = -Dlint -g3 -O3 -fno-common -fstrict-aliasing \
# These functions may well disappear in future releases of the time
# conversion package.
#
+# If you don't want functions that were inspired by NetBSD, add
+# -DNETBSD_INSPIRED=0
+# to the end of the "CFLAGS=" line. Otherwise, the functions
+# "localtime_rz", "mktime_z", "tzalloc", and "tzfree" are added to the
+# time library, and if STD_INSPIRED is also defined the functions
+# "posix2time_z" and "time2posix_z" are added as well.
+# The functions ending in "_z" (or "_rz") are like their unsuffixed
+# (or suffixed-by-"_r") counterparts, except with an extra first
+# argument of opaque type timezone_t that specifies the time zone.
+# "tzalloc" allocates a timezone_t value, and "tzfree" frees it.
+#
# If you want to allocate state structures in localtime, add
# -DALL_STATE
# to the end of the "CFLAGS=" line. Storage is obtained by calling malloc.
@@ -206,11 +220,6 @@ GCC_DEBUG_FLAGS = -Dlint -g3 -O3 -fno-common -fstrict-aliasing \
# to the end of the "CFLAGS=" line.
# This variable is not described in X3J11's work.
#
-# If you want a "gtime" function (a la MACH), add
-# -DCMUCS
-# to the end of the "CFLAGS=" line
-# This function is not described in X3J11's work.
-#
# NIST-PCTS:151-2, Version 1.4, (1993-12-03) is a test suite put
# out by the National Institute of Standards and Technology
# which claims to test C and Posix conformance. If you want to pass PCTS, add
@@ -236,7 +245,7 @@ ZIC= $(zic) $(ZFLAGS)
ZFLAGS=
-# The name of a Posix-compliant `awk' on your system.
+# The name of a Posix-compliant 'awk' on your system.
AWK= awk
# The full path name of a Posix-compliant shell, preferably one that supports
@@ -266,16 +275,38 @@ VALIDATE_ENV = \
SP_CHARSET_FIXED=YES \
SP_ENCODING=UTF-8
-# INVALID_CHAR is a regular expression that matches invalid characters in
-# distributed files. For now, stick to a safe subset of ASCII.
+# This expensive test requires USE_LTZ.
+# To suppress it, define this macro to be empty.
+CHECK_TIME_T_ALTERNATIVES = check_time_t_alternatives
+
+# SAFE_CHAR is a regular expression that matches a safe character.
+# Some parts of this distribution are limited to safe characters;
+# others can use any UTF-8 character.
+# For now, the safe characters are a safe subset of ASCII.
# The caller must set the shell variable 'sharp' to the character '#',
# since Makefile macros cannot contain '#'.
# TAB_CHAR is a single tab character, in single quotes.
TAB_CHAR= ' '
-INVALID_CHAR1= $(TAB_CHAR)' !\"'$$sharp'$$%&'\''()*+,./0123456789:;<=>?@'
-INVALID_CHAR2= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\^_`'
-INVALID_CHAR3= 'abcdefghijklmnopqrstuvwxyz{|}~'
-INVALID_CHAR= '[^]'$(INVALID_CHAR1)$(INVALID_CHAR2)$(INVALID_CHAR3)'-]'
+SAFE_CHARSET1= $(TAB_CHAR)' !\"'$$sharp'$$%&'\''()*+,./0123456789:;<=>?@'
+SAFE_CHARSET2= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\^_`'
+SAFE_CHARSET3= 'abcdefghijklmnopqrstuvwxyz{|}~'
+SAFE_CHARSET= ]$(SAFE_CHARSET1)$(SAFE_CHARSET2)$(SAFE_CHARSET3)-
+SAFE_CHAR= '['$(SAFE_CHARSET)']'
+# NONSYM_CHAR is a regular expression that matches any character
+# except for a small number of symbols, where we prefer to stick with
+# ASCII renderings for the convenience of maintainers whose text editors
+# mishandle UTF-8 by default (e.g., XEmacs 21.4.22).
+NONSYM_CHAR= '[^–—°′″≈≠≤≥±−×÷∞←→↔·•§¶«»‘’‚‛“”„‟‹›「」『』〝〞〟]'
+
+# SAFE_LINE matches a line of safe characters.
+# SAFE_SHARP_LINE is similar, except any character can follow '#';
+# this is so that comments can contain non-ASCII characters.
+# NONSYM_LINE matches a line of non-symbols.
+# VALID_LINE matches a line of any validly-encoded characters.
+SAFE_LINE= '^'$(SAFE_CHAR)'*$$'
+SAFE_SHARP_LINE='^'$(SAFE_CHAR)'*('$$sharp$(NONSYM_CHAR)'*)?$$'
+NONSYM_LINE= '^'$(NONSYM_CHAR)'*$$'
+VALID_LINE= '^.*$$'
# Flags to give 'tar' when making a distribution.
# Try to use flags appropriate for GNU tar.
@@ -298,37 +329,37 @@ AR= ar
# ':' on typical hosts; 'ranlib' on the ancient hosts that still need ranlib.
RANLIB= :
-TZCOBJS= zic.o localtime.o asctime.o scheck.o ialloc.o
-TZDOBJS= zdump.o localtime.o ialloc.o asctime.o
+TZCOBJS= zic.o scheck.o ialloc.o
+TZDOBJS= zdump.o localtime.o asctime.o
DATEOBJS= date.o localtime.o strftime.o asctime.o
LIBSRCS= localtime.c asctime.c difftime.c
LIBOBJS= localtime.o asctime.o difftime.o
HEADERS= tzfile.h private.h
NONLIBSRCS= zic.c zdump.c scheck.c ialloc.c
NEWUCBSRCS= date.c strftime.c
-SOURCES= $(HEADERS) $(LIBSRCS) $(NONLIBSRCS) $(NEWUCBSRCS) tzselect.ksh
+SOURCES= $(HEADERS) $(LIBSRCS) $(NONLIBSRCS) $(NEWUCBSRCS) \
+ tzselect.ksh workman.sh
MANS= newctime.3 newstrftime.3 newtzset.3 time2posix.3 \
tzfile.5 tzselect.8 zic.8 zdump.8
MANTXTS= newctime.3.txt newstrftime.3.txt newtzset.3.txt \
time2posix.3.txt \
tzfile.5.txt tzselect.8.txt zic.8.txt zdump.8.txt \
date.1.txt
-COMMON= Makefile README
-DOCS= NEWS Theory $(MANS) date.1 $(MANTXTS)
+COMMON= CONTRIBUTING Makefile NEWS README Theory
+WEB_PAGES= tz-art.htm tz-link.htm
+DOCS= $(MANS) date.1 $(MANTXTS) $(WEB_PAGES)
PRIMARY_YDATA= africa antarctica asia australasia \
europe northamerica southamerica
YDATA= $(PRIMARY_YDATA) pacificnew etcetera backward
NDATA= systemv factory
TDATA= $(YDATA) $(NDATA)
-TABDATA= iso3166.tab zone.tab leapseconds
+ZONETABLES= zone1970.tab zone.tab
+TABDATA= iso3166.tab leapseconds $(ZONETABLES)
LEAP_DEPS= leapseconds.awk leap-seconds.list
-DATA= $(YDATA) $(NDATA) $(TABDATA) \
- $(LEAP_DEPS) yearistype.sh
-WEB_PAGES= tz-art.htm tz-link.htm
+DATA= $(YDATA) $(NDATA) backzone $(TABDATA) \
+ leap-seconds.list yearistype.sh
AWK_SCRIPTS= checktab.awk leapseconds.awk
-MISC= usno1988 usno1989 usno1989a usno1995 usno1997 usno1998 \
- $(WEB_PAGES) $(AWK_SCRIPTS) workman.sh \
- zoneinfo2tdf.pl
+MISC= $(AWK_SCRIPTS) zoneinfo2tdf.pl
ENCHILADA= $(COMMON) $(DOCS) $(SOURCES) $(DATA) $(MISC)
# And for the benefit of csh users on systems that assume the user
@@ -347,7 +378,7 @@ install: all $(DATA) $(REDO) $(MANS)
$(DESTDIR)$(MANDIR)/man8
$(ZIC) -y $(YEARISTYPE) \
-d $(DESTDIR)$(TZDIR) -l $(LOCALTIME) -p $(POSIXRULES)
- cp -f iso3166.tab zone.tab $(DESTDIR)$(TZDIR)/.
+ cp -f iso3166.tab $(ZONETABLES) $(DESTDIR)$(TZDIR)/.
cp tzselect zic zdump $(DESTDIR)$(ETCDIR)/.
cp libtz.a $(DESTDIR)$(LIBDIR)/.
$(RANLIB) $(DESTDIR)$(LIBDIR)/libtz.a
@@ -411,6 +442,11 @@ posix_right: posix_only leapseconds
$(ZIC) -y $(YEARISTYPE) -d $(DESTDIR)$(TZDIR)-leaps \
-L leapseconds $(TDATA)
+posix_packrat: posix_only backzone
+ $(AWK) '/^Rule/' $(TDATA) | \
+ $(ZIC) -y $(YEARISTYPE) -d $(DESTDIR)$(TZDIR) \
+ -L /dev/null - backzone
+
zones: $(REDO)
libtz.a: $(LIBOBJS)
@@ -431,13 +467,30 @@ tzselect: tzselect.ksh
<$? >$@
chmod +x $@
-check: check_character_set check_tables check_web
+check: check_character_set check_white_space check_tables check_web
check_character_set: $(ENCHILADA)
- sharp='#'; ! grep -n $(INVALID_CHAR) $(ENCHILADA)
-
-check_tables: checktab.awk $(PRIMARY_YDATA)
- $(AWK) -f checktab.awk $(PRIMARY_YDATA)
+ LC_ALL=en_US.utf8 && export LC_ALL && \
+ sharp='#' && \
+ ! grep -Env $(SAFE_LINE) $(MANS) date.1 $(MANTXTS) \
+ $(MISC) $(SOURCES) $(WEB_PAGES) && \
+ ! grep -Env $(SAFE_SHARP_LINE) $(TDATA) backzone \
+ iso3166.tab leapseconds yearistype.sh zone.tab && \
+ test $$(grep -Ecv $(SAFE_SHARP_LINE) Makefile) -eq 1 && \
+ ! grep -Env $(NONSYM_LINE) CONTRIBUTING NEWS README Theory \
+ $(MANS) date.1 zone1970.tab && \
+ ! grep -Env $(VALID_LINE) $(ENCHILADA)
+
+check_white_space: $(ENCHILADA)
+ ! grep -n ' '$(TAB_CHAR) $(ENCHILADA)
+ ! grep -n '[[:space:]]$$' $(ENCHILADA)
+ ! grep -n "$$(printf '[\f\r\v]\n')" $(ENCHILADA)
+
+check_tables: checktab.awk $(PRIMARY_YDATA) $(ZONETABLES)
+ for tab in $(ZONETABLES); do \
+ $(AWK) -f checktab.awk -v zone_table=$$tab $(PRIMARY_YDATA) \
+ || exit; \
+ done
check_web: $(WEB_PAGES)
$(VALIDATE_ENV) $(VALIDATE) $(VALIDATE_FLAGS) $(WEB_PAGES)
@@ -456,7 +509,7 @@ maintainer-clean: clean
names:
@echo $(ENCHILADA)
-public: check check_public check_time_t_alternatives \
+public: check check_public $(CHECK_TIME_T_ALTERNATIVES) \
tarballs signatures
date.1.txt: date.1
@@ -516,14 +569,22 @@ check_public: $(ENCHILADA)
# Check that the code works under various alternative
# implementations of time_t.
check_time_t_alternatives:
- zones=`$(AWK) '/^[^#]/ { print $$3 }' <zone.tab` && \
+ if diff -q Makefile Makefile 2>/dev/null; then \
+ quiet_option='-q'; \
+ else \
+ quiet_option=''; \
+ fi && \
+ zones=`$(AWK) '/^[^#]/ { print $$3 }' <zone1970.tab` && \
for type in $(TIME_T_ALTERNATIVES); do \
mkdir -p tzpublic/$$type && \
make clean_misc && \
make TOPDIR=`pwd`/tzpublic/$$type \
CFLAGS='$(CFLAGS) -Dtime_tz='"'$$type'" \
+ REDO='$(REDO)' \
install && \
- diff -qr tzpublic/int64_t/etc/zoneinfo tzpublic/$$type/etc/zoneinfo && \
+ diff $$quiet_option -r \
+ tzpublic/int64_t/etc/zoneinfo \
+ tzpublic/$$type/etc/zoneinfo && \
case $$type in \
int32_t) range=-2147483648,2147483647;; \
uint32_t) range=0,4294967296;; \
@@ -546,12 +607,12 @@ tarballs: tzcode$(VERSION).tar.gz tzdata$(VERSION).tar.gz
tzcode$(VERSION).tar.gz: set-timestamps.out
LC_ALL=C && export LC_ALL && \
tar $(TARFLAGS) -cf - \
- $(COMMON) $(DOCS) $(SOURCES) $(MISC) | \
+ $(COMMON) $(DOCS) $(SOURCES) | \
gzip $(GZIPFLAGS) > $@
tzdata$(VERSION).tar.gz: set-timestamps.out
LC_ALL=C && export LC_ALL && \
- tar $(TARFLAGS) -cf - $(COMMON) $(DATA) | \
+ tar $(TARFLAGS) -cf - $(COMMON) $(DATA) $(MISC) | \
gzip $(GZIPFLAGS) > $@
signatures: tzcode$(VERSION).tar.gz.asc tzdata$(VERSION).tar.gz.asc
@@ -580,8 +641,15 @@ difftime.o: private.h
ialloc.o: private.h
localtime.o: private.h tzfile.h
scheck.o: private.h
-strftime.o: tzfile.h
+strftime.o: private.h tzfile.h
zdump.o: version.h
zic.o: private.h tzfile.h version.h
.KEEP_STATE:
+
+.PHONY: ALL INSTALL all
+.PHONY: check check_character_set check_public check_tables
+.PHONY: check_time_t_alternatives check_web check_white_space clean clean_misc
+.PHONY: install maintainer-clean names posix_packrat posix_only posix_right
+.PHONY: public right_only right_posix signatures tarballs typecheck
+.PHONY: zonenames zones
diff --git a/elsie.nci.nih.gov/src/NEWS b/elsie.nci.nih.gov/src/NEWS
index d2a7e9a..8ddd091 100644
--- a/elsie.nci.nih.gov/src/NEWS
+++ b/elsie.nci.nih.gov/src/NEWS
@@ -1,5 +1,397 @@
News for the tz database
+Release 2014g - 2014-08-28 12:31:23 -0700
+
+ Changes affecting future time stamps
+
+ Turks & Caicos is switching from US eastern time to UTC-4 year-round,
+ modeled as a switch from EST/EDT to AST on 2014-11-02 at 02:00.
+
+ Changes affecting past time stamps
+
+ Time in Russia or the USSR before 1926 or so has been corrected by
+ a few seconds in the following zones: Asia/Irkutsk,
+ Asia/Krasnoyarsk, Asia/Omsk, Asia/Samarkand, Asia/Tbilisi,
+ Asia/Vladivostok, Asia/Yakutsk, Europe/Riga, Europe/Samara. For
+ Asia/Yekaterinburg the correction is a few minutes. (Thanks to
+ Vladimir Karpinsky.)
+
+ The Portuguese decree of 1911-05-26 took effect on 1912-01-01.
+ This affects 1911 time stamps in Africa/Bissau, Africa/Luanda,
+ Atlantic/Azores, and Atlantic/Madeira. Also, Lisbon's pre-1912
+ GMT offset was -0:36:45 (rounded from -0:36:44.68), not -0:36:32.
+ (Thanks to Stephen Colebourne for pointing to the decree.)
+
+ Asia/Dhaka ended DST on 2009-12-31 at 24:00, not 23:59.
+
+ A new file 'backzone' contains data which may appeal to
+ connoisseurs of old time stamps, although it is out of scope for
+ the tz database, is often poorly sourced, and contains some data
+ that is known to be incorrect. The new file is not recommended
+ for ordinary use and its entries are not installed by default.
+ (Thanks to Lester Caine for the high-quality Jersey, Guernsey, and
+ Isle of Man entries.)
+
+ Some more zones have been turned into links, when they differed
+ from existing zones only for older time stamps. As usual,
+ these changes affect UTC offsets in pre-1970 time stamps only.
+ Their old contents have been moved to the 'backzone' file.
+ The affected zones are: Africa/Bangui, Africa/Brazzaville,
+ Africa/Douala, Africa/Kinshasa, Africa/Libreville, Africa/Luanda,
+ Africa/Malabo, Africa/Niamey, and Africa/Porto-Novo.
+
+ Changes affecting code
+
+ Unless NETBSD_INSPIRED is defined to 0, the tz library now
+ supplies functions for creating and using objects that represent
+ time zones. The new functions are tzalloc, tzfree, localtime_rz,
+ mktime_z, and (if STD_INSPIRED is also defined) posix2time_z and
+ time2posix_z. They are intended for performance: for example,
+ localtime_rz (unlike localtime_r) is trivially thread-safe without
+ locking. (Thanks to Christos Zoulas for proposing NetBSD-inspired
+ functions, and to Alan Barrett and Jonathan Lennox for helping to
+ debug the change.)
+
+ zdump now builds with the tz library unless USE_LTZ is defined to 0,
+ This lets zdump use tz features even if the system library lacks them.
+ To build zdump with the system library, use 'make CFLAGS=-DUSE_LTZ=0
+ TZDOBJS=zdump.o CHECK_TIME_T_ALTERNATIVES='.
+
+ zdump now uses localtime_rz if available, as it's significantly faster,
+ and it can help zdump better diagnose invalid time zone names.
+ Define HAVE_LOCALTIME_RZ to 0 to suppress this. HAVE_LOCALTIME_RZ
+ defaults to 1 if NETBSD_INSPIRED && USE_LTZ. When localtime_rz is
+ not available, zdump now uses localtime_r and tzset if available,
+ as this is a bit cleaner and faster than plain localtime. Compile
+ with -DHAVE_LOCALTIME_R=0 and/or -DHAVE_TZSET=0 if your system
+ lacks these two functions.
+
+ If THREAD_SAFE is defined to 1, the tz library is now thread-safe.
+ Although not needed for tz's own applications, which are single-threaded,
+ this supports POSIX better if the tz library is used in multithreaded apps.
+
+ Some crashes have been fixed when zdump or the tz library is given
+ invalid or outlandish input.
+
+ The tz library no longer mishandles leap seconds on platforms with
+ unsigned time_t in time zones that lack ordinary transitions after 1970.
+
+ The tz code now attempts to infer TM_GMTOFF and TM_ZONE if not
+ already defined, to make it easier to configure on common platforms.
+ Define NO_TM_GMTOFF and NO_TM_ZONE to suppress this.
+
+ Unless the new macro UNINIT_TRAP is defined to 1, the tz code now
+ assumes that reading uninitialized memory yields garbage values
+ but does not cause other problems such as traps.
+
+ If TM_GMTOFF is defined and UNINIT_TRAP is 0, mktime is now
+ more likely to guess right for ambiguous time stamps near
+ transitions where tm_isdst does not change.
+
+ If HAVE_STRFTIME_L is defined to 1, the tz library now defines
+ strftime_l for compatibility with recent versions of POSIX.
+ Only the C locale is supported, though. HAVE_STRFTIME_L defaults
+ to 1 on recent POSIX versions, and to 0 otherwise.
+
+ tzselect -c now uses a hybrid distance measure that works better
+ in Africa. (Thanks to Alan Barrett for noting the problem.)
+
+ The C source code now ports to NetBSD when GCC_DEBUG_FLAGS is used,
+ or when time_tz is defined.
+
+ When HAVE_UTMPX_H is set the 'date' command now builds on systems
+ whose <utmpx.h> file does not define WTMPX_FILE, and when setting
+ the date it updates the wtmpx file if _PATH_WTMPX is defined.
+ This affects GNU/Linux and similar systems.
+
+ For easier maintenance later, some C code has been simplified,
+ some lint has been removed, and the code has been tweaked so that
+ plain 'make' is more likely to work.
+
+ The C type 'bool' is now used for boolean values, instead of 'int'.
+
+ The long-obsolete LOCALE_HOME code has been removed.
+
+ The long-obsolete 'gtime' function has been removed.
+
+ Changes affecting build procedure
+
+ 'zdump' no longer links in ialloc.o, as it's not needed.
+
+ 'make check_time_t_alternatives' no longer assumes GNU diff.
+
+ Changes affecting distribution tarballs
+
+ The files checktab.awk and zoneinfo2tdf.pl are now distributed in
+ the tzdata tarball instead of the tzcode tarball, since they help
+ maintain the data. The NEWS and Theory files are now also
+ distributed in the tzdata tarball, as they're relevant for data.
+ (Thanks to Alan Barrett for pointing this out.) Also, the
+ leapseconds.awk file is no longer distributed in the tzcode
+ tarball, since it belongs in the tzdata tarball (where 2014f
+ inadvertently also distributed it).
+
+ Changes affecting documentation and commentary
+
+ A new file CONTRIBUTING is distributed. (Thanks to Tim Parenti for
+ suggesting a CONTRIBUTING file, and to Tony Finch and Walter Harms
+ for debugging it.)
+
+ The man pages have been updated to use function prototypes,
+ to document thread-safe variants like localtime_r, and to document
+ the NetBSD-inspired functions tzalloc, tzfree, localtime_rz, and
+ mktime_z.
+
+ The fields in Link lines have been renamed to be more descriptive
+ and more like the parameters of 'ln'. LINK-FROM has become TARGET,
+ and LINK-TO has become LINK-NAME.
+
+ tz-link.htm mentions the IETF's tzdist working group; Windows
+ Runtime etc. (thanks to Matt Johnson); and HP-UX's tztab.
+
+ Some broken URLs have been fixed in the commentary. (Thanks to
+ Lester Caine.)
+
+ Commentary about Philippines DST has been updated, and commentary
+ on pre-1970 time in India has been added.
+
+
+Release 2014f - 2014-08-05 17:42:36 -0700
+
+ Changes affecting future time stamps
+
+ Russia will subtract an hour from most of its time zones on 2014-10-26
+ at 02:00 local time. (Thanks to Alexander Krivenyshev.)
+ There are a few exceptions: Magadan Oblast (Asia/Magadan) and Zabaykalsky
+ Krai are subtracting two hours; conversely, Chukotka Autonomous Okrug
+ (Asia/Anadyr), Kamchatka Krai (Asia/Kamchatka), Kemerovo Oblast
+ (Asia/Novokuznetsk), and the Samara Oblast and the Udmurt Republic
+ (Europe/Samara) are not changing their clocks. The changed zones are
+ Europe/Kaliningrad, Europe/Moscow, Europe/Simferopol, Europe/Volgograd,
+ Asia/Yekaterinburg, Asia/Omsk, Asia/Novosibirsk, Asia/Krasnoyarsk,
+ Asia/Irkutsk, Asia/Yakutsk, Asia/Vladivostok, Asia/Khandyga,
+ Asia/Sakhalin, and Asia/Ust-Nera; Asia/Magadan will have two hours
+ subtracted; and Asia/Novokuznetsk's time zone abbreviation is affected,
+ but not its UTC offset. Two zones are added: Asia/Chita (split
+ from Asia/Yakutsk, and also with two hours subtracted) and
+ Asia/Srednekolymsk (split from Asia/Magadan, but with only one hour
+ subtracted). (Thanks to Tim Parenti for much of the above.)
+
+ Changes affecting time zone abbreviations
+
+ Australian eastern time zone abbreviations are now AEST/AEDT not EST,
+ and similarly for the other Australian zones. That is, for eastern
+ standard and daylight saving time the abbreviations are AEST and AEDT
+ instead of the former EST for both; similarly, ACST/ACDT, ACWST/ACWDT,
+ and AWST/AWDT are now used instead of the former CST, CWST, and WST.
+ This change does not affect UTC offsets, only time zone abbreviations.
+ (Thanks to Rich Tibbett and many others.)
+
+ Asia/Novokuznetsk shifts from NOVT to KRAT (remaining on UTC+7)
+ effective 2014-10-26 at 02:00 local time.
+
+ The time zone abbreviation for Xinjiang Time (observed in Ürümqi)
+ has been changed from URUT to XJT. (Thanks to Luther Ma.)
+
+ Prefer MSK/MSD for Moscow time in Russia, even in other cities.
+ Similarly, prefer EET/EEST for eastern European time in Russia.
+
+ Change time zone abbreviations in (western) Samoa to use "ST" and
+ "DT" suffixes, as this is more likely to match common practice.
+ Prefix "W" to (western) Samoa time when its standard-time offset
+ disagrees with that of American Samoa.
+
+ America/Metlakatla now uses PST, not MeST, to abbreviate its time zone.
+
+ Time zone abbreviations have been updated for Japan's two time
+ zones used 1896-1937. JWST now stands for Western Standard
+ Time, and JCST for Central Standard Time (formerly this was CJT).
+ These abbreviations are now used for time in Korea, Taiwan,
+ and Sakhalin while controlled by Japan.
+
+ Changes affecting past time stamps
+
+ China's five zones have been simplified to two, since the post-1970
+ differences in the other three seem to have been imaginary. The
+ zones Asia/Harbin, Asia/Chongqing, and Asia/Kashgar have been
+ removed; backwards-compatibility links still work, albeit with
+ different behaviors for time stamps before May 1980. Asia/Urumqi's
+ 1980 transition to UTC+8 has been removed, so that it is now at
+ UTC+6 and not UTC+8. (Thanks to Luther Ma and to Alois Treindl;
+ Treindl sent helpful translations of two papers by Guo Qingsheng.)
+
+ Some zones have been turned into links, when they differed from existing
+ zones only for older UTC offsets where data entries were likely invented.
+ These changes affect UTC offsets in pre-1970 time stamps only. This is
+ similar to the change in release 2013e, except this time for western
+ Africa. The affected zones are: Africa/Bamako, Africa/Banjul,
+ Africa/Conakry, Africa/Dakar, Africa/Freetown, Africa/Lome,
+ Africa/Nouakchott, Africa/Ouagadougou, Africa/Sao_Tome, and
+ Atlantic/St_Helena. This also affects the backwards-compatibility
+ link Africa/Timbuktu. (Thanks to Alan Barrett, Stephen Colebourne,
+ Tim Parenti, and David Patte for reporting problems in earlier
+ versions of this change.)
+
+ Asia/Shanghai's pre-standard-time UT offset has been changed from
+ 8:05:57 to 8:05:43, the location of Xujiahui Observatory. Its
+ transition to standard time has been changed from 1928 to 1901.
+
+ Asia/Taipei switched to JWST on 1896-01-01, then to JST on 1937-10-01,
+ then to CST on 1945-09-21 at 01:00, and did not observe DST in 1945.
+ In 1946 it observed DST from 05-15 through 09-30; in 1947
+ from 04-15 through 10-31; and in 1979 from 07-01 through 09-30.
+ (Thanks to Yu-Cheng Chuang.)
+
+ Asia/Riyadh's transition to standard time is now 1947-03-14, not 1950.
+
+ Europe/Helsinki's 1942 fall-back transition was 10-04 at 01:00, not
+ 10-03 at 00:00. (Thanks to Konstantin Hyppönen.)
+
+ Pacific/Pago_Pago has been changed from UTC-11:30 to UTC-11 for the period
+ from 1911 to 1950.
+
+ Pacific/Chatham has been changed to New Zealand standard time plus
+ 45 minutes for the period before 1957, reflecting a 1956 remark in
+ the New Zealand parliament.
+
+ Europe/Budapest has several pre-1946 corrections: in 1918 the transition
+ out of DST was on 09-16, not 09-29; in 1919 it was on 11-24, not 09-15; in
+ 1945 it was on 11-01, not 11-03; in 1941 the transition to DST was 04-08
+ not 04-06 at 02:00; and there was no DST in 1920.
+
+ Africa/Accra is now assumed to have observed DST from 1920 through 1935.
+
+ Time in Russia before 1927 or so has been corrected by a few seconds in
+ the following zones: Europe/Moscow, Asia/Irkutsk, Asia/Tbilisi,
+ Asia/Tashkent, Asia/Vladivostok, Asia/Yekaterinburg, Europe/Helsinki, and
+ Europe/Riga. Also, Moscow's location has been changed to its Kilometer 0
+ point. (Thanks to Vladimir Karpinsky for the Moscow changes.)
+
+ Changes affecting data format
+
+ A new file 'zone1970.tab' supersedes 'zone.tab' in the installed data.
+ The new file's extended format allows multiple country codes per zone.
+ The older file is still installed but is deprecated; its format is
+ not changing and it will still be distributed for a while, but new
+ applications should use the new file.
+
+ The new file format simplifies maintenance of obscure locations.
+ To test this, it adds coverage for the Crozet Islands and the
+ Scattered Islands. (Thanks to Tobias Conradi and Antoine Leca.)
+
+ The file 'iso3166.tab' is planned to switch from ASCII to UTF-8.
+ It is still ASCII now, but commentary about the switch has been added.
+ The new file 'zone1970.tab' already uses UTF-8.
+
+ Changes affecting code
+
+ 'localtime', 'mktime', etc. now use much less stack space if ALL_STATE
+ is defined. (Thanks to Elliott Hughes for reporting the problem.)
+
+ 'zic' no longer mishandles input when ignoring case in locales that
+ are not compatible with English, e.g., unibyte Turkish locales when
+ compiled with HAVE_GETTEXT.
+
+ Error diagnostics of 'zic' and 'yearistype' have been reworded so that
+ they no longer use ASCII '-' as if it were a dash.
+
+ 'zic' now rejects output file names that contain '.' or '..' components.
+ (Thanks to Tim Parenti for reporting the problem.)
+
+ 'zic -v' now warns about output file names that do not follow
+ POSIX rules, or that contain a digit or '.'. (Thanks to Arthur
+ David Olson for starting the ball rolling on this.)
+
+ Some lint has been removed when using GCC_DEBUG_FLAGS with GCC 4.9.0.
+
+ Changes affecting build procedure
+
+ 'zic' no longer links in localtime.o and asctime.o, as they're not needed.
+ (Thanks to John Cochran.)
+
+ Changes affecting documentation and commentary
+
+ The 'Theory' file documents legacy names, the longstanding
+ exceptions to the POSIX-inspired file name rules.
+
+ The 'zic' documentation clarifies the role of time types when
+ interpreting dates. (Thanks to Arthur David Olson.)
+
+ Documentation and commentary now prefer UTF-8 to US-ASCII,
+ allowing the use of proper accents in foreign words and names.
+ Code and data have not changed because of this. (Thanks to
+ Garrett Wollman, Ian Abbott, and Guy Harris for helping to debug
+ this.)
+
+ Non-HTML documentation and commentary now use plain-text URLs instead of
+ HTML insertions, and are more consistent about bracketing URLs when they
+ are not already surrounded by white space. (Thanks to suggestions by
+ Steffen Nurpmeso.)
+
+ There is new commentary about Xujiahui Observatory, the five time-zone
+ project in China from 1918 to 1949, timekeeping in Japanese-occupied
+ Shanghai, and Tibet Time in the 1950s. The sharp-eyed can spot the
+ warlord Jin Shuren in the data.
+
+ Commentary about the coverage of each Russian zone has been standardized.
+ (Thanks to Tim Parenti).
+
+ There is new commentary about contemporary timekeeping in Ethiopia.
+
+ Obsolete comments about a 2007 proposal for DST in Kuwait has been removed.
+
+ There is new commentary about time in Poland in 1919.
+
+ Proper credit has been given to DST inventor George Vernon Hudson.
+
+ Commentary about time in Metlakatla, AK and Resolute, NU has been
+ improved, with a new source for the former.
+
+ In zone.tab, Pacific/Easter no longer mentions Salas y Gómez, as it
+ is uninhabited.
+
+ Commentary about permanent Antarctic bases has been updated.
+
+ Several typos have been corrected. (Thanks to Tim Parenti for
+ contributing some of these fixes.)
+
+ tz-link.htm now mentions the JavaScript libraries Moment Timezone,
+ TimezoneJS.Date, Walltime-js, and Timezone. (Thanks to a heads-up
+ from Matt Johnson.) Also, it mentions the Go 'latlong' package.
+ (Thanks to a heads-up from Dirkjan Ochtman.)
+
+ The files usno1988, usno1989, usno1989a, usno1995, usno1997, and usno1998
+ have been removed. These obsolescent US Naval Observatory entries were no
+ longer helpful for maintenance. (Thanks to Tim Parenti for the suggestion.)
+
+
+Release 2014e - 2014-06-12 21:53:52 -0700
+
+ Changes affecting near-future time stamps
+
+ Egypt's 2014 Ramadan-based transitions are June 26 and July 31 at 24:00.
+ (Thanks to Imed Chihi.) Guess that from 2015 on Egypt will temporarily
+ switch to standard time at 24:00 the last Thursday before Ramadan, and
+ back to DST at 00:00 the first Friday after Ramadan.
+
+ Similarly, Morocco's are June 28 at 03:00 and August 2 at 02:00. (Thanks
+ to Milamber Space Network.) Guess that from 2015 on Morocco will
+ temporarily switch to standard time at 03:00 the last Saturday before
+ Ramadan, and back to DST at 02:00 the first Saturday after Ramadan.
+
+ Changes affecting past time stamps
+
+ The abbreviation "MSM" (Moscow Midsummer Time) is now used instead of
+ "MSD" for Moscow's double daylight time in summer 1921. Also, a typo
+ "VLASST" has been repaired to be "VLAST" for Vladivostok summer time
+ in 1991. (Thanks to Hank W. for reporting the problems.)
+
+ Changes affecting commentary
+
+ tz-link.htm now cites RFC 7265 for jCal, mentions PTP and the
+ draft CalDAV extension, updates URLs for TSP, TZInfo, IATA, and
+ removes stale pointers to World Time Explorer and WORLDTIME.
+
Release 2014d - 2014-05-27 21:34:40 -0700
@@ -56,7 +448,7 @@ Release 2014b - 2014-03-24 21:28:50 -0700
Changes affecting code
'zic' and 'localtime' no longer reject locations needing four transitions
- per year for the forseeable future. (Thanks to Andrew Main (Zefram).)
+ per year for the foreseeable future. (Thanks to Andrew Main (Zefram).)
Also, 'zic' avoids some unlikely failures due to integer overflow.
Changes affecting build procedure
@@ -113,9 +505,9 @@ Release 2014a - 2014-03-07 23:30:29 -0800
The boundary of the US Pacific time zone is given more accurately.
(Thanks to Alan Mintz.)
- Chile's 2014 DST will be as predicted. (Thanks to Jose Miguel Garrido.)
+ Chile's 2014 DST will be as predicted. (Thanks to José Miguel Garrido.)
- Paraguay's 2014 DST will be as predicted. (Thanks to Carlos Raul Perasso.)
+ Paraguay's 2014 DST will be as predicted. (Thanks to Carlos Raúl Perasso.)
Better descriptions of countries with same time zone history as
Trinidad and Tobago since 1970. (Thanks to Alan Barrett for suggestion.)
@@ -129,7 +521,7 @@ Release 2014a - 2014-03-07 23:30:29 -0800
Microsoft has some support for tz database names.
- CLDR data is available in both XML and JSON form.
+ CLDR data formats include both XML and JSON.
Mention Maggiolo's map of solar vs standard time.
(Thanks to Arthur David Olson.)
@@ -138,7 +530,7 @@ Release 2014a - 2014-03-07 23:30:29 -0800
Mention the timezone-olson Haskell package.
- Mention zeitverschiebung.net. (Thanks to Martin Jaeger.)
+ Mention zeitverschiebung.net. (Thanks to Martin Jäger.)
Remove moribund links to daylight-savings-time.info and to
Simple Timer + Clocks.
@@ -171,7 +563,7 @@ Release 2013i - 2013-12-17 07:25:23 -0800
Changes affecting documentation and commentary
The files solar87, solar88, and solar89 are no longer distributed.
- They were a negative experiment -- that is, a demonstration that
+ They were a negative experiment - that is, a demonstration that
tz data can represent solar time only with some difficulty and error.
Their presence in the distribution caused confusion, as Riyadh
civil time was generally not solar time in those years.
@@ -204,7 +596,7 @@ Release 2013h - 2013-10-25 15:32:32 -0700
The 'tzselect' command no longer requires the 'select' command,
and should now work with /bin/sh on more platforms. It also works
around a bug in BusyBox awk before version 1.21.0. (Thanks to
- Patrick 'P. J.' McDermott.)
+ Patrick 'P. J.' McDermott and Alan Barrett.)
Changes affecting code
@@ -231,7 +623,7 @@ Release 2013h - 2013-10-25 15:32:32 -0700
Changes affecting documentation and commentary
- tz-link.htm now mentions TC TIMEZONE's draft timezone service protocol
+ tz-link.htm now mentions TC TIMEZONE's draft time zone service protocol
(thanks to Mike Douglass) and TimezoneJS.Date (thanks to Jim Fehrle).
Update URLs in tz-link page. Add URLs for Microsoft Windows, since
@@ -309,7 +701,7 @@ Release 2013f - 2013-09-24 23:37:36 -0700
Changes affecting version-control only
- The experimental github repository now contains annotated and
+ The experimental GitHub repository now contains annotated and
signed tags for recent releases, e.g., '2013e' for Release 2013e.
Releases are tagged starting with 2012e; earlier releases were
done differently, and tags would either not have a simple name or
@@ -338,7 +730,7 @@ Release 2013e - 2013-09-19 23:50:04 -0700
Use ART (UTC-3, standard time), rather than WARST (also UTC-3, but
daylight saving time) for San Luis, Argentina since 2009.
- Changes affecting Godthab time stamps after 2037 if version mismatch
+ Changes affecting Godthåb time stamps after 2037 if version mismatch
Allow POSIX-like TZ strings where the transition time's hour can
range from -167 through 167, instead of the POSIX-required 0
@@ -372,9 +764,9 @@ Release 2013e - 2013-09-19 23:50:04 -0700
Pacific/Johnston is now a link to Pacific/Honolulu. This corrects
some errors before 1947.
- Some zones have been turned into links, when they differ from
- existing zones only in older data that was likely invented or that
- differs only in LMT or transition from LMT. These changes affect
+ Some zones have been turned into links, when they differ from existing
+ zones only in older data entries that were likely invented or that
+ differ only in LMT or transitions from LMT. These changes affect
only time stamps before 1943. The affected zones are:
Africa/Juba, America/Anguilla, America/Aruba, America/Dominica,
America/Grenada, America/Guadeloupe, America/Marigot,
@@ -431,7 +823,7 @@ Release 2013e - 2013-09-19 23:50:04 -0700
The signatures of 'offtime', 'timeoff', and 'gtime' have been
changed back to the old practice of using 'long' to represent UT
offsets. This had been inadvertently and mistakenly changed to
- 'int_fast32_t'. (Thanks to Christos Zoulos.)
+ 'int_fast32_t'. (Thanks to Christos Zoulas.)
The code avoids undefined behavior on integer overflow in some
more places, including gmtime, localtime, mktime and zdump.
@@ -450,7 +842,7 @@ Release 2013e - 2013-09-19 23:50:04 -0700
Remove from zone.tab the names America/Montreal, America/Shiprock,
and Antarctica/South_Pole, as they are equivalent to existing
- same-country-code zones for post-1970 time stamps. The data for
+ same-country-code zones for post-1970 time stamps. The data entries for
these names are unchanged, so the names continue to work as before.
Changes affecting code internals
@@ -600,7 +992,7 @@ Release 2013c - 2013-04-19 16:17:40 -0700
Assume that the recent change to Paraguay's DST rules is permanent,
by moving the end of DST to the 4th Sunday in March every year.
- (Thanks to Carlos Raul Perasso.)
+ (Thanks to Carlos Raúl Perasso.)
Changes affecting past time stamps:
@@ -661,7 +1053,7 @@ Release 2013a - 2013-02-27 09:20:35 -0800
Change affecting binary data format:
The zone offset at the end of version-2-format zone files is now
- allowed to be 24:00, as per POSIX.1-2008. (Thanks to Arthor David Olson.)
+ allowed to be 24:00, as per POSIX.1-2008. (Thanks to Arthur David Olson.)
Changes affecting current and future time stamps:
@@ -740,7 +1132,7 @@ Release 2012i - 2012-11-03 12:57:09 -0700
AWK now defaults to 'awk', not 'nawk'.
The shell in tzselect now defaults to /bin/bash, but this can
be overridden by specifying KSHELL.
- The main web page now mentions the unofficial github repository.
+ The main web page now mentions the unofficial GitHub repository.
(Thanks to Mike Frysinger.)
Tarball signatures can now be built by running 'make signatures'.
@@ -862,7 +1254,7 @@ Release 2012a - 2012-03-01 18:28:10 +0700
Other minor changes are:
Corrections to 1918 Canadian summer time end dates.
- Updated URL for UK timezone history (in comments)
+ Updated URL for UK time zone history (in comments)
A few typos in Le Corre's list of free French place names (comments)
@@ -898,7 +1290,7 @@ Release data2011m - 2011-10-24 21:42:16 +0700
version numbers there...)
-Release data2011l - 2011-10-10 11:15:43 +0700
+Release data2011l - 2011-10-10 11:15:43 +0700
There are just 2 changes that cause different generated tzdata files from
zic, to Asia/Hebron and Pacific/Fiji - the possible change for Bahia, Brazil
@@ -928,7 +1320,7 @@ Release 2011i - 2011-08-29 05:56:32 -0400
Release data2011h - 2011-06-15 18:41:48 -0400
- Russia and Curacao changes
+ Russia and Curaçao changes
Release 2011g - 2011-04-25 09:07:22 -0400
@@ -993,7 +1385,7 @@ Release 2010k - 2010-07-26 10:42:27 -0400
Release 2010j - 2010-05-10 09:07:48 -0400
- changes for Bahia de Banderas and for version naming
+ changes for Bahía de Banderas and for version naming
Release data2010i - 2010-04-16 18:50:45 -0400
@@ -1096,7 +1488,7 @@ Release data2009m - 2009-09-03 10:23:43 -0400
Release data2009l - 2009-08-14 09:13:07 -0400
- Samao (comments only) and Egypt
+ Samoa (comments only) and Egypt
Release 2009k - 2009-07-20 09:46:08 -0400
@@ -1179,7 +1571,7 @@ Release data2008f - 2008-09-09 22:33:26 -0400
Release 2008e - 2008-07-28 14:11:17 -0400
- changes by Arthur David Olson and Jesper Norgaard Welen
+ changes by Arthur David Olson and Jesper Nørgaard Welen
Release data2008d - 2008-07-07 09:51:38 -0400
@@ -1424,7 +1816,7 @@ Release 2005o - 2005-11-28 10:55:26 -0500
Release 2005n - 2005-10-03 09:44:09 -0400
- changes by Paul Eggert (both the Uruguary changes and the Kyrgyzstan
+ changes by Paul Eggert (both the Uruguay changes and the Kyrgyzstan
et al. changes)
@@ -1574,7 +1966,7 @@ Release 2004c - 2004-08-11 12:06:26 -0400
Release 2004b - 2004-07-19 14:33:35 -0400
- data changes by Paul Eggert--most importantly, updates for Argentina
+ data changes by Paul Eggert - most importantly, updates for Argentina
Release 2004a - 2004-05-27 12:00:47 -0400
@@ -1670,7 +2062,7 @@ Release 2001b - 2001-04-05 16:44:38 -0400
changes by Paul Eggert (modulo jnorgard's typo fix)
- tz-art.htm has been htmlified.
+ tz-art.htm has been HTMLified.
Release 2001a - 2001-03-13 12:57:44 -0500
@@ -1691,7 +2083,7 @@ Release 2000h - 2000-12-14 15:33:38 -0500
one typo fix in the "art" file
- With providence, this is the last update of the millenium.
+ With providence, this is the last update of the millennium.
Release 2000g - 2000-10-10 11:35:22 -0400
@@ -1939,7 +2331,7 @@ Release code1997f-data1997g - 1997-07-19 13:15:02 -0400
a small change to a function prototype;
- "Music" has been renamed "Arts.htm", htmlified, and augmented to
+ "Music" has been renamed "Arts.htm", HTMLified, and augmented to
include information on Around the World in Eighty Days.
@@ -1949,7 +2341,7 @@ Release code1997e-data1997f - 1997-05-03 18:52:34 -0400
changes inspired by the item circulated on Slovenia
- The description of Web resources has been htmlified for browsing
+ The description of Web resources has been HTMLified for browsing
convenience.
A new piece of tz-related music has been added to the "Music" file.
@@ -2051,7 +2443,7 @@ Release code96g - 1996-05-16 14:00:26 -0400
fix for the simultaneous-DST-and-zone-change challenge
-Release data96h - 1996-05-09 17:40:51-0400
+Release data96h - 1996-05-09 17:40:51 -0400
changes by Paul Eggert
@@ -2089,7 +2481,7 @@ Release data96d - 1996-03-18 20:49:39 -0500
[not summarized]
-Release code96e - 1996-02-29 15:43:27 -0000
+Release code96e - 1996-02-29 15:43:27 -0000
[tzcode96e.tar.gz is missing!]
internationalization changes and the fix to the documentation for strftime
@@ -2107,7 +2499,7 @@ Release data96b - 1996-01-27 15:44:42 -0500
Kiribati change
-Release code96c - 1996-01-16 16:58:15-0500
+Release code96c - 1996-01-16 16:58:15 -0500
leap-year streamlining and binary-search changes
@@ -2173,8 +2565,8 @@ Release code95e - 1995-10-13 13:23:57 -0400
Release data95i - 1995-09-26 10:43:26 -0400
- For Canada/Central, guess that the Sun customer's ``one week too
- early'' was just a approximation, and the true error is one month
+ For Canada/Central, guess that the Sun customer's "one week too
+ early" was just a approximation, and the true error is one month
too early. This is consistent with the rest of Canada.
@@ -2241,12 +2633,12 @@ Release 94h - 1994-12-10 12:51:14 -0500
* incorporate the table changes by Paul Eggert;
* include (and document) support for universal time specifications in
- data files--but do not (yet) include use of this feature in the
+ data files - but do not (yet) include use of this feature in the
data files.
- Think of this as "TZ Classic"--the software has been set up not to break if
- universal time shows up in its input, and the data has been left as is so as
- not to break existing implementations.
+ Think of this as "TZ Classic" - the software has been set up not to break if
+ universal time shows up in its input, and data entries have been
+ left as is so as not to break existing implementations.
Release data94f - 1994-08-20 12:56:09 -0400
@@ -2297,7 +2689,7 @@ Release 94b - 1994-02-07 10:04:33 -0500
as extensive as Shanks but has a few goodies of its own. I used it
to update the tables. I also fixed some more as a result of
correspondence with Adam David and Peter Ilieve, and move some stray
- links from `europe' to `backward'. I corrected some scanning errors
+ links from 'europe' to 'backward'. I corrected some scanning errors
in usno1989.
As far as the code goes, I fixed zic to allow years in the range
@@ -2325,7 +2717,7 @@ Release 93f - 1993-10-15 12:27:46 -0400
Release 93e - 1993-09-05 21:21:44 -0400
- There's updated data for Israel, England, and Kwajalein; there's
+ This has updated data for Israel, England, and Kwajalein. There's
also an update to "zdump" to cope with Kwajalein's 24-hour jump.
Thanks to Paul Eggert and Peter Ilieve for the changes.
@@ -2347,14 +2739,14 @@ Release 93b - 1993-02-02 14:53:58 -0500
Release 93 - 1993-01-08 07:01:06 -0500
- At kre's suggestion, the package has been split in two--a code piece
+ At kre's suggestion, the package has been split in two - a code piece
(which also includes documentation) that's only of use to folks who
want to recompile things and a data piece useful to anyone who can
run "zic".
The new version has a few changes to the data files, a few
portability changes, and an off-by-one fix (with thanks to
- Tom-Karzes at deshaw.com for providing a description and a
+ Tom Karzes at deshaw.com for providing a description and a
solution).
@@ -2420,10 +2812,14 @@ numbers.
Release time stamps are taken from the release's commit (for newer,
git releases), from the newest file in the tarball (for older
releases, where this info is available) or from the email announcing
-the release (if all else fails; these are marked with a timezone of
+the release (if all else fails; these are marked with a time zone of
-0000 and an "is missing!" comment).
Earlier versions of the code and data were not announced on the tz
list and are not summarized here.
This file is in the public domain.
+
+Local Variables:
+coding: utf-8
+End:
diff --git a/elsie.nci.nih.gov/src/README b/elsie.nci.nih.gov/src/README
index 0b0bbbe..06ef1d9 100644
--- a/elsie.nci.nih.gov/src/README
+++ b/elsie.nci.nih.gov/src/README
@@ -34,7 +34,7 @@ substituting your desired installation directory for "$HOME/tzdir":
Historical local time information has been included here to:
* provide a compendium of data about the history of civil time
- that is useful even if the data are not 100% accurate;
+ that is useful even if not 100% accurate;
* give an idea of the variety of local time rules that have
existed in the past and thus an idea of the variety that may be
@@ -44,19 +44,16 @@ Historical local time information has been included here to:
system.
The information in the time zone data files is by no means authoritative;
-the files currently do not even attempt to cover all time stamps before
-1970, and there are undoubtedly errors even for time stamps since 1970.
-If you know that the rules are different from those in a file, by all means
-feel free to change a file (and please send the changed version to
-tz@iana.org for use in the future). Europeans take note!
+fixes and enhancements are welcome. Please see the file CONTRIBUTING
+for details.
-Thanks to these Timezone Caballeros who've made major contributions to the
-time conversion package: Keith Bostic; Bob Devine; Paul Eggert; Robert Elz;
+Thanks to these Time Zone Caballeros who've made major contributions to the
+time conversion package: Keith Bostic; Bob Devine; Paul Eggert; Robert Elz;
Guy Harris; Mark Horton; John Mackin; and Bradley White. Thanks also to
Michael Bloom, Art Neilson, Stephen Prince, John Sovereign, and Frank Wales
for testing work, and to Gwillim Law for checking local mean time data.
Thanks in particular to Arthur David Olson, the project's founder and first
-maintainer, to whom the timezone community owes the greatest debt of all.
+maintainer, to whom the time zone community owes the greatest debt of all.
None of them are responsible for remaining errors.
Look in <ftp://ftp.iana.org/tz/releases/> for updated versions of these files.
diff --git a/elsie.nci.nih.gov/src/Theory b/elsie.nci.nih.gov/src/Theory
index 0b02ddc..a16ce3e 100644
--- a/elsie.nci.nih.gov/src/Theory
+++ b/elsie.nci.nih.gov/src/Theory
@@ -87,16 +87,16 @@ POSIX has the following properties and limitations.
* In POSIX, there's no tamper-proof way for a process to learn the
system's best idea of local wall clock. (This is important for
- applications that an administrator wants used only at certain times--
+ applications that an administrator wants used only at certain times -
without regard to whether the user has fiddled the "TZ" environment
variable. While an administrator can "do everything in UTC" to get
around the problem, doing so is inconvenient and precludes handling
- daylight saving time shifts--as might be required to limit phone
+ daylight saving time shifts - as might be required to limit phone
calls to off-peak hours.)
* POSIX requires that systems ignore leap seconds.
-* The tz code attempts attempts to support all the time_t implementations
+* The tz code attempts to support all the time_t implementations
allowed by POSIX. The time_t type represents a nonnegative count of
seconds since 1970-01-01 00:00:00 UTC, ignoring leap seconds.
In practice, time_t is usually a signed 64- or 32-bit integer; 32-bit
@@ -127,7 +127,7 @@ These are the extensions that have been made to the POSIX functions:
consideration was given to using some other environment variable
(for example, "TIMEZONE") to hold the string used to generate the
time zone information file name. In the end, however, it was decided
- to continue using "TZ": it is widely used for time zone purposes;
+ to continue using "TZ": it is widely used for time zone purposes;
separately maintaining both "TZ" and "TIMEZONE" seemed a nuisance;
and systems where "new" forms of "TZ" might cause problems can simply
use TZ values such as "EST5EDT" which can be used both by
@@ -156,7 +156,7 @@ These are the extensions that have been made to the POSIX functions:
"tzsetwall();" if such code is moved to "old" systems that don't
provide tzsetwall, you won't be able to generate an executable program.
(These time zone functions also arrange for local wall clock time to be
- used if tzset is called--directly or indirectly--and there's no "TZ"
+ used if tzset is called - directly or indirectly - and there's no "TZ"
environment variable; portable applications should not, however, rely
on this behavior since it's not the way SVR2 systems behave.)
@@ -194,7 +194,7 @@ Points of interest to folks with other systems:
The functions that are conditionally compiled if STD_INSPIRED is defined
should, at this point, be looked on primarily as food for thought. They are
-not in any sense "standard compatible"--some are not, in fact, specified in
+not in any sense "standard compatible" - some are not, in fact, specified in
*any* standard. They do, however, represent responses of various authors to
standardization proposals.
@@ -223,7 +223,7 @@ before computer timekeeping became prevalent.
Clock transitions before 1970 are recorded for each such location,
because most POSIX-compatible systems support negative time stamps and
-could misbehave if data were omitted for pre-1970 transitions.
+could misbehave if data entries were omitted for pre-1970 transitions.
However, the database is not designed for and does not suffice for
applications requiring accurate handling of all past times everywhere,
as it would take far too much effort and guesswork to record all
@@ -233,9 +233,9 @@ details of pre-1970 civil timekeeping.
----- Accuracy of the tz database -----
The tz database is not authoritative, and it surely has errors.
-Corrections are welcome and encouraged. Users requiring authoritative
-data should consult national standards bodies and the references cited
-in the database's comments.
+Corrections are welcome and encouraged; see the file CONTRIBUTING.
+Users requiring authoritative data should consult national standards
+bodies and the references cited in the database's comments.
Errors in the tz database arise from many sources:
@@ -246,7 +246,7 @@ Errors in the tz database arise from many sources:
daylight saving rules, software can mess up after the rule change
if it blithely relies on conversions made before the change.
- * The pre-1970 data in this database cover only a tiny sliver of how
+ * The pre-1970 entries in this database cover only a tiny sliver of how
clocks actually behaved; the vast majority of the necessary
information was lost or never recorded. Thousands more zones would
be needed if the tz database's scope were extended to cover even
@@ -254,12 +254,12 @@ Errors in the tz database arise from many sources:
the current single entry for France would need to split into dozens
of entries, perhaps hundreds.
- * Most of the pre-1970 data comes from unreliable sources, often
+ * Most of the pre-1970 data entries come from unreliable sources, often
astrology books that lack citations and whose compilers evidently
invented entries when the true facts were unknown, without
reporting which entries were known and which were invented.
These books often contradict each other or give implausible entries,
- and on the rare occasions when their old data are checked they are
+ and on the rare occasions when they are checked they are
typically found to be incorrect.
* For the UK the tz database relies on years of first-class work done by
@@ -282,8 +282,8 @@ Errors in the tz database arise from many sources:
transition to GMT is known to be valid only for the L&NW and the
Caledonian railways.
- * The tz database does not record the earliest time for which a
- zone's data is thereafter valid for every location in the region.
+ * The tz database does not record the earliest time for which a zone's
+ data entries are thereafter valid for every location in the region.
For example, Europe/London is valid for all locations in its
region after GMT was made the standard time, but the date of
standardization (1880-08-02) is not in the tz database, other than
@@ -324,8 +324,8 @@ Errors in the tz database arise from many sources:
the Julian calendar, and had 12 varying-length daytime hours with a
non-hour-based system at night.
- * Early clocks were less reliable, and the data do not represent this
- unreliability.
+ * Early clocks were less reliable, and data entries do not represent
+ this unreliability.
* As for leap seconds, civil time was not based on atomic time before
1972, and we don't know the history of earth's rotation accurately
@@ -345,7 +345,7 @@ Errors in the tz database arise from many sources:
a leap second, or are slightly slowed while near a leap second.
* The tz database does not represent how uncertain its information is.
- Ideally it would contain information about when the data are
+ Ideally it would contain information about when data entries are
incomplete or dicey. Partial temporal knowledge is a field of
active research, though, and it's not clear how to apply it here.
@@ -405,7 +405,8 @@ in decreasing order of importance:
digits, as that might create an ambiguity with POSIX
TZ strings. A file name component must not exceed 14
characters or start with '-'. E.g., prefer 'Brunei'
- to 'Bandar_Seri_Begawan'.
+ to 'Bandar_Seri_Begawan'. Exceptions: see the discussion
+ of legacy names below.
A name must not be empty, or contain '//', or start or end with '/'.
Do not use names that differ only in case. Although the reference
implementation is case-sensitive, some other implementations
@@ -424,14 +425,14 @@ in decreasing order of importance:
even if subregions' clocks disagreed before 1970.
Otherwise these tables would become annoyingly large.
If a name is ambiguous, use a less ambiguous alternative;
- e.g. many cities are named San Jose and Georgetown, so
+ e.g. many cities are named San José and Georgetown, so
prefer 'Costa_Rica' to 'San_Jose' and 'Guyana' to 'Georgetown'.
Keep locations compact. Use cities or small islands, not countries
or regions, so that any future time zone changes do not split
locations into different time zones. E.g. prefer 'Paris'
to 'France', since France has had multiple time zones.
Use mainstream English spelling, e.g. prefer 'Rome' to 'Roma', and
- prefer 'Athens' to the true name (which uses Greek letters).
+ prefer 'Athens' to the Greek 'Αθήνα' or the Romanized 'Athína'.
The POSIX file name restrictions encourage this rule.
Use the most populous among locations in a zone,
e.g. prefer 'Shanghai' to 'Beijing'. Among locations with
@@ -454,21 +455,32 @@ in decreasing order of importance:
If a name is changed, put its old spelling in the 'backward' file.
This means old spellings will continue to work.
-The file 'zone.tab' lists geographical locations used to name time
+The file 'zone1970.tab' lists geographical locations used to name time
zone rule files. It is intended to be an exhaustive list of names
for geographic regions as described above; this is a subset of the
-names in the data. Although a 'zone.tab' location's longitude
+names in the data. Although a 'zone1970.tab' location's longitude
corresponds to its LMT offset with one hour for every 15 degrees east
longitude, this relationship is not exact.
Older versions of this package used a different naming scheme,
and these older names are still supported.
See the file 'backward' for most of these older names
-(e.g. 'US/Eastern' instead of 'America/New_York');
-excluding 'backward' should not affect the other data.
+(e.g., 'US/Eastern' instead of 'America/New_York').
The other old-fashioned names still supported are
'WET', 'CET', 'MET', and 'EET' (see the file 'europe').
+Older versions of this package defined legacy names that are
+incompatible with the first rule of location names, but which are
+still supported. These legacy names are mostly defined in the file
+'etcetera'. Also, the file 'backward' defines the legacy names
+'GMT0', 'GMT-0', 'GMT+0' and 'Canada/East-Saskatchewan', and the file
+'northamerica' defines the legacy names 'EST5EDT', 'CST6CDT',
+'MST7MDT', and 'PST8PDT'.
+
+Excluding 'backward' should not affect the other data. If
+'backward' is excluded, excluding 'etcetera' should not affect the
+remaining data.
+
----- Time zone abbreviations -----
@@ -530,10 +542,10 @@ in decreasing order of importance:
in some sense, asleep.
Application writers should note that these abbreviations are ambiguous
-in practice: e.g. 'EST' has a different meaning in Australia than
+in practice: e.g. 'CST' has a different meaning in China than
it does in the United States. In new applications, it's often better
-to use numeric UT offsets like '-0500' instead of time zone
-abbreviations like 'EST'; this avoids the ambiguity.
+to use numeric UT offsets like '-0600' instead of time zone
+abbreviations like 'CST'; this avoids the ambiguity.
----- Calendrical issues -----
@@ -542,10 +554,9 @@ Calendrical issues are a bit out of scope for a time zone database,
but they indicate the sort of problems that we would run into if we
extended the time zone database further into the past. An excellent
resource in this area is Nachum Dershowitz and Edward M. Reingold,
-<a href="http://emr.cs.iit.edu/home/reingold/calendar-book/third-edition/">
-Calendrical Calculations: Third Edition
-</a>, Cambridge University Press (2008). Other information and
-sources are given below. They sometimes disagree.
+Calendrical Calculations: Third Edition, Cambridge University Press (2008)
+<http://emr.cs.iit.edu/home/reingold/calendar-book/third-edition/>.
+Other information and sources are given below. They sometimes disagree.
France
@@ -574,7 +585,7 @@ From: Petteri Sulonen (via Usenet)
Date: 14 Jan 1999 00:00:00 GMT
...
-If your source is correct, how come documents between 1929 -- 1940 were
+If your source is correct, how come documents between 1929 and 1940 were
still dated using the conventional, Gregorian calendar?
I can post a scan of a document dated December 1, 1934, signed by
@@ -586,15 +597,14 @@ Executive Committee of the Supreme Soviet, if you like.
Sweden (and Finland)
From: Mark Brader
-<a href="news:1996Jul6.012937.29190@sq.com">
-Subject: Re: Gregorian reform -- a part of locale?
-</a>
+Subject: Re: Gregorian reform - a part of locale?
+<news:1996Jul6.012937.29190@sq.com>
Date: 1996-07-06
In 1700, Denmark made the transition from Julian to Gregorian. Sweden
decided to *start* a transition in 1700 as well, but rather than have one of
those unsightly calendar gaps :-), they simply decreed that the next leap
-year after 1696 would be in 1744 -- putting the whole country on a calendar
+year after 1696 would be in 1744 - putting the whole country on a calendar
different from both Julian and Gregorian for a period of 40 years.
However, in 1704 something went wrong and the plan was not carried through;
@@ -606,9 +616,9 @@ Then in 1753, Sweden made the transition to Gregorian in the usual manner,
getting there only 13 years behind the original schedule.
(A previous posting of this story was challenged, and Swedish readers
-produced the following references to support it: "Tiderakning och historia"
-by Natanael Beckman (1924) and "Tid, en bok om tiderakning och
-kalendervasen" by Lars-Olof Lode'n (no date was given).)
+produced the following references to support it: "Tideräkning och historia"
+by Natanael Beckman (1924) and "Tid, en bok om tideräkning och
+kalenderväsen" by Lars-Olof Lodén (1968).
Grotefend's data
@@ -629,23 +639,23 @@ Gregorian calendar:
21 Dec 1582/
01 Jan 1583 - Holland, Brabant, Flanders, Hennegau
-10/21 Feb 1583 - bishopric of Liege (L"uttich)
+10/21 Feb 1583 - bishopric of Liege (Lüttich)
13/24 Feb 1583 - bishopric of Augsburg
04/15 Oct 1583 - electorate of Trier
05/16 Oct 1583 - Bavaria, bishoprics of Freising, Eichstedt, Regensburg,
Salzburg, Brixen
-13/24 Oct 1583 - Austrian Oberelsass and Breisgau
+13/24 Oct 1583 - Austrian Oberelsaß and Breisgau
20/31 Oct 1583 - bishopric of Basel
-02/13 Nov 1583 - duchy of J"ulich-Berg
-02/13 Nov 1583 - electorate and city of K"oln
-04/15 Nov 1583 - bishopric of W"urzburg
+02/13 Nov 1583 - duchy of Jülich-Berg
+02/13 Nov 1583 - electorate and city of Köln
+04/15 Nov 1583 - bishopric of Würzburg
11/22 Nov 1583 - electorate of Mainz
16/27 Nov 1583 - bishopric of Strassburg and the margraviate of Baden
-17/28 Nov 1583 - bishopric of M"unster and duchy of Cleve
+17/28 Nov 1583 - bishopric of Münster and duchy of Cleve
14/25 Dec 1583 - Steiermark
06/17 Jan 1584 - Austria and Bohemia
-11/22 Jan 1584 - Luzern, Uri, Schwyz, Zug, Freiburg, Solothurn
+11/22 Jan 1584 - Lucerne, Uri, Schwyz, Zug, Freiburg, Solothurn
12/23 Jan 1584 - Silesia and the Lausitz
22 Jan/
02 Feb 1584 - Hungary (legally on 21 Oct 1587)
@@ -664,7 +674,7 @@ Gregorian calendar:
1617 - duchy of Kurland (reverted to the Julian calendar in
1796)
- 1624 - bishopric of Osnabr"uck
+ 1624 - bishopric of Osnabrück
1630 - bishopric of Minden
@@ -683,7 +693,7 @@ Gregorian calendar:
12 Dec 1700 - Utrecht, Overijssel
31 Dec 1700/
- 12 Jan 1701 - Friesland, Groningen, Z"urich, Bern, Basel, Geneva,
+ 12 Jan 1701 - Friesland, Groningen, Zürich, Bern, Basel, Geneva,
Turgau, and Schaffhausen
1724 - Glarus, Appenzell, and the city of St. Gallen
@@ -695,14 +705,14 @@ Gregorian calendar:
17 Feb/
01 Mar 1753 - Sweden
-1760-1812 - Graub"unden
+1760-1812 - Graubünden
The Russian empire (including Finland and the Baltic states) did not
convert to the Gregorian calendar until the Soviet revolution of 1917.
-Source: H. Grotefend, _Taschenbuch der Zeitrechnung des deutschen
+Source: H. Grotefend, _Taschenbuch der Zeitrechnung des deutschen
Mittelalters und der Neuzeit_, herausgegeben von Dr. O. Grotefend
-(Hannover: Hahnsche Buchhandlung, 1941), pp. 26-28.
+(Hannover: Hahnsche Buchhandlung, 1941), pp. 26-28.
----- Time and time zones on Mars -----
@@ -749,3 +759,9 @@ Michael Allison and Robert Schmunk,
Jia-Rui Chong, "Workdays Fit for a Martian", Los Angeles Times
<http://articles.latimes.com/2004/jan/14/science/sci-marstime14>
(2004-01-14), pp A1, A20-A21.
+
+
+-----
+Local Variables:
+coding: utf-8
+End:
diff --git a/elsie.nci.nih.gov/src/africa b/elsie.nci.nih.gov/src/africa
index 83bff2e..6f7ad7a 100644
--- a/elsie.nci.nih.gov/src/africa
+++ b/elsie.nci.nih.gov/src/africa
@@ -1,10 +1,10 @@
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future). For more, please see
+# the file CONTRIBUTING in the tz distribution.
# From Paul Eggert (2013-02-21):
#
@@ -26,8 +26,8 @@
# I found in the UCLA library.
#
# For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
-# <http://www.jstor.org/stable/1774359>.
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
+# http://www.jstor.org/stable/1774359
#
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
@@ -35,13 +35,13 @@
# Previous editions of this database used WAT, CAT, SAT, and EAT
# for +0:00 through +3:00, respectively,
# but Mark R V Murray reports that
-# `SAST' is the official abbreviation for +2:00 in the country of South Africa,
-# `CAT' is commonly used for +2:00 in countries north of South Africa, and
-# `WAT' is probably the best name for +1:00, as the common phrase for
-# the area that includes Nigeria is ``West Africa''.
-# He has heard of ``Western Sahara Time'' for +0:00 but can find no reference.
+# 'SAST' is the official abbreviation for +2:00 in the country of South Africa,
+# 'CAT' is commonly used for +2:00 in countries north of South Africa, and
+# 'WAT' is probably the best name for +1:00, as the common phrase for
+# the area that includes Nigeria is "West Africa".
+# He has heard of "Western Sahara Time" for +0:00 but can find no reference.
#
-# To make things confusing, `WAT' seems to have been used for -1:00 long ago;
+# To make things confusing, 'WAT' seems to have been used for -1:00 long ago;
# I'd guess that this was because people needed _some_ name for -1:00,
# and at the time, far west Africa was the only major land area in -1:00.
# This usage is now obsolete, as the last use of -1:00 on the African
@@ -54,7 +54,7 @@
# 2:00 SAST South Africa Standard Time
# and Murray suggests the following abbreviation:
# 1:00 WAT West Africa Time
-# I realize that this leads to `WAT' being used for both -1:00 and 1:00
+# I realize that this leads to 'WAT' being used for both -1:00 and 1:00
# for times before 1976, but this is the best I can think of
# until we get more information.
#
@@ -94,9 +94,9 @@ Rule Algeria 1980 only - Oct 31 2:00 0 -
# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
# more precise 0:09:21.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01
- 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
- 0:00 Algeria WE%sT 1940 Feb 25 2:00
+Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01
+ 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
+ 0:00 Algeria WE%sT 1940 Feb 25 2:00
1:00 Algeria CE%sT 1946 Oct 7
0:00 - WET 1956 Jan 29
1:00 - CET 1963 Apr 14
@@ -106,18 +106,8 @@ Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01
1:00 - CET
# Angola
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Luanda 0:52:56 - LMT 1892
- 0:52:04 - AOT 1911 May 26 # Angola Time
- 1:00 - WAT
-
# Benin
-# Whitman says they switched to 1:00 in 1946, not 1934;
-# go with Shanks & Pottenger.
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Porto-Novo 0:10:28 - LMT 1912
- 0:00 - GMT 1934 Feb 26
- 1:00 - WAT
+# See Africa/Lagos.
# Botswana
# From Paul Eggert (2013-02-21):
@@ -126,14 +116,12 @@ Zone Africa/Porto-Novo 0:10:28 - LMT 1912
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Gaborone 1:43:40 - LMT 1885
1:30 - SAST 1903 Mar
- 2:00 - CAT 1943 Sep 19 2:00
- 2:00 1:00 CAST 1944 Mar 19 2:00
+ 2:00 - CAT 1943 Sep 19 2:00
+ 2:00 1:00 CAST 1944 Mar 19 2:00
2:00 - CAT
# Burkina Faso
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Ouagadougou -0:06:04 - LMT 1912
- 0:00 - GMT
+# See Africa/Abidjan.
# Burundi
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -141,52 +129,60 @@ Zone Africa/Bujumbura 1:57:28 - LMT 1890
2:00 - CAT
# Cameroon
-# Whitman says they switched to 1:00 in 1920; go with Shanks & Pottenger.
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Douala 0:38:48 - LMT 1912
- 1:00 - WAT
+# See Africa/Lagos.
# Cape Verde
+#
+# Shanks gives 1907 for the transition to CVT.
+# Perhaps the 1911-05-26 Portuguese decree
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# merely made it official?
+#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia
+Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia
-2:00 - CVT 1942 Sep
-2:00 1:00 CVST 1945 Oct 15
- -2:00 - CVT 1975 Nov 25 2:00
+ -2:00 - CVT 1975 Nov 25 2:00
-1:00 - CVT
# Central African Republic
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Bangui 1:14:20 - LMT 1912
- 1:00 - WAT
+# See Africa/Lagos.
# Chad
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Ndjamena 1:00:12 - LMT 1912
+Zone Africa/Ndjamena 1:00:12 - LMT 1912 # N'Djamena
1:00 - WAT 1979 Oct 14
1:00 1:00 WAST 1980 Mar 8
1:00 - WAT
# Comoros
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Comoro 2:53:04 - LMT 1911 Jul # Moroni, Gran Comoro
+Zone Indian/Comoro 2:53:04 - LMT 1911 Jul # Moroni, Gran Comoro
3:00 - EAT
-# Democratic Republic of Congo
+# Democratic Republic of the Congo
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Kinshasa 1:01:12 - LMT 1897 Nov 9
- 1:00 - WAT
Zone Africa/Lubumbashi 1:49:52 - LMT 1897 Nov 9
2:00 - CAT
+# The above is for the eastern part; see Africa/Lagos for the western part.
# Republic of the Congo
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Brazzaville 1:01:08 - LMT 1912
- 1:00 - WAT
+# See Africa/Lagos.
-# Cote D'Ivoire
+# Côte d'Ivoire / Ivory Coast
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Abidjan -0:16:08 - LMT 1912
0:00 - GMT
+Link Africa/Abidjan Africa/Bamako # Mali
+Link Africa/Abidjan Africa/Banjul # Gambia
+Link Africa/Abidjan Africa/Conakry # Guinea
+Link Africa/Abidjan Africa/Dakar # Senegal
+Link Africa/Abidjan Africa/Freetown # Sierra Leone
+Link Africa/Abidjan Africa/Lome # Togo
+Link Africa/Abidjan Africa/Nouakchott # Mauritania
+Link Africa/Abidjan Africa/Ouagadougou # Burkina Faso
+Link Africa/Abidjan Africa/Sao_Tome # São Tomé and Príncipe
+Link Africa/Abidjan Atlantic/St_Helena # St Helena
# Djibouti
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -231,30 +227,26 @@ Rule Egypt 1990 1994 - May 1 1:00 1:00 S
# Egyptians would approve the cancellation."
#
# Egypt to cancel daylight saving time
-# <a href="http://www.almasryalyoum.com/en/node/407168">
# http://www.almasryalyoum.com/en/node/407168
-# </a>
# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_egypt04.html">
# http://www.worldtimezone.com/dst_news/dst_news_egypt04.html
-# </a>
Rule Egypt 1995 2010 - Apr lastFri 0:00s 1:00 S
-Rule Egypt 1995 2005 - Sep lastThu 23:00s 0 -
+Rule Egypt 1995 2005 - Sep lastThu 24:00 0 -
# From Steffen Thorsen (2006-09-19):
# The Egyptian Gazette, issue 41,090 (2006-09-18), page 1, reports:
# Egypt will turn back clocks by one hour at the midnight of Thursday
# after observing the daylight saving time since May.
# http://news.gom.com.eg/gazette/pdf/2006/09/18/01.pdf
-Rule Egypt 2006 only - Sep 21 23:00s 0 -
+Rule Egypt 2006 only - Sep 21 24:00 0 -
# From Dirk Losch (2007-08-14):
# I received a mail from an airline which says that the daylight
# saving time in Egypt will end in the night of 2007-09-06 to 2007-09-07.
-# From Jesper Norgaard Welen (2007-08-15): [The following agree:]
+# From Jesper Nørgaard Welen (2007-08-15): [The following agree:]
# http://www.nentjes.info/Bill/bill5.htm
# http://www.timeanddate.com/worldclock/city.html?n=53
# From Steffen Thorsen (2007-09-04): The official information...:
# http://www.sis.gov.eg/En/EgyptOnline/Miscellaneous/000002/0207000000000000001580.htm
-Rule Egypt 2007 only - Sep Thu>=1 23:00s 0 -
+Rule Egypt 2007 only - Sep Thu>=1 24:00 0 -
# From Abdelrahman Hassan (2007-09-06):
# Due to the Hijri (lunar Islamic calendar) year being 11 days shorter
# than the year of the Gregorian calendar, Ramadan shifts earlier each
@@ -288,15 +280,9 @@ Rule Egypt 2007 only - Sep Thu>=1 23:00s 0 -
#
# timeanddate[2] and another site I've found[3] also support that.
#
-# [1] <a href="https://bugzilla.redhat.com/show_bug.cgi?id=492263">
-# https://bugzilla.redhat.com/show_bug.cgi?id=492263
-# </a>
-# [2] <a href="http://www.timeanddate.com/worldclock/clockchange.html?n=53">
-# http://www.timeanddate.com/worldclock/clockchange.html?n=53
-# </a>
-# [3] <a href="http://wwp.greenwichmeantime.com/time-zone/africa/egypt/">
-# http://wwp.greenwichmeantime.com/time-zone/africa/egypt/
-# </a>
+# [1] https://bugzilla.redhat.com/show_bug.cgi?id=492263
+# [2] http://www.timeanddate.com/worldclock/clockchange.html?n=53
+# [3] http://wwp.greenwichmeantime.com/time-zone/africa/egypt/
# From Arthur David Olson (2009-04-20):
# In 2009 (and for the next several years), Ramadan ends before the fourth
@@ -306,14 +292,10 @@ Rule Egypt 2007 only - Sep Thu>=1 23:00s 0 -
# From Steffen Thorsen (2009-08-11):
# We have been able to confirm the August change with the Egyptian Cabinet
# Information and Decision Support Center:
-# <a href="http://www.timeanddate.com/news/time/egypt-dst-ends-2009.html">
# http://www.timeanddate.com/news/time/egypt-dst-ends-2009.html
-# </a>
#
# The Middle East News Agency
-# <a href="http://www.mena.org.eg/index.aspx">
# http://www.mena.org.eg/index.aspx
-# </a>
# also reports "Egypt starts winter time on August 21"
# today in article numbered "71, 11/08/2009 12:25 GMT."
# Only the title above is available without a subscription to their service,
@@ -321,19 +303,14 @@ Rule Egypt 2007 only - Sep Thu>=1 23:00s 0 -
# (at least today).
# From Alexander Krivenyshev (2010-07-20):
-# According to News from Egypt - Al-Masry Al-Youm Egypt's cabinet has
+# According to News from Egypt - Al-Masry Al-Youm Egypt's cabinet has
# decided that Daylight Saving Time will not be used in Egypt during
# Ramadan.
#
# Arabic translation:
-# "Clocks to go back during Ramadan--and then forward again"
-# <a href="http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again">
+# "Clocks to go back during Ramadan - and then forward again"
# http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_egypt02.html">
# http://www.worldtimezone.com/dst_news/dst_news_egypt02.html
-# </a>
# From Ahmad El-Dardiry (2014-05-07):
# Egypt is to change back to Daylight system on May 15
@@ -342,46 +319,77 @@ Rule Egypt 2007 only - Sep Thu>=1 23:00s 0 -
# From Gunther Vermier (2015-05-13):
# our Egypt office confirms that the change will be at 15 May "midnight" (24:00)
-# From Paul Eggert (2014-05-13):
+# From Imed Chihi (2014-06-04):
+# We have finally "located" a precise official reference about the DST changes
+# in Egypt. The Ministers Cabinet decision is explained at
+# http://www.cabinet.gov.eg/Media/CabinetMeetingsDetails.aspx?id=347 ...
+# [T]his (Arabic) site is not accessible outside Egypt, but the page ...
+# translates into: "With regard to daylight saving time, it is scheduled to
+# take effect at exactly twelve o'clock this evening, Thursday, 15 MAY 2014,
+# to be suspended by twelve o'clock on the evening of Thursday, 26 JUN 2014,
+# and re-established again at the end of the month of Ramadan, at twelve
+# o'clock on the evening of Thursday, 31 JUL 2014." This statement has been
+# reproduced by other (more accessible) sites[, e.g.,]...
+# http://elgornal.net/news/news.aspx?id=4699258
+
+# From Paul Eggert (2014-06-04):
# Sarah El Deeb and Lee Keath of AP report that the Egyptian government says
# the change is because of blackouts in Cairo, even though Ahram Online (cited
-# above) says DST had no affect on electricity consumption. The AP story says
-# DST will not be observed during Ramadan. There is no information about when
-# DST will end. See:
+# above) says DST had no affect on electricity consumption. There is
+# no information about when DST will end this fall. See:
# http://abcnews.go.com/International/wireStory/el-sissi-pushes-egyptians-line-23614833
#
-# For now, guess that later transitions will use 2010's rules, and that
-# Egypt will agree with Morocco (see below) about the date Ramadan starts and
-# ends, though (unlike Morocco) it will switch at 00:00 standard time. In
-# Egypt the spring-forward transitions are removed for 2020-2022, when the
-# guessed spring-forward date falls during the estimated Ramadan, and all
-# transitions removed for 2023-2038, where the estimated Ramadan falls entirely
-# outside the guessed daylight-saving time. Ramadan intrudes on the guessed
-# DST starting in 2039, but that's beyond our somewhat-arbitrary cutoff.
-
-Rule Egypt 2008 only - Aug lastThu 23:00s 0 -
-Rule Egypt 2009 only - Aug 20 23:00s 0 -
-Rule Egypt 2010 only - Aug 11 0:00 0 -
-Rule Egypt 2010 only - Sep 10 0:00 1:00 S
-Rule Egypt 2010 only - Sep lastThu 23:00s 0 -
+# For now, guess that later spring and fall transitions will use
+# 2010's rules, and guess that Egypt will switch to standard time at
+# 24:00 the last Thursday before Ramadan, and back to DST at 00:00 the
+# first Friday after Ramadan. To implement this,
+# transition dates for 2015 through 2037 were determined by running
+# the following program under GNU Emacs 24.3, with the results integrated
+# by hand into the table below. Ramadan again intrudes on the guessed
+# DST starting in 2038, but that's beyond our somewhat-arbitrary cutoff.
+# (let ((islamic-year 1436))
+# (while (< islamic-year 1460)
+# (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
+# (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
+# (friday 5))
+# (while (/= friday (mod a 7))
+# (setq a (1- a)))
+# (while (/= friday (mod b 7))
+# (setq b (1+ b)))
+# (setq a (1- a))
+# (setq b (1- b))
+# (setq a (calendar-gregorian-from-absolute a))
+# (setq b (calendar-gregorian-from-absolute b))
+# (insert
+# (format
+# (concat "Rule\tEgypt\t%d\tonly\t-\t%s\t%2d\t24:00\t0\t-\n"
+# "Rule\tEgypt\t%d\tonly\t-\t%s\t%2d\t24:00\t1:00\tS\n")
+# (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
+# (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
+# (setq islamic-year (+ 1 islamic-year))))
+Rule Egypt 2008 only - Aug lastThu 24:00 0 -
+Rule Egypt 2009 only - Aug 20 24:00 0 -
+Rule Egypt 2010 only - Aug 10 24:00 0 -
+Rule Egypt 2010 only - Sep 9 24:00 1:00 S
+Rule Egypt 2010 only - Sep lastThu 24:00 0 -
Rule Egypt 2014 only - May 15 24:00 1:00 S
-Rule Egypt 2014 only - Jun 29 0:00s 0 -
-Rule Egypt 2014 only - Jul 29 0:00s 1:00 S
-Rule Egypt 2014 max - Sep lastThu 23:00s 0 -
+Rule Egypt 2014 only - Jun 26 24:00 0 -
+Rule Egypt 2014 only - Jul 31 24:00 1:00 S
+Rule Egypt 2014 max - Sep lastThu 24:00 0 -
Rule Egypt 2015 2019 - Apr lastFri 0:00s 1:00 S
-Rule Egypt 2015 only - Jun 18 0:00s 0 -
-Rule Egypt 2015 only - Jul 18 0:00s 1:00 S
-Rule Egypt 2016 only - Jun 7 0:00s 0 -
-Rule Egypt 2016 only - Jul 7 0:00s 1:00 S
-Rule Egypt 2017 only - May 27 0:00s 0 -
-Rule Egypt 2017 only - Jun 26 0:00s 1:00 S
-Rule Egypt 2018 only - May 16 0:00s 0 -
-Rule Egypt 2018 only - Jun 15 0:00s 1:00 S
-Rule Egypt 2019 only - May 6 0:00s 0 -
-Rule Egypt 2019 only - Jun 5 0:00s 1:00 S
-Rule Egypt 2020 only - May 24 0:00s 1:00 S
-Rule Egypt 2021 only - May 13 0:00s 1:00 S
-Rule Egypt 2022 only - May 3 0:00s 1:00 S
+Rule Egypt 2015 only - Jun 11 24:00 0 -
+Rule Egypt 2015 only - Jul 23 24:00 1:00 S
+Rule Egypt 2016 only - Jun 2 24:00 0 -
+Rule Egypt 2016 only - Jul 7 24:00 1:00 S
+Rule Egypt 2017 only - May 25 24:00 0 -
+Rule Egypt 2017 only - Jun 29 24:00 1:00 S
+Rule Egypt 2018 only - May 10 24:00 0 -
+Rule Egypt 2018 only - Jun 14 24:00 1:00 S
+Rule Egypt 2019 only - May 2 24:00 0 -
+Rule Egypt 2019 only - Jun 6 24:00 1:00 S
+Rule Egypt 2020 only - May 28 24:00 1:00 S
+Rule Egypt 2021 only - May 13 24:00 1:00 S
+Rule Egypt 2022 only - May 5 24:00 1:00 S
Rule Egypt 2023 max - Apr lastFri 0:00s 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -389,60 +397,63 @@ Zone Africa/Cairo 2:05:09 - LMT 1900 Oct
2:00 Egypt EE%sT
# Equatorial Guinea
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Malabo 0:35:08 - LMT 1912
- 0:00 - GMT 1963 Dec 15
- 1:00 - WAT
+# See Africa/Lagos.
# Eritrea
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Asmara 2:35:32 - LMT 1870
- 2:35:32 - AMT 1890 # Asmara Mean Time
- 2:35:20 - ADMT 1936 May 5 # Adis Dera MT
+ 2:35:32 - AMT 1890 # Asmara Mean Time
+ 2:35:20 - ADMT 1936 May 5 # Adis Dera MT
3:00 - EAT
# Ethiopia
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time zones
-# between 1870 and 1890, and that they merged to 38E50 (2:35:20) in 1890.
-# We'll guess that 38E50 is for Adis Dera.
+# From Paul Eggert (2014-07-31):
+# Like the Swahili of Kenya and Tanzania, many Ethiopians keep a
+# 12-hour clock starting at our 06:00, so their "8 o'clock" is our
+# 02:00 or 14:00. Keep this in mind when you ask the time in Amharic.
+#
+# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time
+# zones between 1870 and 1890, that they merged to 38E50 (2:35:20) in
+# 1890, and that they switched to 3:00 on 1936-05-05. Perhaps 38E50
+# was for Adis Dera. Quite likely the Shanks data entries are wrong
+# anyway.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Addis_Ababa 2:34:48 - LMT 1870
- 2:35:20 - ADMT 1936 May 5 # Adis Dera MT
+ 2:35:20 - ADMT 1936 May 5 # Adis Dera MT
3:00 - EAT
# Gabon
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Libreville 0:37:48 - LMT 1912
- 1:00 - WAT
+# See Africa/Lagos.
# Gambia
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Banjul -1:06:36 - LMT 1912
- -1:06:36 - BMT 1935 # Banjul Mean Time
- -1:00 - WAT 1964
- 0:00 - GMT
+# See Africa/Abidjan.
# Ghana
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# Whitman says DST was observed from 1931 to ``the present'';
-# go with Shanks & Pottenger.
-Rule Ghana 1936 1942 - Sep 1 0:00 0:20 GHST
-Rule Ghana 1936 1942 - Dec 31 0:00 0 GMT
+# Whitman says DST was observed from 1931 to "the present";
+# Shanks & Pottenger say 1936 to 1942;
+# and September 1 to January 1 is given by:
+# Scott Keltie J, Epstein M (eds), The Statesman's Year-Book,
+# 57th ed. Macmillan, London (1920), OCLC 609408015, pp xxviii.
+# For lack of better info, assume DST was observed from 1920 to 1942.
+Rule Ghana 1920 1942 - Sep 1 0:00 0:20 GHST
+Rule Ghana 1920 1942 - Dec 31 0:00 0 GMT
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Accra -0:00:52 - LMT 1918
0:00 Ghana %s
# Guinea
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Conakry -0:54:52 - LMT 1912
- 0:00 - GMT 1934 Feb 26
- -1:00 - WAT 1960
- 0:00 - GMT
+# See Africa/Abidjan.
# Guinea-Bissau
+#
+# Shanks gives 1911-05-26 for the transition to WAT,
+# evidently confusing the date of the Portuguese decree
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# with the date that it took effect, namely 1912-01-01.
+#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Bissau -1:02:20 - LMT 1911 May 26
+Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1
-1:00 - WAT 1975
0:00 - GMT
@@ -457,8 +468,8 @@ Zone Africa/Nairobi 2:27:16 - LMT 1928 Jul
# Lesotho
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Maseru 1:50:00 - LMT 1903 Mar
- 2:00 - SAST 1943 Sep 19 2:00
- 2:00 1:00 SAST 1944 Mar 19 2:00
+ 2:00 - SAST 1943 Sep 19 2:00
+ 2:00 1:00 SAST 1944 Mar 19 2:00
2:00 - SAST
# Liberia
@@ -526,11 +537,11 @@ Zone Africa/Tripoli 0:52:44 - LMT 1920
2:00 - EET 1982
1:00 Libya CE%sT 1990 May 4
# The 1996 and 1997 entries are from Shanks & Pottenger;
-# the IATA SSIM data contain some obvious errors.
+# the IATA SSIM data entries contain some obvious errors.
2:00 - EET 1996 Sep 30
1:00 Libya CE%sT 1997 Oct 4
- 2:00 - EET 2012 Nov 10 2:00
- 1:00 Libya CE%sT 2013 Oct 25 2:00
+ 2:00 - EET 2012 Nov 10 2:00
+ 1:00 Libya CE%sT 2013 Oct 25 2:00
2:00 - EET
# Madagascar
@@ -546,18 +557,8 @@ Zone Africa/Blantyre 2:20:00 - LMT 1903 Mar
2:00 - CAT
# Mali
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Bamako -0:32:00 - LMT 1912
- 0:00 - GMT 1934 Feb 26
- -1:00 - WAT 1960 Jun 20
- 0:00 - GMT
-
# Mauritania
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Nouakchott -1:03:48 - LMT 1912
- 0:00 - GMT 1934 Feb 26
- -1:00 - WAT 1960 Nov 28
- 0:00 - GMT
+# See Africa/Abidjan.
# Mauritius
@@ -581,9 +582,7 @@ Zone Africa/Nouakchott -1:03:48 - LMT 1912
# From Steffen Thorsen (2008-07-10):
# According to
-# <a href="http://www.lexpress.mu/display_article.php?news_id=111216">
# http://www.lexpress.mu/display_article.php?news_id=111216
-# </a>
# (in French), Mauritius will start and end their DST a few days earlier
# than previously announced (2008-11-01 to 2009-03-31). The new start
# date is 2008-10-26 at 02:00 and the new end date is 2009-03-27 (no time
@@ -598,22 +597,17 @@ Zone Africa/Nouakchott -1:03:48 - LMT 1912
# From Alex Krivenyshev (2008-07-11):
# Seems that English language article "The revival of daylight saving
-# time: Energy conservation?"-# No. 16578 (07/11/2008) was originally
+# time: Energy conservation?"-# No. 16578 (07/11/2008) was originally
# published on Monday, June 30, 2008...
#
# I guess that article in French "Le gouvernement avance l'introduction
-# de l'heure d'ete" stating that DST in Mauritius starting on October 26
-# and ending on March 27, 2009 is the most recent one.
-# ...
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html">
+# de l'heure d'été" stating that DST in Mauritius starting on October 26
+# and ending on March 27, 2009 is the most recent one....
# http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html
-# </a>
# From Riad M. Hossen Ally (2008-08-03):
# The Government of Mauritius weblink
-# <a href="http://www.gov.mu/portal/site/pmosite/menuitem.4ca0efdee47462e7440a600248a521ca/?content_id=4728ca68b2a5b110VgnVCM1000000a04a8c0RCRD">
# http://www.gov.mu/portal/site/pmosite/menuitem.4ca0efdee47462e7440a600248a521ca/?content_id=4728ca68b2a5b110VgnVCM1000000a04a8c0RCRD
-# </a>
# Cabinet Decision of July 18th, 2008 states as follows:
#
# 4. ...Cabinet has agreed to the introduction into the National Assembly
@@ -623,33 +617,25 @@ Zone Africa/Nouakchott -1:03:48 - LMT 1912
# States of America. It will start at two o'clock in the morning on the
# last Sunday of October and will end at two o'clock in the morning on
# the last Sunday of March the following year. The summer time for the
-# year 2008 - 2009 will, therefore, be effective as from 26 October 2008
+# year 2008-2009 will, therefore, be effective as from 26 October 2008
# and end on 29 March 2009.
# From Ed Maste (2008-10-07):
# THE TIME BILL (No. XXVII of 2008) Explanatory Memorandum states the
# beginning / ending of summer time is 2 o'clock standard time in the
# morning of the last Sunday of October / last Sunday of March.
-# <a href="http://www.gov.mu/portal/goc/assemblysite/file/bill2708.pdf">
# http://www.gov.mu/portal/goc/assemblysite/file/bill2708.pdf
-# </a>
# From Steffen Thorsen (2009-06-05):
# According to several sources, Mauritius will not continue to observe
# DST the coming summer...
#
# Some sources, in French:
-# <a href="http://www.defimedia.info/news/946/Rashid-Beebeejaun-:-%C2%AB-L%E2%80%99heure-d%E2%80%99%C3%A9t%C3%A9-ne-sera-pas-appliqu%C3%A9e-cette-ann%C3%A9e-%C2%BB">
# http://www.defimedia.info/news/946/Rashid-Beebeejaun-:-%C2%AB-L%E2%80%99heure-d%E2%80%99%C3%A9t%C3%A9-ne-sera-pas-appliqu%C3%A9e-cette-ann%C3%A9e-%C2%BB
-# </a>
-# <a href="http://lexpress.mu/Story/3398~Beebeejaun---Les-objectifs-d-%C3%A9conomie-d-%C3%A9nergie-de-l-heure-d-%C3%A9t%C3%A9-ont-%C3%A9t%C3%A9-atteints-">
# http://lexpress.mu/Story/3398~Beebeejaun---Les-objectifs-d-%C3%A9conomie-d-%C3%A9nergie-de-l-heure-d-%C3%A9t%C3%A9-ont-%C3%A9t%C3%A9-atteints-
-# </a>
#
# Our wrap-up:
-# <a href="http://www.timeanddate.com/news/time/mauritius-dst-will-not-repeat.html">
# http://www.timeanddate.com/news/time/mauritius-dst-will-not-repeat.html
-# </a>
# From Arthur David Olson (2009-07-11):
# The "mauritius-dst-will-not-repeat" wrapup includes this:
@@ -662,18 +648,18 @@ Rule Mauritius 1983 only - Mar 21 0:00 0 -
Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 S
Rule Mauritius 2009 only - Mar lastSun 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
+Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
4:00 Mauritius MU%sT # Mauritius Time
# Agalega Is, Rodriguez
# no information; probably like Indian/Mauritius
# Mayotte
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou
+Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou
3:00 - EAT
# Morocco
-# See the `europe' file for Spanish Morocco (Africa/Ceuta).
+# See the 'europe' file for Spanish Morocco (Africa/Ceuta).
# From Alex Krivenyshev (2008-05-09):
# Here is an article that Morocco plan to introduce Daylight Saving Time between
@@ -681,60 +667,44 @@ Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou
#
# "... Morocco is to save energy by adjusting its clock during summer so it will
# be one hour ahead of GMT between 1 June and 27 September, according to
-# Communication Minister and Gov ernment Spokesman, Khalid Naciri...."
+# Communication Minister and Government Spokesman, Khalid Naciri...."
#
-# <a href="http://www.worldtimezone.net/dst_news/dst_news_morocco01.html">
# http://www.worldtimezone.net/dst_news/dst_news_morocco01.html
-# </a>
-# OR
-# <a href="http://en.afrik.com/news11892.html">
# http://en.afrik.com/news11892.html
-# </a>
# From Alex Krivenyshev (2008-05-09):
-# The Morocco time change can be confirmed on Morocco web site Maghreb Arabe Presse:
-# <a href="http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view">
+# The Morocco time change can be confirmed on Morocco web site Maghreb Arabe
+# Presse:
# http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view
-# </a>
#
# Morocco shifts to daylight time on June 1st through September 27, Govt.
# spokesman.
# From Patrice Scattolin (2008-05-09):
# According to this article:
-# <a href="http://www.avmaroc.com/actualite/heure-dete-comment-a127896.html">
# http://www.avmaroc.com/actualite/heure-dete-comment-a127896.html
-# </a>
-# (and republished here:
-# <a href="http://www.actu.ma/heure-dete-comment_i127896_0.html">
-# http://www.actu.ma/heure-dete-comment_i127896_0.html
-# </a>
-# )
-# the changes occurs at midnight:
-#
-# saturday night may 31st at midnight (which in french is to be
-# intrepreted as the night between saturday and sunday)
-# sunday night the 28th at midnight
-#
-# Seeing that the 28th is monday, I am guessing that she intends to say
-# the midnight of the 28th which is the midnight between sunday and
-# monday, which jives with other sources that say that it's inclusive
-# june1st to sept 27th.
+# (and republished here: <http://www.actu.ma/heure-dete-comment_i127896_0.html>)
+# the changes occur at midnight:
+#
+# Saturday night May 31st at midnight (which in French is to be
+# interpreted as the night between Saturday and Sunday)
+# Sunday night the 28th at midnight
+#
+# Seeing that the 28th is Monday, I am guessing that she intends to say
+# the midnight of the 28th which is the midnight between Sunday and
+# Monday, which jives with other sources that say that it's inclusive
+# June 1st to Sept 27th.
#
# The decision was taken by decree *2-08-224 *but I can't find the decree
# published on the web.
#
# It's also confirmed here:
-# <a href="http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm">
# http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm
-# </a>
-# on a government portal as being between june 1st and sept 27th (not yet
-# posted in english).
+# on a government portal as being between June 1st and Sept 27th (not yet
+# posted in English).
#
-# The following google query will generate many relevant hits:
-# <a href="http://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search">
+# The following Google query will generate many relevant hits:
# http://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search
-# </a>
# From Steffen Thorsen (2008-08-27):
# Morocco will change the clocks back on the midnight between August 31
@@ -742,47 +712,32 @@ Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou
# of September:
#
# One article about it (in French):
-# <a href="http://www.menara.ma/fr/Actualites/Maroc/Societe/ci.retour_a_l_heure_gmt_a_partir_du_dimanche_31_aout_a_minuit_officiel_.default">
# http://www.menara.ma/fr/Actualites/Maroc/Societe/ci.retour_a_l_heure_gmt_a_partir_du_dimanche_31_aout_a_minuit_officiel_.default
-# </a>
#
# We have some further details posted here:
-# <a href="http://www.timeanddate.com/news/time/morocco-ends-dst-early-2008.html">
# http://www.timeanddate.com/news/time/morocco-ends-dst-early-2008.html
-# </a>
# From Steffen Thorsen (2009-03-17):
# Morocco will observe DST from 2009-06-01 00:00 to 2009-08-21 00:00 according
# to many sources, such as
-# <a href="http://news.marweb.com/morocco/entertainment/morocco-daylight-saving.html">
# http://news.marweb.com/morocco/entertainment/morocco-daylight-saving.html
-# </a>
-# <a href="http://www.medi1sat.ma/fr/depeche.aspx?idp=2312">
# http://www.medi1sat.ma/fr/depeche.aspx?idp=2312
-# </a>
# (French)
#
# Our summary:
-# <a href="http://www.timeanddate.com/news/time/morocco-starts-dst-2009.html">
# http://www.timeanddate.com/news/time/morocco-starts-dst-2009.html
-# </a>
# From Alexander Krivenyshev (2009-03-17):
# Here is a link to official document from Royaume du Maroc Premier Ministre,
-# Ministere de la Modernisation des Secteurs Publics
+# Ministère de la Modernisation des Secteurs Publics
#
# Under Article 1 of Royal Decree No. 455-67 of Act 23 safar 1387 (2 june 1967)
# concerning the amendment of the legal time, the Ministry of Modernization of
# Public Sectors announced that the official time in the Kingdom will be
# advanced 60 minutes from Sunday 31 May 2009 at midnight.
#
-# <a href="http://www.mmsp.gov.ma/francais/Actualites_fr/PDF_Actualites_Fr/HeureEte_FR.pdf">
# http://www.mmsp.gov.ma/francais/Actualites_fr/PDF_Actualites_Fr/HeureEte_FR.pdf
-# </a>
-#
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_morocco03.html">
# http://www.worldtimezone.com/dst_news/dst_news_morocco03.html
-# </a>
# From Steffen Thorsen (2010-04-13):
# Several news media in Morocco report that the Ministry of Modernization
@@ -790,51 +745,33 @@ Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou
# 2010-05-02 to 2010-08-08.
#
# Example:
-# <a href="http://www.lavieeco.com/actualites/4099-le-maroc-passera-a-l-heure-d-ete-gmt1-le-2-mai.html">
# http://www.lavieeco.com/actualites/4099-le-maroc-passera-a-l-heure-d-ete-gmt1-le-2-mai.html
-# </a>
# (French)
# Our page:
-# <a href="http://www.timeanddate.com/news/time/morocco-starts-dst-2010.html">
# http://www.timeanddate.com/news/time/morocco-starts-dst-2010.html
-# </a>
# From Dan Abitol (2011-03-30):
# ...Rules for Africa/Casablanca are the following (24h format)
-# The 3rd april 2011 at 00:00:00, [it] will be 3rd april 1:00:00
-# The 31th july 2011 at 00:59:59, [it] will be 31th July 00:00:00
+# The 3rd April 2011 at 00:00:00, [it] will be 3rd April 01:00:00
+# The 31st July 2011 at 00:59:59, [it] will be 31st July 00:00:00
# ...Official links of change in morocco
# The change was broadcast on the FM Radio
# I ve called ANRT (telecom regulations in Morocco) at
# +212.537.71.84.00
-# <a href="http://www.anrt.net.ma/fr/">
# http://www.anrt.net.ma/fr/
-# </a>
# They said that
-# <a href="http://www.map.ma/fr/sections/accueil/l_heure_legale_au_ma/view">
# http://www.map.ma/fr/sections/accueil/l_heure_legale_au_ma/view
-# </a>
# is the official publication to look at.
# They said that the decision was already taken.
#
# More articles in the press
-# <a href="http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-lev">
-# http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-lev
-# </a>
-# e.html
-# <a href="http://www.lematin.ma/Actualite/Express/Article.asp?id=148923">
+# http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-leve.html
# http://www.lematin.ma/Actualite/Express/Article.asp?id=148923
-# </a>
-# <a href="http://www.lavieeco.com/actualite/Le-Maroc-passe-sur-GMT%2B1-a-partir-de-dim">
# http://www.lavieeco.com/actualite/Le-Maroc-passe-sur-GMT%2B1-a-partir-de-dim
-# anche-prochain-5538.html
-# </a>
# From Petr Machata (2011-03-30):
# They have it written in English here:
-# <a href="http://www.map.ma/eng/sections/home/morocco_to_spring_fo/view">
# http://www.map.ma/eng/sections/home/morocco_to_spring_fo/view
-# </a>
#
# It says there that "Morocco will resume its standard time on July 31,
# 2011 at midnight." Now they don't say whether they mean midnight of
@@ -842,20 +779,16 @@ Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou
# also been like that in the past.
# From Alexander Krivenyshev (2012-03-09):
-# According to Infom&eacute;diaire web site from Morocco (infomediaire.ma),
-# on March 9, 2012, (in French) Heure l&eacute;gale:
-# Le Maroc adopte officiellement l'heure d'&eacute;t&eacute;
-# <a href="http://www.infomediaire.ma/news/maroc/heure-l%C3%A9gale-le-maroc-adopte-officiellement-lheure-d%C3%A9t%C3%A9">
+# According to Infomédiaire web site from Morocco (infomediaire.ma),
+# on March 9, 2012, (in French) Heure légale:
+# Le Maroc adopte officiellement l'heure d'été
# http://www.infomediaire.ma/news/maroc/heure-l%C3%A9gale-le-maroc-adopte-officiellement-lheure-d%C3%A9t%C3%A9
-# </a>
# Governing Council adopted draft decree, that Morocco DST starts on
# the last Sunday of March (March 25, 2012) and ends on
# last Sunday of September (September 30, 2012)
# except the month of Ramadan.
# or (brief)
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_morocco06.html">
# http://www.worldtimezone.com/dst_news/dst_news_morocco06.html
-# </a>
# From Arthur David Olson (2012-03-10):
# The infomediaire.ma source indicates that the system is to be in
@@ -866,17 +799,13 @@ Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou
# From Christophe Tropamer (2012-03-16):
# Seen Morocco change again:
-# <a href="http://www.le2uminutes.com/actualite.php">
# http://www.le2uminutes.com/actualite.php
-# </a>
-# "...&agrave; partir du dernier dimance d'avril et non fins mars,
-# comme annonc&eacute; pr&eacute;c&eacute;demment."
+# "...à partir du dernier dimanche d'avril et non fins mars,
+# comme annoncé précédemment."
# From Milamber Space Network (2012-07-17):
# The official return to GMT is announced by the Moroccan government:
-# <a href="http://www.mmsp.gov.ma/fr/actualites.aspx?id=288">
# http://www.mmsp.gov.ma/fr/actualites.aspx?id=288 [in French]
-# </a>
#
# Google translation, lightly edited:
# Back to the standard time of the Kingdom (GMT)
@@ -894,7 +823,7 @@ Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou
# announced a bit in advance. On 2012-07-11 the Moroccan government
# announced that year's Ramadan daylight-saving transitions would be
# 2012-07-20 and 2012-08-20; see
-# <http://www.mmsp.gov.ma/fr/actualites.aspx?id=288>.
+# http://www.mmsp.gov.ma/fr/actualites.aspx?id=288
# From Andrew Paprocki (2013-07-02):
# Morocco announced that the year's Ramadan daylight-savings
@@ -914,39 +843,36 @@ Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou
# From Sebastien Willemijns (2014-03-18):
# http://www.afriquinfos.com/articles/2014/3/18/maroc-heure-dete-avancez-tous-horloges-247891.asp
-# From Paul Eggert (2014-03-19):
-# To estimate what the Moroccan government will do in future years,
-# transition dates for 2014 through 2038 were determined by running
-# the following program under GNU Emacs 24.3:
-#
-# (let ((islamic-year 1435))
-# (while (< islamic-year 1461)
-# (let ((a
-# (calendar-gregorian-from-absolute
-# (calendar-islamic-to-absolute (list 9 1 islamic-year))))
-# (b
-# (calendar-gregorian-from-absolute
-# (calendar-islamic-to-absolute (list 10 1 islamic-year)))))
-# (insert
-# (format
-# (concat "Rule\tMorocco\t%d\tonly\t-\t%s\t %2d\t 3:00\t0\t-\n"
-# "Rule\tMorocco\t%d\tonly\t-\t%s\t %2d\t 2:00\t1:00\tS\n")
-# (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
-# (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
+# From Milamber Space Network (2014-06-05):
+# The Moroccan government has recently announced that the country will return
+# to standard time at 03:00 on Saturday, June 28, 2014 local time.... DST
+# will resume again at 02:00 on Saturday, August 2, 2014....
+# http://www.mmsp.gov.ma/fr/actualites.aspx?id=586
+
+# From Paul Eggert (2014-06-05):
+# For now, guess that later spring and fall transitions will use 2014's rules,
+# and guess that Morocco will switch to standard time at 03:00 the last
+# Saturday before Ramadan, and back to DST at 02:00 the first Saturday after
+# Ramadan. To implement this, transition dates for 2015 through 2037 were
+# determined by running the following program under GNU Emacs 24.3, with the
+# results integrated by hand into the table below.
+# (let ((islamic-year 1436))
+# (while (< islamic-year 1460)
+# (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
+# (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
+# (saturday 6))
+# (while (/= saturday (mod (setq a (1- a)) 7)))
+# (while (/= saturday (mod b 7))
+# (setq b (1+ b)))
+# (setq a (calendar-gregorian-from-absolute a))
+# (setq b (calendar-gregorian-from-absolute b))
+# (insert
+# (format
+# (concat "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 3:00\t0\t-\n"
+# "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 2:00\t1:00\tS\n")
+# (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
+# (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
# (setq islamic-year (+ 1 islamic-year))))
-#
-# with spring-forward transitions removed for 2023-2025, when the
-# normal spring-forward date falls during the estimated Ramadan; with
-# all transitions removed for 2026-2035, where the estimated Ramadan
-# falls entirely outside daylight-saving time; and with fall-back
-# transitions removed for 2036-2037, where the normal fall-back
-# date falls during the estimated Ramadan. Normally, the table would
-# stop after 2037 because 32-bit time_t values roll around early in 2038,
-# but that would imply a prediction of perpetual DST after March 2038
-# due to the year-2037 glitches. So, this table instead stops after
-# 2038, the first non-glitchy year after the 32-bit rollover.
-# An advantage of stopping after 2038 is that it lets zic guess
-# TZ='WET0WEST,M3.5.0,M10.5.0/3' for time stamps far in the future.
# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -968,46 +894,44 @@ Rule Morocco 1978 only - Aug 4 0:00 0 -
Rule Morocco 2008 only - Jun 1 0:00 1:00 S
Rule Morocco 2008 only - Sep 1 0:00 0 -
Rule Morocco 2009 only - Jun 1 0:00 1:00 S
-Rule Morocco 2009 only - Aug 21 0:00 0 -
+Rule Morocco 2009 only - Aug 21 0:00 0 -
Rule Morocco 2010 only - May 2 0:00 1:00 S
Rule Morocco 2010 only - Aug 8 0:00 0 -
Rule Morocco 2011 only - Apr 3 0:00 1:00 S
-Rule Morocco 2011 only - Jul 31 0 0 -
-Rule Morocco 2012 2013 - Apr lastSun 2:00 1:00 S
-Rule Morocco 2012 only - Sep 30 3:00 0 -
-Rule Morocco 2012 only - Jul 20 3:00 0 -
-Rule Morocco 2012 only - Aug 20 2:00 1:00 S
-Rule Morocco 2013 only - Jul 7 3:00 0 -
-Rule Morocco 2013 only - Aug 10 2:00 1:00 S
-Rule Morocco 2013 2035 - Oct lastSun 3:00 0 -
-Rule Morocco 2014 2022 - Mar lastSun 2:00 1:00 S
-Rule Morocco 2014 only - Jun 29 3:00 0 -
-Rule Morocco 2014 only - Jul 29 2:00 1:00 S
-Rule Morocco 2015 only - Jun 18 3:00 0 -
-Rule Morocco 2015 only - Jul 18 2:00 1:00 S
-Rule Morocco 2016 only - Jun 7 3:00 0 -
-Rule Morocco 2016 only - Jul 7 2:00 1:00 S
-Rule Morocco 2017 only - May 27 3:00 0 -
-Rule Morocco 2017 only - Jun 26 2:00 1:00 S
-Rule Morocco 2018 only - May 16 3:00 0 -
-Rule Morocco 2018 only - Jun 15 2:00 1:00 S
-Rule Morocco 2019 only - May 6 3:00 0 -
-Rule Morocco 2019 only - Jun 5 2:00 1:00 S
-Rule Morocco 2020 only - Apr 24 3:00 0 -
-Rule Morocco 2020 only - May 24 2:00 1:00 S
-Rule Morocco 2021 only - Apr 13 3:00 0 -
-Rule Morocco 2021 only - May 13 2:00 1:00 S
-Rule Morocco 2022 only - Apr 3 3:00 0 -
-Rule Morocco 2022 only - May 3 2:00 1:00 S
-Rule Morocco 2023 only - Apr 22 2:00 1:00 S
-Rule Morocco 2024 only - Apr 10 2:00 1:00 S
-Rule Morocco 2025 only - Mar 31 2:00 1:00 S
-Rule Morocco 2026 max - Mar lastSun 2:00 1:00 S
-Rule Morocco 2036 only - Oct 21 3:00 0 -
-Rule Morocco 2037 only - Oct 11 3:00 0 -
-Rule Morocco 2038 only - Sep 30 3:00 0 -
-Rule Morocco 2038 only - Oct 30 2:00 1:00 S
-Rule Morocco 2038 max - Oct lastSun 3:00 0 -
+Rule Morocco 2011 only - Jul 31 0 0 -
+Rule Morocco 2012 2013 - Apr lastSun 2:00 1:00 S
+Rule Morocco 2012 only - Sep 30 3:00 0 -
+Rule Morocco 2012 only - Jul 20 3:00 0 -
+Rule Morocco 2012 only - Aug 20 2:00 1:00 S
+Rule Morocco 2013 only - Jul 7 3:00 0 -
+Rule Morocco 2013 only - Aug 10 2:00 1:00 S
+Rule Morocco 2013 max - Oct lastSun 3:00 0 -
+Rule Morocco 2014 2022 - Mar lastSun 2:00 1:00 S
+Rule Morocco 2014 only - Jun 28 3:00 0 -
+Rule Morocco 2014 only - Aug 2 2:00 1:00 S
+Rule Morocco 2015 only - Jun 13 3:00 0 -
+Rule Morocco 2015 only - Jul 18 2:00 1:00 S
+Rule Morocco 2016 only - Jun 4 3:00 0 -
+Rule Morocco 2016 only - Jul 9 2:00 1:00 S
+Rule Morocco 2017 only - May 20 3:00 0 -
+Rule Morocco 2017 only - Jul 1 2:00 1:00 S
+Rule Morocco 2018 only - May 12 3:00 0 -
+Rule Morocco 2018 only - Jun 16 2:00 1:00 S
+Rule Morocco 2019 only - May 4 3:00 0 -
+Rule Morocco 2019 only - Jun 8 2:00 1:00 S
+Rule Morocco 2020 only - Apr 18 3:00 0 -
+Rule Morocco 2020 only - May 30 2:00 1:00 S
+Rule Morocco 2021 only - Apr 10 3:00 0 -
+Rule Morocco 2021 only - May 15 2:00 1:00 S
+Rule Morocco 2022 only - Apr 2 3:00 0 -
+Rule Morocco 2022 only - May 7 2:00 1:00 S
+Rule Morocco 2023 only - Apr 22 2:00 1:00 S
+Rule Morocco 2024 only - Apr 13 2:00 1:00 S
+Rule Morocco 2025 only - Apr 5 2:00 1:00 S
+Rule Morocco 2026 max - Mar lastSun 2:00 1:00 S
+Rule Morocco 2035 only - Oct 27 3:00 0 -
+Rule Morocco 2036 only - Oct 18 3:00 0 -
+Rule Morocco 2037 only - Oct 10 3:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
@@ -1026,11 +950,17 @@ Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
# Assume that this has been true since Western Sahara switched to GMT,
# since most of it was then controlled by Morocco.
-Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan
+Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan # El Aaiún
-1:00 - WAT 1976 Apr 14
0:00 Morocco WE%sT
# Mozambique
+#
+# Shanks gives 1903-03-01 for the transition to CAT.
+# Perhaps the 1911-05-26 Portuguese decree
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# merely made it official?
+#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Maputo 2:10:20 - LMT 1903 Mar
2:00 - CAT
@@ -1039,8 +969,8 @@ Zone Africa/Maputo 2:10:20 - LMT 1903 Mar
# The 1994-04-03 transition is from Shanks & Pottenger.
# Shanks & Pottenger report no DST after 1998-04; go with IATA.
-# From Petronella Sibeene (2007-03-30) in
-# <http://allafrica.com/stories/200703300178.html>:
+# From Petronella Sibeene (2007-03-30):
+# http://allafrica.com/stories/200703300178.html
# While the entire country changes its time, Katima Mulilo and other
# settlements in Caprivi unofficially will not because the sun there
# rises and sets earlier compared to other regions. Chief of
@@ -1057,34 +987,41 @@ Rule Namibia 1994 max - Sep Sun>=1 2:00 1:00 S
Rule Namibia 1995 max - Apr Sun>=1 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
- 1:30 - SWAT 1903 Mar # SW Africa Time
- 2:00 - SAST 1942 Sep 20 2:00
- 2:00 1:00 SAST 1943 Mar 21 2:00
+ 1:30 - SWAT 1903 Mar # SW Africa Time
+ 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
2:00 - CAT 1994 Apr 3
1:00 Namibia WA%sT
# Niger
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Niamey 0:08:28 - LMT 1912
- -1:00 - WAT 1934 Feb 26
- 0:00 - GMT 1960
- 1:00 - WAT
+# See Africa/Lagos.
# Nigeria
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Lagos 0:13:36 - LMT 1919 Sep
1:00 - WAT
-
-# Reunion
+Link Africa/Lagos Africa/Bangui # Central African Republic
+Link Africa/Lagos Africa/Brazzaville # Rep. of the Congo
+Link Africa/Lagos Africa/Douala # Cameroon
+Link Africa/Lagos Africa/Kinshasa # Dem. Rep. of the Congo (west)
+Link Africa/Lagos Africa/Libreville # Gabon
+Link Africa/Lagos Africa/Luanda # Angola
+Link Africa/Lagos Africa/Malabo # Equatorial Guinea
+Link Africa/Lagos Africa/Niamey # Niger
+Link Africa/Lagos Africa/Porto-Novo # Benin
+
+# Réunion
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
- 4:00 - RET # Reunion Time
+Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
+ 4:00 - RET # Réunion Time
#
-# Scattered Islands (Iles Eparses) administered from Reunion are as follows.
+# Crozet Islands also observes Réunion time; see the 'antarctica' file.
+#
+# Scattered Islands (Îles Éparses) administered from Réunion are as follows.
# The following information about them is taken from
-# Iles Eparses (www.outre-mer.gouv.fr/domtom/ile.htm, 1997-07-22, in French;
-# no longer available as of 1999-08-17).
+# Îles Éparses (<http://www.outre-mer.gouv.fr/domtom/ile.htm>, 1997-07-22,
+# in French; no longer available as of 1999-08-17).
# We have no info about their time zone histories.
#
# Bassas da India - uninhabited
@@ -1099,32 +1036,21 @@ Zone Africa/Kigali 2:00:16 - LMT 1935 Jun
2:00 - CAT
# St Helena
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Atlantic/St_Helena -0:22:48 - LMT 1890 # Jamestown
- -0:22:48 - JMT 1951 # Jamestown Mean Time
- 0:00 - GMT
+# See Africa/Abidjan.
# The other parts of the St Helena territory are similar:
# Tristan da Cunha: on GMT, say Whitman and the CIA
-# Ascension: on GMT, says usno1995 and the CIA
+# Ascension: on GMT, say the USNO (1995-12-21) and the CIA
# Gough (scientific station since 1955; sealers wintered previously):
# on GMT, says the CIA
-# Inaccessible, Nightingale: no information, but probably GMT
-
-# Sao Tome and Principe
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Sao_Tome 0:26:56 - LMT 1884
- -0:36:32 - LMT 1912 # Lisbon Mean Time
- 0:00 - GMT
+# Inaccessible, Nightingale: uninhabited
+# São Tomé and Príncipe
# Senegal
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Dakar -1:09:44 - LMT 1912
- -1:00 - WAT 1941 Jun
- 0:00 - GMT
+# See Africa/Abidjan.
# Seychelles
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
+Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
4:00 - SCT # Seychelles Time
# From Paul Eggert (2001-05-30):
# Aldabra, Farquhar, and Desroches, originally dependencies of the
@@ -1134,17 +1060,7 @@ Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
# Possibly the islands were uninhabited.
# Sierra Leone
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# Whitman gives Mar 31 - Aug 31 for 1931 on; go with Shanks & Pottenger.
-Rule SL 1935 1942 - Jun 1 0:00 0:40 SLST
-Rule SL 1935 1942 - Oct 1 0:00 0 WAT
-Rule SL 1957 1962 - Jun 1 0:00 1:00 SLST
-Rule SL 1957 1962 - Sep 1 0:00 0 GMT
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Freetown -0:53:00 - LMT 1882
- -0:53:00 - FMT 1913 Jun # Freetown Mean Time
- -1:00 SL %s 1957
- 0:00 SL %s
+# See Africa/Abidjan.
# Somalia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1167,9 +1083,9 @@ Zone Africa/Johannesburg 1:52:00 - LMT 1892 Feb 8
# Sudan
#
-# From <a href="http://www.sunanews.net/sn13jane.html">
-# Sudan News Agency (2000-01-13)
-# </a>, also reported by Michael De Beukelaer-Dossche via Steffen Thorsen:
+# From <http://www.sunanews.net/sn13jane.html>
+# Sudan News Agency (2000-01-13),
+# also reported by Michaël De Beukelaer-Dossche via Steffen Thorsen:
# Clocks will be moved ahead for 60 minutes all over the Sudan as of noon
# Saturday.... This was announced Thursday by Caretaker State Minister for
# Manpower Abdul-Rahman Nur-Eddin.
@@ -1200,14 +1116,12 @@ Zone Africa/Dar_es_Salaam 2:37:08 - LMT 1931
3:00 - EAT
# Togo
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Lome 0:04:52 - LMT 1893
- 0:00 - GMT
+# See Africa/Abidjan.
# Tunisia
# From Gwillim Law (2005-04-30):
-# My correspondent, Risto Nykanen, has alerted me to another adoption of DST,
+# My correspondent, Risto Nykänen, has alerted me to another adoption of DST,
# this time in Tunisia. According to Yahoo France News
# <http://fr.news.yahoo.com/050426/5/4dumk.html>, in a story attributed to AP
# and dated 2005-04-26, "Tunisia has decided to advance its official time by
@@ -1216,8 +1130,8 @@ Zone Africa/Lome 0:04:52 - LMT 1893
# Saturday." (My translation)
#
# From Oscar van Vlijmen (2005-05-02):
-# LaPresse, the first national daily newspaper ...
-# <http://www.lapresse.tn/archives/archives280405/actualites/lheure.html>
+# La Presse, the first national daily newspaper ...
+# http://www.lapresse.tn/archives/archives280405/actualites/lheure.html
# ... DST for 2005: on: Sun May 1 0h standard time, off: Fri Sept. 30,
# 1h standard time.
#
@@ -1230,18 +1144,12 @@ Zone Africa/Lome 0:04:52 - LMT 1893
# From Steffen Thorsen (2009-03-16):
# According to several news sources, Tunisia will not observe DST this year.
# (Arabic)
-# <a href="http://www.elbashayer.com/?page=viewn&nid=42546">
# http://www.elbashayer.com/?page=viewn&nid=42546
-# </a>
-# <a href="http://www.babnet.net/kiwidetail-15295.asp">
# http://www.babnet.net/kiwidetail-15295.asp
-# </a>
#
# We have also confirmed this with the US embassy in Tunisia.
# We have a wrap-up about this on the following page:
-# <a href="http://www.timeanddate.com/news/time/tunisia-cancels-dst-2009.html">
# http://www.timeanddate.com/news/time/tunisia-cancels-dst-2009.html
-# </a>
# From Alexander Krivenyshev (2009-03-17):
# Here is a link to Tunis Afrique Presse News Agency
@@ -1249,20 +1157,17 @@ Zone Africa/Lome 0:04:52 - LMT 1893
# Standard time to be kept the whole year long (tap.info.tn):
#
# (in English)
-# <a href="http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=26813&Itemid=157">
# http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=26813&Itemid=157
-# </a>
#
# (in Arabic)
-# <a href="http://www.tap.info.tn/ar/index.php?option=com_content&task=view&id=61240&Itemid=1">
# http://www.tap.info.tn/ar/index.php?option=com_content&task=view&id=61240&Itemid=1
-# </a>
-# From Arthur David Olson (2009--3-18):
-# The Tunis Afrique Presse News Agency notice contains this: "This measure is due to the fact
-# that the fasting month of ramadan coincides with the period concerned by summer time.
-# Therefore, the standard time will be kept unchanged the whole year long."
-# So foregoing DST seems to be an exception (albeit one that may be repeated in the future).
+# From Arthur David Olson (2009-03-18):
+# The Tunis Afrique Presse News Agency notice contains this: "This measure is
+# due to the fact that the fasting month of Ramadan coincides with the period
+# concerned by summer time. Therefore, the standard time will be kept
+# unchanged the whole year long." So foregoing DST seems to be an exception
+# (albeit one that may be repeated in the future).
# From Alexander Krivenyshev (2010-03-27):
# According to some news reports Tunis confirmed not to use DST in 2010
@@ -1274,12 +1179,8 @@ Zone Africa/Lome 0:04:52 - LMT 1893
# coincided with the month of Ramadan..."
#
# (in Arabic)
-# <a href="http://www.moheet.com/show_news.aspx?nid=358861&pg=1">
# http://www.moheet.com/show_news.aspx?nid=358861&pg=1
-# <a href="http://www.almadenahnews.com/newss/news.php?c=118&id=38036">
# http://www.almadenahnews.com/newss/news.php?c=118&id=38036
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_tunis02.html">
# http://www.worldtimezone.com/dst_news/dst_news_tunis02.html
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -1314,7 +1215,7 @@ Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 -
# Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Tunis 0:40:44 - LMT 1881 May 12
- 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
+ 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
1:00 Tunisia CE%sT
# Uganda
diff --git a/elsie.nci.nih.gov/src/antarctica b/elsie.nci.nih.gov/src/antarctica
index 8f8e408..1deff8e 100644
--- a/elsie.nci.nih.gov/src/antarctica
+++ b/elsie.nci.nih.gov/src/antarctica
@@ -1,16 +1,13 @@
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
# From Paul Eggert (1999-11-15):
# To keep things manageable, we list only locations occupied year-round; see
-# <a href="http://www.comnap.aq/comnap/comnap.nsf/P/Stations/">
# COMNAP - Stations and Bases
-# </a>
+# http://www.comnap.aq/comnap/comnap.nsf/P/Stations/
# and
-# <a href="http://www.spri.cam.ac.uk/bob/periant.htm">
# Summary of the Peri-Antarctic Islands (1998-07-23)
-# </a>
+# http://www.spri.cam.ac.uk/bob/periant.htm
# for information.
# Unless otherwise specified, we have no time zone information.
#
@@ -55,19 +52,19 @@ Rule ChileAQ 2012 max - Sep Sun>=2 4:00u 1:00 S
# Argentina - year-round bases
# Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
-# Esperanza, San Martin Land, -6323-05659, since 1952-12-17
-# Jubany, Potter Peninsula, King George Island, -6414-0602320, since 1982-01
-# Marambio, Seymour I, -6414-05637, since 1969-10-29
+# Carlini, Potter Cove, King George Island, -6414-0602320, since 1982-01
+# Esperanza, Hope Bay, -6323-05659, since 1952-12-17
+# Marambio, -6414-05637, since 1969-10-29
# Orcadas, Laurie I, -6016-04444, since 1904-02-22
-# San Martin, Debenham I, -6807-06708, since 1951-03-21
+# San Martín, Barry I, -6808-06706, since 1951-03-21
# (except 1960-03 / 1976-03-21)
# Australia - territories
# Heard Island, McDonald Islands (uninhabited)
# previously sealers and scientific personnel wintered
-# <a href="http://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html">
# Margaret Turner reports
-# </a> (1999-09-30) that they're UTC+5, with no DST;
+# http://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html
+# (1999-09-30) that they're UTC+5, with no DST;
# presumably this is when they have visitors.
#
# year-round bases
@@ -84,14 +81,10 @@ Rule ChileAQ 2012 max - Sep Sun>=2 4:00u 1:00 S
# The changes occurred on 2009-10-18 at 02:00 (local times).
#
# Government source: (Australian Antarctic Division)
-# <a href="http://www.aad.gov.au/default.asp?casid=37079">
# http://www.aad.gov.au/default.asp?casid=37079
-# </a>
#
# We have more background information here:
-# <a href="http://www.timeanddate.com/news/time/antarctica-new-times.html">
# http://www.timeanddate.com/news/time/antarctica-new-times.html
-# </a>
# From Steffen Thorsen (2010-03-10):
# We got these changes from the Australian Antarctic Division: ...
@@ -106,50 +99,49 @@ Rule ChileAQ 2012 max - Sep Sun>=2 4:00u 1:00 S
# - Mawson station stays on UTC+5.
#
# Background:
-# <a href="http://www.timeanddate.com/news/time/antartica-time-changes-2010.html">
# http://www.timeanddate.com/news/time/antartica-time-changes-2010.html
-# </a>
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Casey 0 - zzz 1969
- 8:00 - WST 2009 Oct 18 2:00
- # Western (Aus) Standard Time
- 11:00 - CAST 2010 Mar 5 2:00
- # Casey Time
- 8:00 - WST 2011 Oct 28 2:00
+ 8:00 - AWST 2009 Oct 18 2:00
+ # Australian Western Std Time
+ 11:00 - CAST 2010 Mar 5 2:00 # Casey Time
+ 8:00 - AWST 2011 Oct 28 2:00
11:00 - CAST 2012 Feb 21 17:00u
- 8:00 - WST
+ 8:00 - AWST
Zone Antarctica/Davis 0 - zzz 1957 Jan 13
- 7:00 - DAVT 1964 Nov # Davis Time
+ 7:00 - DAVT 1964 Nov # Davis Time
0 - zzz 1969 Feb
- 7:00 - DAVT 2009 Oct 18 2:00
+ 7:00 - DAVT 2009 Oct 18 2:00
5:00 - DAVT 2010 Mar 10 20:00u
- 7:00 - DAVT 2011 Oct 28 2:00
+ 7:00 - DAVT 2011 Oct 28 2:00
5:00 - DAVT 2012 Feb 21 20:00u
7:00 - DAVT
Zone Antarctica/Mawson 0 - zzz 1954 Feb 13
- 6:00 - MAWT 2009 Oct 18 2:00
- # Mawson Time
+ 6:00 - MAWT 2009 Oct 18 2:00 # Mawson Time
5:00 - MAWT
# References:
-# <a href="http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html">
# Casey Weather (1998-02-26)
-# </a>
-# <a href="http://www.antdiv.gov.au/aad/exop/sfo/davis/video.html">
+# http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html
# Davis Station, Antarctica (1998-02-26)
-# </a>
-# <a href="http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html">
+# http://www.antdiv.gov.au/aad/exop/sfo/davis/video.html
# Mawson Station, Antarctica (1998-02-25)
-# </a>
+# http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html
+
+# Belgium - year-round base
+# Princess Elisabeth, Queen Maud Land, -713412+0231200, since 2007
# Brazil - year-round base
-# Comandante Ferraz, King George Island, -6205+05824, since 1983/4
+# Ferraz, King George Island, -6205+05824, since 1983/4
+
+# Bulgaria - year-round base
+# St. Kliment Ohridski, Livingston Island, -623829-0602153, since 1988
# Chile - year-round bases and towns
# Escudero, South Shetland Is, -621157-0585735, since 1994
-# Presidente Eduadro Frei, King George Island, -6214-05848, since 1969-03-07
-# General Bernardo O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
-# Capitan Arturo Prat, -6230-05941
+# Frei Montalva, King George Island, -6214-05848, since 1969-03-07
+# O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
+# Prat, -6230-05941
# Villa Las Estrellas (a town), around the Frei base, since 1984-04-09
# These locations have always used Santiago time; use TZ='America/Santiago'.
@@ -157,31 +149,35 @@ Zone Antarctica/Mawson 0 - zzz 1954 Feb 13
# Great Wall, King George Island, -6213-05858, since 1985-02-20
# Zhongshan, Larsemann Hills, Prydz Bay, -6922+07623, since 1989-02-26
-# France - year-round bases
+# France - year-round bases (also see "France & Italy")
#
# From Antoine Leca (1997-01-20):
-# Time data are from Nicole Pailleau at the IFRTP
+# Time data entries are from Nicole Pailleau at the IFRTP
# (French Institute for Polar Research and Technology).
-# She confirms that French Southern Territories and Terre Adelie bases
-# don't observe daylight saving time, even if Terre Adelie supplies came
+# She confirms that French Southern Territories and Terre Adélie bases
+# don't observe daylight saving time, even if Terre Adélie supplies came
# from Tasmania.
#
# French Southern Territories with year-round inhabitants
#
-# Martin-de-Vivies Base, Amsterdam Island, -374105+0773155, since 1950
-# Alfred-Faure Base, Crozet Islands, -462551+0515152, since 1964
-# Port-aux-Francais, Kerguelen Islands, -492110+0701303, since 1951;
+# Alfred Faure, Possession Island, Crozet Islands, -462551+0515152, since 1964;
+# sealing & whaling stations operated variously 1802/1911+;
+# see Indian/Reunion.
+#
+# Martin-de-Viviès, Amsterdam Island, -374105+0773155, since 1950
+# Port-aux-Français, Kerguelen Islands, -492110+0701303, since 1951;
# whaling & sealing station operated 1908/1914, 1920/1929, and 1951/1956
#
# St Paul Island - near Amsterdam, uninhabited
# fishing stations operated variously 1819/1931
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Kerguelen 0 - zzz 1950 # Port-aux-Francais
+Zone Indian/Kerguelen 0 - zzz 1950 # Port-aux-Français
5:00 - TFT # ISO code TF Time
#
# year-round base in the main continent
-# Dumont-d'Urville, Ile des Petrels, -6640+14001, since 1956-11
+# Dumont d'Urville, Île des Pétrels, -6640+14001, since 1956-11
+# <http://en.wikipedia.org/wiki/Dumont_d'Urville_Station> (2005-12-05)
#
# Another base at Port-Martin, 50km east, began operation in 1947.
# It was destroyed by fire on 1952-01-14.
@@ -191,20 +187,22 @@ Zone Antarctica/DumontDUrville 0 - zzz 1947
10:00 - PMT 1952 Jan 14 # Port-Martin Time
0 - zzz 1956 Nov
10:00 - DDUT # Dumont-d'Urville Time
-# Reference:
-# <a href="http://en.wikipedia.org/wiki/Dumont_d'Urville_Station">
-# Dumont d'Urville Station (2005-12-05)
-# </a>
+
+# France & Italy - year-round base
+# Concordia, -750600+1232000, since 2005
# Germany - year-round base
-# Georg von Neumayer, -7039-00815
+# Neumayer III, -704080-0081602, since 2009
-# India - year-round base
-# Dakshin Gangotri, -7005+01200
+# India - year-round bases
+# Bharati, -692428+0761114, since 2012
+# Maitri, -704558+0114356, since 1989
+
+# Italy - year-round base (also see "France & Italy")
+# Zuchelli, Terra Nova Bay, -744140+1640647, since 1986
# Japan - year-round bases
-# Dome Fuji, -7719+03942
-# Syowa, -690022+0393524
+# Syowa (also known as Showa), -690022+0393524, since 1957
#
# From Hideyuki Suzuki (1999-02-06):
# In all Japanese stations, +0300 is used as the standard time.
@@ -216,11 +214,11 @@ Zone Antarctica/DumontDUrville 0 - zzz 1947
Zone Antarctica/Syowa 0 - zzz 1957 Jan 29
3:00 - SYOT # Syowa Time
# See:
-# <a href="http://www.nipr.ac.jp/english/ara01.html">
# NIPR Antarctic Research Activities (1999-08-17)
-# </a>
+# http://www.nipr.ac.jp/english/ara01.html
# S Korea - year-round base
+# Jang Bogo, Terra Nova Bay, -743700+1641205 since 2014
# King Sejong, King George Island, -6213-05847, since 1988
# New Zealand - claims
@@ -264,11 +262,14 @@ Rule Troll 2005 max - Mar lastSun 1:00u 2:00 CEST
Rule Troll 2004 max - Oct lastSun 1:00u 0:00 UTC
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Troll 0 - zzz 2005 Feb 12
- 0:00 Troll %s
+ 0:00 Troll %s
# Poland - year-round base
# Arctowski, King George Island, -620945-0582745, since 1977
+# Romania - year-bound base
+# Law-Racoviță, Larsemann Hills, -692319+0762251, since 1986
+
# Russia - year-round bases
# Bellingshausen, King George Island, -621159-0585337, since 1968-02-22
# Mirny, Davis coast, -6633+09301, since 1956-02
@@ -278,8 +279,8 @@ Zone Antarctica/Troll 0 - zzz 2005 Feb 12
# year-round from 1960/61 to 1992
# Vostok, since 1957-12-16, temporarily closed 1994-02/1994-11
-# <a href="http://quest.arc.nasa.gov/antarctica/QA/computers/Directions,Time,ZIP">
-# From Craig Mundell (1994-12-15)</a>:
+# From Craig Mundell (1994-12-15):
+# http://quest.arc.nasa.gov/antarctica/QA/computers/Directions,Time,ZIP
# Vostok, which is one of the Russian stations, is set on the same
# time as Moscow, Russia.
#
@@ -294,7 +295,7 @@ Zone Antarctica/Troll 0 - zzz 2005 Feb 12
#
# From Paul Eggert (2001-05-04):
# This seems to be hopelessly confusing, so I asked Lee Hotz about it
-# in person. He said that some Antartic locations set their local
+# in person. He said that some Antarctic locations set their local
# time so that noon is the warmest part of the day, and that this
# changes during the year and does not necessarily correspond to mean
# solar noon. So the Vostok time might have been whatever the clocks
@@ -306,9 +307,12 @@ Zone Antarctica/Vostok 0 - zzz 1957 Dec 16
# S Africa - year-round bases
# Marion Island, -4653+03752
-# Sanae, -7141-00250
+# SANAE IV, Vesleskarvet, Queen Maud Land, -714022-0025026, since 1997
+
+# Ukraine - year-round base
+# Vernadsky (formerly Faraday), Galindez Island, -651445-0641526, since 1954
-# UK
+# United Kingdom
#
# British Antarctic Territories (BAT) claims
# South Orkney Islands
@@ -364,7 +368,7 @@ Zone Antarctica/Palmer 0 - zzz 1965
# but that he found it more convenient to keep GMT+12
# as supplies for the station were coming from McMurdo Sound,
# which was on GMT+12 because New Zealand was on GMT+12 all year
-# at that time (1957). (Source: Siple's book 90 degrees SOUTH.)
+# at that time (1957). (Source: Siple's book 90 Degrees South.)
#
# From Susan Smith
# http://www.cybertours.com/whs/pole10.html
diff --git a/elsie.nci.nih.gov/src/asctime.c b/elsie.nci.nih.gov/src/asctime.c
index 152b0db..0ce1209 100644
--- a/elsie.nci.nih.gov/src/asctime.c
+++ b/elsie.nci.nih.gov/src/asctime.c
@@ -55,7 +55,7 @@
** ??? ???-2147483648 -2147483648:-2147483648:-2147483648 -2147483648\n
** (two three-character abbreviations, five strings denoting integers,
** seven explicit spaces, two explicit colons, a newline,
-** and a trailing ASCII nul).
+** and a trailing NUL byte).
** The values above are for systems where an int is 32 bits and are provided
** as an example; the define below calculates the maximum for the system at
** hand.
@@ -99,11 +99,11 @@ asctime_r(register const struct tm *timeptr, char *buf)
** Assume that strftime is unaffected by other out-of-range members
** (e.g., timeptr->tm_mday) when processing "%Y".
*/
- (void) strftime(year, sizeof year, "%Y", timeptr);
+ strftime(year, sizeof year, "%Y", timeptr);
/*
** We avoid using snprintf since it's not available on all systems.
*/
- (void) sprintf(result,
+ sprintf(result,
((strlen(year) <= 4) ? ASCTIME_FMT : ASCTIME_FMT_B),
wn, mn,
timeptr->tm_mday, timeptr->tm_hour,
diff --git a/elsie.nci.nih.gov/src/asia b/elsie.nci.nih.gov/src/asia
index 24566ca..806a8c7 100644
--- a/elsie.nci.nih.gov/src/asia
+++ b/elsie.nci.nih.gov/src/asia
@@ -1,10 +1,10 @@
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future). For more, please see
+# the file CONTRIBUTING in the tz distribution.
# From Paul Eggert (2013-08-11):
#
@@ -26,13 +26,17 @@
# I found in the UCLA library.
#
# For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
-# <http://www.jstor.org/stable/1774359>.
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
+# http://www.jstor.org/stable/1774359
+#
+# For Russian data circa 1919, a source is:
+# Byalokoz EL. New Counting of Time in Russia since July 1, 1919.
+# (See the 'europe' file for a fuller citation.)
#
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
-# I invented the abbreviations marked `*' in the following table;
+# I invented the abbreviations marked '*' in the following table;
# the rest are from earlier versions of this file, or from other sources.
# Corrections are welcome!
# std dst
@@ -47,13 +51,14 @@
# 7:00 WIB west Indonesia (Waktu Indonesia Barat)
# 8:00 WITA central Indonesia (Waktu Indonesia Tengah)
# 8:00 CST China
-# 9:00 CJT Central Japanese Time (1896/1937)*
+# 8:00 JWST Western Standard Time (Japan, 1896/1937)*
+# 9:00 JCST Central Standard Time (Japan, 1896/1937)
# 9:00 WIT east Indonesia (Waktu Indonesia Timur)
# 9:00 JST JDT Japan
# 9:00 KST KDT Korea
-# 9:30 CST (Australian) Central Standard Time
+# 9:30 ACST Australian Central Standard Time
#
-# See the `europe' file for Russia and Turkey in Asia.
+# See the 'europe' file for Russia and Turkey in Asia.
# From Guy Harris:
# Incorporates data for Singapore from Robert Elz' asia 1.1, as well as
@@ -63,7 +68,7 @@
###############################################################################
-# These rules are stolen from the `europe' file.
+# These rules are stolen from the 'europe' file.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S
Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 -
@@ -115,11 +120,11 @@ Zone Asia/Kabul 4:36:48 - LMT 1890
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
3:00 - YERT 1957 Mar # Yerevan Time
- 4:00 RussiaAsia YER%sT 1991 Mar 31 2:00s
+ 4:00 RussiaAsia YER%sT 1991 Mar 31 2:00s
3:00 1:00 YERST 1991 Sep 23 # independence
- 3:00 RussiaAsia AM%sT 1995 Sep 24 2:00s
+ 3:00 RussiaAsia AM%sT 1995 Sep 24 2:00s
4:00 - AMT 1997
- 4:00 RussiaAsia AM%sT 2012 Mar 25 2:00s
+ 4:00 RussiaAsia AM%sT 2012 Mar 25 2:00s
4:00 - AMT
# Azerbaijan
@@ -132,16 +137,16 @@ Rule Azer 1997 max - Oct lastSun 5:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Baku 3:19:24 - LMT 1924 May 2
3:00 - BAKT 1957 Mar # Baku Time
- 4:00 RussiaAsia BAK%sT 1991 Mar 31 2:00s
+ 4:00 RussiaAsia BAK%sT 1991 Mar 31 2:00s
3:00 1:00 BAKST 1991 Aug 30 # independence
3:00 RussiaAsia AZ%sT 1992 Sep lastSat 23:00
- 4:00 - AZT 1996 # Azerbaijan time
+ 4:00 - AZT 1996 # Azerbaijan Time
4:00 EUAsia AZ%sT 1997
4:00 Azer AZ%sT
# Bahrain
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Bahrain 3:22:20 - LMT 1920 # Al Manamah
+Zone Asia/Bahrain 3:22:20 - LMT 1920 # Manamah
4:00 - GST 1972 Jun
3:00 - AST
@@ -151,13 +156,8 @@ Zone Asia/Bahrain 3:22:20 - LMT 1920 # Al Manamah
# Daylight Saving Time from June 16 to Sept 30
#
# Bangladesh to introduce daylight saving time likely from June 16
-# <a href="http://www.asiantribune.com/?q=node/17288">
# http://www.asiantribune.com/?q=node/17288
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_bangladesh02.html">
# http://www.worldtimezone.com/dst_news/dst_news_bangladesh02.html
-# </a>
#
# "... Bangladesh government has decided to switch daylight saving time from
# June
@@ -172,17 +172,11 @@ Zone Asia/Bahrain 3:22:20 - LMT 1920 # Al Manamah
# the 19th and 20th, and they have not set the end date yet.
#
# Some sources:
-# <a href="http://in.reuters.com/article/southAsiaNews/idINIndia-40017620090601">
# http://in.reuters.com/article/southAsiaNews/idINIndia-40017620090601
-# </a>
-# <a href="http://bdnews24.com/details.php?id=85889&cid=2">
# http://bdnews24.com/details.php?id=85889&cid=2
-# </a>
#
# Our wrap-up:
-# <a href="http://www.timeanddate.com/news/time/bangladesh-daylight-saving-2009.html">
# http://www.timeanddate.com/news/time/bangladesh-daylight-saving-2009.html
-# </a>
# From A. N. M. Kamrus Saadat (2009-06-15):
# Finally we've got the official mail regarding DST start time where DST start
@@ -197,13 +191,8 @@ Zone Asia/Bahrain 3:22:20 - LMT 1920 # Al Manamah
#
# Following report by same newspaper-"The Daily Star Friday":
# "DST change awaits cabinet decision-Clock won't go back by 1-hr from Oct 1"
-# <a href="http://www.thedailystar.net/newDesign/news-details.php?nid=107021">
# http://www.thedailystar.net/newDesign/news-details.php?nid=107021
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_bangladesh04.html">
# http://www.worldtimezone.com/dst_news/dst_news_bangladesh04.html
-# </a>
# From Steffen Thorsen (2009-10-13):
# IANS (Indo-Asian News Service) now reports:
@@ -212,22 +201,15 @@ Zone Asia/Bahrain 3:22:20 - LMT 1920 # Al Manamah
# "continue for an indefinite period."
#
# One of many places where it is published:
-# <a href="http://www.thaindian.com/newsportal/business/bangladesh-to-continue-indefinitely-with-advanced-time_100259987.html">
# http://www.thaindian.com/newsportal/business/bangladesh-to-continue-indefinitely-with-advanced-time_100259987.html
-# </a>
# From Alexander Krivenyshev (2009-12-24):
# According to Bangladesh newspaper "The Daily Star,"
# Bangladesh will change its clock back to Standard Time on Dec 31, 2009.
#
# Clock goes back 1-hr on Dec 31 night.
-# <a href="http://www.thedailystar.net/newDesign/news-details.php?nid=119228">
# http://www.thedailystar.net/newDesign/news-details.php?nid=119228
-# </a>
-# and
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_bangladesh05.html">
# http://www.worldtimezone.com/dst_news/dst_news_bangladesh05.html
-# </a>
#
# "...The government yesterday decided to put the clock back by one hour
# on December 31 midnight and the new time will continue until March 31,
@@ -237,17 +219,12 @@ Zone Asia/Bahrain 3:22:20 - LMT 1920 # Al Manamah
# From Alexander Krivenyshev (2010-03-22):
# According to Bangladesh newspaper "The Daily Star,"
# Cabinet cancels Daylight Saving Time
-# <a href="http://www.thedailystar.net/newDesign/latest_news.php?nid=22817">
# http://www.thedailystar.net/newDesign/latest_news.php?nid=22817
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html">
# http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html
-# </a>
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Dhaka 2009 only - Jun 19 23:00 1:00 S
-Rule Dhaka 2009 only - Dec 31 23:59 0 -
+Rule Dhaka 2009 only - Dec 31 24:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Dhaka 6:01:40 - LMT 1890
@@ -278,7 +255,7 @@ Zone Indian/Chagos 4:49:40 - LMT 1907
# Brunei
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan
+Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan
7:30 - BNT 1933
8:00 - BNT
@@ -287,16 +264,16 @@ Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan
# Milne says 6:24:40 was the meridian of the time ball observatory at Rangoon.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Rangoon 6:24:40 - LMT 1880 # or Yangon
- 6:24:40 - RMT 1920 # Rangoon Mean Time?
- 6:30 - BURT 1942 May # Burma Time
- 9:00 - JST 1945 May 3
- 6:30 - MMT # Myanmar Time
+Zone Asia/Rangoon 6:24:40 - LMT 1880 # or Yangon
+ 6:24:40 - RMT 1920 # Rangoon Mean Time?
+ 6:30 - BURT 1942 May # Burma Time
+ 9:00 - JST 1945 May 3
+ 6:30 - MMT # Myanmar Time
# Cambodia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Phnom_Penh 6:59:40 - LMT 1906 Jun 9
- 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
+ 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
7:00 - ICT 1912 May
8:00 - ICT 1931 May
7:00 - ICT
@@ -309,12 +286,12 @@ Zone Asia/Phnom_Penh 6:59:40 - LMT 1906 Jun 9
# From Bob Devine (1988-01-28):
# No they don't. See TIME mag, 1986-02-17 p.52. Even though
# China is across 4 physical time zones, before Feb 1, 1986 only the
-# Peking (Bejing) time zone was recognized. Since that date, China
-# has two of 'em -- Peking's and Urumqi (named after the capital of
+# Peking (Beijing) time zone was recognized. Since that date, China
+# has two of 'em - Peking's and Ürümqi (named after the capital of
# the Xinjiang Uyghur Autonomous Region). I don't know about DST for it.
#
# . . .I just deleted the DST table and this editor makes it too
-# painful to suck in another copy.. So, here is what I have for
+# painful to suck in another copy. So, here is what I have for
# DST start/end dates for Peking's time zone (info from AP):
#
# 1986 May 4 - Sept 14
@@ -324,15 +301,16 @@ Zone Asia/Phnom_Penh 6:59:40 - LMT 1906 Jun 9
# CHINA 8 H AHEAD OF UTC ALL OF CHINA, INCL TAIWAN
# CHINA 9 H AHEAD OF UTC APR 17 - SEP 10
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that China (except for Hong Kong and Macau)
-# has had a single time zone since 1980 May 1, observing summer DST
-# from 1986 through 1991; this contradicts Devine's
-# note about Time magazine, though apparently _something_ happened in 1986.
-# Go with Shanks & Pottenger for now. I made up names for the other
-# pre-1980 time zones.
+# From Paul Eggert (2008-02-11):
+# Jim Mann, "A clumsy embrace for another western custom: China on daylight
+# time - sort of", Los Angeles Times, 1986-05-05 ... [says] that China began
+# observing daylight saving time in 1986.
-# From Shanks & Pottenger:
+# From Paul Eggert (2014-06-30):
+# Shanks & Pottenger have China switching to a single time zone in 1980, but
+# this doesn't seem to be correct. They also write that China observed summer
+# DST from 1986 through 1991, which seems to match the above commentary, so
+# go with them for DST rules as follows:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Shang 1940 only - Jun 3 0:00 1:00 D
Rule Shang 1940 1941 - Oct 1 0:00 0 S
@@ -346,7 +324,7 @@ Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
# historic timezones from some Taiwan websites. And yes, there are official
# Chinese names for these locales (before 1949).
#
-# From Jesper Norgaard Welen (2006-07-14):
+# From Jesper Nørgaard Welen (2006-07-14):
# I have investigated the timezones around 1970 on the
# http://www.astro.com/atlas site [with provinces and county
# boundaries summarized below].... A few other exceptions were two
@@ -357,65 +335,97 @@ Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
# (could be true), for the moment I am assuming that those two
# counties are mistakes in the astro.com data.
-# From Paul Eggert (2008-02-11):
-# I just now checked Google News for western news sources that talk
-# about China's single time zone, and couldn't find anything before 1986
-# talking about China being in one time zone. (That article was: Jim
-# Mann, "A clumsy embrace for another western custom: China on daylight
-# time--sort of", Los Angeles Times, 1986-05-05. By the way, this
-# article confirms the tz database's data claiming that China began
-# observing daylight saving time in 1986.
-#
-# From Thomas S. Mullaney (2008-02-11):
-# I think you're combining two subjects that need to treated
-# separately: daylight savings (which, you're correct, wasn't
-# implemented until the 1980s) and the unified time zone centered near
-# Beijing (which was implemented in 1949). Briefly, there was also a
-# "Lhasa Time" in Tibet and "Urumqi Time" in Xinjiang. The first was
-# ceased, and the second eventually recognized (again, in the 1980s).
-#
-# From Paul Eggert (2008-06-30):
-# There seems to be a good chance China switched to a single time zone in 1949
-# rather than in 1980 as Shanks & Pottenger have it, but we don't have a
-# reliable documentary source saying so yet, so for now we still go with
-# Shanks & Pottenger.
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-# Changbai Time ("Long-white Time", Long-white = Heilongjiang area)
+# From Paul Eggert (2014-06-30):
+# Alois Treindl kindly sent me translations of the following two sources:
+#
+# (1)
+# Guo Qingsheng (National Time-Service Center, CAS, Xi'an 710600, China)
+# Beijing Time at the Beginning of the PRC
+# China Historical Materials of Science and Technology
+# (Zhongguo ke ji shi liao, 中国科技史料), Vol. 24, No. 1 (2003)
+# It gives evidence that at the beginning of the PRC, Beijing time was
+# officially apparent solar time! However, Guo also says that the
+# evidence is dubious, as the relevant institute of astronomy had not
+# been taken over by the PRC yet. It's plausible that apparent solar
+# time was announced but never implemented, and that people continued
+# to use UT+8. As the Shanghai radio station (and I presume the
+# observatory) was still under control of French missionaries, it
+# could well have ignored any such mandate.
+#
+# (2)
+# Guo Qing-sheng (Shaanxi Astronomical Observatory, CAS, Xi'an 710600, China)
+# A Study on the Standard Time Changes for the Past 100 Years in China
+# [undated and unknown publication location]
+# It says several things:
+# * The Qing dynasty used local apparent solar time throughout China.
+# * The Republic of China instituted Beijing mean solar time effective
+# the official calendar book of 1914.
+# * The French Concession in Shanghai set up signal stations in
+# French docks in the 1890s, controlled by Xujiahui (Zikawei)
+# Observatory and set to local mean time.
+# * "From the end of the 19th century" it changed to UT+8.
+# * Chinese Customs (by then reduced to a tool of foreign powers)
+# eventually standardized on this time for all ports, and it
+# became used by railways as well.
+# * In 1918 the Central Observatory proposed dividing China into
+# five time zones (see below for details). This caught on
+# at first only in coastal areas observing UT+8.
+# * During WWII all of China was in theory was at UT+7. In practice
+# this was ignored in the west, and I presume was ignored in
+# Japanese-occupied territory.
+# * Japanese-occupied Manchuria was at UT+9, i.e., Japan time.
+# * The five-zone plan was resurrected after WWII and officially put into
+# place (with some modifications) in March 1948. It's not clear
+# how well it was observed in areas under Nationalist control.
+# * The People's Liberation Army used UT+8 during the civil war.
+#
+# An AP article "Shanghai Internat'l Area Little Changed" in the
+# Lewiston (ME) Daily Sun (1939-05-29), p 17, said "Even the time is
+# different - the occupied districts going by Tokyo time, an hour
+# ahead of that prevailing in the rest of Shanghai." Guess that the
+# Xujiahui Observatory was under French control and stuck with UT+8.
+#
+# In earlier versions of this file, China had many separate Zone entries, but
+# this was based on what were apparently incorrect data in Shanks & Pottenger.
+# This has now been simplified to the two entries Asia/Shanghai and
+# Asia/Urumqi, with the others being links for backward compatibility.
+# Proposed in 1918 and theoretically in effect until 1949 (although in practice
+# mainly observed in coastal areas), the five zones were:
+#
+# Changbai Time ("Long-white Time", Long-white = Heilongjiang area) UT+8.5
+# Asia/Harbin (currently a link to Asia/Shanghai)
# Heilongjiang (except Mohe county), Jilin
-Zone Asia/Harbin 8:26:44 - LMT 1928 # or Haerbin
- 8:30 - CHAT 1932 Mar # Changbai Time
- 8:00 - CST 1940
- 9:00 - CHAT 1966 May
- 8:30 - CHAT 1980 May
- 8:00 PRC C%sT
-# Zhongyuan Time ("Central plain Time")
+#
+# Zhongyuan Time ("Central plain Time") UT+8
+# Asia/Shanghai
# most of China
-# Milne gives 8:05:56.7; round to nearest.
-Zone Asia/Shanghai 8:05:57 - LMT 1928
- 8:00 Shang C%sT 1949
- 8:00 PRC C%sT
-# Long-shu Time (probably due to Long and Shu being two names of that area)
+# This currently represents most other zones as well,
+# as apparently these regions have been the same since 1970.
+# Milne gives 8:05:43.2 for Xujiahui Observatory time; round to nearest.
+# Guo says Shanghai switched to UT+8 "from the end of the 19th century".
+#
+# Long-shu Time (probably due to Long and Shu being two names of that area) UT+7
+# Asia/Chongqing (currently a link to Asia/Shanghai)
# Guangxi, Guizhou, Hainan, Ningxia, Sichuan, Shaanxi, and Yunnan;
# most of Gansu; west Inner Mongolia; west Qinghai; and the Guangdong
# counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing,
# Yangchun, Yangjiang, Yu'nan, and Yunfu.
-Zone Asia/Chongqing 7:06:20 - LMT 1928 # or Chungking
- 7:00 - LONT 1980 May # Long-shu Time
- 8:00 PRC C%sT
-# Xin-zang Time ("Xinjiang-Tibet Time")
+#
+# Xin-zang Time ("Xinjiang-Tibet Time") UT+6
+# Asia/Urumqi
+# This currently represents Kunlun Time as well,
+# as apparently the two regions have been the same since 1970.
# The Gansu counties Aksay, Anxi, Dunhuang, Subei; west Qinghai;
# the Guangdong counties Xuwen, Haikang, Suixi, Lianjiang,
# Zhanjiang, Wuchuan, Huazhou, Gaozhou, Maoming, Dianbai, and Xinyi;
# east Tibet, including Lhasa, Chamdo, Shigaise, Jimsar, Shawan and Hutubi;
-# east Xinjiang, including Urumqi, Turpan, Karamay, Korla, Minfeng, Jinghe,
+# east Xinjiang, including Ürümqi, Turpan, Karamay, Korla, Minfeng, Jinghe,
# Wusu, Qiemo, Xinyan, Wulanwusu, Jinghe, Yumin, Tacheng, Tuoli, Emin,
# Shihezi, Changji, Yanqi, Heshuo, Tuokexun, Tulufan, Shanshan, Hami,
# Fukang, Kuitun, Kumukuli, Miquan, Qitai, and Turfan.
-Zone Asia/Urumqi 5:50:20 - LMT 1928 # or Urumchi
- 6:00 - URUT 1980 May # Urumqi Time
- 8:00 PRC C%sT
-# Kunlun Time
+#
+# Kunlun Time UT+5.5
+# Asia/Kashgar (currently a link to Asia/Urumqi)
# West Tibet, including Pulan, Aheqi, Shufu, Shule;
# West Xinjiang, including Aksu, Atushi, Yining, Hetian, Cele, Luopu, Nileke,
# Zhaosu, Tekesi, Gongliu, Chabuchaer, Huocheng, Bole, Pishan, Suiding,
@@ -432,9 +442,9 @@ Zone Asia/Urumqi 5:50:20 - LMT 1928 # or Urumchi
# population of Xinjiang, typically use "Xinjiang time" which is two
# hours behind Beijing time, or UTC +0600. The government of the Xinjiang
# Uyghur Autonomous Region, (XAUR, or just Xinjiang for short) as well as
-# local governments such as the Urumqi city government use both times in
+# local governments such as the Ürümqi city government use both times in
# publications, referring to what is popularly called Xinjiang time as
-# "Urumqi time." When Uyghurs make an appointment in the Uyghur language
+# "Ürümqi time." When Uyghurs make an appointment in the Uyghur language
# they almost invariably use Xinjiang time.
#
# (Their ethnic Han compatriots would typically have no clue of its
@@ -446,21 +456,6 @@ Zone Asia/Urumqi 5:50:20 - LMT 1928 # or Urumchi
# the province not having dual times but four times in use at the same
# time. Some areas remained on standard Xinjiang time or Beijing time and
# others moving their clocks ahead.)
-#
-# ...an example of an official website using of Urumqi time.
-#
-# The first few lines of the Google translation of
-# <a href="http://www.fjysgl.gov.cn/show.aspx?id=2379&cid=39">
-# http://www.fjysgl.gov.cn/show.aspx?id=2379&cid=39
-# </a>
-# (retrieved 2009-10-13)
-# > Urumqi fire seven people are missing the alleged losses of at least
-# > 500 million yuan
-# >
-# > (Reporter Dong Liu) the day before 20:20 or so (Urumqi Time 18:20),
-# > Urumqi City Department of International Plaza Luther Qiantang River
-# > burst fire. As of yesterday, 18:30, Urumqi City Fire officers and men
-# > have worked continuously for 22 hours...
# From Luther Ma (2009-11-19):
# With the risk of being redundant to previous answers these are the most common
@@ -471,7 +466,7 @@ Zone Asia/Urumqi 5:50:20 - LMT 1928 # or Urumchi
# 3. Urumqi...
# 4. Kashgar...
# ...
-# 5. It seems that Uyghurs in Urumqi has been using Xinjiang since at least the
+# 5. It seems that Uyghurs in Ürümqi has been using Xinjiang since at least the
# 1960's. I know of one Han, now over 50, who grew up in the surrounding
# countryside and used Xinjiang time as a child.
#
@@ -483,10 +478,55 @@ Zone Asia/Urumqi 5:50:20 - LMT 1928 # or Urumchi
# Autonomous Region under the PRC. (Before that Uyghurs, of course, would also
# not be using Beijing time, but some local time.)
-Zone Asia/Kashgar 5:03:56 - LMT 1928 # or Kashi or Kaxgar
- 5:30 - KAST 1940 # Kashgar Time
- 5:00 - KAST 1980 May
+# From David Cochrane (2014-03-26):
+# Just a confirmation that Ürümqi time was implemented in Ürümqi on 1 Feb 1986:
+# http://content.time.com/time/magazine/article/0,9171,960684,00.html
+
+# From Luther Ma (2014-04-22):
+# I have interviewed numerous people of various nationalities and from
+# different localities in Xinjiang and can confirm the information in Guo's
+# report regarding Xinjiang, as well as the Time article reference by David
+# Cochrane. Whether officially recognized or not (and both are officially
+# recognized), two separate times have been in use in Xinjiang since at least
+# the Cultural Revolution: Xinjiang Time (XJT), aka Ürümqi Time or local time;
+# and Beijing Time. There is no confusion in Xinjiang as to which name refers
+# to which time. Both are widely used in the province, although in some
+# population groups might be use one to the exclusion of the other. The only
+# problem is that computers and smart phones list Ürümqi (or Kashgar) as
+# having the same time as Beijing.
+
+# From Paul Eggert (2014-06-30):
+# In the early days of the PRC, Tibet was given its own time zone (UT+6) but
+# this was withdrawn in 1959 and never reinstated; see Tubten Khétsun,
+# Memories of life in Lhasa under Chinese Rule, Columbia U Press, ISBN
+# 978-0231142861 (2008), translator's introduction by Matthew Akester, p x.
+# As this is before our 1970 cutoff, Tibet doesn't need a separate zone.
+#
+# Xinjiang Time is well-documented as being officially recognized. E.g., see
+# "The Working-Calendar for The Xinjiang Uygur Autonomous Region Government"
+# <http://www.sinkiang.gov.cn/service/ourworking/> (2014-04-22).
+# Unfortunately, we have no good records of time in Xinjiang before 1986.
+# During the 20th century parts of Xinjiang were ruled by the Qing dynasty,
+# the Republic of China, various warlords, the First and Second East Turkestan
+# Republics, the Soviet Union, the Kuomintang, and the People's Republic of
+# China, and tracking down all these organizations' timekeeping rules would be
+# quite a trick. Approximate this lost history by a transition from LMT to
+# XJT at the start of 1928, the year of accession of the warlord Jin Shuren,
+# which happens to be the date given by Shanks & Pottenger (no doubt as a
+# guess) as the transition from LMT. Ignore the usage of UT+8 before
+# 1986-02-01 under the theory that the transition date to UT+8 is unknown and
+# that the sort of users who prefer Asia/Urumqi now typically ignored the
+# UT+8 mandate back then.
+
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+# Beijing time, used throughout China; represented by Shanghai.
+Zone Asia/Shanghai 8:05:43 - LMT 1901
+ 8:00 Shang C%sT 1949
8:00 PRC C%sT
+# 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 - XJT
# Hong Kong (Xianggang)
@@ -501,15 +541,11 @@ Zone Asia/Kashgar 5:03:56 - LMT 1928 # or Kashi or Kaxgar
# and incorrect rules. Although the exact switch over time is missing, I
# think 3:30 is correct. The official DST record for Hong Kong can be
# obtained from
-# <a href="http://www.hko.gov.hk/gts/time/Summertime.htm">
# http://www.hko.gov.hk/gts/time/Summertime.htm
-# </a>.
# From Arthur David Olson (2009-10-28):
# Here are the dates given at
-# <a href="http://www.hko.gov.hk/gts/time/Summertime.htm">
# http://www.hko.gov.hk/gts/time/Summertime.htm
-# </a>
# as of 2009-10-28:
# Year Period
# 1941 1 Apr to 30 Sep
@@ -589,35 +625,113 @@ Zone Asia/Hong_Kong 7:36:42 - LMT 1904 Oct 30
# Taiwan
-# Shanks & Pottenger write that Taiwan observed DST during 1945, when it
-# was still controlled by Japan. This is hard to believe, but we don't
-# have any other information.
-
# From smallufo (2010-04-03):
-# According to Taiwan's CWB,
-# <a href="http://www.cwb.gov.tw/V6/astronomy/cdata/summert.htm">
+# According to Taiwan's CWB [Central Weather Bureau],
# http://www.cwb.gov.tw/V6/astronomy/cdata/summert.htm
-# </a>
# Taipei has DST in 1979 between July 1st and Sep 30.
-# From Arthur David Olson (2010-04-07):
-# Here's Google's translation of the table at the bottom of the "summert.htm" page:
-# Decade Name Start and end date
-# Republic of China 34 years to 40 years (AD 1945-1951 years) Summer Time May 1 to September 30
-# 41 years of the Republic of China (AD 1952) Daylight Saving Time March 1 to October 31
-# Republic of China 42 years to 43 years (AD 1953-1954 years) Daylight Saving Time April 1 to October 31
-# In the 44 years to 45 years (AD 1955-1956 years) Daylight Saving Time April 1 to September 30
-# Republic of China 46 years to 48 years (AD 1957-1959) Summer Time April 1 to September 30
-# Republic of China 49 years to 50 years (AD 1960-1961) Summer Time June 1 to September 30
-# Republic of China 51 years to 62 years (AD 1962-1973 years) Stop Summer Time
-# Republic of China 63 years to 64 years (1974-1975 AD) Daylight Saving Time April 1 to September 30
-# Republic of China 65 years to 67 years (1976-1978 AD) Stop Daylight Saving Time
-# Republic of China 68 years (AD 1979) Daylight Saving Time July 1 to September 30
-# Republic of China since 69 years (AD 1980) Stop Daylight Saving Time
+# From Yu-Cheng Chuang (2013-07-12):
+# On Dec 28, 1895, the Meiji Emperor announced Ordinance No. 167 of
+# Meiji Year 28 "The clause about standard time", mentioned that
+# Taiwan and Penghu Islands, as well as Yaeyama and Miyako Islands
+# (both in Okinawa) adopt the Western Standard Time which is based on
+# 120E. The adoption began from Jan 1, 1896. The original text can be
+# found on Wikisource:
+# http://ja.wikisource.org/wiki/標準時ニ關スル件_(公布時)
+# ... This could be the first adoption of time zone in Taiwan, because
+# during the Qing Dynasty, it seems that there was no time zone
+# declared officially.
+#
+# Later, in the beginning of World War II, on Sep 25, 1937, the Showa
+# Emperor announced Ordinance No. 529 of Showa Year 12 "The clause of
+# revision in the ordinance No. 167 of Meiji year 28 about standard
+# time", in which abolished the adoption of Western Standard Time in
+# western islands (listed above), which means the whole Japan
+# territory, including later occupations, adopt Japan Central Time
+# (UTC+9). The adoption began on Oct 1, 1937. The original text can
+# be found on Wikisource:
+# http://ja.wikisource.org/wiki/明治二十八年勅令第百六十七號標準時ニ關スル件中改正ノ件
+#
+# That is, the time zone of Taipei switched to UTC+9 on Oct 1, 1937.
+
+# From Yu-Cheng Chuang (2014-07-02):
+# I've found more evidence about when the time zone was switched from UTC+9
+# back to UTC+8 after WW2. I believe it was on Sep 21, 1945. In a document
+# during Japanese era [1] in which the officer told the staff to change time
+# zone back to Western Standard Time (UTC+8) on Sep 21. And in another
+# history page of National Cheng Kung University [2], on Sep 21 there is a
+# note "from today, switch back to Western Standard Time". From these two
+# materials, I believe that the time zone change happened on Sep 21. And
+# today I have found another monthly journal called "The Astronomical Herald"
+# from The Astronomical Society of Japan [3] in which it mentioned the fact
+# that:
+#
+# 1. Standard Time of the Country (Japan) was adopted on Jan 1, 1888, using
+# the time at 135E (GMT+9)
+#
+# 2. Standard Time of the Country was renamed to Central Standard Time, on Jan
+# 1, 1898, and on the same day, the new territories Taiwan and Penghu islands,
+# as well as Yaeyama and Miyako islands, adopted a new time zone called
+# Western Standard Time, which is in GMT+8.
+#
+# 3. Western Standard Time was deprecated on Sep 30, 1937. From then all the
+# territories of Japan adopted the same time zone, which is Central Standard
+# Time.
+#
+# [1] Academica Historica, Taiwan:
+# http://163.29.208.22:8080/govsaleShowImage/connect_img.php?s=00101738900090036&e=00101738900090037
+# [2] Nat'l Cheng Kung University 70th Anniversary Special Site:
+# http://www.ncku.edu.tw/~ncku70/menu/001/01_01.htm
+# [3] Yukio Niimi, The Standard Time in Japan (1997), p.475:
+# http://www.asj.or.jp/geppou/archive_open/1997/pdf/19971001c.pdf
+
+# Yu-Cheng Chuang (2014-07-03):
+# I finally have found the real official gazette about changing back to
+# Western Standard Time on Sep 21 in Taiwan. It's Taiwan Governor-General
+# Bulletin No. 386 in Showa 20 years (1945), published on Sep 19, 1945. [1] ...
+# [It] abolishes Bulletin No. 207 in Showa 12 years (1937), which is a local
+# bulletin in Taiwan for that Ordinance No. 529. It also mentioned that 1am on
+# Sep 21, 1945 will be 12am on Sep 21. I think this bulletin is much more
+# official than the one I mentioned in my first mail, because it's from the
+# top-level government in Taiwan. If you're going to quote any resource, this
+# would be a good one.
+# [1] Taiwan Governor-General Gazette, No. 1018, Sep 19, 1945:
+# http://db2.th.gov.tw/db2/view/viewImg.php?imgcode=0072031018a&num=19&bgn=019&end=019&otherImg=&type=gener
+
+# From Yu-Cheng Chuang (2014-07-02):
+# In 1946, DST in Taiwan was from May 15 and ended on Sep 30. The info from
+# Central Weather Bureau website was not correct.
+#
+# Original Bulletin:
+# http://subtpg.tpg.gov.tw/og/image2.asp?f=03502F0AKM1AF
+# http://subtpg.tpg.gov.tw/og/image2.asp?f=0350300AKM1B0 (cont.)
+#
+# In 1947, DST in Taiwan was expanded to Oct 31. There is a backup of that
+# telegram announcement from Taiwan Province Government:
+#
+# http://subtpg.tpg.gov.tw/og/image2.asp?f=0360310AKZ431
+#
+# Here is a brief translation:
+#
+# The Summer Time this year is adopted from midnight Apr 15 until Sep 20
+# midnight. To save (energy?) consumption, we're expanding Summer Time
+# adoption till Oct 31 midnight.
+#
+# The Central Weather Bureau website didn't mention that, however it can
+# be found from historical government announcement database.
+
+# From Paul Eggert (2014-07-03):
+# As per Yu-Cheng Chuang, say that Taiwan was at UT+9 from 1937-10-01
+# until 1945-09-21 at 01:00, overriding Shanks & Pottenger.
+# Likewise, use Yu-Cheng Chuang's data for DST in Taiwan.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Taiwan 1945 1951 - May 1 0:00 1:00 D
-Rule Taiwan 1945 1951 - Oct 1 0:00 0 S
+Rule Taiwan 1946 only - May 15 0:00 1:00 D
+Rule Taiwan 1946 only - Oct 1 0:00 0 S
+Rule Taiwan 1947 only - Apr 15 0:00 1:00 D
+Rule Taiwan 1947 only - Nov 1 0:00 0 S
+Rule Taiwan 1948 1951 - May 1 0:00 1:00 D
+Rule Taiwan 1948 1951 - Oct 1 0:00 0 S
Rule Taiwan 1952 only - Mar 1 0:00 1:00 D
Rule Taiwan 1952 1954 - Nov 1 0:00 0 S
Rule Taiwan 1953 1959 - Apr 1 0:00 1:00 D
@@ -625,11 +739,14 @@ Rule Taiwan 1955 1961 - Oct 1 0:00 0 S
Rule Taiwan 1960 1961 - Jun 1 0:00 1:00 D
Rule Taiwan 1974 1975 - Apr 1 0:00 1:00 D
Rule Taiwan 1974 1975 - Oct 1 0:00 0 S
-Rule Taiwan 1979 only - Jun 30 0:00 1:00 D
-Rule Taiwan 1979 only - Sep 30 0:00 0 S
+Rule Taiwan 1979 only - Jul 1 0:00 1:00 D
+Rule Taiwan 1979 only - Oct 1 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Taipei 8:06:00 - LMT 1896 # or Taibei or T'ai-pei
+# Taipei or Taibei or T'ai-pei
+Zone Asia/Taipei 8:06:00 - LMT 1896 Jan 1
+ 8:00 - JWST 1937 Oct 1
+ 9:00 - JST 1945 Sep 21 1:00
8:00 Taiwan C%sT
# Macau (Macao, Aomen)
@@ -649,7 +766,7 @@ Rule Macau 1975 1977 - Apr Sun>=15 3:30 1:00 S
Rule Macau 1978 1980 - Apr Sun>=15 0:00 1:00 S
Rule Macau 1978 1980 - Oct Sun>=15 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Macau 7:34:20 - LMT 1912
+Zone Asia/Macau 7:34:20 - LMT 1912 Jan 1
8:00 Macau MO%sT 1999 Dec 20 # return to China
8:00 PRC C%sT
@@ -698,7 +815,7 @@ Link Asia/Nicosia Europe/Nicosia
# republic has changed its time zone back to that of Moscow. As a result it
# is now just four hours ahead of Greenwich Mean Time, rather than five hours
# ahead. The switch was decreed by the pro-Western president of Georgia,
-# Mikhail Saakashvili, who said the change was partly prompted by the process
+# Mikheil Saakashvili, who said the change was partly prompted by the process
# of integration into Europe.
# From Teimuraz Abashidze (2005-11-07):
@@ -711,29 +828,31 @@ Link Asia/Nicosia Europe/Nicosia
# I don't know what can be done, especially knowing that some years ago our
# DST rules where changed THREE TIMES during one month.
+# Milne 1899 says Tbilisi (Tiflis) time was 2:59:05.7.
+# Byalokoz 1919 says Georgia was 2:59:11.
+# Go with Byalokoz.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Tbilisi 2:59:16 - LMT 1880
- 2:59:16 - TBMT 1924 May 2 # Tbilisi Mean Time
+Zone Asia/Tbilisi 2:59:11 - LMT 1880
+ 2:59:11 - TBMT 1924 May 2 # Tbilisi Mean Time
3:00 - TBIT 1957 Mar # Tbilisi Time
- 4:00 RussiaAsia TBI%sT 1991 Mar 31 2:00s
+ 4:00 RussiaAsia TBI%sT 1991 Mar 31 2:00s
3:00 1:00 TBIST 1991 Apr 9 # independence
- 3:00 RussiaAsia GE%sT 1992 # Georgia Time
+ 3:00 RussiaAsia GE%sT 1992 # Georgia Time
3:00 E-EurAsia GE%sT 1994 Sep lastSun
4:00 E-EurAsia GE%sT 1996 Oct lastSun
4:00 1:00 GEST 1997 Mar lastSun
4:00 E-EurAsia GE%sT 2004 Jun 27
- 3:00 RussiaAsia GE%sT 2005 Mar lastSun 2:00
+ 3:00 RussiaAsia GE%sT 2005 Mar lastSun 2:00
4:00 - GET
# East Timor
# See Indonesia for the 1945 transition.
-# From Joao Carrascalao, brother of the former governor of East Timor, in
-# <a href="http://etan.org/et99c/december/26-31/30ETMAY.htm">
+# From João Carrascalão, brother of the former governor of East Timor, in
# East Timor may be late for its millennium
-# </a> (1999-12-26/31):
+# <http://etan.org/et99c/december/26-31/30ETMAY.htm> (1999-12-26/31):
# Portugal tried to change the time forward in 1974 because the sun
# rises too early but the suggestion raised a lot of problems with the
# Timorese and I still don't think it would work today because it
@@ -743,25 +862,25 @@ Zone Asia/Tbilisi 2:59:16 - LMT 1880
# We don't have any record of the above attempt.
# Most likely our records are incomplete, but we have no better data.
-# <a href="http://www.hri.org/news/world/undh/last/00-08-16.undh.html">
# From Manoel de Almeida e Silva, Deputy Spokesman for the UN Secretary-General
-# (2000-08-16)</a>:
+# http://www.hri.org/news/world/undh/2000/00-08-16.undh.html
+# (2000-08-16):
# The Cabinet of the East Timor Transition Administration decided
# today to advance East Timor's time by one hour. The time change,
# which will be permanent, with no seasonal adjustment, will happen at
# midnight on Saturday, September 16.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Dili 8:22:20 - LMT 1912
+Zone Asia/Dili 8:22:20 - LMT 1912 Jan 1
8:00 - TLT 1942 Feb 21 23:00 # E Timor Time
9:00 - JST 1945 Sep 23
9:00 - TLT 1976 May 3
- 8:00 - WITA 2000 Sep 17 00:00
+ 8:00 - WITA 2000 Sep 17 0:00
9:00 - TLT
# India
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata
+Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata
5:53:20 - HMT 1941 Oct # Howrah Mean Time?
6:30 - BURT 1942 May 15 # Burma Time
5:30 - IST 1942 Sep
@@ -775,7 +894,7 @@ Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata
# Indonesia
#
# From Gwillim Law (2001-05-28), overriding Shanks & Pottenger:
-# <http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime>
+# http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime
# says that Indonesia's time zones changed on 1988-01-01. Looking at some
# time zone maps, I think that must refer to Western Borneo (Kalimantan Barat
# and Kalimantan Tengah) switching from UTC+8 to UTC+7.
@@ -787,7 +906,7 @@ Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata
# other formal surrender ceremonies were September 9, 11, and 13, plus
# September 12 for the regional surrender to Mountbatten in Singapore.
# These would be the earliest possible times for a change.
-# Regimes horaires pour le monde entier, by Henri Le Corre, (Editions
+# Régimes horaires pour le monde entier, by Henri Le Corre, (Éditions
# Traditionnelles, 1987, Paris) says that Java and Madura switched
# from JST to UTC+07:30 on 1945-09-23, and gives 1944-09-01 for Jayapura
# (Hollandia). For now, assume all Indonesian locations other than Jayapura
@@ -812,7 +931,7 @@ 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 23:47:12 # Batavia
- 7:20 - JAVT 1932 Nov # Java Time
+ 7:20 - JAVT 1932 Nov # Java Time
7:30 - WIB 1942 Mar 23
9:00 - JST 1945 Sep 23
7:30 - WIB 1948 May
@@ -838,7 +957,7 @@ Zone Asia/Makassar 7:57:36 - LMT 1920
# Maluku Islands, West Papua, Papua
Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
9:00 - WIT 1944 Sep 1
- 9:30 - CST 1964
+ 9:30 - ACST 1964
9:00 - WIT
# Iran
@@ -904,7 +1023,7 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
# Several of my users have reported that Iran will not observe DST anymore:
# http://www.irna.ir/en/news/view/line-17/0603193812164948.htm
#
-# From Reuters (2007-09-16), with a heads-up from Jesper Norgaard Welen:
+# From Reuters (2007-09-16), with a heads-up from Jesper Nørgaard Welen:
# ... the Guardian Council ... approved a law on Sunday to re-introduce
# daylight saving time ...
# http://uk.reuters.com/article/oilRpt/idUKBLA65048420070916
@@ -970,7 +1089,7 @@ Rule Iran 2036 2037 - Mar 21 0:00 1:00 D
Rule Iran 2036 2037 - Sep 21 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tehran 3:25:44 - LMT 1916
- 3:25:44 - TMT 1946 # Tehran Mean Time
+ 3:25:44 - TMT 1946 # Tehran Mean Time
3:30 - IRST 1977 Nov
4:00 Iran IR%sT 1979
3:30 Iran IR%sT
@@ -995,17 +1114,11 @@ Zone Asia/Tehran 3:25:44 - LMT 1916
# From Steffen Thorsen (2008-03-10):
# The cabinet in Iraq abolished DST last week, according to the following
# news sources (in Arabic):
-# <a href="http://www.aljeeran.net/wesima_articles/news-20080305-98602.html">
# http://www.aljeeran.net/wesima_articles/news-20080305-98602.html
-# </a>
-# <a href="http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10">
# http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10
-# </a>
#
# We have published a short article in English about the change:
-# <a href="http://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html">
# http://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html
-# </a>
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Iraq 1982 only - May 1 0:00 1:00 D
@@ -1014,14 +1127,14 @@ Rule Iraq 1983 only - Mar 31 0:00 1:00 D
Rule Iraq 1984 1985 - Apr 1 0:00 1:00 D
Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 S
Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 D
-# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the `:01' is a typo.
+# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the ':01' is a typo.
# Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this.
#
Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 D
Rule Iraq 1991 2007 - Oct 1 3:00s 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Baghdad 2:57:40 - LMT 1890
- 2:57:36 - BMT 1918 # Baghdad Mean Time?
+ 2:57:36 - BMT 1918 # Baghdad Mean Time?
3:00 - AST 1982 May
3:00 Iraq A%sT
@@ -1249,7 +1362,7 @@ Rule Zion 2013 max - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Jerusalem 2:20:54 - LMT 1880
- 2:20:40 - JMT 1918 # Jerusalem Mean Time?
+ 2:20:40 - JMT 1918 # Jerusalem Mean Time?
2:00 Zion I%sT
@@ -1258,15 +1371,15 @@ Zone Asia/Jerusalem 2:20:54 - LMT 1880
# Japan
-# `9:00' and `JST' is from Guy Harris.
+# '9:00' and 'JST' is from Guy Harris.
# From Paul Eggert (1995-03-06):
# Today's _Asahi Evening News_ (page 4) reports that Japan had
-# daylight saving between 1948 and 1951, but ``the system was discontinued
-# because the public believed it would lead to longer working hours.''
+# daylight saving between 1948 and 1951, but "the system was discontinued
+# because the public believed it would lead to longer working hours."
-# From Mayumi Negishi in the 2005-08-10 Japan Times
-# <http://www.japantimes.co.jp/cgi-bin/getarticle.pl5?nn20050810f2.htm>:
+# From Mayumi Negishi in the 2005-08-10 Japan Times:
+# http://www.japantimes.co.jp/cgi-bin/getarticle.pl5?nn20050810f2.htm
# Occupation authorities imposed daylight-saving time on Japan on
# [1948-05-01].... But lack of prior debate and the execution of
# daylight-saving time just three days after the bill was passed generated
@@ -1290,7 +1403,8 @@ Rule Japan 1950 1951 - May Sun>=1 2:00 1:00 D
# From Hideyuki Suzuki (1998-11-09):
# 'Tokyo' usually stands for the former location of Tokyo Astronomical
-# Observatory: E 139 44' 40".90 (9h 18m 58s.727), N 35 39' 16".0.
+# Observatory: 139 degrees 44' 40.90" E (9h 18m 58.727s),
+# 35 degrees 39' 16.0" N.
# This data is from 'Rika Nenpyou (Chronological Scientific Tables) 1996'
# edited by National Astronomical Observatory of Japan....
# JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST).
@@ -1298,10 +1412,10 @@ Rule Japan 1950 1951 - May Sun>=1 2:00 1:00 D
# From Hideyuki Suzuki (1998-11-16):
# The ordinance No. 51 (1886) established "standard time" in Japan,
-# which stands for the time on E 135 degree.
+# which stands for the time on 135 degrees E.
# In the ordinance No. 167 (1895), "standard time" was renamed to "central
# standard time". And the same ordinance also established "western standard
-# time", which stands for the time on E 120 degree.... But "western standard
+# time", which stands for the time on 120 degrees E.... But "western standard
# time" was abolished in the ordinance No. 529 (1937). In the ordinance No.
# 167, there is no mention regarding for what place western standard time is
# standard....
@@ -1309,27 +1423,33 @@ Rule Japan 1950 1951 - May Sun>=1 2:00 1:00 D
# I wrote "ordinance" above, but I don't know how to translate.
# In Japanese it's "chokurei", which means ordinance from emperor.
-# Shanks & Pottenger claim JST in use since 1896, and that a few
-# places (e.g. Ishigaki) use +0800; go with Suzuki. Guess that all
-# ordinances took effect on Jan 1.
+# From Yu-Cheng Chuang (2013-07-12):
+# ...the Meiji Emperor announced Ordinance No. 167 of Meiji Year 28 "The clause
+# about standard time" ... The adoption began from Jan 1, 1896.
+# http://ja.wikisource.org/wiki/標準時ニ關スル件_(公布時)
+#
+# ...the Showa Emperor announced Ordinance No. 529 of Showa Year 12 ... which
+# means the whole Japan territory, including later occupations, adopt Japan
+# Central Time (UTC+9). The adoption began on Oct 1, 1937.
+# http://ja.wikisource.org/wiki/明治二十八年勅令第百六十七號標準時ニ關スル件中改正ノ件
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
- 9:00 - JST 1896
- 9:00 - CJT 1938
+ 9:00 - JST 1896 Jan 1
+ 9:00 - JCST 1937 Oct 1
9:00 Japan J%sT
# Since 1938, all Japanese possessions have been like Asia/Tokyo.
# Jordan
#
-# From <a href="http://star.arabia.com/990701/JO9.html">
-# Jordan Week (1999-07-01) </a> via Steffen Thorsen (1999-09-09):
+# From <http://star.arabia.com/990701/JO9.html>
+# Jordan Week (1999-07-01) via Steffen Thorsen (1999-09-09):
# Clocks in Jordan were forwarded one hour on Wednesday at midnight,
# in accordance with the government's decision to implement summer time
# all year round.
#
-# From <a href="http://star.arabia.com/990930/JO9.html">
-# Jordan Week (1999-09-30) </a> via Steffen Thorsen (1999-11-09):
+# From <http://star.arabia.com/990930/JO9.html>
+# Jordan Week (1999-09-30) via Steffen Thorsen (1999-11-09):
# Winter time starts today Thursday, 30 September. Clocks will be turned back
# by one hour. This is the latest government decision and it's final!
# The decision was taken because of the increase in working hours in
@@ -1349,9 +1469,7 @@ Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
# From Steffen Thorsen (2009-04-02):
# This single one might be good enough, (2009-03-24, Arabic):
-# <a href="http://petra.gov.jo/Artical.aspx?Lng=2&Section=8&Artical=95279">
# http://petra.gov.jo/Artical.aspx?Lng=2&Section=8&Artical=95279
-# </a>
#
# Google's translation:
#
@@ -1442,9 +1560,8 @@ Zone Asia/Amman 2:23:44 - LMT 1931
# - Qyzylorda switched from +5:00 to +6:00 on 1992-01-19 02:00.
# - Oral switched from +5:00 to +4:00 in spring 1989.
-# <a href="http://www.kazsociety.org.uk/news/2005/03/30.htm">
-# From Kazakhstan Embassy's News Bulletin #11 (2005-03-21):
-# </a>
+# From Kazakhstan Embassy's News Bulletin #11
+# <http://www.kazsociety.org.uk/news/2005/03/30.htm> (2005-03-21):
# The Government of Kazakhstan passed a resolution March 15 abolishing
# daylight saving time citing lack of economic benefits and health
# complications coupled with a decrease in productivity.
@@ -1477,10 +1594,10 @@ Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2
6:00 - KIZT 1982 Apr 1
5:00 RussiaAsia KIZ%sT 1991
5:00 - KIZT 1991 Dec 16 # independence
- 5:00 - QYZT 1992 Jan 19 2:00
+ 5:00 - QYZT 1992 Jan 19 2:00
6:00 RussiaAsia QYZ%sT 2005 Mar 15
6:00 - QYZT
-# Aqtobe (aka Aktobe, formerly Akt'ubinsk)
+# Aqtobe (aka Aktobe, formerly Aktyubinsk)
Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2
4:00 - AKTT 1930 Jun 21 # Aktyubinsk Time
5:00 - AKTT 1981 Apr 1
@@ -1500,7 +1617,7 @@ Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2
6:00 - SHET 1982 Apr 1
5:00 RussiaAsia SHE%sT 1991
5:00 - SHET 1991 Dec 16 # independence
- 5:00 RussiaAsia AQT%sT 1995 Mar lastSun 2:00 # Aqtau Time
+ 5:00 RussiaAsia AQT%sT 1995 Mar lastSun 2:00 # Aqtau Time
4:00 RussiaAsia AQT%sT 2005 Mar 15
5:00 - AQTT
# West Kazakhstan
@@ -1509,7 +1626,7 @@ Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk
5:00 - URAT 1981 Apr 1
5:00 1:00 URAST 1981 Oct 1
6:00 - URAT 1982 Apr 1
- 5:00 RussiaAsia URA%sT 1989 Mar 26 2:00
+ 5:00 RussiaAsia URA%sT 1989 Mar 26 2:00
4:00 RussiaAsia URA%sT 1991
4:00 - URAT 1991 Dec 16 # independence
4:00 RussiaAsia ORA%sT 2005 Mar 15 # Oral Time
@@ -1520,7 +1637,7 @@ Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk
# From Paul Eggert (2005-08-15):
# According to an article dated today in the Kyrgyzstan Development Gateway
-# <http://eng.gateway.kg/cgi-bin/page.pl?id=1&story_name=doc9979.shtml>
+# http://eng.gateway.kg/cgi-bin/page.pl?id=1&story_name=doc9979.shtml
# Kyrgyzstan is canceling the daylight saving time system. I take the article
# to mean that they will leave their clocks at 6 hours ahead of UTC.
# From Malik Abdugaliev (2005-09-21):
@@ -1535,17 +1652,17 @@ Rule Kyrgyz 1997 2004 - Oct lastSun 2:30 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2
5:00 - FRUT 1930 Jun 21 # Frunze Time
- 6:00 RussiaAsia FRU%sT 1991 Mar 31 2:00s
- 5:00 1:00 FRUST 1991 Aug 31 2:00 # independence
- 5:00 Kyrgyz KG%sT 2005 Aug 12 # Kyrgyzstan Time
+ 6:00 RussiaAsia FRU%sT 1991 Mar 31 2:00s
+ 5:00 1:00 FRUST 1991 Aug 31 2:00 # independence
+ 5:00 Kyrgyz KG%sT 2005 Aug 12 # Kyrgyzstan Time
6:00 - KGT
###############################################################################
# Korea (North and South)
-# From Annie I. Bang (2006-07-10) in
-# <http://www.koreaherald.co.kr/SITE/data/html_dir/2006/07/10/200607100012.asp>:
+# From Annie I. Bang (2006-07-10):
+# http://www.koreaherald.co.kr/SITE/data/html_dir/2006/07/10/200607100012.asp
# The Ministry of Commerce, Industry and Energy has already
# commissioned a research project [to reintroduce DST] and has said
# the system may begin as early as 2008.... Korea ran a daylight
@@ -1558,19 +1675,29 @@ Rule ROK 1960 only - Sep 13 0:00 0 S
Rule ROK 1987 1988 - May Sun>=8 0:00 1:00 D
Rule ROK 1987 1988 - Oct Sun>=8 0:00 0 S
+# From Paul Eggert (2014-07-01):
+# The following entries are from Shanks & Pottenger, except that I
+# guessed that time zone abbreviations through 1945 followed the same
+# rules as discussed under Taiwan, with nominal switches from JST to KST
+# when the respective cities were taken over by the Allies after WWII.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Seoul 8:27:52 - LMT 1890
8:30 - KST 1904 Dec
- 9:00 - KST 1928
+ 9:00 - JCST 1928
8:30 - KST 1932
+ 9:00 - JCST 1937 Oct 1
+ 9:00 - JST 1945 Sep 8
9:00 - KST 1954 Mar 21
8:00 ROK K%sT 1961 Aug 10
8:30 - KST 1968 Oct
9:00 ROK K%sT
Zone Asia/Pyongyang 8:23:00 - LMT 1890
8:30 - KST 1904 Dec
- 9:00 - KST 1928
+ 9:00 - JCST 1928
8:30 - KST 1932
+ 9:00 - JCST 1937 Oct 1
+ 9:00 - JST 1945 Aug 24
9:00 - KST 1954 Mar 21
8:00 - KST 1961 Aug 10
9:00 - KST
@@ -1579,21 +1706,13 @@ Zone Asia/Pyongyang 8:23:00 - LMT 1890
# Kuwait
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-# From the Arab Times (2007-03-14):
-# The Civil Service Commission (CSC) has approved a proposal forwarded
-# by MP Ahmad Baqer on implementing the daylight saving time (DST) in
-# Kuwait starting from April until the end of Sept this year, reports Al-Anba.
-# <http://www.arabtimesonline.com/arabtimes/kuwait/Viewdet.asp?ID=9950>.
-# From Paul Eggert (2007-03-29):
-# We don't know the details, or whether the approval means it'll happen,
-# so for now we assume no DST.
Zone Asia/Kuwait 3:11:56 - LMT 1950
3:00 - AST
# Laos
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Vientiane 6:50:24 - LMT 1906 Jun 9 # or Viangchan
- 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
+Zone Asia/Vientiane 6:50:24 - LMT 1906 Jun 9 # or Viangchan
+ 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
7:00 - ICT 1912 May
8:00 - ICT 1931 May
7:00 - ICT
@@ -1634,8 +1753,8 @@ Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 TS # one-Third Summer
Rule NBorneo 1935 1941 - Dec 14 0:00 0 -
#
# peninsular Malaysia
-# The data here are taken from Mok Ly Yng (2003-10-30)
-# <http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html>.
+# taken from Mok Ly Yng (2003-10-30)
+# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Kuala_Lumpur 6:46:46 - LMT 1901 Jan 1
6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
@@ -1647,12 +1766,12 @@ Zone Asia/Kuala_Lumpur 6:46:46 - LMT 1901 Jan 1
7:30 - MALT 1982 Jan 1
8:00 - MYT # Malaysia Time
# Sabah & Sarawak
-# From Paul Eggert (2006-03-22):
-# The data here are mostly from Shanks & Pottenger, but the 1942, 1945 and 1982
-# transition dates are from Mok Ly Yng.
+# From Paul Eggert (2014-08-12):
+# The data entries here are mostly from Shanks & Pottenger, but the 1942, 1945
+# and 1982 transition dates are from Mok Ly Yng.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Kuching 7:21:20 - LMT 1926 Mar
- 7:30 - BORT 1933 # Borneo Time
+ 7:30 - BORT 1933 # Borneo Time
8:00 NBorneo BOR%sT 1942 Feb 16
9:00 - JST 1945 Sep 12
8:00 - BORT 1982 Jan 1
@@ -1660,22 +1779,21 @@ Zone Asia/Kuching 7:21:20 - LMT 1926 Mar
# Maldives
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
- 4:54:00 - MMT 1960 # Male Mean Time
- 5:00 - MVT # Maldives Time
+Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
+ 4:54:00 - MMT 1960 # Male Mean Time
+ 5:00 - MVT # Maldives Time
# Mongolia
# Shanks & Pottenger say that Mongolia has three time zones, but
-# usno1995 and the CIA map Standard Time Zones of the World (2005-03)
-# both say that it has just one.
+# The USNO (1995-12-21) and the CIA map Standard Time Zones of the World
+# (2005-03) both say that it has just one.
# From Oscar van Vlijmen (1999-12-11):
-# <a href="http://www.mongoliatourism.gov.mn/general.htm">
# General Information Mongolia
-# </a> (1999-09)
+# <http://www.mongoliatourism.gov.mn/general.htm> (1999-09)
# "Time: Mongolia has two time zones. Three westernmost provinces of
-# Bayan-Ulgii, Uvs, and Hovd are one hour earlier than the capital city, and
+# Bayan-Ölgii, Uvs, and Hovd are one hour earlier than the capital city, and
# the rest of the country follows the Ulaanbaatar time, which is UTC/GMT plus
# eight hours."
@@ -1686,7 +1804,7 @@ Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
# of implementation may have been different....
# Some maps in the past have indicated that there was an additional time
# zone in the eastern part of Mongolia, including the provinces of Dornod,
-# Suhbaatar, and possibly Khentij.
+# Sükhbaatar, and possibly Khentii.
# From Paul Eggert (1999-12-15):
# Naming and spelling is tricky in Mongolia.
@@ -1700,10 +1818,10 @@ Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
# (adopted DST on 2001-04-27 02:00 local time, ending 2001-09-28),
# there are three time zones.
#
-# Provinces [at 7:00]: Bayan-ulgii, Uvs, Khovd, Zavkhan, Govi-Altai
-# Provinces [at 8:00]: Khovsgol, Bulgan, Arkhangai, Khentii, Tov,
-# Bayankhongor, Ovorkhangai, Dundgovi, Dornogovi, Omnogovi
-# Provinces [at 9:00]: Dornod, Sukhbaatar
+# Provinces [at 7:00]: Bayan-Ölgii, Uvs, Khovd, Zavkhan, Govi-Altai
+# Provinces [at 8:00]: Khövsgöl, Bulgan, Arkhangai, Khentii, Töv,
+# Bayankhongor, Övörkhangai, Dundgovi, Dornogovi, Ömnögovi
+# Provinces [at 9:00]: Dornod, Sükhbaatar
#
# [The province of Selenge is omitted from the above lists.]
@@ -1720,16 +1838,16 @@ Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
# We have wildly conflicting information about Mongolia's time zones.
# Bill Bonnet (2005-05-19) reports that the US Embassy in Ulaanbaatar says
# there is only one time zone and that DST is observed, citing Microsoft
-# Windows XP as the source. Risto Nykanen (2005-05-16) reports that
+# Windows XP as the source. Risto Nykänen (2005-05-16) reports that
# travelmongolia.org says there are two time zones (UTC+7, UTC+8) with no DST.
# Oscar van Vlijmen (2005-05-20) reports that the Mongolian Embassy in
# Washington, DC says there are two time zones, with DST observed.
# He also found
-# <http://ubpost.mongolnews.mn/index.php?subaction=showcomments&id=1111634894&archive=&start_from=&ucat=1&>
+# http://ubpost.mongolnews.mn/index.php?subaction=showcomments&id=1111634894&archive=&start_from=&ucat=1&
# which also says that there is DST, and which has a comment by "Toddius"
# (2005-03-31 06:05 +0700) saying "Mongolia actually has 3.5 time zones.
# The West (OLGII) is +7 GMT, most of the country is ULAT is +8 GMT
-# and some Eastern provinces are +9 GMT but Sukhbaatar Aimag is SUHK +8.5 GMT.
+# and some Eastern provinces are +9 GMT but Sükhbaatar Aimag is SUHK +8.5 GMT.
# The SUKH timezone is new this year, it is one of the few things the
# parliament passed during the tumultuous winter session."
# For now, let's ignore this information, until we have more confirmation.
@@ -1745,29 +1863,23 @@ Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
# +08:00 instead. Different sources appear to disagree with the tz
# database on this, e.g.:
#
-# <a href="http://www.timeanddate.com/worldclock/city.html?n=1026">
# http://www.timeanddate.com/worldclock/city.html?n=1026
-# </a>
-# <a href="http://www.worldtimeserver.com/current_time_in_MN.aspx">
# http://www.worldtimeserver.com/current_time_in_MN.aspx
-# </a>
#
# both say GMT+08:00.
# From Steffen Thorsen (2008-03-31):
# eznis airways, which operates several domestic flights, has a flight
# schedule here:
-# <a href="http://www.eznis.com/Container.jsp?id=112">
# http://www.eznis.com/Container.jsp?id=112
-# </a>
# (click the English flag for English)
#
-# There it appears that flights between Choibalsan and Ulaanbatar arrive
+# There it appears that flights between Choibalsan and Ulaanbaatar arrive
# about 1:35 - 1:50 hours later in local clock time, no matter the
-# direction, while Ulaanbaatar-Khvod takes 2 hours in the Eastern
-# direction and 3:35 back, which indicates that Ulaanbatar and Khvod are
+# direction, while Ulaanbaatar-Khovd takes 2 hours in the Eastern
+# direction and 3:35 back, which indicates that Ulaanbaatar and Khovd are
# in different time zones (like we know about), while Choibalsan and
-# Ulaanbatar are in the same time zone (correction needed).
+# Ulaanbaatar are in the same time zone (correction needed).
# From Arthur David Olson (2008-05-19):
# Assume that Choibalsan is indeed offset by 8:00.
@@ -1783,7 +1895,7 @@ Rule Mongol 1983 only - Oct 1 0:00 0 -
# (1996-09) says 1996-10-25. Go with Shanks & Pottenger through 1998.
#
# Shanks & Pottenger say that the Sept. 1984 through Sept. 1990 switches
-# in Choibalsan (more precisely, in Dornod and Sukhbaatar) took place
+# in Choibalsan (more precisely, in Dornod and Sükhbaatar) took place
# at 02:00 standard time, not at 00:00 local time as in the rest of
# the country. That would be odd, and possibly is a result of their
# correction of 02:00 (in the previous edition) not being done correctly
@@ -1799,13 +1911,13 @@ Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
# Hovd, a.k.a. Chovd, Dund-Us, Dzhargalant, Khovd, Jirgalanta
Zone Asia/Hovd 6:06:36 - LMT 1905 Aug
- 6:00 - HOVT 1978 # Hovd Time
+ 6:00 - HOVT 1978 # Hovd Time
7:00 Mongol HOV%sT
# Ulaanbaatar, a.k.a. Ulan Bataar, Ulan Bator, Urga
Zone Asia/Ulaanbaatar 7:07:32 - LMT 1905 Aug
- 7:00 - ULAT 1978 # Ulaanbaatar Time
+ 7:00 - ULAT 1978 # Ulaanbaatar Time
8:00 Mongol ULA%sT
-# Choibalsan, a.k.a. Bajan Tuemen, Bajan Tumen, Chojbalsan,
+# Choibalsan, a.k.a. Bajan Tümen, Bajan Tumen, Chojbalsan,
# Choybalsan, Sanbejse, Tchoibalsan
Zone Asia/Choibalsan 7:38:00 - LMT 1905 Aug
7:00 - ULAT 1978
@@ -1837,7 +1949,7 @@ Zone Asia/Muscat 3:54:24 - LMT 1920
# 00:01 was to make it clear which day it was on.
# From Paul Eggert (2002-03-15):
-# Jesper Norgaard found this URL:
+# Jesper Nørgaard found this URL:
# http://www.pak.gov.pk/public/news/app/app06_dec.htm
# (dated 2001-12-06) which says that the Cabinet adopted a scheme "to
# advance the clocks by one hour on the night between the first
@@ -1869,43 +1981,30 @@ Zone Asia/Muscat 3:54:24 - LMT 1920
# Here is an article that Pakistan plan to introduce Daylight Saving Time
# on June 1, 2008 for 3 months.
#
-# "... The federal cabinet on Wednesday announced a new conservation plan to help
-# reduce load shedding by approving the closure of commercial centres at 9pm and
-# moving clocks forward by one hour for the next three months.
-# ...."
+# "... The federal cabinet on Wednesday announced a new conservation plan to
+# help reduce load shedding by approving the closure of commercial centres at
+# 9pm and moving clocks forward by one hour for the next three months. ...."
#
-# <a href="http://www.worldtimezone.net/dst_news/dst_news_pakistan01.html">
# http://www.worldtimezone.net/dst_news/dst_news_pakistan01.html
-# </a>
-# OR
-# <a href="http://www.dailytimes.com.pk/default.asp?page=2008%5C05%5C15%5Cstory_15-5-2008_pg1_4">
# http://www.dailytimes.com.pk/default.asp?page=2008%5C05%5C15%5Cstory_15-5-2008_pg1_4
-# </a>
# From Arthur David Olson (2008-05-19):
# XXX--midnight transitions is a guess; 2008 only is a guess.
# From Alexander Krivenyshev (2008-08-28):
# Pakistan government has decided to keep the watches one-hour advanced
-# for another 2 months--plan to return to Standard Time on October 31
+# for another 2 months - plan to return to Standard Time on October 31
# instead of August 31.
#
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_pakistan02.html">
# http://www.worldtimezone.com/dst_news/dst_news_pakistan02.html
-# </a>
-# OR
-# <a href="http://dailymailnews.com/200808/28/news/dmbrn03.html">
# http://dailymailnews.com/200808/28/news/dmbrn03.html
-# </a>
# From Alexander Krivenyshev (2009-04-08):
# Based on previous media reports that "... proposed plan to
# advance clocks by one hour from May 1 will cause disturbance
# to the working schedules rather than bringing discipline in
# official working."
-# <a href="http://www.thenews.com.pk/daily_detail.asp?id=171280">
# http://www.thenews.com.pk/daily_detail.asp?id=171280
-# </a>
#
# recent news that instead of May 2009 - Pakistan plan to
# introduce DST from April 15, 2009
@@ -1913,15 +2012,8 @@ Zone Asia/Muscat 3:54:24 - LMT 1920
# FYI: Associated Press Of Pakistan
# April 08, 2009
# Cabinet okays proposal to advance clocks by one hour from April 15
-# <a href="http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=73043&Itemid=1">
# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=73043&Itemid=1
-# </a>
-#
-# or
-#
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_pakistan05.html">
# http://www.worldtimezone.com/dst_news/dst_news_pakistan05.html
-# </a>
#
# ....
# The Federal Cabinet on Wednesday approved the proposal to
@@ -1934,34 +2026,20 @@ Zone Asia/Muscat 3:54:24 - LMT 1920
# clocks backward by one hour from October 1. A formal announcement to
# this effect will be made after the Prime Minister grants approval in
# this regard."
-# <a href="http://www.thenews.com.pk/updates.asp?id=87168">
# http://www.thenews.com.pk/updates.asp?id=87168
-# </a>
# From Alexander Krivenyshev (2009-09-28):
# According to Associated Press Of Pakistan, it is confirmed that
-# Pakistan clocks across the country would be turned back by an hour from October
-# 1, 2009.
+# Pakistan clocks across the country would be turned back by an hour from
+# October 1, 2009.
#
# "Clocks to go back one hour from 1 Oct"
-# <a href="http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=86715&Itemid=2">
# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=86715&Itemid=2
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_pakistan07.htm">
# http://www.worldtimezone.com/dst_news/dst_news_pakistan07.htm
-# </a>
-
-# From Steffen Thorsen (2009-09-29):
-# Alexander Krivenyshev wrote:
-# > According to Associated Press Of Pakistan, it is confirmed that
-# > Pakistan clocks across the country would be turned back by an hour from October
-# > 1, 2009.
#
+# From Steffen Thorsen (2009-09-29):
# Now they seem to have changed their mind, November 1 is the new date:
-# <a href="http://www.thenews.com.pk/top_story_detail.asp?Id=24742">
# http://www.thenews.com.pk/top_story_detail.asp?Id=24742
-# </a>
# "The country's clocks will be reversed by one hour on November 1.
# Officials of Federal Ministry for Interior told this to Geo News on
# Monday."
@@ -1973,11 +2051,9 @@ Zone Asia/Muscat 3:54:24 - LMT 1920
#
# We have confirmed this year's end date with both with the Ministry of
# Water and Power and the Pakistan Electric Power Company:
-# <a href="http://www.timeanddate.com/news/time/pakistan-ends-dst09.html">
# http://www.timeanddate.com/news/time/pakistan-ends-dst09.html
-# </a>
-# From Christoph Goehre (2009-10-01):
+# From Christoph Göhre (2009-10-01):
# [T]he German Consulate General in Karachi reported me today that Pakistan
# will go back to standard time on 1st of November.
@@ -1993,22 +2069,17 @@ Zone Asia/Muscat 3:54:24 - LMT 1920
# Now, it seems that the decision to not observe DST in final:
#
# "Govt Withdraws Plan To Advance Clocks"
-# <a href="http://www.apakistannews.com/govt-withdraws-plan-to-advance-clocks-172041">
# http://www.apakistannews.com/govt-withdraws-plan-to-advance-clocks-172041
-# </a>
#
# "People laud PM's announcement to end DST"
-# <a href="http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2">
# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2
-# </a>
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Pakistan 2002 only - Apr Sun>=2 0:01 1:00 S
Rule Pakistan 2002 only - Oct Sun>=2 0:01 0 -
Rule Pakistan 2008 only - Jun 1 0:00 1:00 S
-Rule Pakistan 2008 only - Nov 1 0:00 0 -
+Rule Pakistan 2008 2009 - Nov 1 0:00 0 -
Rule Pakistan 2009 only - Apr 15 0:00 1:00 S
-Rule Pakistan 2009 only - Nov 1 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Karachi 4:28:12 - LMT 1907
@@ -2082,10 +2153,9 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# the PA has decided to implement DST in April.
# From Paul Eggert (1999-09-20):
-# Daoud Kuttab writes in
-# <a href="http://www.jpost.com/com/Archive/22.Apr.1999/Opinion/Article-2.html">
-# Holiday havoc
-# </a> (Jerusalem Post, 1999-04-22) that
+# Daoud Kuttab writes in Holiday havoc
+# http://www.jpost.com/com/Archive/22.Apr.1999/Opinion/Article-2.html
+# (Jerusalem Post, 1999-04-22) that
# the Palestinian National Authority changed to DST on 1999-04-15.
# I vaguely recall that they switch back in October (sorry, forgot the source).
# For now, let's assume that the spring switch was at 24:00,
@@ -2098,7 +2168,7 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# A user from Gaza reported that Gaza made the change early because of
# the Ramadan. Next year Ramadan will be even earlier, so I think
# there is a good chance next year's end date will be around two weeks
-# earlier--the same goes for Jordan.
+# earlier - the same goes for Jordan.
# From Steffen Thorsen (2006-08-17):
# I was informed by a user in Bethlehem that in Bethlehem it started the
@@ -2117,7 +2187,7 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# I guess it is likely that next year's date will be moved as well,
# because of the Ramadan.
-# From Jesper Norgaard Welen (2007-09-18):
+# From Jesper Nørgaard Welen (2007-09-18):
# According to Steffen Thorsen's web site the Gaza Strip and the rest of the
# Palestinian territories left DST early on 13.th. of September at 2:00.
@@ -2134,16 +2204,9 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# Gaza Strip (as Egypt) ended DST at midnight Thursday (Aug 28, 2008), while
# the West Bank will end Daylight Saving Time at midnight Sunday (Aug 31, 2008).
#
-# <a href="http://www.guardian.co.uk/world/feedarticle/7759001">
# http://www.guardian.co.uk/world/feedarticle/7759001
-# </a>
-# <a href="http://www.abcnews.go.com/International/wireStory?id=5676087">
# http://www.abcnews.go.com/International/wireStory?id=5676087
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_gazastrip01.html">
# http://www.worldtimezone.com/dst_news/dst_news_gazastrip01.html
-# </a>
# From Alexander Krivenyshev (2009-03-26):
# According to the Palestine News Network (arabic.pnn.ps), Palestinian
@@ -2151,24 +2214,17 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# 26 and continue until the night of 27 September 2009.
#
# (in Arabic)
-# <a href="http://arabic.pnn.ps/index.php?option=com_content&task=view&id=50850">
# http://arabic.pnn.ps/index.php?option=com_content&task=view&id=50850
-# </a>
#
-# or
# (English translation)
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_westbank01.html">
# http://www.worldtimezone.com/dst_news/dst_news_westbank01.html
-# </a>
# From Steffen Thorsen (2009-08-31):
# Palestine's Council of Ministers announced that they will revert back to
# winter time on Friday, 2009-09-04.
#
# One news source:
-# <a href="http://www.safa.ps/ara/?action=showdetail&seid=4158">
# http://www.safa.ps/ara/?action=showdetail&seid=4158
-# </a>
# (Palestinian press agency, Arabic),
# Google translate: "Decided that the Palestinian government in Ramallah
# headed by Salam Fayyad, the start of work in time for the winter of
@@ -2177,9 +2233,7 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
#
# We are not sure if Gaza will do the same, last year they had a different
# end date, we will keep this page updated:
-# <a href="http://www.timeanddate.com/news/time/westbank-gaza-dst-2009.html">
# http://www.timeanddate.com/news/time/westbank-gaza-dst-2009.html
-# </a>
# From Alexander Krivenyshev (2009-09-02):
# Seems that Gaza Strip will go back to Winter Time same date as West Bank.
@@ -2189,51 +2243,35 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
#
# "Winter time unite the West Bank and Gaza"
# (from Palestinian National Authority):
-# <a href="http://www.moi.gov.ps/en/?page=633167343250594025&nid=11505
# http://www.moi.gov.ps/en/?page=633167343250594025&nid=11505
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_gazastrip02.html>
# http://www.worldtimezone.com/dst_news/dst_news_gazastrip02.html
-# </a>
# From Alexander Krivenyshev (2010-03-19):
# According to Voice of Palestine DST will last for 191 days, from March
# 26, 2010 till "the last Sunday before the tenth day of Tishri
# (October), each year" (October 03, 2010?)
#
-# <a href="http://palvoice.org/forums/showthread.php?t=245697">
# http://palvoice.org/forums/showthread.php?t=245697
-# </a>
# (in Arabic)
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_westbank03.html">
# http://www.worldtimezone.com/dst_news/dst_news_westbank03.html
-# </a>
# From Steffen Thorsen (2010-03-24):
# ...Ma'an News Agency reports that Hamas cabinet has decided it will
# start one day later, at 12:01am. Not sure if they really mean 12:01am or
# noon though:
#
-# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=271178">
# http://www.maannews.net/eng/ViewDetails.aspx?ID=271178
-# </a>
# (Ma'an News Agency)
# "At 12:01am Friday, clocks in Israel and the West Bank will change to
# 1:01am, while Gaza clocks will change at 12:01am Saturday morning."
# From Steffen Thorsen (2010-08-11):
# According to several sources, including
-# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=306795">
# http://www.maannews.net/eng/ViewDetails.aspx?ID=306795
-# </a>
# the clocks were set back one hour at 2010-08-11 00:00:00 local time in
# Gaza and the West Bank.
# Some more background info:
-# <a href="http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html">
# http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html
-# </a>
# From Steffen Thorsen (2011-08-26):
# Gaza and the West Bank did go back to standard time in the beginning of
@@ -2241,13 +2279,9 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# 00:00 (so two periods of DST in 2011). The pause was because of
# Ramadan.
#
-# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=416217">
# http://www.maannews.net/eng/ViewDetails.aspx?ID=416217
-# </a>
# Additional info:
-# <a href="http://www.timeanddate.com/news/time/palestine-dst-2011.html">
# http://www.timeanddate.com/news/time/palestine-dst-2011.html
-# </a>
# From Alexander Krivenyshev (2011-08-27):
# According to the article in The Jerusalem Post:
@@ -2257,14 +2291,9 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# The Hamas government said on Saturday that it won't observe summertime after
# the Muslim feast of Id al-Fitr, which begins on Tuesday..."
# ...
-# <a href="http://www.jpost.com/MiddleEast/Article.aspx?id=235650">
# http://www.jpost.com/MiddleEast/Article.aspx?id=235650
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_gazastrip05.html">
# http://www.worldtimezone.com/dst_news/dst_news_gazastrip05.html
-# </a>
-# The rules for Egypt are stolen from the `africa' file.
+# The rules for Egypt are stolen from the 'africa' file.
# From Steffen Thorsen (2011-09-30):
# West Bank did end Daylight Saving Time this morning/midnight (2011-09-30
@@ -2272,26 +2301,18 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# So West Bank and Gaza now have the same time again.
#
# Many sources, including:
-# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=424808">
# http://www.maannews.net/eng/ViewDetails.aspx?ID=424808
-# </a>
# From Steffen Thorsen (2012-03-26):
# Palestinian news sources tell that both Gaza and West Bank will start DST
# on Friday (Thursday midnight, 2012-03-29 24:00).
# Some of many sources in Arabic:
-# <a href="http://www.samanews.com/index.php?act=Show&id=122638">
# http://www.samanews.com/index.php?act=Show&id=122638
-# </a>
#
-# <a href="http://safa.ps/details/news/74352/%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-%D8%A8%D8%A7%D9%84%D8%B6%D9%81%D8%A9-%D9%88%D8%BA%D8%B2%D8%A9-%D9%84%D9%8A%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D8%B9%D8%A9.html">
# http://safa.ps/details/news/74352/%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-%D8%A8%D8%A7%D9%84%D8%B6%D9%81%D8%A9-%D9%88%D8%BA%D8%B2%D8%A9-%D9%84%D9%8A%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D8%B9%D8%A9.html
-# </a>
#
# Our brief summary:
-# <a href="http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html">
# http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html
-# </a>
# From Steffen Thorsen (2013-03-26):
# The following news sources tells that Palestine will "start daylight saving
@@ -2351,10 +2372,10 @@ Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
2:00 EgyptAsia EE%sT 1967 Jun 5
2:00 Zion I%sT 1996
2:00 Jordan EE%sT 1999
- 2:00 Palestine EE%sT 2008 Aug 29 0:00
+ 2:00 Palestine EE%sT 2008 Aug 29 0:00
2:00 - EET 2008 Sep
2:00 Palestine EE%sT 2010
- 2:00 - EET 2010 Mar 27 0:01
+ 2:00 - EET 2010 Mar 27 0:01
2:00 Palestine EE%sT 2011 Aug 1
2:00 - EET 2012
2:00 Palestine EE%sT
@@ -2370,25 +2391,27 @@ Zone Asia/Hebron 2:20:23 - LMT 1900 Oct
# no information
# Philippines
-# On 1844-08-16, Narciso Claveria, governor-general of the
+# On 1844-08-16, Narciso Clavería, governor-general of the
# Philippines, issued a proclamation announcing that 1844-12-30 was to
-# be immediately followed by 1845-01-01. Robert H. van Gent has a
-# transcript of the decree in <http://www.phys.uu.nl/~vgent/idl/idl.htm>.
-# The rest of the data are from Shanks & Pottenger.
+# be immediately followed by 1845-01-01; see R.H. van Gent's
+# History of the International Date Line
+# http://www.staff.science.uu.nl/~gent0113/idl/idl_philippines.htm
+# The rest of the data entries are from Shanks & Pottenger.
-# From Paul Eggert (2006-04-25):
-# Tomorrow's Manila Standard reports that the Philippines Department of
-# Trade and Industry is considering adopting DST this June when the
-# rainy season begins. See
-# <http://www.manilastandardtoday.com/?page=politics02_april26_2006>.
-# For now, we'll ignore this, since it's not definite and we lack details.
-#
-# From Jesper Norgaard Welen (2006-04-26):
+# From Jesper Nørgaard Welen (2006-04-26):
# ... claims that Philippines had DST last time in 1990:
# http://story.philippinetimes.com/p.x/ct/9/id/145be20cc6b121c0/cid/3e5bbccc730d258c/
# [a story dated 2006-04-25 by Cris Larano of Dow Jones Newswires,
# but no details]
+# From Paul Eggert (2014-08-14):
+# The following source says DST may be instituted November-January and again
+# March-June, but this is not definite. It also says DST was last proclaimed
+# during the Ramos administration (1992-1998); but again, no details.
+# Carcamo D. PNoy urged to declare use of daylight saving time.
+# Philippine Star 2014-08-05
+# http://www.philstar.com/headlines/2014/08/05/1354152/pnoy-urged-declare-use-daylight-saving-time
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Phil 1936 only - Nov 1 0:00 1:00 S
Rule Phil 1937 only - Feb 1 0:00 0 -
@@ -2405,18 +2428,39 @@ Zone Asia/Manila -15:56:00 - LMT 1844 Dec 31
# Qatar
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha
+Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha
4:00 - GST 1972 Jun
3:00 - AST
# Saudi Arabia
+#
+# From Paul Eggert (2014-07-15):
+# Time in Saudi Arabia and other countries in the Arabian peninsula was not
+# standardized until relatively recently; we don't know when, and possibly it
+# has never been made official. Richard P Hunt, in "Islam city yielding to
+# modern times", New York Times (1961-04-09), p 20, wrote that only airlines
+# observed standard time, and that people in Jeddah mostly observed quasi-solar
+# time, doing so by setting their watches at sunrise to 6 o'clock (or to 12
+# o'clock for "Arab" time).
+#
+# The TZ database cannot represent quasi-solar time; airline time is the best
+# we can do. The 1946 foreign air news digest of the U.S. Civil Aeronautics
+# Board (OCLC 42299995) reported that the "... Arabian Government, inaugurated
+# a weekly Dhahran-Cairo service, via the Saudi Arabian cities of Riyadh and
+# Jidda, on March 14, 1947". Shanks & Pottenger guessed 1950; go with the
+# earlier date.
+#
+# Shanks & Pottenger also state that until 1968-05-01 Saudi Arabia had two
+# time zones; the other zone, at UTC+4, was in the far eastern part of
+# the country. Ignore this, as it's before our 1970 cutoff.
+#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Riyadh 3:06:52 - LMT 1950
+Zone Asia/Riyadh 3:06:52 - LMT 1947 Mar 14
3:00 - AST
# Singapore
-# The data here are taken from Mok Ly Yng (2003-10-30)
-# <http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html>.
+# taken from Mok Ly Yng (2003-10-30)
+# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
@@ -2442,26 +2486,24 @@ Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
# From Paul Eggert (1996-09-03):
# "Sri Lanka advances clock by an hour to avoid blackout"
-# (www.virtual-pc.com/lankaweb/news/items/240596-2.html, 1996-05-24,
+# (<http://www.virtual-pc.com/lankaweb/news/items/240596-2.html>, 1996-05-24,
# no longer available as of 1999-08-17)
-# reported ``the country's standard time will be put forward by one hour at
-# midnight Friday (1830 GMT) `in the light of the present power crisis'.''
+# reported "the country's standard time will be put forward by one hour at
+# midnight Friday (1830 GMT) 'in the light of the present power crisis'."
#
# From Dharmasiri Senanayake, Sri Lanka Media Minister (1996-10-24), as quoted
-# by Shamindra in
-# <a href="news:54rka5$m5h@mtinsc01-mgt.ops.worldnet.att.net">
-# Daily News - Hot News Section (1996-10-26)
-# </a>:
+# by Shamindra in Daily News - Hot News Section
+# <news:54rka5$m5h@mtinsc01-mgt.ops.worldnet.att.net> (1996-10-26):
# With effect from 12.30 a.m. on 26th October 1996
# Sri Lanka will be six (06) hours ahead of GMT.
-# From Jesper Norgaard Welen (2006-04-14), quoting Sri Lanka News Online
+# From Jesper Nørgaard Welen (2006-04-14), quoting Sri Lanka News Online
# <http://news.sinhalaya.com/wmview.php?ArtID=11002> (2006-04-13):
# 0030 hrs on April 15, 2006 (midnight of April 14, 2006 +30 minutes)
# at present, become 2400 hours of April 14, 2006 (midnight of April 14, 2006).
# From Peter Apps and Ranga Sirila of Reuters (2006-04-12) in:
-# <http://today.reuters.co.uk/news/newsArticle.aspx?type=scienceNews&storyID=2006-04-12T172228Z_01_COL295762_RTRIDST_0_SCIENCE-SRILANKA-TIME-DC.XML>
+# http://today.reuters.co.uk/news/newsArticle.aspx?type=scienceNews&storyID=2006-04-12T172228Z_01_COL295762_RTRIDST_0_SCIENCE-SRILANKA-TIME-DC.XML
# [The Tamil Tigers] never accepted the original 1996 time change and simply
# kept their clocks set five and a half hours ahead of Greenwich Mean
# Time (GMT), in line with neighbor India.
@@ -2475,7 +2517,7 @@ Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
# twice in 1996 and probably SL Government or its standardization
# agencies never declared an abbreviation as a national standard.
#
-# I recollect before the recent change the government annoucemments
+# I recollect before the recent change the government announcements
# mentioning it as simply changing Sri Lanka Standard Time or Sri Lanka
# Time and no mention was made about the abbreviation.
#
@@ -2485,7 +2527,7 @@ Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
# item....
#
# Within Sri Lanka I think LKT is well known among computer users and
-# adminsitrators. In my opinion SLT may not be a good choice because the
+# administrators. In my opinion SLT may not be a good choice because the
# nation's largest telcom / internet operator Sri Lanka Telcom is well
# known by that abbreviation - simply as SLT (there IP domains are
# slt.lk and sltnet.lk).
@@ -2500,13 +2542,13 @@ Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Colombo 5:19:24 - LMT 1880
- 5:19:32 - MMT 1906 # Moratuwa Mean Time
+ 5:19:32 - MMT 1906 # Moratuwa Mean Time
5:30 - IST 1942 Jan 5
5:30 0:30 IHST 1942 Sep
- 5:30 1:00 IST 1945 Oct 16 2:00
- 5:30 - IST 1996 May 25 0:00
- 6:30 - LKT 1996 Oct 26 0:30
- 6:00 - LKT 2006 Apr 15 0:30
+ 5:30 1:00 IST 1945 Oct 16 2:00
+ 5:30 - IST 1996 May 25 0:00
+ 6:30 - LKT 1996 Oct 26 0:30
+ 6:00 - LKT 2006 Apr 15 0:30
5:30 - IST
# Syria
@@ -2557,7 +2599,7 @@ Rule Syria 2006 only - Sep 22 0:00 0 -
# Today the AP reported "Syria will switch to summertime at midnight Thursday."
# http://www.iht.com/articles/ap/2007/03/29/africa/ME-GEN-Syria-Time-Change.php
Rule Syria 2007 only - Mar lastFri 0:00 1:00 S
-# From Jesper Norgard (2007-10-27):
+# From Jesper Nørgaard (2007-10-27):
# The sister center ICARDA of my work CIMMYT is confirming that Syria DST will
# not take place 1st November at 0:00 o'clock but 1st November at 24:00 or
# rather Midnight between Thursday and Friday. This does make more sense than
@@ -2566,7 +2608,7 @@ Rule Syria 2007 only - Mar lastFri 0:00 1:00 S
# it is implemented at midnight of the last workday before weekend...
#
# From Steffen Thorsen (2007-10-27):
-# Jesper Norgaard Welen wrote:
+# Jesper Nørgaard Welen wrote:
#
# > "Winter local time in Syria will be observed at midnight of Thursday 1
# > November 2007, and the clock will be put back 1 hour."
@@ -2582,8 +2624,7 @@ Rule Syria 2007 only - Nov Fri>=1 0:00 0 -
# From Stephen Colebourne (2008-03-17):
# For everyone's info, I saw an IATA time zone change for [Syria] for
-# this month (March 2008) in the last day or so...This is the data IATA
-# are now using:
+# this month (March 2008) in the last day or so....
# Country Time Standard --- DST Start --- --- DST End --- DST
# Name Zone Variation Time Date Time Date
# Variation
@@ -2595,16 +2636,15 @@ Rule Syria 2007 only - Nov Fri>=1 0:00 0 -
# From Arthur David Olson (2008-03-17):
# Here's a link to English-language coverage by the Syrian Arab News
# Agency (SANA)...
-# <a href="http://www.sana.sy/eng/21/2008/03/11/165173.htm">
# http://www.sana.sy/eng/21/2008/03/11/165173.htm
-# </a>...which reads (in part) "The Cabinet approved the suggestion of the
+# ...which reads (in part) "The Cabinet approved the suggestion of the
# Ministry of Electricity to begin daylight savings time on Friday April
# 4th, advancing clocks one hour ahead on midnight of Thursday April 3rd."
# Since Syria is two hours east of UTC, the 2200 and 2100 transition times
# shown above match up with midnight in Syria.
# From Arthur David Olson (2008-03-18):
-# My buest guess at a Syrian rule is "the Friday nearest April 1";
+# My best guess at a Syrian rule is "the Friday nearest April 1";
# coding that involves either using a "Mar Fri>=29" construct that old time zone
# compilers can't handle or having multiple Rules (a la Israel).
# For now, use "Apr Fri>=1", and go with IATA on a uniform Sep 30 end.
@@ -2617,37 +2657,27 @@ Rule Syria 2007 only - Nov Fri>=1 0:00 0 -
# winter time on 2008-11-01 at 00:00 local daylight time (delaying/setting
# clocks back 60 minutes).
#
-# <a href="http://sana.sy/ara/2/2008/10/07/195459.htm">
# http://sana.sy/ara/2/2008/10/07/195459.htm
-# </a>
# From Steffen Thorsen (2009-03-19):
# Syria will start DST on 2009-03-27 00:00 this year according to many sources,
# two examples:
#
-# <a href="http://www.sana.sy/eng/21/2009/03/17/217563.htm">
# http://www.sana.sy/eng/21/2009/03/17/217563.htm
-# </a>
# (English, Syrian Arab News # Agency)
-# <a href="http://thawra.alwehda.gov.sy/_View_news2.asp?FileName=94459258720090318012209">
# http://thawra.alwehda.gov.sy/_View_news2.asp?FileName=94459258720090318012209
-# </a>
# (Arabic, gov-site)
#
# We have not found any sources saying anything about when DST ends this year.
#
# Our summary
-# <a href="http://www.timeanddate.com/news/time/syria-dst-starts-march-27-2009.html">
# http://www.timeanddate.com/news/time/syria-dst-starts-march-27-2009.html
-# </a>
# From Steffen Thorsen (2009-10-27):
# The Syrian Arab News Network on 2009-09-29 reported that Syria will
# revert back to winter (standard) time on midnight between Thursday
# 2009-10-29 and Friday 2009-10-30:
-# <a href="http://www.sana.sy/ara/2/2009/09/29/247012.htm">
# http://www.sana.sy/ara/2/2009/09/29/247012.htm (Arabic)
-# </a>
# From Arthur David Olson (2009-10-28):
# We'll see if future DST switching times turn out to be end of the last
@@ -2658,23 +2688,17 @@ Rule Syria 2007 only - Nov Fri>=1 0:00 0 -
# The "Syrian News Station" reported on 2010-03-16 that the Council of
# Ministers has decided that Syria will start DST on midnight Thursday
# 2010-04-01: (midnight between Thursday and Friday):
-# <a href="http://sns.sy/sns/?path=news/read/11421">
# http://sns.sy/sns/?path=news/read/11421 (Arabic)
-# </a>
# From Steffen Thorsen (2012-03-26):
# Today, Syria's government announced that they will start DST early on Friday
# (00:00). This is a bit earlier than the past two years.
#
# From Syrian Arab News Agency, in Arabic:
-# <a href="http://www.sana.sy/ara/2/2012/03/26/408215.htm">
# http://www.sana.sy/ara/2/2012/03/26/408215.htm
-# </a>
#
# Our brief summary:
-# <a href="http://www.timeanddate.com/news/time/syria-dst-2012.html">
# http://www.timeanddate.com/news/time/syria-dst-2012.html
-# </a>
# From Arthur David Olson (2012-03-27):
# Assume last Friday in March going forward XXX.
@@ -2687,7 +2711,7 @@ Rule Syria 2012 max - Mar lastFri 0:00 1:00 S
Rule Syria 2009 max - Oct lastFri 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
+Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
2:00 Syria EE%sT
# Tajikistan
@@ -2695,9 +2719,9 @@ Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
5:00 - DUST 1930 Jun 21 # Dushanbe Time
- 6:00 RussiaAsia DUS%sT 1991 Mar 31 2:00s
- 5:00 1:00 DUSST 1991 Sep 9 2:00s
- 5:00 - TJT # Tajikistan Time
+ 6:00 RussiaAsia DUS%sT 1991 Mar 31 2:00s
+ 5:00 1:00 DUSST 1991 Sep 9 2:00s
+ 5:00 - TJT # Tajikistan Time
# Thailand
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -2710,9 +2734,9 @@ Zone Asia/Bangkok 6:42:04 - LMT 1880
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad
4:00 - ASHT 1930 Jun 21 # Ashkhabad Time
- 5:00 RussiaAsia ASH%sT 1991 Mar 31 2:00
+ 5:00 RussiaAsia ASH%sT 1991 Mar 31 2:00
4:00 RussiaAsia ASH%sT 1991 Oct 27 # independence
- 4:00 RussiaAsia TM%sT 1992 Jan 19 2:00
+ 4:00 RussiaAsia TM%sT 1992 Jan 19 2:00
5:00 - TMT
# United Arab Emirates
@@ -2721,8 +2745,9 @@ Zone Asia/Dubai 3:41:12 - LMT 1920
4:00 - GST
# Uzbekistan
+# Byalokoz 1919 says Uzbekistan was 4:27:53.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Samarkand 4:27:12 - LMT 1924 May 2
+Zone Asia/Samarkand 4:27:53 - LMT 1924 May 2
4:00 - SAMT 1930 Jun 21 # Samarkand Time
5:00 - SAMT 1981 Apr 1
5:00 1:00 SAMST 1981 Oct 1
@@ -2730,9 +2755,10 @@ Zone Asia/Samarkand 4:27:12 - LMT 1924 May 2
5:00 RussiaAsia SAM%sT 1991 Sep 1 # independence
5:00 RussiaAsia UZ%sT 1992
5:00 - UZT
-Zone Asia/Tashkent 4:37:12 - LMT 1924 May 2
+# Milne says Tashkent was 4:37:10.8; round to nearest.
+Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
5:00 - TAST 1930 Jun 21 # Tashkent Time
- 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00
+ 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00
5:00 RussiaAsia TAS%sT 1991 Sep 1 # independence
5:00 RussiaAsia UZ%sT 1992
5:00 - UZT
@@ -2746,13 +2772,13 @@ Zone Asia/Tashkent 4:37:12 - LMT 1924 May 2
# and Pottenger.
# From Arthur David Olson (2008-03-18):
-# The English-language name of Vietnam's most populous city is "Ho Chi Min City";
-# we use Ho_Chi_Minh below to avoid a name of more than 14 characters.
+# The English-language name of Vietnam's most populous city is "Ho Chi Minh
+# City"; use Ho_Chi_Minh below to avoid a name of more than 14 characters.
# From Shanks & Pottenger:
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Ho_Chi_Minh 7:06:40 - LMT 1906 Jun 9
- 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
+ 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
7:00 - ICT 1912 May
8:00 - ICT 1931 May
7:00 - ICT
diff --git a/elsie.nci.nih.gov/src/australasia b/elsie.nci.nih.gov/src/australasia
index a61c184..5ea1f18 100644
--- a/elsie.nci.nih.gov/src/australasia
+++ b/elsie.nci.nih.gov/src/australasia
@@ -1,4 +1,3 @@
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
@@ -13,13 +12,13 @@
# Please see the notes below for the controversy about "EST" versus "AEST" etc.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Aus 1917 only - Jan 1 0:01 1:00 -
-Rule Aus 1917 only - Mar 25 2:00 0 -
-Rule Aus 1942 only - Jan 1 2:00 1:00 -
-Rule Aus 1942 only - Mar 29 2:00 0 -
-Rule Aus 1942 only - Sep 27 2:00 1:00 -
-Rule Aus 1943 1944 - Mar lastSun 2:00 0 -
-Rule Aus 1943 only - Oct 3 2:00 1:00 -
+Rule Aus 1917 only - Jan 1 0:01 1:00 D
+Rule Aus 1917 only - Mar 25 2:00 0 S
+Rule Aus 1942 only - Jan 1 2:00 1:00 D
+Rule Aus 1942 only - Mar 29 2:00 0 S
+Rule Aus 1942 only - Sep 27 2:00 1:00 D
+Rule Aus 1943 1944 - Mar lastSun 2:00 0 S
+Rule Aus 1943 only - Oct 3 2:00 1:00 D
# Go with Whitman and the Australian National Standards Commission, which
# says W Australia didn't use DST in 1943/1944. Ignore Whitman's claim that
# 1944/1945 was just like 1943/1944.
@@ -27,26 +26,26 @@ Rule Aus 1943 only - Oct 3 2:00 1:00 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
# Northern Territory
Zone Australia/Darwin 8:43:20 - LMT 1895 Feb
- 9:00 - CST 1899 May
- 9:30 Aus CST
+ 9:00 - ACST 1899 May
+ 9:30 Aus AC%sT
# Western Australia
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule AW 1974 only - Oct lastSun 2:00s 1:00 -
-Rule AW 1975 only - Mar Sun>=1 2:00s 0 -
-Rule AW 1983 only - Oct lastSun 2:00s 1:00 -
-Rule AW 1984 only - Mar Sun>=1 2:00s 0 -
-Rule AW 1991 only - Nov 17 2:00s 1:00 -
-Rule AW 1992 only - Mar Sun>=1 2:00s 0 -
-Rule AW 2006 only - Dec 3 2:00s 1:00 -
-Rule AW 2007 2009 - Mar lastSun 2:00s 0 -
-Rule AW 2007 2008 - Oct lastSun 2:00s 1:00 -
+Rule AW 1974 only - Oct lastSun 2:00s 1:00 D
+Rule AW 1975 only - Mar Sun>=1 2:00s 0 S
+Rule AW 1983 only - Oct lastSun 2:00s 1:00 D
+Rule AW 1984 only - Mar Sun>=1 2:00s 0 S
+Rule AW 1991 only - Nov 17 2:00s 1:00 D
+Rule AW 1992 only - Mar Sun>=1 2:00s 0 S
+Rule AW 2006 only - Dec 3 2:00s 1:00 D
+Rule AW 2007 2009 - Mar lastSun 2:00s 0 S
+Rule AW 2007 2008 - Oct lastSun 2:00s 1:00 D
Zone Australia/Perth 7:43:24 - LMT 1895 Dec
- 8:00 Aus WST 1943 Jul
- 8:00 AW WST
+ 8:00 Aus AW%sT 1943 Jul
+ 8:00 AW AW%sT
Zone Australia/Eucla 8:35:28 - LMT 1895 Dec
- 8:45 Aus CWST 1943 Jul
- 8:45 AW CWST
+ 8:45 Aus ACW%sT 1943 Jul
+ 8:45 AW ACW%sT
# Queensland
#
@@ -62,150 +61,150 @@ Zone Australia/Eucla 8:35:28 - LMT 1895 Dec
# so use Lindeman.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule AQ 1971 only - Oct lastSun 2:00s 1:00 -
-Rule AQ 1972 only - Feb lastSun 2:00s 0 -
-Rule AQ 1989 1991 - Oct lastSun 2:00s 1:00 -
-Rule AQ 1990 1992 - Mar Sun>=1 2:00s 0 -
-Rule Holiday 1992 1993 - Oct lastSun 2:00s 1:00 -
-Rule Holiday 1993 1994 - Mar Sun>=1 2:00s 0 -
+Rule AQ 1971 only - Oct lastSun 2:00s 1:00 D
+Rule AQ 1972 only - Feb lastSun 2:00s 0 S
+Rule AQ 1989 1991 - Oct lastSun 2:00s 1:00 D
+Rule AQ 1990 1992 - Mar Sun>=1 2:00s 0 S
+Rule Holiday 1992 1993 - Oct lastSun 2:00s 1:00 D
+Rule Holiday 1993 1994 - Mar Sun>=1 2:00s 0 S
Zone Australia/Brisbane 10:12:08 - LMT 1895
- 10:00 Aus EST 1971
- 10:00 AQ EST
+ 10:00 Aus AE%sT 1971
+ 10:00 AQ AE%sT
Zone Australia/Lindeman 9:55:56 - LMT 1895
- 10:00 Aus EST 1971
- 10:00 AQ EST 1992 Jul
- 10:00 Holiday EST
+ 10:00 Aus AE%sT 1971
+ 10:00 AQ AE%sT 1992 Jul
+ 10:00 Holiday AE%sT
# South Australia
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule AS 1971 1985 - Oct lastSun 2:00s 1:00 -
-Rule AS 1986 only - Oct 19 2:00s 1:00 -
-Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 -
-Rule AS 1972 only - Feb 27 2:00s 0 -
-Rule AS 1973 1985 - Mar Sun>=1 2:00s 0 -
-Rule AS 1986 1990 - Mar Sun>=15 2:00s 0 -
-Rule AS 1991 only - Mar 3 2:00s 0 -
-Rule AS 1992 only - Mar 22 2:00s 0 -
-Rule AS 1993 only - Mar 7 2:00s 0 -
-Rule AS 1994 only - Mar 20 2:00s 0 -
-Rule AS 1995 2005 - Mar lastSun 2:00s 0 -
-Rule AS 2006 only - Apr 2 2:00s 0 -
-Rule AS 2007 only - Mar lastSun 2:00s 0 -
-Rule AS 2008 max - Apr Sun>=1 2:00s 0 -
-Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 -
+Rule AS 1971 1985 - Oct lastSun 2:00s 1:00 D
+Rule AS 1986 only - Oct 19 2:00s 1:00 D
+Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 D
+Rule AS 1972 only - Feb 27 2:00s 0 S
+Rule AS 1973 1985 - Mar Sun>=1 2:00s 0 S
+Rule AS 1986 1990 - Mar Sun>=15 2:00s 0 S
+Rule AS 1991 only - Mar 3 2:00s 0 S
+Rule AS 1992 only - Mar 22 2:00s 0 S
+Rule AS 1993 only - Mar 7 2:00s 0 S
+Rule AS 1994 only - Mar 20 2:00s 0 S
+Rule AS 1995 2005 - Mar lastSun 2:00s 0 S
+Rule AS 2006 only - Apr 2 2:00s 0 S
+Rule AS 2007 only - Mar lastSun 2:00s 0 S
+Rule AS 2008 max - Apr Sun>=1 2:00s 0 S
+Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Australia/Adelaide 9:14:20 - LMT 1895 Feb
- 9:00 - CST 1899 May
- 9:30 Aus CST 1971
- 9:30 AS CST
+ 9:00 - ACST 1899 May
+ 9:30 Aus AC%sT 1971
+ 9:30 AS AC%sT
# Tasmania
#
# From Paul Eggert (2005-08-16):
-# <http://www.bom.gov.au/climate/averages/tables/dst_times.shtml>
+# http://www.bom.gov.au/climate/averages/tables/dst_times.shtml
# says King Island didn't observe DST from WWII until late 1971.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule AT 1967 only - Oct Sun>=1 2:00s 1:00 -
-Rule AT 1968 only - Mar lastSun 2:00s 0 -
-Rule AT 1968 1985 - Oct lastSun 2:00s 1:00 -
-Rule AT 1969 1971 - Mar Sun>=8 2:00s 0 -
-Rule AT 1972 only - Feb lastSun 2:00s 0 -
-Rule AT 1973 1981 - Mar Sun>=1 2:00s 0 -
-Rule AT 1982 1983 - Mar lastSun 2:00s 0 -
-Rule AT 1984 1986 - Mar Sun>=1 2:00s 0 -
-Rule AT 1986 only - Oct Sun>=15 2:00s 1:00 -
-Rule AT 1987 1990 - Mar Sun>=15 2:00s 0 -
-Rule AT 1987 only - Oct Sun>=22 2:00s 1:00 -
-Rule AT 1988 1990 - Oct lastSun 2:00s 1:00 -
-Rule AT 1991 1999 - Oct Sun>=1 2:00s 1:00 -
-Rule AT 1991 2005 - Mar lastSun 2:00s 0 -
-Rule AT 2000 only - Aug lastSun 2:00s 1:00 -
-Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 -
-Rule AT 2006 only - Apr Sun>=1 2:00s 0 -
-Rule AT 2007 only - Mar lastSun 2:00s 0 -
-Rule AT 2008 max - Apr Sun>=1 2:00s 0 -
+Rule AT 1967 only - Oct Sun>=1 2:00s 1:00 D
+Rule AT 1968 only - Mar lastSun 2:00s 0 S
+Rule AT 1968 1985 - Oct lastSun 2:00s 1:00 D
+Rule AT 1969 1971 - Mar Sun>=8 2:00s 0 S
+Rule AT 1972 only - Feb lastSun 2:00s 0 S
+Rule AT 1973 1981 - Mar Sun>=1 2:00s 0 S
+Rule AT 1982 1983 - Mar lastSun 2:00s 0 S
+Rule AT 1984 1986 - Mar Sun>=1 2:00s 0 S
+Rule AT 1986 only - Oct Sun>=15 2:00s 1:00 D
+Rule AT 1987 1990 - Mar Sun>=15 2:00s 0 S
+Rule AT 1987 only - Oct Sun>=22 2:00s 1:00 D
+Rule AT 1988 1990 - Oct lastSun 2:00s 1:00 D
+Rule AT 1991 1999 - Oct Sun>=1 2:00s 1:00 D
+Rule AT 1991 2005 - Mar lastSun 2:00s 0 S
+Rule AT 2000 only - Aug lastSun 2:00s 1:00 D
+Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 D
+Rule AT 2006 only - Apr Sun>=1 2:00s 0 S
+Rule AT 2007 only - Mar lastSun 2:00s 0 S
+Rule AT 2008 max - Apr Sun>=1 2:00s 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Australia/Hobart 9:49:16 - LMT 1895 Sep
- 10:00 - EST 1916 Oct 1 2:00
- 10:00 1:00 EST 1917 Feb
- 10:00 Aus EST 1967
- 10:00 AT EST
+ 10:00 - AEST 1916 Oct 1 2:00
+ 10:00 1:00 AEDT 1917 Feb
+ 10:00 Aus AE%sT 1967
+ 10:00 AT AE%sT
Zone Australia/Currie 9:35:28 - LMT 1895 Sep
- 10:00 - EST 1916 Oct 1 2:00
- 10:00 1:00 EST 1917 Feb
- 10:00 Aus EST 1971 Jul
- 10:00 AT EST
+ 10:00 - AEST 1916 Oct 1 2:00
+ 10:00 1:00 AEDT 1917 Feb
+ 10:00 Aus AE%sT 1971 Jul
+ 10:00 AT AE%sT
# Victoria
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule AV 1971 1985 - Oct lastSun 2:00s 1:00 -
-Rule AV 1972 only - Feb lastSun 2:00s 0 -
-Rule AV 1973 1985 - Mar Sun>=1 2:00s 0 -
-Rule AV 1986 1990 - Mar Sun>=15 2:00s 0 -
-Rule AV 1986 1987 - Oct Sun>=15 2:00s 1:00 -
-Rule AV 1988 1999 - Oct lastSun 2:00s 1:00 -
-Rule AV 1991 1994 - Mar Sun>=1 2:00s 0 -
-Rule AV 1995 2005 - Mar lastSun 2:00s 0 -
-Rule AV 2000 only - Aug lastSun 2:00s 1:00 -
-Rule AV 2001 2007 - Oct lastSun 2:00s 1:00 -
-Rule AV 2006 only - Apr Sun>=1 2:00s 0 -
-Rule AV 2007 only - Mar lastSun 2:00s 0 -
-Rule AV 2008 max - Apr Sun>=1 2:00s 0 -
-Rule AV 2008 max - Oct Sun>=1 2:00s 1:00 -
+Rule AV 1971 1985 - Oct lastSun 2:00s 1:00 D
+Rule AV 1972 only - Feb lastSun 2:00s 0 S
+Rule AV 1973 1985 - Mar Sun>=1 2:00s 0 S
+Rule AV 1986 1990 - Mar Sun>=15 2:00s 0 S
+Rule AV 1986 1987 - Oct Sun>=15 2:00s 1:00 D
+Rule AV 1988 1999 - Oct lastSun 2:00s 1:00 D
+Rule AV 1991 1994 - Mar Sun>=1 2:00s 0 S
+Rule AV 1995 2005 - Mar lastSun 2:00s 0 S
+Rule AV 2000 only - Aug lastSun 2:00s 1:00 D
+Rule AV 2001 2007 - Oct lastSun 2:00s 1:00 D
+Rule AV 2006 only - Apr Sun>=1 2:00s 0 S
+Rule AV 2007 only - Mar lastSun 2:00s 0 S
+Rule AV 2008 max - Apr Sun>=1 2:00s 0 S
+Rule AV 2008 max - Oct Sun>=1 2:00s 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Australia/Melbourne 9:39:52 - LMT 1895 Feb
- 10:00 Aus EST 1971
- 10:00 AV EST
+ 10:00 Aus AE%sT 1971
+ 10:00 AV AE%sT
# New South Wales
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule AN 1971 1985 - Oct lastSun 2:00s 1:00 -
-Rule AN 1972 only - Feb 27 2:00s 0 -
-Rule AN 1973 1981 - Mar Sun>=1 2:00s 0 -
-Rule AN 1982 only - Apr Sun>=1 2:00s 0 -
-Rule AN 1983 1985 - Mar Sun>=1 2:00s 0 -
-Rule AN 1986 1989 - Mar Sun>=15 2:00s 0 -
-Rule AN 1986 only - Oct 19 2:00s 1:00 -
-Rule AN 1987 1999 - Oct lastSun 2:00s 1:00 -
-Rule AN 1990 1995 - Mar Sun>=1 2:00s 0 -
-Rule AN 1996 2005 - Mar lastSun 2:00s 0 -
-Rule AN 2000 only - Aug lastSun 2:00s 1:00 -
-Rule AN 2001 2007 - Oct lastSun 2:00s 1:00 -
-Rule AN 2006 only - Apr Sun>=1 2:00s 0 -
-Rule AN 2007 only - Mar lastSun 2:00s 0 -
-Rule AN 2008 max - Apr Sun>=1 2:00s 0 -
-Rule AN 2008 max - Oct Sun>=1 2:00s 1:00 -
+Rule AN 1971 1985 - Oct lastSun 2:00s 1:00 D
+Rule AN 1972 only - Feb 27 2:00s 0 S
+Rule AN 1973 1981 - Mar Sun>=1 2:00s 0 S
+Rule AN 1982 only - Apr Sun>=1 2:00s 0 S
+Rule AN 1983 1985 - Mar Sun>=1 2:00s 0 S
+Rule AN 1986 1989 - Mar Sun>=15 2:00s 0 S
+Rule AN 1986 only - Oct 19 2:00s 1:00 D
+Rule AN 1987 1999 - Oct lastSun 2:00s 1:00 D
+Rule AN 1990 1995 - Mar Sun>=1 2:00s 0 S
+Rule AN 1996 2005 - Mar lastSun 2:00s 0 S
+Rule AN 2000 only - Aug lastSun 2:00s 1:00 D
+Rule AN 2001 2007 - Oct lastSun 2:00s 1:00 D
+Rule AN 2006 only - Apr Sun>=1 2:00s 0 S
+Rule AN 2007 only - Mar lastSun 2:00s 0 S
+Rule AN 2008 max - Apr Sun>=1 2:00s 0 S
+Rule AN 2008 max - Oct Sun>=1 2:00s 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Australia/Sydney 10:04:52 - LMT 1895 Feb
- 10:00 Aus EST 1971
- 10:00 AN EST
+ 10:00 Aus AE%sT 1971
+ 10:00 AN AE%sT
Zone Australia/Broken_Hill 9:25:48 - LMT 1895 Feb
- 10:00 - EST 1896 Aug 23
- 9:00 - CST 1899 May
- 9:30 Aus CST 1971
- 9:30 AN CST 2000
- 9:30 AS CST
+ 10:00 - AEST 1896 Aug 23
+ 9:00 - ACST 1899 May
+ 9:30 Aus AC%sT 1971
+ 9:30 AN AC%sT 2000
+ 9:30 AS AC%sT
# Lord Howe Island
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule LH 1981 1984 - Oct lastSun 2:00 1:00 -
-Rule LH 1982 1985 - Mar Sun>=1 2:00 0 -
-Rule LH 1985 only - Oct lastSun 2:00 0:30 -
-Rule LH 1986 1989 - Mar Sun>=15 2:00 0 -
-Rule LH 1986 only - Oct 19 2:00 0:30 -
-Rule LH 1987 1999 - Oct lastSun 2:00 0:30 -
-Rule LH 1990 1995 - Mar Sun>=1 2:00 0 -
-Rule LH 1996 2005 - Mar lastSun 2:00 0 -
-Rule LH 2000 only - Aug lastSun 2:00 0:30 -
-Rule LH 2001 2007 - Oct lastSun 2:00 0:30 -
-Rule LH 2006 only - Apr Sun>=1 2:00 0 -
-Rule LH 2007 only - Mar lastSun 2:00 0 -
-Rule LH 2008 max - Apr Sun>=1 2:00 0 -
-Rule LH 2008 max - Oct Sun>=1 2:00 0:30 -
+Rule LH 1981 1984 - Oct lastSun 2:00 1:00 D
+Rule LH 1982 1985 - Mar Sun>=1 2:00 0 S
+Rule LH 1985 only - Oct lastSun 2:00 0:30 D
+Rule LH 1986 1989 - Mar Sun>=15 2:00 0 S
+Rule LH 1986 only - Oct 19 2:00 0:30 D
+Rule LH 1987 1999 - Oct lastSun 2:00 0:30 D
+Rule LH 1990 1995 - Mar Sun>=1 2:00 0 S
+Rule LH 1996 2005 - Mar lastSun 2:00 0 S
+Rule LH 2000 only - Aug lastSun 2:00 0:30 D
+Rule LH 2001 2007 - Oct lastSun 2:00 0:30 D
+Rule LH 2006 only - Apr Sun>=1 2:00 0 S
+Rule LH 2007 only - Mar lastSun 2:00 0 S
+Rule LH 2008 max - Apr Sun>=1 2:00 0 S
+Rule LH 2008 max - Oct Sun>=1 2:00 0:30 D
Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
- 10:00 - EST 1981 Mar
- 10:30 LH LHST
+ 10:00 - AEST 1981 Mar
+ 10:30 LH LH%sT
# Australian miscellany
#
@@ -221,8 +220,8 @@ Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
# Permanent occupation (scientific station) 1911-1915 and since 25 March 1948;
# sealing and penguin oil station operated Nov 1899 to Apr 1919. See the
# Tasmania Parks & Wildlife Service history of sealing at Macquarie Island
-# <http://www.parks.tas.gov.au/index.aspx?base=1828>
-# <http://www.parks.tas.gov.au/index.aspx?base=1831>.
+# http://www.parks.tas.gov.au/index.aspx?base=1828
+# http://www.parks.tas.gov.au/index.aspx?base=1831
# Guess that it was like Australia/Hobart while inhabited before 2010.
#
# From Steffen Thorsen (2010-03-10):
@@ -233,16 +232,16 @@ Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
#
# From Arthur David Olson (2013-05-23):
# The 1919 transition is overspecified below so pre-2013 zics
-# will produce a binary file with an EST-type as the first 32-bit type;
+# will produce a binary file with an [A]EST-type as the first 32-bit type;
# this is required for correct handling of times before 1916 by
# pre-2013 versions of localtime.
Zone Antarctica/Macquarie 0 - zzz 1899 Nov
- 10:00 - EST 1916 Oct 1 2:00
- 10:00 1:00 EST 1917 Feb
- 10:00 Aus EST 1919 Apr 1 0:00s
+ 10:00 - AEST 1916 Oct 1 2:00
+ 10:00 1:00 AEDT 1917 Feb
+ 10:00 Aus AE%sT 1919 Apr 1 0:00s
0 - zzz 1948 Mar 25
- 10:00 Aus EST 1967
- 10:00 AT EST 2010 Apr 4 3:00
+ 10:00 Aus AE%sT 1967
+ 10:00 AT AE%sT 2010 Apr 4 3:00
11:00 - MIST # Macquarie I Standard Time
# Christmas
@@ -250,24 +249,14 @@ Zone Antarctica/Macquarie 0 - zzz 1899 Nov
Zone Indian/Christmas 7:02:52 - LMT 1895 Feb
7:00 - CXT # Christmas Island Time
-# Cook Is
-# From Shanks & Pottenger:
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Cook 1978 only - Nov 12 0:00 0:30 HS
-Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
-Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 HS
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
- -10:30 - CKT 1978 Nov 12 # Cook Is Time
- -10:00 Cook CK%sT
-
-# Cocos
+# Cocos (Keeling) Is
# These islands were ruled by the Ross family from about 1830 to 1978.
# We don't know when standard time was introduced; for now, we guess 1900.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Cocos 6:27:40 - LMT 1900
6:30 - CCT # Cocos Islands Time
+
# Fiji
# Milne gives 11:55:44 for Suva.
@@ -277,20 +266,13 @@ Zone Indian/Cocos 6:27:40 - LMT 1900
# from November 29th 2009 to April 25th 2010.
#
# "Daylight savings to commence this month"
-# <a href="http://www.radiofiji.com.fj/fullstory.php?id=23719">
# http://www.radiofiji.com.fj/fullstory.php?id=23719
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_fiji01.html">
# http://www.worldtimezone.com/dst_news/dst_news_fiji01.html
-# </a>
# From Steffen Thorsen (2009-11-10):
# The Fiji Government has posted some more details about the approved
# amendments:
-# <a href="http://www.fiji.gov.fj/publish/page_16198.shtml">
# http://www.fiji.gov.fj/publish/page_16198.shtml
-# </a>
# From Steffen Thorsen (2010-03-03):
# The Cabinet in Fiji has decided to end DST about a month early, on
@@ -299,35 +281,24 @@ Zone Indian/Cocos 6:27:40 - LMT 1900
# 2011 (last Sunday a good guess?).
#
# Official source:
-# <a href="http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=1096:3310-cabinet-approves-change-in-daylight-savings-dates&catid=49:cabinet-releases&Itemid=166">
# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=1096:3310-cabinet-approves-change-in-daylight-savings-dates&catid=49:cabinet-releases&Itemid=166
-# </a>
#
# A bit more background info here:
-# <a href="http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html">
# http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html
-# </a>
# From Alexander Krivenyshev (2010-10-24):
# According to Radio Fiji and Fiji Times online, Fiji will end DST 3
# weeks earlier than expected - on March 6, 2011, not March 27, 2011...
# Here is confirmation from Government of the Republic of the Fiji Islands,
# Ministry of Information (fiji.gov.fj) web site:
-# <a href="http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155">
# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_fiji04.html">
# http://www.worldtimezone.com/dst_news/dst_news_fiji04.html
-# </a>
# From Steffen Thorsen (2011-10-03):
# Now the dates have been confirmed, and at least our start date
# assumption was correct (end date was one week wrong).
#
-# <a href="http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155">
-# www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155
-# </a>
+# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155
# which says
# Members of the public are reminded to change their time to one hour in
# advance at 2am to 3am on October 23, 2011 and one hour back at 3am to
@@ -337,9 +308,7 @@ Zone Indian/Cocos 6:27:40 - LMT 1900
# Another change to the Fiji DST end date. In the TZ database the end date for
# Fiji DST 2012, is currently Feb 26. This has been changed to Jan 22.
#
-# <a href="http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=5017:amendments-to-daylight-savings&catid=71:press-releases&Itemid=155">
# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=5017:amendments-to-daylight-savings&catid=71:press-releases&Itemid=155
-# </a>
# states:
#
# The end of daylight saving scheduled initially for the 26th of February 2012
@@ -377,16 +346,16 @@ Rule Fiji 2011 only - Mar Sun>=1 3:00 0 -
Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 -
Rule Fiji 2014 max - Jan Sun>=18 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
+Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
12:00 Fiji FJ%sT # Fiji Time
# French Polynesia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct # Rikitea
+Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct # Rikitea
-9:00 - GAMT # Gambier Time
Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct
-9:30 - MART # Marquesas Time
-Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete
+Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete
-10:00 - TAHT # Tahiti Time
# Clipperton (near North America) is administered from French Polynesia;
# it is uninhabited.
@@ -394,14 +363,14 @@ Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete
# Guam
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31
- 9:39:00 - LMT 1901 # Agana
- 10:00 - GST 2000 Dec 23 # Guam
+ 9:39:00 - LMT 1901 # Agana
+ 10:00 - GST 2000 Dec 23 # Guam
10:00 - ChST # Chamorro Standard Time
# Kiribati
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
- 12:00 - GILT # Gilbert Is Time
+Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
+ 12:00 - GILT # Gilbert Is Time
Zone Pacific/Enderbury -11:24:20 - LMT 1901
-12:00 - PHOT 1979 Oct # Phoenix Is Time
-11:00 - PHOT 1995
@@ -415,7 +384,7 @@ Zone Pacific/Kiritimati -10:29:20 - LMT 1901
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Saipan -14:17:00 - LMT 1844 Dec 31
9:43:00 - LMT 1901
- 9:00 - MPT 1969 Oct # N Mariana Is Time
+ 9:00 - MPT 1969 Oct # N Mariana Is Time
10:00 - MPT 2000 Dec 23
10:00 - ChST # Chamorro Standard Time
@@ -426,24 +395,24 @@ Zone Pacific/Majuro 11:24:48 - LMT 1901
12:00 - MHT
Zone Pacific/Kwajalein 11:09:20 - LMT 1901
11:00 - MHT 1969 Oct
- -12:00 - KWAT 1993 Aug 20 # Kwajalein Time
+ -12:00 - KWAT 1993 Aug 20 # Kwajalein Time
12:00 - MHT
# Micronesia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Chuuk 10:07:08 - LMT 1901
- 10:00 - CHUT # Chuuk Time
-Zone Pacific/Pohnpei 10:32:52 - LMT 1901 # Kolonia
- 11:00 - PONT # Pohnpei Time
+ 10:00 - CHUT # Chuuk Time
+Zone Pacific/Pohnpei 10:32:52 - LMT 1901 # Kolonia
+ 11:00 - PONT # Pohnpei Time
Zone Pacific/Kosrae 10:51:56 - LMT 1901
- 11:00 - KOST 1969 Oct # Kosrae Time
+ 11:00 - KOST 1969 Oct # Kosrae Time
12:00 - KOST 1999
11:00 - KOST
# Nauru
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
- 11:30 - NRT 1942 Mar 15 # Nauru Time
+Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
+ 11:30 - NRT 1942 Mar 15 # Nauru Time
9:00 - JST 1944 Aug 15
11:30 - NRT 1979 May
12:00 - NRT
@@ -456,7 +425,7 @@ Rule NC 1996 only - Dec 1 2:00s 1:00 S
# Shanks & Pottenger say the following was at 2:00; go with IATA.
Rule NC 1997 only - Mar 2 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Noumea 11:05:48 - LMT 1912 Jan 13
+Zone Pacific/Noumea 11:05:48 - LMT 1912 Jan 13 # Nouméa
11:00 NC NC%sT
@@ -473,7 +442,8 @@ Rule NZ 1934 1940 - Apr lastSun 2:00 0 M
Rule NZ 1934 1940 - Sep lastSun 2:00 0:30 S
Rule NZ 1946 only - Jan 1 0:00 0 S
# Since 1957 Chatham has been 45 minutes ahead of NZ, but there's no
-# convenient notation for this so we must duplicate the Rule lines.
+# convenient single notation for the date and time of this transition
+# so we must duplicate the Rule lines.
Rule NZ 1974 only - Nov Sun>=1 2:00s 1:00 D
Rule Chatham 1974 only - Nov Sun>=1 2:45s 1:00 D
Rule NZ 1975 only - Feb lastSun 2:00s 0 S
@@ -496,13 +466,14 @@ Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 S
Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2
11:30 NZ NZ%sT 1946 Jan 1
12:00 NZ NZ%sT
-Zone Pacific/Chatham 12:13:48 - LMT 1957 Jan 1
+Zone Pacific/Chatham 12:13:48 - LMT 1868 Nov 2
+ 12:15 - CHAST 1946 Jan 1
12:45 Chatham CHA%sT
Link Pacific/Auckland Antarctica/McMurdo
# Auckland Is
-# uninhabited; Maori and Moriori, colonial settlers, pastoralists, sealers,
+# uninhabited; Māori and Moriori, colonial settlers, pastoralists, sealers,
# and scientific personnel have wintered
# Campbell I
@@ -511,48 +482,58 @@ Link Pacific/Auckland Antarctica/McMurdo
# previously whalers, sealers, pastoralists, and scientific personnel wintered
# was probably like Pacific/Auckland
+# Cook Is
+# From Shanks & Pottenger:
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Cook 1978 only - Nov 12 0:00 0:30 HS
+Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
+Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 HS
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
+ -10:30 - CKT 1978 Nov 12 # Cook Is Time
+ -10:00 Cook CK%sT
+
###############################################################################
# Niue
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Niue -11:19:40 - LMT 1901 # Alofi
- -11:20 - NUT 1951 # Niue Time
- -11:30 - NUT 1978 Oct 1
+Zone Pacific/Niue -11:19:40 - LMT 1901 # Alofi
+ -11:20 - NUT 1951 # Niue Time
+ -11:30 - NUT 1978 Oct 1
-11:00 - NUT
# Norfolk
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston
- 11:12 - NMT 1951 # Norfolk Mean Time
- 11:30 - NFT # Norfolk Time
+Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston
+ 11:12 - NMT 1951 # Norfolk Mean Time
+ 11:30 - NFT # Norfolk Time
# Palau (Belau)
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Palau 8:57:56 - LMT 1901 # Koror
+Zone Pacific/Palau 8:57:56 - LMT 1901 # Koror
9:00 - PWT # Palau Time
# Papua New Guinea
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Port_Moresby 9:48:40 - LMT 1880
- 9:48:32 - PMMT 1895 # Port Moresby Mean Time
- 10:00 - PGT # Papua New Guinea Time
+ 9:48:32 - PMMT 1895 # Port Moresby Mean Time
+ 10:00 - PGT # Papua New Guinea Time
# Pitcairn
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Pitcairn -8:40:20 - LMT 1901 # Adamstown
- -8:30 - PNT 1998 Apr 27 00:00
+Zone Pacific/Pitcairn -8:40:20 - LMT 1901 # Adamstown
+ -8:30 - PNT 1998 Apr 27 0:00
-8:00 - PST # Pitcairn Standard Time
# American Samoa
Zone Pacific/Pago_Pago 12:37:12 - LMT 1879 Jul 5
-11:22:48 - LMT 1911
- -11:30 - SAMT 1950 # Samoa Time
- -11:00 - NST 1967 Apr # N=Nome
- -11:00 - BST 1983 Nov 30 # B=Bering
- -11:00 - SST # S=Samoa
+ -11:00 - NST 1967 Apr # N=Nome
+ -11:00 - BST 1983 Nov 30 # B=Bering
+ -11:00 - SST # S=Samoa
-# Samoa
+# Samoa (formerly and also known as Western Samoa)
# From Steffen Thorsen (2009-10-16):
# We have been in contact with the government of Samoa again, and received
@@ -563,141 +544,80 @@ Zone Pacific/Pago_Pago 12:37:12 - LMT 1879 Jul 5
# Sunday of April 2011."
#
# Background info:
-# <a href="http://www.timeanddate.com/news/time/samoa-dst-plan-2009.html">
# http://www.timeanddate.com/news/time/samoa-dst-plan-2009.html
-# </a>
#
# Samoa's Daylight Saving Time Act 2009 is available here, but does not
# contain any dates:
-# <a href="http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf">
# http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf
-# </a>
# From Laupue Raymond Hughes (2010-10-07):
# Please see
-# <a href="http://www.mcil.gov.ws">
# http://www.mcil.gov.ws
-# </a>,
# the Ministry of Commerce, Industry and Labour (sideframe) "Last Sunday
# September 2010 (26/09/10) - adjust clocks forward from 12:00 midnight
# to 01:00am and First Sunday April 2011 (03/04/11) - adjust clocks
# backwards from 1:00am to 12:00am"
# From Laupue Raymond Hughes (2011-03-07):
-# I believe this will be posted shortly on the website
-# <a href="http://www.mcil.gov.ws">
-# www.mcil.gov.ws
-# </a>
-#
-# PUBLIC NOTICE ON DAYLIGHT SAVING TIME
+# [http://www.mcil.gov.ws/ftcd/daylight_saving_2011.pdf]
#
-# Pursuant to the Daylight Saving Act 2009 and Cabinets decision,
-# businesses and the general public are hereby advised that daylight
-# saving time is on the first Saturday of April 2011 (02/04/11).
-#
-# The public is therefore advised that when the standard time strikes
-# the hour of four oclock (4.00am or 0400 Hours) on the 2nd April 2011,
-# then all instruments used to measure standard time are to be
-# adjusted/changed to three oclock (3:00am or 0300Hrs).
-#
-# Margaret Fruean ACTING CHIEF EXECUTIVE OFFICER MINISTRY OF COMMERCE,
-# INDUSTRY AND LABOUR 28th February 2011
+# ... when the standard time strikes the hour of four o'clock (4.00am
+# or 0400 Hours) on the 2nd April 2011, then all instruments used to
+# measure standard time are to be adjusted/changed to three o'clock
+# (3:00am or 0300Hrs).
-# From David Zuelke (2011-05-09):
+# From David Zülke (2011-05-09):
# Subject: Samoa to move timezone from east to west of international date line
#
-# <a href="http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963">
# http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963
-# </a>
-# From Mark Sim-Smith (2011-08-17):
-# I have been in contact with Leilani Tuala Warren from the Samoa Law
-# Reform Commission, and she has sent me a copy of the Bill that she
-# confirmed has been passed...Most of the sections are about maps rather
-# than the time zone change, but I'll paste the relevant bits below. But
-# the essence is that at midnight 29 Dec (UTC-11 I suppose), Samoa
-# changes from UTC-11 to UTC+13:
-#
-# International Date Line Bill 2011
-#
-# AN ACT to provide for the change to standard time in Samoa and to make
-# consequential amendments to the position of the International Date
-# Line, and for related purposes.
-#
-# BE IT ENACTED by the Legislative Assembly of Samoa in Parliament
-# assembled as follows:
-#
-# 1. Short title and commencement-(1) This Act may be cited as the
-# International Date Line Act 2011. (2) Except for section 5(3) this Act
-# commences at 12 o'clock midnight, on Thursday 29th December 2011. (3)
-# Section 5(3) commences on the date of assent by the Head of State.
-#
-# [snip]
-#
-# 3. Interpretation - [snip] "Samoa standard time" in this Act and any
-# other statute of Samoa which refers to 'Samoa standard time' means the
-# time 13 hours in advance of Co-ordinated Universal Time.
-#
-# 4. Samoa standard time - (1) Upon the commencement of this Act, Samoa
-# standard time shall be set at 13 hours in advance of Co-ordinated
-# Universal Time for the whole of Samoa. (2) All references to Samoa's
-# time zone and to Samoa standard time in Samoa in all legislation and
-# instruments after the commencement of this Act shall be references to
-# Samoa standard time as provided for in this Act. (3) Nothing in this
-# Act affects the provisions of the Daylight Saving Act 2009, except that
-# it defines Samoa standard time....
+# From Paul Eggert (2014-06-27):
+# The International Date Line Act 2011
+# http://www.parliament.gov.ws/images/ACTS/International_Date_Line_Act__2011_-_Eng.pdf
+# changed Samoa from UTC-11 to UTC+13, effective "12 o'clock midnight, on
+# Thursday 29th December 2011". The International Date Line was adjusted
+# accordingly.
# From Laupue Raymond Hughes (2011-09-02):
-# <a href="http://www.mcil.gov.ws/mcil_publications.html">
# http://www.mcil.gov.ws/mcil_publications.html
-# </a>
#
# here is the official website publication for Samoa DST and dateline change
#
# DST
-# Year End Time Start Time
-# 2011 - - - - - - 24 September 3:00am to 4:00am
-# 2012 01 April 4:00am to 3:00am - - - - - -
+# Year End Time Start Time
+# 2011 - - - - - - 24 September 3:00am to 4:00am
+# 2012 01 April 4:00am to 3:00am - - - - - -
#
# Dateline Change skip Friday 30th Dec 2011
# Thursday 29th December 2011 23:59:59 Hours
# Saturday 31st December 2011 00:00:00 Hours
#
-# Clarification by Tim Parenti (2012-01-03):
-# Although Samoa has used Daylight Saving Time in the 2010-2011 and 2011-2012
-# seasons, there is not yet any indication that this trend will continue on
-# a regular basis. For now, we have explicitly listed the transitions below.
-#
-# From Nicky (2012-09-10):
+# From Nicholas Pereira (2012-09-10):
# Daylight Saving Time commences on Sunday 30th September 2012 and
-# ends on Sunday 7th of April 2013.
-#
-# Please find link below for more information.
+# ends on Sunday 7th of April 2013....
# http://www.mcil.gov.ws/mcil_publications.html
#
-# That publication also includes dates for Summer of 2013/4 as well
-# which give the impression of a pattern in selecting dates for the
-# future, so for now, we will guess this will continue.
+# From Paul Eggert (2014-07-08):
+# That web page currently lists transitions for 2012/3 and 2013/4.
+# Assume the pattern instituted in 2012 will continue indefinitely.
-# Western Samoa
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule WS 2010 only - Sep lastSun 0:00 1 D
+Rule WS 2011 only - Apr Sat>=1 4:00 0 S
+Rule WS 2011 only - Sep lastSat 3:00 1 D
+Rule WS 2012 max - Apr Sun>=1 4:00 0 S
Rule WS 2012 max - Sep lastSun 3:00 1 D
-Rule WS 2012 max - Apr Sun>=1 4:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5
-11:26:56 - LMT 1911
- -11:30 - SAMT 1950 # Samoa Time
- -11:00 - WST 2010 Sep 26
- -11:00 1:00 WSDT 2011 Apr 2 4:00
- -11:00 - WST 2011 Sep 24 3:00
- -11:00 1:00 WSDT 2011 Dec 30
- 13:00 1:00 WSDT 2012 Apr Sun>=1 4:00
+ -11:30 - WSST 1950
+ -11:00 WS S%sT 2011 Dec 29 24:00 # S=Samoa
13:00 WS WS%sT
# Solomon Is
# excludes Bougainville, for which see Papua New Guinea
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara
+Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara
11:00 - SBT # Solomon Is Time
# Tokelau Is
@@ -721,7 +641,7 @@ Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Fakaofo -11:24:56 - LMT 1901
- -11:00 - TKT 2011 Dec 30 # Tokelau Time
+ -11:00 - TKT 2011 Dec 30 # Tokelau Time
13:00 - TKT
# Tonga
@@ -781,8 +701,8 @@ Zone Pacific/Funafuti 11:56:52 - LMT 1901
# time from Operation Newsreel (Hardtack I/Teak shot, 1958-08-01) to the last
# Operation Fishbowl shot (Tightrope, 1962-11-04).... [See] Herman Hoerlin,
# "The United States High-Altitude Test Experience: A Review Emphasizing the
-# Impact on the Environment", Los Alamos LA-6405, Oct 1976
-# <http://www.fas.org/sgp/othergov/doe/lanl/docs1/00322994.pdf>.
+# Impact on the Environment", Los Alamos LA-6405, Oct 1976.
+# http://www.fas.org/sgp/othergov/doe/lanl/docs1/00322994.pdf
# See the table on page 4 where he lists GMT and local times for the tests; a
# footnote for the JI tests reads that local time is "JI time = Hawaii Time
# Minus One Hour".
@@ -797,7 +717,7 @@ Zone Pacific/Funafuti 11:56:52 - LMT 1901
# From Mark Brader (2005-01-23):
# [Fallacies and Fantasies of Air Transport History, by R.E.G. Davies,
# published 1994 by Paladwr Press, McLean, VA, USA; ISBN 0-9626483-5-3]
-# reproduced a Pan American Airways timeables from 1936, for their weekly
+# reproduced a Pan American Airways timetable from 1936, for their weekly
# "Orient Express" flights between San Francisco and Manila, and connecting
# flights to Chicago and the US East Coast. As it uses some time zone
# designations that I've never seen before:....
@@ -807,9 +727,9 @@ Zone Pacific/Funafuti 11:56:52 - LMT 1901
Zone Pacific/Midway -11:49:28 - LMT 1901
-11:00 - NST 1956 Jun 3
-11:00 1:00 NDT 1956 Sep 2
- -11:00 - NST 1967 Apr # N=Nome
- -11:00 - BST 1983 Nov 30 # B=Bering
- -11:00 - SST # S=Samoa
+ -11:00 - NST 1967 Apr # N=Nome
+ -11:00 - BST 1983 Nov 30 # B=Bering
+ -11:00 - SST # S=Samoa
# Palmyra
# uninhabited since World War II; was probably like Pacific/Kiritimati
@@ -829,7 +749,7 @@ Rule Vanuatu 1985 1991 - Sep Sun>=23 0:00 1:00 S
Rule Vanuatu 1992 1993 - Jan Sun>=23 0:00 0 -
Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
+Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
11:00 Vanuatu VU%sT # Vanuatu Time
# Wallis and Futuna
@@ -841,9 +761,10 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# NOTES
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future). For more, please see
+# the file CONTRIBUTING in the tz distribution.
# From Paul Eggert (2013-02-21):
# A good source for time zone historical data outside the U.S. is
@@ -864,165 +785,188 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# I found in the UCLA library.
#
# For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
-# <http://www.jstor.org/stable/1774359>.
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
+# http://www.jstor.org/stable/1774359
#
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
-# I invented the abbreviations marked `*' in the following table;
+# I invented the abbreviations marked '*' in the following table;
# the rest are from earlier versions of this file, or from other sources.
# Corrections are welcome!
-# std dst
-# LMT Local Mean Time
-# 8:00 WST WST Western Australia
-# 8:45 CWST CWST Central Western Australia*
-# 9:00 JST Japan
-# 9:30 CST CST Central Australia
-# 10:00 EST EST Eastern Australia
-# 10:00 ChST Chamorro
-# 10:30 LHST LHST Lord Howe*
-# 11:30 NZMT NZST New Zealand through 1945
-# 12:00 NZST NZDT New Zealand 1946-present
-# 12:45 CHAST CHADT Chatham*
-# -11:00 SST Samoa
-# -10:00 HST Hawaii
-# - 8:00 PST Pitcairn*
-#
-# See the `northamerica' file for Hawaii.
-# See the `southamerica' file for Easter I and the Galapagos Is.
+# std dst
+# LMT Local Mean Time
+# 8:00 AWST AWDT Western Australia
+# 8:45 ACWST ACWDT Central Western Australia*
+# 9:00 JST Japan
+# 9:30 ACST ACDT Central Australia
+# 10:00 AEST AEDT Eastern Australia
+# 10:00 ChST Chamorro
+# 10:30 LHST LHDT Lord Howe*
+# 11:30 NZMT NZST New Zealand through 1945
+# 12:00 NZST NZDT New Zealand 1946-present
+# 12:15 CHAST Chatham through 1945*
+# 12:45 CHAST CHADT Chatham 1946-present*
+# 13:00 WSST WSDT (western) Samoa 2011-present*
+# -11:30 WSST Western Samoa through 1950*
+# -11:00 SST Samoa
+# -10:00 HST Hawaii
+# - 8:00 PST Pitcairn*
+#
+# See the 'northamerica' file for Hawaii.
+# See the 'southamerica' file for Easter I and the Galápagos Is.
###############################################################################
# Australia
+# From Paul Eggert (2014-06-30):
+# Daylight saving time has long been controversial in Australia, pitting
+# region against region, rural against urban, and local against global.
+# For example, in her review of Graeme Davison's _The Unforgiving
+# Minute: how Australians learned to tell the time_ (1993), Perth native
+# Phillipa J Martyr wrote, "The section entitled 'Saving Daylight' was
+# very informative, but was (as can, sadly, only be expected from a
+# Melbourne-based study) replete with the usual chuckleheaded
+# Queenslanders and straw-chewing yokels from the West prattling fables
+# about fading curtains and crazed farm animals."
+# Electronic Journal of Australian and New Zealand History (1997-03-03)
+# http://www.jcu.edu.au/aff/history/reviews/davison.htm
+
# From Paul Eggert (2005-12-08):
-# <a href="http://www.bom.gov.au/climate/averages/tables/dst_times.shtml">
# Implementation Dates of Daylight Saving Time within Australia
-# </a> summarizes daylight saving issues in Australia.
+# http://www.bom.gov.au/climate/averages/tables/dst_times.shtml
+# summarizes daylight saving issues in Australia.
# From Arthur David Olson (2005-12-12):
-# <a href="http://www.lawlink.nsw.gov.au/lawlink/Corporate/ll_agdinfo.nsf/pages/community_relations_daylight_saving">
# Lawlink NSW:Daylight Saving in New South Wales
-# </a> covers New South Wales in particular.
+# http://www.lawlink.nsw.gov.au/lawlink/Corporate/ll_agdinfo.nsf/pages/community_relations_daylight_saving
+# covers New South Wales in particular.
# From John Mackin (1991-03-06):
-# We in Australia have _never_ referred to DST as `daylight' time.
-# It is called `summer' time. Now by a happy coincidence, `summer'
-# and `standard' happen to start with the same letter; hence, the
+# We in Australia have _never_ referred to DST as 'daylight' time.
+# It is called 'summer' time. Now by a happy coincidence, 'summer'
+# and 'standard' happen to start with the same letter; hence, the
# abbreviation does _not_ change...
# The legislation does not actually define abbreviations, at least
# in this State, but the abbreviation is just commonly taken to be the
# initials of the phrase, and the legislation here uniformly uses
-# the phrase `summer time' and does not use the phrase `daylight
+# the phrase 'summer time' and does not use the phrase 'daylight
# time'.
# Announcers on the Commonwealth radio network, the ABC (for Australian
-# Broadcasting Commission), use the phrases `Eastern Standard Time'
-# or `Eastern Summer Time'. (Note, though, that as I say in the
+# Broadcasting Commission), use the phrases 'Eastern Standard Time'
+# or 'Eastern Summer Time'. (Note, though, that as I say in the
# current australasia file, there is really no such thing.) Announcers
# on its overseas service, Radio Australia, use the same phrases
-# prefixed by the word `Australian' when referring to local times;
+# prefixed by the word 'Australian' when referring to local times;
# time announcements on that service, naturally enough, are made in UTC.
-# From Arthur David Olson (1992-03-08):
-# Given the above, what's chosen for year-round use is:
-# CST for any place operating at a GMTOFF of 9:30
-# WST for any place operating at a GMTOFF of 8:00
-# EST for any place operating at a GMTOFF of 10:00
-
-# From Chuck Soper (2006-06-01):
-# I recently found this Australian government web page on time zones:
-# <http://www.australia.gov.au/about-australia-13time>
-# And this government web page lists time zone names and abbreviations:
-# <http://www.bom.gov.au/climate/averages/tables/daysavtm.shtml>
-
-# From Paul Eggert (2001-04-05), summarizing a long discussion about "EST"
-# versus "AEST" etc.:
-#
-# I see the following points of dispute:
-#
-# * How important are unique time zone abbreviations?
-#
-# Here I tend to agree with the point (most recently made by Chris
-# Newman) that unique abbreviations should not be essential for proper
-# operation of software. We have other instances of ambiguity
-# (e.g. "IST" denoting both "Israel Standard Time" and "Indian
-# Standard Time"), and they are not likely to go away any time soon.
-# In the old days, some software mistakenly relied on unique
-# abbreviations, but this is becoming less true with time, and I don't
-# think it's that important to cater to such software these days.
-#
-# On the other hand, there is another motivation for unambiguous
-# abbreviations: it cuts down on human confusion. This is
-# particularly true for Australia, where "EST" can mean one thing for
-# time T and a different thing for time T plus 1 second.
-#
-# * Does the relevant legislation indicate which abbreviations should be used?
-#
-# Here I tend to think that things are a mess, just as they are in
-# many other countries. We Americans are currently disagreeing about
-# which abbreviation to use for the newly legislated Chamorro Standard
-# Time, for example.
-#
-# Personally, I would prefer to use common practice; I would like to
-# refer to legislation only for examples of common practice, or as a
-# tiebreaker.
-#
-# * Do Australians more often use "Eastern Daylight Time" or "Eastern
-# Summer Time"? Do they typically prefix the time zone names with
-# the word "Australian"?
-#
-# My own impression is that both "Daylight Time" and "Summer Time" are
-# common and are widely understood, but that "Summer Time" is more
-# popular; and that the leading "A" is also common but is omitted more
-# often than not. I just used AltaVista advanced search and got the
-# following count of page hits:
-#
-# 1,103 "Eastern Summer Time" AND domain:au
-# 971 "Australian Eastern Summer Time" AND domain:au
-# 613 "Eastern Daylight Time" AND domain:au
-# 127 "Australian Eastern Daylight Time" AND domain:au
-#
-# Here "Summer" seems quite a bit more popular than "Daylight",
-# particularly when we know the time zone is Australian and not US,
-# say. The "Australian" prefix seems to be popular for Eastern Summer
-# Time, but unpopular for Eastern Daylight Time.
-#
-# For abbreviations, tools like AltaVista are less useful because of
-# ambiguity. Many hits are not really time zones, unfortunately, and
-# many hits denote US time zones and not Australian ones. But here
-# are the hit counts anyway:
-#
-# 161,304 "EST" and domain:au
-# 25,156 "EDT" and domain:au
-# 18,263 "AEST" and domain:au
-# 10,416 "AEDT" and domain:au
-#
-# 14,538 "CST" and domain:au
-# 5,728 "CDT" and domain:au
-# 176 "ACST" and domain:au
-# 29 "ACDT" and domain:au
-#
-# 7,539 "WST" and domain:au
-# 68 "AWST" and domain:au
-#
-# This data suggest that Australians tend to omit the "A" prefix in
-# practice. The situation for "ST" versus "DT" is less clear, given
-# the ambiguities involved.
-#
-# * How do Australians feel about the abbreviations in the tz database?
-#
-# If you just count Australians on this list, I count 2 in favor and 3
-# against. One of the "against" votes (David Keegel) counseled delay,
-# saying that both AEST/AEDT and EST/EST are widely used and
-# understood in Australia.
+# From Paul Eggert (2014-06-30):
+#
+# Inspired by Mackin's remarks quoted above, earlier versions of this
+# file used "EST" for both Eastern Standard Time and Eastern Summer
+# Time in Australia, and similarly for "CST", "CWST", and "WST".
+# However, these abbreviations were confusing and were not common
+# practice among Australians, and there were justifiable complaints
+# about them, so I attempted to survey current Australian usage.
+# For the tz database, the full English phrase is not that important;
+# what matters is the abbreviation. It's difficult to survey the web
+# directly for abbreviation usage, as there are so many false hits for
+# strings like "EST" and "EDT", so I looked for pages that defined an
+# abbreviation for eastern or central DST in Australia, and got the
+# following numbers of unique hits for the listed Google queries:
+#
+# 10 "Eastern Daylight Time AEST" site:au [some are false hits]
+# 10 "Eastern Summer Time AEST" site:au
+# 10 "Summer Time AEDT" site:au
+# 13 "EDST Eastern Daylight Saving Time" site:au
+# 18 "Summer Time ESST" site:au
+# 28 "Eastern Daylight Saving Time EDST" site:au
+# 39 "EDT Eastern Daylight Time" site:au [some are false hits]
+# 53 "Eastern Daylight Time EDT" site:au [some are false hits]
+# 54 "AEDT Australian Eastern Daylight Time" site:au
+# 182 "Eastern Daylight Time AEDT" site:au
+#
+# 17 "Central Daylight Time CDT" site:au [some are false hits]
+# 46 "Central Daylight Time ACDT" site:au
+#
+# I tried several other variants (e.g., "Eastern Summer Time EST") but
+# they all returned fewer than 10 unique hits. I also looked for pages
+# mentioning both "western standard time" and an abbreviation, since
+# there is no WST in the US to generate false hits, and found:
+#
+# 156 "western standard time" AWST site:au
+# 226 "western standard time" WST site:au
+#
+# I then surveyed the top ten newspapers in Australia by circulation as
+# listed in Wikipedia, using Google queries like "AEDT site:heraldsun.com.au"
+# and obtaining estimated counts from the initial page of search results.
+# All ten papers greatly preferred "AEDT" to "EDT". The papers
+# surveyed were the Herald Sun, The Daily Telegraph, The Courier-Mail,
+# The Sydney Morning Herald, The West Australian, The Age, The Advertiser,
+# The Australian, The Financial Review, and The Herald (Newcastle).
+#
+# I also searched for historical usage, to see whether abbreviations
+# like "AEDT" are new. A Trove search <http://trove.nla.gov.au/>
+# found only one newspaper (The Canberra Times) with a house style
+# dating back to the 1970s, I expect because other newspapers weren't
+# fully indexed. The Canberra Times strongly preferred abbreviations
+# like "AEDT". The first occurrence of "AEDT" was a World Weather
+# column (1971-11-17, page 24), and of "ACDT" was a Scoreboard column
+# (1993-01-24, p 16). The style was the typical usage but was not
+# strictly enforced; for example, "Welcome to the twilight zones ..."
+# (1994-10-29, p 1) uses the abbreviations AEST/AEDT, CST/CDT, and
+# WST, and goes on to say, "The confusion and frustration some feel
+# about the lack of uniformity among Australia's six states and two
+# territories has prompted one group to form its very own political
+# party -- the Sydney-based Daylight Saving Extension Party."
+#
+# I also surveyed federal government sources. They did not agree:
+#
+# The Australian Government (2014-03-26)
+# http://australia.gov.au/about-australia/our-country/time
+# (This document was produced by the Department of Finance.)
+# AEST ACST AWST AEDT ACDT
+#
+# Bureau of Meteorology (2012-11-08)
+# http://www.bom.gov.au/climate/averages/tables/daysavtm.shtml
+# EST CST WST EDT CDT
+#
+# Civil Aviation Safety Authority (undated)
+# http://services.casa.gov.au/outnback/inc/pages/episode3/episode-3_time_zones.shtml
+# EST CST WST (no abbreviations given for DST)
+#
+# Geoscience Australia (2011-11-24)
+# http://www.ga.gov.au/geodesy/astro/sunrise.jsp
+# AEST ACST AWST AEDT ACDT
+#
+# Parliamentary Library (2008-11-10)
+# http://www.aph.gov.au/binaries/library/pubs/rp/2008-09/09rp14.pdf
+# EST CST WST preferred for standard time; AEST AEDT ACST ACDT also used
+#
+# The Transport Safety Bureau has an extensive series of accident reports,
+# and investigators seem to use whatever abbreviation they like.
+# Googling site:atsb.gov.au found the following number of unique hits:
+# 311 "ESuT", 195 "EDT", 26 "AEDT", 83 "CSuT", 46 "CDT".
+# "_SuT" tended to appear in older reports, and "A_DT" tended to
+# appear in reports of events with international implications.
+#
+# From the above it appears that there is a working consensus in
+# Australia to use trailing "DT" for daylight saving time; although
+# some sources use trailing "SST" or "ST" or "SuT" they are by far in
+# the minority. The case for leading "A" is weaker, but since it
+# seems to be preferred in the overall web and is preferred in all
+# the leading newspaper websites and in many government departments,
+# it has a stronger case than omitting the leading "A". The current
+# version of the database therefore uses abbreviations like "AEST" and
+# "AEDT" for Australian time zones.
# From Paul Eggert (1995-12-19):
# Shanks & Pottenger report 2:00 for all autumn changes in Australia and NZ.
# Mark Prior writes that his newspaper
# reports that NSW's fall 1995 change will occur at 2:00,
# but Robert Elz says it's been 3:00 in Victoria since 1970
-# and perhaps the newspaper's `2:00' is referring to standard time.
+# and perhaps the newspaper's '2:00' is referring to standard time.
# For now we'll continue to assume 2:00s for changes since 1960.
# From Eric Ulevik (1998-01-05):
@@ -1032,17 +976,14 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# relevant entries in this database.
#
# NSW (including LHI and Broken Hill):
-# <a href="http://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html">
# Standard Time Act 1987 (updated 1995-04-04)
-# </a>
+# http://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html
# ACT
-# <a href="http://www.austlii.edu.au/au/legis/act/consol_act/stasta1972279/index.html">
# Standard Time and Summer Time Act 1972
-# </a>
+# http://www.austlii.edu.au/au/legis/act/consol_act/stasta1972279/index.html
# SA
-# <a href="http://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html">
# Standard Time Act, 1898
-# </a>
+# http://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html
# From David Grosz (2005-06-13):
# It was announced last week that Daylight Saving would be extended by
@@ -1060,7 +1001,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# Victoria: I wasn't able to find anything separate, but the other articles
# allude to it.
# But not Queensland
-# http://www.news.com.au/story/0,10117,15564030-1248,00.html.
+# http://www.news.com.au/story/0,10117,15564030-1248,00.html
# Northern Territory
@@ -1107,9 +1048,9 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# The 1992 ending date used in the rules is a best guess;
# it matches what was used in the past.
-# <a href="http://www.bom.gov.au/faq/faqgen.htm">
# The Australian Bureau of Meteorology FAQ
-# </a> (1999-09-27) writes that Giles Meteorological Station uses
+# http://www.bom.gov.au/faq/faqgen.htm
+# (1999-09-27) writes that Giles Meteorological Station uses
# South Australian time even though it's located in Western Australia.
# Queensland
@@ -1150,9 +1091,9 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# The chosen rules the union of the 1971/1972 change and the 1989-1992 changes.
# From Christopher Hunt (2006-11-21), after an advance warning
-# from Jesper Norgaard Welen (2006-11-01):
+# from Jesper Nørgaard Welen (2006-11-01):
# WA are trialing DST for three years.
-# <http://www.parliament.wa.gov.au/parliament/bills.nsf/9A1B183144403DA54825721200088DF1/$File/Bill175-1B.pdf>
+# http://www.parliament.wa.gov.au/parliament/bills.nsf/9A1B183144403DA54825721200088DF1/$File/Bill175-1B.pdf
# From Rives McDow (2002-04-09):
# The most interesting region I have found consists of three towns on the
@@ -1166,7 +1107,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# From Paul Eggert (2002-04-09):
# This is confirmed by the section entitled
# "What's the deal with time zones???" in
-# <http://www.earthsci.unimelb.edu.au/~awatkins/null.html>.
+# http://www.earthsci.unimelb.edu.au/~awatkins/null.html
#
# From Alex Livingston (2006-12-07):
# ... it was just on four years ago that I drove along the Eyre Highway,
@@ -1314,7 +1255,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# Based on law library research by John Mackin,
# who notes:
# In Australia, time is not legislated federally, but rather by the
-# individual states. Thus, while such terms as ``Eastern Standard Time''
+# individual states. Thus, while such terms as "Eastern Standard Time"
# [I mean, of course, Australian EST, not any other kind] are in common
# use, _they have NO REAL MEANING_, as they are not defined in the
# legislation. This is very important to understand.
@@ -1322,48 +1263,42 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# From Eric Ulevik (1999-05-26):
# DST will start in NSW on the last Sunday of August, rather than the usual
-# October in 2000. [See: Matthew Moore,
-# <a href="http://www.smh.com.au/news/9905/26/pageone/pageone4.html">
-# Two months more daylight saving
-# </a>
-# Sydney Morning Herald (1999-05-26).]
+# October in 2000. See: Matthew Moore,
+# Two months more daylight saving, Sydney Morning Herald (1999-05-26).
+# http://www.smh.com.au/news/9905/26/pageone/pageone4.html
# From Paul Eggert (1999-09-27):
# See the following official NSW source:
-# <a href="http://dir.gis.nsw.gov.au/cgi-bin/genobject/document/other/daylightsaving/tigGmZ">
# Daylight Saving in New South Wales.
-# </a>
+# http://dir.gis.nsw.gov.au/cgi-bin/genobject/document/other/daylightsaving/tigGmZ
#
# Narrabri Shire (NSW) council has announced it will ignore the extension of
# daylight saving next year. See:
-# <a href="http://abc.net.au/news/regionals/neweng/monthly/regeng-22jul1999-1.htm">
# Narrabri Council to ignore daylight saving
-# </a> (1999-07-22). For now, we'll wait to see if this really happens.
+# http://abc.net.au/news/regionals/neweng/monthly/regeng-22jul1999-1.htm
+# (1999-07-22). For now, we'll wait to see if this really happens.
#
# Victoria will following NSW. See:
-# <a href="http://abc.net.au/local/news/olympics/1999/07/item19990728112314_1.htm">
-# Vic to extend daylight saving
-# </a> (1999-07-28).
+# Vic to extend daylight saving (1999-07-28)
+# http://abc.net.au/local/news/olympics/1999/07/item19990728112314_1.htm
#
# However, South Australia rejected the DST request. See:
-# <a href="http://abc.net.au/news/olympics/1999/07/item19990719151754_1.htm">
-# South Australia rejects Olympics daylight savings request
-# </a> (1999-07-19).
+# South Australia rejects Olympics daylight savings request (1999-07-19)
+# http://abc.net.au/news/olympics/1999/07/item19990719151754_1.htm
#
# Queensland also will not observe DST for the Olympics. See:
-# <a href="http://abc.net.au/news/olympics/1999/06/item19990601114608_1.htm">
# Qld says no to daylight savings for Olympics
-# </a> (1999-06-01), which quotes Queensland Premier Peter Beattie as saying
-# ``Look you've got to remember in my family when this came up last time
+# http://abc.net.au/news/olympics/1999/06/item19990601114608_1.htm
+# (1999-06-01), which quotes Queensland Premier Peter Beattie as saying
+# "Look you've got to remember in my family when this came up last time
# I voted for it, my wife voted against it and she said to me it's all very
# well for you, you don't have to worry about getting the children out of
# bed, getting them to school, getting them to sleep at night.
-# I've been through all this argument domestically...my wife rules.''
+# I've been through all this argument domestically...my wife rules."
#
# Broken Hill will stick with South Australian time in 2000. See:
-# <a href="http://abc.net.au/news/regionals/brokenh/monthly/regbrok-21jul1999-6.htm">
-# Broken Hill to be behind the times
-# </a> (1999-07-21).
+# Broken Hill to be behind the times (1999-07-21)
+# http://abc.net.au/news/regionals/brokenh/monthly/regbrok-21jul1999-6.htm
# IATA SSIM (1998-09) says that the spring 2000 change for Australian
# Capital Territory, New South Wales except Lord Howe Island and Broken
@@ -1379,7 +1314,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# Yancowinna
# From John Mackin (1989-01-04):
-# `Broken Hill' means the County of Yancowinna.
+# 'Broken Hill' means the County of Yancowinna.
# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
# # YANCOWINNA.. [ Confirmation courtesy of Broken Hill Postmaster ]
@@ -1436,9 +1371,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# summer (southern hemisphere).
#
# From
-# <a href="http://www.safework.sa.gov.au/uploaded_files/DaylightDatesSet.pdf">
# http://www.safework.sa.gov.au/uploaded_files/DaylightDatesSet.pdf
-# </a>
# The extended daylight saving period that South Australia has been trialling
# for over the last year is now set to be ongoing.
# Daylight saving will continue to start on the first Sunday in October each
@@ -1448,9 +1381,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# the ACT for all 52 weeks of the year...
#
# We have a wrap-up here:
-# <a href="http://www.timeanddate.com/news/time/south-australia-extends-dst.html">
# http://www.timeanddate.com/news/time/south-australia-extends-dst.html
-# </a>
###############################################################################
# New Zealand
@@ -1459,7 +1390,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# the 1989/90 year was a trial of an extended "daylight saving" period.
# This trial was deemed successful and the extended period adopted for
# subsequent years (with the addition of a further week at the start).
-# source -- phone call to Ministry of Internal Affairs Head Office.
+# source - phone call to Ministry of Internal Affairs Head Office.
# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
# # The Country of New Zealand (Australia's east island -) Gee they hate that!
@@ -1501,6 +1432,19 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# that DST will begin on 2007-09-30 2008-04-06.
# http://www.dia.govt.nz/diawebsite.nsf/wpg_URL/Services-Daylight-Saving-Daylight-saving-to-be-extended
+# From Paul Eggert (2014-07-14):
+# Chatham Island time was formally standardized on 1957-01-01 by
+# New Zealand's Standard Time Amendment Act 1956 (1956-10-26).
+# http://www.austlii.edu.au/nz/legis/hist_act/staa19561956n100244.pdf
+# According to Google Books snippet view, a speaker in the New Zealand
+# parliamentary debates in 1956 said "Clause 78 makes provision for standard
+# time in the Chatham Islands. The time there is 45 minutes in advance of New
+# Zealand time. I understand that is the time they keep locally, anyhow."
+# For now, assume this practice goes back to the introduction of standard time
+# in New Zealand, as this would make Chatham Islands time almost exactly match
+# LMT back when New Zealand was at UTC+11:30; also, assume Chatham Islands did
+# not observe New Zealand's prewar DST.
+
###############################################################################
@@ -1520,7 +1464,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# From the BBC World Service in
# http://news.bbc.co.uk/2/hi/asia-pacific/205226.stm (1998-10-31 16:03 UTC):
-# The Fijiian government says the main reasons for the time change is to
+# The Fijian government says the main reasons for the time change is to
# improve productivity and reduce road accidents.... [T]he move is also
# intended to boost Fiji's ability to attract tourists to witness the dawning
# of the new millennium.
@@ -1528,16 +1472,12 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# http://www.fiji.gov.fj/press/2000_09/2000_09_13-05.shtml (2000-09-13)
# reports that Fiji has discontinued DST.
-# Johnston
-
-# Johnston data is from usno1995.
-
# Kiribati
# From Paul Eggert (1996-01-22):
# Today's _Wall Street Journal_ (page 1) reports that Kiribati
-# ``declared it the same day [throughout] the country as of Jan. 1, 1995''
+# "declared it the same day [throughout] the country as of Jan. 1, 1995"
# as part of the competition to be first into the 21st century.
@@ -1552,8 +1492,8 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# N Mariana Is, Guam
-# Howse writes (p 153) ``The Spaniards, on the other hand, reached the
-# Philippines and the Ladrones from America,'' and implies that the Ladrones
+# Howse writes (p 153) "The Spaniards, on the other hand, reached the
+# Philippines and the Ladrones from America," and implies that the Ladrones
# (now called the Marianas) kept American date for quite some time.
# For now, we assume the Ladrones switched at the same time as the Philippines;
# see Asia/Manila.
@@ -1567,17 +1507,16 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# Micronesia
# Alan Eugene Davis writes (1996-03-16),
-# ``I am certain, having lived there for the past decade, that "Truk"
-# (now properly known as Chuuk) ... is in the time zone GMT+10.''
+# "I am certain, having lived there for the past decade, that 'Truk'
+# (now properly known as Chuuk) ... is in the time zone GMT+10."
#
# Shanks & Pottenger write that Truk switched from UTC+10 to UTC+11
# on 1978-10-01; ignore this for now.
# From Paul Eggert (1999-10-29):
# The Federated States of Micronesia Visitors Board writes in
-# <a href="http://www.fsmgov.org/info/clocks.html">
-# The Federated States of Micronesia - Visitor Information
-# </a> (1999-01-26)
+# The Federated States of Micronesia - Visitor Information (1999-01-26)
+# http://www.fsmgov.org/info/clocks.html
# that Truk and Yap are UTC+10, and Ponape and Kosrae are UTC+11.
# We don't know when Kosrae switched from UTC+12; assume January 1 for now.
@@ -1623,27 +1562,34 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# Sacramento but it was changed a couple of years ago.
-# Samoa
+# (Western) Samoa and American Samoa
# Howse writes (p 153, citing p 10 of the 1883-11-18 New York Herald)
# that in 1879 the King of Samoa decided to change
-# ``the date in his kingdom from the Antipodean to the American system,
-# ordaining -- by a masterpiece of diplomatic flattery -- that
-# the Fourth of July should be celebrated twice in that year.''
-
+# "the date in his kingdom from the Antipodean to the American system,
+# ordaining - by a masterpiece of diplomatic flattery - that
+# the Fourth of July should be celebrated twice in that year."
+
+# Although Shanks & Pottenger says they both switched to UTC-11:30
+# in 1911, and to UTC-11 in 1950. many earlier sources give UTC-11
+# for American Samoa, e.g., the US National Bureau of Standards
+# circular "Standard Time Throughout the World", 1932.
+# Assume American Samoa switched to UTC-11 in 1911, not 1950,
+# and that after 1950 they agreed until (western) Samoa skipped a
+# day in 2011. Assume also that the Samoas follow the US and New
+# Zealand's "ST"/"DT" style of daylight-saving abbreviations.
# Tonga
# From Paul Eggert (1996-01-22):
-# Today's _Wall Street Journal_ (p 1) reports that ``Tonga has been plotting
-# to sneak ahead of [New Zealanders] by introducing daylight-saving time.''
+# Today's _Wall Street Journal_ (p 1) reports that "Tonga has been plotting
+# to sneak ahead of [New Zealanders] by introducing daylight-saving time."
# Since Kiribati has moved the Date Line it's not clear what Tonga will do.
# Don Mundell writes in the 1997-02-20 Tonga Chronicle
-# <a href="http://www.tongatapu.net.to/tonga/homeland/timebegins.htm">
-# How Tonga became `The Land where Time Begins'
-# </a>:
-
+# How Tonga became 'The Land where Time Begins':
+# http://www.tongatapu.net.to/tonga/homeland/timebegins.htm
+#
# Until 1941 Tonga maintained a standard time 50 minutes ahead of NZST
# 12 hours and 20 minutes ahead of GMT. When New Zealand adjusted its
# standard time in 1940s, Tonga had the choice of subtracting from its
@@ -1651,8 +1597,8 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# advancing its time to maintain the differential of 13 degrees
# (approximately 50 minutes ahead of New Zealand time).
#
-# Because His Majesty King Taufa'ahau Tupou IV, then Crown Prince
-# Tungi, preferred to ensure Tonga's title as the land where time
+# Because His Majesty King Tāufaʻāhau Tupou IV, then Crown Prince
+# Tungī, preferred to ensure Tonga's title as the land where time
# begins, the Legislative Assembly approved the latter change.
#
# But some of the older, more conservative members from the outer
@@ -1678,9 +1624,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# * Tonga will introduce DST in November
#
# I was given this link by John Letts:
-# <a href="http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm">
# http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm
-# </a>
#
# I have not been able to find exact dates for the transition in November
# yet. By reading this article it seems like Fiji will be 14 hours ahead
@@ -1688,9 +1632,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# (12 + 1 hour DST).
# From Arthur David Olson (1999-09-20):
-# According to <a href="http://www.tongaonline.com/news/sept1799.html">
-# http://www.tongaonline.com/news/sept1799.html
-# </a>:
+# According to <http://www.tongaonline.com/news/sept1799.html>:
# "Daylight Savings Time will take effect on Oct. 2 through April 15, 2000
# and annually thereafter from the first Saturday in October through the
# third Saturday of April. Under the system approved by Privy Council on
@@ -1708,7 +1650,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# instead of the original reported date April 16. Unfortunately, the article
# is no longer available on the site, and I did not make a copy of the
# text, and I have forgotten to report it here.
-# (Original URL was: http://www.tongaonline.com/news/march162000.htm )
+# (Original URL was <http://www.tongaonline.com/news/march162000.htm>)
# From Rives McDow (2000-12-01):
# Tonga is observing DST as of 2000-11-04 and will stop on 2001-01-27.
@@ -1728,7 +1670,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# From Vernice Anderson, Personal Secretary to Philip Jessup,
# US Ambassador At Large (oral history interview, 1971-02-02):
#
-# Saturday, the 14th [of October, 1950] -- ... The time was all the
+# Saturday, the 14th [of October, 1950] - ... The time was all the
# more confusing at that point, because we had crossed the
# International Date Line, thus getting two Sundays. Furthermore, we
# discovered that Wake Island had two hours of daylight saving time
@@ -1773,7 +1715,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# on the high seas. Whenever a ship was within the territorial waters of any
# nation it would use that nation's standard time. The captain was permitted
# to change his ship's clocks at a time of his choice following his ship's
-# entry into another zone time--he often chose midnight. These zones were
+# entry into another zone time - he often chose midnight. These zones were
# adopted by all major fleets between 1920 and 1925 but not by many
# independent merchant ships until World War II.
@@ -1781,6 +1723,6 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# (2005-03-20):
#
# The American Practical Navigator (2002)
-# <http://pollux.nss.nima.mil/pubs/pubs_j_apn_sections.html?rid=187>
+# http://pollux.nss.nima.mil/pubs/pubs_j_apn_sections.html?rid=187
# talks only about the 180-degree meridian with respect to ships in
# international waters; it ignores the international date line.
diff --git a/elsie.nci.nih.gov/src/backward b/elsie.nci.nih.gov/src/backward
index 06fb192..00cbfc4 100644
--- a/elsie.nci.nih.gov/src/backward
+++ b/elsie.nci.nih.gov/src/backward
@@ -1,12 +1,12 @@
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
# This file provides links between current names for time zones
# and their old names. Many names changed in late 1993.
+# Link TARGET LINK-NAME
Link Africa/Asmara Africa/Asmera
-Link Africa/Bamako Africa/Timbuktu
+Link Africa/Abidjan Africa/Timbuktu
Link America/Argentina/Catamarca America/Argentina/ComodRivadavia
Link America/Adak America/Atka
Link America/Argentina/Buenos_Aires America/Buenos_Aires
@@ -27,8 +27,11 @@ Link America/Port_of_Spain America/Virgin
Link Pacific/Auckland Antarctica/South_Pole
Link Asia/Ashgabat Asia/Ashkhabad
Link Asia/Kolkata Asia/Calcutta
-Link Asia/Chongqing Asia/Chungking
+Link Asia/Shanghai Asia/Chongqing
+Link Asia/Shanghai Asia/Chungking
Link Asia/Dhaka Asia/Dacca
+Link Asia/Shanghai Asia/Harbin
+Link Asia/Urumqi Asia/Kashgar
Link Asia/Kathmandu Asia/Katmandu
Link Asia/Macau Asia/Macao
Link Asia/Ho_Chi_Minh Asia/Saigon
diff --git a/elsie.nci.nih.gov/src/backzone b/elsie.nci.nih.gov/src/backzone
new file mode 100644
index 0000000..d9183cd
--- /dev/null
+++ b/elsie.nci.nih.gov/src/backzone
@@ -0,0 +1,428 @@
+# Zones that go back beyond the scope of the tz database
+
+# This file is in the public domain.
+
+# This file is by no means authoritative; if you think you know
+# better, go ahead and edit it (and please send any changes to
+# tz@iana.org for general use in the future). For more, please see
+# the file CONTRIBUTING in the tz distribution.
+
+
+# From Paul Eggert (2014-08-12):
+
+# This file contains data outside the normal scope of the tz database,
+# in that its zones do not differ from normal tz zones after 1970.
+# Links in this file point to zones in this file, superseding links in
+# the file 'backward'.
+
+# Although zones in this file may be of some use for analyzing
+# pre-1970 time stamps, they are less reliable, cover only a tiny
+# sliver of the pre-1970 era, and cannot feasibly be improved to cover
+# most of the era. Because the zones are out of normal scope for the
+# database, less effort is put into maintaining this file. Many of
+# the zones were formerly in other source files, but were removed or
+# replaced by links as their data entries were questionable and/or they
+# differed from other zones only in pre-1970 time stamps.
+
+# Unless otherwise specified, the source for the data is the following,
+# which does not itself cite sources and is often wrong:
+#
+# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
+# San Diego: ACS Publications, Inc. (2003).
+
+# This file is not intended to be compiled standalone, as it
+# assumes rules from other files. In the tz distribution, use
+# 'make posix_packrat' to compile this file.
+
+# Zones are sorted by zone name. Each zone is preceded by the
+# name of the country that the zone is in, along with any other
+# commentary and rules associated with the entry.
+#
+# As explained in the zic man page, the zone columns are:
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+
+# Mali (southern)
+Zone Africa/Bamako -0:32:00 - LMT 1912
+ 0:00 - GMT 1934 Feb 26
+ -1:00 - WAT 1960 Jun 20
+ 0:00 - GMT
+
+# Central African Republic
+Zone Africa/Bangui 1:14:20 - LMT 1912
+ 1:00 - WAT
+
+# Gambia
+Zone Africa/Banjul -1:06:36 - LMT 1912
+ -1:06:36 - BMT 1935 # Banjul Mean Time
+ -1:00 - WAT 1964
+ 0:00 - GMT
+
+# Republic of the Congo
+Zone Africa/Brazzaville 1:01:08 - LMT 1912
+ 1:00 - WAT
+
+# Guinea
+Zone Africa/Conakry -0:54:52 - LMT 1912
+ 0:00 - GMT 1934 Feb 26
+ -1:00 - WAT 1960
+ 0:00 - GMT
+
+# Senegal
+Zone Africa/Dakar -1:09:44 - LMT 1912
+ -1:00 - WAT 1941 Jun
+ 0:00 - GMT
+
+# Cameroon
+# Whitman says they switched to 1:00 in 1920; go with Shanks & Pottenger.
+Zone Africa/Douala 0:38:48 - LMT 1912
+ 1:00 - WAT
+# Sierra Leone
+# From Paul Eggert (2014-08-12):
+# The following table is from Shanks & Pottenger, but it can't be right.
+# Whitman gives Mar 31 - Aug 31 for 1931 on.
+# The International Hydrographic Bulletin, 1932-33, p 63 says that
+# Sierra Leone would advance its clocks by 20 minutes on 1933-10-01.
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule SL 1935 1942 - Jun 1 0:00 0:40 SLST
+Rule SL 1935 1942 - Oct 1 0:00 0 WAT
+Rule SL 1957 1962 - Jun 1 0:00 1:00 SLST
+Rule SL 1957 1962 - Sep 1 0:00 0 GMT
+Zone Africa/Freetown -0:53:00 - LMT 1882
+ -0:53:00 - FMT 1913 Jun # Freetown Mean Time
+ -1:00 SL %s 1957
+ 0:00 SL %s
+
+# South Sudan
+Zone Africa/Juba 2:06:24 - LMT 1931
+ 2:00 Sudan CA%sT 2000 Jan 15 12:00
+ 3:00 - EAT
+
+# Democratic Republic of the Congo (west)
+Zone Africa/Kinshasa 1:01:12 - LMT 1897 Nov 9
+ 1:00 - WAT
+
+# Gabon
+Zone Africa/Libreville 0:37:48 - LMT 1912
+ 1:00 - WAT
+
+# Angola
+#
+# Shanks gives 1911-05-26 for the transition to WAT,
+# evidently confusing the date of the Portuguese decree
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# with the date that it took effect, namely 1912-01-01.
+#
+Zone Africa/Luanda 0:52:56 - LMT 1892
+ 0:52:04 - AOT 1912 Jan 1 # Angola Time
+ 1:00 - WAT
+
+# Togo
+Zone Africa/Lome 0:04:52 - LMT 1893
+ 0:00 - GMT
+
+# Equatorial Guinea
+#
+# Although Shanks says that Malabo switched from UTC to UTC+1 on 1963-12-15,
+# a Google Books search says that London Calling, Issues 432-465 (1948), p 19,
+# says that Spanish Guinea was at GMT+1 back then. The Shanks data entries
+# are most likely wrong, but we have nothing better; use them here for now.
+#
+Zone Africa/Malabo 0:35:08 - LMT 1912
+ 0:00 - GMT 1963 Dec 15
+ 1:00 - WAT
+
+# Niger
+Zone Africa/Niamey 0:08:28 - LMT 1912
+ -1:00 - WAT 1934 Feb 26
+ 0:00 - GMT 1960
+ 1:00 - WAT
+
+# Mauritania
+Zone Africa/Nouakchott -1:03:48 - LMT 1912
+ 0:00 - GMT 1934 Feb 26
+ -1:00 - WAT 1960 Nov 28
+ 0:00 - GMT
+
+# Burkina Faso
+Zone Africa/Ouagadougou -0:06:04 - LMT 1912
+ 0:00 - GMT
+
+# Benin
+# Whitman says they switched to 1:00 in 1946, not 1934;
+# go with Shanks & Pottenger.
+Zone Africa/Porto-Novo 0:10:28 - LMT 1912 Jan 1
+ 0:00 - GMT 1934 Feb 26
+ 1:00 - WAT
+
+# São Tomé and Príncipe
+Zone Africa/Sao_Tome 0:26:56 - LMT 1884
+ -0:36:32 - LMT 1912 # Lisbon Mean Time
+ 0:00 - GMT
+
+# Mali (northern)
+Zone Africa/Timbuktu -0:12:04 - LMT 1912
+ 0:00 - GMT
+
+# Anguilla
+Zone America/Anguilla -4:12:16 - LMT 1912 Mar 2
+ -4:00 - AST
+
+# Chubut, Argentina
+# The name "Comodoro Rivadavia" exceeds the 14-byte POSIX limit.
+Zone America/Argentina/ComodRivadavia -4:30:00 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Mar 3
+ -4:00 - WART 1991 Oct 20
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 - ART 2004 Jun 1
+ -4:00 - WART 2004 Jun 20
+ -3:00 - ART
+
+# Aruba
+Zone America/Aruba -4:40:24 - LMT 1912 Feb 12 # Oranjestad
+ -4:30 - ANT 1965 # Netherlands Antilles Time
+ -4:00 - AST
+
+# Canada
+Zone America/Coral_Harbour -5:32:40 - LMT 1884
+ -5:00 NT_YK E%sT 1946
+ -5:00 - EST
+
+# Dominica
+Zone America/Dominica -4:05:36 - LMT 1911 Jul 1 0:01 # Roseau
+ -4:00 - AST
+
+# Baja California
+# See 'northamerica' for why this entry is here rather than there.
+Zone America/Ensenada -7:46:28 - LMT 1922 Jan 1 0:13:32
+ -8:00 - PST 1927 Jun 10 23:00
+ -7:00 - MST 1930 Nov 16
+ -8:00 - PST 1942 Apr
+ -7:00 - MST 1949 Jan 14
+ -8:00 - PST 1996
+ -8:00 Mexico P%sT
+
+# Grenada
+Zone America/Grenada -4:07:00 - LMT 1911 Jul # St George's
+ -4:00 - AST
+
+# Guadeloupe
+Zone America/Guadeloupe -4:06:08 - LMT 1911 Jun 8 # Pointe-à-Pitre
+ -4:00 - AST
+
+# Montserrat
+# From Paul Eggert (2006-03-22):
+# In 1995 volcanic eruptions forced evacuation of Plymouth, the capital.
+# world.gazetteer.com says Cork Hill is the most populous location now.
+Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Cork Hill
+ -4:00 - AST
+
+# Argentina
+# This entry was intended for the following areas, but has been superseded by
+# more detailed zones.
+# Santa Fe (SF), Entre Ríos (ER), Corrientes (CN), Misiones (MN), Chaco (CC),
+# Formosa (FM), La Pampa (LP), Chubut (CH)
+Zone America/Rosario -4:02:40 - LMT 1894 Nov
+ -4:16:44 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Jul
+ -3:00 - ART 1999 Oct 3 0:00
+ -4:00 Arg AR%sT 2000 Mar 3 0:00
+ -3:00 - ART
+
+# St Kitts-Nevis
+Zone America/St_Kitts -4:10:52 - LMT 1912 Mar 2 # Basseterre
+ -4:00 - AST
+
+# St Lucia
+Zone America/St_Lucia -4:04:00 - LMT 1890 # Castries
+ -4:04:00 - CMT 1912 # Castries Mean Time
+ -4:00 - AST
+
+# Virgin Is
+Zone America/St_Thomas -4:19:44 - LMT 1911 Jul # Charlotte Amalie
+ -4:00 - AST
+
+# St Vincent and the Grenadines
+Zone America/St_Vincent -4:04:56 - LMT 1890 # Kingstown
+ -4:04:56 - KMT 1912 # Kingstown Mean Time
+ -4:00 - AST
+
+# British Virgin Is
+Zone America/Tortola -4:18:28 - LMT 1911 Jul # Road Town
+ -4:00 - AST
+
+# McMurdo, Ross Island, since 1955-12
+Zone Antarctica/McMurdo 0 - zzz 1956
+ 12:00 NZ NZ%sT
+Link Antarctica/McMurdo Antarctica/South_Pole
+
+# India
+# From Paul Eggert (2014-08-21):
+# In tomorrow's The Hindu, Nitya Menon reports that India had two civil time
+# zones starting in 1884, one in Bombay and one in Calcutta, and that railways
+# used a third time zone based on Madras time (80 deg. 18'30" E). Also,
+# in 1881 Bombay briefly switched to Madras time, but switched back. See:
+# http://www.thehindu.com/news/cities/chennai/madras-375-when-madras-clocked-the-time/article6339393.ece
+#Zone Asia/Chennai [not enough info to complete]
+
+# China
+# Changbai Time ("Long-white Time", Long-white = Heilongjiang area)
+# Heilongjiang (except Mohe county), Jilin
+Zone Asia/Harbin 8:26:44 - LMT 1928 # or Haerbin
+ 8:30 - CHAT 1932 Mar # Changbai Time
+ 8:00 - CST 1940
+ 9:00 - CHAT 1966 May
+ 8:30 - CHAT 1980 May
+ 8:00 PRC C%sT
+
+# China
+# Long-shu Time (probably due to Long and Shu being two names of that area)
+# Guangxi, Guizhou, Hainan, Ningxia, Sichuan, Shaanxi, and Yunnan;
+# most of Gansu; west Inner Mongolia; west Qinghai; and the Guangdong
+# counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing,
+# Yangchun, Yangjiang, Yu'nan, and Yunfu.
+Zone Asia/Chongqing 7:06:20 - LMT 1928 # or Chungking
+ 7:00 - LONT 1980 May # Long-shu Time
+ 8:00 PRC C%sT
+Link Asia/Chongqing Asia/Chungking
+
+# far west China
+Zone Asia/Kashgar 5:03:56 - LMT 1928 # or Kashi or Kaxgar
+ 5:30 - KAST 1940 # Kashgar Time
+ 5:00 - KAST 1980 May
+ 8:00 PRC C%sT
+
+# India
+# From Paul Eggert (2014-08-11), after a heads-up from Stephen Colebourne:
+# According to a Portuguese decree (1911-05-26)
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# Portuguese India switched to GMT+5 on 1912-01-01.
+#Zone Asia/Panaji [not enough info to complete]
+
+# Israel
+Zone Asia/Tel_Aviv 2:19:04 - LMT 1880
+ 2:21 - JMT 1918
+ 2:00 Zion I%sT
+
+# Jan Mayen
+# From Whitman:
+Zone Atlantic/Jan_Mayen -1:00 - EGT
+
+# St Helena
+Zone Atlantic/St_Helena -0:22:48 - LMT 1890 # Jamestown
+ -0:22:48 - JMT 1951 # Jamestown Mean Time
+ 0:00 - GMT
+
+# Northern Ireland
+Zone Europe/Belfast -0:23:40 - LMT 1880 Aug 2
+ -0:25:21 - DMT 1916 May 21 2:00
+ # DMT = Dublin/Dunsink MT
+ -0:25:21 1:00 IST 1916 Oct 1 2:00s
+ # IST = Irish Summer Time
+ 0:00 GB-Eire %s 1968 Oct 27
+ 1:00 - BST 1971 Oct 31 2:00u
+ 0:00 GB-Eire %s 1996
+ 0:00 EU GMT/BST
+
+# Guernsey
+# Data from Joseph S. Myers
+# http://mm.icann.org/pipermail/tz/2013-September/019883.html
+# References to be added
+# LMT Location - 49.27N -2.33E - St.Peter Port
+Zone Europe/Guernsey -0:09:19 - LMT 1913 Jun 18
+ 0:00 GB-Eire %s 1940 Jul 2
+ 1:00 C-Eur CE%sT 1945 May 8
+ 0:00 GB-Eire %s 1968 Oct 27
+ 1:00 - BST 1971 Oct 31 2:00u
+ 0:00 GB-Eire %s 1996
+ 0:00 EU GMT/BST
+
+# Isle of Man
+#
+# From Lester Caine (2013-09-04):
+# The Isle of Man legislation is now on-line at
+# <http://www.legislation.gov.im>, starting with the original Statutory
+# Time Act in 1883 and including additional confirmation of some of
+# the dates of the 'Summer Time' orders originating at
+# Westminster. There is a little uncertainty as to the starting date
+# of the first summer time in 1916 which may have be announced a
+# couple of days late. There is still a substantial number of
+# documents to work through, but it is thought that every GB change
+# was also implemented on the island.
+#
+# AT4 of 1883 - The Statutory Time et cetera Act 1883 -
+# LMT Location - 54.1508N -4.4814E - Tynwald Hill ( Manx parliament )
+Zone Europe/Isle_of_Man -0:17:55 - LMT 1883 March 30 0:00s
+ 0:00 GB-Eire %s 1968 Oct 27
+ 1:00 - BST 1971 Oct 31 2:00u
+ 0:00 GB-Eire %s 1996
+ 0:00 EU GMT/BST
+
+# Jersey
+# Data from Joseph S. Myers
+# http://mm.icann.org/pipermail/tz/2013-September/019883.html
+# References to be added
+# LMT Location - 49.187N -2.107E - St. Helier
+Zone Europe/Jersey -0:08:25 - LMT 1898 Jun 11 16:00u
+ 0:00 GB-Eire %s 1940 Jul 2
+ 1:00 C-Eur CE%sT 1945 May 8
+ 0:00 GB-Eire %s 1968 Oct 27
+ 1:00 - BST 1971 Oct 31 2:00u
+ 0:00 GB-Eire %s 1996
+ 0:00 EU GMT/BST
+
+# Slovenia
+Zone Europe/Ljubljana 0:58:04 - LMT 1884
+ 1:00 - CET 1941 Apr 18 23:00
+ 1:00 C-Eur CE%sT 1945 May 8 2:00s
+ 1:00 1:00 CEST 1945 Sep 16 2:00s
+ 1:00 - CET 1982 Nov 27
+ 1:00 EU CE%sT
+
+# Bosnia and Herzegovina
+Zone Europe/Sarajevo 1:13:40 - LMT 1884
+ 1:00 - CET 1941 Apr 18 23:00
+ 1:00 C-Eur CE%sT 1945 May 8 2:00s
+ 1:00 1:00 CEST 1945 Sep 16 2:00s
+ 1:00 - CET 1982 Nov 27
+ 1:00 EU CE%sT
+
+# Macedonia
+Zone Europe/Skopje 1:25:44 - LMT 1884
+ 1:00 - CET 1941 Apr 18 23:00
+ 1:00 C-Eur CE%sT 1945 May 8 2:00s
+ 1:00 1:00 CEST 1945 Sep 16 2:00s
+ 1:00 - CET 1982 Nov 27
+ 1:00 EU CE%sT
+
+# Moldova / Transnistria
+Zone Europe/Tiraspol 1:58:32 - LMT 1880
+ 1:55 - CMT 1918 Feb 15 # Chisinau MT
+ 1:44:24 - BMT 1931 Jul 24 # Bucharest MT
+ 2:00 Romania EE%sT 1940 Aug 15
+ 2:00 1:00 EEST 1941 Jul 17
+ 1:00 C-Eur CE%sT 1944 Aug 24
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00
+ 2:00 Russia EE%sT 1992 Jan 19 2:00
+ 3:00 Russia MSK/MSD
+
+# Liechtenstein
+Zone Europe/Vaduz 0:38:04 - LMT 1894 Jun
+ 1:00 - CET 1981
+ 1:00 EU CE%sT
+
+# Croatia
+Zone Europe/Zagreb 1:03:52 - LMT 1884
+ 1:00 - CET 1941 Apr 18 23:00
+ 1:00 C-Eur CE%sT 1945 May 8 2:00s
+ 1:00 1:00 CEST 1945 Sep 16 2:00s
+ 1:00 - CET 1982 Nov 27
+ 1:00 EU CE%sT
+
+# US minor outlying islands
+Zone Pacific/Johnston -10:00 - HST
diff --git a/elsie.nci.nih.gov/src/checktab.awk b/elsie.nci.nih.gov/src/checktab.awk
index d78ba73..0f113f4 100644
--- a/elsie.nci.nih.gov/src/checktab.awk
+++ b/elsie.nci.nih.gov/src/checktab.awk
@@ -6,12 +6,46 @@ BEGIN {
FS = "\t"
if (!iso_table) iso_table = "iso3166.tab"
- if (!zone_table) zone_table = "zone.tab"
+ if (!zone_table) zone_table = "zone1970.tab"
if (!want_warnings) want_warnings = -1
# A special (and we hope temporary) case.
tztab["America/Montreal"] = 1
+ # Some more special cases; these are zones that should probably
+ # be turned into links.
+ if (zone_table == "zone1970.tab") {
+ tztab["Africa/Addis_Ababa"] = 1
+ tztab["Africa/Asmara"] = 1
+ tztab["Africa/Blantyre"] = 1
+ tztab["Africa/Bujumbura"] = 1
+ tztab["Africa/Dar_es_Salaam"] = 1
+ tztab["Africa/Djibouti"] = 1
+ tztab["Africa/Gaborone"] = 1
+ tztab["Africa/Harare"] = 1
+ tztab["Africa/Kampala"] = 1
+ tztab["Africa/Kigali"] = 1
+ tztab["Africa/Lubumbashi"] = 1
+ tztab["Africa/Lusaka"] = 1
+ tztab["Africa/Maseru"] = 1
+ tztab["Africa/Mbabane"] = 1
+ tztab["Africa/Mogadishu"] = 1
+ tztab["America/Antigua"] = 1
+ tztab["America/Cayman"] = 1
+ tztab["Asia/Aden"] = 1
+ tztab["Asia/Bahrain"] = 1
+ tztab["Asia/Ho_Chi_Minh"] = 1
+ tztab["Asia/Kuwait"] = 1
+ tztab["Asia/Muscat"] = 1
+ tztab["Asia/Phnom_Penh"] = 1
+ tztab["Asia/Vientiane"] = 1
+ tztab["Indian/Antananarivo"] = 1
+ tztab["Indian/Comoro"] = 1
+ tztab["Indian/Mayotte"] = 1
+ tztab["Pacific/Midway"] = 1
+ tztab["Pacific/Saipan"] = 1
+ }
+
while (getline <iso_table) {
iso_NR++
if ($0 ~ /^#/) continue
@@ -23,7 +57,7 @@ BEGIN {
cc = $1
name = $2
if (cc !~ /^[A-Z][A-Z]$/) {
- printf "%s:%d: invalid country code `%s'\n", \
+ printf "%s:%d: invalid country code '%s'\n", \
iso_table, iso_NR, cc >>"/dev/stderr"
status = 1
}
@@ -34,14 +68,14 @@ BEGIN {
s = "out of order";
}
- printf "%s:%d: country code `%s' is %s\n", \
+ printf "%s:%d: country code '%s' is %s\n", \
iso_table, iso_NR, cc, s \
>>"/dev/stderr"
status = 1
}
cc0 = cc
if (name2cc[name]) {
- printf "%s:%d: `%s' and `%s' have the sname name\n", \
+ printf "%s:%d: '%s' and '%s' have the sname name\n", \
iso_table, iso_NR, name2cc[name], cc \
>>"/dev/stderr"
status = 1
@@ -51,7 +85,6 @@ BEGIN {
cc2NR[cc] = iso_NR
}
- zone_table = "zone.tab"
cc0 = ""
while (getline <zone_table) {
@@ -62,27 +95,31 @@ BEGIN {
zone_table, zone_NR >>"/dev/stderr"
status = 1
}
- cc = $1
+ split($1, cca, /,/)
+ cc = cca[1]
coordinates = $2
tz = $3
comments = $4
if (cc < cc0) {
- printf "%s:%d: country code `%s' is out of order\n", \
+ printf "%s:%d: country code '%s' is out of order\n", \
zone_table, zone_NR, cc >>"/dev/stderr"
status = 1
}
cc0 = cc
- cctz = cc tz
- cctztab[cctz] = 1
tztab[tz] = 1
- tz2comments[cctz] = comments
+ tz2comments[tz] = comments
tz2NR[tz] = zone_NR
- if (cc2name[cc]) {
+ for (i in cca) {
+ cc = cca[i]
+ cctz = cc tz
+ cctztab[cctz] = 1
+ if (cc2name[cc]) {
cc_used[cc]++
- } else {
+ } else {
printf "%s:%d: %s: unknown country code\n", \
zone_table, zone_NR, cc >>"/dev/stderr"
status = 1
+ }
}
if (coordinates !~ /^[-+][0-9][0-9][0-5][0-9][-+][01][0-9][0-9][0-5][0-9]$/ \
&& coordinates !~ /^[-+][0-9][0-9][0-5][0-9][0-5][0-9][-+][01][0-9][0-9][0-5][0-9][0-5][0-9]$/) {
@@ -95,23 +132,26 @@ BEGIN {
for (cctz in cctztab) {
cc = substr (cctz, 1, 2)
tz = substr (cctz, 3)
- if (cc_used[cc] == 1) {
- if (tz2comments[cctz]) {
- printf "%s:%d: unnecessary comment `%s'\n", \
- zone_table, tz2NR[tz], \
- tz2comments[cctz] \
- >>"/dev/stderr"
- status = 1
- }
- } else {
- if (!tz2comments[cctz]) {
- printf "%s:%d: missing comment\n", \
- zone_table, tz2NR[tz] >>"/dev/stderr"
- status = 1
- }
+ if (1 < cc_used[cc]) {
+ comments_needed[tz] = cc
}
}
-
+ for (cctz in cctztab) {
+ cc = substr (cctz, 1, 2)
+ tz = substr (cctz, 3)
+ if (!comments_needed[tz] && tz2comments[tz]) {
+ printf "%s:%d: unnecessary comment '%s'\n", \
+ zone_table, tz2NR[tz], tz2comments[tz] \
+ >>"/dev/stderr"
+ tz2comments[tz] = 0
+ status = 1
+ } else if (comments_needed[tz] && !tz2comments[tz]) {
+ printf "%s:%d: missing comment for %s\n", \
+ zone_table, tz2NR[tz], comments_needed[tz] \
+ >>"/dev/stderr"
+ status = 1
+ }
+ }
FS = " "
}
@@ -122,7 +162,7 @@ $1 ~ /^#/ { next }
if ($1 == "Zone") {
tz = $2
ruleUsed[$4] = 1
- } else if ($1 == "Link") {
+ } else if ($1 == "Link" && zone_table == "zone.tab") {
# Ignore Link commands if source and destination basenames
# are identical, e.g. Europe/Istanbul versus Asia/Istanbul.
src = $2
@@ -137,7 +177,7 @@ $1 ~ /^#/ { next }
}
if (tz && tz ~ /\//) {
if (!tztab[tz]) {
- printf "%s: no data for `%s'\n", zone_table, tz \
+ printf "%s: no data for '%s'\n", zone_table, tz \
>>"/dev/stderr"
status = 1
}
@@ -152,14 +192,13 @@ END {
status = 1
}
}
- for (tz in tz2cc) {
+ for (tz in tztab) {
if (!zoneSeen[tz]) {
- printf "%s:%d: no Zone table for `%s'\n", \
+ printf "%s:%d: no Zone table for '%s'\n", \
zone_table, tz2NR[tz], tz >>"/dev/stderr"
status = 1
}
}
-
if (0 < want_warnings) {
for (cc in cc2name) {
if (!cc_used[cc]) {
diff --git a/elsie.nci.nih.gov/src/date.1 b/elsie.nci.nih.gov/src/date.1
index 72c44d0..cbdf3b4 100644
--- a/elsie.nci.nih.gov/src/date.1
+++ b/elsie.nci.nih.gov/src/date.1
@@ -4,30 +4,39 @@ date \- show and set date and time
.SH SYNOPSIS
.if n .nh
.if n .na
+.ie \n(.g .ds - \f(CW-\fP
+.el ds - \-
.B date
[
-.B \-u
+.B \*-u
] [
-.B \-c
+.B \*-c
] [
-.B \-r
-seconds
+.B \*-r
+.I seconds
] [
-.B \-n
+.B \*-n
] [
-.B \-d
-dsttype
+.B \*-d
+.I dsttype
] [
-.B \-t
-minutes-west
+.B \*-t
+.I minutes-west
] [
-\fB\-a \fR[\fB+\fR|\fB-]\fIsss\fB.\fIfff\fR
+\fB\*-a \fR[\fB+\fR|\fB\*-]\fIsss\fB.\fIfff\fR
] [
.BI + format
] [
\fR[\fIyyyy\fR]\fImmddhhmm\fR[\fIyy\fR][\fB.\fIss\fR]
]
.SH DESCRIPTION
+.ie '\(lq'' .ds lq \&"\"
+.el .ds lq \(lq\"
+.ie '\(rq'' .ds rq \&"\"
+.el .ds rq \(rq\"
+.de q
+\\$3\*(lq\\$1\*(rq\\$2
+..
.I Date
without arguments writes the date and time to the standard output in
the form
@@ -42,13 +51,13 @@ replaced by the local time zone's abbreviation
environment variable if set).
The exact output format depends on the locale.
.PP
-If a command-line argument starts with a plus sign
-.RB (` + '),
+If a command-line argument starts with a plus sign (\c
+.q "\fB+\fP" ),
the rest of the argument is used as a
.I format
that controls what appears in the output.
-In the format, when a percent sign
-.RB (` % ')
+In the format, when a percent sign (\c
+.q "\fB%\fP"
appears,
it and the character after it are not output,
but rather identify part of the date or time
@@ -106,7 +115,8 @@ a newline character is always added at the end of the output.
.PP
In Sunday-based week numbering,
the first Sunday of the year begins week 1;
-days preceding it are part of ``week 0.''
+days preceding it are part of
+.q "week 0" .
In Monday-based week numbering,
the first Monday of the year begins week 1.
.PP
@@ -133,10 +143,10 @@ the seconds part of the new time; if no seconds are given, zero is assumed.
.PP
These options are available:
.TP
-.BR \-u " or " \-c
+.BR \*-u " or " \*-c
Use Universal Time when setting and showing the date and time.
.TP
-.BI "\-r " seconds
+.BI "\*-r " seconds
Output the date that corresponds to
.I seconds
past the epoch of 1970-01-01 00:00:00 UTC, where
@@ -144,22 +154,28 @@ past the epoch of 1970-01-01 00:00:00 UTC, where
should be an integer, either decimal, octal (leading 0), or
hexadecimal (leading 0x), preceded by an optional sign.
.TP
-.B \-n
+.B \*-n
Do not notify other networked systems of the time change.
.TP
-.BI "\-d " dsttype
+.BI "\*-d " dsttype
Set the kernel-stored Daylight Saving Time type to the given value.
-(The kernel-stored DST type is used mostly by ``old'' binaries.)
+(The kernel-stored DST type is used mostly by
+.q "old"
+binaries.)
.TP
-.BI "\-t " minutes-west
-Set the kernel-stored ``minutes west of UTC'' value to the one given on the
+.BI "\*-t " minutes-west
+Set the kernel-stored
+.q "minutes west of UTC"
+value to the one given on the
command line.
-(The kernel-stored DST type is used mostly by ``old'' binaries.)
+(The kernel-stored DST type is used mostly by
+.q "old"
+binaries.)
.TP
-.BI "\-a " adjustment
+.BI "\*-a " adjustment
Change the time forward (or backward) by the number of seconds
(and fractions thereof) specified in the
-.I adjustment\^
+.I adjustment
argument.
Either the seconds part or the fractions part of the argument (but not both)
may be omitted.
diff --git a/elsie.nci.nih.gov/src/date.1.txt b/elsie.nci.nih.gov/src/date.1.txt
index 80de8e4..f17f4bc 100644
--- a/elsie.nci.nih.gov/src/date.1.txt
+++ b/elsie.nci.nih.gov/src/date.1.txt
@@ -15,9 +15,9 @@ DESCRIPTION
abbreviation for the time zone specified in the TZ environment variable
if set). The exact output format depends on the locale.
- If a command-line argument starts with a plus sign (`+'), the rest of
+ If a command-line argument starts with a plus sign ("+"), the rest of
the argument is used as a format that controls what appears in the
- output. In the format, when a percent sign (`%') appears, it and the
+ output. In the format, when a percent sign ("%" appears, it and the
character after it are not output, but rather identify part of the date
or time to be output in a particular way (or identify a special
character to output):
@@ -64,7 +64,7 @@ DESCRIPTION
newline character is always added at the end of the output.
In Sunday-based week numbering, the first Sunday of the year begins
- week 1; days preceding it are part of ``week 0.'' In Monday-based week
+ week 1; days preceding it are part of "week 0". In Monday-based week
numbering, the first Monday of the year begins week 1.
To set the date, use a command line argument with one of the following
@@ -97,13 +97,13 @@ DESCRIPTION
-d dsttype
Set the kernel-stored Daylight Saving Time type to the given
- value. (The kernel-stored DST type is used mostly by ``old''
+ value. (The kernel-stored DST type is used mostly by "old"
binaries.)
-t minutes-west
- Set the kernel-stored ``minutes west of UTC'' value to the one
+ Set the kernel-stored "minutes west of UTC" value to the one
given on the command line. (The kernel-stored DST type is used
- mostly by ``old'' binaries.)
+ mostly by "old" binaries.)
-a adjustment
Change the time forward (or backward) by the number of seconds
diff --git a/elsie.nci.nih.gov/src/date.c b/elsie.nci.nih.gov/src/date.c
index fe1311a..b77de79 100644
--- a/elsie.nci.nih.gov/src/date.c
+++ b/elsie.nci.nih.gov/src/date.c
@@ -10,21 +10,11 @@
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANT[A]BILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
-#ifndef lint
-char copyright[] =
-"@(#) Copyright (c) 1985, 1987, 1988 The Regents of the University of California.\n\
- All rights reserved.\n";
-#endif /* not lint */
-
-#ifndef lint
-static char sccsid[] = "@(#)date.c 4.23 (Berkeley) 9/20/88";
-#endif /* not lint */
-
#include "private.h"
#if HAVE_ADJTIME || HAVE_SETTIMEOFDAY
#include "sys/time.h" /* for struct timeval, struct timezone */
@@ -41,6 +31,9 @@ static char sccsid[] = "@(#)date.c 4.23 (Berkeley) 9/20/88";
#ifndef NTIME_MSG
#define NTIME_MSG "new time"
#endif
+#if !defined WTMPX_FILE && defined _PATH_WTMPX
+# define WTMPX_FILE _PATH_WTMPX
+#endif
/*
** The two things date knows about time are. . .
@@ -61,17 +54,15 @@ extern char * tzname[2];
static int retval = EXIT_SUCCESS;
-static void checkfinal(const char *, int, time_t, time_t);
-static time_t convert(const char *, int, time_t);
+static void checkfinal(char const *, bool, time_t, time_t);
+static time_t convert(const char *, bool, time_t);
static void display(const char *, time_t);
static void dogmt(void);
static void errensure(void);
static void iffy(time_t, time_t, const char *, const char *);
-int main(int, char**);
static const char * nondigit(const char *);
static void oops(const char *);
-static void reset(time_t, int);
-static int sametm(const struct tm *, const struct tm *);
+static void reset(time_t, bool);
static void timeout(FILE *, const char *, const struct tm *);
static void usage(void);
static void wildinput(const char *, const char *,
@@ -84,12 +75,12 @@ main(const int argc, char *argv[])
register const char * value;
register const char * cp;
register int ch;
- register int dousg;
- register int aflag = 0;
- register int dflag = 0;
- register int nflag = 0;
- register int tflag = 0;
- register int rflag = 0;
+ register bool dousg;
+ register bool aflag = false;
+ register bool dflag = false;
+ register bool nflag = false;
+ register bool tflag = false;
+ register bool rflag = false;
register int minuteswest;
register int dsttime;
register double adjust;
@@ -99,18 +90,14 @@ main(const int argc, char *argv[])
char * endarg;
INITIALIZE(dousg);
- INITIALIZE(minuteswest);
- INITIALIZE(dsttime);
- INITIALIZE(adjust);
- INITIALIZE(t);
#ifdef LC_ALL
- (void) setlocale(LC_ALL, "");
+ setlocale(LC_ALL, "");
#endif /* defined(LC_ALL) */
#if HAVE_GETTEXT
#ifdef TZ_DOMAINDIR
- (void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
+ bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
#endif /* defined(TEXTDOMAINDIR) */
- (void) textdomain(TZ_DOMAIN);
+ textdomain(TZ_DOMAIN);
#endif /* HAVE_GETTEXT */
t = now = time(NULL);
format = value = NULL;
@@ -124,11 +111,11 @@ main(const int argc, char *argv[])
break;
case 'r': /* seconds since 1970 */
if (rflag) {
- (void) fprintf(stderr,
+ fprintf(stderr,
_("date: error: multiple -r's used"));
usage();
}
- rflag = 1;
+ rflag = true;
errno = 0;
secs = strtoimax (optarg, &endarg, 0);
if (*endarg || optarg == endarg)
@@ -143,15 +130,15 @@ main(const int argc, char *argv[])
t = secs;
break;
case 'n': /* don't set network */
- nflag = 1;
+ nflag = true;
break;
case 'd': /* daylight saving time */
if (dflag) {
- (void) fprintf(stderr,
+ fprintf(stderr,
_("date: error: multiple -d's used"));
usage();
}
- dflag = 1;
+ dflag = true;
cp = optarg;
dsttime = atoi(cp);
if (*cp == '\0' || *nondigit(cp) != '\0')
@@ -160,11 +147,11 @@ main(const int argc, char *argv[])
break;
case 't': /* minutes west of UTC */
if (tflag) {
- (void) fprintf(stderr,
+ fprintf(stderr,
_("date: error: multiple -t's used"));
usage();
}
- tflag = 1;
+ tflag = true;
cp = optarg;
minuteswest = atoi(cp);
if (*cp == '+' || *cp == '-')
@@ -175,11 +162,11 @@ main(const int argc, char *argv[])
break;
case 'a': /* adjustment */
if (aflag) {
- (void) fprintf(stderr,
+ fprintf(stderr,
_("date: error: multiple -a's used"));
usage();
}
- aflag = 1;
+ aflag = true;
cp = optarg;
adjust = atof(cp);
if (*cp == '+' || *cp == '-')
@@ -202,14 +189,14 @@ main(const int argc, char *argv[])
if (format == NULL)
format = cp + 1;
else {
- (void) fprintf(stderr,
+ fprintf(stderr,
_("date: error: multiple formats in command line\n"));
usage();
}
else if (value == NULL && !rflag)
value = cp;
else {
- (void) fprintf(stderr,
+ fprintf(stderr,
_("date: error: multiple values in command line\n"));
usage();
}
@@ -221,9 +208,9 @@ _("date: error: multiple values in command line\n"));
** even if time_t's range all the way back to the thirteenth
** century. Do not change the order.
*/
- t = convert(value, (dousg = TRUE), now);
+ t = convert(value, (dousg = true), now);
if (t == -1)
- t = convert(value, (dousg = FALSE), now);
+ t = convert(value, (dousg = false), now);
if (t == -1) {
/*
** Out of range values,
@@ -244,9 +231,9 @@ _("date: error: multiple values in command line\n"));
_("out of range seconds given"));
}
dogmt();
- t = convert(value, FALSE, now);
+ t = convert(value, false, now);
if (t == -1)
- t = convert(value, TRUE, now);
+ t = convert(value, true, now);
wildinput(_("time"), value,
(t == -1) ?
_("out of range value given") :
@@ -290,7 +277,7 @@ _("date: error: multiple values in command line\n"));
#if HAVE_SETTIMEOFDAY != 2
(void) dsttime;
(void) minuteswest;
- (void) fprintf(stderr,
+ fprintf(stderr,
_("date: warning: kernel doesn't keep -d/-t information, option ignored\n"));
#endif /* HAVE_SETTIMEOFDAY != 2 */
}
@@ -320,7 +307,7 @@ dogmt(void)
continue;
fakeenv = malloc((n + 2) * sizeof *fakeenv);
if (fakeenv == NULL) {
- (void) perror(_("Memory exhausted"));
+ perror(_("Memory exhausted"));
errensure();
exit(retval);
}
@@ -347,7 +334,7 @@ dogmt(void)
/*ARGSUSED*/
static void
-reset(const time_t newt, const int nflag)
+reset(time_t newt, bool nflag)
{
register int fid;
time_t oldt;
@@ -365,15 +352,15 @@ reset(const time_t newt, const int nflag)
/*
** Wouldn't it be great if stime returned the old time?
*/
- (void) time(&oldt);
+ oldt = time(NULL);
if (stime(&newt) != 0)
oops("stime");
s.before.ut_type = OLD_TIME;
s.before.ut_time = oldt;
- (void) strcpy(s.before.ut_line, OTIME_MSG);
+ strcpy(s.before.ut_line, OTIME_MSG);
s.after.ut_type = NEW_TIME;
s.after.ut_time = newt;
- (void) strcpy(s.after.ut_line, NTIME_MSG);
+ strcpy(s.after.ut_line, NTIME_MSG);
fid = open(WTMP_FILE, O_WRONLY | O_APPEND);
if (fid < 0)
oops(_("log file open"));
@@ -388,13 +375,13 @@ reset(const time_t newt, const int nflag)
#if HAVE_UTMPX_H
sx.before.ut_type = OLD_TIME;
sx.before.ut_tv.tv_sec = oldt;
- (void) strcpy(sx.before.ut_line, OTIME_MSG);
+ strcpy(sx.before.ut_line, OTIME_MSG);
sx.after.ut_type = NEW_TIME;
sx.after.ut_tv.tv_sec = newt;
- (void) strcpy(sx.after.ut_line, NTIME_MSG);
-#if !SUPPRESS_WTMPX_FILE_UPDATE
+ strcpy(sx.after.ut_line, NTIME_MSG);
+#if defined WTMPX_FILE && !SUPPRESS_WTMPX_FILE_UPDATE
/* In Solaris 2.5 (and presumably other systems),
- `date' does not update /var/adm/wtmpx.
+ 'date' does not update /var/adm/wtmpx.
This must be a bug. If you'd like to reproduce the bug,
define SUPPRESS_WTMPX_FILE_UPDATE to be nonzero. */
fid = open(WTMPX_FILE, O_WRONLY | O_APPEND);
@@ -404,7 +391,7 @@ reset(const time_t newt, const int nflag)
oops(_("log file write"));
if (close(fid) != 0)
oops(_("log file close"));
-#endif /* !SUPPRESS_WTMPX_FILE_UPDATE */
+# endif
pututxline(&sx.before);
pututxline(&sx.after);
#endif /* HAVE_UTMPX_H */
@@ -446,14 +433,14 @@ extern int logwtmp();
#endif /* HAVE_SETTIMEOFDAY == 1 */
#ifdef TSP_SETDATE
-static int netsettime(struct timeval);
+static bool netsettime(struct timeval);
#endif
#ifndef TSP_SETDATE
/*ARGSUSED*/
#endif /* !defined TSP_SETDATE */
static void
-reset(const time_t newt, const int nflag)
+reset(time_t newt, bool nflag)
{
register const char * username;
static struct timeval tv; /* static so tv_usec is 0 */
@@ -484,7 +471,7 @@ static void
wildinput(const char *const item, const char *const value,
const char *const reason)
{
- (void) fprintf(stderr,
+ fprintf(stderr,
_("date: error: bad command line %s \"%s\", %s\n"),
item, value, reason);
usage();
@@ -508,7 +495,7 @@ nondigit(register const char *cp)
static void
usage(void)
{
- (void) fprintf(stderr,
+ fprintf(stderr,
_("date: usage: date [-u] [-c] [-r seconds] [-n]"
" [-d dst] [-t min-west] [-a sss.fff]"
" [[yyyy]mmddhhmm[yyyy][.ss]] [+format]\n"));
@@ -521,9 +508,9 @@ oops(const char *const string)
{
int e = errno;
- (void) fprintf(stderr, _("date: error: "));
+ fprintf(stderr, _("date: error: "));
errno = e;
- (void) perror(string);
+ perror(string);
errensure();
display(NULL, time(NULL));
exit(retval);
@@ -536,17 +523,17 @@ display(const char *const format, time_t const now)
tmp = localtime(&now);
if (!tmp) {
- (void) fprintf(stderr,
+ fprintf(stderr,
_("date: error: time out of range\n"));
errensure();
return;
}
timeout(stdout, format ? format : "%+", tmp);
- (void) putchar('\n');
- (void) fflush(stdout);
- (void) fflush(stderr);
+ putchar('\n');
+ fflush(stdout);
+ fflush(stderr);
if (ferror(stdout) || ferror(stderr)) {
- (void) fprintf(stderr,
+ fprintf(stderr,
_("date: error: couldn't write results\n"));
errensure();
}
@@ -565,7 +552,7 @@ timeout(FILE *const fp, const char *const format, const struct tm *tmp)
if (*format == '\0')
return;
if (!tmp) {
- (void) fprintf(stderr, _("date: error: time out of range\n"));
+ fprintf(stderr, _("date: error: time out of range\n"));
errensure();
return;
}
@@ -575,7 +562,7 @@ timeout(FILE *const fp, const char *const format, const struct tm *tmp)
cp = malloc(size);
for ( ; ; ) {
if (cp == NULL) {
- (void) fprintf(stderr,
+ fprintf(stderr,
_("date: error: can't get memory\n"));
errensure();
exit(retval);
@@ -587,11 +574,11 @@ timeout(FILE *const fp, const char *const format, const struct tm *tmp)
size += INCR;
cp = realloc(cp, size);
}
- (void) fwrite(cp, 1, result, fp);
+ fwrite(cp, 1, result, fp);
free(cp);
}
-static int
+static bool
sametm(register const struct tm *const atmp,
register const struct tm *const btmp)
{
@@ -611,7 +598,7 @@ sametm(register const struct tm *const atmp,
#define ATOI2(ar) (ar[0] - '0') * 10 + (ar[1] - '0'); ar += 2;
static time_t
-convert(register const char * const value, const int dousg, const time_t t)
+convert(char const *value, bool dousg, time_t t)
{
register const char * cp;
register const char * dotp;
@@ -718,10 +705,7 @@ convert(register const char * const value, const int dousg, const time_t t)
*/
static void
-checkfinal(const char * const value,
- const int didusg,
- const time_t t,
- const time_t oldnow)
+checkfinal(char const *value, bool didusg, time_t t, time_t oldnow)
{
time_t othert;
struct tm tm, *tmp;
@@ -754,13 +738,13 @@ checkfinal(const char * const value,
** summer or standard (as Hawaii, the United Kingdom, and Saudi Arabia
** have done), routine checks for iffy times may not work.
** So we perform this final check, deferring it until after the time has
-** been set--it may take a while, and we don't want to introduce an unnecessary
+** been set; it may take a while, and we don't want to introduce an unnecessary
** lag between the time the user enters their command and the time that
** stime/settimeofday is called.
**
** We just check nearby times to see if any have the same representation
** as the time that convert returned. We work our way out from the center
-** for quick response in solar time situations. We only handle common cases--
+** for quick response in solar time situations. We only handle common cases:
** offsets of at most a minute, and offsets of exact numbers of minutes
** and at most an hour.
*/
@@ -789,9 +773,9 @@ iffy(const time_t thist, const time_t thatt,
const char * const value, const char * const reason)
{
struct tm *tmp;
- int dst;
+ bool dst;
- (void) fprintf(stderr, _("date: warning: ambiguous time \"%s\", %s.\n"),
+ fprintf(stderr, _("date: warning: ambiguous time \"%s\", %s.\n"),
value, reason);
tmp = gmtime(&thist);
/*
@@ -801,18 +785,18 @@ iffy(const time_t thist, const time_t thatt,
%M\
%Y.%S\n"), tmp);
tmp = localtime(&thist);
- dst = tmp ? tmp->tm_isdst : 0;
+ dst = tmp && tmp->tm_isdst;
timeout(stderr, _("to get %c"), tmp);
- (void) fprintf(stderr, _(" (%s). Use\n"),
+ fprintf(stderr, _(" (%s). Use\n"),
dst ? _("summer time") : _("standard time"));
tmp = gmtime(&thatt);
timeout(stderr, _("\tdate -u %m%d%H\
%M\
%Y.%S\n"), tmp);
tmp = localtime(&thatt);
- dst = tmp ? tmp->tm_isdst : 0;
+ dst = tmp && tmp->tm_isdst;
timeout(stderr, _("to get %c"), tmp);
- (void) fprintf(stderr, _(" (%s).\n"),
+ fprintf(stderr, _(" (%s).\n"),
dst ? _("summer time") : _("standard time"));
errensure();
exit(retval);
@@ -828,14 +812,13 @@ iffy(const time_t thist, const time_t thatt,
* If the timedaemon is in the master state, it performs the
* correction on all slaves. If it is in the slave state, it
* notifies the master that a correction is needed.
- * Returns 1 on success, 0 on failure.
+ * Return true on success.
*/
-static int
+static bool
netsettime(struct timeval ntv)
{
int s, length, port, timed_ack, found, err, waittime;
fd_set ready;
- char hostname[MAXHOSTNAMELEN];
struct timeval tout;
struct servent *sp;
struct tsp msg;
@@ -845,7 +828,7 @@ netsettime(struct timeval ntv)
if (! sp) {
fputs(_("udp/timed: unknown service\n"), stderr);
retval = 2;
- return (0);
+ return false;
}
dest.sin_port = sp->s_port;
dest.sin_family = AF_INET;
@@ -874,11 +857,15 @@ netsettime(struct timeval ntv)
}
msg.tsp_type = TSP_SETDATE;
msg.tsp_vers = TSPVERSION;
- if (gethostname(hostname, sizeof (hostname))) {
+ msg.tsp_name[sizeof msg.tsp_name - 1] = '\0';
+ if (gethostname(msg.tsp_name, sizeof msg.tsp_name) != 0) {
perror("gethostname");
goto bad;
}
- (void) strncpy(msg.tsp_name, hostname, sizeof (hostname));
+ if (msg.tsp_name[sizeof msg.tsp_name - 1]) {
+ fprintf(stderr, "hostname too long\n");
+ goto bad;
+ }
msg.tsp_seq = htons(0);
msg.tsp_time.tv_sec = htonl(ntv.tv_sec);
msg.tsp_time.tv_usec = htonl(ntv.tv_usec);
@@ -927,8 +914,8 @@ loop:
goto loop;
case TSP_DATEACK:
- (void)close(s);
- return (1);
+ lose(s);
+ return true;
default:
fprintf(stderr,
@@ -942,8 +929,8 @@ loop:
fputs(_("date: Can't reach time daemon, time set locally.\n"),
stderr);
bad:
- (void)close(s);
+ lose(s);
retval = 2;
- return (0);
+ return false;
}
#endif /* defined TSP_SETDATE */
diff --git a/elsie.nci.nih.gov/src/etcetera b/elsie.nci.nih.gov/src/etcetera
index 9ba7f7b..c2e2532 100644
--- a/elsie.nci.nih.gov/src/etcetera
+++ b/elsie.nci.nih.gov/src/etcetera
@@ -1,4 +1,3 @@
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
@@ -14,7 +13,7 @@ Zone Etc/UTC 0 - UTC
Zone Etc/UCT 0 - UCT
# The following link uses older naming conventions,
-# but it belongs here, not in the file `backward',
+# but it belongs here, not in the file 'backward',
# as functions like gmtime load the "GMT" file to handle leap seconds properly.
# We want this to work even on installations that omit the other older names.
Link Etc/GMT GMT
diff --git a/elsie.nci.nih.gov/src/europe b/elsie.nci.nih.gov/src/europe
index bfc596a..0130552 100644
--- a/elsie.nci.nih.gov/src/europe
+++ b/elsie.nci.nih.gov/src/europe
@@ -1,12 +1,12 @@
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future). For more, please see
+# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (2014-05-31):
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
# San Diego: ACS Publications, Inc. (2003).
@@ -17,6 +17,9 @@
# published semiannually. Law sent in several helpful summaries
# of the IATA's data after 1990.
#
+# A reliable and entertaining source about time zones is
+# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
+#
# Except where otherwise noted, Shanks & Pottenger is the source for
# entries through 1991, and IATA SSIM is the source for entries afterwards.
#
@@ -26,9 +29,9 @@
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated),
# which I found in the UCLA library.
#
-# <a href="http://www.pettswoodvillage.co.uk/Daylight_Savings_William_Willett.pdf">
# William Willett, The Waste of Daylight, 19th edition
-# </a> (1914-03)
+# <http://cs.ucla.edu/~eggert/The-Waste-of-Daylight-19th.pdf>
+# [PDF] (1914-03)
#
# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
# <http://www.jstor.org/stable/1774359>. He writes:
@@ -36,10 +39,20 @@
# may be sent to Mr. John Milne, Royal Geographical Society,
# Savile Row, London." Nowadays please email them to tz@iana.org.
#
-# Brazil's Departamento Servico da Hora (DSH),
-# <a href="http://pcdsh01.on.br/HISTHV.htm">
+# Byalokoz EL. New Counting of Time in Russia since July 1, 1919.
+# This Russian-language source was consulted by Vladimir Karpinsky; see
+# http://mm.icann.org/pipermail/tz/2014-August/021320.html
+# The full Russian citation is:
+# Бялокоз, Евгений Людвигович. Новый счет времени в течении суток
+# введенный декретом Совета народных комиссаров для всей России с 1-го
+# июля 1919 г. / Изд. 2-е Междуведомственной комиссии. - Петроград:
+# Десятая гос. тип., 1919.
+# http://resolver.gpntb.ru/purl?docushare/dsweb/Get/Resource-2011/Byalokoz__E.L.__Novyy__schet__vremeni__v__techenie__sutok__izd__2(1).pdf
+#
+# Brazil's Divisão Serviço da Hora (DSHO),
# History of Summer Time
-# </a> (1998-09-21, in Portuguese)
+# <http://pcdsh01.on.br/HISTHV.htm>
+# (1998-09-21, in Portuguese)
#
# I invented the abbreviations marked '*' in the following table;
@@ -58,10 +71,8 @@
# 1:00 CET CEST CEMT Central Europe
# 1:00:14 SET Swedish (1879-1899)*
# 2:00 EET EEST Eastern Europe
-# 3:00 MSK MSD Moscow
-#
-# A reliable and entertaining source about time zones, especially in Britain,
-# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
+# 3:00 FET Further-eastern Europe*
+# 3:00 MSK MSD MSM* Moscow
# From Peter Ilieve (1994-12-04),
# The original six [EU members]: Belgium, France, (West) Germany, Italy,
@@ -105,7 +116,7 @@
# along the towpath within a few yards of it.'
#
# I have a one inch to one mile map of London and my estimate of the stone's
-# position is 51 deg. 28' 30" N, 0 deg. 18' 45" W. The longitude should
+# position is 51 degrees 28' 30" N, 0 degrees 18' 45" W. The longitude should
# be within about +-2". The Ordnance Survey grid reference is TQ172761.
#
# [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.]
@@ -137,8 +148,22 @@
# transition date for London, namely 1847-12-01. We don't know as much
# about Dublin, so we use 1880-08-02, the legal transition time.
-# From Paul Eggert (2003-09-27):
-# Summer Time was first seriously proposed by William Willett (1857-1915),
+# From Paul Eggert (2014-07-19):
+# The ancients had no need for daylight saving, as they kept time
+# informally or via hours whose length depended on the time of year.
+# Daylight saving time in its modern sense was invented by the
+# New Zealand entomologist George Vernon Hudson (1867-1946),
+# whose day job as a postal clerk led him to value
+# after-hours daylight in which to pursue his research.
+# In 1895 he presented a paper to the Wellington Philosophical Society
+# that proposed a two-hour daylight-saving shift. See:
+# Hudson GV. On seasonal time-adjustment in countries south of lat. 30 deg.
+# Transactions and Proceedings of the New Zealand Institute. 1895;28:734
+# http://rsnz.natlib.govt.nz/volume/rsnz_28/rsnz_28_00_006110.html
+# Although some interest was expressed in New Zealand, his proposal
+# did not find its way into law and eventually it was almost forgotten.
+#
+# In England, DST was independently reinvented by William Willett (1857-1915),
# a London builder and member of the Royal Astronomical Society
# who circulated a pamphlet "The Waste of Daylight" (1907)
# that proposed advancing clocks 20 minutes on each of four Sundays in April,
@@ -151,7 +176,7 @@
# A monument to Willett was unveiled on 1927-05-21, in an open space in
# a 45-acre wood near Chislehurst, Kent that was purchased by popular
# subscription and open to the public. On the south face of the monolith,
-# designed by G. W. Miller, is the...William Willett Memorial Sundial,
+# designed by G. W. Miller, is the William Willett Memorial Sundial,
# which is permanently set to Summer Time.
# From Winston Churchill (1934-04-28):
@@ -160,9 +185,9 @@
# between 160 and 170 hours more daylight leisure, to a war which
# plunged Europe into darkness for four years, and shook the
# foundations of civilization throughout the world.
-# -- <a href="http://www.winstonchurchill.org/fh114willett.htm">
-# "A Silent Toast to William Willett", Pictorial Weekly
-# </a>
+# -- "A Silent Toast to William Willett", Pictorial Weekly;
+# republished in Finest Hour (Spring 2002) 1(114):26
+# http://www.winstonchurchill.org/images/finesthour/Vol.01%20No.114.pdf
# From Paul Eggert (1996-09-03):
# The OED Supplement says that the English originally said "Daylight Saving"
@@ -171,7 +196,6 @@
# proponents (who eventually won the argument) are quoted as using "Summer".
# From Arthur David Olson (1989-01-19):
-#
# A source at the British Information Office in New York avers that it's
# known as "British" Summer Time in all parts of the United Kingdom.
@@ -198,8 +222,8 @@
# official designation; the reply of the 21st was that there wasn't
# but he couldn't think of anything better than the "Double British
# Summer Time" that the BBC had been using informally.
-# http://student.cusu.cam.ac.uk/~jsm28/british-time/bbc-19410418.png
-# http://student.cusu.cam.ac.uk/~jsm28/british-time/ho-19410421.png
+# http://www.polyomino.org.uk/british-time/bbc-19410418.png
+# http://www.polyomino.org.uk/british-time/ho-19410421.png
# From Sir Alexander Maxwell in the above-mentioned letter (1941-04-21):
# [N]o official designation has as far as I know been adopted for the time
@@ -216,23 +240,14 @@
# the history of summer time legislation in the United Kingdom.
# Since 1998 Joseph S. Myers has been updating
# and extending this list, which can be found in
-# http://student.cusu.cam.ac.uk/~jsm28/british-time/
-# <a href="http://www.polyomino.org.uk/british-time/">
-# History of legal time in Britain
-# </a>
-# Rob Crowther (2012-01-04) reports that that URL no longer
-# exists, and the article can now be found at:
-# <a href="http://www.polyomino.org.uk/british-time/">
# http://www.polyomino.org.uk/british-time/
-# </a>
# From Joseph S. Myers (1998-01-06):
#
# The legal time in the UK outside of summer time is definitely GMT, not UTC;
# see Lord Tanlaw's speech
-# <a href="http://www.parliament.the-stationery-office.co.uk/pa/ld199697/ldhansrd/pdvn/lds97/text/70611-20.htm#70611-20_head0">
-# (Lords Hansard 11 June 1997 columns 964 to 976)
-# </a>.
+# http://www.publications.parliament.uk/pa/ld199798/ldhansrd/vo970611/text/70611-10.htm#70611-10_head0
+# (Lords Hansard 11 June 1997 columns 964 to 976).
# From Paul Eggert (2006-03-22):
#
@@ -272,8 +287,8 @@
# -- James Joyce, Ulysses
# From Joseph S. Myers (2005-01-26):
-# Irish laws are available online at www.irishstatutebook.ie. These include
-# various relating to legal time, for example:
+# Irish laws are available online at <http://www.irishstatutebook.ie>.
+# These include various relating to legal time, for example:
#
# ZZA13Y1923.html ZZA12Y1924.html ZZA8Y1925.html ZZSIV20PG1267.html
#
@@ -435,25 +450,27 @@ Rule GB-Eire 1990 1995 - Oct Sun>=22 1:00u 0 GMT
# Use Europe/London for Jersey, Guernsey, and the Isle of Man.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/London -0:01:15 - LMT 1847 Dec 1 0:00s
+Zone Europe/London -0:01:15 - LMT 1847 Dec 1 0:00s
0:00 GB-Eire %s 1968 Oct 27
- 1:00 - BST 1971 Oct 31 2:00u
+ 1:00 - BST 1971 Oct 31 2:00u
0:00 GB-Eire %s 1996
0:00 EU GMT/BST
Link Europe/London Europe/Jersey
Link Europe/London Europe/Guernsey
Link Europe/London Europe/Isle_of_Man
+
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2
- -0:25:21 - DMT 1916 May 21 2:00
- -0:25:21 1:00 IST 1916 Oct 1 2:00s
+ -0:25:21 - DMT 1916 May 21 2:00
+ -0:25:21 1:00 IST 1916 Oct 1 2:00s
0:00 GB-Eire %s 1921 Dec 6 # independence
- 0:00 GB-Eire GMT/IST 1940 Feb 25 2:00
- 0:00 1:00 IST 1946 Oct 6 2:00
- 0:00 - GMT 1947 Mar 16 2:00
- 0:00 1:00 IST 1947 Nov 2 2:00
- 0:00 - GMT 1948 Apr 18 2:00
+ 0:00 GB-Eire GMT/IST 1940 Feb 25 2:00
+ 0:00 1:00 IST 1946 Oct 6 2:00
+ 0:00 - GMT 1947 Mar 16 2:00
+ 0:00 1:00 IST 1947 Nov 2 2:00
+ 0:00 - GMT 1948 Apr 18 2:00
0:00 GB-Eire GMT/IST 1968 Oct 27
- 1:00 - IST 1971 Oct 31 2:00u
+ 1:00 - IST 1971 Oct 31 2:00u
0:00 GB-Eire GMT/IST 1996
0:00 EU GMT/IST
@@ -472,10 +489,9 @@ Rule EU 1979 1995 - Sep lastSun 1:00u 0 -
Rule EU 1981 max - Mar lastSun 1:00u 1:00 S
Rule EU 1996 max - Oct lastSun 1:00u 0 -
# The most recent directive covers the years starting in 2002. See:
-# <a="http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:32000L0084:EN:NOT">
# Directive 2000/84/EC of the European Parliament and of the Council
# of 19 January 2001 on summer-time arrangements.
-# </a>
+# http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:32000L0084:EN:NOT
# W-Eur differs from EU only in that W-Eur uses standard time.
Rule W-Eur 1977 1980 - Apr Sun>=1 1:00s 1:00 S
@@ -498,18 +514,18 @@ Rule C-Eur 1943 only - Oct 4 2:00s 0 -
Rule C-Eur 1944 1945 - Apr Mon>=1 2:00s 1:00 S
# Whitman gives 1944 Oct 7; go with Shanks & Pottenger.
Rule C-Eur 1944 only - Oct 2 2:00s 0 -
-# From Jesper Norgaard Welen (2008-07-13):
+# From Jesper Nørgaard Welen (2008-07-13):
#
# I found what is probably a typo of 2:00 which should perhaps be 2:00s
# in the C-Eur rule from tz database version 2008d (this part was
-# corrected in version 2008d). The circumstancial evidence is simply the
+# corrected in version 2008d). The circumstantial evidence is simply the
# tz database itself, as seen below:
#
# Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01
# 0:00 France WE%sT 1945 Sep 16 3:00
#
# Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
-# 0:00 France WE%sT 1945 Sep 16 3:00
+# 0:00 France WE%sT 1945 Sep 16 3:00
#
# Zone Europe/Belgrade 1:22:00 - LMT 1884
# 1:00 1:00 CEST 1945 Sep 16 2:00s
@@ -553,16 +569,16 @@ Rule E-Eur 1981 max - Mar lastSun 0:00 1:00 S
Rule E-Eur 1996 max - Oct lastSun 0:00 0 -
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Russia 1917 only - Jul 1 23:00 1:00 MST # Moscow Summer Time
-Rule Russia 1917 only - Dec 28 0:00 0 MMT # Moscow Mean Time
-Rule Russia 1918 only - May 31 22:00 2:00 MDST # Moscow Double Summer Time
+Rule Russia 1917 only - Jul 1 23:00 1:00 MST # Moscow Summer Time
+Rule Russia 1917 only - Dec 28 0:00 0 MMT # Moscow Mean Time
+Rule Russia 1918 only - May 31 22:00 2:00 MDST # Moscow Double Summer Time
Rule Russia 1918 only - Sep 16 1:00 1:00 MST
Rule Russia 1919 only - May 31 23:00 2:00 MDST
-Rule Russia 1919 only - Jul 1 2:00 1:00 S
-Rule Russia 1919 only - Aug 16 0:00 0 -
-Rule Russia 1921 only - Feb 14 23:00 1:00 S
-Rule Russia 1921 only - Mar 20 23:00 2:00 M # Midsummer
-Rule Russia 1921 only - Sep 1 0:00 1:00 S
+Rule Russia 1919 only - Jul 1 2:00 1:00 MSD
+Rule Russia 1919 only - Aug 16 0:00 0 MSK
+Rule Russia 1921 only - Feb 14 23:00 1:00 MSD
+Rule Russia 1921 only - Mar 20 23:00 2:00 MSM # Midsummer
+Rule Russia 1921 only - Sep 1 0:00 1:00 MSD
Rule Russia 1921 only - Oct 1 0:00 0 -
# Act No.925 of the Council of Ministers of the USSR (1980-10-24):
Rule Russia 1981 1984 - Apr 1 0:00 1:00 S
@@ -584,14 +600,10 @@ Rule Russia 1996 2010 - Oct lastSun 2:00s 0 -
# According to the law Russia is abolishing daylight saving time.
#
# Medvedev signed a law "On the Calculation of Time" (in russian):
-# <a href="http://bmockbe.ru/events/?ID=7583">
# http://bmockbe.ru/events/?ID=7583
-# </a>
#
# Medvedev signed a law on the calculation of the time (in russian):
-# <a href="http://www.regnum.ru/news/polit/1413906.html">
# http://www.regnum.ru/news/polit/1413906.html
-# </a>
# From Arthur David Olson (2011-06-15):
# Take "abolishing daylight saving time" to mean that time is now considered
@@ -611,10 +623,10 @@ Zone EET 2:00 EU EE%sT
# From Markus Kuhn (1996-07-12):
# The official German names ... are
#
-# Mitteleuropaeische Zeit (MEZ) = UTC+01:00
-# Mitteleuropaeische Sommerzeit (MESZ) = UTC+02:00
+# Mitteleuropäische Zeit (MEZ) = UTC+01:00
+# Mitteleuropäische Sommerzeit (MESZ) = UTC+02:00
#
-# as defined in the German Time Act (Gesetz ueber die Zeitbestimmung (ZeitG),
+# as defined in the German Time Act (Gesetz über die Zeitbestimmung (ZeitG),
# 1978-07-25, Bundesgesetzblatt, Jahrgang 1978, Teil I, S. 1110-1111)....
# I wrote ... to the German Federal Physical-Technical Institution
#
@@ -669,7 +681,7 @@ Zone Europe/Tirane 1:19:20 - LMT 1914
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Andorra 0:06:04 - LMT 1901
0:00 - WET 1946 Sep 30
- 1:00 - CET 1985 Mar 31 2:00
+ 1:00 - CET 1985 Mar 31 2:00
1:00 EU CE%sT
# Austria
@@ -695,9 +707,9 @@ Rule Austria 1980 only - Sep 28 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Vienna 1:05:21 - LMT 1893 Apr
1:00 C-Eur CE%sT 1920
- 1:00 Austria CE%sT 1940 Apr 1 2:00s
- 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
- 1:00 1:00 CEST 1945 Apr 12 2:00s
+ 1:00 Austria CE%sT 1940 Apr 1 2:00s
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
+ 1:00 1:00 CEST 1945 Apr 12 2:00s
1:00 - CET 1946
1:00 Austria CE%sT 1981
1:00 EU CE%sT
@@ -708,38 +720,29 @@ Zone Europe/Vienna 1:05:21 - LMT 1893 Apr
# GMT+3 without DST (was GMT+2 with DST).
#
# Sources (Russian language):
-# 1.
-# <a href="http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html">
# http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html
-# </a>
-# 2.
-# <a href="http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/">
# http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/
-# </a>
-# 3.
-# <a href="http://news.tut.by/society/250578.html">
# http://news.tut.by/society/250578.html
-# </a>
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Minsk 1:50:16 - LMT 1880
- 1:50 - MMT 1924 May 2 # Minsk Mean Time
+ 1:50 - MMT 1924 May 2 # Minsk Mean Time
2:00 - EET 1930 Jun 21
3:00 - MSK 1941 Jun 28
1:00 C-Eur CE%sT 1944 Jul 3
3:00 Russia MSK/MSD 1990
- 3:00 - MSK 1991 Mar 31 2:00s
- 2:00 1:00 EEST 1991 Sep 29 2:00s
- 2:00 - EET 1992 Mar 29 0:00s
- 2:00 1:00 EEST 1992 Sep 27 0:00s
- 2:00 Russia EE%sT 2011 Mar 27 2:00s
- 3:00 - FET # Further-eastern European Time
+ 3:00 - MSK 1991 Mar 31 2:00s
+ 2:00 1:00 EEST 1991 Sep 29 2:00s
+ 2:00 - EET 1992 Mar 29 0:00s
+ 2:00 1:00 EEST 1992 Sep 27 0:00s
+ 2:00 Russia EE%sT 2011 Mar 27 2:00s
+ 3:00 - FET
# Belgium
#
# From Paul Eggert (1997-07-02):
# Entries from 1918 through 1991 are taken from:
# Annuaire de L'Observatoire Royal de Belgique,
-# Avenue Circulaire, 3, B-1180 BRUXELLES, CLVIIe annee, 1991
+# Avenue Circulaire, 3, B-1180 BRUXELLES, CLVIIe année, 1991
# (Imprimerie HAYEZ, s.p.r.l., Rue Fin, 4, 1080 BRUXELLES, MCMXC),
# pp 8-9.
# LMT before 1892 was 0:17:30, according to the official journal of Belgium:
@@ -789,7 +792,7 @@ Rule Belgium 1946 only - May 19 2:00s 1:00 S
Rule Belgium 1946 only - Oct 7 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Brussels 0:17:30 - LMT 1880
- 0:17:30 - BMT 1892 May 1 12:00 # Brussels MT
+ 0:17:30 - BMT 1892 May 1 12:00 # Brussels MT
0:00 - WET 1914 Nov 8
1:00 - CET 1916 May 1 0:00
1:00 C-Eur CE%sT 1918 Nov 11 11:00u
@@ -805,8 +808,8 @@ Zone Europe/Brussels 0:17:30 - LMT 1880
#
# From Plamen Simenov via Steffen Thorsen (1999-09-09):
# A document of Government of Bulgaria (No.94/1997) says:
-# EET --> EETDST is in 03:00 Local time in last Sunday of March ...
-# EETDST --> EET is in 04:00 Local time in last Sunday of October
+# EET -> EETDST is in 03:00 Local time in last Sunday of March ...
+# EETDST -> EET is in 04:00 Local time in last Sunday of October
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Bulg 1979 only - Mar 31 23:00 1:00 S
@@ -819,7 +822,7 @@ Zone Europe/Sofia 1:33:16 - LMT 1880
1:56:56 - IMT 1894 Nov 30 # Istanbul MT?
2:00 - EET 1942 Nov 2 3:00
1:00 C-Eur CE%sT 1945
- 1:00 - CET 1945 Apr 2 3:00
+ 1:00 - CET 1945 Apr 2 3:00
2:00 - EET 1979 Mar 31 23:00
2:00 Bulg EE%sT 1982 Sep 26 2:00
2:00 C-Eur EE%sT 1991
@@ -843,15 +846,15 @@ Rule Czech 1948 only - Apr 18 2:00s 1:00 S
Rule Czech 1949 only - Apr 9 2:00s 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Prague 0:57:44 - LMT 1850
- 0:57:44 - PMT 1891 Oct # Prague Mean Time
- 1:00 C-Eur CE%sT 1944 Sep 17 2:00s
+ 0:57:44 - PMT 1891 Oct # Prague Mean Time
+ 1:00 C-Eur CE%sT 1944 Sep 17 2:00s
1:00 Czech CE%sT 1979
1:00 EU CE%sT
# Use Europe/Prague also for Slovakia.
# Denmark, Faroe Islands, and Greenland
-# From Jesper Norgaard Welen (2005-04-26):
+# From Jesper Nørgaard Welen (2005-04-26):
# http://www.hum.aau.dk/~poe/tid/tine/DanskTid.htm says that the law
# [introducing standard time] was in effect from 1894-01-01....
# The page http://www.retsinfo.dk/_GETDOCI_/ACCN/A18930008330-REGL
@@ -861,7 +864,7 @@ Zone Europe/Prague 0:57:44 - LMT 1850
# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19722110030-REGL
#
# This provoked a new law from 1974 to make possible summer time changes
-# in subsequenet decrees with the law
+# in subsequent decrees with the law
# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19740022330-REGL
#
# It seems however that no decree was set forward until 1980. I have
@@ -876,7 +879,7 @@ Zone Europe/Prague 0:57:44 - LMT 1850
# was suspended on that night):
# http://www.retsinfo.dk/_GETDOCI_/ACCN/C19801120554-REGL
-# From Jesper Norgaard Welen (2005-06-11):
+# From Jesper Nørgaard Welen (2005-06-11):
# The Herning Folkeblad (1980-09-26) reported that the night between
# Saturday and Sunday the clock is set back from three to two.
@@ -900,11 +903,11 @@ Rule Denmark 1948 only - Aug 8 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Copenhagen 0:50:20 - LMT 1890
0:50:20 - CMT 1894 Jan 1 # Copenhagen MT
- 1:00 Denmark CE%sT 1942 Nov 2 2:00s
- 1:00 C-Eur CE%sT 1945 Apr 2 2:00
+ 1:00 Denmark CE%sT 1942 Nov 2 2:00s
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00
1:00 Denmark CE%sT 1980
1:00 EU CE%sT
-Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Torshavn
+Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Tórshavn
0:00 - WET 1981
0:00 EU WE%sT
#
@@ -916,11 +919,11 @@ Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Torshavn
# From Paul Eggert (2006-03-22):
# Greenland joined the EU as part of Denmark, obtained home rule on 1979-05-01,
# and left the EU on 1985-02-01. It therefore should have been using EU
-# rules at least through 1984. Shanks & Pottenger say Scoresbysund and Godthab
+# rules at least through 1984. Shanks & Pottenger say Scoresbysund and Godthåb
# used C-Eur rules after 1980, but IATA SSIM (1991/1996) says they use EU
# rules since at least 1991. Assume EU rules since 1980.
-# From Gwillin Law (2001-06-06), citing
+# From Gwillim Law (2001-06-06), citing
# <http://www.statkart.no/efs/efshefter/2001/efs5-2001.pdf> (2001-03-15),
# and with translations corrected by Steffen Thorsen:
#
@@ -955,16 +958,16 @@ Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Torshavn
# DPC research station at Zackenberg.
#
# Scoresbysund and two small villages nearby keep time UTC-1 and use
-# the same daylight savings time period as in West Greenland (Godthab).
+# the same daylight savings time period as in West Greenland (Godthåb).
#
-# The rest of Greenland, including Godthab (this area, although it
+# The rest of Greenland, including Godthåb (this area, although it
# includes central Greenland, is known as west Greenland), keeps time
# UTC-3, with daylight savings methods according to European rules.
#
# It is common procedure to use UTC 0 in the wilderness of East and
# North Greenland, because it is mainly Icelandic aircraft operators
# maintaining traffic in these areas. However, the official status of
-# this area is that it sticks with Godthab time. This area might be
+# this area is that it sticks with Godthåb time. This area might be
# considered a dual time zone in some respects because of this.
# From Rives McDow (2001-11-19):
@@ -973,8 +976,8 @@ Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Torshavn
# From Paul Eggert (2006-03-22):
# From 1997 on the CIA map shows Danmarkshavn on GMT;
-# the 1995 map as like Godthab.
-# For lack of better info, assume they were like Godthab before 1996.
+# the 1995 map as like Godthåb.
+# For lack of better info, assume they were like Godthåb before 1996.
# startkart.no says Thule does not observe DST, but this is clearly an error,
# so go with Shanks & Pottenger for Thule transitions until this year.
# For 2007 on assume Thule will stay in sync with US DST rules.
@@ -989,15 +992,15 @@ Rule Thule 2007 max - Nov Sun>=1 2:00 0 S
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28
- -3:00 - WGT 1980 Apr 6 2:00
+ -3:00 - WGT 1980 Apr 6 2:00
-3:00 EU WG%sT 1996
0:00 - GMT
Zone America/Scoresbysund -1:27:52 - LMT 1916 Jul 28 # Ittoqqortoormiit
- -2:00 - CGT 1980 Apr 6 2:00
+ -2:00 - CGT 1980 Apr 6 2:00
-2:00 C-Eur CG%sT 1981 Mar 29
-1:00 EU EG%sT
Zone America/Godthab -3:26:56 - LMT 1916 Jul 28 # Nuuk
- -3:00 - WGT 1980 Apr 6 2:00
+ -3:00 - WGT 1980 Apr 6 2:00
-3:00 EU WG%sT
Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik air base
-4:00 Thule A%sT
@@ -1019,17 +1022,16 @@ Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik air base
# summer time next spring."
# From Peter Ilieve (1998-11-04), heavily edited:
-# <a href="http://trip.rk.ee/cgi-bin/thw?${BASE}=akt&${OOHTML}=rtd&TA=1998&TO=1&AN=1390">
# The 1998-09-22 Estonian time law
-# </a>
+# http://trip.rk.ee/cgi-bin/thw?${BASE}=akt&${OOHTML}=rtd&TA=1998&TO=1&AN=1390
# refers to the Eighth Directive and cites the association agreement between
-# the EU and Estonia, ratified by the Estonian law (RT II 1995, 22--27, 120).
+# the EU and Estonia, ratified by the Estonian law (RT II 1995, 22-27, 120).
#
# I also asked [my relative] whether they use any standard abbreviation
# for their standard and summer times. He says no, they use "suveaeg"
# (summer time) and "talveaeg" (winter time).
-# From <a href="http://www.baltictimes.com/">The Baltic Times</a> (1999-09-09)
+# From The Baltic Times <http://www.baltictimes.com/> (1999-09-09)
# via Steffen Thorsen:
# This year will mark the last time Estonia shifts to summer time,
# a council of the ruling coalition announced Sept. 6....
@@ -1047,19 +1049,19 @@ Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik air base
# The Estonian government has changed once again timezone politics.
# Now we are using again EU rules.
#
-# From Urmet Jaanes (2002-03-28):
+# From Urmet Jänes (2002-03-28):
# The legislative reference is Government decree No. 84 on 2002-02-21.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Tallinn 1:39:00 - LMT 1880
- 1:39:00 - TMT 1918 Feb # Tallinn Mean Time
+ 1:39:00 - TMT 1918 Feb # Tallinn Mean Time
1:00 C-Eur CE%sT 1919 Jul
1:39:00 - TMT 1921 May
2:00 - EET 1940 Aug 6
3:00 - MSK 1941 Sep 15
1:00 C-Eur CE%sT 1944 Sep 22
- 3:00 Russia MSK/MSD 1989 Mar 26 2:00s
- 2:00 1:00 EEST 1989 Sep 24 2:00s
+ 3:00 Russia MSK/MSD 1989 Mar 26 2:00s
+ 2:00 1:00 EEST 1989 Sep 24 2:00s
2:00 C-Eur EE%sT 1998 Sep 22
2:00 EU EE%sT 1999 Nov 1
2:00 - EET 2002 Feb 21
@@ -1081,35 +1083,45 @@ Zone Europe/Tallinn 1:39:00 - LMT 1880
# This is documented in Heikki Oja: Aikakirja 2007, published by The Almanac
# Office of University of Helsinki, ISBN 952-10-3221-9, available online (in
# Finnish) at
-#
-# <a href="http://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf">
# http://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf
-# </a>
#
# Page 105 (56 in PDF version) has a handy table of all past daylight savings
# transitions. It is easy enough to interpret without Finnish skills.
#
# This is also confirmed by Finnish Broadcasting Company's archive at:
-#
-# <a href="http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401">
# http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401
-# </a>
#
# The news clip from 1981 says that "the time between 2 and 3 o'clock does not
# exist tonight."
+# From Konstantin Hyppönen (2014-06-13):
+# [Heikki Oja's book Aikakirja 2013]
+# http://almanakka.helsinki.fi/images/aikakirja/Aikakirja2013kokonaan.pdf
+# pages 104-105, including a scan from a newspaper published on Apr 2 1942
+# say that ... [o]n Apr 2 1942, 24 o'clock (which means Apr 3 1942,
+# 00:00), clocks were moved one hour forward. The newspaper
+# mentions "on the night from Thursday to Friday"....
+# On Oct 4 1942, clocks were moved at 1:00 one hour backwards.
+#
+# From Paul Eggert (2014-06-14):
+# Go with Oja over Shanks.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Finland 1942 only - Apr 3 0:00 1:00 S
-Rule Finland 1942 only - Oct 3 0:00 0 -
+Rule Finland 1942 only - Apr 2 24:00 1:00 S
+Rule Finland 1942 only - Oct 4 1:00 0 -
Rule Finland 1981 1982 - Mar lastSun 2:00 1:00 S
Rule Finland 1981 1982 - Sep lastSun 3:00 0 -
+
+# Milne says Helsinki (Helsingfors) time was 1:39:49.2 (official document);
+# round to nearest.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Helsinki 1:39:52 - LMT 1878 May 31
- 1:39:52 - HMT 1921 May # Helsinki Mean Time
+Zone Europe/Helsinki 1:39:49 - LMT 1878 May 31
+ 1:39:49 - HMT 1921 May # Helsinki Mean Time
2:00 Finland EE%sT 1983
2:00 EU EE%sT
-# Aaland Is
+# Åland Is
Link Europe/Helsinki Europe/Mariehamn
@@ -1117,14 +1129,14 @@ Link Europe/Helsinki Europe/Mariehamn
# From Ciro Discepolo (2000-12-20):
#
-# Henri Le Corre, Regimes Horaires pour le monde entier, Editions
+# Henri Le Corre, Régimes horaires pour le monde entier, Éditions
# Traditionnelles - Paris 2 books, 1993
#
-# Gabriel, Traite de l'heure dans le monde, Guy Tredaniel editeur,
+# Gabriel, Traité de l'heure dans le monde, Guy Trédaniel,
# Paris, 1991
#
-# Francoise Gauquelin, Problemes de l'heure resolus en astrologie,
-# Guy tredaniel, Paris 1987
+# Françoise Gauquelin, Problèmes de l'heure résolus en astrologie,
+# Guy Trédaniel, Paris 1987
#
@@ -1165,16 +1177,16 @@ Rule France 1939 only - Nov 18 23:00s 0 -
Rule France 1940 only - Feb 25 2:00 1:00 S
# The French rules for 1941-1944 were not used in Paris, but Shanks & Pottenger
# write that they were used in Monaco and in many French locations.
-# Le Corre writes that the upper limit of the free zone was Arneguy, Orthez,
-# Mont-de-Marsan, Bazas, Langon, Lamotte-Montravel, Marouil, La
-# Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Descartes,
+# Le Corre writes that the upper limit of the free zone was Arnéguy, Orthez,
+# Mont-de-Marsan, Bazas, Langon, Lamothe-Montravel, Marœuil, La
+# Rochefoucauld, Champagne-Mouton, La Roche-Posay, La Haye-Descartes,
# Loches, Montrichard, Vierzon, Bourges, Moulins, Digoin,
-# Paray-le-Monial, Montceau-les-Mines, Chalons-sur-Saone, Arbois,
+# Paray-le-Monial, Montceau-les-Mines, Chalon-sur-Saône, Arbois,
# Dole, Morez, St-Claude, and Collonges (Haute-Savoie).
Rule France 1941 only - May 5 0:00 2:00 M # Midsummer
# Shanks & Pottenger say this transition occurred at Oct 6 1:00,
# but go with Denis Excoffier (1997-12-12),
-# who quotes the Ephemerides Astronomiques for 1998 from Bureau des Longitudes
+# who quotes the Ephémérides astronomiques for 1998 from Bureau des Longitudes
# as saying 5/10/41 22hUT.
Rule France 1941 only - Oct 6 0:00 1:00 S
Rule France 1942 only - Mar 9 0:00 2:00 M
@@ -1195,7 +1207,7 @@ Rule France 1976 only - Sep 26 1:00 0 -
# on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01
- 0:09:21 - PMT 1911 Mar 11 0:01 # Paris MT
+ 0:09:21 - PMT 1911 Mar 11 0:01 # Paris MT
# Shanks & Pottenger give 1940 Jun 14 0:00; go with Excoffier and Le Corre.
0:00 France WE%sT 1940 Jun 14 23:00
# Le Corre says Paris stuck with occupied-France time after the liberation;
@@ -1212,15 +1224,13 @@ Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01
# Bundesanstalt contains DST information back to 1916.
# [See tz-link.htm for the URL.]
-# From Joerg Schilling (2002-10-23):
+# From Jörg Schilling (2002-10-23):
# In 1945, Berlin was switched to Moscow Summer time (GMT+4) by
-# <a href="http://www.dhm.de/lemo/html/biografien/BersarinNikolai/">
-# General [Nikolai] Bersarin</a>.
+# http://www.dhm.de/lemo/html/biografien/BersarinNikolai/
+# General [Nikolai] Bersarin.
# From Paul Eggert (2003-03-08):
-# <a href="http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf">
# http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf
-# </a>
# says that Bersarin issued an order to use Moscow time on May 20.
# However, Moscow did not observe daylight saving in 1945, so
# this was equivalent to CEMT (GMT+3), not GMT+4.
@@ -1245,23 +1255,23 @@ Rule SovietZone 1945 only - Nov 18 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Berlin 0:53:28 - LMT 1893 Apr
- 1:00 C-Eur CE%sT 1945 May 24 2:00
+ 1:00 C-Eur CE%sT 1945 May 24 2:00
1:00 SovietZone CE%sT 1946
1:00 Germany CE%sT 1980
1:00 EU CE%sT
# From Tobias Conradi (2011-09-12):
-# Busingen <http://www.buesingen.de>, surrounded by the Swiss canton
+# Büsingen <http://www.buesingen.de>, surrounded by the Swiss canton
# Schaffhausen, did not start observing DST in 1980 as the rest of DE
# (West Germany at that time) and DD (East Germany at that time) did.
# DD merged into DE, the area is currently covered by code DE in ISO 3166-1,
# which in turn is covered by the zone Europe/Berlin.
#
-# Source for the time in Busingen 1980:
+# Source for the time in Büsingen 1980:
# http://www.srf.ch/player/video?id=c012c029-03b7-4c2b-9164-aa5902cd58d3
# From Arthur David Olson (2012-03-03):
-# Busingen and Zurich have shared clocks since 1970.
+# Büsingen and Zurich have shared clocks since 1970.
Link Europe/Zurich Europe/Busingen
@@ -1272,8 +1282,8 @@ Link Europe/Zurich Europe/Busingen
# Gibraltar
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2 0:00s
- 0:00 GB-Eire %s 1957 Apr 14 2:00
+Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2 0:00s
+ 0:00 GB-Eire %s 1957 Apr 14 2:00
1:00 - CET 1982
1:00 EU CE%sT
@@ -1304,7 +1314,7 @@ Rule Greece 1980 only - Apr 1 0:00 1:00 S
Rule Greece 1980 only - Sep 28 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Athens 1:34:52 - LMT 1895 Sep 14
- 1:34:52 - AMT 1916 Jul 28 0:01 # Athens MT
+ 1:34:52 - AMT 1916 Jul 28 0:01 # Athens MT
2:00 Greece EE%sT 1941 Apr 30
1:00 Greece CE%sT 1944 Apr 4
2:00 Greece EE%sT 1981
@@ -1313,15 +1323,20 @@ Zone Europe/Athens 1:34:52 - LMT 1895 Sep 14
2:00 EU EE%sT
# Hungary
+# From Paul Eggert (2014-07-15):
+# Dates for 1916-1945 are taken from:
+# Oross A. Jelen a múlt jövője: a nyári időszámítás Magyarországon 1916-1945.
+# National Archives of Hungary (2012-10-29).
+# http://mnl.gov.hu/a_het_dokumentuma/a_nyari_idoszamitas_magyarorszagon_19161945.html
+# This source does not always give times, which are taken from Shanks
+# & Pottenger (which disagree about the dates).
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Hungary 1918 only - Apr 1 3:00 1:00 S
-Rule Hungary 1918 only - Sep 29 3:00 0 -
+Rule Hungary 1918 only - Sep 16 3:00 0 -
Rule Hungary 1919 only - Apr 15 3:00 1:00 S
-Rule Hungary 1919 only - Sep 15 3:00 0 -
-Rule Hungary 1920 only - Apr 5 3:00 1:00 S
-Rule Hungary 1920 only - Sep 30 3:00 0 -
+Rule Hungary 1919 only - Nov 24 3:00 0 -
Rule Hungary 1945 only - May 1 23:00 1:00 S
-Rule Hungary 1945 only - Nov 3 0:00 0 -
+Rule Hungary 1945 only - Nov 1 0:00 0 -
Rule Hungary 1946 only - Mar 31 2:00s 1:00 S
Rule Hungary 1946 1949 - Oct Sun>=1 2:00s 0 -
Rule Hungary 1947 1949 - Apr Sun>=4 2:00s 1:00 S
@@ -1337,7 +1352,7 @@ Rule Hungary 1980 only - Apr 6 1:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Budapest 1:16:20 - LMT 1890 Oct
1:00 C-Eur CE%sT 1918
- 1:00 Hungary CE%sT 1941 Apr 6 2:00
+ 1:00 Hungary CE%sT 1941 Apr 8
1:00 C-Eur CE%sT 1945
1:00 Hungary CE%sT 1980 Sep 28 2:00s
1:00 EU CE%sT
@@ -1400,7 +1415,7 @@ Rule Iceland 1967 only - Oct 29 1:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/Reykjavik -1:27:24 - LMT 1837
-1:27:48 - RMT 1908 # Reykjavik Mean Time?
- -1:00 Iceland IS%sT 1968 Apr 7 1:00s
+ -1:00 Iceland IS%sT 1968 Apr 7 1:00s
0:00 - GMT
# Italy
@@ -1415,9 +1430,8 @@ Zone Atlantic/Reykjavik -1:27:24 - LMT 1837
# From Paul Eggert (2006-03-22):
# For Italian DST we have three sources: Shanks & Pottenger, Whitman, and
# F. Pollastri
-# <a href="http://toi.iriti.cnr.it/uk/ienitlt.html">
# Day-light Saving Time in Italy (2006-02-03)
-# </a>
+# http://toi.iriti.cnr.it/uk/ienitlt.html
# ('FP' below), taken from an Italian National Electrotechnical Institute
# publication. When the three sources disagree, guess who's right, as follows:
#
@@ -1477,8 +1491,8 @@ Rule Italy 1978 only - Oct 1 0:00s 0 -
Rule Italy 1979 only - Sep 30 0:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Rome 0:49:56 - LMT 1866 Sep 22
- 0:49:56 - RMT 1893 Nov 1 0:00s # Rome Mean
- 1:00 Italy CE%sT 1942 Nov 2 2:00s
+ 0:49:56 - RMT 1893 Nov 1 0:00s # Rome Mean
+ 1:00 Italy CE%sT 1942 Nov 2 2:00s
1:00 C-Eur CE%sT 1944 Jul
1:00 Italy CE%sT 1980
1:00 EU CE%sT
@@ -1525,18 +1539,18 @@ Link Europe/Rome Europe/San_Marino
# From Andrei Ivanov (2000-03-06):
# This year Latvia will not switch to Daylight Savings Time (as specified in
-# <a href="http://www.lv-laiks.lv/wwwraksti/2000/071072/vd4.htm">
# The Regulations of the Cabinet of Ministers of the Rep. of Latvia of
-# 29-Feb-2000 (#79)</a>, in Latvian for subscribers only).
+# 29-Feb-2000 (#79) <http://www.lv-laiks.lv/wwwraksti/2000/071072/vd4.htm>,
+# in Latvian for subscribers only).
-# <a href="http://www.rferl.org/newsline/2001/01/3-CEE/cee-030101.html">
-# From RFE/RL Newsline (2001-01-03), noted after a heads-up by Rives McDow:
-# </a>
+# From RFE/RL Newsline
+# http://www.rferl.org/newsline/2001/01/3-CEE/cee-030101.html
+# (2001-01-03), noted after a heads-up by Rives McDow:
# The Latvian government on 2 January decided that the country will
# institute daylight-saving time this spring, LETA reported.
# Last February the three Baltic states decided not to turn back their
# clocks one hour in the spring....
-# Minister of Economy Aigars Kalvitis noted that Latvia had too few
+# Minister of Economy Aigars Kalvītis noted that Latvia had too few
# daylight hours and thus decided to comply with a draft European
# Commission directive that provides for instituting daylight-saving
# time in EU countries between 2002 and 2006. The Latvian government
@@ -1546,18 +1560,23 @@ Link Europe/Rome Europe/San_Marino
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Latvia 1989 1996 - Mar lastSun 2:00s 1:00 S
Rule Latvia 1989 1996 - Sep lastSun 2:00s 0 -
+
+# Milne 1899 says Riga was 1:36:28 (Polytechnique House time).
+# Byalokoz 1919 says Latvia was 1:36:34.
+# Go with Byalokoz.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Riga 1:36:24 - LMT 1880
- 1:36:24 - RMT 1918 Apr 15 2:00 #Riga Mean Time
- 1:36:24 1:00 LST 1918 Sep 16 3:00 #Latvian Summer
- 1:36:24 - RMT 1919 Apr 1 2:00
- 1:36:24 1:00 LST 1919 May 22 3:00
- 1:36:24 - RMT 1926 May 11
+Zone Europe/Riga 1:36:34 - LMT 1880
+ 1:36:34 - RMT 1918 Apr 15 2:00 # Riga MT
+ 1:36:34 1:00 LST 1918 Sep 16 3:00 # Latvian ST
+ 1:36:34 - RMT 1919 Apr 1 2:00
+ 1:36:34 1:00 LST 1919 May 22 3:00
+ 1:36:34 - RMT 1926 May 11
2:00 - EET 1940 Aug 5
3:00 - MSK 1941 Jul
1:00 C-Eur CE%sT 1944 Oct 13
- 3:00 Russia MSK/MSD 1989 Mar lastSun 2:00s
- 2:00 1:00 EEST 1989 Sep lastSun 2:00s
+ 3:00 Russia MSK/MSD 1989 Mar lastSun 2:00s
+ 2:00 1:00 EEST 1989 Sep lastSun 2:00s
2:00 Latvia EE%sT 1997 Jan 21
2:00 EU EE%sT 2000 Feb 29
2:00 - EET 2001 Jan 2
@@ -1591,7 +1610,7 @@ Link Europe/Zurich Europe/Vaduz
# I would like to inform that in this year Lithuanian time zone
# (Europe/Vilnius) was changed.
-# From <a href="http://www.elta.lt/">ELTA</a> No. 972 (2582) (1999-09-29),
+# From ELTA No. 972 (2582) (1999-09-29) <http://www.elta.lt/>,
# via Steffen Thorsen:
# Lithuania has shifted back to the second time zone (GMT plus two hours)
# to be valid here starting from October 31,
@@ -1600,9 +1619,9 @@ Link Europe/Zurich Europe/Vaduz
# motion to give up shifting to summer time in spring, as it was
# already done by Estonia.
-# From the <a href="http://www.tourism.lt/informa/ff.htm">
-# Fact File, Lithuanian State Department of Tourism
-# </a> (2000-03-27): Local time is GMT+2 hours ..., no daylight saving.
+# From the Fact File, Lithuanian State Department of Tourism
+# <http://www.tourism.lt/informa/ff.htm> (2000-03-27):
+# Local time is GMT+2 hours ..., no daylight saving.
# From a user via Klaus Marten (2003-02-07):
# As a candidate for membership of the European Union, Lithuania will
@@ -1615,18 +1634,18 @@ Link Europe/Zurich Europe/Vaduz
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Vilnius 1:41:16 - LMT 1880
- 1:24:00 - WMT 1917 # Warsaw Mean Time
+ 1:24:00 - WMT 1917 # Warsaw Mean Time
1:35:36 - KMT 1919 Oct 10 # Kaunas Mean Time
1:00 - CET 1920 Jul 12
2:00 - EET 1920 Oct 9
1:00 - CET 1940 Aug 3
3:00 - MSK 1941 Jun 24
1:00 C-Eur CE%sT 1944 Aug
- 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
- 2:00 1:00 EEST 1991 Sep 29 2:00s
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
+ 2:00 1:00 EEST 1991 Sep 29 2:00s
2:00 C-Eur EE%sT 1998
- 2:00 - EET 1998 Mar 29 1:00u
- 1:00 EU CE%sT 1999 Oct 31 1:00u
+ 2:00 - EET 1998 Mar 29 1:00u
+ 1:00 EU CE%sT 1999 Oct 31 1:00u
2:00 - EET 2003 Jan 1
2:00 EU EE%sT
@@ -1660,9 +1679,9 @@ Rule Lux 1929 only - Apr 20 23:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Luxembourg 0:24:36 - LMT 1904 Jun
1:00 Lux CE%sT 1918 Nov 25
- 0:00 Lux WE%sT 1929 Oct 6 2:00s
- 0:00 Belgium WE%sT 1940 May 14 3:00
- 1:00 C-Eur WE%sT 1944 Sep 18 3:00
+ 0:00 Lux WE%sT 1929 Oct 6 2:00s
+ 0:00 Belgium WE%sT 1940 May 14 3:00
+ 1:00 C-Eur WE%sT 1944 Sep 18 3:00
1:00 Belgium CE%sT 1977
1:00 EU CE%sT
@@ -1679,9 +1698,9 @@ Rule Malta 1975 1979 - Apr Sun>=15 2:00 1:00 S
Rule Malta 1975 1980 - Sep Sun>=15 2:00 0 -
Rule Malta 1980 only - Mar 31 2:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
- 1:00 Italy CE%sT 1942 Nov 2 2:00s
- 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
+Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
+ 1:00 Italy CE%sT 1942 Nov 2 2:00s
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
1:00 Italy CE%sT 1973 Mar 31
1:00 Malta CE%sT 1981
1:00 EU CE%sT
@@ -1696,7 +1715,7 @@ Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
# In early 1992 there was large-scale interethnic violence in the area
# and it's possible that some Russophones continued to observe Moscow time.
# But [two people] separately reported via
-# Jesper Norgaard that as of 2001-01-24 Tiraspol was like Chisinau.
+# Jesper Nørgaard that as of 2001-01-24 Tiraspol was like Chisinau.
# The Tiraspol entry has therefore been removed for now.
#
# From Alexander Krivenyshev (2011-10-17):
@@ -1705,13 +1724,8 @@ Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
# to the Winter Time).
#
# News (in Russian):
-# <a href="http://www.kyivpost.ua/russia/news/pridnestrove-otkazalos-ot-perehoda-na-zimnee-vremya-30954.html">
# http://www.kyivpost.ua/russia/news/pridnestrove-otkazalos-ot-perehoda-na-zimnee-vremya-30954.html
-# </a>
-#
-# <a href="http://www.allmoldova.com/moldova-news/1249064116.html">
# http://www.allmoldova.com/moldova-news/1249064116.html
-# </a>
#
# The substance of this change (reinstatement of the Tiraspol entry)
# is from a patch from Petr Machata (2011-10-17)
@@ -1729,9 +1743,7 @@ Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
# Following Moldova and neighboring Ukraine- Transnistria (Pridnestrovie)-
# Tiraspol will go back to winter time on October 30, 2011.
# News from Moldova (in russian):
-# <a href="http://ru.publika.md/link_317061.html">
# http://ru.publika.md/link_317061.html
-# </a>
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1754,8 +1766,8 @@ Zone Europe/Chisinau 1:55:20 - LMT 1880
# more precise 0:09:21.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
- 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
- 0:00 France WE%sT 1945 Sep 16 3:00
+ 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
+ 0:00 France WE%sT 1945 Sep 16 3:00
1:00 France CE%sT 1977
1:00 EU CE%sT
@@ -1799,8 +1811,8 @@ Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
# was not until 1866 when they were all required by law to observe
# Amsterdam mean time.
-# The data before 1945 are taken from
-# <http://www.phys.uu.nl/~vgent/wettijd/wettijd.htm>.
+# The data entries before 1945 are taken from
+# http://www.phys.uu.nl/~vgent/wettijd/wettijd.htm
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Neth 1916 only - May 1 0:00 1:00 NST # Netherlands Summer Time
@@ -1831,8 +1843,8 @@ Rule Neth 1945 only - Sep 16 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Amsterdam 0:19:32 - LMT 1835
0:19:32 Neth %s 1937 Jul 1
- 0:20 Neth NE%sT 1940 May 16 0:00 # Dutch Time
- 1:00 C-Eur CE%sT 1945 Apr 2 2:00
+ 0:20 Neth NE%sT 1940 May 16 0:00 # Dutch Time
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00
1:00 Neth CE%sT 1977
1:00 EU CE%sT
@@ -1862,14 +1874,14 @@ Zone Europe/Oslo 0:43:00 - LMT 1895 Jan 1
# time they were declared as parts of Norway. Svalbard was declared
# as a part of Norway by law of 1925-07-17 no 11, section 4 and Jan
# Mayen by law of 1930-02-27 no 2, section 2. (From
-# http://www.lovdata.no/all/nl-19250717-011.html and
-# http://www.lovdata.no/all/nl-19300227-002.html). The law/regulation
+# <http://www.lovdata.no/all/nl-19250717-011.html> and
+# <http://www.lovdata.no/all/nl-19300227-002.html>). The law/regulation
# for normal/standard time in Norway is from 1894-06-29 no 1 (came
# into operation on 1895-01-01) and Svalbard/Jan Mayen seem to be a
# part of this law since 1925/1930. (From
-# http://www.lovdata.no/all/nl-18940629-001.html ) I have not been
+# <http://www.lovdata.no/all/nl-18940629-001.html>) I have not been
# able to find if Jan Mayen used a different time zone (e.g. -0100)
-# before 1930. Jan Mayen has only been "inhabitated" since 1921 by
+# before 1930. Jan Mayen has only been "inhabited" since 1921 by
# Norwegian meteorologists and maybe used the same time as Norway ever
# since 1921. Svalbard (Arctic/Longyearbyen) has been inhabited since
# before 1895, and therefore probably changed the local time somewhere
@@ -1884,7 +1896,7 @@ Zone Europe/Oslo 0:43:00 - LMT 1895 Jan 1
# <http://home.no.net/janmayen/history.htm> says that the meteorologists
# burned down their station in 1940 and left the island, but returned in
# 1941 with a small Norwegian garrison and continued operations despite
-# frequent air ttacks from Germans. In 1943 the Americans established a
+# frequent air attacks from Germans. In 1943 the Americans established a
# radiolocating station on the island, called "Atlantic City". Possibly
# the UT offset changed during the war, but I think it unlikely that
# Jan Mayen used German daylight-saving rules.
@@ -1895,7 +1907,7 @@ Zone Europe/Oslo 0:43:00 - LMT 1895 Jan 1
# <http://www.svalbard.com/SvalbardFAQ.html> says that the Germans were
# expelled on 1942-05-14. However, small parties of Germans did return,
# and according to Wilhelm Dege's book "War North of 80" (1954)
-# <http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html>
+# http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html
# the German armed forces at the Svalbard weather station code-named
# Haudegen did not surrender to the Allies until September 1945.
#
@@ -1904,6 +1916,10 @@ Zone Europe/Oslo 0:43:00 - LMT 1895 Jan 1
Link Europe/Oslo Arctic/Longyearbyen
# Poland
+
+# The 1919 dates and times can be found in Tygodnik Urzędowy nr 1 (1919-03-20),
+# <http://www.wbc.poznan.pl/publication/32156> pp 1-2.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Poland 1918 1919 - Sep 16 2:00s 0 -
Rule Poland 1919 only - Apr 15 2:00s 1:00 S
@@ -1914,9 +1930,9 @@ Rule Poland 1944 only - Oct 4 2:00 0 -
Rule Poland 1945 only - Apr 29 0:00 1:00 S
Rule Poland 1945 only - Nov 1 0:00 0 -
# For 1946 on the source is Kazimierz Borkowski,
-# Torun Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U.,
-# <http://www.astro.uni.torun.pl/~kb/Artykuly/U-PA/Czas2.htm#tth_tAb1>
-# Thanks to Przemyslaw Augustyniak (2005-05-28) for this reference.
+# Toruń Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U.,
+# http://www.astro.uni.torun.pl/~kb/Artykuly/U-PA/Czas2.htm#tth_tAb1
+# Thanks to Przemysław Augustyniak (2005-05-28) for this reference.
# He also gives these further references:
# Mon Pol nr 13, poz 162 (1995) <http://www.abc.com.pl/serwis/mp/1995/0162.htm>
# Druk nr 2180 (2003) <http://www.senat.gov.pl/k5/dok/sejm/053/2180.pdf>
@@ -1936,10 +1952,10 @@ Rule Poland 1961 1964 - May lastSun 1:00s 1:00 S
Rule Poland 1962 1964 - Sep lastSun 1:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Warsaw 1:24:00 - LMT 1880
- 1:24:00 - WMT 1915 Aug 5 # Warsaw Mean Time
- 1:00 C-Eur CE%sT 1918 Sep 16 3:00
+ 1:24:00 - WMT 1915 Aug 5 # Warsaw Mean Time
+ 1:00 C-Eur CE%sT 1918 Sep 16 3:00
2:00 Poland EE%sT 1922 Jun
- 1:00 Poland CE%sT 1940 Jun 23 2:00
+ 1:00 Poland CE%sT 1940 Jun 23 2:00
1:00 C-Eur CE%sT 1944 Oct
1:00 Poland CE%sT 1977
1:00 W-Eur CE%sT 1988
@@ -1947,6 +1963,14 @@ 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)
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# Lisbon was at -0:36:44.68, but switched to GMT on 1912-01-01 at 00:00.
+# Round the old offset to -0:36:45. This agrees with Willett but disagrees
+# with Shanks, who says the transition occurred on 1911-05-24 at 00:00 for
+# Europe/Lisbon, Atlantic/Azores, and Atlantic/Madeira.
+#
# From Rui Pedro Salgueiro (1992-11-12):
# Portugal has recently (September, 27) changed timezone
# (from WET to MET or CET) to harmonize with EEC.
@@ -2026,35 +2050,34 @@ 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
+#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-# Shanks & Pottenger say the transition from LMT to WET occurred 1911-05-24;
-# Willett says 1912-01-01. Go with Willett.
-Zone Europe/Lisbon -0:36:32 - LMT 1884
- -0:36:32 - LMT 1912 Jan 1 # Lisbon Mean Time
- 0:00 Port WE%sT 1966 Apr 3 2:00
- 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
- 1:00 EU CE%sT 1996 Mar 31 1:00u
+Zone Europe/Lisbon -0:36:45 - LMT 1884
+ -0:36:45 - LMT 1912 Jan 1 # Lisbon Mean Time
+ 0:00 Port WE%sT 1966 Apr 3 2:00
+ 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
+ 1:00 EU CE%sT 1996 Mar 31 1:00u
0:00 EU WE%sT
-Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada
- -1:54:32 - HMT 1911 May 24 # Horta Mean Time
- -2:00 Port AZO%sT 1966 Apr 3 2:00 # Azores Time
- -1:00 Port AZO%sT 1983 Sep 25 1:00s
- -1:00 W-Eur AZO%sT 1992 Sep 27 1:00s
- 0:00 EU WE%sT 1993 Mar 28 1:00u
+Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada
+ -1:54:32 - HMT 1912 Jan 1 # Horta Mean Time
+ -2:00 Port AZO%sT 1966 Apr 3 2:00 # Azores Time
+ -1:00 Port AZO%sT 1983 Sep 25 1:00s
+ -1:00 W-Eur AZO%sT 1992 Sep 27 1:00s
+ 0:00 EU WE%sT 1993 Mar 28 1:00u
-1:00 EU AZO%sT
-Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal
- -1:07:36 - FMT 1911 May 24 # Funchal Mean Time
- -1:00 Port MAD%sT 1966 Apr 3 2:00 # Madeira Time
- 0:00 Port WE%sT 1983 Sep 25 1:00s
+Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal
+ -1:07:36 - FMT 1912 Jan 1 # Funchal Mean Time
+ -1:00 Port MAD%sT 1966 Apr 3 2:00 # Madeira Time
+ 0:00 Port WE%sT 1983 Sep 25 1:00s
0:00 EU WE%sT
# Romania
#
# From Paul Eggert (1999-10-07):
-# <a href="http://www.nineoclock.ro/POL/1778pol.html">
-# Nine O'clock</a> (1998-10-23) reports that the switch occurred at
+# Nine O'clock <http://www.nineoclock.ro/POL/1778pol.html>
+# (1998-10-23) reports that the switch occurred at
# 04:00 local time in fall 1998. For lack of better info,
# assume that Romania and Moldova switched to EU rules in 1997,
# the same year as Bulgaria.
@@ -2071,32 +2094,28 @@ Rule Romania 1991 1993 - Mar lastSun 0:00s 1:00 S
Rule Romania 1991 1993 - Sep lastSun 0:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct
- 1:44:24 - BMT 1931 Jul 24 # Bucharest MT
- 2:00 Romania EE%sT 1981 Mar 29 2:00s
+ 1:44:24 - BMT 1931 Jul 24 # Bucharest MT
+ 2:00 Romania EE%sT 1981 Mar 29 2:00s
2:00 C-Eur EE%sT 1991
2:00 Romania EE%sT 1994
2:00 E-Eur EE%sT 1997
2:00 EU EE%sT
+
# Russia
# From Alexander Krivenyshev (2011-09-15):
# Based on last Russian Government Decree # 725 on August 31, 2011
# (Government document
-# <a href="http://www.government.ru/gov/results/16355/print/">
# http://www.government.ru/gov/results/16355/print/
-# </a>
# in Russian)
# there are few corrections have to be made for some Russian time zones...
# All updated Russian Time Zones were placed in table and translated to English
# by WorldTimeZone.com at the link below:
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_russia36.htm">
# http://www.worldtimezone.com/dst_news/dst_news_russia36.htm
-# </a>
# From Sanjeev Gupta (2011-09-27):
# Scans of [Decree #23 of January 8, 1992] are available at:
-# <a href="http://government.consultant.ru/page.aspx?1223966">
# http://government.consultant.ru/page.aspx?1223966
# They are in Cyrillic letters (presumably Russian).
@@ -2105,16 +2124,12 @@ Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct
# changed in September 2011:
#
# One source is
-# < a href="http://government.ru/gov/results/16355/>
# http://government.ru/gov/results/16355/
-# </a>
# which, according to translate.google.com, begins "Decree of August 31,
# 2011 No 725" and contains no other dates or "effective date" information.
#
# Another source is
-# <a href="http://www.rg.ru/2011/09/06/chas-zona-dok.html">
# http://www.rg.ru/2011/09/06/chas-zona-dok.html
-# </a>
# which, according to translate.google.com, begins "Resolution of the
# Government of the Russian Federation on August 31, 2011 N 725" and also
# contains "Date first official publication: September 6, 2011 Posted on:
@@ -2122,28 +2137,45 @@ Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct
# does not contain any "effective date" information.
#
# Another source is
-# <a href="http://en.wikipedia.org/wiki/Oymyakonsky_District#cite_note-RuTime-7">
# http://en.wikipedia.org/wiki/Oymyakonsky_District#cite_note-RuTime-7
-# </a>
# which, in note 8, contains "Resolution #725 of August 31, 2011...
# Effective as of after 7 days following the day of the official publication"
# but which does not contain any reference to September 6, 2011.
#
# The Wikipedia article refers to
-# <a href="http://base.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=118896">
# http://base.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=118896
-# </a>
# which seems to copy the text of the government.ru page.
#
# Tobias Conradi combines Wikipedia's
# "as of after 7 days following the day of the official publication"
-# with www.rg.ru's "Date of first official publication: September 6, 2011" to get
-# September 13, 2011 as the cutover date (unusually, a Tuesday, as Tobias Conradi notes).
+# with www.rg.ru's "Date of first official publication: September 6, 2011" to
+# get September 13, 2011 as the cutover date (unusually, a Tuesday, as Tobias
+# Conradi notes).
#
# None of the sources indicates a time of day for changing clocks.
#
# Go with 2011-09-13 0:00s.
+# From Alexander Krivenyshev (2014-07-01):
+# According to the Russian news (ITAR-TASS News Agency)
+# http://en.itar-tass.com/russia/738562
+# the State Duma has approved ... the draft bill on returning to
+# winter time standard and return Russia 11 time zones. The new
+# regulations will come into effect on October 26, 2014 at 02:00 ...
+# http://asozd2.duma.gov.ru/main.nsf/%28Spravka%29?OpenAgent&RN=431985-6&02
+# Here is a link where we put together table (based on approved Bill N
+# 431985-6) with proposed 11 Russian time zones and corresponding
+# areas/cities/administrative centers in the Russian Federation (in English):
+# http://www.worldtimezone.com/dst_news/dst_news_russia65.html
+#
+# From Alexander Krivenyshev (2014-07-22):
+# Putin signed the Federal Law 431985-6 ... (in Russian)
+# http://itar-tass.com/obschestvo/1333711
+# http://www.pravo.gov.ru:8080/page.aspx?111660
+# http://www.kremlin.ru/acts/46279
+# From October 26, 2014 the new Russian time zone map will looks like this:
+# http://www.worldtimezone.com/dst_news/dst_news_russia-map-2014-07.html
+
# From Paul Eggert (2006-03-22):
# Except for Moscow after 1919-07-01, I invented the time zone abbreviations.
# Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991,
@@ -2170,9 +2202,9 @@ Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct
#
# For Grozny, Chechnya, we have the following story from
# John Daniszewski, "Scavengers in the Rubble", Los Angeles Times (2001-02-07):
-# News--often false--is spread by word of mouth. A rumor that it was
+# News - often false - is spread by word of mouth. A rumor that it was
# time to move the clocks back put this whole city out of sync with
-# the rest of Russia for two weeks--even soldiers stationed here began
+# the rest of Russia for two weeks - even soldiers stationed here began
# enforcing curfew at the wrong time.
#
# From Gwillim Law (2001-06-05):
@@ -2183,107 +2215,265 @@ Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct
# since September 1997.... Although the Kuril Islands are
# administratively part of Sakhalin oblast', they appear to have
# remained on UTC+11 along with Magadan.
-#
+
+# From Tim Parenti (2014-07-06):
+# The comments detailing the coverage of each Russian zone are meant to assist
+# with maintenance only and represent our best guesses as to which regions
+# are covered by each zone. They are not meant to be taken as an authoritative
+# listing. The region codes listed come from
+# http://en.wikipedia.org/w/?title=Federal_subjects_of_Russia&oldid=611810498
+# and are used for convenience only; no guarantees are made regarding their
+# future stability. ISO 3166-2:RU codes are also listed for first-level
+# divisions where available.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-#
-# Kaliningradskaya oblast'.
+
+
+# From Tim Parenti (2014-07-03):
+# Europe/Kaliningrad covers...
+# 39 RU-KGD Kaliningrad Oblast
+
Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr
1:00 C-Eur CE%sT 1945
2:00 Poland CE%sT 1946
- 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
- 2:00 Russia EE%sT 2011 Mar 27 2:00s
- 3:00 - FET # Further-eastern European Time
-#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Adygeya, Arkhangel'skaya oblast',
-# Belgorodskaya oblast', Bryanskaya oblast', Vladimirskaya oblast',
-# Vologodskaya oblast', Voronezhskaya oblast',
-# Respublika Dagestan, Ivanovskaya oblast', Respublika Ingushetiya,
-# Kabarbino-Balkarskaya Respublika, Respublika Kalmykiya,
-# Kalyzhskaya oblast', Respublika Karachaevo-Cherkessiya,
-# Respublika Kareliya, Respublika Komi,
-# Kostromskaya oblast', Krasnodarskij kraj, Kurskaya oblast',
-# Leningradskaya oblast', Lipetskaya oblast', Respublika Marij El,
-# Respublika Mordoviya, Moskva, Moskovskaya oblast',
-# Murmanskaya oblast', Nenetskij avtonomnyj okrug,
-# Nizhegorodskaya oblast', Novgorodskaya oblast', Orlovskaya oblast',
-# Penzenskaya oblast', Pskovskaya oblast', Rostovskaya oblast',
-# Ryazanskaya oblast', Sankt-Peterburg,
-# Respublika Severnaya Osetiya, Smolenskaya oblast',
-# Stavropol'skij kraj, Tambovskaya oblast', Respublika Tatarstan,
-# Tverskaya oblast', Tyl'skaya oblast', Ul'yanovskaya oblast',
-# Chechenskaya Respublika, Chuvashskaya oblast',
-# Yaroslavskaya oblast'
-Zone Europe/Moscow 2:30:20 - LMT 1880
- 2:30 - MMT 1916 Jul 3 # Moscow Mean Time
- 2:30:48 Russia %s 1919 Jul 1 2:00
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
+ 2:00 Russia EE%sT 2011 Mar 27 2:00s
+ 3:00 - FET 2014 Oct 26 2:00s
+ 2:00 - EET
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Europe/Moscow covers...
+# 01 RU-AD Adygea, Republic of
+# 05 RU-DA Dagestan, Republic of
+# 06 RU-IN Ingushetia, Republic of
+# 07 RU-KB Kabardino-Balkar Republic
+# 08 RU-KL Kalmykia, Republic of
+# 09 RU-KC Karachay-Cherkess Republic
+# 10 RU-KR Karelia, Republic of
+# 11 RU-KO Komi Republic
+# 12 RU-ME Mari El Republic
+# 13 RU-MO Mordovia, Republic of
+# 15 RU-SE North Ossetia-Alania, Republic of
+# 16 RU-TA Tatarstan, Republic of
+# 20 RU-CE Chechen Republic
+# 21 RU-CU Chuvash Republic
+# 23 RU-KDA Krasnodar Krai
+# 26 RU-STA Stavropol Krai
+# 29 RU-ARK Arkhangelsk Oblast
+# 31 RU-BEL Belgorod Oblast
+# 32 RU-BRY Bryansk Oblast
+# 33 RU-VLA Vladimir Oblast
+# 35 RU-VLG Vologda Oblast
+# 36 RU-VOR Voronezh Oblast
+# 37 RU-IVA Ivanovo Oblast
+# 40 RU-KLU Kaluga Oblast
+# 44 RU-KOS Kostroma Oblast
+# 46 RU-KRS Kursk Oblast
+# 47 RU-LEN Leningrad Oblast
+# 48 RU-LIP Lipetsk Oblast
+# 50 RU-MOS Moscow Oblast
+# 51 RU-MUR Murmansk Oblast
+# 52 RU-NIZ Nizhny Novgorod Oblast
+# 53 RU-NGR Novgorod Oblast
+# 57 RU-ORL Oryol Oblast
+# 58 RU-PNZ Penza Oblast
+# 60 RU-PSK Pskov Oblast
+# 61 RU-ROS Rostov Oblast
+# 62 RU-RYA Ryazan Oblast
+# 67 RU-SMO Smolensk Oblast
+# 68 RU-TAM Tambov Oblast
+# 69 RU-TVE Tver Oblast
+# 71 RU-TUL Tula Oblast
+# 73 RU-ULY Ulyanovsk Oblast
+# 76 RU-YAR Yaroslavl Oblast
+# 77 RU-MOW Moscow
+# 78 RU-SPE Saint Petersburg
+# 83 RU-NEN Nenets Autonomous Okrug
+
+# From Vladimir Karpinsky (2014-07-08):
+# LMT in Moscow (before Jul 3, 1916) is 2:30:17, that was defined by Moscow
+# Observatory (coordinates: 55 deg. 45'29.70", 37 deg. 34'05.30")....
+# LMT in Moscow since Jul 3, 1916 is 2:31:01 as a result of new standard.
+# (The info is from the book by Byalokoz ... p. 18.)
+# The time in St. Petersburg as capital of Russia was defined by
+# Pulkov observatory, near St. Petersburg. In 1916 LMT Moscow
+# was synchronized with LMT St. Petersburg (+30 minutes), (Pulkov observatory
+# coordinates: 59 deg. 46'18.70", 30 deg. 19'40.70") so 30 deg. 19'40.70" >
+# 2h01m18.7s = 2:01:19. LMT Moscow = LMT St.Petersburg + 30m 2:01:19 + 0:30 =
+# 2:31:19 ...
+#
+# From Paul Eggert (2014-07-08):
+# Milne does not list Moscow, but suggests that its time might be listed in
+# Résumés mensuels et annuels des observations météorologiques (1895).
+# Presumably this is OCLC 85825704, a journal published with parallel text in
+# Russian and French. This source has not been located; go with Karpinsky.
+
+Zone Europe/Moscow 2:30:17 - LMT 1880
+ 2:30:17 - MMT 1916 Jul 3 # Moscow Mean Time
+ 2:31:19 Russia %s 1919 Jul 1 2:00
+ 3:00 Russia %s 1921 Oct
3:00 Russia MSK/MSD 1922 Oct
2:00 - EET 1930 Jun 21
- 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
- 2:00 Russia EE%sT 1992 Jan 19 2:00s
- 3:00 Russia MSK/MSD 2011 Mar 27 2:00s
- 4:00 - MSK
-#
-# Astrakhanskaya oblast', Kirovskaya oblast', Saratovskaya oblast',
-# Volgogradskaya oblast'. Shanks & Pottenger say Kirov is still at +0400
-# but Wikipedia (2006-05-09) says +0300. Perhaps it switched after the
-# others? But we have no data.
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
+ 2:00 Russia EE%sT 1992 Jan 19 2:00s
+ 3:00 Russia MSK/MSD 2011 Mar 27 2:00s
+ 4:00 - MSK 2014 Oct 26 2:00s
+ 3:00 - MSK
+
+
+# From Tim Parenti (2014-07-03):
+# Europe/Simferopol covers...
+# ** **** Crimea, Republic of
+# ** **** Sevastopol
+
+Zone Europe/Simferopol 2:16:24 - LMT 1880
+ 2:16 - SMT 1924 May 2 # Simferopol Mean T
+ 2:00 - EET 1930 Jun 21
+ 3:00 - MSK 1941 Nov
+ 1:00 C-Eur CE%sT 1944 Apr 13
+ 3:00 Russia MSK/MSD 1990
+ 3:00 - MSK 1990 Jul 1 2:00
+ 2:00 - EET 1992
+# Central Crimea used Moscow time 1994/1997.
+#
+# From Paul Eggert (2006-03-22):
+# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
+# from Kiev to Moscow time sometime after the January 1994 elections.
+# Shanks (1999) says "date of change uncertain", but implies that it happened
+# sometime between the 1994 DST switches. Shanks & Pottenger simply say
+# 1994-09-25 03:00, but that can't be right. For now, guess it
+# changed in May.
+ 2:00 E-Eur EE%sT 1994 May
+# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.
+ 3:00 E-Eur MSK/MSD 1996 Mar 31 3:00s
+ 3:00 1:00 MSD 1996 Oct 27 3:00s
+# IATA SSIM (1997-09) says Crimea switched to EET/EEST.
+# Assume it happened in March by not changing the clocks.
+ 3:00 Russia MSK/MSD 1997
+ 3:00 - MSK 1997 Mar lastSun 1:00u
+# From Alexander Krivenyshev (2014-03-17):
+# time change at 2:00 (2am) on March 30, 2014
+# http://vz.ru/news/2014/3/17/677464.html
+# From Paul Eggert (2014-03-30):
+# Simferopol and Sevastopol reportedly changed their central town clocks
+# late the previous day, but this appears to have been ceremonial
+# and the discrepancies are small enough to not worry about.
+ 2:00 EU EE%sT 2014 Mar 30 2:00
+ 4:00 - MSK 2014 Oct 26 2:00s
+ 3:00 - MSK
+
+
+# From Tim Parenti (2014-07-03):
+# Europe/Volgograd covers...
+# 30 RU-AST Astrakhan Oblast
+# 34 RU-VGG Volgograd Oblast
+# 43 RU-KIR Kirov Oblast
+# 64 RU-SAR Saratov Oblast
+
+# From Paul Eggert (2006-05-09):
+# Shanks & Pottenger say Kirov is still at +0400 but Wikipedia says +0300.
+# Perhaps it switched after the others? But we have no data.
+
Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3
3:00 - TSAT 1925 Apr 6 # Tsaritsyn Time
3:00 - STAT 1930 Jun 21 # Stalingrad Time
4:00 - STAT 1961 Nov 11
- 4:00 Russia VOL%sT 1989 Mar 26 2:00s # Volgograd T
- 3:00 Russia VOL%sT 1991 Mar 31 2:00s
- 4:00 - VOLT 1992 Mar 29 2:00s
- 3:00 Russia VOL%sT 2011 Mar 27 2:00s
- 4:00 - VOLT
-#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Samarskaya oblast', Udmyrtskaya respublika
-Zone Europe/Samara 3:20:36 - LMT 1919 Jul 1 2:00
+ 4:00 Russia VOL%sT 1989 Mar 26 2:00s # Volgograd T
+ 3:00 Russia VOL%sT 1991 Mar 31 2:00s
+ 4:00 - VOLT 1992 Mar 29 2:00s
+ 3:00 Russia MSK 2011 Mar 27 2:00s
+ 4:00 - MSK 2014 Oct 26 2:00s
+ 3:00 - MSK
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Europe/Samara covers...
+# 18 RU-UD Udmurt Republic
+# 63 RU-SAM Samara Oblast
+
+# Byalokoz 1919 says Samara was 3:20:20.
+
+Zone Europe/Samara 3:20:20 - LMT 1919 Jul 1 2:00
3:00 - SAMT 1930 Jun 21
4:00 - SAMT 1935 Jan 27
- 4:00 Russia KUY%sT 1989 Mar 26 2:00s # Kuybyshev
- 3:00 Russia KUY%sT 1991 Mar 31 2:00s
- 2:00 Russia KUY%sT 1991 Sep 29 2:00s
- 3:00 - KUYT 1991 Oct 20 3:00
- 4:00 Russia SAM%sT 2010 Mar 28 2:00s # Samara Time
- 3:00 Russia SAM%sT 2011 Mar 27 2:00s
+ 4:00 Russia KUY%sT 1989 Mar 26 2:00s # Kuybyshev
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
+ 2:00 Russia EE%sT 1991 Sep 29 2:00s
+ 3:00 - KUYT 1991 Oct 20 3:00
+ 4:00 Russia SAM%sT 2010 Mar 28 2:00s # Samara Time
+ 3:00 Russia SAM%sT 2011 Mar 27 2:00s
4:00 - SAMT
-#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Bashkortostan, Komi-Permyatskij avtonomnyj okrug,
-# Kurganskaya oblast', Orenburgskaya oblast', Permskaya oblast',
-# Sverdlovskaya oblast', Tyumenskaya oblast',
-# Khanty-Manskijskij avtonomnyj okrug, Chelyabinskaya oblast',
-# Yamalo-Nenetskij avtonomnyj okrug.
-Zone Asia/Yekaterinburg 4:02:24 - LMT 1919 Jul 15 4:00
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Yekaterinburg covers...
+# 02 RU-BA Bashkortostan, Republic of
+# 90 RU-PER Perm Krai
+# 45 RU-KGN Kurgan Oblast
+# 56 RU-ORE Orenburg Oblast
+# 66 RU-SVE Sverdlovsk Oblast
+# 72 RU-TYU Tyumen Oblast
+# 74 RU-CHE Chelyabinsk Oblast
+# 86 RU-KHM Khanty-Mansi Autonomous Okrug - Yugra
+# 89 RU-YAN Yamalo-Nenets Autonomous Okrug
+#
+# Note: Effective 2005-12-01, (59) Perm Oblast and (81) Komi-Permyak
+# Autonomous Okrug merged to form (90, RU-PER) Perm Krai.
+
+# Milne says Yekaterinburg was 4:02:32.9; round to nearest.
+# Byalokoz 1919 says its provincial time was based on Perm, at 3:45:05.
+# Assume it switched on 1916-07-03, the time of the new standard.
+# The 1919 and 1930 transitions are from Shanks.
+
+Zone Asia/Yekaterinburg 4:02:33 - LMT 1916 Jul 3
+ 3:45:05 - PMT 1919 Jul 15 4:00
4:00 - SVET 1930 Jun 21 # Sverdlovsk Time
- 5:00 Russia SVE%sT 1991 Mar 31 2:00s
- 4:00 Russia SVE%sT 1992 Jan 19 2:00s
- 5:00 Russia YEK%sT 2011 Mar 27 2:00s
- 6:00 - YEKT # Yekaterinburg Time
-#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Altaj, Altajskij kraj, Omskaya oblast'.
-Zone Asia/Omsk 4:53:36 - LMT 1919 Nov 14
- 5:00 - OMST 1930 Jun 21 # Omsk TIme
- 6:00 Russia OMS%sT 1991 Mar 31 2:00s
- 5:00 Russia OMS%sT 1992 Jan 19 2:00s
- 6:00 Russia OMS%sT 2011 Mar 27 2:00s
- 7:00 - OMST
-#
+ 5:00 Russia SVE%sT 1991 Mar 31 2:00s
+ 4:00 Russia SVE%sT 1992 Jan 19 2:00s
+ 5:00 Russia YEK%sT 2011 Mar 27 2:00s
+ 6:00 - YEKT 2014 Oct 26 2:00s
+ 5:00 - YEKT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Omsk covers...
+# 04 RU-AL Altai Republic
+# 22 RU-ALT Altai Krai
+# 55 RU-OMS Omsk Oblast
+
+# Byalokoz 1919 says Omsk was 4:53:30.
+
+Zone Asia/Omsk 4:53:30 - LMT 1919 Nov 14
+ 5:00 - OMST 1930 Jun 21 # Omsk Time
+ 6:00 Russia OMS%sT 1991 Mar 31 2:00s
+ 5:00 Russia OMS%sT 1992 Jan 19 2:00s
+ 6:00 Russia OMS%sT 2011 Mar 27 2:00s
+ 7:00 - OMST 2014 Oct 26 2:00s
+ 6:00 - OMST
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Novosibirsk covers...
+# 54 RU-NVS Novosibirsk Oblast
+# 70 RU-TOM Tomsk Oblast
+
# From Paul Eggert (2006-08-19): I'm guessing about Tomsk here; it's
# not clear when it switched from +7 to +6.
-# Novosibirskaya oblast', Tomskaya oblast'.
-Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
+
+Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
6:00 - NOVT 1930 Jun 21 # Novosibirsk Time
- 7:00 Russia NOV%sT 1991 Mar 31 2:00s
- 6:00 Russia NOV%sT 1992 Jan 19 2:00s
+ 7:00 Russia NOV%sT 1991 Mar 31 2:00s
+ 6:00 Russia NOV%sT 1992 Jan 19 2:00s
7:00 Russia NOV%sT 1993 May 23 # say Shanks & P.
- 6:00 Russia NOV%sT 2011 Mar 27 2:00s
- 7:00 - NOVT
+ 6:00 Russia NOV%sT 2011 Mar 27 2:00s
+ 7:00 - NOVT 2014 Oct 26 2:00s
+ 6:00 - NOVT
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Novokuznetsk covers...
+# 42 RU-KEM Kemerovo Oblast
# From Alexander Krivenyshev (2009-10-13):
# Kemerovo oblast' (Kemerovo region) in Russia will change current time zone on
@@ -2296,14 +2486,10 @@ Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
# time zone." ("Russia Zone 5" or old "USSR Zone 5" is GMT +0600)
#
# Russian Government web site (Russian language)
-# <a href="http://www.government.ru/content/governmentactivity/rfgovernmentdecisions/archiv">
# http://www.government.ru/content/governmentactivity/rfgovernmentdecisions/archive/2009/09/14/991633.htm
-# </a>
# or Russian-English translation by WorldTimeZone.com with reference
# map to local region and new Russia Time Zone map after March 28, 2010
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_russia03.html">
# http://www.worldtimezone.com/dst_news/dst_news_russia03.html
-# </a>
#
# Thus, when Russia will switch to DST on the night of March 28, 2010
# Kemerovo region (Kemerovo oblast') will not change the clock.
@@ -2311,152 +2497,319 @@ Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
# As a result, Kemerovo oblast' will be in the same time zone as
# Novosibirsk, Omsk, Tomsk, Barnaul and Altai Republic.
+# From Tim Parenti (2014-07-02), per Alexander Krivenyshev (2014-07-02):
+# The Kemerovo region will remain at UTC+7 through the 2014-10-26 change, thus
+# realigning itself with KRAT.
+
Zone Asia/Novokuznetsk 5:48:48 - NMT 1920 Jan 6
6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time
- 7:00 Russia KRA%sT 1991 Mar 31 2:00s
- 6:00 Russia KRA%sT 1992 Jan 19 2:00s
- 7:00 Russia KRA%sT 2010 Mar 28 2:00s
- 6:00 Russia NOV%sT 2011 Mar 27 2:00s
- 7:00 - NOVT # Novosibirsk/Novokuznetsk Time
-
-#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Krasnoyarskij kraj,
-# Tajmyrskij (Dolgano-Nenetskij) avtonomnyj okrug,
-# Respublika Tuva, Respublika Khakasiya, Evenkijskij avtonomnyj okrug.
-Zone Asia/Krasnoyarsk 6:11:20 - LMT 1920 Jan 6
+ 7:00 Russia KRA%sT 1991 Mar 31 2:00s
+ 6:00 Russia KRA%sT 1992 Jan 19 2:00s
+ 7:00 Russia KRA%sT 2010 Mar 28 2:00s
+ 6:00 Russia NOV%sT 2011 Mar 27 2:00s # Novosibirsk
+ 7:00 - NOVT 2014 Oct 26 2:00s
+ 7:00 - KRAT # Krasnoyarsk Time
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Krasnoyarsk covers...
+# 17 RU-TY Tuva Republic
+# 19 RU-KK Khakassia, Republic of
+# 24 RU-KYA Krasnoyarsk Krai
+#
+# Note: Effective 2007-01-01, (88) Evenk Autonomous Okrug and (84) Taymyr
+# Autonomous Okrug were merged into (24, RU-KYA) Krasnoyarsk Krai.
+
+# Byalokoz 1919 says Krasnoyarsk was 6:11:26.
+
+Zone Asia/Krasnoyarsk 6:11:26 - LMT 1920 Jan 6
6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time
- 7:00 Russia KRA%sT 1991 Mar 31 2:00s
- 6:00 Russia KRA%sT 1992 Jan 19 2:00s
- 7:00 Russia KRA%sT 2011 Mar 27 2:00s
- 8:00 - KRAT
-#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Buryatiya, Irkutskaya oblast',
-# Ust'-Ordynskij Buryatskij avtonomnyj okrug.
-Zone Asia/Irkutsk 6:57:20 - LMT 1880
- 6:57:20 - IMT 1920 Jan 25 # Irkutsk Mean Time
+ 7:00 Russia KRA%sT 1991 Mar 31 2:00s
+ 6:00 Russia KRA%sT 1992 Jan 19 2:00s
+ 7:00 Russia KRA%sT 2011 Mar 27 2:00s
+ 8:00 - KRAT 2014 Oct 26 2:00s
+ 7:00 - KRAT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Irkutsk covers...
+# 03 RU-BU Buryatia, Republic of
+# 38 RU-IRK Irkutsk Oblast
+#
+# Note: Effective 2008-01-01, (85) Ust-Orda Buryat Autonomous Okrug was
+# merged into (38, RU-IRK) Irkutsk Oblast.
+
+# Milne 1899 says Irkutsk was 6:57:15.
+# Byalokoz 1919 says Irkutsk was 6:57:05.
+# Go with Byalokoz.
+
+Zone Asia/Irkutsk 6:57:05 - LMT 1880
+ 6:57:05 - IMT 1920 Jan 25 # Irkutsk Mean Time
7:00 - IRKT 1930 Jun 21 # Irkutsk Time
- 8:00 Russia IRK%sT 1991 Mar 31 2:00s
- 7:00 Russia IRK%sT 1992 Jan 19 2:00s
- 8:00 Russia IRK%sT 2011 Mar 27 2:00s
- 9:00 - IRKT
-#
-# From Oscar van Vlijmen (2003-10-18): [This region consists of]
-# Aginskij Buryatskij avtonomnyj okrug, Amurskaya oblast',
-# [parts of] Respublika Sakha (Yakutiya), Chitinskaya oblast'.
-
-# From Oscar van Vlijmen (2009-11-29):
-# ...some regions of [Russia] were merged with others since 2005...
-# Some names were changed, no big deal, except for one instance: a new name.
-# YAK/YAKST: UTC+9 Zabajkal'skij kraj.
-
-# From Oscar van Vlijmen (2009-11-29):
-# The Sakha districts are: Aldanskij, Amginskij, Anabarskij,
-# Verkhnevilyujskij, Vilyujskij, Gornyj,
-# Zhiganskij, Kobyajskij, Lenskij, Megino-Kangalasskij, Mirninskij,
-# Namskij, Nyurbinskij, Olenyokskij, Olyokminskij,
-# Suntarskij, Tattinskij, Ust'-Aldanskij, Khangalasskij,
-# Churapchinskij, Eveno-Bytantajskij Natsional'nij.
-
-Zone Asia/Yakutsk 8:38:40 - LMT 1919 Dec 15
+ 8:00 Russia IRK%sT 1991 Mar 31 2:00s
+ 7:00 Russia IRK%sT 1992 Jan 19 2:00s
+ 8:00 Russia IRK%sT 2011 Mar 27 2:00s
+ 9:00 - IRKT 2014 Oct 26 2:00s
+ 8:00 - IRKT
+
+
+# From Tim Parenti (2014-07-06):
+# Asia/Chita covers...
+# 92 RU-ZAB Zabaykalsky Krai
+#
+# Note: Effective 2008-03-01, (75) Chita Oblast and (80) Agin-Buryat
+# Autonomous Okrug merged to form (92, RU-ZAB) Zabaykalsky Krai.
+
+Zone Asia/Chita 7:33:52 - LMT 1919 Dec 15
+ 8:00 - YAKT 1930 Jun 21 # Yakutsk Time
+ 9:00 Russia YAK%sT 1991 Mar 31 2:00s
+ 8:00 Russia YAK%sT 1992 Jan 19 2:00s
+ 9:00 Russia YAK%sT 2011 Mar 27 2:00s
+ 10:00 - YAKT 2014 Oct 26 2:00s
+ 8:00 - IRKT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
+# Asia/Yakutsk covers...
+# 28 RU-AMU Amur Oblast
+#
+# ...and parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-02 **** Aldansky District
+# 14-04 **** Amginsky District
+# 14-05 **** Anabarsky District
+# 14-06 **** Bulunsky District
+# 14-07 **** Verkhnevilyuysky District
+# 14-10 **** Vilyuysky District
+# 14-11 **** Gorny District
+# 14-12 **** Zhigansky District
+# 14-13 **** Kobyaysky District
+# 14-14 **** Lensky District
+# 14-15 **** Megino-Kangalassky District
+# 14-16 **** Mirninsky District
+# 14-18 **** Namsky District
+# 14-19 **** Neryungrinsky District
+# 14-21 **** Nyurbinsky District
+# 14-23 **** Olenyoksky District
+# 14-24 **** Olyokminsky District
+# 14-26 **** Suntarsky District
+# 14-27 **** Tattinsky District
+# 14-29 **** Ust-Aldansky District
+# 14-32 **** Khangalassky District
+# 14-33 **** Churapchinsky District
+# 14-34 **** Eveno-Bytantaysky National District
+
+# From Tim Parenti (2014-07-03):
+# Our commentary seems to have lost mention of (14-19) Neryungrinsky District.
+# Since the surrounding districts of Sakha are all YAKT, assume this is, too.
+# Also assume its history has been the same as the rest of Asia/Yakutsk.
+
+# Byalokoz 1919 says Yakutsk was 8:38:58.
+
+Zone Asia/Yakutsk 8:38:58 - LMT 1919 Dec 15
8:00 - YAKT 1930 Jun 21 # Yakutsk Time
- 9:00 Russia YAK%sT 1991 Mar 31 2:00s
- 8:00 Russia YAK%sT 1992 Jan 19 2:00s
- 9:00 Russia YAK%sT 2011 Mar 27 2:00s
- 10:00 - YAKT
-#
-# From Oscar van Vlijmen (2003-10-18): [This region consists of]
-# Evrejskaya avtonomnaya oblast', Khabarovskij kraj, Primorskij kraj,
-# [parts of] Respublika Sakha (Yakutiya).
-
-# From Oscar van Vlijmen (2009-11-29):
-# The Sakha districts are: Bulunskij, Verkhoyanskij, ... Ust'-Yanskij.
-Zone Asia/Vladivostok 8:47:44 - LMT 1922 Nov 15
+ 9:00 Russia YAK%sT 1991 Mar 31 2:00s
+ 8:00 Russia YAK%sT 1992 Jan 19 2:00s
+ 9:00 Russia YAK%sT 2011 Mar 27 2:00s
+ 10:00 - YAKT 2014 Oct 26 2:00s
+ 9:00 - YAKT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
+# Asia/Vladivostok covers...
+# 25 RU-PRI Primorsky Krai
+# 27 RU-KHA Khabarovsk Krai
+# 79 RU-YEV Jewish Autonomous Oblast
+#
+# ...and parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-09 **** Verkhoyansky District
+# 14-31 **** Ust-Yansky District
+
+# Milne 1899 says Vladivostok was 8:47:33.5.
+# Byalokoz 1919 says Vladivostok was 8:47:31.
+# Go with Byalokoz.
+
+Zone Asia/Vladivostok 8:47:31 - LMT 1922 Nov 15
9:00 - VLAT 1930 Jun 21 # Vladivostok Time
- 10:00 Russia VLA%sT 1991 Mar 31 2:00s
- 9:00 Russia VLA%sST 1992 Jan 19 2:00s
- 10:00 Russia VLA%sT 2011 Mar 27 2:00s
- 11:00 - VLAT
+ 10:00 Russia VLA%sT 1991 Mar 31 2:00s
+ 9:00 Russia VLA%sT 1992 Jan 19 2:00s
+ 10:00 Russia VLA%sT 2011 Mar 27 2:00s
+ 11:00 - VLAT 2014 Oct 26 2:00s
+ 10:00 - VLAT
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Khandyga covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-28 **** Tomponsky District
+# 14-30 **** Ust-Maysky District
# From Arthur David Olson (2012-05-09):
# Tomponskij and Ust'-Majskij switched from Vladivostok time to Yakutsk time
# in 2011.
-#
+
# From Paul Eggert (2012-11-25):
# Shanks and Pottenger (2003) has Khandyga on Yakutsk time.
# Make a wild guess that it switched to Vladivostok time in 2004.
# This transition is no doubt wrong, but we have no better info.
-#
+
Zone Asia/Khandyga 9:02:13 - LMT 1919 Dec 15
8:00 - YAKT 1930 Jun 21 # Yakutsk Time
- 9:00 Russia YAK%sT 1991 Mar 31 2:00s
- 8:00 Russia YAK%sT 1992 Jan 19 2:00s
+ 9:00 Russia YAK%sT 1991 Mar 31 2:00s
+ 8:00 Russia YAK%sT 1992 Jan 19 2:00s
9:00 Russia YAK%sT 2004
- 10:00 Russia VLA%sT 2011 Mar 27 2:00s
- 11:00 - VLAT 2011 Sep 13 0:00s # Decree 725?
- 10:00 - YAKT
+ 10:00 Russia VLA%sT 2011 Mar 27 2:00s
+ 11:00 - VLAT 2011 Sep 13 0:00s # Decree 725?
+ 10:00 - YAKT 2014 Oct 26 2:00s
+ 9:00 - YAKT
-#
-# Sakhalinskaya oblast'.
-# The Zone name should be Yuzhno-Sakhalinsk, but that's too long.
+
+# From Tim Parenti (2014-07-03):
+# Asia/Sakhalin covers...
+# 65 RU-SAK Sakhalin Oblast
+# ...with the exception of:
+# 65-11 **** Severo-Kurilsky District (North Kuril Islands)
+
+# 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 - CJT 1938
+ 9:00 - JCST 1937 Oct 1
9:00 - JST 1945 Aug 25
- 11:00 Russia SAK%sT 1991 Mar 31 2:00s # Sakhalin T.
- 10:00 Russia SAK%sT 1992 Jan 19 2:00s
- 11:00 Russia SAK%sT 1997 Mar lastSun 2:00s
- 10:00 Russia SAK%sT 2011 Mar 27 2:00s
- 11:00 - SAKT
-#
-# From Oscar van Vlijmen (2003-10-18): [This region consists of]
-# Magadanskaya oblast', Respublika Sakha (Yakutiya).
-# Probably also: Kuril Islands.
-
-# From Oscar van Vlijmen (2009-11-29):
-# The Sakha districts are: Abyjskij, Allaikhovskij, Verkhhhnekolymskij, Momskij,
-# Nizhnekolymskij, ... Srednekolymskij.
+ 11:00 Russia SAK%sT 1991 Mar 31 2:00s # Sakhalin T
+ 10:00 Russia SAK%sT 1992 Jan 19 2:00s
+ 11:00 Russia SAK%sT 1997 Mar lastSun 2:00s
+ 10:00 Russia SAK%sT 2011 Mar 27 2:00s
+ 11:00 - SAKT 2014 Oct 26 2:00s
+ 10:00 - SAKT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
+# Asia/Magadan covers...
+# 49 RU-MAG Magadan Oblast
+
+# From Tim Parenti (2014-07-06), per Alexander Krivenyshev (2014-07-02):
+# Magadan Oblast is moving from UTC+12 to UTC+10 on 2014-10-26; however,
+# several districts of Sakha Republic as well as Severo-Kurilsky District of
+# the Sakhalin Oblast (also known as the North Kuril Islands), represented
+# until now by Asia/Magadan, will instead move to UTC+11. These regions will
+# need their own zone.
+
Zone Asia/Magadan 10:03:12 - LMT 1924 May 2
10:00 - MAGT 1930 Jun 21 # Magadan Time
- 11:00 Russia MAG%sT 1991 Mar 31 2:00s
- 10:00 Russia MAG%sT 1992 Jan 19 2:00s
- 11:00 Russia MAG%sT 2011 Mar 27 2:00s
- 12:00 - MAGT
+ 11:00 Russia MAG%sT 1991 Mar 31 2:00s
+ 10:00 Russia MAG%sT 1992 Jan 19 2:00s
+ 11:00 Russia MAG%sT 2011 Mar 27 2:00s
+ 12:00 - MAGT 2014 Oct 26 2:00s
+ 10:00 - MAGT
+
+
+# From Tim Parenti (2014-07-06):
+# Asia/Srednekolymsk covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-01 **** Abyysky District
+# 14-03 **** Allaikhovsky District
+# 14-08 **** Verkhnekolymsky District
+# 14-17 **** Momsky District
+# 14-20 **** Nizhnekolymsky District
+# 14-25 **** Srednekolymsky District
+#
+# ...and parts of (65, RU-SAK) Sakhalin Oblast:
+# 65-11 **** Severo-Kurilsky District (North Kuril Islands)
+
+# From Tim Parenti (2014-07-02):
+# Oymyakonsky District of Sakha Republic (represented by Ust-Nera), along with
+# most of Sakhalin Oblast (represented by Sakhalin) will be moving to UTC+10 on
+# 2014-10-26 to stay aligned with VLAT/SAKT; however, Severo-Kurilsky District
+# of the Sakhalin Oblast (also known as the North Kuril Islands, represented by
+# Severo-Kurilsk) will remain on UTC+11.
+
+# From Tim Parenti (2014-07-06):
+# Assume North Kuril Islands have history like Magadan before 2011-03-27.
+# There is a decent chance this is wrong, in which case a new zone
+# Asia/Severo-Kurilsk would become necessary.
+#
+# Srednekolymsk and Zyryanka are the most populous places amongst these
+# districts, but have very similar populations. In fact, Wikipedia currently
+# lists them both as having 3528 people, exactly 1668 males and 1860 females
+# each! (Yikes!)
+# http://en.wikipedia.org/w/?title=Srednekolymsky_District&oldid=603435276
+# http://en.wikipedia.org/w/?title=Verkhnekolymsky_District&oldid=594378493
+# Assume this is a mistake, albeit an amusing one.
+#
+# Looking at censuses, the populations of the two municipalities seem to have
+# fluctuated recently. Zyryanka was more populous than Srednekolymsk in the
+# 1989 and 2002 censuses, but Srednekolymsk was more populous in the most
+# recent (2010) census, 3525 to 3170. (See pages 195 and 197 of
+# http://www.gks.ru/free_doc/new_site/perepis2010/croc/Documents/Vol1/pub-01-05.pdf
+# in Russian.) In addition, Srednekolymsk appears to be a much older
+# settlement and the population of Zyryanka seems to be declining.
+# Go with Srednekolymsk.
+#
+# Since Magadan Oblast moves to UTC+10 on 2014-10-26, we cannot keep using MAGT
+# as the abbreviation. Use SRET instead.
+
+Zone Asia/Srednekolymsk 10:14:52 - LMT 1924 May 2
+ 10:00 - MAGT 1930 Jun 21 # Magadan Time
+ 11:00 Russia MAG%sT 1991 Mar 31 2:00s
+ 10:00 Russia MAG%sT 1992 Jan 19 2:00s
+ 11:00 Russia MAG%sT 2011 Mar 27 2:00s
+ 12:00 - MAGT 2014 Oct 26 2:00s
+ 11:00 - SRET # Srednekolymsk Time
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Ust-Nera covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-22 **** Oymyakonsky District
# From Arthur David Olson (2012-05-09):
-# Ojmyakonskij and the Kuril Islands switched from
+# Ojmyakonskij [and the Kuril Islands] switched from
# Magadan time to Vladivostok time in 2011.
+#
+# From Tim Parenti (2014-07-06), per Alexander Krivenyshev (2014-07-02):
+# It's unlikely that any of the Kuril Islands were involved in such a switch,
+# as the South and Middle Kurils have been on UTC+11 (SAKT) with the rest of
+# Sakhalin Oblast since at least 2011-09, and the North Kurils have been on
+# UTC+12 since at least then, too.
+
Zone Asia/Ust-Nera 9:32:54 - LMT 1919 Dec 15
8:00 - YAKT 1930 Jun 21 # Yakutsk Time
9:00 Russia YAKT 1981 Apr 1
- 11:00 Russia MAG%sT 1991 Mar 31 2:00s
- 10:00 Russia MAG%sT 1992 Jan 19 2:00s
- 11:00 Russia MAG%sT 2011 Mar 27 2:00s
- 12:00 - MAGT 2011 Sep 13 0:00s # Decree 725?
- 11:00 - VLAT
+ 11:00 Russia MAG%sT 1991 Mar 31 2:00s
+ 10:00 Russia MAG%sT 1992 Jan 19 2:00s
+ 11:00 Russia MAG%sT 2011 Mar 27 2:00s
+ 12:00 - MAGT 2011 Sep 13 0:00s # Decree 725?
+ 11:00 - VLAT 2014 Oct 26 2:00s
+ 10:00 - VLAT
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Kamchatskaya oblast', Koryakskij avtonomnyj okrug.
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Kamchatka covers...
+# 91 RU-KAM Kamchatka Krai
#
-# The Zone name should be Asia/Petropavlovsk-Kamchatski, but that's too long.
+# Note: Effective 2007-07-01, (41) Kamchatka Oblast and (82) Koryak
+# Autonomous Okrug merged to form (91, RU-KAM) Kamchatka Krai.
+
+# 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 - PETT 1930 Jun 21 # P-K Time
- 12:00 Russia PET%sT 1991 Mar 31 2:00s
- 11:00 Russia PET%sT 1992 Jan 19 2:00s
- 12:00 Russia PET%sT 2010 Mar 28 2:00s
- 11:00 Russia PET%sT 2011 Mar 27 2:00s
+ 12:00 Russia PET%sT 1991 Mar 31 2:00s
+ 11:00 Russia PET%sT 1992 Jan 19 2:00s
+ 12:00 Russia PET%sT 2010 Mar 28 2:00s
+ 11:00 Russia PET%sT 2011 Mar 27 2:00s
12:00 - PETT
-#
-# Chukotskij avtonomnyj okrug
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Anadyr covers...
+# 87 RU-CHU Chukotka Autonomous Okrug
+
Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2
12:00 - ANAT 1930 Jun 21 # Anadyr Time
- 13:00 Russia ANA%sT 1982 Apr 1 0:00s
- 12:00 Russia ANA%sT 1991 Mar 31 2:00s
- 11:00 Russia ANA%sT 1992 Jan 19 2:00s
- 12:00 Russia ANA%sT 2010 Mar 28 2:00s
- 11:00 Russia ANA%sT 2011 Mar 27 2:00s
+ 13:00 Russia ANA%sT 1982 Apr 1 0:00s
+ 12:00 Russia ANA%sT 1991 Mar 31 2:00s
+ 11:00 Russia ANA%sT 1992 Jan 19 2:00s
+ 12:00 Russia ANA%sT 2010 Mar 28 2:00s
+ 11:00 Russia ANA%sT 2011 Mar 27 2:00s
12:00 - ANAT
+
# San Marino
# See Europe/Rome.
@@ -2465,11 +2818,11 @@ Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2
Zone Europe/Belgrade 1:22:00 - LMT 1884
1:00 - CET 1941 Apr 18 23:00
1:00 C-Eur CE%sT 1945
- 1:00 - CET 1945 May 8 2:00s
+ 1:00 - CET 1945 May 8 2:00s
1:00 1:00 CEST 1945 Sep 16 2:00s
-# Metod Kozelj reports that the legal date of
+# Metod Koželj reports that the legal date of
# transition to EU rules was 1982-11-27, for all of Yugoslavia at the time.
-# Shanks & Pottenger don't give as much detail, so go with Kozelj.
+# Shanks & Pottenger don't give as much detail, so go with Koželj.
1:00 - CET 1982 Nov 27
1:00 EU CE%sT
Link Europe/Belgrade Europe/Ljubljana # Slovenia
@@ -2545,13 +2898,13 @@ Zone Africa/Ceuta -0:21:16 - LMT 1901
0:00 1:00 WEST 1918 Oct 7 23:00
0:00 - WET 1924
0:00 Spain WE%sT 1929
- 0:00 SpainAfrica WE%sT 1984 Mar 16
+ 0:00 SpainAfrica WE%sT 1984 Mar 16
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 - CANT 1946 Sep 30 1:00 # Canaries Time
- 0:00 - WET 1980 Apr 6 0:00s
- 0:00 1:00 WEST 1980 Sep 28 0:00s
+ -1:00 - CANT 1946 Sep 30 1:00 # Canaries T
+ 0:00 - WET 1980 Apr 6 0:00s
+ 0:00 1:00 WEST 1980 Sep 28 0:00s
0:00 EU WE%sT
# IATA SSIM (1996-09) says the Canaries switch at 2:00u, not 1:00u.
# Ignore this for now, as the Canaries are part of the EU.
@@ -2560,7 +2913,7 @@ Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
# From Ivan Nilsson (2001-04-13), superseding Shanks & Pottenger:
#
-# The law "Svensk forfattningssamling 1878, no 14" about standard time in 1879:
+# The law "Svensk författningssamling 1878, no 14" about standard time in 1879:
# From the beginning of 1879 (that is 01-01 00:00) the time for all
# places in the country is "the mean solar time for the meridian at
# three degrees, or twelve minutes of time, to the west of the
@@ -2571,7 +2924,7 @@ Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
# national standard time as 01:00:14 ahead of GMT....
#
# About the beginning of CET in Sweden. The lawtext ("Svensk
-# forfattningssamling 1899, no 44") states, that "from the beginning
+# författningssamling 1899, no 44") states, that "from the beginning
# of 1900... ... the same as the mean solar time for the meridian at
# the distance of one hour of time from the meridian of the English
# observatory at Greenwich, or at 12 minutes 14 seconds to the west
@@ -2579,7 +2932,7 @@ Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
# 1899-06-16. In short: At 1900-01-01 00:00:00 the new standard time
# in Sweden is 01:00:00 ahead of GMT.
#
-# 1916: The lawtext ("Svensk forfattningssamling 1916, no 124") states
+# 1916: The lawtext ("Svensk författningssamling 1916, no 124") states
# that "1916-05-15 is considered to begin one hour earlier". It is
# pretty obvious that at 05-14 23:00 the clocks are set to 05-15 00:00....
# Further the law says, that "1916-09-30 is considered to end one hour later".
@@ -2589,7 +2942,7 @@ Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
# not available on the site (to my knowledge they are only available
# in Swedish): <http://www.riksdagen.se/english/work/sfst.asp> (type
# "sommartid" without the quotes in the field "Fritext" and then click
-# the Sok-button).
+# the Sök-button).
#
# (2001-05-13):
#
@@ -2604,9 +2957,9 @@ Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1
- 1:00:14 - SET 1900 Jan 1 # Swedish Time
+ 1:00:14 - SET 1900 Jan 1 # Swedish Time
1:00 - CET 1916 May 14 23:00
- 1:00 1:00 CEST 1916 Oct 1 01:00
+ 1:00 1:00 CEST 1916 Oct 1 1:00
1:00 - CET 1980
1:00 EU CE%sT
@@ -2614,7 +2967,7 @@ Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1
# From Howse:
# By the end of the 18th century clocks and watches became commonplace
# and their performance improved enormously. Communities began to keep
-# mean time in preference to apparent time -- Geneva from 1780 ....
+# mean time in preference to apparent time - Geneva from 1780 ....
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
# From Whitman (who writes "Midnight?"):
# Rule Swiss 1940 only - Nov 2 0:00 1:00 S
@@ -2630,7 +2983,7 @@ Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1
# to be wrong. This is now verified.
#
# I have found copies of the original ruling by the Swiss Federal
-# government, in 'Eidgen[o]ssische Gesetzessammlung 1941 and 1942' (Swiss
+# government, in 'Eidgenössische Gesetzessammlung 1941 and 1942' (Swiss
# federal law collection)...
#
# DST began on Monday 5 May 1941, 1:00 am by shifting the clocks to 2:00 am
@@ -2649,7 +3002,7 @@ Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1
# night as an absolute novelty, because this was the first time that such
# a thing had happened in Switzerland.
#
-# I have also checked 1916, because one book source (Gabriel, Traite de
+# I have also checked 1916, because one book source (Gabriel, Traité de
# l'heure dans le monde) claims that Switzerland had DST in 1916. This is
# false, no official document could be found. Probably Gabriel got misled
# by references to Germany, which introduced DST in 1916 for the first time.
@@ -2663,19 +3016,19 @@ Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1
# One further detail for Switzerland, which is probably out of scope for
# most users of tzdata: The [Europe/Zurich zone] ...
# describes all of Switzerland correctly, with the exception of
-# the Cantone Geneve (Geneva, Genf). Between 1848 and 1894 Geneve did not
+# the Canton de Genève (Geneva, Genf). Between 1848 and 1894 Geneva did not
# follow Bern Mean Time but kept its own local mean time.
# To represent this, an extra zone would be needed.
#
# From Alois Treindl (2013-09-11):
# The Federal regulations say
# http://www.admin.ch/opc/de/classified-compilation/20071096/index.html
-# ... the meridian for Bern mean time ... is 7 degrees 26'22.50".
+# ... the meridian for Bern mean time ... is 7 degrees 26' 22.50".
# Expressed in time, it is 0h29m45.5s.
# From Pierre-Yves Berger (2013-09-11):
-# the "Circulaire du conseil federal" (December 11 1893)
-# <http://www.amtsdruckschriften.bar.admin.ch/viewOrigDoc.do?id=10071353> ...
+# the "Circulaire du conseil fédéral" (December 11 1893)
+# http://www.amtsdruckschriften.bar.admin.ch/viewOrigDoc.do?id=10071353
# clearly states that the [1894-06-01] change should be done at midnight
# but if no one is present after 11 at night, could be postponed until one
# hour before the beginning of service.
@@ -2686,14 +3039,14 @@ Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1
# 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:
#
-# Jakob Messerli. Gleichmassig, punktlich, schnell: Zeiteinteilung und
+# Jakob Messerli. Gleichmässig, pünktlich, schnell. Zeiteinteilung und
# Zeitgebrauch in der Schweiz im 19. Jahrhundert. Chronos, Zurich 1995,
# ISBN 3-905311-68-2, OCLC 717570797.
#
# suggests that the transition was more gradual, and that the Swiss did not
# agree about civil time during the transition. The timekeeping it gives the
# most detail for is postal and telegraph time: here, federal legislation (the
-# "Bundesgesetz uber die Erstellung von elektrischen Telegraphen") passed on
+# "Bundesgesetz über die Erstellung von elektrischen Telegraphen") passed on
# 1851-11-23, and an official implementation notice was published 1853-07-16
# (Bundesblatt 1853, Bd. II, S. 859). On p 72 Messerli writes that in
# practice since July 1853 Bernese time was used in "all postal and telegraph
@@ -2707,7 +3060,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 GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16 # See above comment.
- 0:29:46 - BMT 1894 Jun # Bern Mean Time
+ 0:29:46 - BMT 1894 Jun # Bern Mean Time
1:00 Swiss CE%sT 1981
1:00 EU CE%sT
@@ -2715,7 +3068,7 @@ Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16 # See above comment.
# From Amar Devegowda (2007-01-03):
# The time zone rules for Istanbul, Turkey have not been changed for years now.
-# ... The latest rules are available at -
+# ... The latest rules are available at:
# http://www.timeanddate.com/worldclock/timezone.html?n=107
# From Steffen Thorsen (2007-01-03):
# I have been able to find press records back to 1996 which all say that
@@ -2740,8 +3093,7 @@ Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16 # See above comment.
# (on a non-government server though) describing dates between 2002 and 2006:
# http://www.alomaliye.com/bkk_2002_3769.htm
-# From G&ouml;kdeniz Karada&#x011f; (2011-03-10):
-#
+# From Gökdeniz Karadağ (2011-03-10):
# According to the articles linked below, Turkey will change into summer
# time zone (GMT+3) on March 28, 2011 at 3:00 a.m. instead of March 27.
# This change is due to a nationwide exam on 27th.
@@ -2754,9 +3106,16 @@ Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16 # See above comment.
# Turkish Local election....
# http://www.sabah.com.tr/Ekonomi/2014/02/12/yaz-saatinde-onemli-degisiklik
# ... so Turkey will move clocks forward one hour on March 31 at 3:00 a.m.
-# From Paul Eggert (2014-02-17):
-# Here is an English-language source:
-# http://www.worldbulletin.net/turkey/129016/turkey-switches-to-daylight-saving-time-march-31
+# From Randal L. Schwartz (2014-04-15):
+# Having landed on a flight from the states to Istanbul (via AMS) on March 31,
+# I can tell you that NOBODY (even the airlines) respected this timezone DST
+# change delay. Maybe the word just didn't get out in time.
+# From Paul Eggert (2014-06-15):
+# The press reported massive confusion, as election officials obeyed the rule
+# change but cell phones (and airline baggage systems) did not. See:
+# Kostidis M. Eventful elections in Turkey. Balkan News Agency
+# http://www.balkaneu.com/eventful-elections-turkey/ 2014-03-30.
+# I guess the best we can do is document the official time.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Turkey 1916 only - May 1 0:00 1:00 S
@@ -2823,10 +3182,10 @@ Zone Europe/Istanbul 1:55:52 - LMT 1880
2:00 Turkey EE%sT 1978 Oct 15
3:00 Turkey TR%sT 1985 Apr 20 # Turkey Time
2:00 Turkey EE%sT 2007
- 2:00 EU EE%sT 2011 Mar 27 1:00u
- 2:00 - EET 2011 Mar 28 1:00u
- 2:00 EU EE%sT 2014 Mar 30 1:00u
- 2:00 - EET 2014 Mar 31 1:00u
+ 2:00 EU EE%sT 2011 Mar 27 1:00u
+ 2:00 - EET 2011 Mar 28 1:00u
+ 2:00 EU EE%sT 2014 Mar 30 1:00u
+ 2:00 - EET 2014 Mar 31 1:00u
2:00 EU EE%sT
Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
@@ -2847,7 +3206,7 @@ Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
# Bill number 8330 of MP from the Party of Regions Oleg Nadoshi got
# approval from 266 deputies.
#
-# Ukraine abolishes transter back to the winter time (in Russian)
+# Ukraine abolishes transfer back to the winter time (in Russian)
# http://news.mail.ru/politics/6861560/
#
# The Ukrainians will no longer change the clock (in Russian)
@@ -2908,12 +3267,12 @@ Zone Europe/Kiev 2:02:04 - LMT 1880
2:00 - EET 1930 Jun 21
3:00 - MSK 1941 Sep 20
1:00 C-Eur CE%sT 1943 Nov 6
- 3:00 Russia MSK/MSD 1990 Jul 1 2:00
- 2:00 1:00 EEST 1991 Sep 29 3:00
+ 3:00 Russia MSK/MSD 1990 Jul 1 2:00
+ 2:00 1:00 EEST 1991 Sep 29 3:00
2:00 E-Eur EE%sT 1995
2:00 EU EE%sT
# Ruthenia used CET 1990/1991.
-# "Uzhhorod" is the transliteration of the Ukrainian name, but
+# "Uzhhorod" is the transliteration of the Rusyn/Ukrainian pronunciation, but
# "Uzhgorod" is more common in English.
Zone Europe/Uzhgorod 1:29:12 - LMT 1890 Oct
1:00 - CET 1940
@@ -2921,8 +3280,8 @@ Zone Europe/Uzhgorod 1:29:12 - LMT 1890 Oct
1:00 1:00 CEST 1944 Oct 26
1:00 - CET 1945 Jun 29
3:00 Russia MSK/MSD 1990
- 3:00 - MSK 1990 Jul 1 2:00
- 1:00 - CET 1991 Mar 31 3:00
+ 3:00 - MSK 1990 Jul 1 2:00
+ 1:00 - CET 1991 Mar 31 3:00
2:00 - EET 1992
2:00 E-Eur EE%sT 1995
2:00 EU EE%sT
@@ -2936,42 +3295,9 @@ Zone Europe/Zaporozhye 2:20:40 - LMT 1880
2:00 - EET 1930 Jun 21
3:00 - MSK 1941 Aug 25
1:00 C-Eur CE%sT 1943 Oct 25
- 3:00 Russia MSK/MSD 1991 Mar 31 2:00
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00
2:00 E-Eur EE%sT 1995
2:00 EU EE%sT
-# Central Crimea used Moscow time 1994/1997.
-Zone Europe/Simferopol 2:16:24 - LMT 1880
- 2:16 - SMT 1924 May 2 # Simferopol Mean T
- 2:00 - EET 1930 Jun 21
- 3:00 - MSK 1941 Nov
- 1:00 C-Eur CE%sT 1944 Apr 13
- 3:00 Russia MSK/MSD 1990
- 3:00 - MSK 1990 Jul 1 2:00
- 2:00 - EET 1992
-# From Paul Eggert (2006-03-22):
-# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
-# from Kiev to Moscow time sometime after the January 1994 elections.
-# Shanks (1999) says "date of change uncertain", but implies that it happened
-# sometime between the 1994 DST switches. Shanks & Pottenger simply say
-# 1994-09-25 03:00, but that can't be right. For now, guess it
-# changed in May.
- 2:00 E-Eur EE%sT 1994 May
-# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.
- 3:00 E-Eur MSK/MSD 1996 Mar 31 3:00s
- 3:00 1:00 MSD 1996 Oct 27 3:00s
-# IATA SSIM (1997-09) says Crimea switched to EET/EEST.
-# Assume it happened in March by not changing the clocks.
- 3:00 Russia MSK/MSD 1997
- 3:00 - MSK 1997 Mar lastSun 1:00u
-# From Alexander Krivenyshev (2014-03-17):
-# time change at 2:00 (2am) on March 30, 2014
-# http://vz.ru/news/2014/3/17/677464.html
-# From Paul Eggert (2014-03-30):
-# Simferopol and Sevastopol reportedly changed their central town clocks
-# late the previous day, but this appears to have been ceremonial
-# and the discrepancies are small enough to not worry about.
- 2:00 EU EE%sT 2014 Mar 30 2:00
- 4:00 - MSK
# Vatican City
# See Europe/Rome.
@@ -2995,7 +3321,7 @@ Zone Europe/Simferopol 2:16:24 - LMT 1880
# ...
#
# ...the European time rules are...standardized since 1981, when
-# most European coun[tr]ies started DST. Before that year, only
+# most European countries started DST. Before that year, only
# a few countries (UK, France, Italy) had DST, each according
# to own national rules. In 1981, however, DST started on
# 'Apr firstSun', and not on 'Mar lastSun' as in the following
@@ -3003,7 +3329,7 @@ Zone Europe/Simferopol 2:16:24 - LMT 1880
# But also since 1981 there are some more national exceptions
# than listed in 'europe': Switzerland, for example, joined DST
# one year later, Denmark ended DST on 'Oct 1' instead of 'Sep
-# lastSun' in 1981---I don't know how they handle now.
+# lastSun' in 1981 - I don't know how they handle now.
#
# Finally, DST ist always from 'Apr 1' to 'Oct 1' in the
# Soviet Union (as far as I know).
diff --git a/elsie.nci.nih.gov/src/factory b/elsie.nci.nih.gov/src/factory
index d29a585..4304f7c 100644
--- a/elsie.nci.nih.gov/src/factory
+++ b/elsie.nci.nih.gov/src/factory
@@ -1,4 +1,3 @@
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
diff --git a/elsie.nci.nih.gov/src/ialloc.c b/elsie.nci.nih.gov/src/ialloc.c
index b6f0188..e228db5 100644
--- a/elsie.nci.nih.gov/src/ialloc.c
+++ b/elsie.nci.nih.gov/src/ialloc.c
@@ -21,7 +21,7 @@ icatalloc(char *const old, const char *const new)
else oldsize = strlen(old);
if ((result = realloc(old, oldsize + newsize + 1)) != NULL)
if (new != NULL)
- (void) strcpy(result + oldsize, new);
+ strcpy(result + oldsize, new);
return result;
}
diff --git a/elsie.nci.nih.gov/src/iso3166.tab b/elsie.nci.nih.gov/src/iso3166.tab
index a1e4b42..0b0b842 100644
--- a/elsie.nci.nih.gov/src/iso3166.tab
+++ b/elsie.nci.nih.gov/src/iso3166.tab
@@ -3,21 +3,21 @@
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
#
-# From Paul Eggert (2013-05-27):
+# From Paul Eggert (2014-07-18):
+# This file contains a table of two-letter country codes. Columns are
+# separated by a single tab. Lines beginning with '#' are comments.
+# Although all text currently uses ASCII encoding, this is planned to
+# change to UTF-8 soon. The columns of the table are as follows:
#
-# This file contains a table with the following columns:
# 1. ISO 3166-1 alpha-2 country code, current as of
-# ISO 3166-1 Newsletter VI-15 (2013-05-10). See: Updates on ISO 3166
+# ISO 3166-1 Newsletter VI-16 (2013-07-11). See: Updates on ISO 3166
# http://www.iso.org/iso/home/standards/country_codes/updates_on_iso_3166.htm
# 2. The usual English name for the coded region,
# chosen so that alphabetic sorting of subsets produces helpful lists.
# This is not the same as the English name in the ISO 3166 tables.
#
-# Columns are separated by a single tab.
# The table is sorted by country code.
#
-# Lines beginning with `#' are comments.
-#
# This table is intended as an aid for users, to help them select time
# zone data appropriate for their practical needs. It is not intended
# to take or endorse any position on legal or territorial claims.
diff --git a/elsie.nci.nih.gov/src/leap-seconds.list b/elsie.nci.nih.gov/src/leap-seconds.list
index 7df3de6..0980e7b 100644
--- a/elsie.nci.nih.gov/src/leap-seconds.list
+++ b/elsie.nci.nih.gov/src/leap-seconds.list
@@ -1,10 +1,10 @@
#
# In the following text, the symbol '#' introduces
-# a comment, which continues from that symbol until
+# a comment, which continues from that symbol until
# the end of the line. A plain comment line has a
# whitespace character following the comment indicator.
-# There are also special comment lines defined below.
-# A special comment will always have a non-whitespace
+# There are also special comment lines defined below.
+# A special comment will always have a non-whitespace
# character in column 2.
#
# A blank line should be ignored.
@@ -15,17 +15,22 @@
# are transmitted by almost all time services.
#
# The first column shows an epoch as a number of seconds
-# since 1900.0 and the second column shows the number of
-# seconds that must be added to UTC to compute TAI for
-# any timestamp at or after that epoch. The value on
-# each line is valid from the indicated initial instant
-# until the epoch given on the next one or indefinitely
-# into the future if there is no next line.
+# since 1 January 1900, 00:00:00 (1900.0 is also used to
+# indicate the same epoch.) Both of these time stamp formats
+# ignore the complexities of the time scales that were
+# used before the current definition of UTC at the start
+# of 1972. (See note 3 below.)
+# The second column shows the number of seconds that
+# must be added to UTC to compute TAI for any timestamp
+# at or after that epoch. The value on each line is
+# valid from the indicated initial instant until the
+# epoch given on the next one or indefinitely into the
+# future if there is no next line.
# (The comment on each line shows the representation of
-# the corresponding initial epoch in the usual
+# the corresponding initial epoch in the usual
# day-month-year format. The epoch always begins at
# 00:00:00 UTC on the indicated day. See Note 5 below.)
-#
+#
# Important notes:
#
# 1. Coordinated Universal Time (UTC) is often referred to
@@ -33,7 +38,7 @@
# longer used, and the use of GMT to designate UTC is
# discouraged.
#
-# 2. The UTC time scale is realized by many national
+# 2. The UTC time scale is realized by many national
# laboratories and timing centers. Each laboratory
# identifies its realization with its name: Thus
# UTC(NIST), UTC(USNO), etc. The differences among
@@ -44,10 +49,10 @@
# by the International Bureau of Weights and Measures
# (BIPM). See www.bipm.fr for more information.
#
-# 3. The current defintion of the relationship between UTC
-# and TAI dates from 1 January 1972. A number of different
-# time scales were in use before than epoch, and it can be
-# quite difficult to compute precise timestamps and time
+# 3. The current definition of the relationship between UTC
+# and TAI dates from 1 January 1972. A number of different
+# time scales were in use before that epoch, and it can be
+# quite difficult to compute precise timestamps and time
# intervals in those "prehistoric" days. For more information,
# consult:
#
@@ -58,36 +63,34 @@
# of Time," Proc. of the IEEE, Vol. 79, pp. 894-905,
# July, 1991.
#
-# 4. The insertion of leap seconds into UTC is currently the
-# responsibility of the International Earth Rotation Service,
-# which is located at the Paris Observatory:
-#
-# Central Bureau of IERS
-# 61, Avenue de l'Observatoire
-# 75014 Paris, France.
+# 4. The decision to insert a leap second into UTC is currently
+# the responsibility of the International Earth Rotation and
+# Reference Systems Service. (The name was changed from the
+# International Earth Rotation Service, but the acronym IERS
+# is still used.)
#
-# Leap seconds are announced by the IERS in its Bulletin C
+# Leap seconds are announced by the IERS in its Bulletin C.
#
-# See hpiers.obspm.fr or www.iers.org for more details.
+# See www.iers.org for more details.
#
-# All national laboratories and timing centers use the
-# data from the BIPM and the IERS to construct their
-# local realizations of UTC.
+# Every national laboratory and timing center uses the
+# data from the BIPM and the IERS to construct UTC(lab),
+# their local realization of UTC.
#
# Although the definition also includes the possibility
-# of dropping seconds ("negative" leap seconds), this has
-# never been done and is unlikely to be necessary in the
+# of dropping seconds ("negative" leap seconds), this has
+# never been done and is unlikely to be necessary in the
# foreseeable future.
#
# 5. If your system keeps time as the number of seconds since
# some epoch (e.g., NTP timestamps), then the algorithm for
# assigning a UTC time stamp to an event that happens during a positive
-# leap second is not well defined. The official name of that leap
-# second is 23:59:60, but there is no way of representing that time
-# in these systems.
-# Many systems of this type effectively stop the system clock for
-# one second during the leap second and use a time that is equivalent
-# to 23:59:59 UTC twice. For these systems, the corresponding TAI
+# leap second is not well defined. The official name of that leap
+# second is 23:59:60, but there is no way of representing that time
+# in these systems.
+# Many systems of this type effectively stop the system clock for
+# one second during the leap second and use a time that is equivalent
+# to 23:59:59 UTC twice. For these systems, the corresponding TAI
# timestamp would be obtained by advancing to the next entry in the
# following table when the time equivalent to 23:59:59 UTC
# is used for the second time. Thus the leap second which
@@ -102,7 +105,7 @@
#
# If your system realizes the leap second by repeating 00:00:00 UTC twice
# (this is possible but not usual), then the advance to the next entry
-# in the table must occur the second time that a time equivlent to
+# in the table must occur the second time that a time equivalent to
# 00:00:00 UTC is used. Thus, using the same example as above:
#
# ...
@@ -112,13 +115,16 @@
# ...
#
# in both cases the use of timestamps based on TAI produces a smooth
-# time scale with no discontinuity in the time interval.
-#
-# This complexity would not be needed for negative leap seconds (if they
-# are ever used). The UTC time would skip 23:59:59 and advance from
-# 23:59:58 to 00:00:00 in that case. The TAI offset would decrease by
-# 1 second at the same instant. This is a much easier situation to deal
-# with, since the difficulty of unambiguously representing the epoch
+# time scale with no discontinuity in the time interval. However,
+# although the long-term behavior of the time scale is correct in both
+# methods, the second method is technically not correct because it adds
+# the extra second to the wrong day.
+#
+# This complexity would not be needed for negative leap seconds (if they
+# are ever used). The UTC time would skip 23:59:59 and advance from
+# 23:59:58 to 00:00:00 in that case. The TAI offset would decrease by
+# 1 second at the same instant. This is a much easier situation to deal
+# with, since the difficulty of unambiguously representing the epoch
# during the leap second does not arise.
#
# Questions or comments to:
@@ -126,66 +132,68 @@
# Time and Frequency Division
# NIST
# Boulder, Colorado
-# jlevine@boulder.nist.gov
+# Judah.Levine@nist.gov
#
# Last Update of leap second values: 11 January 2012
#
-# The following line shows this last update date in NTP timestamp
+# The following line shows this last update date in NTP timestamp
# format. This is the date on which the most recent change to
# the leap second data was added to the file. This line can
-# be identified by the unique pair of characters in the first two
+# be identified by the unique pair of characters in the first two
# columns as shown below.
#
#$ 3535228800
#
# The NTP timestamps are in units of seconds since the NTP epoch,
-# which is 1900.0. The Modified Julian Day number corresponding
-# to the NTP time stamp, X, can be computed as
+# which is 1 January 1900, 00:00:00. The Modified Julian Day number
+# corresponding to the NTP time stamp, X, can be computed as
#
# X/86400 + 15020
#
-# where the first term converts seconds to days and the second
-# term adds the MJD corresponding to 1900.0. The integer portion
-# of the result is the integer MJD for that day, and any remainder
-# is the time of day, expressed as the fraction of the day since 0
-# hours UTC. The conversion from day fraction to seconds or to
-# hours, minutes, and seconds may involve rounding or truncation,
-# depending on the method used in the computation.
+# where the first term converts seconds to days and the second
+# term adds the MJD corresponding to the time origin defined above.
+# The integer portion of the result is the integer MJD for that
+# day, and any remainder is the time of day, expressed as the
+# fraction of the day since 0 hours UTC. The conversion from day
+# fraction to seconds or to hours, minutes, and seconds may involve
+# rounding or truncation, depending on the method used in the
+# computation.
#
-# The data in this file will be updated periodically as new leap
+# The data in this file will be updated periodically as new leap
# seconds are announced. In addition to being entered on the line
-# above, the update time (in NTP format) will be added to the basic
+# above, the update time (in NTP format) will be added to the basic
# file name leap-seconds to form the name leap-seconds.<NTP TIME>.
-# In addition, the generic name leap-seconds.list will always point to
+# In addition, the generic name leap-seconds.list will always point to
# the most recent version of the file.
#
# This update procedure will be performed only when a new leap second
-# is announced.
+# is announced.
#
# The following entry specifies the expiration date of the data
-# in this file in units of seconds since 1900.0. This expiration date
-# will be changed at least twice per year whether or not a new leap
-# second is announced. These semi-annual changes will be made no
-# later than 1 June and 1 December of each year to indicate what
-# action (if any) is to be taken on 30 June and 31 December,
+# in this file in units of seconds since the origin at the instant
+# 1 January 1900, 00:00:00. This expiration date will be changed
+# at least twice per year whether or not a new leap second is
+# announced. These semi-annual changes will be made no later
+# than 1 June and 1 December of each year to indicate what
+# action (if any) is to be taken on 30 June and 31 December,
# respectively. (These are the customary effective dates for new
# leap seconds.) This expiration date will be identified by a
# unique pair of characters in columns 1 and 2 as shown below.
-# In the unlikely event that a leap second is announced with an
+# In the unlikely event that a leap second is announced with an
# effective date other than 30 June or 31 December, then this
# file will be edited to include that leap second as soon as it is
# announced or at least one month before the effective date
-# (whichever is later).
-# If an announcement by the IERS specifies that no leap second is
-# scheduled, then only the expiration date of the file will
+# (whichever is later).
+# If an announcement by the IERS specifies that no leap second is
+# scheduled, then only the expiration date of the file will
# be advanced to show that the information in the file is still
-# current -- the update time stamp, the data and the name of the file
+# current -- the update time stamp, the data and the name of the file
# will not change.
#
-# Updated through IERS Bulletin C46
-# File expires on: 28 June 2014
+# Updated through IERS Bulletin C48
+# File expires on: 28 June 2015
#
-#@ 3612902400
+#@ 3644438400
#
2272060800 10 # 1 Jan 1972
2287785600 11 # 1 Jul 1972
@@ -222,10 +230,10 @@
# computed. Note that the hash computation
# ignores comments and whitespace characters
# in data lines. It includes the NTP values
-# of both the last modification time and the
+# of both the last modification time and the
# expiration time of the file, but not the
# white space on those lines.
# the hash line is also ignored in the
# computation.
#
-#h 1151a8f e85a5069 9000fcdb 3d5e5365 1d505b37
+#h a4862ccd c6f43c6 964f3604 85944a26 b5cfad4e
diff --git a/elsie.nci.nih.gov/src/leapseconds.awk b/elsie.nci.nih.gov/src/leapseconds.awk
index 739615a..ee20ecc 100644
--- a/elsie.nci.nih.gov/src/leapseconds.awk
+++ b/elsie.nci.nih.gov/src/leapseconds.awk
@@ -3,7 +3,7 @@
# This file is in the public domain.
BEGIN {
- print "# Allowance for leapseconds added to each timezone file."
+ print "# Allowance for leap seconds added to each time zone file."
print ""
print "# This file is in the public domain."
print ""
@@ -13,7 +13,7 @@ BEGIN {
print "# you should be able to pick up leap-seconds.list from a secondary NIST server."
print "# For more about leap-seconds.list, please see"
print "# The NTP Timescale and Leap Seconds"
- print "# <http://www.eecis.udel.edu/~mills/leap.html>."
+ print "# http://www.eecis.udel.edu/~mills/leap.html"
print ""
print "# The International Earth Rotation Service periodically uses leap seconds"
print "# to keep UTC to within 0.9 s of UT1"
diff --git a/elsie.nci.nih.gov/src/localtime.c b/elsie.nci.nih.gov/src/localtime.c
index ff07c70..622f7d4 100644
--- a/elsie.nci.nih.gov/src/localtime.c
+++ b/elsie.nci.nih.gov/src/localtime.c
@@ -10,10 +10,32 @@
/*LINTLIBRARY*/
+#define LOCALTIME_IMPLEMENTATION
#include "private.h"
+
#include "tzfile.h"
#include "fcntl.h"
+#if THREAD_SAFE
+# include <pthread.h>
+# define VOLATILE volatile
+static pthread_mutex_t locallock = PTHREAD_MUTEX_INITIALIZER;
+static int lock(void) { return pthread_mutex_lock(&locallock); }
+static void unlock(void) { pthread_mutex_unlock(&locallock); }
+#else
+# define VOLATILE
+static int lock(void) { return 0; }
+static void unlock(void) { }
+#endif
+
+/* NETBSD_INSPIRED_EXTERN functions are exported to callers if
+ NETBSD_INSPIRED is defined, and are private otherwise. */
+#if NETBSD_INSPIRED
+# define NETBSD_INSPIRED_EXTERN
+#else
+# define NETBSD_INSPIRED_EXTERN static
+#endif
+
#ifndef TZ_ABBR_MAX_LEN
#define TZ_ABBR_MAX_LEN 16
#endif /* !defined TZ_ABBR_MAX_LEN */
@@ -78,10 +100,10 @@ static const char gmt[] = "GMT";
struct ttinfo { /* time type information */
int_fast32_t tt_gmtoff; /* UT offset in seconds */
- int tt_isdst; /* used to set tm_isdst */
+ bool tt_isdst; /* used to set tm_isdst */
int tt_abbrind; /* abbreviation list index */
- int tt_ttisstd; /* TRUE if transition is std time */
- int tt_ttisgmt; /* TRUE if transition is UT */
+ bool tt_ttisstd; /* transition is std time */
+ bool tt_ttisgmt; /* transition is UT */
};
struct lsinfo { /* leap second information */
@@ -89,6 +111,7 @@ struct lsinfo { /* leap second information */
int_fast64_t ls_corr; /* correction to apply */
};
+#define SMALLEST(a, b) (((a) < (b)) ? (a) : (b))
#define BIGGEST(a, b) (((a) > (b)) ? (a) : (b))
#ifdef TZNAME_MAX
@@ -103,8 +126,8 @@ struct state {
int timecnt;
int typecnt;
int charcnt;
- int goback;
- int goahead;
+ bool goback;
+ bool goahead;
time_t ats[TZ_MAX_TIMES];
unsigned char types[TZ_MAX_TIMES];
struct ttinfo ttis[TZ_MAX_TYPES];
@@ -115,70 +138,26 @@ struct state {
};
struct rule {
- int r_type; /* type of rule--see below */
+ int r_type; /* type of rule; see below */
int r_day; /* day number of rule */
int r_week; /* week number of rule */
int r_mon; /* month number of rule */
int_fast32_t r_time; /* transition time of rule */
};
-#define JULIAN_DAY 0 /* Jn - Julian day */
-#define DAY_OF_YEAR 1 /* n - day of year */
-#define MONTH_NTH_DAY_OF_WEEK 2 /* Mm.n.d - month, week, day of week */
-
-/*
-** Prototypes for static functions.
-*/
+#define JULIAN_DAY 0 /* Jn = Julian day */
+#define DAY_OF_YEAR 1 /* n = day of year */
+#define MONTH_NTH_DAY_OF_WEEK 2 /* Mm.n.d = month, week, day of week */
-static int_fast32_t detzcode(const char * codep);
-static int_fast64_t detzcode64(const char * codep);
-static int differ_by_repeat(time_t t1, time_t t0);
-static const char * getzname(const char * strp) ATTRIBUTE_PURE;
-static const char * getqzname(const char * strp, const int delim)
- ATTRIBUTE_PURE;
-static const char * getnum(const char * strp, int * nump, int min,
- int max);
-static const char * getsecs(const char * strp, int_fast32_t * secsp);
-static const char * getoffset(const char * strp, int_fast32_t * offsetp);
-static const char * getrule(const char * strp, struct rule * rulep);
-static void gmtload(struct state * sp);
-static struct tm * gmtsub(const time_t * timep, int_fast32_t offset,
- struct tm * tmp);
-static struct tm * localsub(const time_t * timep, int_fast32_t offset,
- struct tm * tmp);
-static int increment_overflow(int * number, int delta);
-static int leaps_thru_end_of(int y) ATTRIBUTE_PURE;
-static int increment_overflow32(int_fast32_t * number, int delta);
-static int increment_overflow_time(time_t *t, int_fast32_t delta);
-static int normalize_overflow32(int_fast32_t * tensptr,
- int * unitsptr, int base);
-static int normalize_overflow(int * tensptr, int * unitsptr,
- int base);
-static void settzname(void);
-static time_t time1(struct tm * tmp,
- struct tm * (*funcp)(const time_t *,
- int_fast32_t, struct tm *),
- int_fast32_t offset);
-static time_t time2(struct tm *tmp,
- struct tm * (*funcp)(const time_t *,
- int_fast32_t, struct tm*),
- int_fast32_t offset, int * okayp);
-static time_t time2sub(struct tm *tmp,
- struct tm * (*funcp)(const time_t *,
- int_fast32_t, struct tm*),
- int_fast32_t offset, int * okayp, int do_norm_secs);
-static struct tm * timesub(const time_t * timep, int_fast32_t offset,
- const struct state * sp, struct tm * tmp);
-static int tmcomp(const struct tm * atmp,
- const struct tm * btmp);
-static int_fast32_t transtime(int year, const struct rule * rulep,
- int_fast32_t offset)
- ATTRIBUTE_PURE;
-static int typesequiv(const struct state * sp, int a, int b);
-static int tzload(const char * name, struct state * sp,
- int doextend);
-static int tzparse(const char * name, struct state * sp,
- int lastditch);
+static struct tm *gmtsub(struct state const *, time_t const *, int_fast32_t,
+ struct tm *);
+static bool increment_overflow(int *, int);
+static bool increment_overflow_time(time_t *, int_fast32_t);
+static bool normalize_overflow32(int_fast32_t *, int *, int);
+static struct tm *timesub(time_t const *, int_fast32_t, struct state const *,
+ struct tm *);
+static bool typesequiv(struct state const *, int, int);
+static bool tzparse(char const *, struct state *, bool);
#ifdef ALL_STATE
static struct state * lclptr;
@@ -197,8 +176,7 @@ static struct state gmtmem;
#endif /* !defined TZ_STRLEN_MAX */
static char lcl_TZname[TZ_STRLEN_MAX + 1];
-static int lcl_is_set;
-static int gmt_is_set;
+static int VOLATILE lcl_is_set;
char * tzname[2] = {
(char *) wildabbr,
@@ -312,7 +290,7 @@ settzname(void)
}
}
-static int
+static bool
differ_by_repeat(const time_t t1, const time_t t0)
{
if (TYPE_BIT(time_t) - TYPE_SIGNED(time_t) < SECSPERREPEAT_BITS)
@@ -320,9 +298,9 @@ differ_by_repeat(const time_t t1, const time_t t0)
return t1 - t0 == SECSPERREPEAT;
}
-static int
+static bool
tzload(register const char *name, register struct state *const sp,
- register const int doextend)
+ bool doextend)
{
register const char * p;
register int i;
@@ -335,22 +313,7 @@ tzload(register const char *name, register struct state *const sp,
2 * sizeof *sp +
4 * TZ_MAX_TIMES];
} u_t;
-#ifdef ALL_STATE
- register u_t * const up = malloc(sizeof *up);
-#else /* !defined ALL_STATE */
- u_t u;
- register u_t * const up = &u;
-#endif /* !defined ALL_STATE */
-
- sp->goback = sp->goahead = FALSE;
-
- if (up == NULL)
- return -1;
-
- if (name == NULL && (name = TZDEFAULT) == NULL)
- goto oops;
- {
- register int doaccess;
+ union local_storage {
/*
** Section 4.9.1 of the C standard says that
** "FILENAME_MAX expands to an integral constant expression
@@ -360,82 +323,111 @@ tzload(register const char *name, register struct state *const sp,
*/
char fullname[FILENAME_MAX + 1];
- if (name[0] == ':')
- ++name;
- doaccess = name[0] == '/';
- if (!doaccess) {
- if ((p = TZDIR) == NULL)
- goto oops;
- if ((strlen(p) + strlen(name) + 1) >= sizeof fullname)
- goto oops;
- (void) strcpy(fullname, p);
- (void) strcat(fullname, "/");
- (void) strcat(fullname, name);
- /*
- ** Set doaccess if '.' (as in "../") shows up in name.
- */
- if (strchr(name, '.') != NULL)
- doaccess = TRUE;
- name = fullname;
- }
- if (doaccess && access(name, R_OK) != 0)
+ /* The main part of the storage for this function. */
+ struct {
+ u_t u;
+ struct state st;
+ } u;
+ };
+ register char *fullname;
+ register u_t *up;
+ register bool doaccess;
+ register union local_storage *lsp;
+#ifdef ALL_STATE
+ lsp = malloc(sizeof *lsp);
+ if (!lsp)
+ return false;
+#else /* !defined ALL_STATE */
+ union local_storage ls;
+ lsp = &ls;
+#endif /* !defined ALL_STATE */
+ fullname = lsp->fullname;
+ up = &lsp->u.u;
+
+ sp->goback = sp->goahead = false;
+
+ if (! name) {
+ name = TZDEFAULT;
+ if (! name)
goto oops;
- if ((fid = open(name, OPEN_MODE)) == -1)
+ }
+
+ if (name[0] == ':')
+ ++name;
+ doaccess = name[0] == '/';
+ if (!doaccess) {
+ p = TZDIR;
+ if (! p || sizeof lsp->fullname - 1 <= strlen(p) + strlen(name))
goto oops;
+ strcpy(fullname, p);
+ strcat(fullname, "/");
+ strcat(fullname, name);
+ /* Set doaccess if '.' (as in "../") shows up in name. */
+ if (strchr(name, '.'))
+ doaccess = true;
+ name = fullname;
}
+ if (doaccess && access(name, R_OK) != 0)
+ goto oops;
+ fid = open(name, OPEN_MODE);
+ if (fid < 0)
+ goto oops;
+
nread = read(fid, up->buf, sizeof up->buf);
if (close(fid) < 0 || nread <= 0)
goto oops;
for (stored = 4; stored <= 8; stored *= 2) {
- int ttisstdcnt;
- int ttisgmtcnt;
- int timecnt;
-
- ttisstdcnt = (int) detzcode(up->tzhead.tzh_ttisstdcnt);
- ttisgmtcnt = (int) detzcode(up->tzhead.tzh_ttisgmtcnt);
- sp->leapcnt = (int) detzcode(up->tzhead.tzh_leapcnt);
- sp->timecnt = (int) detzcode(up->tzhead.tzh_timecnt);
- sp->typecnt = (int) detzcode(up->tzhead.tzh_typecnt);
- sp->charcnt = (int) detzcode(up->tzhead.tzh_charcnt);
+ int_fast32_t ttisstdcnt = detzcode(up->tzhead.tzh_ttisstdcnt);
+ int_fast32_t ttisgmtcnt = detzcode(up->tzhead.tzh_ttisgmtcnt);
+ int_fast32_t leapcnt = detzcode(up->tzhead.tzh_leapcnt);
+ int_fast32_t timecnt = detzcode(up->tzhead.tzh_timecnt);
+ int_fast32_t typecnt = detzcode(up->tzhead.tzh_typecnt);
+ int_fast32_t charcnt = detzcode(up->tzhead.tzh_charcnt);
p = up->tzhead.tzh_charcnt + sizeof up->tzhead.tzh_charcnt;
- if (sp->leapcnt < 0 || sp->leapcnt > TZ_MAX_LEAPS ||
- sp->typecnt <= 0 || sp->typecnt > TZ_MAX_TYPES ||
- sp->timecnt < 0 || sp->timecnt > TZ_MAX_TIMES ||
- sp->charcnt < 0 || sp->charcnt > TZ_MAX_CHARS ||
- (ttisstdcnt != sp->typecnt && ttisstdcnt != 0) ||
- (ttisgmtcnt != sp->typecnt && ttisgmtcnt != 0))
+ if (! (0 <= leapcnt && leapcnt < TZ_MAX_LEAPS
+ && 0 < typecnt && typecnt < TZ_MAX_TYPES
+ && 0 <= timecnt && timecnt < TZ_MAX_TIMES
+ && 0 <= charcnt && charcnt < TZ_MAX_CHARS
+ && (ttisstdcnt == typecnt || ttisstdcnt == 0)
+ && (ttisgmtcnt == typecnt || ttisgmtcnt == 0)))
goto oops;
- if (nread - (p - up->buf) <
- sp->timecnt * stored + /* ats */
- sp->timecnt + /* types */
- sp->typecnt * 6 + /* ttinfos */
- sp->charcnt + /* chars */
- sp->leapcnt * (stored + 4) + /* lsinfos */
- ttisstdcnt + /* ttisstds */
- ttisgmtcnt) /* ttisgmts */
+ if (nread - (p - up->buf)
+ < (timecnt * stored /* ats */
+ + timecnt /* types */
+ + typecnt * 6 /* ttinfos */
+ + charcnt /* chars */
+ + leapcnt * (stored + 4) /* lsinfos */
+ + ttisstdcnt /* ttisstds */
+ + ttisgmtcnt)) /* ttisgmts */
goto oops;
+ sp->leapcnt = leapcnt;
+ sp->timecnt = timecnt;
+ sp->typecnt = typecnt;
+ sp->charcnt = charcnt;
+
+ /* Read transitions, discarding those out of time_t range.
+ But pretend the last transition before time_t_min
+ occurred at time_t_min. */
timecnt = 0;
for (i = 0; i < sp->timecnt; ++i) {
int_fast64_t at
= stored == 4 ? detzcode(p) : detzcode64(p);
- sp->types[i] = ((TYPE_SIGNED(time_t)
- ? time_t_min <= at
- : 0 <= at)
- && at <= time_t_max);
+ sp->types[i] = at <= time_t_max;
if (sp->types[i]) {
- if (i && !timecnt && at != time_t_min) {
- /*
- ** Keep the earlier record, but tweak
- ** it so that it starts with the
- ** minimum time_t value.
- */
- sp->types[i - 1] = 1;
- sp->ats[timecnt++] = time_t_min;
- }
- sp->ats[timecnt++] = at;
+ time_t attime
+ = ((TYPE_SIGNED(time_t) ? at < time_t_min : at < 0)
+ ? time_t_min : at);
+ if (timecnt && attime <= sp->ats[timecnt - 1]) {
+ if (attime < sp->ats[timecnt - 1])
+ goto oops;
+ sp->types[i - 1] = 0;
+ timecnt--;
+ }
+ sp->ats[timecnt++] = attime;
}
p += stored;
}
+
timecnt = 0;
for (i = 0; i < sp->timecnt; ++i) {
unsigned char typ = *p++;
@@ -447,42 +439,56 @@ tzload(register const char *name, register struct state *const sp,
sp->timecnt = timecnt;
for (i = 0; i < sp->typecnt; ++i) {
register struct ttinfo * ttisp;
+ unsigned char isdst, abbrind;
ttisp = &sp->ttis[i];
ttisp->tt_gmtoff = detzcode(p);
p += 4;
- ttisp->tt_isdst = (unsigned char) *p++;
- if (ttisp->tt_isdst != 0 && ttisp->tt_isdst != 1)
- goto oops;
- ttisp->tt_abbrind = (unsigned char) *p++;
- if (ttisp->tt_abbrind < 0 ||
- ttisp->tt_abbrind > sp->charcnt)
- goto oops;
+ isdst = *p++;
+ if (! (isdst < 2))
+ goto oops;
+ ttisp->tt_isdst = isdst;
+ abbrind = *p++;
+ if (! (abbrind < sp->charcnt))
+ goto oops;
+ ttisp->tt_abbrind = abbrind;
}
for (i = 0; i < sp->charcnt; ++i)
sp->chars[i] = *p++;
sp->chars[i] = '\0'; /* ensure '\0' at end */
- for (i = 0; i < sp->leapcnt; ++i) {
- register struct lsinfo * lsisp;
- lsisp = &sp->lsis[i];
- lsisp->ls_trans = (stored == 4) ?
- detzcode(p) : detzcode64(p);
- p += stored;
- lsisp->ls_corr = detzcode(p);
- p += 4;
+ /* Read leap seconds, discarding those out of time_t range. */
+ leapcnt = 0;
+ for (i = 0; i < sp->leapcnt; ++i) {
+ int_fast64_t tr = stored == 4 ? detzcode(p) : detzcode64(p);
+ int_fast32_t corr = detzcode(p + stored);
+ p += stored + 4;
+ if (tr <= time_t_max) {
+ time_t trans
+ = ((TYPE_SIGNED(time_t) ? tr < time_t_min : tr < 0)
+ ? time_t_min : tr);
+ if (leapcnt && trans <= sp->lsis[leapcnt - 1].ls_trans) {
+ if (trans < sp->lsis[leapcnt - 1].ls_trans)
+ goto oops;
+ leapcnt--;
+ }
+ sp->lsis[leapcnt].ls_trans = trans;
+ sp->lsis[leapcnt].ls_corr = corr;
+ leapcnt++;
+ }
}
+ sp->leapcnt = leapcnt;
+
for (i = 0; i < sp->typecnt; ++i) {
register struct ttinfo * ttisp;
ttisp = &sp->ttis[i];
if (ttisstdcnt == 0)
- ttisp->tt_ttisstd = FALSE;
+ ttisp->tt_ttisstd = false;
else {
- ttisp->tt_ttisstd = *p++;
- if (ttisp->tt_ttisstd != TRUE &&
- ttisp->tt_ttisstd != FALSE)
+ if (*p != true && *p != false)
goto oops;
+ ttisp->tt_ttisstd = *p++;
}
}
for (i = 0; i < sp->typecnt; ++i) {
@@ -490,12 +496,11 @@ tzload(register const char *name, register struct state *const sp,
ttisp = &sp->ttis[i];
if (ttisgmtcnt == 0)
- ttisp->tt_ttisgmt = FALSE;
+ ttisp->tt_ttisgmt = false;
else {
- ttisp->tt_ttisgmt = *p++;
- if (ttisp->tt_ttisgmt != TRUE &&
- ttisp->tt_ttisgmt != FALSE)
+ if (*p != true && *p != false)
goto oops;
+ ttisp->tt_ttisgmt = *p++;
}
}
/*
@@ -515,43 +520,42 @@ tzload(register const char *name, register struct state *const sp,
if (doextend && nread > 2 &&
up->buf[0] == '\n' && up->buf[nread - 1] == '\n' &&
sp->typecnt + 2 <= TZ_MAX_TYPES) {
- struct state ts;
- register int result;
+ struct state *ts = &lsp->u.st;
up->buf[nread - 1] = '\0';
- result = tzparse(&up->buf[1], &ts, FALSE);
- if (result == 0 && ts.typecnt == 2 &&
- sp->charcnt + ts.charcnt <= TZ_MAX_CHARS) {
+ if (tzparse(&up->buf[1], ts, false)
+ && ts->typecnt == 2
+ && sp->charcnt + ts->charcnt <= TZ_MAX_CHARS) {
for (i = 0; i < 2; ++i)
- ts.ttis[i].tt_abbrind +=
+ ts->ttis[i].tt_abbrind +=
sp->charcnt;
- for (i = 0; i < ts.charcnt; ++i)
+ for (i = 0; i < ts->charcnt; ++i)
sp->chars[sp->charcnt++] =
- ts.chars[i];
+ ts->chars[i];
i = 0;
- while (i < ts.timecnt &&
- ts.ats[i] <=
+ while (i < ts->timecnt &&
+ ts->ats[i] <=
sp->ats[sp->timecnt - 1])
++i;
- while (i < ts.timecnt &&
+ while (i < ts->timecnt &&
sp->timecnt < TZ_MAX_TIMES) {
sp->ats[sp->timecnt] =
- ts.ats[i];
+ ts->ats[i];
sp->types[sp->timecnt] =
sp->typecnt +
- ts.types[i];
+ ts->types[i];
++sp->timecnt;
++i;
}
- sp->ttis[sp->typecnt++] = ts.ttis[0];
- sp->ttis[sp->typecnt++] = ts.ttis[1];
+ sp->ttis[sp->typecnt++] = ts->ttis[0];
+ sp->ttis[sp->typecnt++] = ts->ttis[1];
}
}
if (sp->timecnt > 1) {
for (i = 1; i < sp->timecnt; ++i)
if (typesequiv(sp, sp->types[i], sp->types[0]) &&
differ_by_repeat(sp->ats[i], sp->ats[0])) {
- sp->goback = TRUE;
+ sp->goback = true;
break;
}
for (i = sp->timecnt - 2; i >= 0; --i)
@@ -559,7 +563,7 @@ tzload(register const char *name, register struct state *const sp,
sp->types[i]) &&
differ_by_repeat(sp->ats[sp->timecnt - 1],
sp->ats[i])) {
- sp->goahead = TRUE;
+ sp->goahead = true;
break;
}
}
@@ -600,23 +604,23 @@ tzload(register const char *name, register struct state *const sp,
#ifdef ALL_STATE
free(up);
#endif /* defined ALL_STATE */
- return 0;
+ return true;
oops:
#ifdef ALL_STATE
free(up);
#endif /* defined ALL_STATE */
- return -1;
+ return false;
}
-static int
+static bool
typesequiv(const struct state *const sp, const int a, const int b)
{
- register int result;
+ register bool result;
if (sp == NULL ||
a < 0 || a >= sp->typecnt ||
b < 0 || b >= sp->typecnt)
- result = FALSE;
+ result = false;
else {
register const struct ttinfo * ap = &sp->ttis[a];
register const struct ttinfo * bp = &sp->ttis[b];
@@ -645,7 +649,7 @@ static const int year_lengths[2] = {
** character.
*/
-static const char *
+static const char * ATTRIBUTE_PURE
getzname(register const char *strp)
{
register char c;
@@ -665,7 +669,7 @@ getzname(register const char *strp)
** We don't do any checking here; checking is done later in common-case code.
*/
-static const char *
+static const char * ATTRIBUTE_PURE
getqzname(register const char *strp, const int delim)
{
register int c;
@@ -717,10 +721,10 @@ getsecs(register const char *strp, int_fast32_t *const secsp)
int num;
/*
- ** `HOURSPERDAY * DAYSPERWEEK - 1' allows quasi-Posix rules like
+ ** 'HOURSPERDAY * DAYSPERWEEK - 1' allows quasi-Posix rules like
** "M10.4.6/26", which does not conform to Posix,
** but which specifies the equivalent of
- ** ``02:00 on the first Sunday on or after 23 Oct''.
+ ** "02:00 on the first Sunday on or after 23 Oct".
*/
strp = getnum(strp, &num, 0, HOURSPERDAY * DAYSPERWEEK - 1);
if (strp == NULL)
@@ -734,7 +738,7 @@ getsecs(register const char *strp, int_fast32_t *const secsp)
*secsp += num * SECSPERMIN;
if (*strp == ':') {
++strp;
- /* `SECSPERMIN' allows for leap seconds. */
+ /* 'SECSPERMIN' allows for leap seconds. */
strp = getnum(strp, &num, 0, SECSPERMIN);
if (strp == NULL)
return NULL;
@@ -754,10 +758,10 @@ getsecs(register const char *strp, int_fast32_t *const secsp)
static const char *
getoffset(register const char *strp, int_fast32_t *const offsetp)
{
- register int neg = 0;
+ register bool neg = false;
if (*strp == '-') {
- neg = 1;
+ neg = true;
++strp;
} else if (*strp == '+')
++strp;
@@ -827,11 +831,11 @@ getrule(const char *strp, register struct rule *const rulep)
** effect, calculate the year-relative time that rule takes effect.
*/
-static int_fast32_t
+static int_fast32_t ATTRIBUTE_PURE
transtime(const int year, register const struct rule *const rulep,
const int_fast32_t offset)
{
- register int leapyear;
+ register bool leapyear;
register int_fast32_t value;
register int i;
int d, m1, yy0, yy1, yy2, dow;
@@ -918,9 +922,9 @@ transtime(const int year, register const struct rule *const rulep,
** appropriate.
*/
-static int
+static bool
tzparse(const char *name, register struct state *const sp,
- const int lastditch)
+ bool lastditch)
{
const char * stdname;
const char * dstname;
@@ -929,10 +933,9 @@ tzparse(const char *name, register struct state *const sp,
int_fast32_t stdoffset;
int_fast32_t dstoffset;
register char * cp;
- register int load_result;
+ register bool load_ok;
static struct ttinfo zttinfo;
- INITIALIZE(dstname);
stdname = name;
if (lastditch) {
stdlen = strlen(name); /* length of standard zone name */
@@ -946,7 +949,7 @@ tzparse(const char *name, register struct state *const sp,
stdname = name;
name = getqzname(name, '>');
if (*name != '>')
- return (-1);
+ return false;
stdlen = name - stdname;
name++;
} else {
@@ -954,20 +957,20 @@ tzparse(const char *name, register struct state *const sp,
stdlen = name - stdname;
}
if (*name == '\0')
- return -1;
+ return false;
name = getoffset(name, &stdoffset);
if (name == NULL)
- return -1;
+ return false;
}
- load_result = tzload(TZDEFRULES, sp, FALSE);
- if (load_result != 0)
+ load_ok = tzload(TZDEFRULES, sp, false);
+ if (!load_ok)
sp->leapcnt = 0; /* so, we're off a little */
if (*name != '\0') {
if (*name == '<') {
dstname = ++name;
name = getqzname(name, '>');
if (*name != '>')
- return -1;
+ return false;
dstlen = name - dstname;
name++;
} else {
@@ -978,9 +981,9 @@ tzparse(const char *name, register struct state *const sp,
if (*name != '\0' && *name != ',' && *name != ';') {
name = getoffset(name, &dstoffset);
if (name == NULL)
- return -1;
+ return false;
} else dstoffset = stdoffset - SECSPERHOUR;
- if (*name == '\0' && load_result != 0)
+ if (*name == '\0' && !load_ok)
name = TZDEFRULESTRING;
if (*name == ',' || *name == ';') {
struct rule start;
@@ -992,23 +995,23 @@ tzparse(const char *name, register struct state *const sp,
++name;
if ((name = getrule(name, &start)) == NULL)
- return -1;
+ return false;
if (*name++ != ',')
- return -1;
+ return false;
if ((name = getrule(name, &end)) == NULL)
- return -1;
+ return false;
if (*name != '\0')
- return -1;
+ return false;
sp->typecnt = 2; /* standard time and DST */
/*
** Two transitions per year, from EPOCH_YEAR forward.
*/
sp->ttis[0] = sp->ttis[1] = zttinfo;
sp->ttis[0].tt_gmtoff = -dstoffset;
- sp->ttis[0].tt_isdst = 1;
+ sp->ttis[0].tt_isdst = true;
sp->ttis[0].tt_abbrind = stdlen + 1;
sp->ttis[1].tt_gmtoff = -stdoffset;
- sp->ttis[1].tt_isdst = 0;
+ sp->ttis[1].tt_isdst = false;
sp->ttis[1].tt_abbrind = 0;
sp->defaulttype = 0;
timecnt = 0;
@@ -1021,7 +1024,7 @@ tzparse(const char *name, register struct state *const sp,
int_fast32_t
yearsecs = (year_lengths[isleap(year)]
* SECSPERDAY);
- int reversed = endtime < starttime;
+ bool reversed = endtime < starttime;
if (reversed) {
int_fast32_t swap = starttime;
starttime = endtime;
@@ -1056,12 +1059,12 @@ tzparse(const char *name, register struct state *const sp,
register int_fast32_t theirstdoffset;
register int_fast32_t theirdstoffset;
register int_fast32_t theiroffset;
- register int isdst;
+ register bool isdst;
register int i;
register int j;
if (*name != '\0')
- return -1;
+ return false;
/*
** Initial values of theirstdoffset and theirdstoffset.
*/
@@ -1086,7 +1089,7 @@ tzparse(const char *name, register struct state *const sp,
/*
** Initially we're assumed to be in standard time.
*/
- isdst = FALSE;
+ isdst = false;
theiroffset = theirstdoffset;
/*
** Now juggle transition times and types
@@ -1130,10 +1133,10 @@ tzparse(const char *name, register struct state *const sp,
*/
sp->ttis[0] = sp->ttis[1] = zttinfo;
sp->ttis[0].tt_gmtoff = -stdoffset;
- sp->ttis[0].tt_isdst = FALSE;
+ sp->ttis[0].tt_isdst = false;
sp->ttis[0].tt_abbrind = 0;
sp->ttis[1].tt_gmtoff = -dstoffset;
- sp->ttis[1].tt_isdst = TRUE;
+ sp->ttis[1].tt_isdst = true;
sp->ttis[1].tt_abbrind = stdlen + 1;
sp->typecnt = 2;
sp->defaulttype = 0;
@@ -1144,7 +1147,7 @@ tzparse(const char *name, register struct state *const sp,
sp->timecnt = 0;
sp->ttis[0] = zttinfo;
sp->ttis[0].tt_gmtoff = -stdoffset;
- sp->ttis[0].tt_isdst = 0;
+ sp->ttis[0].tt_isdst = false;
sp->ttis[0].tt_abbrind = 0;
sp->defaulttype = 0;
}
@@ -1152,100 +1155,143 @@ tzparse(const char *name, register struct state *const sp,
if (dstlen != 0)
sp->charcnt += dstlen + 1;
if ((size_t) sp->charcnt > sizeof sp->chars)
- return -1;
+ return false;
cp = sp->chars;
- (void) strncpy(cp, stdname, stdlen);
+ memcpy(cp, stdname, stdlen);
cp += stdlen;
*cp++ = '\0';
if (dstlen != 0) {
- (void) strncpy(cp, dstname, dstlen);
+ memcpy(cp, dstname, dstlen);
*(cp + dstlen) = '\0';
}
- return 0;
+ return true;
}
static void
gmtload(struct state *const sp)
{
- if (tzload(gmt, sp, TRUE) != 0)
- (void) tzparse(gmt, sp, TRUE);
+ if (! tzload(gmt, sp, true))
+ tzparse(gmt, sp, true);
}
-#ifndef STD_INSPIRED
-/*
-** A non-static declaration of tzsetwall in a system header file
-** may cause a warning about this upcoming static declaration...
-*/
-static
-#endif /* !defined STD_INSPIRED */
-void
-tzsetwall(void)
+static struct state *
+zoneinit(struct state *sp, char const *name)
{
- if (lcl_is_set < 0)
- return;
- lcl_is_set = -1;
+ if (sp) {
+ if (name && ! name[0]) {
+ /*
+ ** User wants it fast rather than right.
+ */
+ sp->leapcnt = 0; /* so, we're off a little */
+ sp->timecnt = 0;
+ sp->typecnt = 0;
+ sp->ttis[0].tt_isdst = 0;
+ sp->ttis[0].tt_gmtoff = 0;
+ sp->ttis[0].tt_abbrind = 0;
+ strcpy(sp->chars, gmt);
+ } else if (! (tzload(name, sp, true)
+ || (name && name[0] != ':' && tzparse(name, sp, false))))
+ return NULL;
+ }
+ return sp;
+}
+static void
+tzsetlcl(char const *name)
+{
+ int lcl = name ? strlen(name) < sizeof lcl_TZname : -1;
+ if (lcl < 0
+ ? lcl_is_set < 0
+ : 0 < lcl_is_set && strcmp(lcl_TZname, name) == 0)
+ return;
+ if (0 < lcl)
+ strcpy(lcl_TZname, name);
#ifdef ALL_STATE
- if (lclptr == NULL) {
- lclptr = malloc(sizeof *lclptr);
- if (lclptr == NULL) {
- settzname(); /* all we can do */
- return;
- }
- }
+ if (! lclptr)
+ lclptr = malloc(sizeof *lclptr);
#endif /* defined ALL_STATE */
- if (tzload(NULL, lclptr, TRUE) != 0)
- gmtload(lclptr);
- settzname();
+ zoneinit(lclptr, name);
+ settzname();
+ lcl_is_set = lcl;
}
+#ifdef STD_INSPIRED
void
-tzset(void)
+tzsetwall(void)
{
- register const char * name;
+ if (lock() != 0)
+ return;
+ tzsetlcl(NULL);
+ unlock();
+}
+#endif
- name = getenv("TZ");
- if (name == NULL) {
- tzsetwall();
- return;
- }
+static void
+tzset_unlocked(void)
+{
+ tzsetlcl(getenv("TZ"));
+}
- if (lcl_is_set > 0 && strcmp(lcl_TZname, name) == 0)
- return;
- lcl_is_set = strlen(name) < sizeof lcl_TZname;
- if (lcl_is_set)
- (void) strcpy(lcl_TZname, name);
+void
+tzset(void)
+{
+ if (lock() != 0)
+ return;
+ tzset_unlocked();
+ unlock();
+}
+static void
+gmtcheck(void)
+{
+ static bool VOLATILE gmt_is_set;
+ if (gmt_is_set)
+ return;
+ if (lock() != 0)
+ return;
#ifdef ALL_STATE
- if (lclptr == NULL) {
- lclptr = malloc(sizeof *lclptr);
- if (lclptr == NULL) {
- settzname(); /* all we can do */
- return;
- }
- }
-#endif /* defined ALL_STATE */
- if (*name == '\0') {
- /*
- ** User wants it fast rather than right.
- */
- lclptr->leapcnt = 0; /* so, we're off a little */
- lclptr->timecnt = 0;
- lclptr->typecnt = 0;
- lclptr->ttis[0].tt_isdst = 0;
- lclptr->ttis[0].tt_gmtoff = 0;
- lclptr->ttis[0].tt_abbrind = 0;
- (void) strcpy(lclptr->chars, gmt);
- } else if (tzload(name, lclptr, TRUE) != 0)
- if (name[0] == ':' || tzparse(name, lclptr, FALSE) != 0)
- (void) gmtload(lclptr);
- settzname();
+ gmtptr = malloc(sizeof *gmtptr);
+#endif
+ if (gmtptr)
+ gmtload(gmtptr);
+ gmt_is_set = true;
+ unlock();
+}
+
+#if NETBSD_INSPIRED
+
+timezone_t
+tzalloc(char const *name)
+{
+ timezone_t sp = malloc(sizeof *sp);
+ timezone_t tp = sp ? zoneinit(sp, name) : sp;
+ if (!tp)
+ free(sp);
+ return tp;
+}
+
+void
+tzfree(timezone_t sp)
+{
+ free(sp);
}
/*
+** NetBSD 6.1.4 has ctime_rz, but omit it because POSIX says ctime and
+** ctime_r are obsolescent and have potential security problems that
+** ctime_rz would share. Callers can instead use localtime_rz + strftime.
+**
+** NetBSD 6.1.4 has tzgetname, but omit it because it doesn't work
+** in zones with three or more time zone abbreviations.
+** Callers can instead use localtime_rz + strftime.
+*/
+
+#endif
+
+/*
** The easy way to behave "as if no library function calls" localtime
-** is to not call it--so we drop its guts into "localsub", which can be
-** freely called. (And no, the PANS doesn't require the above behavior--
+** is to not call it, so we drop its guts into "localsub", which can be
+** freely called. (And no, the PANS doesn't require the above behavior,
** but it *is* desirable.)
**
** The unused offset argument is for the benefit of mktime variants.
@@ -1253,18 +1299,16 @@ tzset(void)
/*ARGSUSED*/
static struct tm *
-localsub(const time_t *const timep, const int_fast32_t offset,
+localsub(struct state const *sp, time_t const *timep, int_fast32_t offset,
struct tm *const tmp)
{
- register struct state * sp;
register const struct ttinfo * ttisp;
register int i;
register struct tm * result;
const time_t t = *timep;
- sp = lclptr;
if (sp == NULL)
- return gmtsub(timep, offset, tmp);
+ return gmtsub(gmtptr, timep, offset, tmp);
if ((sp->goback && t < sp->ats[0]) ||
(sp->goahead && t > sp->ats[sp->timecnt - 1])) {
time_t newt = t;
@@ -1283,17 +1327,17 @@ localsub(const time_t *const timep, const int_fast32_t offset,
if (newt < sp->ats[0] ||
newt > sp->ats[sp->timecnt - 1])
return NULL; /* "cannot happen" */
- result = localsub(&newt, offset, tmp);
+ result = localsub(sp, &newt, offset, tmp);
if (result == tmp) {
- register time_t newy;
+ register int_fast64_t newy;
newy = tmp->tm_year;
if (t < sp->ats[0])
newy -= years;
else newy += years;
- tmp->tm_year = newy;
- if (tmp->tm_year != newy)
+ if (! (INT_MIN <= newy && newy <= INT_MAX))
return NULL;
+ tmp->tm_year = newy;
}
return result;
}
@@ -1321,28 +1365,43 @@ localsub(const time_t *const timep, const int_fast32_t offset,
*/
result = timesub(&t, ttisp->tt_gmtoff, sp, tmp);
tmp->tm_isdst = ttisp->tt_isdst;
- tzname[tmp->tm_isdst] = &sp->chars[ttisp->tt_abbrind];
#ifdef TM_ZONE
- tmp->TM_ZONE = &sp->chars[ttisp->tt_abbrind];
+ tmp->TM_ZONE = (char *) &sp->chars[ttisp->tt_abbrind];
#endif /* defined TM_ZONE */
return result;
}
+NETBSD_INSPIRED_EXTERN struct tm *
+localtime_rz(struct state *sp, time_t const *timep, struct tm *tmp)
+{
+ return localsub(sp, timep, 0, tmp);
+}
+
+static struct tm *
+localtime_tzset(time_t const *timep, struct tm *tmp, bool skip_tzset)
+{
+ int err = lock();
+ if (err) {
+ errno = err;
+ return NULL;
+ }
+ if (!skip_tzset)
+ tzset_unlocked();
+ tmp = localtime_rz(lclptr, timep, tmp);
+ unlock();
+ return tmp;
+}
+
struct tm *
localtime(const time_t *const timep)
{
- tzset();
- return localsub(timep, 0L, &tm);
+ return localtime_tzset(timep, &tm, 0);
}
-/*
-** Re-entrant version of localtime.
-*/
-
struct tm *
localtime_r(const time_t *const timep, struct tm *tmp)
{
- return localsub(timep, 0L, tmp);
+ return localtime_tzset(timep, tmp, lcl_is_set != 0);
}
/*
@@ -1350,19 +1409,11 @@ localtime_r(const time_t *const timep, struct tm *tmp)
*/
static struct tm *
-gmtsub(const time_t *const timep, const int_fast32_t offset,
- struct tm *const tmp)
+gmtsub(struct state const *sp, time_t const *timep, int_fast32_t offset,
+ struct tm *tmp)
{
register struct tm * result;
- if (!gmt_is_set) {
- gmt_is_set = TRUE;
-#ifdef ALL_STATE
- gmtptr = malloc(sizeof *gmtptr);
-#endif /* defined ALL_STATE */
- if (gmtptr != NULL)
- gmtload(gmtptr);
- }
result = timesub(timep, offset, gmtptr, tmp);
#ifdef TM_ZONE
/*
@@ -1370,7 +1421,8 @@ gmtsub(const time_t *const timep, const int_fast32_t offset,
** "UT+xxxx" or "UT-xxxx" if offset is non-zero,
** but this is no time for a treasure hunt.
*/
- tmp->TM_ZONE = offset ? wildabbr : gmtptr ? gmtptr->chars : gmt;
+ tmp->TM_ZONE = ((char *)
+ (offset ? wildabbr : gmtptr ? gmtptr->chars : gmt));
#endif /* defined TM_ZONE */
return result;
}
@@ -1378,7 +1430,7 @@ gmtsub(const time_t *const timep, const int_fast32_t offset,
struct tm *
gmtime(const time_t *const timep)
{
- return gmtsub(timep, 0L, &tm);
+ return gmtime_r(timep, &tm);
}
/*
@@ -1388,7 +1440,9 @@ gmtime(const time_t *const timep)
struct tm *
gmtime_r(const time_t *const timep, struct tm *tmp)
{
- return gmtsub(timep, 0L, tmp);
+ gmtcheck();
+ tmp = gmtsub(gmtptr, timep, 0, tmp);
+ return tmp;
}
#ifdef STD_INSPIRED
@@ -1396,7 +1450,10 @@ gmtime_r(const time_t *const timep, struct tm *tmp)
struct tm *
offtime(const time_t *const timep, const long offset)
{
- return gmtsub(timep, offset, &tm);
+ struct tm *tmp;
+ gmtcheck();
+ tmp = gmtsub(gmtptr, timep, offset, &tm);
+ return tmp;
}
#endif /* defined STD_INSPIRED */
@@ -1406,7 +1463,7 @@ offtime(const time_t *const timep, const long offset)
** where, to make the math easy, the answer for year zero is defined as zero.
*/
-static int
+static int ATTRIBUTE_PURE
leaps_thru_end_of(register const int y)
{
return (y >= 0) ? (y / 4 - y / 100 + y / 400) :
@@ -1425,11 +1482,11 @@ timesub(const time_t *const timep, const int_fast32_t offset,
int y;
register const int * ip;
register int_fast64_t corr;
- register int hit;
+ register bool hit;
register int i;
corr = 0;
- hit = 0;
+ hit = false;
i = (sp == NULL) ? 0 : sp->leapcnt;
while (--i >= 0) {
lp = &sp->lsis[i];
@@ -1578,7 +1635,7 @@ ctime_r(const time_t *const timep, char *buf)
** Normalize logic courtesy Paul Eggert.
*/
-static int
+static bool
increment_overflow(int *const ip, int j)
{
register int const i = *ip;
@@ -1590,23 +1647,23 @@ increment_overflow(int *const ip, int j)
** or if j < INT_MIN - i; given i < 0, INT_MIN - i cannot overflow.
*/
if ((i >= 0) ? (j > INT_MAX - i) : (j < INT_MIN - i))
- return TRUE;
+ return true;
*ip += j;
- return FALSE;
+ return false;
}
-static int
+static bool
increment_overflow32(int_fast32_t *const lp, int const m)
{
register int_fast32_t const l = *lp;
if ((l >= 0) ? (m > INT_FAST32_MAX - l) : (m < INT_FAST32_MIN - l))
- return TRUE;
+ return true;
*lp += m;
- return FALSE;
+ return false;
}
-static int
+static bool
increment_overflow_time(time_t *tp, int_fast32_t j)
{
/*
@@ -1617,12 +1674,12 @@ increment_overflow_time(time_t *tp, int_fast32_t j)
if (! (j < 0
? (TYPE_SIGNED(time_t) ? time_t_min - j <= *tp : -1 - j < *tp)
: *tp <= time_t_max - j))
- return TRUE;
+ return true;
*tp += j;
- return FALSE;
+ return false;
}
-static int
+static bool
normalize_overflow(int *const tensptr, int *const unitsptr, const int base)
{
register int tensdelta;
@@ -1634,7 +1691,7 @@ normalize_overflow(int *const tensptr, int *const unitsptr, const int base)
return increment_overflow(tensptr, tensdelta);
}
-static int
+static bool
normalize_overflow32(int_fast32_t *const tensptr, int *const unitsptr,
const int base)
{
@@ -1665,12 +1722,13 @@ tmcomp(register const struct tm *const atmp,
static time_t
time2sub(struct tm *const tmp,
- struct tm *(*const funcp)(const time_t *, int_fast32_t, struct tm *),
+ struct tm *(*funcp)(struct state const *, time_t const *,
+ int_fast32_t, struct tm *),
+ struct state const *sp,
const int_fast32_t offset,
- int *const okayp,
- const int do_norm_secs)
+ bool *okayp,
+ bool do_norm_secs)
{
- register const struct state * sp;
register int dir;
register int i, j;
register int saved_seconds;
@@ -1682,7 +1740,7 @@ time2sub(struct tm *const tmp,
time_t t;
struct tm yourtm, mytm;
- *okayp = FALSE;
+ *okayp = false;
yourtm = *tmp;
if (do_norm_secs) {
if (normalize_overflow(&yourtm.tm_min, &yourtm.tm_sec,
@@ -1727,9 +1785,9 @@ time2sub(struct tm *const tmp,
}
if (increment_overflow32(&y, -TM_YEAR_BASE))
return WRONG;
- yourtm.tm_year = y;
- if (yourtm.tm_year != y)
+ if (! (INT_MIN <= y && y <= INT_MAX))
return WRONG;
+ yourtm.tm_year = y;
if (yourtm.tm_sec >= 0 && yourtm.tm_sec < SECSPERMIN)
saved_seconds = 0;
else if (y + TM_YEAR_BASE < EPOCH_YEAR) {
@@ -1767,7 +1825,7 @@ time2sub(struct tm *const tmp,
t = lo;
else if (t > hi)
t = hi;
- if ((*funcp)(&t, offset, &mytm) == NULL) {
+ if (! funcp(sp, &t, offset, &mytm)) {
/*
** Assume that t is too extreme to be represented in
** a struct tm; arrange things so that it is less
@@ -1794,6 +1852,35 @@ time2sub(struct tm *const tmp,
else lo = t;
continue;
}
+#if defined TM_GMTOFF && ! UNINIT_TRAP
+ if (mytm.TM_GMTOFF != yourtm.TM_GMTOFF
+ && (yourtm.TM_GMTOFF < 0
+ ? (-SECSPERDAY <= yourtm.TM_GMTOFF
+ && (mytm.TM_GMTOFF <=
+ (SMALLEST (INT_FAST32_MAX, LONG_MAX)
+ + yourtm.TM_GMTOFF)))
+ : (yourtm.TM_GMTOFF <= SECSPERDAY
+ && ((BIGGEST (INT_FAST32_MIN, LONG_MIN)
+ + yourtm.TM_GMTOFF)
+ <= mytm.TM_GMTOFF)))) {
+ /* MYTM matches YOURTM except with the wrong UTC offset.
+ YOURTM.TM_GMTOFF is plausible, so try it instead.
+ It's OK if YOURTM.TM_GMTOFF contains uninitialized data,
+ since the guess gets checked. */
+ time_t altt = t;
+ int_fast32_t diff = mytm.TM_GMTOFF - yourtm.TM_GMTOFF;
+ if (!increment_overflow_time(&altt, diff)) {
+ struct tm alttm;
+ if (funcp(sp, &altt, offset, &alttm)
+ && alttm.tm_isdst == mytm.tm_isdst
+ && alttm.TM_GMTOFF == yourtm.TM_GMTOFF
+ && tmcomp(&alttm, &yourtm) == 0) {
+ t = altt;
+ mytm = alttm;
+ }
+ }
+ }
+#endif
if (yourtm.tm_isdst < 0 || mytm.tm_isdst == yourtm.tm_isdst)
break;
/*
@@ -1802,8 +1889,6 @@ time2sub(struct tm *const tmp,
** It's okay to guess wrong since the guess
** gets checked.
*/
- sp = (const struct state *)
- ((funcp == localsub) ? lclptr : gmtptr);
if (sp == NULL)
return WRONG;
for (i = sp->typecnt - 1; i >= 0; --i) {
@@ -1814,7 +1899,7 @@ time2sub(struct tm *const tmp,
continue;
newt = t + sp->ttis[j].tt_gmtoff -
sp->ttis[i].tt_gmtoff;
- if ((*funcp)(&newt, offset, &mytm) == NULL)
+ if (! funcp(sp, &newt, offset, &mytm))
continue;
if (tmcomp(&mytm, &yourtm) != 0)
continue;
@@ -1834,16 +1919,18 @@ label:
if ((newt < t) != (saved_seconds < 0))
return WRONG;
t = newt;
- if ((*funcp)(&t, offset, tmp))
- *okayp = TRUE;
+ if (funcp(sp, &t, offset, tmp))
+ *okayp = true;
return t;
}
static time_t
time2(struct tm * const tmp,
- struct tm * (*const funcp)(const time_t *, int_fast32_t, struct tm *),
+ struct tm *(*funcp)(struct state const *, time_t const *,
+ int_fast32_t, struct tm *),
+ struct state const *sp,
const int_fast32_t offset,
- int *const okayp)
+ bool *okayp)
{
time_t t;
@@ -1852,24 +1939,25 @@ time2(struct tm * const tmp,
** (in case tm_sec contains a value associated with a leap second).
** If that fails, try with normalization of seconds.
*/
- t = time2sub(tmp, funcp, offset, okayp, FALSE);
- return *okayp ? t : time2sub(tmp, funcp, offset, okayp, TRUE);
+ t = time2sub(tmp, funcp, sp, offset, okayp, false);
+ return *okayp ? t : time2sub(tmp, funcp, sp, offset, okayp, true);
}
static time_t
time1(struct tm *const tmp,
- struct tm *(*const funcp) (const time_t *, int_fast32_t, struct tm *),
+ struct tm *(*funcp) (struct state const *, time_t const *,
+ int_fast32_t, struct tm *),
+ struct state const *sp,
const int_fast32_t offset)
{
register time_t t;
- register const struct state * sp;
register int samei, otheri;
register int sameind, otherind;
register int i;
register int nseen;
- int seen[TZ_MAX_TYPES];
- int types[TZ_MAX_TYPES];
- int okay;
+ char seen[TZ_MAX_TYPES];
+ unsigned char types[TZ_MAX_TYPES];
+ bool okay;
if (tmp == NULL) {
errno = EINVAL;
@@ -1877,7 +1965,7 @@ time1(struct tm *const tmp,
}
if (tmp->tm_isdst > 1)
tmp->tm_isdst = 1;
- t = time2(tmp, funcp, offset, &okay);
+ t = time2(tmp, funcp, sp, offset, &okay);
if (okay)
return t;
if (tmp->tm_isdst < 0)
@@ -1895,15 +1983,14 @@ time1(struct tm *const tmp,
** We try to divine the type they started from and adjust to the
** type they need.
*/
- sp = (const struct state *) ((funcp == localsub) ? lclptr : gmtptr);
if (sp == NULL)
return WRONG;
for (i = 0; i < sp->typecnt; ++i)
- seen[i] = FALSE;
+ seen[i] = false;
nseen = 0;
for (i = sp->timecnt - 1; i >= 0; --i)
if (!seen[sp->types[i]]) {
- seen[sp->types[i]] = TRUE;
+ seen[sp->types[i]] = true;
types[nseen++] = sp->types[i];
}
for (sameind = 0; sameind < nseen; ++sameind) {
@@ -1917,7 +2004,7 @@ time1(struct tm *const tmp,
tmp->tm_sec += sp->ttis[otheri].tt_gmtoff -
sp->ttis[samei].tt_gmtoff;
tmp->tm_isdst = !tmp->tm_isdst;
- t = time2(tmp, funcp, offset, &okay);
+ t = time2(tmp, funcp, sp, offset, &okay);
if (okay)
return t;
tmp->tm_sec -= sp->ttis[otheri].tt_gmtoff -
@@ -1928,11 +2015,30 @@ time1(struct tm *const tmp,
return WRONG;
}
+NETBSD_INSPIRED_EXTERN time_t
+mktime_z(struct state *sp, struct tm *tmp)
+{
+ if (sp)
+ return time1(tmp, localsub, sp, 0);
+ else {
+ gmtcheck();
+ return time1(tmp, gmtsub, gmtptr, 0);
+ }
+}
+
time_t
mktime(struct tm *const tmp)
{
- tzset();
- return time1(tmp, localsub, 0L);
+ time_t t;
+ int err = lock();
+ if (err) {
+ errno = err;
+ return -1;
+ }
+ tzset_unlocked();
+ t = mktime_z(lclptr, tmp);
+ unlock();
+ return t;
}
#ifdef STD_INSPIRED
@@ -1948,40 +2054,22 @@ timelocal(struct tm *const tmp)
time_t
timegm(struct tm *const tmp)
{
- if (tmp != NULL)
- tmp->tm_isdst = 0;
- return time1(tmp, gmtsub, 0L);
+ return timeoff(tmp, 0);
}
time_t
timeoff(struct tm *const tmp, const long offset)
{
- if (tmp != NULL)
- tmp->tm_isdst = 0;
- return time1(tmp, gmtsub, offset);
+ time_t t;
+ if (tmp)
+ tmp->tm_isdst = 0;
+ gmtcheck();
+ t = time1(tmp, gmtsub, gmtptr, offset);
+ return t;
}
#endif /* defined STD_INSPIRED */
-#ifdef CMUCS
-
-/*
-** The following is supplied for compatibility with
-** previous versions of the CMUCS runtime library.
-*/
-
-long
-gtime(struct tm *const tmp)
-{
- const time_t t = mktime(tmp);
-
- if (t == WRONG)
- return -1;
- return t;
-}
-
-#endif /* defined CMUCS */
-
/*
** XXX--is the below the right way to conditionalize??
*/
@@ -1997,60 +2085,102 @@ gtime(struct tm *const tmp)
*/
static int_fast64_t
-leapcorr(time_t *timep)
+leapcorr(struct state const *sp, time_t t)
{
- register struct state * sp;
- register struct lsinfo * lp;
+ register struct lsinfo const * lp;
register int i;
sp = lclptr;
i = sp->leapcnt;
while (--i >= 0) {
lp = &sp->lsis[i];
- if (*timep >= lp->ls_trans)
+ if (t >= lp->ls_trans)
return lp->ls_corr;
}
return 0;
}
+NETBSD_INSPIRED_EXTERN time_t ATTRIBUTE_PURE
+time2posix_z(struct state *sp, time_t t)
+{
+ return t - leapcorr(sp, t);
+}
+
time_t
time2posix(time_t t)
{
- tzset();
- return t - leapcorr(&t);
+ int err = lock();
+ if (err) {
+ errno = err;
+ return -1;
+ }
+ if (!lcl_is_set)
+ tzset_unlocked();
+ if (lclptr)
+ t = time2posix_z(lclptr, t);
+ unlock();
+ return t;
}
-time_t
-posix2time(time_t t)
+NETBSD_INSPIRED_EXTERN time_t ATTRIBUTE_PURE
+posix2time_z(struct state *sp, time_t t)
{
time_t x;
time_t y;
-
- tzset();
/*
** For a positive leap second hit, the result
** is not unique. For a negative leap second
** hit, the corresponding time doesn't exist,
** so we return an adjacent second.
*/
- x = t + leapcorr(&t);
- y = x - leapcorr(&x);
+ x = t + leapcorr(sp, t);
+ y = x - leapcorr(sp, x);
if (y < t) {
do {
x++;
- y = x - leapcorr(&x);
+ y = x - leapcorr(sp, x);
} while (y < t);
- if (t != y)
- return x - 1;
+ x -= y != t;
} else if (y > t) {
do {
--x;
- y = x - leapcorr(&x);
+ y = x - leapcorr(sp, x);
} while (y > t);
- if (t != y)
- return x + 1;
+ x += y != t;
}
return x;
}
+time_t
+posix2time(time_t t)
+{
+ int err = lock();
+ if (err) {
+ errno = err;
+ return -1;
+ }
+ if (!lcl_is_set)
+ tzset_unlocked();
+ if (lclptr)
+ t = posix2time_z(lclptr, t);
+ unlock();
+ return t;
+}
+
#endif /* defined STD_INSPIRED */
+
+#ifdef time_tz
+
+/* Convert from the underlying system's time_t to the ersatz time_tz,
+ which is called 'time_t' in this file. */
+
+time_t
+time(time_t *p)
+{
+ time_t r = sys_time(0);
+ if (p)
+ *p = r;
+ return r;
+}
+
+#endif
diff --git a/elsie.nci.nih.gov/src/newctime.3 b/elsie.nci.nih.gov/src/newctime.3
index 170fa36..6667e0d 100644
--- a/elsie.nci.nih.gov/src/newctime.3
+++ b/elsie.nci.nih.gov/src/newctime.3
@@ -1,39 +1,57 @@
.TH NEWCTIME 3
.SH NAME
-asctime, ctime, difftime, gmtime, localtime, mktime \- convert date and time to ASCII
+asctime, ctime, difftime, gmtime, localtime, mktime \- convert date and time
.SH SYNOPSIS
.nf
+.ie \n(.g .ds - \f(CW-\fP
+.el ds - \-
+.B #include <time.h>
+.PP
.B extern char *tzname[2];
.PP
-.B void tzset()
+.B char *ctime(time_t const *clock);
.PP
-.B #include <sys/types.h>
+.B char *ctime_r(time_t const *clock, char *buf);
.PP
-.B char *ctime(clock)
-.B const time_t *clock;
+.B double difftime(time_t time1, time_t time0);
.PP
-.B double difftime(time1, time0)
-.B time_t time1;
-.B time_t time0;
+.B char *asctime(struct tm const *tm);
.PP
-.B #include <time.h>
+.B "char *asctime_r(struct tm const *restrict tm,"
+.B " char *restrict result);"
+.PP
+.B struct tm *localtime(time_t const *clock);
.PP
-.B char *asctime(tm)
-.B const struct tm *tm;
+.B "struct tm *localtime_r(time_t const *restrict clock,"
+.B " struct tm *restrict result);"
.PP
-.B struct tm *localtime(clock)
-.B const time_t *clock;
+.B "struct tm *localtime_rz(timezone_t restrict zone,"
+.B " time_t const *restrict clock,"
+.B " struct tm *restrict result);"
.PP
-.B struct tm *gmtime(clock)
-.B const time_t *clock;
+.B struct tm *gmtime(time_t const *clock);
.PP
-.B time_t mktime(tm)
-.B struct tm *tm;
+.B "struct tm *gmtime_r(time_t const *restrict clock,"
+.B " struct tm *restrict result);"
.PP
-.B cc ... -ltz
+.B time_t mktime(struct tm *tm);
+.PP
+.B "time_t mktime_z(timezone_t restrict zone,"
+.B " struct tm *restrict tm);"
+.PP
+.B cc ... \*-ltz
.fi
.SH DESCRIPTION
-.I Ctime\^
+.ie '\(en'' .ds en \-
+.el .ds en \(en
+.ie '\(lq'' .ds lq \&"\"
+.el .ds lq \(lq\"
+.ie '\(rq'' .ds rq \&"\"
+.el .ds rq \(rq\"
+.de q
+\\$3\*(lq\\$1\*(rq\\$2
+..
+.I Ctime
converts a long integer, pointed to by
.IR clock ,
and returns a pointer to a
@@ -68,34 +86,38 @@ and can therefore represent time stamps that predate the
introduction of UTC and are some other flavor of Universal Time (UT).
Some implementations support leap seconds, in contradiction to POSIX.
.PP
-.I Localtime\^
+.I Localtime
and
-.I gmtime\^
-return pointers to ``tm'' structures, described below.
-.I Localtime\^
+.I gmtime
+return pointers to
+.q "tm"
+structures, described below.
+.I Localtime
corrects for the time zone and any time zone adjustments
(such as Daylight Saving Time in the United States).
-After filling in the ``tm'' structure,
+After filling in the
+.q "tm"
+structure,
.I localtime
sets the
.BR tm_isdst 'th
element of
.B tzname
-to a pointer to an
-ASCII string that's the time zone abbreviation to be used with
+to a pointer to a string that's the time zone abbreviation to be used with
.IR localtime 's
return value.
.PP
-.I Gmtime\^
+.I Gmtime
converts to Coordinated Universal Time.
.PP
-.I Asctime\^
+.I Asctime
converts a time value contained in a
-``tm'' structure to a string,
+.q "tm"
+structure to a string,
as shown in the above example,
and returns a pointer to the string.
.PP
-.I Mktime\^
+.I Mktime
converts the broken-down time,
expressed as local time,
in the structure pointed to by
@@ -140,22 +162,50 @@ is not set until
and
.B tm_year
are determined.
-.I Mktime\^
+.I Mktime
returns the specified calendar time;
If the calendar time cannot be represented,
-it returns
-.BR -1 .
+it returns \-1.
.PP
-.I Difftime\^
+.I Difftime
returns the difference between two calendar times,
.RI ( time1
--
+\-
.IR time0 ),
expressed in seconds.
.PP
-Declarations of all the functions and externals, and the ``tm'' structure,
+.IR Ctime_r ,
+.IR localtime_r ,
+.IR gmtime_r ,
+and
+.I asctime_r
+are like their unsuffixed counterparts, except that they accept an
+additional argument specifying where to store the result if successful.
+.PP
+.IR Localtime_rz
+and
+.I mktime_z
+are like their unsuffixed counterparts, except that they accept an
+extra initial
+.B zone
+argument specifying the time zone to be used for conversion.
+If
+.B zone
+is null, UTC is used; otherwise,
+.B zone
+should be have been allocated by
+.I tzalloc
+and should not be freed until after all uses (e.g., by calls to
+.IR strftime )
+of the filled-in
+.B tm_zone
+fields.
+.PP
+Declarations of all the functions and externals, and the
+.q "tm"
+structure,
are in the
-.B <time.h>\^
+.B <time.h>
header file.
The structure (of type)
.B struct tm
@@ -164,16 +214,16 @@ includes the following fields:
.PP
.nf
.ta .5i +\w'long tm_gmtoff;\0\0'u
- int tm_sec; /\(** seconds (0 - 60) \(**/
- int tm_min; /\(** minutes (0 - 59) \(**/
- int tm_hour; /\(** hours (0 - 23) \(**/
- int tm_mday; /\(** day of month (1 - 31) \(**/
- int tm_mon; /\(** month of year (0 - 11) \(**/
+ int tm_sec; /\(** seconds (0\*(en60) \(**/
+ int tm_min; /\(** minutes (0\*(en59) \(**/
+ int tm_hour; /\(** hours (0\*(en23) \(**/
+ int tm_mday; /\(** day of month (1\*(en31) \(**/
+ int tm_mon; /\(** month of year (0\*(en11) \(**/
int tm_year; /\(** year \- 1900 \(**/
int tm_wday; /\(** day of week (Sunday = 0) \(**/
- int tm_yday; /\(** day of year (0 - 365) \(**/
+ int tm_yday; /\(** day of year (0\*(en365) \(**/
int tm_isdst; /\(** is summer time in effect? \(**/
- char \(**tm_zone; /\(** abbreviation of timezone name \(**/
+ char \(**tm_zone; /\(** abbreviation of time zone name \(**/
long tm_gmtoff; /\(** offset from UT in seconds \(**/
.fi
.RE
@@ -188,7 +238,7 @@ created.
There is no guarantee that these fields will continue to exist
in this form in future releases of this code.
.PP
-.I Tm_isdst\^
+.I Tm_isdst
is non-zero if summer time is in effect.
.PP
.I Tm_gmtoff
@@ -218,29 +268,39 @@ newtzset(3),
time(2),
tzfile(5)
.SH NOTES
-The return values point to static data;
-the data is overwritten by each call.
+The return values of
+.IR asctime ,
+.IR ctime ,
+.IR gmtime ,
+and
+.I localtime
+point to static data
+overwritten by each call.
The
.B tm_zone
field of a returned
.B "struct tm"
points to a static array of characters, which
-will also be overwritten at the next call
-(and by calls to
-.IR tzset ).
+can be overwritten by later calls to
+.IR tzset .
+The remaining functions and data are thread-safe.
.PP
-.I Asctime\^
+.IR Asctime ,
+.IR asctime_r ,
+.IR ctime ,
and
-.I ctime\^
+.I ctime_r
behave strangely for years before 1000 or after 9999.
The 1989 and 1999 editions of the C Standard say
that years from \-99 through 999 are converted without
extra spaces, but this conflicts with longstanding
tradition and with this implementation.
+The 2011 edition says that the behavior
+is undefined if the year is before 1000 or after 9999.
Traditional implementations of these two functions are
restricted to years in the range 1900 through 2099.
To avoid this portability mess, new programs should use
-.I strftime\^
+.I strftime
instead.
.\" This file is in the public domain, so clarified as of
.\" 2009-05-17 by Arthur David Olson.
diff --git a/elsie.nci.nih.gov/src/newctime.3.txt b/elsie.nci.nih.gov/src/newctime.3.txt
index 49679f1..e274d34 100644
--- a/elsie.nci.nih.gov/src/newctime.3.txt
+++ b/elsie.nci.nih.gov/src/newctime.3.txt
@@ -2,35 +2,42 @@ NEWCTIME(3) Library Functions Manual NEWCTIME(3)
NAME
asctime, ctime, difftime, gmtime, localtime, mktime - convert date and
- time to ASCII
+ time
SYNOPSIS
+ #include <time.h>
+
extern char *tzname[2];
- void tzset()
+ char *ctime(time_t const *clock);
- #include <sys/types.h>
+ char *ctime_r(time_t const *clock, char *buf);
- char *ctime(clock)
- const time_t *clock;
+ double difftime(time_t time1, time_t time0);
- double difftime(time1, time0)
- time_t time1;
- time_t time0;
+ char *asctime(struct tm const *tm);
- #include <time.h>
+ char *asctime_r(struct tm const *restrict tm,
+ char *restrict result);
+
+ struct tm *localtime(time_t const *clock);
- char *asctime(tm)
- const struct tm *tm;
+ struct tm *localtime_r(time_t const *restrict clock,
+ struct tm *restrict result);
- struct tm *localtime(clock)
- const time_t *clock;
+ struct tm *localtime_rz(timezone_t restrict zone,
+ time_t const *restrict clock,
+ struct tm *restrict result);
- struct tm *gmtime(clock)
- const time_t *clock;
+ struct tm *gmtime(time_t const *clock);
- time_t mktime(tm)
- struct tm *tm;
+ struct tm *gmtime_r(time_t const *restrict clock,
+ struct tm *restrict result);
+
+ time_t mktime(struct tm *tm);
+
+ time_t mktime_z(timezone_t restrict zone,
+ struct tm *restrict tm);
cc ... -ltz
@@ -55,16 +62,16 @@ DESCRIPTION
UTC and are some other flavor of Universal Time (UT). Some
implementations support leap seconds, in contradiction to POSIX.
- Localtime and gmtime return pointers to ``tm'' structures, described
+ Localtime and gmtime return pointers to "tm" structures, described
below. Localtime corrects for the time zone and any time zone
adjustments (such as Daylight Saving Time in the United States). After
- filling in the ``tm'' structure, localtime sets the tm_isdst'th element
- of tzname to a pointer to an ASCII string that's the time zone
- abbreviation to be used with localtime's return value.
+ filling in the "tm" structure, localtime sets the tm_isdst'th element
+ of tzname to a pointer to a string that's the time zone abbreviation to
+ be used with localtime's return value.
Gmtime converts to Coordinated Universal Time.
- Asctime converts a time value contained in a ``tm'' structure to a
+ Asctime converts a time value contained in a "tm" structure to a
string, as shown in the above example, and returns a pointer to the
string.
@@ -91,20 +98,31 @@ DESCRIPTION
Difftime returns the difference between two calendar times, (time1 -
time0), expressed in seconds.
- Declarations of all the functions and externals, and the ``tm''
+ Ctime_r, localtime_r, gmtime_r, and asctime_r are like their unsuffixed
+ counterparts, except that they accept an additional argument specifying
+ where to store the result if successful.
+
+ Localtime_rz and mktime_z are like their unsuffixed counterparts,
+ except that they accept an extra initial zone argument specifying the
+ time zone to be used for conversion. If zone is null, UTC is used;
+ otherwise, zone should be have been allocated by tzalloc and should not
+ be freed until after all uses (e.g., by calls to strftime) of the
+ filled-in tm_zone fields.
+
+ Declarations of all the functions and externals, and the "tm"
structure, are in the <time.h> header file. The structure (of type)
struct tm includes the following fields:
- int tm_sec; /* seconds (0 - 60) */
- int tm_min; /* minutes (0 - 59) */
- int tm_hour; /* hours (0 - 23) */
- int tm_mday; /* day of month (1 - 31) */
- int tm_mon; /* month of year (0 - 11) */
+ int tm_sec; /* seconds (0-60) */
+ int tm_min; /* minutes (0-59) */
+ int tm_hour; /* hours (0-23) */
+ int tm_mday; /* day of month (1-31) */
+ int tm_mon; /* month of year (0-11) */
int tm_year; /* year - 1900 */
int tm_wday; /* day of week (Sunday = 0) */
- int tm_yday; /* day of year (0 - 365) */
+ int tm_yday; /* day of year (0-365) */
int tm_isdst; /* is summer time in effect? */
- char *tm_zone; /* abbreviation of timezone name */
+ char *tm_zone; /* abbreviation of time zone name */
long tm_gmtoff; /* offset from UT in seconds */
The tm_zone and tm_gmtoff fields exist, and are filled in, only if
@@ -131,15 +149,18 @@ SEE ALSO
getenv(3), newstrftime(3), newtzset(3), time(2), tzfile(5)
NOTES
- The return values point to static data; the data is overwritten by each
- call. The tm_zone field of a returned struct tm points to a static
- array of characters, which will also be overwritten at the next call
- (and by calls to tzset).
-
- Asctime and ctime behave strangely for years before 1000 or after 9999.
- The 1989 and 1999 editions of the C Standard say that years from -99
- through 999 are converted without extra spaces, but this conflicts with
- longstanding tradition and with this implementation. Traditional
+ The return values of asctime, ctime, gmtime, and localtime point to
+ static data overwritten by each call. The tm_zone field of a returned
+ struct tm points to a static array of characters, which can be
+ overwritten by later calls to tzset. The remaining functions and data
+ are thread-safe.
+
+ Asctime, asctime_r, ctime, and ctime_r behave strangely for years
+ before 1000 or after 9999. The 1989 and 1999 editions of the C
+ Standard say that years from -99 through 999 are converted without
+ extra spaces, but this conflicts with longstanding tradition and with
+ this implementation. The 2011 edition says that the behavior is
+ undefined if the year is before 1000 or after 9999. Traditional
implementations of these two functions are restricted to years in the
range 1900 through 2099. To avoid this portability mess, new programs
should use strftime instead.
diff --git a/elsie.nci.nih.gov/src/newstrftime.3 b/elsie.nci.nih.gov/src/newstrftime.3
index d39915c..6afc948 100644
--- a/elsie.nci.nih.gov/src/newstrftime.3
+++ b/elsie.nci.nih.gov/src/newstrftime.3
@@ -22,7 +22,7 @@
.\" may be used to endorse or promote products derived from this software
.\" without specific prior written permission.
.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
@@ -42,29 +42,29 @@
strftime \- format date and time
.SH SYNOPSIS
.nf
-.B #include <sys/types.h>
+.ie \n(.g .ds - \f(CW-\fP
+.el ds - \-
.B #include <time.h>
.PP
-.B size_t strftime(buf, maxsize, format, timeptr)
-.B char *buf;
-.B size_t maxsize;
-.B const char *format;
-.B const struct tm *timeptr
+.B "size_t strftime(char *restrict buf, size_t maxsize,"
+.B " char const *restrict format, struct tm const *restrict timeptr);"
.PP
-.B cc ... -ltz
+.B cc ... \-ltz
.fi
.SH DESCRIPTION
+.ie '\(en'' .ds en \-
+.el .ds en \(en
The
-.I strftime\^
+.I strftime
function formats the information from
-.I timeptr\^
+.I timeptr
into the buffer
-.I buf\^
+.I buf
according to the string pointed to by
-.IR format\^ .
+.IR format .
.PP
The
-.I format\^
+.I format
string consists of zero or more conversion specifications and
ordinary characters.
All ordinary characters are copied directly into the buffer.
@@ -73,12 +73,12 @@ A conversion specification consists of a percent sign
and one other character.
.PP
No more than
-.I maxsize\^
-characters are be placed into the array.
+.I maxsize
+characters are placed into the array.
If the total number of resulting characters, including the terminating
null character, is not more than
-.IR maxsize\^ ,
-.I strftime\^
+.IR maxsize ,
+.I strftime
returns the number of characters in the array, not counting the
terminating null.
Otherwise, zero is returned.
@@ -100,7 +100,7 @@ is replaced by the locale's abbreviated month name.
.TP
%C
is replaced by the century (a year divided by 100 and truncated to an integer)
-as a decimal number (00-99).
+as a decimal number (00\*(en99).
.TP
%c
is replaced by the locale's appropriate date and time representation.
@@ -109,43 +109,43 @@ is replaced by the locale's appropriate date and time representation.
is replaced by the date in the format %m/%d/%y.
.TP
%d
-is replaced by the day of the month as a decimal number (01-31).
+is replaced by the day of the month as a decimal number (01\*(en31).
.TP
%e
-is replaced by the day of month as a decimal number (1-31);
+is replaced by the day of month as a decimal number (1\*(en31);
single digits are preceded by a blank.
.TP
%F
-is replaced by the date in the format %Y-%m-%d.
+is replaced by the date in the format %Y\*-%m\*-%d.
.TP
%G
is replaced by the ISO 8601 year with century as a decimal number.
.TP
%g
-is replaced by the ISO 8601 year without century as a decimal number (00-99).
+is replaced by the ISO 8601 year without century as a decimal number (00\*(en99).
.TP
%H
-is replaced by the hour (24-hour clock) as a decimal number (00-23).
+is replaced by the hour (24-hour clock) as a decimal number (00\*(en23).
.TP
%I
-is replaced by the hour (12-hour clock) as a decimal number (01-12).
+is replaced by the hour (12-hour clock) as a decimal number (01\*(en12).
.TP
%j
-is replaced by the day of the year as a decimal number (001-366).
+is replaced by the day of the year as a decimal number (001\*(en366).
.TP
%k
-is replaced by the hour (24-hour clock) as a decimal number (0-23);
+is replaced by the hour (24-hour clock) as a decimal number (0\*(en23);
single digits are preceded by a blank.
.TP
%l
-is replaced by the hour (12-hour clock) as a decimal number (1-12);
+is replaced by the hour (12-hour clock) as a decimal number (1\*(en12);
single digits are preceded by a blank.
.TP
%M
-is replaced by the minute as a decimal number (00-59).
+is replaced by the minute as a decimal number (00\*(en59).
.TP
%m
-is replaced by the month as a decimal number (01-12).
+is replaced by the month as a decimal number (01\*(en12).
.TP
%n
is replaced by a newline.
@@ -161,7 +161,7 @@ is replaced by the locale's representation of 12-hour clock time
using AM/PM notation.
.TP
%S
-is replaced by the second as a decimal number (00-60).
+is replaced by the second as a decimal number (00\*(en60).
.TP
%s
is replaced by the number of seconds since the Epoch (see newctime(3)).
@@ -174,25 +174,25 @@ is replaced by a tab.
.TP
%U
is replaced by the week number of the year (Sunday as the first day of
-the week) as a decimal number (00-53).
+the week) as a decimal number (00\*(en53).
.TP
%u
is replaced by the weekday (Monday as the first day of the week)
-as a decimal number (1-7).
+as a decimal number (1\*(en7).
.TP
%V
is replaced by the week number of the year (Monday as the first day of
-the week) as a decimal number (01-53). If the week containing January
+the week) as a decimal number (01\*(en53). If the week containing January
1 has four or more days in the new year, then it is week 1; otherwise
it is week 53 of the previous year, and the next week is week 1.
.TP
%W
is replaced by the week number of the year (Monday as the first day of
-the week) as a decimal number (00-53).
+the week) as a decimal number (00\*(en53).
.TP
%w
is replaced by the weekday (Sunday as the first day of the week)
-as a decimal number (0-6).
+as a decimal number (0\*(en6).
.TP
%X
is replaced by the locale's appropriate time representation.
@@ -204,7 +204,7 @@ is replaced by the locale's appropriate date representation.
is replaced by the year with century as a decimal number.
.TP
%y
-is replaced by the year without century as a decimal number (00-99).
+is replaced by the year without century as a decimal number (00\*(en99).
.TP
%Z
is replaced by the time zone name,
@@ -212,7 +212,7 @@ or by the empty string if this is not determinable.
.TP
%z
is replaced by the offset from the Prime Meridian
-in the format +HHMM or \(miHHMM as appropriate,
+in the format +HHMM or \*-HHMM as appropriate,
with positive values representing locations east of Greenwich,
or by the empty string if this is not determinable.
.TP
diff --git a/elsie.nci.nih.gov/src/newstrftime.3.txt b/elsie.nci.nih.gov/src/newstrftime.3.txt
index 772d1a3..ab8eeca 100644
--- a/elsie.nci.nih.gov/src/newstrftime.3.txt
+++ b/elsie.nci.nih.gov/src/newstrftime.3.txt
@@ -4,14 +4,10 @@ NAME
strftime - format date and time
SYNOPSIS
- #include <sys/types.h>
#include <time.h>
- size_t strftime(buf, maxsize, format, timeptr)
- char *buf;
- size_t maxsize;
- const char *format;
- const struct tm *timeptr
+ size_t strftime(char *restrict buf, size_t maxsize,
+ char const *restrict format, struct tm const *restrict timeptr);
cc ... -ltz
@@ -24,7 +20,7 @@ DESCRIPTION
into the buffer. A conversion specification consists of a percent sign
and one other character.
- No more than maxsize characters are be placed into the array. If the
+ No more than maxsize characters are placed into the array. If the
total number of resulting characters, including the terminating null
character, is not more than maxsize, strftime returns the number of
characters in the array, not counting the terminating null. Otherwise,
diff --git a/elsie.nci.nih.gov/src/newtzset.3 b/elsie.nci.nih.gov/src/newtzset.3
index 2568e45..68905a5 100644
--- a/elsie.nci.nih.gov/src/newtzset.3
+++ b/elsie.nci.nih.gov/src/newtzset.3
@@ -3,35 +3,83 @@
tzset \- initialize time conversion information
.SH SYNOPSIS
.nf
-.B void tzset()
+.ie \n(.g .ds - \f(CW-\fP
+.el ds - \-
+.B #include <time.h>
.PP
-.B cc ... -ltz
+.B timezone_t tzalloc(char const *TZ);
+.PP
+.B void tzfree(timezone_t tz);
+.PP
+.B void tzset(void);
+.PP
+.B cc ... \*-ltz
.fi
.SH DESCRIPTION
-.I Tzset
-uses the value of the environment variable
+.ie '\(en'' .ds en \-
+.el .ds en \(en
+.ie '\(lq'' .ds lq \&"\"
+.el .ds lq \(lq\"
+.ie '\(rq'' .ds rq \&"\"
+.el .ds rq \(rq\"
+.de q
+\\$3\*(lq\\$1\*(rq\\$2
+..
+.I Tzalloc
+allocates and returns a time zone object described by
+.BR TZ .
+If
.B TZ
-to set time conversion information used by
-.IR localtime .
+is not a valid time zone description, or if the object cannot be allocated,
+.I tzalloc
+returns a null pointer and sets
+.BR errno .
+.PP
+.I Tzfree
+frees a time zone object
+.BR tz ,
+which should have been successfully allocated by
+.IR tzalloc .
+This invalidates any
+.B tm_zone
+pointers that
+.B tz
+was used to set.
+.PP
+.I Tzset
+acts like
+.BR tzalloc(getenv("TZ")) ,
+except it saves any resulting time zone object into internal
+storage that is accessed by
+.IR localtime ,
+.IR localtime_r ,
+and
+.IR mktime .
+The anonymous shared time zone object is freed by the next call to
+.IR tzset .
+If the implied call to
+.B tzalloc
+fails,
+.I tzset
+falls back on UTC.
+.PP
If
.B TZ
-does not appear in the environment,
-the best available approximation to local wall clock time, as specified
-by the
+is null, the best available approximation to local wall
+clock time, as specified by the
.IR tzfile (5)-format
file
.B localtime
-in the system time conversion information directory, is used by
-.IR localtime .
+in the system time conversion information directory, is used.
If
.B TZ
-appears in the environment but its value is a null string,
+is the empty string,
Universal Time (UT) is used, with the abbreviation "UTC"
and without leap second correction; please see
.IR newctime (3)
for more about UT, UTC, and leap seconds. If
.B TZ
-appears in the environment and its value is not a null string:
+is nonnull and nonempty:
.IP
if the value begins with a colon, it is used as a pathname of a file
from which to read the time conversion information;
@@ -75,11 +123,11 @@ except a leading colon
.RB ( : ),
digits, comma
.RB ( , ),
-minus
-.RB ( \(mi ),
-plus
-.RB ( \(pl ),
-and ASCII NUL are allowed.
+ASCII minus
+.RB ( \*- ),
+ASCII plus
+.RB ( + ),
+and NUL bytes are allowed.
.TP
.I offset
Indicates the value one must add to the local time to arrive at
@@ -108,11 +156,11 @@ follows
summer time is assumed to be one hour ahead of standard time. One or
more digits may be used; the value is always interpreted as a decimal
number. The hour must be between zero and 24, and the minutes (and
-seconds) \(em if present \(em between zero and 59. If preceded by a
-.RB `` \(mi '',
+seconds) \*(en if present \*(en between zero and 59. If preceded by a
+.q "\*-" ,
the time zone shall be east of the Prime Meridian; otherwise it shall be
west (which may be indicated by an optional preceding
-.RB `` \(pl '').
+.q "+" .
.TP
.I rule
Indicates when to change to and back from summer time. The
@@ -146,8 +194,8 @@ is one of the following:
The Julian day
.I n
.RI "(1\ \(<=" "\ n\ " "\(<=\ 365).
-Leap days are not counted; that is, in all years \(em including leap
-years \(em February 28 is day 59 and March 1 is day 60. It is
+Leap days are not counted; that is, in all years \*(en including leap
+years \*(en February 28 is day 59 and March 1 is day 60. It is
impossible to explicitly refer to the occasional February 29.
.TP
.I n
@@ -167,10 +215,8 @@ of month
of the year
.RI "(1\ \(<=" "\ n\ " "\(<=\ 5,
.RI "1\ \(<=" "\ m\ " "\(<=\ 12,
-where week 5 means ``the last
-.I d
-day in month
-.IR m ''
+where week 5 means
+.q "the last \fId\fP day in month \fIm\fP"
which may occur in either the fourth or the fifth week). Week 1 is the
first week in which the
.IR d' th
@@ -181,14 +227,16 @@ The
.I time
has the same format as
.I offset
-except that POSIX does not allow a leading sign
-.RB (`` \(mi ''
+except that POSIX does not allow a leading sign (\c
+.q "\*-"
or
-.RB `` \(pl '').
+.q "+" ).
As an extension to POSIX, the hours part of
.I time
-can range from \(mi167 through 167; this allows for unusual rules such
-as "the Saturday before the first Sunday of March". The default, if
+can range from \-167 through 167; this allows for unusual rules such
+as
+.q "the Saturday before the first Sunday of March" .
+The default, if
.I time
is not given, is
.BR 02:00:00 .
@@ -203,14 +251,14 @@ extensions to POSIX.
stands for US Eastern Standard
Time (EST), 5 hours behind UTC, without daylight saving.
.TP
-.B FJT\(mi12FJST,M10.3.1/146,M1.3.4/75
+.B FJT\*-12FJST,M10.3.1/146,M1.3.4/75
stands for Fiji Time (FJT) and Fiji Summer Time (FJST), 12 hours ahead
of UTC, springing forward on October's third Monday at
146:00 (i.e., 02:00 on the first Sunday on or after October 21), and
falling back on January's third Thursday at 75:00 (i.e., 03:00 on the
first Sunday on or after January 18).
.TP
-.B IST\(mi2IDT,M3.4.4/26,M10.5.0
+.B IST\*-2IDT,M3.4.4/26,M10.5.0
stands for Israel Standard Time (IST) and Israel Daylight Time (IDT),
2 hours ahead of UTC, springing forward on March's fourth
Thursday at 26:00 (i.e., 02:00 on the first Friday on or after March
@@ -226,12 +274,12 @@ all year and the initial
.B WART
is a placeholder.
.TP
-.B WGT3WGST,M3.5.0/\(mi2,M10.5.0/\(mi1
+.B WGT3WGST,M3.5.0/\*-2,M10.5.0/\*-1
stands for Western Greenland Time (WGT) and Western Greenland Summer
Time (WGST), 3 hours behind UTC, where clocks follow the EU rules of
-springing forward on March's last Sunday at 01:00 UTC (\(mi02:00 local
+springing forward on March's last Sunday at 01:00 UTC (\-02:00 local
time) and falling back on October's last Sunday at 01:00 UTC
-(\(mi01:00 local time).
+(\-01:00 local time).
.PP
If no
.I rule
@@ -254,13 +302,6 @@ For compatibility with System V Release 3.1, a semicolon
may be used to separate the
.I rule
from the rest of the specification.
-.PP
-If the
-.B TZ
-environment variable does not specify a
-.IR tzfile (5)-format
-and cannot be interpreted as a direct specification,
-UTC is used.
.SH FILES
.ta \w'/usr/local/etc/zoneinfo/posixrules\0\0'u
/usr/local/etc/zoneinfo time zone information directory
diff --git a/elsie.nci.nih.gov/src/newtzset.3.txt b/elsie.nci.nih.gov/src/newtzset.3.txt
index 25ac631..034d896 100644
--- a/elsie.nci.nih.gov/src/newtzset.3.txt
+++ b/elsie.nci.nih.gov/src/newtzset.3.txt
@@ -4,21 +4,37 @@ NAME
tzset - initialize time conversion information
SYNOPSIS
- void tzset()
+ #include <time.h>
+
+ timezone_t tzalloc(char const *TZ);
+
+ void tzfree(timezone_t tz);
+
+ void tzset(void);
cc ... -ltz
DESCRIPTION
- Tzset uses the value of the environment variable TZ to set time
- conversion information used by localtime. If TZ does not appear in the
- environment, the best available approximation to local wall clock time,
- as specified by the tzfile(5)-format file localtime in the system time
- conversion information directory, is used by localtime. If TZ appears
- in the environment but its value is a null string, Universal Time (UT)
- is used, with the abbreviation "UTC" and without leap second
- correction; please see newctime(3) for more about UT, UTC, and leap
- seconds. If TZ appears in the environment and its value is not a null
- string:
+ Tzalloc allocates and returns a time zone object described by TZ. If
+ TZ is not a valid time zone description, or if the object cannot be
+ allocated, tzalloc returns a null pointer and sets errno.
+
+ Tzfree frees a time zone object tz, which should have been successfully
+ allocated by tzalloc. This invalidates any tm_zone pointers that tz
+ was used to set.
+
+ Tzset acts like tzalloc(getenv("TZ")), except it saves any resulting
+ time zone object into internal storage that is accessed by localtime,
+ localtime_r, and mktime. The anonymous shared time zone object is
+ freed by the next call to tzset. If the implied call to tzalloc fails,
+ tzset falls back on UTC.
+
+ If TZ is null, the best available approximation to local wall clock
+ time, as specified by the tzfile(5)-format file localtime in the system
+ time conversion information directory, is used. If TZ is the empty
+ string, Universal Time (UT) is used, with the abbreviation "UTC" and
+ without leap second correction; please see newctime(3) for more about
+ UT, UTC, and leap seconds. If TZ is nonnull and nonempty:
if the value begins with a colon, it is used as a pathname of a
file from which to read the time conversion information;
@@ -47,8 +63,8 @@ DESCRIPTION
summer time does not apply in this locale.
Upper- and lowercase letters are explicitly
allowed. Any characters except a leading colon
- (:), digits, comma (,), minus (-), plus (+), and
- ASCII NUL are allowed.
+ (:), digits, comma (,), ASCII minus (-), ASCII
+ plus (+), and NUL bytes are allowed.
offset Indicates the value one must add to the local
time to arrive at Coordinated Universal Time.
@@ -64,11 +80,11 @@ DESCRIPTION
digits may be used; the value is always
interpreted as a decimal number. The hour must
be between zero and 24, and the minutes (and
- seconds) -- if present -- between zero and 59.
- If preceded by a ``-'', the time zone shall be
- east of the Prime Meridian; otherwise it shall be
- west (which may be indicated by an optional
- preceding ``+'').
+ seconds) - if present - between zero and 59. If
+ preceded by a "-", the time zone shall be east of
+ the Prime Meridian; otherwise it shall be west
+ (which may be indicated by an optional preceding
+ "+".
rule Indicates when to change to and back from summer
time. The rule has the form:
@@ -91,10 +107,10 @@ DESCRIPTION
Jn The Julian day n (1 <= n <= 365). Leap
days are not counted; that is, in all
- years -- including leap years --
- February 28 is day 59 and March 1 is
- day 60. It is impossible to explicitly
- refer to the occasional February 29.
+ years - including leap years - February
+ 28 is day 59 and March 1 is day 60. It
+ is impossible to explicitly refer to
+ the occasional February 29.
n The zero-based Julian day
(0 <= n <= 365). Leap days are
@@ -103,20 +119,20 @@ DESCRIPTION
Mm.n.d The d'th day (0 <= d <= 6) of week n of
month m of the year (1 <= n <= 5,
- 1 <= m <= 12, where week 5 means ``the
- last d day in month m'' which may occur
+ 1 <= m <= 12, where week 5 means "the
+ last d day in month m" which may occur
in either the fourth or the fifth
week). Week 1 is the first week in
which the d'th day occurs. Day zero is
Sunday.
The time has the same format as offset except
- that POSIX does not allow a leading sign (``-''
- or ``+''). As an extension to POSIX, the hours
- part of time can range from -167 through 167;
- this allows for unusual rules such as "the
- Saturday before the first Sunday of March". The
- default, if time is not given, is 02:00:00.
+ that POSIX does not allow a leading sign ("-" or
+ "+"). As an extension to POSIX, the hours part
+ of time can range from -167 through 167; this
+ allows for unusual rules such as "the Saturday
+ before the first Sunday of March". The default,
+ if time is not given, is 02:00:00.
Here are some examples of TZ values that directly specify the time zone
rules; they use some of the extensions to POSIX.
@@ -162,9 +178,6 @@ DESCRIPTION
For compatibility with System V Release 3.1, a semicolon (;) may be
used to separate the rule from the rest of the specification.
- If the TZ environment variable does not specify a tzfile(5)-format and
- cannot be interpreted as a direct specification, UTC is used.
-
FILES
/usr/local/etc/zoneinfo time zone information directory
/usr/local/etc/zoneinfo/localtime local time zone file
diff --git a/elsie.nci.nih.gov/src/northamerica b/elsie.nci.nih.gov/src/northamerica
index d51a7e1..ebfe5e3 100644
--- a/elsie.nci.nih.gov/src/northamerica
+++ b/elsie.nci.nih.gov/src/northamerica
@@ -1,12 +1,12 @@
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
# also includes Central America and the Caribbean
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future). For more, please see
+# the file CONTRIBUTING in the tz distribution.
# From Paul Eggert (1999-03-22):
# A reliable and entertaining source about time zones is
@@ -55,13 +55,13 @@
# to push people into bed earlier, and get them up earlier, to make
# them healthy, wealthy and wise in spite of themselves.
#
-# -- Robertson Davies, The diary of Samuel Marchbanks,
+# -- Robertson Davies, The diary of Samuel Marchbanks,
# Clarke, Irwin (1947), XIX, Sunday
#
# For more about the first ten years of DST in the United States, see
-# Robert Garland's <a href="http://www.clpgh.org/exhibit/dst.html">
-# Ten years of daylight saving from the Pittsburgh standpoint
-# (Carnegie Library of Pittsburgh, 1927)</a>.
+# Robert Garland, Ten years of daylight saving from the Pittsburgh standpoint
+# (Carnegie Library of Pittsburgh, 1927).
+# http://www.clpgh.org/exhibit/dst.html
#
# Shanks says that DST was called "War Time" in the US in 1918 and 1919.
# However, DST was imposed by the Standard Time Act of 1918, which
@@ -80,11 +80,11 @@
# From Arthur David Olson (2000-09-25):
# Last night I heard part of a rebroadcast of a 1945 Arch Oboler radio drama.
# In the introduction, Oboler spoke of "Eastern Peace Time."
-# An AltaVista search turned up
-# <a href="http://rowayton.org/rhs/hstaug45.html">:
+# An AltaVista search turned up:
+# http://rowayton.org/rhs/hstaug45.html
# "When the time is announced over the radio now, it is 'Eastern Peace
# Time' instead of the old familiar 'Eastern War Time.' Peace is wonderful."
-# </a> (August 1945) by way of confirmation.
+# (August 1945) by way of confirmation.
# From Joseph Gallant citing
# George H. Douglas, _The Early Days of Radio Broadcasting_ (1987):
@@ -182,7 +182,7 @@ Zone PST8PDT -8:00 US P%sT
# USA ALASKA STD 9 H BEHIND UTC MOST OF ALASKA (AKST)
# USA ALASKA STD 8 H BEHIND UTC APR 3 - OCT 30 (AKDT)
# USA ALEUTIAN 10 H BEHIND UTC ISLANDS WEST OF 170W
-# USA - " - 9 H BEHIND UTC APR 3 - OCT 30
+# USA " 9 H BEHIND UTC APR 3 - OCT 30
# USA HAWAII 10 H BEHIND UTC
# USA BERING 11 H BEHIND UTC SAMOA, MIDWAY
@@ -235,19 +235,19 @@ Zone PST8PDT -8:00 US P%sT
# The following was signed into law on 2005-08-08.
#
# H.R. 6, Energy Policy Act of 2005, SEC. 110. DAYLIGHT SAVINGS.
-# (a) Amendment- Section 3(a) of the Uniform Time Act of 1966 (15
+# (a) Amendment.--Section 3(a) of the Uniform Time Act of 1966 (15
# U.S.C. 260a(a)) is amended--
-# (1) by striking 'first Sunday of April' and inserting 'second
-# Sunday of March'; and
-# (2) by striking 'last Sunday of October' and inserting 'first
+# (1) by striking "first Sunday of April" and inserting "second
+# Sunday of March"; and
+# (2) by striking "last Sunday of October" and inserting "first
# Sunday of November'.
-# (b) Effective Date- Subsection (a) shall take effect 1 year after the
+# (b) Effective Date.--Subsection (a) shall take effect 1 year after the
# date of enactment of this Act or March 1, 2007, whichever is later.
-# (c) Report to Congress- Not later than 9 months after the effective
+# (c) Report to Congress.--Not later than 9 months after the effective
# date stated in subsection (b), the Secretary shall report to Congress
# on the impact of this section on energy consumption in the United
# States.
-# (d) Right to Revert- Congress retains the right to revert the
+# (d) Right to Revert.--Congress retains the right to revert the
# Daylight Saving Time back to the 2005 time schedules once the
# Department study is complete.
@@ -269,7 +269,7 @@ Zone PST8PDT -8:00 US P%sT
# From Paul Eggert (2005-08-26):
# According to today's Huntsville Times
-# <http://www.al.com/news/huntsvilletimes/index.ssf?/base/news/1125047783228320.xml&coll=1>
+# http://www.al.com/news/huntsvilletimes/index.ssf?/base/news/1125047783228320.xml&coll=1
# a few towns on Alabama's "eastern border with Georgia, such as Phenix City
# in Russell County, Lanett in Chambers County and some towns in Lee County,
# set their watches and clocks on Eastern time." It quotes H.H. "Bubba"
@@ -324,15 +324,15 @@ Rule Chicago 1955 1966 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 12:09:24
-6:00 US C%sT 1920
- -6:00 Chicago C%sT 1936 Mar 1 2:00
- -5:00 - EST 1936 Nov 15 2:00
+ -6:00 Chicago C%sT 1936 Mar 1 2:00
+ -5:00 - EST 1936 Nov 15 2:00
-6:00 Chicago C%sT 1942
-6:00 US C%sT 1946
-6:00 Chicago C%sT 1967
-6:00 US C%sT
# Oliver County, ND switched from mountain to central time on 1992-10-25.
Zone America/North_Dakota/Center -6:45:12 - LMT 1883 Nov 18 12:14:48
- -7:00 US M%sT 1992 Oct 25 02:00
+ -7:00 US M%sT 1992 Oct 25 2:00
-6:00 US C%sT
# Morton County, ND, switched from mountain to central time on
# 2003-10-26, except for the area around Mandan which was already central time.
@@ -341,29 +341,26 @@ Zone America/North_Dakota/Center -6:45:12 - LMT 1883 Nov 18 12:14:48
# Jones, Mellette, and Todd Counties in South Dakota;
# but in practice these other counties were already observing central time.
# See <http://www.epa.gov/fedrgstr/EPA-IMPACT/2003/October/Day-28/i27056.htm>.
-Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
- -7:00 US M%sT 2003 Oct 26 02:00
+Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
+ -7:00 US M%sT 2003 Oct 26 2:00
-6:00 US C%sT
# From Josh Findley (2011-01-21):
# ...it appears that Mercer County, North Dakota, changed from the
# mountain time zone to the central time zone at the last transition from
# daylight-saving to standard time (on Nov. 7, 2010):
-# <a href="http://www.gpo.gov/fdsys/pkg/FR-2010-09-29/html/2010-24376.htm">
# http://www.gpo.gov/fdsys/pkg/FR-2010-09-29/html/2010-24376.htm
-# </a>
-# <a href="http://www.bismarcktribune.com/news/local/article_1eb1b588-c758-11df-b472-001cc4c03286.html">
# http://www.bismarcktribune.com/news/local/article_1eb1b588-c758-11df-b472-001cc4c03286.html
-# </a>
# From Andy Lipscomb (2011-01-24):
# ...according to the Census Bureau, the largest city is Beulah (although
# it's commonly referred to as Beulah-Hazen, with Hazen being the next
# largest city in Mercer County). Google Maps places Beulah's city hall
-# at 4715'51" north, 10146'40" west, which yields an offset of 6h47'07".
+# at 47 degrees 15' 51" N, 101 degrees 46' 40" W, which yields an offset
+# of 6h47'07".
-Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53
- -7:00 US M%sT 2010 Nov 7 2:00
+Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53
+ -7:00 US M%sT 2010 Nov 7 2:00
-6:00 US C%sT
# US mountain time, represented by Denver
@@ -425,15 +422,18 @@ Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 12:07:02
# was destroyed in 1805 by a Yakutat-kon war party.) However, there
# were nearby inhabitants in some cases and for our purposes perhaps
# it's best to simply use the official transition.
-#
-# From Steve Ferguson (2011-01-31):
-# The author lives in Alaska and many of the references listed are only
-# available to Alaskan residents.
+# From Paul Eggert (2014-07-18):
+# One opinion of the early-1980s turmoil in Alaska over time zones and
+# daylight saving time appeared as graffiti on a Juneau airport wall:
+# "Welcome to Juneau. Please turn your watch back to the 19th century."
+# See: Turner W. Alaska's four time zones now two. NY Times 1983-11-01.
+# http://www.nytimes.com/1983/11/01/us/alaska-s-four-time-zones-now-two.html
#
-# <a href="http://www.alaskahistoricalsociety.org/index.cfm?section=discover%20alaska&page=Glimpses%20of%20the%20Past&viewpost=2&ContentId=98">
-# http://www.alaskahistoricalsociety.org/index.cfm?section=discover%20alaska&page=Glimpses%20of%20the%20Past&viewpost=2&ContentId=98
-# </a>
+# Steve Ferguson (2011-01-31) referred to the following source:
+# Norris F. Keeping time in Alaska: national directives, local response.
+# Alaska History 2001;16(1-2).
+# http://alaskahistoricalsociety.org/discover-alaska/glimpses-of-the-past/keeping-time-in-alaska/
# From Arthur David Olson (2011-02-01):
# Here's database-relevant material from the 2001 "Alaska History" article:
@@ -459,12 +459,10 @@ Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 12:07:02
# From Arthur David Olson (2011-02-09):
# I just spoke by phone with a staff member at the Metlakatla Indian
# Community office (using contact information available at
-# <a href="http://www.commerce.state.ak.us/dca/commdb/CIS.cfm?Comm_Boro_name=Metlakatla">
# http://www.commerce.state.ak.us/dca/commdb/CIS.cfm?Comm_Boro_name=Metlakatla
-# </a>).
# It's shortly after 1:00 here on the east coast of the United States;
# the staffer said it was shortly after 10:00 there. When I asked whether
-# that meant they were on Pacific time, they said no--they were on their
+# that meant they were on Pacific time, they said no - they were on their
# own time. I asked about daylight saving; they said it wasn't used. I
# did not inquire about practices in the past.
@@ -478,9 +476,9 @@ Zone America/Juneau 15:02:19 - LMT 1867 Oct 18
-8:00 - PST 1942
-8:00 US P%sT 1946
-8:00 - PST 1969
- -8:00 US P%sT 1980 Apr 27 2:00
- -9:00 US Y%sT 1980 Oct 26 2:00
- -8:00 US P%sT 1983 Oct 30 2:00
+ -8:00 US P%sT 1980 Apr 27 2:00
+ -9:00 US Y%sT 1980 Oct 26 2:00
+ -8:00 US P%sT 1983 Oct 30 2:00
-9:00 US Y%sT 1983 Nov 30
-9:00 US AK%sT
Zone America/Sitka 14:58:47 - LMT 1867 Oct 18
@@ -488,7 +486,7 @@ Zone America/Sitka 14:58:47 - LMT 1867 Oct 18
-8:00 - PST 1942
-8:00 US P%sT 1946
-8:00 - PST 1969
- -8:00 US P%sT 1983 Oct 30 2:00
+ -8:00 US P%sT 1983 Oct 30 2:00
-9:00 US Y%sT 1983 Nov 30
-9:00 US AK%sT
Zone America/Metlakatla 15:13:42 - LMT 1867 Oct 18
@@ -496,8 +494,8 @@ Zone America/Metlakatla 15:13:42 - LMT 1867 Oct 18
-8:00 - PST 1942
-8:00 US P%sT 1946
-8:00 - PST 1969
- -8:00 US P%sT 1983 Oct 30 2:00
- -8:00 - MeST
+ -8:00 US P%sT 1983 Oct 30 2:00
+ -8:00 - PST
Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18
-9:18:55 - LMT 1900 Aug 20 12:00
-9:00 - YST 1942
@@ -512,7 +510,7 @@ Zone America/Anchorage 14:00:24 - LMT 1867 Oct 18
-10:00 US CAT/CAPT 1946 # Peace
-10:00 - CAT 1967 Apr
-10:00 - AHST 1969
- -10:00 US AH%sT 1983 Oct 30 2:00
+ -10:00 US AH%sT 1983 Oct 30 2:00
-9:00 US Y%sT 1983 Nov 30
-9:00 US AK%sT
Zone America/Nome 12:58:21 - LMT 1867 Oct 18
@@ -521,7 +519,7 @@ Zone America/Nome 12:58:21 - LMT 1867 Oct 18
-11:00 US N%sT 1946
-11:00 - NST 1967 Apr
-11:00 - BST 1969
- -11:00 US B%sT 1983 Oct 30 2:00
+ -11:00 US B%sT 1983 Oct 30 2:00
-9:00 US Y%sT 1983 Nov 30
-9:00 US AK%sT
Zone America/Adak 12:13:21 - LMT 1867 Oct 18
@@ -530,7 +528,7 @@ Zone America/Adak 12:13:21 - LMT 1867 Oct 18
-11:00 US N%sT 1946
-11:00 - NST 1967 Apr
-11:00 - BST 1969
- -11:00 US B%sT 1983 Oct 30 2:00
+ -11:00 US B%sT 1983 Oct 30 2:00
-10:00 US AH%sT 1983 Nov 30
-10:00 US HA%sT
# The following switches don't quite make our 1970 cutoff.
@@ -548,7 +546,7 @@ Zone America/Adak 12:13:21 - LMT 1867 Oct 18
# Minutes of the Unalaska City Council Meeting, January 10, 1967:
# "Except for St. Paul and Akutan, Unalaska is the only important
# location not on Alaska Standard Time. The following resolution was
-# made by William Robinson and seconded by Henry Swanson: Be it
+# made by William Robinson and seconded by Henry Swanson: Be it
# resolved that the City of Unalaska hereby goes to Alaska Standard
# Time as of midnight Friday, January 13, 1967 (1 A.M. Saturday,
# January 14, Alaska Standard Time.) This resolution was passed with
@@ -560,9 +558,7 @@ Zone America/Adak 12:13:21 - LMT 1867 Oct 18
# "Hawaiian Time" by Robert C. Schmitt and Doak C. Cox appears on pages 207-225
# of volume 26 of The Hawaiian Journal of History (1992). As of 2010-12-09,
# the article is available at
-# <a href="http://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf">
# http://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf
-# </a>
# and indicates that standard time was adopted effective noon, January
# 13, 1896 (page 218), that in "1933, the Legislature decreed daylight
# saving for the period between the last Sunday of each April and the
@@ -583,7 +579,7 @@ Zone America/Adak 12:13:21 - LMT 1867 Oct 18
# year, the standard time of this Territory shall be advanced one
# hour...This Act shall take effect upon its approval. Approved this 26th
# day of April, A. D. 1933. LAWRENCE M JUDD, Governor of the Territory of
-# Hawaii." Page 172: "Act 163...Act 90 of the Session Laws of 1933 is
+# Hawaii." Page 172: "Act 163...Act 90 of the Session Laws of 1933 is
# hereby repealed...This Act shall take effect upon its approval, upon
# which date the standard time of this Territory shall be restored to
# that existing immediately prior to the taking effect of said Act 90.
@@ -593,14 +589,14 @@ Zone America/Adak 12:13:21 - LMT 1867 Oct 18
# Note that 1933-05-21 was a Sunday.
# We're left to guess the time of day when Act 163 was approved; guess noon.
-Zone Pacific/Honolulu -10:31:26 - LMT 1896 Jan 13 12:00 #Schmitt&Cox
- -10:30 - HST 1933 Apr 30 2:00 #Laws 1933
- -10:30 1:00 HDT 1933 May 21 12:00 #Laws 1933+12
- -10:30 - HST 1942 Feb 09 2:00 #Schmitt&Cox+2
- -10:30 1:00 HDT 1945 Sep 30 2:00 #Schmitt&Cox+2
- -10:30 - HST 1947 Jun 8 2:00 #Schmitt&Cox+2
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Honolulu -10:31:26 - LMT 1896 Jan 13 12:00
+ -10:30 - HST 1933 Apr 30 2:00
+ -10:30 1:00 HDT 1933 May 21 12:00
+ -10:30 - HST 1942 Feb 9 2:00
+ -10:30 1:00 HDT 1945 Sep 30 2:00
+ -10:30 - HST 1947 Jun 8 2:00
-10:00 - HST
-
Link Pacific/Honolulu Pacific/Johnston
# Now we turn to US areas that have diverged from the consensus since 1970.
@@ -610,9 +606,9 @@ Link Pacific/Honolulu Pacific/Johnston
# From Paul Eggert (2002-10-20):
#
# The information in the rest of this paragraph is derived from the
-# <a href="http://www.dlapr.lib.az.us/links/daylight.htm">
-# Daylight Saving Time web page (2002-01-23)</a> maintained by the
-# Arizona State Library, Archives and Public Records.
+# Daylight Saving Time web page
+# <http://www.dlapr.lib.az.us/links/daylight.htm> (2002-01-23)
+# maintained by the Arizona State Library, Archives and Public Records.
# Between 1944-01-01 and 1944-04-01 the State of Arizona used standard
# time, but by federal law railroads, airlines, bus lines, military
# personnel, and some engaged in interstate commerce continued to
@@ -626,10 +622,11 @@ Link Pacific/Honolulu Pacific/Johnston
# Shanks says the 1944 experiment came to an end on 1944-03-17.
# Go with the Arizona State Library instead.
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Phoenix -7:28:18 - LMT 1883 Nov 18 11:31:42
- -7:00 US M%sT 1944 Jan 1 00:01
- -7:00 - MST 1944 Apr 1 00:01
- -7:00 US M%sT 1944 Oct 1 00:01
+ -7:00 US M%sT 1944 Jan 1 0:01
+ -7:00 - MST 1944 Apr 1 0:01
+ -7:00 US M%sT 1944 Oct 1 0:01
-7:00 - MST 1967
-7:00 US M%sT 1968 Mar 21
-7:00 - MST
@@ -653,24 +650,22 @@ Zone America/Phoenix -7:28:18 - LMT 1883 Nov 18 11:31:42
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11
- -8:00 US P%sT 1923 May 13 2:00
+ -8:00 US P%sT 1923 May 13 2:00
-7:00 US M%sT 1974
- -7:00 - MST 1974 Feb 3 2:00
+ -7:00 - MST 1974 Feb 3 2:00
-7:00 US M%sT
# Indiana
#
# For a map of Indiana's time zone regions, see:
-# <a href="http://www.mccsc.edu/time.html">
-# What time is it in Indiana?
-# </a> (2006-03-01)
+# http://en.wikipedia.org/wiki/Time_in_Indiana
#
# From Paul Eggert (2007-08-17):
# Since 1970, most of Indiana has been like America/Indiana/Indianapolis,
# with the following exceptions:
#
# - Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer,
-# Vandenburgh, and Warrick counties have been like America/Chicago.
+# Vanderburgh, and Warrick counties have been like America/Chicago.
#
# - Dearborn and Ohio counties have been like America/New_York.
#
@@ -689,22 +684,16 @@ Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11
# that they would be ambiguous if we left them at the 'America' level.
# So we reluctantly put them all in a subdirectory 'America/Indiana'.
-# From Paul Eggert (2005-08-16):
-# http://www.mccsc.edu/time.html says that Indiana will use DST starting 2006.
-
-# From Nathan Stratton Treadway (2006-03-30):
-# http://www.dot.gov/affairs/dot0406.htm [3705 B]
-# From Deborah Goldsmith (2006-01-18):
-# http://dmses.dot.gov/docimages/pdf95/382329_web.pdf [2.9 MB]
-# From Paul Eggert (2006-01-20):
-# It says "DOT is relocating the time zone boundary in Indiana to move Starke,
+# From Paul Eggert (2014-06-26):
+# https://www.federalregister.gov/articles/2006/01/20/06-563/standard-time-zone-boundary-in-the-state-of-indiana
+# says "DOT is relocating the time zone boundary in Indiana to move Starke,
# Pulaski, Knox, Daviess, Martin, Pike, Dubois, and Perry Counties from the
# Eastern Time Zone to the Central Time Zone.... The effective date of
-# this rule is 2:OO a.m. EST Sunday, April 2, 2006, which is the
+# this rule is 2 a.m. EST Sunday, April 2, 2006, which is the
# changeover date from standard time to Daylight Saving Time."
-# Strictly speaking, this means the affected counties will change their
-# clocks twice that night, but this obviously is in error. The intent
-# is that 01:59:59 EST be followed by 02:00:00 CDT.
+# Strictly speaking, this meant the affected counties changed their
+# clocks twice that night, but this obviously was in error. The intent
+# was that 01:59:59 EST be followed by 02:00:00 CDT.
# From Gwillim Law (2007-02-10):
# The Associated Press has been reporting that Pulaski County, Indiana is
@@ -716,13 +705,13 @@ Rule Indianapolis 1941 only - Jun 22 2:00 1:00 D
Rule Indianapolis 1941 1954 - Sep lastSun 2:00 0 S
Rule Indianapolis 1946 1954 - Apr lastSun 2:00 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
+Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
-6:00 US C%sT 1920
-6:00 Indianapolis C%sT 1942
-6:00 US C%sT 1946
- -6:00 Indianapolis C%sT 1955 Apr 24 2:00
- -5:00 - EST 1957 Sep 29 2:00
- -6:00 - CST 1958 Apr 27 2:00
+ -6:00 Indianapolis C%sT 1955 Apr 24 2:00
+ -5:00 - EST 1957 Sep 29 2:00
+ -6:00 - CST 1958 Apr 27 2:00
-5:00 - EST 1969
-5:00 US E%sT 1971
-5:00 - EST 2006
@@ -738,10 +727,10 @@ Rule Marengo 1954 1960 - Sep lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Indiana/Marengo -5:45:23 - LMT 1883 Nov 18 12:14:37
-6:00 US C%sT 1951
- -6:00 Marengo C%sT 1961 Apr 30 2:00
+ -6:00 Marengo C%sT 1961 Apr 30 2:00
-5:00 - EST 1969
- -5:00 US E%sT 1974 Jan 6 2:00
- -6:00 1:00 CDT 1974 Oct 27 2:00
+ -5:00 US E%sT 1974 Jan 6 2:00
+ -6:00 1:00 CDT 1974 Oct 27 2:00
-5:00 US E%sT 1976
-5:00 - EST 2006
-5:00 US E%sT
@@ -762,11 +751,11 @@ Rule Vincennes 1962 1963 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Indiana/Vincennes -5:50:07 - LMT 1883 Nov 18 12:09:53
-6:00 US C%sT 1946
- -6:00 Vincennes C%sT 1964 Apr 26 2:00
+ -6:00 Vincennes C%sT 1964 Apr 26 2:00
-5:00 - EST 1969
-5:00 US E%sT 1971
- -5:00 - EST 2006 Apr 2 2:00
- -6:00 US C%sT 2007 Nov 4 2:00
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT 2007 Nov 4 2:00
-5:00 US E%sT
#
# Perry County, Indiana, switched from eastern to central time in April 2006.
@@ -783,10 +772,10 @@ Rule Perry 1962 1963 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Indiana/Tell_City -5:47:03 - LMT 1883 Nov 18 12:12:57
-6:00 US C%sT 1946
- -6:00 Perry C%sT 1964 Apr 26 2:00
+ -6:00 Perry C%sT 1964 Apr 26 2:00
-5:00 - EST 1969
-5:00 US E%sT 1971
- -5:00 - EST 2006 Apr 2 2:00
+ -5:00 - EST 2006 Apr 2 2:00
-6:00 US C%sT
#
# Pike County, Indiana moved from central to eastern time in 1977,
@@ -799,11 +788,11 @@ Rule Pike 1961 1964 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Indiana/Petersburg -5:49:07 - LMT 1883 Nov 18 12:10:53
-6:00 US C%sT 1955
- -6:00 Pike C%sT 1965 Apr 25 2:00
- -5:00 - EST 1966 Oct 30 2:00
- -6:00 US C%sT 1977 Oct 30 2:00
- -5:00 - EST 2006 Apr 2 2:00
- -6:00 US C%sT 2007 Nov 4 2:00
+ -6:00 Pike C%sT 1965 Apr 25 2:00
+ -5:00 - EST 1966 Oct 30 2:00
+ -6:00 US C%sT 1977 Oct 30 2:00
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT 2007 Nov 4 2:00
-5:00 US E%sT
#
# Starke County, Indiana moved from central to eastern time in 1991,
@@ -821,10 +810,10 @@ Rule Starke 1959 1961 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Indiana/Knox -5:46:30 - LMT 1883 Nov 18 12:13:30
-6:00 US C%sT 1947
- -6:00 Starke C%sT 1962 Apr 29 2:00
- -5:00 - EST 1963 Oct 27 2:00
- -6:00 US C%sT 1991 Oct 27 2:00
- -5:00 - EST 2006 Apr 2 2:00
+ -6:00 Starke C%sT 1962 Apr 29 2:00
+ -5:00 - EST 1963 Oct 27 2:00
+ -6:00 US C%sT 1991 Oct 27 2:00
+ -5:00 - EST 2006 Apr 2 2:00
-6:00 US C%sT
#
# Pulaski County, Indiana, switched from eastern to central time in
@@ -837,17 +826,17 @@ Rule Pulaski 1957 1960 - Sep lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Indiana/Winamac -5:46:25 - LMT 1883 Nov 18 12:13:35
-6:00 US C%sT 1946
- -6:00 Pulaski C%sT 1961 Apr 30 2:00
+ -6:00 Pulaski C%sT 1961 Apr 30 2:00
-5:00 - EST 1969
-5:00 US E%sT 1971
- -5:00 - EST 2006 Apr 2 2:00
- -6:00 US C%sT 2007 Mar 11 2:00
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT 2007 Mar 11 2:00
-5:00 US E%sT
#
# Switzerland County, Indiana, did not observe DST from 1973 through 2005.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Indiana/Vevay -5:40:16 - LMT 1883 Nov 18 12:19:44
- -6:00 US C%sT 1954 Apr 25 2:00
+ -6:00 US C%sT 1954 Apr 25 2:00
-5:00 - EST 1969
-5:00 US E%sT 1973
-5:00 - EST 2006
@@ -868,18 +857,17 @@ Zone America/Kentucky/Louisville -5:43:02 - LMT 1883 Nov 18 12:16:58
-6:00 US C%sT 1921
-6:00 Louisville C%sT 1942
-6:00 US C%sT 1946
- -6:00 Louisville C%sT 1961 Jul 23 2:00
+ -6:00 Louisville C%sT 1961 Jul 23 2:00
-5:00 - EST 1968
- -5:00 US E%sT 1974 Jan 6 2:00
- -6:00 1:00 CDT 1974 Oct 27 2:00
+ -5:00 US E%sT 1974 Jan 6 2:00
+ -6:00 1:00 CDT 1974 Oct 27 2:00
-5:00 US E%sT
#
# Wayne County, Kentucky
#
-# From
-# <a href="http://www.lake-cumberland.com/life/archive/news990129time.shtml">
-# Lake Cumberland LIFE
-# </a> (1999-01-29) via WKYM-101.7:
+# From Lake Cumberland LIFE
+# http://www.lake-cumberland.com/life/archive/news990129time.shtml
+# (1999-01-29) via WKYM-101.7:
# Clinton County has joined Wayne County in asking the DoT to change from
# the Central to the Eastern time zone.... The Wayne County government made
# the same request in December. And while Russell County officials have not
@@ -896,9 +884,8 @@ Zone America/Kentucky/Louisville -5:43:02 - LMT 1883 Nov 18 12:16:58
#
# From Paul Eggert (2001-07-16):
# The final rule was published in the
-# <a href="http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=2000_register&docid=fr17au00-22">
-# Federal Register 65, 160 (2000-08-17), page 50154-50158.
-# </a>
+# Federal Register 65, 160 (2000-08-17), pp 50154-50158.
+# http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=2000_register&docid=fr17au00-22
#
Zone America/Kentucky/Monticello -5:39:24 - LMT 1883 Nov 18 12:20:36
-6:00 US C%sT 1946
@@ -923,9 +910,8 @@ Zone America/Kentucky/Monticello -5:39:24 - LMT 1883 Nov 18 12:20:36
# See America/North_Dakota/Center for the Oliver County, ND change.
# West Wendover, NV officially switched from Pacific to mountain time on
# 1999-10-31. See the
-# <a href="http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=1999_register&docid=fr21oc99-15">
-# Federal Register 64, 203 (1999-10-21), page 56705-56707.
-# </a>
+# Federal Register 64, 203 (1999-10-21), pp 56705-56707.
+# http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=1999_register&docid=fr21oc99-15
# However, the Federal Register says that West Wendover already operated
# on mountain time, and the rule merely made this official;
# hence a separate tz entry is not needed.
@@ -963,12 +949,12 @@ Rule Detroit 1967 only - Jun 14 2:00 1:00 D
Rule Detroit 1967 only - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Detroit -5:32:11 - LMT 1905
- -6:00 - CST 1915 May 15 2:00
+ -6:00 - CST 1915 May 15 2:00
-5:00 - EST 1942
-5:00 US E%sT 1946
-5:00 Detroit E%sT 1973
-5:00 US E%sT 1975
- -5:00 - EST 1975 Apr 27 2:00
+ -5:00 - EST 1975 Apr 27 2:00
-5:00 US E%sT
#
# Dickinson, Gogebic, Iron, and Menominee Counties, Michigan,
@@ -981,8 +967,8 @@ Rule Menominee 1966 only - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
-6:00 US C%sT 1946
- -6:00 Menominee C%sT 1969 Apr 27 2:00
- -5:00 - EST 1973 Apr 29 2:00
+ -6:00 Menominee C%sT 1969 Apr 27 2:00
+ -5:00 - EST 1973 Apr 29 2:00
-6:00 US C%sT
# Navassa
@@ -1019,9 +1005,9 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated),
# which I found in the UCLA library.
#
-# <a href="http://www.pettswoodvillage.co.uk/Daylight_Savings_William_Willett.pdf">
# William Willett, The Waste of Daylight, 19th edition
-# </a> (1914-03)
+# <http://cs.ucla.edu/~eggert/The-Waste-of-Daylight-19th.pdf>
+# [PDF] (1914-03)
#
# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
# <http://www.jstor.org/stable/1774359>.
@@ -1030,11 +1016,11 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
# Canada
-# From Alain LaBont<e'> (1994-11-14):
+# From Alain LaBonté (1994-11-14):
# I post here the time zone abbreviations standardized in Canada
# for both English and French in the CAN/CSA-Z234.4-89 standard....
#
-# UTC Standard time Daylight savings time
+# UTC Standard time Daylight saving time
# offset French English French English
# -2:30 - - HAT NDT
# -3 - - HAA ADT
@@ -1047,7 +1033,7 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
# -9 HNY YST - -
#
# HN: Heure Normale ST: Standard Time
-# HA: Heure Avanc<e'>e DT: Daylight saving Time
+# HA: Heure Avancée DT: Daylight saving Time
#
# A: de l'Atlantique Atlantic
# C: du Centre Central
@@ -1062,7 +1048,7 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
# From Paul Eggert (1994-11-22):
# Alas, this sort of thing must be handled by localization software.
-# Unless otherwise specified, the data for Canada are all from Shanks
+# Unless otherwise specified, the data entries for Canada are all from Shanks
# & Pottenger.
# From Chris Walton (2006-04-01, 2006-04-25, 2006-06-26, 2007-01-31,
@@ -1111,15 +1097,15 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
# From Paul Eggert (2006-04-25):
# H. David Matthews and Mary Vincent's map
-# <a href="http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp">
# "It's about TIME", _Canadian Geographic_ (September-October 1998)
-# </a> contains detailed boundaries for regions observing nonstandard
+# http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp
+# contains detailed boundaries for regions observing nonstandard
# time and daylight saving time arrangements in Canada circa 1998.
#
-# INMS, the Institute for National Measurement Standards in Ottawa, has <a
-# href="http://inms-ienm.nrc-cnrc.gc.ca/en/time_services/daylight_saving_e.php">
+# INMS, the Institute for National Measurement Standards in Ottawa, has
# information about standard and daylight saving time zones in Canada.
-# </a> (updated periodically).
+# http://inms-ienm.nrc-cnrc.gc.ca/en/time_services/daylight_saving_e.php
+# (updated periodically).
# Its unofficial information is often taken from Matthews and Vincent.
# From Paul Eggert (2006-06-27):
@@ -1128,9 +1114,7 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
# From Chris Walton (2011-12-01)
# In the first of Tammy Hardwick's articles
-# <a href="http://www.ilovecreston.com/?p=articles&t=spec&ar=260">
# http://www.ilovecreston.com/?p=articles&t=spec&ar=260
-# </a>
# she quotes the Friday November 1/1918 edition of the Creston Review.
# The quote includes these two statements:
# 'Sunday the CPR went back to the old system of time...'
@@ -1198,9 +1182,7 @@ Rule StJohns 1960 1986 - Oct lastSun 2:00 0 S
# Time to Standard Time and from Standard Time to Daylight Savings Time
# now occurs at 2:00AM.
# ...
-# <a href="http://www.assembly.nl.ca/legislation/sr/annualstatutes/2011/1106.chp.htm">
# http://www.assembly.nl.ca/legislation/sr/annualstatutes/2011/1106.chp.htm
-# </a>
# ...
# MICHAEL PELLEY | Manager of Enterprise Architecture - Solution Delivery
# Office of the Chief Information Officer
@@ -1236,7 +1218,7 @@ Zone America/Goose_Bay -4:01:40 - LMT 1884 # Happy Valley-Goose Bay
-3:30 - NST 1936
-3:30 StJohns N%sT 1942 May 11
-3:30 Canada N%sT 1946
- -3:30 StJohns N%sT 1966 Mar 15 2:00
+ -3:30 StJohns N%sT 1966 Mar 15 2:00
-4:00 StJohns A%sT 2011 Nov
-4:00 Canada A%sT
@@ -1297,7 +1279,7 @@ Rule Halifax 1962 1973 - Oct lastSun 2:00 0 S
Zone America/Halifax -4:14:24 - LMT 1902 Jun 15
-4:00 Halifax A%sT 1918
-4:00 Canada A%sT 1919
- -4:00 Halifax A%sT 1942 Feb 9 2:00s
+ -4:00 Halifax A%sT 1942 Feb 9 2:00s
-4:00 Canada A%sT 1946
-4:00 Halifax A%sT 1974
-4:00 Canada A%sT
@@ -1356,7 +1338,7 @@ Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
# meridian is supposed to observe AST, but residents as far east as
# Natashquan use EST/EDT, and residents east of Natashquan use AST.
# The Quebec department of justice writes in
-# "The situation in Minganie and Basse-Cote-Nord"
+# "The situation in Minganie and Basse-Côte-Nord"
# http://www.justice.gouv.qc.ca/english/publications/generale/temps-minganie-a.htm
# that the coastal strip from just east of Natashquan to Blanc-Sablon
# observes Atlantic standard time all year round.
@@ -1364,7 +1346,6 @@ Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
# says this common practice was codified into law as of 2007.
# For lack of better info, guess this practice began around 1970, contra to
# Shanks & Pottenger who have this region observing AST/ADT.
-# for post-1970 data America/Puerto_Rico.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Mont 1917 only - Mar 25 2:00 1:00 D
@@ -1378,18 +1359,10 @@ Rule Mont 1922 only - Apr 30 2:00 1:00 D
Rule Mont 1924 only - May 17 2:00 1:00 D
Rule Mont 1924 1926 - Sep lastSun 2:30 0 S
Rule Mont 1925 1926 - May Sun>=1 2:00 1:00 D
-# The 1927-to-1937 rules can be expressed more simply as
-# Rule Mont 1927 1937 - Apr lastSat 24:00 1:00 D
-# Rule Mont 1927 1937 - Sep lastSat 24:00 0 S
-# The rules below avoid use of 24:00
-# (which pre-1998 versions of zic cannot handle).
-Rule Mont 1927 only - May 1 0:00 1:00 D
-Rule Mont 1927 1932 - Sep lastSun 0:00 0 S
-Rule Mont 1928 1931 - Apr lastSun 0:00 1:00 D
-Rule Mont 1932 only - May 1 0:00 1:00 D
-Rule Mont 1933 1940 - Apr lastSun 0:00 1:00 D
-Rule Mont 1933 only - Oct 1 0:00 0 S
-Rule Mont 1934 1939 - Sep lastSun 0:00 0 S
+Rule Mont 1927 1937 - Apr lastSat 24:00 1:00 D
+Rule Mont 1927 1937 - Sep lastSat 24:00 0 S
+Rule Mont 1938 1940 - Apr lastSun 0:00 1:00 D
+Rule Mont 1938 1939 - Sep lastSun 0:00 0 S
Rule Mont 1946 1973 - Apr lastSun 2:00 1:00 D
Rule Mont 1945 1948 - Sep lastSun 2:00 0 S
Rule Mont 1949 1950 - Oct lastSun 2:00 0 S
@@ -1403,7 +1376,7 @@ Zone America/Blanc-Sablon -3:48:28 - LMT 1884
Zone America/Montreal -4:54:16 - LMT 1884
-5:00 Mont E%sT 1918
-5:00 Canada E%sT 1919
- -5:00 Mont E%sT 1942 Feb 9 2:00s
+ -5:00 Mont E%sT 1942 Feb 9 2:00s
-5:00 Canada E%sT 1946
-5:00 Mont E%sT 1974
-5:00 Canada E%sT
@@ -1425,7 +1398,7 @@ Zone America/Montreal -4:54:16 - LMT 1884
# have already done so. In Orillia DST was to run until Saturday,
# 1912-08-31 (no time mentioned), but it was met with considerable
# hostility from certain segments of the public, and was revoked after
-# only two weeks -- I copied it as Saturday, 1912-07-07, 22:00, but
+# only two weeks - I copied it as Saturday, 1912-07-07, 22:00, but
# presumably that should be -07-06. (1912-06-19, -07-12; also letters
# earlier in June).
#
@@ -1435,10 +1408,8 @@ Zone America/Montreal -4:54:16 - LMT 1884
# Mark Brader writes that an article in the 1997-10-14 Toronto Star
# says that Atikokan, Ontario currently does not observe DST,
# but will vote on 11-10 whether to use EST/EDT.
-# He also writes that the
-# <a href="http://www.gov.on.ca/MBS/english/publications/statregs/conttext.html">
-# Ontario Time Act (1990, Chapter T.9)
-# </a>
+# He also writes that the Ontario Time Act (1990, Chapter T.9)
+# http://www.gov.on.ca/MBS/english/publications/statregs/conttext.html
# says that Ontario east of 90W uses EST/EDT, and west of 90W uses CST/CDT.
# Officially Atikokan is therefore on CST/CDT, and most likely this report
# concerns a non-official time observed as a matter of local practice.
@@ -1517,9 +1488,7 @@ Zone America/Montreal -4:54:16 - LMT 1884
# The Journal of The Royal Astronomical Society of Canada,
# volume 26, number 2 (February 1932) and, as of 2010-07-17,
# was available at
-# <a href="http://adsabs.harvard.edu/full/1932JRASC..26...49S">
# http://adsabs.harvard.edu/full/1932JRASC..26...49S
-# </a>
#
# It includes the text below (starting on page 57):
#
@@ -1530,26 +1499,26 @@ Zone America/Montreal -4:54:16 - LMT 1884
# ing in 1930. The information for the province of Quebec is definite,
# for the other provinces only approximate:
#
-# Province Daylight saving time used
+# Province Daylight saving time used
# Prince Edward Island Not used.
# Nova Scotia In Halifax only.
# New Brunswick In St. John only.
# Quebec In the following places:
-# Montreal Lachine
-# Quebec Mont-Royal
-# Levis Iberville
-# St. Lambert Cap de la Madeleine
-# Verdun Loretteville
-# Westmount Richmond
-# Outremont St. Jerome
-# Longueuil Greenfield Park
-# Arvida Waterloo
-# Chambly-Canton Beaulieu
-# Melbourne La Tuque
-# St. Theophile Buckingham
+# Montreal Lachine
+# Quebec Mont-Royal
+# Lévis Iberville
+# St. Lambert Cap de la Madelèine
+# Verdun Loretteville
+# Westmount Richmond
+# Outremont St. Jérôme
+# Longueuil Greenfield Park
+# Arvida Waterloo
+# Chambly-Canton Beaulieu
+# Melbourne La Tuque
+# St. Théophile Buckingham
# Ontario Used generally in the cities and towns along
-# the southerly part of the province. Not
-# used in the northwesterlhy part.
+# the southerly part of the province. Not
+# used in the northwesterly part.
# Manitoba Not used.
# Saskatchewan In Regina only.
# Alberta Not used.
@@ -1618,7 +1587,7 @@ Rule Toronto 1957 1973 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Toronto -5:17:32 - LMT 1895
-5:00 Canada E%sT 1919
- -5:00 Toronto E%sT 1942 Feb 9 2:00s
+ -5:00 Toronto E%sT 1942 Feb 9 2:00s
-5:00 Canada E%sT 1946
-5:00 Toronto E%sT 1974
-5:00 Canada E%sT
@@ -1631,16 +1600,16 @@ Zone America/Thunder_Bay -5:57:00 - LMT 1895
-5:00 Canada E%sT
Zone America/Nipigon -5:53:04 - LMT 1895
-5:00 Canada E%sT 1940 Sep 29
- -5:00 1:00 EDT 1942 Feb 9 2:00s
+ -5:00 1:00 EDT 1942 Feb 9 2:00s
-5:00 Canada E%sT
Zone America/Rainy_River -6:18:16 - LMT 1895
-6:00 Canada C%sT 1940 Sep 29
- -6:00 1:00 CDT 1942 Feb 9 2:00s
+ -6:00 1:00 CDT 1942 Feb 9 2:00s
-6:00 Canada C%sT
Zone America/Atikokan -6:06:28 - LMT 1895
-6:00 Canada C%sT 1940 Sep 29
- -6:00 1:00 CDT 1942 Feb 9 2:00s
- -6:00 Canada C%sT 1945 Sep 30 2:00
+ -6:00 1:00 CDT 1942 Feb 9 2:00s
+ -6:00 Canada C%sT 1945 Sep 30 2:00
-5:00 - EST
@@ -1653,7 +1622,7 @@ Zone America/Atikokan -6:06:28 - LMT 1895
# the first Sunday of April of each year and two o'clock Central
# Standard Time in the morning of the last Sunday of October next
# following, one hour in advance of Central Standard Time."...
-# I believe that the English legislation [of the old time act] had =
+# I believe that the English legislation [of the old time act] had
# been assented to (March 22, 1967)....
# Also, as far as I can tell, there was no order-in-council varying
# the time of Daylight Saving Time for 2005 and so the provisions of
@@ -1776,12 +1745,12 @@ Rule Swift 1959 only - Oct lastSun 2:00 0 S
Rule Swift 1960 1961 - Sep lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Regina -6:58:36 - LMT 1905 Sep
- -7:00 Regina M%sT 1960 Apr lastSun 2:00
+ -7:00 Regina M%sT 1960 Apr lastSun 2:00
-6:00 - CST
Zone America/Swift_Current -7:11:20 - LMT 1905 Sep
- -7:00 Canada M%sT 1946 Apr lastSun 2:00
+ -7:00 Canada M%sT 1946 Apr lastSun 2:00
-7:00 Regina M%sT 1950
- -7:00 Swift M%sT 1972 Apr lastSun 2:00
+ -7:00 Swift M%sT 1972 Apr lastSun 2:00
-6:00 - CST
@@ -1831,9 +1800,7 @@ Zone America/Edmonton -7:33:52 - LMT 1906 Sep
# Earlier this year I stumbled across a detailed article about the time
# keeping history of Creston; it was written by Tammy Hardwick who is the
# manager of the Creston & District Museum. The article was written in May 2009.
-# <a href="http://www.ilovecreston.com/?p=articles&t=spec&ar=260">
# http://www.ilovecreston.com/?p=articles&t=spec&ar=260
-# </a>
# According to the article, Creston has not changed its clocks since June 1918.
# i.e. Creston has been stuck on UTC-7 for 93 years.
# Dawson Creek, on the other hand, changed its clocks as recently as April 1972.
@@ -1841,18 +1808,16 @@ Zone America/Edmonton -7:33:52 - LMT 1906 Sep
# Unfortunately the exact date for the time change in June 1918 remains
# unknown and will be difficult to ascertain. I e-mailed Tammy a few months
# ago to ask if Sunday June 2 was a reasonable guess. She said it was just
-# as plausible as any other date (in June). She also said that after writing the
-# article she had discovered another time change in 1916; this is the subject
-# of another article which she wrote in October 2010.
-# <a href="http://www.creston.museum.bc.ca/index.php?module=comments&uop=view_comment&cm+id=56">
+# as plausible as any other date (in June). She also said that after writing
+# the article she had discovered another time change in 1916; this is the
+# subject of another article which she wrote in October 2010.
# http://www.creston.museum.bc.ca/index.php?module=comments&uop=view_comment&cm+id=56
-# </a>
# Here is a summary of the three clock change events in Creston's history:
# 1. 1884 or 1885: adoption of Mountain Standard Time (GMT-7)
# Exact date unknown
# 2. Oct 1916: switch to Pacific Standard Time (GMT-8)
-# Exact date in October unknown; Sunday October 1 is a reasonable guess.
+# Exact date in October unknown; Sunday October 1 is a reasonable guess.
# 3. June 1918: switch to Pacific Daylight Time (GMT-7)
# Exact date in June unknown; Sunday June 2 is a reasonable guess.
# note#1:
@@ -1865,9 +1830,7 @@ Zone America/Edmonton -7:33:52 - LMT 1906 Sep
# There is no guarantee that Creston will remain on Mountain Standard Time
# (UTC-7) forever.
# The subject was debated at least once this year by the town Council.
-# <a href="http://www.bclocalnews.com/kootenay_rockies/crestonvalleyadvance/news/116760809.html">
# http://www.bclocalnews.com/kootenay_rockies/crestonvalleyadvance/news/116760809.html
-# </a>
# During a period WWII, summer time (Daylight saying) was mandatory in Canada.
# In Creston, that was handled by shifting the area to PST (-8:00) then applying
@@ -1894,7 +1857,7 @@ Zone America/Vancouver -8:12:28 - LMT 1884
-8:00 Canada P%sT
Zone America/Dawson_Creek -8:00:56 - LMT 1884
-8:00 Canada P%sT 1947
- -8:00 Vanc P%sT 1972 Aug 30 2:00
+ -8:00 Vanc P%sT 1972 Aug 30 2:00
-7:00 - MST
Zone America/Creston -7:46:04 - LMT 1884
-7:00 - MST 1916 Oct 1
@@ -1921,18 +1884,17 @@ Zone America/Creston -7:46:04 - LMT 1884
# From Rives McDow (1999-09-04):
# Nunavut ... moved ... to incorporate the whole territory into one time zone.
-# <a href="http://www.nunatsiaq.com/nunavut/nvt90903_13.html">
# Nunavut moves to single time zone Oct. 31
-# </a>
+# http://www.nunatsiaq.com/nunavut/nvt90903_13.html
#
# From Antoine Leca (1999-09-06):
# We then need to create a new timezone for the Kitikmeot region of Nunavut
# to differentiate it from the Yellowknife region.
# From Paul Eggert (1999-09-20):
-# <a href="http://www.nunavut.com/basicfacts/english/basicfacts_1territory.html">
# Basic Facts: The New Territory
-# </a> (1999) reports that Pangnirtung operates on eastern time,
+# http://www.nunavut.com/basicfacts/english/basicfacts_1territory.html
+# (1999) reports that Pangnirtung operates on eastern time,
# and that Coral Harbour does not observe DST. We don't know when
# Pangnirtung switched to eastern time; we'll guess 1995.
@@ -1960,8 +1922,8 @@ Zone America/Creston -7:46:04 - LMT 1884
# the current state of affairs.
# From Michaela Rodrigue, writing in the
-# <a href="http://www.nunatsiaq.com/archives/nunavut991130/nvt91119_17.html">
-# Nunatsiaq News (1999-11-19)</a>:
+# Nunatsiaq News (1999-11-19):
+# http://www.nunatsiaq.com/archives/nunavut991130/nvt91119_17.html
# Clyde River, Pangnirtung and Sanikiluaq now operate with two time zones,
# central - or Nunavut time - for government offices, and eastern time
# for municipal offices and schools.... Igloolik [was similar but then]
@@ -1979,10 +1941,8 @@ Zone America/Creston -7:46:04 - LMT 1884
# Central Time and Southampton Island [in the Central zone] is not
# required to use daylight savings.
-# From
-# <a href="http://www.nunatsiaq.com/archives/nunavut001130/nvt21110_02.html">
-# Nunavut now has two time zones
-# </a> (2000-11-10):
+# From <http://www.nunatsiaq.com/archives/nunavut001130/nvt21110_02.html>
+# Nunavut now has two time zones (2000-11-10):
# The Nunavut government would allow its employees in Kugluktuk and
# Cambridge Bay to operate on central time year-round, putting them
# one hour behind the rest of Nunavut for six months during the winter.
@@ -2073,9 +2033,7 @@ Zone America/Creston -7:46:04 - LMT 1884
# used to be the mayor of Resolute Bay and he apparently owns half the
# businesses including "South Camp Inn." This website has some info on
# Aziz:
-# <a href="http://www.uphere.ca/node/493">
# http://www.uphere.ca/node/493
-# </a>
#
# I sent Aziz an e-mail asking when Resolute Bay had stopped using
# Eastern Standard Time.
@@ -2113,47 +2071,47 @@ Rule NT_YK 1987 2006 - Apr Sun>=1 2:00 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
# aka Panniqtuuq
Zone America/Pangnirtung 0 - zzz 1921 # trading post est.
- -4:00 NT_YK A%sT 1995 Apr Sun>=1 2:00
- -5:00 Canada E%sT 1999 Oct 31 2:00
- -6:00 Canada C%sT 2000 Oct 29 2:00
+ -4:00 NT_YK A%sT 1995 Apr Sun>=1 2:00
+ -5:00 Canada E%sT 1999 Oct 31 2:00
+ -6:00 Canada C%sT 2000 Oct 29 2:00
-5:00 Canada E%sT
# formerly Frobisher Bay
Zone America/Iqaluit 0 - zzz 1942 Aug # Frobisher Bay est.
- -5:00 NT_YK E%sT 1999 Oct 31 2:00
- -6:00 Canada C%sT 2000 Oct 29 2:00
+ -5:00 NT_YK E%sT 1999 Oct 31 2:00
+ -6:00 Canada C%sT 2000 Oct 29 2:00
-5:00 Canada E%sT
# aka Qausuittuq
Zone America/Resolute 0 - zzz 1947 Aug 31 # Resolute founded
- -6:00 NT_YK C%sT 2000 Oct 29 2:00
- -5:00 - EST 2001 Apr 1 3:00
- -6:00 Canada C%sT 2006 Oct 29 2:00
- -5:00 - EST 2007 Mar 11 3:00
+ -6:00 NT_YK C%sT 2000 Oct 29 2:00
+ -5:00 - EST 2001 Apr 1 3:00
+ -6:00 Canada C%sT 2006 Oct 29 2:00
+ -5:00 - EST 2007 Mar 11 3:00
-6:00 Canada C%sT
# aka Kangiqiniq
Zone America/Rankin_Inlet 0 - zzz 1957 # Rankin Inlet founded
- -6:00 NT_YK C%sT 2000 Oct 29 2:00
- -5:00 - EST 2001 Apr 1 3:00
+ -6:00 NT_YK C%sT 2000 Oct 29 2:00
+ -5:00 - EST 2001 Apr 1 3:00
-6:00 Canada C%sT
# aka Iqaluktuuttiaq
Zone America/Cambridge_Bay 0 - zzz 1920 # trading post est.?
- -7:00 NT_YK M%sT 1999 Oct 31 2:00
- -6:00 Canada C%sT 2000 Oct 29 2:00
- -5:00 - EST 2000 Nov 5 0:00
- -6:00 - CST 2001 Apr 1 3:00
+ -7:00 NT_YK M%sT 1999 Oct 31 2:00
+ -6:00 Canada C%sT 2000 Oct 29 2:00
+ -5:00 - EST 2000 Nov 5 0:00
+ -6:00 - CST 2001 Apr 1 3:00
-7:00 Canada M%sT
Zone America/Yellowknife 0 - zzz 1935 # Yellowknife founded?
-7:00 NT_YK M%sT 1980
-7:00 Canada M%sT
Zone America/Inuvik 0 - zzz 1953 # Inuvik founded
- -8:00 NT_YK P%sT 1979 Apr lastSun 2:00
+ -8:00 NT_YK P%sT 1979 Apr lastSun 2:00
-7:00 NT_YK M%sT 1980
-7:00 Canada M%sT
Zone America/Whitehorse -9:00:12 - LMT 1900 Aug 20
- -9:00 NT_YK Y%sT 1966 Jul 1 2:00
+ -9:00 NT_YK Y%sT 1966 Jul 1 2:00
-8:00 NT_YK P%sT 1980
-8:00 Canada P%sT
Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
- -9:00 NT_YK Y%sT 1973 Oct 28 0:00
+ -9:00 NT_YK Y%sT 1973 Oct 28 0:00
-8:00 NT_YK P%sT 1980
-8:00 Canada P%sT
@@ -2165,9 +2123,8 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
# From Paul Eggert (2001-03-05):
# The Investigation and Analysis Service of the
# Mexican Library of Congress (MLoC) has published a
-# <a href="http://www.cddhcu.gob.mx/bibliot/publica/inveyana/polisoc/horver/">
# history of Mexican local time (in Spanish)
-# </a>.
+# http://www.cddhcu.gob.mx/bibliot/publica/inveyana/polisoc/horver/
#
# Here are the discrepancies between Shanks & Pottenger (S&P) and the MLoC.
# (In all cases we go with the MLoC.)
@@ -2212,9 +2169,8 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
# -------------- End Forwarded Message --------------
# From Paul Eggert (1996-06-12):
# For an English translation of the decree, see
-# <a href="http://mexico-travel.com/extra/timezone_eng.html">
# "Diario Oficial: Time Zone Changeover" (1996-01-04).
-# </a>
+# http://mexico-travel.com/extra/timezone_eng.html
# From Rives McDow (1998-10-08):
# The State of Quintana Roo has reverted back to central STD and DST times
@@ -2226,7 +2182,7 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
# savings time so as to stay on the same time zone as the southern part of
# Arizona year round.
-# From Jesper Norgaard, translating
+# From Jesper Nørgaard, translating
# <http://www.reforma.com/nacional/articulo/064327/> (2001-01-17):
# In Oaxaca, the 55.000 teachers from the Section 22 of the National
# Syndicate of Education Workers, refuse to apply daylight saving each
@@ -2239,7 +2195,7 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
# January 17, 2000 - The Energy Secretary, Ernesto Martens, announced
# that Summer Time will be reduced from seven to five months, starting
# this year....
-# <http://www.publico.com.mx/scripts/texto3.asp?action=pagina&pag=21&pos=p&secc=naci&date=01/17/2001>
+# http://www.publico.com.mx/scripts/texto3.asp?action=pagina&pag=21&pos=p&secc=naci&date=01/17/2001
# [translated], says "summer time will ... take effect on the first Sunday
# in May, and end on the last Sunday of September.
@@ -2247,23 +2203,22 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
# The 2001-01-24 traditional Washington Post contained the page one
# story "Timely Issue Divides Mexicans."...
# http://www.washingtonpost.com/wp-dyn/articles/A37383-2001Jan23.html
-# ... Mexico City Mayor Lopez Obrador "...is threatening to keep
+# ... Mexico City Mayor López Obrador "...is threatening to keep
# Mexico City and its 20 million residents on a different time than
-# the rest of the country..." In particular, Lopez Obrador would abolish
+# the rest of the country..." In particular, López Obrador would abolish
# observation of Daylight Saving Time.
-# <a href="http://www.conae.gob.mx/ahorro/decretohorver2001.html#decre">
# Official statute published by the Energy Department
-# </a> (2001-02-01) shows Baja and Chihauhua as still using US DST rules,
-# and Sonora with no DST. This was reported by Jesper Norgaard (2001-02-03).
+# http://www.conae.gob.mx/ahorro/decretohorver2001.html#decre
+# (2001-02-01) shows Baja and Chihauhua as still using US DST rules,
+# and Sonora with no DST. This was reported by Jesper Nørgaard (2001-02-03).
# From Paul Eggert (2001-03-03):
#
-# <a href="http://www.latimes.com/news/nation/20010303/t000018766.html">
+# http://www.latimes.com/news/nation/20010303/t000018766.html
# James F. Smith writes in today's LA Times
-# </a>
# * Sonora will continue to observe standard time.
-# * Last week Mexico City's mayor Andres Manuel Lopez Obrador decreed that
+# * Last week Mexico City's mayor Andrés Manuel López Obrador decreed that
# the Federal District will not adopt DST.
# * 4 of 16 district leaders announced they'll ignore the decree.
# * The decree does not affect federal-controlled facilities including
@@ -2271,7 +2226,7 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
#
# For now we'll assume that the Federal District will bow to federal rules.
-# From Jesper Norgaard (2001-04-01):
+# From Jesper Nørgaard (2001-04-01):
# I found some references to the Mexican application of daylight
# saving, which modifies what I had already sent you, stating earlier
# that a number of northern Mexican states would go on daylight
@@ -2280,7 +2235,7 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
# saving all year) will follow the original decree of president
# Vicente Fox, starting daylight saving May 6, 2001 and ending
# September 30, 2001.
-# References: "Diario de Monterrey" <www.diariodemonterrey.com/index.asp>
+# References: "Diario de Monterrey" <http://www.diariodemonterrey.com/index.asp>
# Palabra <http://palabra.infosel.com/010331/primera/ppri3101.pdf> (2001-03-31)
# From Reuters (2001-09-04):
@@ -2292,7 +2247,7 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
# standard time. "This is so residents of the Federal District are not
# subject to unexpected time changes," a statement from the court said.
-# From Jesper Norgaard Welen (2002-03-12):
+# From Jesper Nørgaard Welen (2002-03-12):
# ... consulting my local grocery store(!) and my coworkers, they all insisted
# that a new decision had been made to reinstate US style DST in Mexico....
# http://www.conae.gob.mx/ahorro/horaver2001_m1_2002.html (2002-02-20)
@@ -2306,48 +2261,36 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
# > the United States.
# Now this has passed both the Congress and the Senate, so starting from
# 2010, some border regions will be the same:
-# <a href="http://www.signonsandiego.com/news/2009/dec/28/clocks-will-match-both-sides-border/">
# http://www.signonsandiego.com/news/2009/dec/28/clocks-will-match-both-sides-border/
-# </a>
-# <a href="http://www.elmananarey.com/diario/noticia/nacional/noticias/empatan_horario_de_frontera_con_eu/621939">
# http://www.elmananarey.com/diario/noticia/nacional/noticias/empatan_horario_de_frontera_con_eu/621939
-# </a>
# (Spanish)
#
# Could not find the new law text, but the proposed law text changes are here:
-# <a href="http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/20091210-V.pdf">
# http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/20091210-V.pdf
-# </a>
# (Gaceta Parlamentaria)
#
# There is also a list of the votes here:
-# <a href="http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/V2-101209.html">
# http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/V2-101209.html
-# </a>
#
# Our page:
-# <a href="http://www.timeanddate.com/news/time/north-mexico-dst-change.html">
# http://www.timeanddate.com/news/time/north-mexico-dst-change.html
-# </a>
# From Arthur David Olson (2010-01-20):
# The page
-# <a href="http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010">
# http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010
-# </a>
# includes this text:
# En los municipios fronterizos de Tijuana y Mexicali en Baja California;
-# Ju&aacute;rez y Ojinaga en Chihuahua; Acu&ntilde;a y Piedras Negras en Coahuila;
-# An&aacute;huac en Nuevo Le&oacute;n; y Nuevo Laredo, Reynosa y Matamoros en
-# Tamaulipas, la aplicaci&oacute;n de este horario estacional surtir&aacute; efecto
-# desde las dos horas del segundo domingo de marzo y concluir&aacute; a las dos
+# Juárez y Ojinaga en Chihuahua; Acuña y Piedras Negras en Coahuila;
+# Anáhuac en Nuevo León; y Nuevo Laredo, Reynosa y Matamoros en
+# Tamaulipas, la aplicación de este horario estacional surtirá efecto
+# desde las dos horas del segundo domingo de marzo y concluirá a las dos
# horas del primer domingo de noviembre.
# En los municipios fronterizos que se encuentren ubicados en la franja
-# fronteriza norte en el territorio comprendido entre la l&iacute;nea
-# internacional y la l&iacute;nea paralela ubicada a una distancia de veinte
-# kil&oacute;metros, as&iacute; como la Ciudad de Ensenada, Baja California, hacia el
-# interior del pa&iacute;s, la aplicaci&oacute;n de este horario estacional surtir&aacute;
-# efecto desde las dos horas del segundo domingo de marzo y concluir&aacute; a
+# fronteriza norte en el territorio comprendido entre la línea
+# internacional y la línea paralela ubicada a una distancia de veinte
+# kilómetros, así como la Ciudad de Ensenada, Baja California, hacia el
+# interior del país, la aplicación de este horario estacional surtirá
+# efecto desde las dos horas del segundo domingo de marzo y concluirá a
# las dos horas del primer domingo de noviembre.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -2366,39 +2309,39 @@ Rule Mexico 2001 only - Sep lastSun 2:00 0 S
Rule Mexico 2002 max - Apr Sun>=1 2:00 1:00 D
Rule Mexico 2002 max - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-# Quintana Roo
+# Quintana Roo; represented by Cancún
Zone America/Cancun -5:47:04 - LMT 1922 Jan 1 0:12:56
-6:00 - CST 1981 Dec 23
-5:00 Mexico E%sT 1998 Aug 2 2:00
-6:00 Mexico C%sT
-# Campeche, Yucatan
+# Campeche, Yucatán; represented by Mérida
Zone America/Merida -5:58:28 - LMT 1922 Jan 1 0:01:32
-6:00 - CST 1981 Dec 23
-5:00 - EST 1982 Dec 2
-6:00 Mexico C%sT
-# Coahuila, Durango, Nuevo Leon, Tamaulipas (near US border)
+# Coahuila, Durango, Nuevo León, Tamaulipas (near US border)
Zone America/Matamoros -6:40:00 - LMT 1921 Dec 31 23:20:00
-6:00 - CST 1988
-6:00 US C%sT 1989
-6:00 Mexico C%sT 2010
-6:00 US C%sT
-# Coahuila, Durango, Nuevo Leon, Tamaulipas (away from US border)
+# Coahuila, Durango, Nuevo León, Tamaulipas (away from US border)
Zone America/Monterrey -6:41:16 - LMT 1921 Dec 31 23:18:44
-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 0:23:24
+Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 0:23:24
-7:00 - MST 1927 Jun 10 23:00
-6:00 - CST 1930 Nov 15
-7:00 - MST 1931 May 1 23:00
-6:00 - CST 1931 Oct
-7:00 - MST 1932 Apr 1
- -6:00 Mexico C%sT 2001 Sep 30 02:00
+ -6:00 Mexico C%sT 2001 Sep 30 2:00
-6:00 - CST 2002 Feb 20
-6:00 Mexico C%sT
# Chihuahua (near US border)
-Zone America/Ojinaga -6:57:40 - LMT 1922 Jan 1 0:02:20
+Zone America/Ojinaga -6:57:40 - LMT 1922 Jan 1 0:02:20
-7:00 - MST 1927 Jun 10 23:00
-6:00 - CST 1930 Nov 15
-7:00 - MST 1931 May 1 23:00
@@ -2406,7 +2349,7 @@ Zone America/Ojinaga -6:57:40 - LMT 1922 Jan 1 0:02:20
-7:00 - MST 1932 Apr 1
-6:00 - CST 1996
-6:00 Mexico C%sT 1998
- -6:00 - CST 1998 Apr Sun>=1 3:00
+ -6:00 - CST 1998 Apr Sun>=1 3:00
-7:00 Mexico M%sT 2010
-7:00 US M%sT
# Chihuahua (away from US border)
@@ -2418,7 +2361,7 @@ Zone America/Chihuahua -7:04:20 - LMT 1921 Dec 31 23:55:40
-7:00 - MST 1932 Apr 1
-6:00 - CST 1996
-6:00 Mexico C%sT 1998
- -6:00 - CST 1998 Apr Sun>=1 3:00
+ -6:00 - CST 1998 Apr Sun>=1 3:00
-7:00 Mexico M%sT
# Sonora
Zone America/Hermosillo -7:23:52 - LMT 1921 Dec 31 23:36:08
@@ -2434,42 +2377,33 @@ Zone America/Hermosillo -7:23:52 - LMT 1921 Dec 31 23:36:08
-7:00 - MST
# From Alexander Krivenyshev (2010-04-21):
-# According to news, Bah&iacute;a de Banderas (Mexican state of Nayarit)
+# According to news, Bahía de Banderas (Mexican state of Nayarit)
# changed time zone UTC-7 to new time zone UTC-6 on April 4, 2010 (to
# share the same time zone as nearby city Puerto Vallarta, Jalisco).
#
# (Spanish)
-# Bah&iacute;a de Banderas homologa su horario al del centro del
-# pa&iacute;s, a partir de este domingo
-# <a href="http://www.nayarit.gob.mx/notes.asp?id=20748">
+# Bahía de Banderas homologa su horario al del centro del
+# país, a partir de este domingo
# http://www.nayarit.gob.mx/notes.asp?id=20748
-# </a>
#
-# Bah&iacute;a de Banderas homologa su horario con el del Centro del
-# Pa&iacute;s
-# <a href="http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50">
-# http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50"
-# </a>
+# Bahía de Banderas homologa su horario con el del Centro del
+# País
+# http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50
#
# (English)
-# Puerto Vallarta and Bah&iacute;a de Banderas: One Time Zone
-# <a href="http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml">
+# Puerto Vallarta and Bahía de Banderas: One Time Zone
# http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml
-# </a>
-#
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_mexico08.html">
# http://www.worldtimezone.com/dst_news/dst_news_mexico08.html
-# </a>
#
# "Mexico's Senate approved the amendments to the Mexican Schedule System that
-# will allow Bah&iacute;a de Banderas and Puerto Vallarta to share the same time
+# will allow Bahía de Banderas and Puerto Vallarta to share the same time
# zone ..."
# Baja California Sur, Nayarit, Sinaloa
# From Arthur David Olson (2010-05-01):
# Use "Bahia_Banderas" to keep the name to fourteen characters.
+# Mazatlán
Zone America/Mazatlan -7:05:40 - LMT 1921 Dec 31 23:54:20
-7:00 - MST 1927 Jun 10 23:00
-6:00 - CST 1930 Nov 15
@@ -2481,6 +2415,7 @@ Zone America/Mazatlan -7:05:40 - LMT 1921 Dec 31 23:54:20
-8:00 - PST 1970
-7:00 Mexico M%sT
+# Bahía de Banderas
Zone America/Bahia_Banderas -7:01:00 - LMT 1921 Dec 31 23:59:00
-7:00 - MST 1927 Jun 10 23:00
-6:00 - CST 1930 Nov 15
@@ -2490,7 +2425,7 @@ Zone America/Bahia_Banderas -7:01:00 - LMT 1921 Dec 31 23:59:00
-6:00 - CST 1942 Apr 24
-7:00 - MST 1949 Jan 14
-8:00 - PST 1970
- -7:00 Mexico M%sT 2010 Apr 4 2:00
+ -7:00 Mexico M%sT 2010 Apr 4 2:00
-6:00 Mexico C%sT
# Baja California (near US border)
@@ -2537,7 +2472,7 @@ Zone America/Santa_Isabel -7:39:28 - LMT 1922 Jan 1 0:20:32
# America/Tijuana only in that it did not observe DST from 1976
# through 1995. This was as per Shanks (1999). But Shanks & Pottenger say
# Ensenada did not observe DST from 1948 through 1975. Guy Harris reports
-# that the 1987 OAG says "Only Ensenada, Mexicale, San Felipe and
+# that the 1987 OAG says "Only Ensenada, Mexicali, San Felipe and
# Tijuana observe DST," which agrees with Shanks & Pottenger but implies that
# DST-observance was a town-by-town matter back then. This concerns
# data after 1970 so most likely there should be at least one Zone
@@ -2550,7 +2485,7 @@ Zone America/Santa_Isabel -7:39:28 - LMT 1922 Jan 1 0:20:32
###############################################################################
# Anguilla
-# See 'southamerica'.
+# See America/Port_of_Spain.
# Antigua and Barbuda
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -2586,8 +2521,8 @@ Rule Barb 1978 1980 - Apr Sun>=15 2:00 1:00 D
Rule Barb 1979 only - Sep 30 2:00 0 S
Rule Barb 1980 only - Sep 25 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Barbados -3:58:29 - LMT 1924 # Bridgetown
- -3:58:29 - BMT 1932 # Bridgetown Mean Time
+Zone America/Barbados -3:58:29 - LMT 1924 # Bridgetown
+ -3:58:29 - BMT 1932 # Bridgetown Mean Time
-4:00 Barb A%sT
# Belize
@@ -2617,20 +2552,20 @@ Zone America/Belize -5:52:48 - LMT 1912 Apr
# http://www.theroyalgazette.com/apps/pbcs.dll/article?AID=/20060529/NEWS/105290135
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Atlantic/Bermuda -4:19:18 - LMT 1930 Jan 1 2:00 # Hamilton
- -4:00 - AST 1974 Apr 28 2:00
+Zone Atlantic/Bermuda -4:19:18 - LMT 1930 Jan 1 2:00 # Hamilton
+ -4:00 - AST 1974 Apr 28 2:00
-4:00 Canada A%sT 1976
-4:00 US A%sT
# Cayman Is
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown
- -5:07:11 - KMT 1912 Feb # Kingston Mean Time
+Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown
+ -5:07:11 - KMT 1912 Feb # Kingston Mean Time
-5:00 - EST
# Costa Rica
-# Milne gives -5:36:13.3 as San Jose mean time; round to nearest.
+# Milne gives -5:36:13.3 as San José mean time; round to nearest.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule CR 1979 1980 - Feb lastSun 0:00 1:00 D
@@ -2640,10 +2575,10 @@ Rule CR 1991 1992 - Jan Sat>=15 0:00 1:00 D
# go with Shanks & Pottenger.
Rule CR 1991 only - Jul 1 0:00 0 S
Rule CR 1992 only - Mar 15 0:00 0 S
-# There are too many San Joses elsewhere, so we'll use 'Costa Rica'.
+# There are too many San Josés elsewhere, so we'll use 'Costa Rica'.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Costa_Rica -5:36:13 - LMT 1890 # San Jose
- -5:36:13 - SJMT 1921 Jan 15 # San Jose Mean Time
+Zone America/Costa_Rica -5:36:13 - LMT 1890 # San José
+ -5:36:13 - SJMT 1921 Jan 15 # San José Mean Time
-6:00 CR C%sT
# Coco
# no information; probably like America/Costa_Rica
@@ -2662,8 +2597,8 @@ Zone America/Costa_Rica -5:36:13 - LMT 1890 # San Jose
# During the game, play-by-play announcer Jim Hunter noted that
# "We'll be losing two hours of sleep...Cuba switched to Daylight Saving
# Time today." (The "two hour" remark referred to losing one hour of
-# sleep on 1999-03-28--when the announcers were in Cuba as it switched
-# to DST--and one more hour on 1999-04-04--when the announcers will have
+# sleep on 1999-03-28 - when the announcers were in Cuba as it switched
+# to DST - and one more hour on 1999-04-04 - when the announcers will have
# returned to Baltimore, which switches on that date.)
# From Steffen Thorsen (2013-11-11):
@@ -2685,16 +2620,16 @@ Zone America/Costa_Rica -5:36:13 - LMT 1890 # San Jose
# adjustment in Cuba. We will stay in daylight saving time:
# http://www.granma.cu/espanol/2005/noviembre/mier9/horario.html
-# From Jesper Norgaard Welen (2006-10-21):
+# From Jesper Nørgaard Welen (2006-10-21):
# An article in GRANMA INTERNACIONAL claims that Cuba will end
# the 3 years of permanent DST next weekend, see
# http://www.granma.cu/ingles/2006/octubre/lun16/43horario.html
# "On Saturday night, October 28 going into Sunday, October 29, at 01:00,
-# watches should be set back one hour -- going back to 00:00 hours -- returning
+# watches should be set back one hour - going back to 00:00 hours - returning
# to the normal schedule....
# From Paul Eggert (2007-03-02):
-# http://www.granma.cubaweb.cu/english/news/art89.html, dated yesterday,
+# <http://www.granma.cubaweb.cu/english/news/art89.html>, dated yesterday,
# says Cuban clocks will advance at midnight on March 10.
# For lack of better information, assume Cuba will use US rules,
# except that it switches at midnight standard time as usual.
@@ -2708,10 +2643,10 @@ Zone America/Costa_Rica -5:36:13 - LMT 1890 # San Jose
# http://www.prensalatina.com.mx/article.asp?ID=%7B4CC32C1B-A9F7-42FB-8A07-8631AFC923AF%7D&language=ES
# http://actualidad.terra.es/sociedad/articulo/cuba_llama_ahorrar_energia_cambio_1957044.htm
#
-# From Alex Kryvenishev (2007-10-25):
+# From Alex Krivenyshev (2007-10-25):
# Here is also article from Granma (Cuba):
#
-# [Regira] el Horario Normal desde el [proximo] domingo 28 de octubre
+# Regirá el Horario Normal desde el próximo domingo 28 de octubre
# http://www.granma.cubaweb.cu/2007/10/24/nacional/artic07.html
#
# http://www.worldtimezone.com/dst_news/dst_news_cuba03.html
@@ -2719,23 +2654,18 @@ Zone America/Costa_Rica -5:36:13 - LMT 1890 # San Jose
# From Arthur David Olson (2008-03-09):
# I'm in Maryland which is now observing United States Eastern Daylight
# Time. At 9:44 local time I used RealPlayer to listen to
-# <a href="http://media.enet.cu/radioreloj">
# http://media.enet.cu/radioreloj
-# </a>, a Cuban information station, and heard
+# a Cuban information station, and heard
# the time announced as "ocho cuarenta y cuatro" ("eight forty-four"),
# indicating that Cuba is still on standard time.
# From Steffen Thorsen (2008-03-12):
# It seems that Cuba will start DST on Sunday, 2007-03-16...
# It was announced yesterday, according to this source (in Spanish):
-# <a href="http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm">
# http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm
-# </a>
#
# Some more background information is posted here:
-# <a href="http://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html">
# http://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html
-# </a>
#
# The article also says that Cuba has been observing DST since 1963,
# while Shanks (and tzdata) has 1965 as the first date (except in the
@@ -2745,18 +2675,14 @@ Zone America/Costa_Rica -5:36:13 - LMT 1890 # San Jose
# change some historic records as well.
#
# One example:
-# <a href="http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm">
# http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm
-# </a>
-# From Jesper Norgaard Welen (2008-03-13):
+# From Jesper Nørgaard Welen (2008-03-13):
# The Cuban time change has just been confirmed on the most authoritative
# web site, the Granma. Please check out
-# <a href="http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html">
# http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html
-# </a>
#
-# Basically as expected after Steffen Thorsens information, the change
+# Basically as expected after Steffen Thorsen's information, the change
# will take place midnight between Saturday and Sunday.
# From Arthur David Olson (2008-03-12):
@@ -2767,18 +2693,14 @@ Zone America/Costa_Rica -5:36:13 - LMT 1890 # San Jose
# midnight between Saturday, March 07, 2009 and Sunday, March 08, 2009-
# not on midnight March 14 / March 15 as previously thought.
#
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_cuba05.html">
# http://www.worldtimezone.com/dst_news/dst_news_cuba05.html
# (in Spanish)
-# </a>
# From Arthur David Olson (2009-03-09)
# I listened over the Internet to
-# <a href="http://media.enet.cu/readioreloj">
# http://media.enet.cu/readioreloj
-# </a>
# this morning; when it was 10:05 a. m. here in Bethesda, Maryland the
-# the time was announced as "diez cinco"--the same time as here, indicating
+# the time was announced as "diez cinco" - the same time as here, indicating
# that has indeed switched to DST. Assume second Sunday from 2009 forward.
# From Steffen Thorsen (2011-03-08):
@@ -2787,42 +2709,30 @@ Zone America/Costa_Rica -5:36:13 - LMT 1890 # San Jose
# changed at all).
#
# Source:
-# <a href="http://granma.co.cu/2011/03/08/nacional/artic01.html">
# http://granma.co.cu/2011/03/08/nacional/artic01.html
-# </a>
#
# Our info:
-# <a href="http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html">
# http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html
-# </a>
#
# From Steffen Thorsen (2011-10-30)
# Cuba will end DST two weeks later this year. Instead of going back
# tonight, it has been delayed to 2011-11-13 at 01:00.
#
# One source (Spanish)
-# <a href="http://www.radioangulo.cu/noticias/cuba/17105-cuba-restablecera-el-horario-del-meridiano-de-greenwich.html">
# http://www.radioangulo.cu/noticias/cuba/17105-cuba-restablecera-el-horario-del-meridiano-de-greenwich.html
-# </a>
#
# Our page:
-# <a href="http://www.timeanddate.com/news/time/cuba-time-changes-2011.html">
# http://www.timeanddate.com/news/time/cuba-time-changes-2011.html
-# </a>
#
# From Steffen Thorsen (2012-03-01)
# According to Radio Reloj, Cuba will start DST on Midnight between March
# 31 and April 1.
#
# Radio Reloj has the following info (Spanish):
-# <a href="http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril">
# http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril
-# </a>
#
# Our info on it:
-# <a href="http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html">
# http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html
-# </a>
# From Steffen Thorsen (2012-11-03):
# Radio Reloj and many other sources report that Cuba is changing back
@@ -2878,7 +2788,7 @@ Zone America/Havana -5:29:28 - LMT 1890
-5:00 Cuba C%sT
# Dominica
-# See 'southamerica'.
+# See America/Port_of_Spain.
# Dominican Republic
@@ -2911,8 +2821,8 @@ Rule DR 1972 1974 - Jan 21 0:00 0 S
Zone America/Santo_Domingo -4:39:36 - LMT 1890
-4:40 - SDMT 1933 Apr 1 12:00 # S. Dom. MT
-5:00 DR E%sT 1974 Oct 27
- -4:00 - AST 2000 Oct 29 02:00
- -5:00 US E%sT 2000 Dec 3 01:00
+ -4:00 - AST 2000 Oct 29 2:00
+ -5:00 US E%sT 2000 Dec 3 1:00
-4:00 - AST
# El Salvador
@@ -2923,20 +2833,20 @@ Rule Salv 1987 1988 - Sep lastSun 0:00 0 S
# There are too many San Salvadors elsewhere, so use America/El_Salvador
# instead of America/San_Salvador.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/El_Salvador -5:56:48 - LMT 1921 # San Salvador
+Zone America/El_Salvador -5:56:48 - LMT 1921 # San Salvador
-6:00 Salv C%sT
# Grenada
# Guadeloupe
-# St Barthelemy
+# St Barthélemy
# St Martin (French part)
-# See 'southamerica'.
+# See America/Port_of_Spain.
# Guatemala
#
# From Gwillim Law (2006-04-22), after a heads-up from Oscar van Vlijmen:
# Diario Co Latino, at
-# http://www.diariocolatino.com/internacionales/detalles.asp?NewsID=8079,
+# <http://www.diariocolatino.com/internacionales/detalles.asp?NewsID=8079>,
# says in an article dated 2006-04-19 that the Guatemalan government had
# decided on that date to advance official time by 60 minutes, to lessen the
# impact of the elevated cost of oil.... Daylight saving time will last from
@@ -2944,7 +2854,7 @@ Zone America/El_Salvador -5:56:48 - LMT 1921 # San Salvador
# From Paul Eggert (2006-06-22):
# The Ministry of Energy and Mines, press release CP-15/2006
# (2006-04-19), says DST ends at 24:00. See
-# <http://www.sieca.org.gt/Sitio_publico/Energeticos/Doc/Medidas/Cambio_Horario_Nac_190406.pdf>.
+# http://www.sieca.org.gt/Sitio_publico/Energeticos/Doc/Medidas/Cambio_Horario_Nac_190406.pdf
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Guat 1973 only - Nov 25 0:00 1:00 D
@@ -2961,11 +2871,10 @@ Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5
# Haiti
# From Gwillim Law (2005-04-15):
-# Risto O. Nykanen wrote me that Haiti is now on DST.
-# I searched for confirmation, and I found a
-# <a href="http://www.haitianconsulate.org/time.doc"> press release
+# Risto O. Nykänen wrote me that Haiti is now on DST.
+# I searched for confirmation, and I found a press release
# on the Web page of the Haitian Consulate in Chicago (2005-03-31),
-# </a>. Translated from French, it says:
+# <http://www.haitianconsulate.org/time.doc>. Translated from French, it says:
#
# "The Prime Minister's Communication Office notifies the public in general
# and the press in particular that, following a decision of the Interior
@@ -3042,14 +2951,14 @@ Zone America/Port-au-Prince -4:49:20 - LMT 1890
# <http://www.latribuna.hn/99299.html> that Manuel Zelaya, the president
# of Honduras, refused to back down on this.
-# From Jesper Norgaard Welen (2006-08-08):
+# From Jesper Nørgaard Welen (2006-08-08):
# It seems that Honduras has returned from DST to standard time this Monday at
# 00:00 hours (prolonging Sunday to 25 hours duration).
# http://www.worldtimezone.com/dst_news/dst_news_honduras04.html
# From Paul Eggert (2006-08-08):
-# Also see Diario El Heraldo, The country returns to standard time (2006-08-08)
-# <http://www.elheraldo.hn/nota.php?nid=54941&sec=12>.
+# Also see Diario El Heraldo, The country returns to standard time (2006-08-08).
+# http://www.elheraldo.hn/nota.php?nid=54941&sec=12
# It mentions executive decree 18-2006.
# From Steffen Thorsen (2006-08-17):
@@ -3077,22 +2986,22 @@ Zone America/Tegucigalpa -5:48:52 - LMT 1921 Apr
# unspecified official document, and says "This time is used throughout the
# island". Go with Milne. Round to the nearest second as required by zic.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Jamaica -5:07:11 - LMT 1890 # Kingston
+Zone America/Jamaica -5:07:11 - LMT 1890 # Kingston
-5:07:11 - KMT 1912 Feb # Kingston Mean Time
- -5:00 - EST 1974 Apr 28 2:00
+ -5:00 - EST 1974 Apr 28 2:00
-5:00 US E%sT 1984
-5:00 - EST
# Martinique
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France
- -4:04:20 - FFMT 1911 May # Fort-de-France MT
+Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France
+ -4:04:20 - FFMT 1911 May # Fort-de-France MT
-4:00 - AST 1980 Apr 6
-4:00 1:00 ADT 1980 Sep 28
-4:00 - AST
# Montserrat
-# See 'southamerica'.
+# See America/Port_of_Spain.
# Nicaragua
#
@@ -3115,27 +3024,27 @@ Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France
# From Gwillim Law (2005-04-21):
# The Associated Press story on the time change, which can be found at
# http://www.lapalmainteractivo.com/guias/content/gen/ap/America_Latina/AMC_GEN_NICARAGUA_HORA.html
-# and elsewhere, says (fifth paragraph, translated from Spanish): "The last
+# and elsewhere, says (fifth paragraph, translated from Spanish): "The last
# time that a change of clocks was applied to save energy was in the year 2000
-# during the Arnoldo Aleman administration."...
+# during the Arnoldo Alemán administration."...
# The northamerica file says that Nicaragua has been on UTC-6 continuously
# since December 1998. I wasn't able to find any details of Nicaraguan time
# changes in 2000. Perhaps a note could be added to the northamerica file, to
# the effect that we have indirect evidence that DST was observed in 2000.
#
-# From Jesper Norgaard Welen (2005-11-02):
+# From Jesper Nørgaard Welen (2005-11-02):
# Nicaragua left DST the 2005-10-02 at 00:00 (local time).
# http://www.presidencia.gob.ni/presidencia/files_index/secretaria/comunicados/2005/septiembre/26septiembre-cambio-hora.htm
# (2005-09-26)
#
-# From Jesper Norgaard Welen (2006-05-05):
+# From Jesper Nørgaard Welen (2006-05-05):
# http://www.elnuevodiario.com.ni/2006/05/01/nacionales/18410
# (my informal translation)
-# By order of the president of the republic, Enrique Bolanos, Nicaragua
+# By order of the president of the republic, Enrique Bolaños, Nicaragua
# advanced by sixty minutes their official time, yesterday at 2 in the
-# morning, and will stay that way until 30.th. of september.
+# morning, and will stay that way until 30th of September.
#
-# From Jesper Norgaard Welen (2006-09-30):
+# From Jesper Nørgaard Welen (2006-09-30):
# http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2006/D-063-2006P-PRN-Cambio-Hora.pdf
# My informal translation runs:
# The natural sun time is restored in all the national territory, in that the
@@ -3153,7 +3062,7 @@ Zone America/Managua -5:45:08 - LMT 1890
-5:45:12 - MMT 1934 Jun 23 # Managua Mean Time?
-6:00 - CST 1973 May
-5:00 - EST 1975 Feb 16
- -6:00 Nic C%sT 1992 Jan 1 4:00
+ -6:00 Nic C%sT 1992 Jan 1 4:00
-5:00 - EST 1992 Sep 24
-6:00 - CST 1993
-5:00 - EST 1997
@@ -3162,36 +3071,36 @@ Zone America/Managua -5:45:08 - LMT 1890
# Panama
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Panama -5:18:08 - LMT 1890
- -5:19:36 - CMT 1908 Apr 22 # Colon Mean Time
+ -5:19:36 - CMT 1908 Apr 22 # Colón Mean Time
-5:00 - EST
# Puerto Rico
# There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan
+Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan
-4:00 - AST 1942 May 3
-4:00 US A%sT 1946
-4:00 - AST
# St Kitts-Nevis
# St Lucia
-# See 'southamerica'.
+# See America/Port_of_Spain.
# St Pierre and Miquelon
# There are too many St Pierres elsewhere, so we'll use 'Miquelon'.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre
+Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre
-4:00 - AST 1980 May
-3:00 - PMST 1987 # Pierre & Miquelon Time
-3:00 Canada PM%sT
# St Vincent and the Grenadines
-# See 'southamerica'.
+# See America/Port_of_Spain.
# Turks and Caicos
#
# From Chris Dunn in
-# <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=415007>
+# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=415007
# (2007-03-15): In the Turks & Caicos Islands (America/Grand_Turk) the
# daylight saving dates for time changes have been adjusted to match
# the recent U.S. change of dates.
@@ -3204,21 +3113,23 @@ Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre
# Clocks are set back one hour at 2:00 a.m. local Daylight Saving Time"
# indicating that the normal ET rules are followed.
#
-# From Paul Eggert (2006-05-01):
-# Shanks & Pottenger say they use US DST rules, but IATA SSIM (1991/1998)
-# says they switch at midnight. Go with Shanks & Pottenger.
+# From Paul Eggert (2014-08-19):
+# The 2014-08-13 Cabinet meeting decided to stay on UTC-4 year-round. See:
+# http://tcweeklynews.com/daylight-savings-time-to-be-maintained-p5353-127.htm
+# Model this as a switch from EST/EDT to AST on 2014-11-02 at 02:00.
#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule TC 1979 1986 - Apr lastSun 2:00 1:00 D
-Rule TC 1979 2006 - Oct lastSun 2:00 0 S
-Rule TC 1987 2006 - Apr Sun>=1 2:00 1:00 D
-Rule TC 2007 max - Mar Sun>=8 2:00 1:00 D
-Rule TC 2007 max - Nov Sun>=1 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Grand_Turk -4:44:32 - LMT 1890
- -5:07:11 - KMT 1912 Feb # Kingston Mean Time
- -5:00 TC E%sT
+ -5:07:11 - KMT 1912 Feb # Kingston Mean Time
+ -5:00 - EST 1979
+ -5:00 US E%sT 2014 Nov 2 2:00
+ -4:00 - AST
# British Virgin Is
# Virgin Is
-# See 'southamerica'.
+# See America/Port_of_Spain.
+
+
+# Local Variables:
+# coding: utf-8
+# End:
diff --git a/elsie.nci.nih.gov/src/pacificnew b/elsie.nci.nih.gov/src/pacificnew
index bccd852..7349434 100644
--- a/elsie.nci.nih.gov/src/pacificnew
+++ b/elsie.nci.nih.gov/src/pacificnew
@@ -1,4 +1,3 @@
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
diff --git a/elsie.nci.nih.gov/src/private.h b/elsie.nci.nih.gov/src/private.h
index 4e8f4ae..e7f5255 100644
--- a/elsie.nci.nih.gov/src/private.h
+++ b/elsie.nci.nih.gov/src/private.h
@@ -19,7 +19,7 @@
/*
** Defaults for preprocessor symbols.
-** You can override these in your C compiler options, e.g. `-DHAVE_ADJTIME=0'.
+** You can override these in your C compiler options, e.g. '-DHAVE_ADJTIME=0'.
*/
#ifndef HAVE_ADJTIME
@@ -62,25 +62,48 @@
#define HAVE_UTMPX_H 0
#endif /* !defined HAVE_UTMPX_H */
-#ifndef LOCALE_HOME
-#define LOCALE_HOME "/usr/lib/locale"
-#endif /* !defined LOCALE_HOME */
+#ifndef NETBSD_INSPIRED
+# define NETBSD_INSPIRED 1
+#endif
#if HAVE_INCOMPATIBLE_CTIME_R
#define asctime_r _incompatible_asctime_r
#define ctime_r _incompatible_ctime_r
#endif /* HAVE_INCOMPATIBLE_CTIME_R */
+/* Enable tm_gmtoff and tm_zone on GNUish systems. */
+#define _GNU_SOURCE 1
+/* Fix asctime_r on Solaris 10. */
+#define _POSIX_PTHREAD_SEMANTICS 1
+/* Enable strtoimax on Solaris 10. */
+#define __EXTENSIONS__ 1
+
/*
** Nested includes
*/
+/* Avoid clashes with NetBSD by renaming NetBSD's declarations. */
+#define localtime_rz sys_localtime_rz
+#define mktime_z sys_mktime_z
+#define posix2time_z sys_posix2time_z
+#define time2posix_z sys_time2posix_z
+#define timezone_t sys_timezone_t
+#define tzalloc sys_tzalloc
+#define tzfree sys_tzfree
+#include <time.h>
+#undef localtime_rz
+#undef mktime_z
+#undef posix2time_z
+#undef time2posix_z
+#undef timezone_t
+#undef tzalloc
+#undef tzfree
+
#include "sys/types.h" /* for time_t */
#include "stdio.h"
#include "errno.h"
#include "string.h"
#include "limits.h" /* for CHAR_BIT et al. */
-#include "time.h"
#include "stdlib.h"
#if HAVE_GETTEXT
@@ -102,6 +125,14 @@
#include "unistd.h" /* for F_OK, R_OK, and other POSIX goodness */
#endif /* HAVE_UNISTD_H */
+#ifndef HAVE_STRFTIME_L
+# if _POSIX_VERSION < 200809
+# define HAVE_STRFTIME_L 0
+# else
+# define HAVE_STRFTIME_L 1
+# endif
+#endif
+
#ifndef F_OK
#define F_OK 0
#endif /* !defined F_OK */
@@ -136,65 +167,86 @@
# include <inttypes.h>
#endif
-#ifndef INT_FAST64_MAX
/* Pre-C99 GCC compilers define __LONG_LONG_MAX__ instead of LLONG_MAX. */
-#if defined LLONG_MAX || defined __LONG_LONG_MAX__
-typedef long long int_fast64_t;
+#ifdef __LONG_LONG_MAX__
+# ifndef LLONG_MAX
+# define LLONG_MAX __LONG_LONG_MAX__
+# endif
+# ifndef LLONG_MIN
+# define LLONG_MIN (-1 - LLONG_MAX)
+# endif
+#endif
+
+#ifndef INT_FAST64_MAX
# ifdef LLONG_MAX
+typedef long long int_fast64_t;
# define INT_FAST64_MIN LLONG_MIN
# define INT_FAST64_MAX LLONG_MAX
# else
-# define INT_FAST64_MIN __LONG_LONG_MIN__
-# define INT_FAST64_MAX __LONG_LONG_MAX__
-# endif
-# define SCNdFAST64 "lld"
-#else /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
-#if (LONG_MAX >> 31) < 0xffffffff
+# if (LONG_MAX >> 31) < 0xffffffff
Please use a compiler that supports a 64-bit integer type (or wider);
you may need to compile with "-DHAVE_STDINT_H".
-#endif /* (LONG_MAX >> 31) < 0xffffffff */
+# endif
typedef long int_fast64_t;
-# define INT_FAST64_MIN LONG_MIN
-# define INT_FAST64_MAX LONG_MAX
-# define SCNdFAST64 "ld"
-#endif /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
-#endif /* !defined INT_FAST64_MAX */
+# define INT_FAST64_MIN LONG_MIN
+# define INT_FAST64_MAX LONG_MAX
+# endif
+#endif
+
+#ifndef SCNdFAST64
+# if INT_FAST64_MAX == LLONG_MAX
+# define SCNdFAST64 "lld"
+# else
+# define SCNdFAST64 "ld"
+# endif
+#endif
#ifndef INT_FAST32_MAX
# if INT_MAX >> 31 == 0
typedef long int_fast32_t;
+# define INT_FAST32_MAX LONG_MAX
+# define INT_FAST32_MIN LONG_MIN
# else
typedef int int_fast32_t;
+# define INT_FAST32_MAX INT_MAX
+# define INT_FAST32_MIN INT_MIN
# endif
#endif
#ifndef INTMAX_MAX
-# if defined LLONG_MAX || defined __LONG_LONG_MAX__
+# ifdef LLONG_MAX
typedef long long intmax_t;
# define strtoimax strtoll
-# define PRIdMAX "lld"
-# ifdef LLONG_MAX
-# define INTMAX_MAX LLONG_MAX
-# define INTMAX_MIN LLONG_MIN
-# else
-# define INTMAX_MAX __LONG_LONG_MAX__
-# define INTMAX_MIN __LONG_LONG_MIN__
-# endif
+# define INTMAX_MAX LLONG_MAX
+# define INTMAX_MIN LLONG_MIN
# else
typedef long intmax_t;
# define strtoimax strtol
-# define PRIdMAX "ld"
# define INTMAX_MAX LONG_MAX
# define INTMAX_MIN LONG_MIN
# endif
#endif
+#ifndef PRIdMAX
+# if INTMAX_MAX == LLONG_MAX
+# define PRIdMAX "lld"
+# else
+# define PRIdMAX "ld"
+# endif
+#endif
+
#ifndef UINTMAX_MAX
# if defined ULLONG_MAX || defined __LONG_LONG_MAX__
typedef unsigned long long uintmax_t;
-# define PRIuMAX "llu"
# else
typedef unsigned long uintmax_t;
+# endif
+#endif
+
+#ifndef PRIuMAX
+# if defined ULLONG_MAX || defined __LONG_LONG_MAX__
+# define PRIuMAX "llu"
+# else
# define PRIuMAX "lu"
# endif
#endif
@@ -237,16 +289,6 @@ typedef unsigned long uintmax_t;
*/
/*
-** Some time.h implementations don't declare asctime_r.
-** Others might define it as a macro.
-** Fix the former without affecting the latter.
-*/
-
-#ifndef asctime_r
-extern char * asctime_r(struct tm const *, char *);
-#endif
-
-/*
** Compile with -Dtime_tz=T to build the tz package with a private
** time_t type equivalent to T rather than the system-supplied time_t.
** This debugging feature can test unusual design decisions
@@ -254,7 +296,9 @@ extern char * asctime_r(struct tm const *, char *);
** typical platforms.
*/
#ifdef time_tz
+# ifdef LOCALTIME_IMPLEMENTATION
static time_t sys_time(time_t *x) { return time(x); }
+# endif
# undef ctime
# define ctime tz_ctime
@@ -272,10 +316,22 @@ static time_t sys_time(time_t *x) { return time(x); }
# define localtime_r tz_localtime_r
# undef mktime
# define mktime tz_mktime
+# undef offtime
+# define offtime tz_offtime
+# undef posix2time
+# define posix2time tz_posix2time
# undef time
# define time tz_time
+# undef time2posix
+# define time2posix tz_time2posix
# undef time_t
# define time_t tz_time_t
+# undef timegm
+# define timegm tz_timegm
+# undef timelocal
+# define timelocal tz_timelocal
+# undef timeoff
+# define timeoff tz_timeoff
typedef time_tz time_t;
@@ -287,15 +343,84 @@ struct tm *gmtime_r(time_t const *restrict, struct tm *restrict);
struct tm *localtime(time_t const *);
struct tm *localtime_r(time_t const *restrict, struct tm *restrict);
time_t mktime(struct tm *);
+time_t time(time_t *);
+#endif
+
+/*
+** Some time.h implementations don't declare asctime_r.
+** Others might define it as a macro.
+** Fix the former without affecting the latter.
+*/
+
+#ifndef asctime_r
+extern char * asctime_r(struct tm const *restrict, char *restrict);
+#endif
+
+/*
+** The STD_INSPIRED functions are similar, but most also need
+** declarations if time_tz is defined.
+*/
+
+#ifdef STD_INSPIRED
+# if !defined tzsetwall
+void tzsetwall(void);
+# endif
+# if !defined offtime || defined time_tz
+struct tm *offtime(time_t const *, long);
+# endif
+# if !defined timegm || defined time_tz
+time_t timegm(struct tm *);
+# endif
+# if !defined timelocal || defined time_tz
+time_t timelocal(struct tm *);
+# endif
+# if !defined timeoff || defined time_tz
+time_t timeoff(struct tm *, long);
+# endif
+# if !defined time2posix || defined time_tz
+time_t time2posix(time_t);
+# endif
+# if !defined posix2time || defined time_tz
+time_t posix2time(time_t);
+# endif
+#endif
+
+/* Infer TM_ZONE on systems where this information is known, but suppress
+ guessing if NO_TM_ZONE is defined. Similarly for TM_GMTOFF. */
+#if (defined __GLIBC__ \
+ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ \
+ || (defined __APPLE__ && defined __MACH__))
+# if !defined TM_GMTOFF && !defined NO_TM_GMTOFF
+# define TM_GMTOFF tm_gmtoff
+# endif
+# if !defined TM_ZONE && !defined NO_TM_ZONE
+# define TM_ZONE tm_zone
+# endif
+#endif
-static time_t
-time(time_t *p)
-{
- time_t r = sys_time(0);
- if (p)
- *p = r;
- return r;
-}
+/*
+** Define functions that are ABI compatible with NetBSD but have
+** better prototypes. NetBSD 6.1.4 defines a pointer type timezone_t
+** and labors under the misconception that 'const timezone_t' is a
+** pointer to a constant. This use of 'const' is ineffective, so it
+** is not done here. What we call 'struct state' NetBSD calls
+** 'struct __state', but this is a private name so it doesn't matter.
+*/
+#if NETBSD_INSPIRED
+typedef struct state *timezone_t;
+struct tm *localtime_rz(timezone_t restrict, time_t const *restrict,
+ struct tm *restrict);
+time_t mktime_z(timezone_t restrict, struct tm *restrict);
+timezone_t tzalloc(char const *);
+void tzfree(timezone_t);
+# ifdef STD_INSPIRED
+# if !defined posix2time_z || defined time_tz
+time_t posix2time_z(timezone_t, time_t) ATTRIBUTE_PURE;
+# endif
+# if !defined time2posix_z || defined time_tz
+time_t time2posix_z(timezone_t, time_t) ATTRIBUTE_PURE;
+# endif
+# endif
#endif
/*
@@ -310,13 +435,13 @@ const char * scheck(const char * string, const char * format);
** Finally, some convenience items.
*/
-#ifndef TRUE
-#define TRUE 1
-#endif /* !defined TRUE */
-
-#ifndef FALSE
-#define FALSE 0
-#endif /* !defined FALSE */
+#if __STDC_VERSION__ < 199901
+# define true 1
+# define false 0
+# define bool int
+#else
+# include <stdbool.h>
+#endif
#ifndef TYPE_BIT
#define TYPE_BIT(type) (sizeof (type) * CHAR_BIT)
@@ -352,29 +477,19 @@ static time_t const time_t_max =
** INITIALIZE(x)
*/
-#ifndef GNUC_or_lint
#ifdef lint
-#define GNUC_or_lint
-#endif /* defined lint */
-#ifndef lint
-#ifdef __GNUC__
-#define GNUC_or_lint
-#endif /* defined __GNUC__ */
-#endif /* !defined lint */
-#endif /* !defined GNUC_or_lint */
-
-#ifndef INITIALIZE
-#ifdef GNUC_or_lint
-#define INITIALIZE(x) ((x) = 0)
-#endif /* defined GNUC_or_lint */
-#ifndef GNUC_or_lint
-#define INITIALIZE(x)
-#endif /* !defined GNUC_or_lint */
-#endif /* !defined INITIALIZE */
+# define INITIALIZE(x) ((x) = 0)
+#else
+# define INITIALIZE(x)
+#endif
+
+#ifndef UNINIT_TRAP
+# define UNINIT_TRAP 0
+#endif
/*
** For the benefit of GNU folk...
-** `_(MSGID)' uses the current locale's message library string for MSGID.
+** '_(MSGID)' uses the current locale's message library string for MSGID.
** The default is to use gettext if available, and use MSGID otherwise.
*/
@@ -386,9 +501,9 @@ static time_t const time_t_max =
#endif /* !HAVE_GETTEXT */
#endif /* !defined _ */
-#ifndef TZ_DOMAIN
-#define TZ_DOMAIN "tz"
-#endif /* !defined TZ_DOMAIN */
+#if !defined TZ_DOMAIN && defined HAVE_GETTEXT
+# define TZ_DOMAIN "tz"
+#endif
#if HAVE_INCOMPATIBLE_CTIME_R
#undef asctime_r
@@ -417,8 +532,4 @@ char *ctime_r(time_t const *, char *);
#define SECSPERREPEAT_BITS 34 /* ceil(log2(SECSPERREPEAT)) */
#endif /* !defined SECSPERREPEAT_BITS */
-/*
-** UNIX was a registered trademark of The Open Group in 2003.
-*/
-
#endif /* !defined PRIVATE_H */
diff --git a/elsie.nci.nih.gov/src/southamerica b/elsie.nci.nih.gov/src/southamerica
index 5391055..e246646 100644
--- a/elsie.nci.nih.gov/src/southamerica
+++ b/elsie.nci.nih.gov/src/southamerica
@@ -1,10 +1,10 @@
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future). For more, please see
+# the file CONTRIBUTING in the tz distribution.
# From Paul Eggert (2006-03-22):
# A good source for time zone historical data outside the U.S. is
@@ -12,8 +12,8 @@
# San Diego: ACS Publications, Inc. (2003).
#
# For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
-# <http://www.jstor.org/stable/1774359>.
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
+# http://www.jstor.org/stable/1774359
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
@@ -30,24 +30,24 @@
# I suggest the use of _Summer time_ instead of the more cumbersome
# _daylight-saving time_. _Summer time_ seems to be in general use
# in Europe and South America.
-# -- E O Cutler, _New York Times_ (1937-02-14), quoted in
+# -- E O Cutler, _New York Times_ (1937-02-14), quoted in
# H L Mencken, _The American Language: Supplement I_ (1960), p 466
#
# Earlier editions of these tables also used the North American style
# for time zones in Brazil, but this was incorrect, as Brazilians say
-# "summer time". Reinaldo Goulart, a Sao Paulo businessman active in
+# "summer time". Reinaldo Goulart, a São Paulo businessman active in
# the railroad sector, writes (1999-07-06):
# The subject of time zones is currently a matter of discussion/debate in
-# Brazil. Let's say that "the Brasilia time" is considered the
-# "official time" because Brasilia is the capital city.
-# The other three time zones are called "Brasilia time "minus one" or
+# Brazil. Let's say that "the Brasília time" is considered the
+# "official time" because Brasília is the capital city.
+# The other three time zones are called "Brasília time "minus one" or
# "plus one" or "plus two". As far as I know there is no such
# name/designation as "Eastern Time" or "Central Time".
# So I invented the following (English-language) abbreviations for now.
# Corrections are welcome!
# std dst
# -2:00 FNT FNST Fernando de Noronha
-# -3:00 BRT BRST Brasilia
+# -3:00 BRT BRST Brasília
# -4:00 AMT AMST Amazon
# -5:00 ACT ACST Acre
@@ -61,7 +61,7 @@
# Argentina: first Sunday in October to first Sunday in April since 1976.
# Double Summer time from 1969 to 1974. Switches at midnight.
-# From U. S. Naval Observatory (1988-01-199):
+# From U. S. Naval Observatory (1988-01-19):
# ARGENTINA 3 H BEHIND UTC
# From Hernan G. Otero (1995-06-26):
@@ -95,7 +95,7 @@ Rule Arg 1988 only - Dec 1 0:00 1:00 S
# From Hernan G. Otero (1995-06-26):
# These corrections were contributed by InterSoft Argentina S.A.,
# obtaining the data from the:
-# Talleres de Hidrografia Naval Argentina
+# Talleres de Hidrografía Naval Argentina
# (Argentine Naval Hydrography Institute)
Rule Arg 1989 1993 - Mar Sun>=1 0:00 0 -
Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 S
@@ -117,13 +117,13 @@ Rule Arg 1999 only - Oct Sun>=1 0:00 1:00 S
Rule Arg 2000 only - Mar 3 0:00 0 -
#
# From Peter Gradelski via Steffen Thorsen (2000-03-01):
-# We just checked with our Sao Paulo office and they say the government of
+# We just checked with our São Paulo office and they say the government of
# Argentina decided not to become one of the countries that go on or off DST.
# So Buenos Aires should be -3 hours from GMT at all times.
#
-# From Fabian L. Arce Jofre (2000-04-04):
+# From Fabián L. Arce Jofré (2000-04-04):
# The law that claimed DST for Argentina was derogated by President Fernando
-# de la Rua on March 2, 2000, because it would make people spend more energy
+# de la Rúa on March 2, 2000, because it would make people spend more energy
# in the winter time, rather than less. The change took effect on March 3.
#
# From Mariano Absatz (2001-06-06):
@@ -156,15 +156,13 @@ Rule Arg 2000 only - Mar 3 0:00 0 -
# that Argentina will use DST next year as well, from October to
# March, although exact rules are not given.
#
-# From Jesper Norgaard Welen (2007-12-26)
+# From Jesper Nørgaard Welen (2007-12-26)
# The last hurdle of Argentina DST is over, the proposal was approved in
-# the lower chamber too (Deputados) with a vote 192 for and 2 against.
+# the lower chamber too (Diputados) with a vote 192 for and 2 against.
# By the way thanks to Mariano Absatz and Daniel Mario Vega for the link to
# the original scanned proposal, where the dates and the zero hours are
# clear and unambiguous...This is the article about final approval:
-# <a href="http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996">
# http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996
-# </a>
#
# From Paul Eggert (2007-12-22):
# For dates after mid-2008, the following rules are my guesses and
@@ -174,13 +172,8 @@ Rule Arg 2000 only - Mar 3 0:00 0 -
# As per message from Carlos Alberto Fonseca Arauz (Nicaragua),
# Argentina will start DST on Sunday October 19, 2008.
#
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_argentina03.html">
# http://www.worldtimezone.com/dst_news/dst_news_argentina03.html
-# </a>
-# OR
-# <a href="http://www.impulsobaires.com.ar/nota.php?id=57832 (in spanish)">
# http://www.impulsobaires.com.ar/nota.php?id=57832 (in spanish)
-# </a>
# From Rodrigo Severo (2008-10-06):
# Here is some info available at a Gentoo bug related to TZ on Argentina's DST:
@@ -189,48 +182,39 @@ Rule Arg 2000 only - Mar 3 0:00 0 -
# Hi, there is a problem with timezone-data-2008e and maybe with
# timezone-data-2008f
# Argentinian law [Number] 25.155 is no longer valid.
-# <a href="http://www.infoleg.gov.ar/infolegInternet/anexos/60000-64999/60036/norma.htm">
# http://www.infoleg.gov.ar/infolegInternet/anexos/60000-64999/60036/norma.htm
-# </a>
# The new one is law [Number] 26.350
-# <a href="http://www.infoleg.gov.ar/infolegInternet/anexos/135000-139999/136191/norma.htm">
# http://www.infoleg.gov.ar/infolegInternet/anexos/135000-139999/136191/norma.htm
-# </a>
# So there is no summer time in Argentina for now.
# From Mariano Absatz (2008-10-20):
-# Decree 1693/2008 applies Law 26.350 for the summer 2008/2009 establishing DST in Argentina
-# From 2008-10-19 until 2009-03-15
-# <a href="http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=16102008&pi=3&pf=4&s=0&sec=01">
+# Decree 1693/2008 applies Law 26.350 for the summer 2008/2009 establishing DST
+# in Argentina from 2008-10-19 until 2009-03-15.
# http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=16102008&pi=3&pf=4&s=0&sec=01
-# </a>
#
-# Decree 1705/2008 excepting 12 Provinces from applying DST in the summer 2008/2009:
-# Catamarca, La Rioja, Mendoza, Salta, San Juan, San Luis, La Pampa, Neuquen, Rio Negro, Chubut, Santa Cruz
-# and Tierra del Fuego
-# <a href="http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=17102008&pi=1&pf=1&s=0&sec=01">
+
+# Decree 1705/2008 excepting 12 Provinces from applying DST in the summer
+# 2008/2009: Catamarca, La Rioja, Mendoza, Salta, San Juan, San Luis, La
+# Pampa, Neuquén, Rio Negro, Chubut, Santa Cruz and Tierra del Fuego
# http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=17102008&pi=1&pf=1&s=0&sec=01
-# </a>
#
-# Press release 235 dated Saturday October 18th, from the Government of the Province of Jujuy saying
-# it will not apply DST either (even when it was not included in Decree 1705/2008)
-# <a href="http://www.jujuy.gov.ar/index2/partes_prensa/18_10_08/235-181008.doc">
+# Press release 235 dated Saturday October 18th, from the Government of the
+# Province of Jujuy saying it will not apply DST either (even when it was not
+# included in Decree 1705/2008).
# http://www.jujuy.gov.ar/index2/partes_prensa/18_10_08/235-181008.doc
-# </a>
# From fullinet (2009-10-18):
# As announced in
-# <a hef="http://www.argentina.gob.ar/argentina/portal/paginas.dhtml?pagina=356">
# http://www.argentina.gob.ar/argentina/portal/paginas.dhtml?pagina=356
-# </a>
-# (an official .gob.ar) under title: "Sin Cambio de Hora" (english: "No hour change")
+# (an official .gob.ar) under title: "Sin Cambio de Hora"
+# (English: "No hour change").
#
-# "Por el momento, el Gobierno Nacional resolvio no modificar la hora
-# oficial, decision que estaba en estudio para su implementacion el
-# domingo 18 de octubre. Desde el Ministerio de Planificacion se anuncio
-# que la Argentina hoy, en estas condiciones meteorologicas, no necesita
-# la modificacion del huso horario, ya que 2009 nos encuentra con
-# crecimiento en la produccion y distribucion energetica."
+# "Por el momento, el Gobierno Nacional resolvió no modificar la hora
+# oficial, decisión que estaba en estudio para su implementación el
+# domingo 18 de octubre. Desde el Ministerio de Planificación se anunció
+# que la Argentina hoy, en estas condiciones meteorológicas, no necesita
+# la modificación del huso horario, ya que 2009 nos encuentra con
+# crecimiento en la producción y distribución energética."
Rule Arg 2007 only - Dec 30 0:00 1:00 S
Rule Arg 2008 2009 - Mar Sun>=15 0:00 0 -
@@ -244,10 +228,10 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
# It's Law No. 7,210. This change is due to a public power emergency, so for
# now we'll assume it's for this year only.
#
-# From Paul Eggert (2006-03-22):
-# <a href="http://www.spicasc.net/horvera.html">
-# Hora de verano para la Republica Argentina (2003-06-08)
-# </a> says that standard time in Argentina from 1894-10-31
+# From Paul Eggert (2014-08-09):
+# Hora de verano para la República Argentina
+# http://buenasiembra.com.ar/esoterismo/astrologia/hora-de-verano-de-la-republica-argentina-27.html
+# says that standard time in Argentina from 1894-10-31
# to 1920-05-01 was -4:16:48.25. Go with this more-precise value
# over Shanks & Pottenger.
#
@@ -262,10 +246,10 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
# time in October 17th.
#
# Catamarca, Chubut, La Rioja, San Juan, San Luis, Santa Cruz,
-# Tierra del Fuego, Tucuman.
+# Tierra del Fuego, Tucumán.
#
# From Mariano Absatz (2004-06-14):
-# ... this weekend, the Province of Tucuman decided it'd go back to UTC-03:00
+# ... this weekend, the Province of Tucumán decided it'd go back to UTC-03:00
# yesterday midnight (that is, at 24:00 Saturday 12th), since the people's
# annoyance with the change is much higher than the power savings obtained....
#
@@ -300,49 +284,38 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
# Here are articles that Argentina Province San Luis is planning to end DST
# as earlier as upcoming Monday January 21, 2008 or February 2008:
#
-# Provincia argentina retrasa reloj y marca diferencia con resto del pais
+# Provincia argentina retrasa reloj y marca diferencia con resto del país
# (Argentine Province delayed clock and mark difference with the rest of the
# country)
-# <a href="http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel">
# http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel
-# </a>
#
# Es inminente que en San Luis atrasen una hora los relojes
# (It is imminent in San Luis clocks one hour delay)
-# <a href="http://www.lagaceta.com.ar/vernotae.asp?id_nota=253414">
-# http://www.lagaceta.com.ar/vernotae.asp?id_nota=253414
-# </a>
-#
-# <a href="http://www.worldtimezone.net/dst_news/dst_news_argentina02.html">
+# http://www.lagaceta.com.ar/nota/253414/Economia/Es-inminente-que-en-San-Luis-atrasen-una-hora-los-relojes.html
# http://www.worldtimezone.net/dst_news/dst_news_argentina02.html
-# </a>
-# From Jesper Norgaard Welen (2008-01-18):
+# From Jesper Nørgaard Welen (2008-01-18):
# The page of the San Luis provincial government
-# <a href="http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812">
# http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812
-# </a>
# confirms what Alex Krivenyshev has earlier sent to the tz
# emailing list about that San Luis plans to return to standard
# time much earlier than the rest of the country. It also
# confirms that upon request the provinces San Juan and Mendoza
# refused to follow San Luis in this change.
#
-# The change is supposed to take place Monday the 21.st at 0:00
+# The change is supposed to take place Monday the 21st at 0:00
# hours. As far as I understand it if this goes ahead, we need
# a new timezone for San Luis (although there are also documented
# independent changes in the southamerica file of San Luis in
# 1990 and 1991 which has not been confirmed).
-# From Jesper Norgaard Welen (2008-01-25):
+# From Jesper Nørgaard Welen (2008-01-25):
# Unfortunately the below page has become defunct, about the San Luis
# time change. Perhaps because it now is part of a group of pages "Most
# important pages of 2008."
#
# You can use
-# <a href="http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834">
# http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834
-# </a>
# instead it seems. Or use "Buscador" from the main page of the San Luis
# government, and fill in "huso" and click OK, and you will get 3 pages
# from which the first one is identical to the above.
@@ -362,9 +335,9 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
# back in 2004, when these provinces changed to UTC-4 for a few days, I
# mailed them personally and never got an answer).
-# From Paul Eggert (2008-06-30):
-# Unless otherwise specified, data are from Shanks & Pottenger through 1992,
-# from the IATA otherwise. As noted below, Shanks & Pottenger say that
+# From Paul Eggert (2014-08-12):
+# Unless otherwise specified, data entries are from Shanks & Pottenger through
+# 1992, from the IATA otherwise. As noted below, Shanks & Pottenger say that
# America/Cordoba split into 6 subregions during 1991/1992, one of which
# was America/San_Luis, but we haven't verified this yet so for now we'll
# keep America/Cordoba a single region rather than splitting it into the
@@ -376,14 +349,9 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
# to utc-04:00 until the second Saturday in October...
#
# The press release is at
-# <a href="http://www.sanluis.gov.ar/SL/Paginas/NoticiaDetalle.asp?TemaId=1&InfoPrensaId=3102">
# http://www.sanluis.gov.ar/SL/Paginas/NoticiaDetalle.asp?TemaId=1&InfoPrensaId=3102
-# </a>
-# (I couldn't find the decree, but
-# <a href="http://www.sanluis.gov.ar">
-# www.sanluis.gov.ar
-# <a/>
-# is the official page for the Province Government).
+# (I couldn't find the decree, but www.sanluis.gov.ar
+# is the official page for the Province Government.)
#
# There's also a note in only one of the major national papers ...
# http://www.lanacion.com.ar/nota.asp?nota_id=1107912
@@ -400,9 +368,7 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
# ...the Province of San Luis is a case in itself.
#
# The Law at
-# <a href="http://www.diputadossanluis.gov.ar/diputadosasp/paginas/verNorma.asp?NormaID=276>"
# http://www.diputadossanluis.gov.ar/diputadosasp/paginas/verNorma.asp?NormaID=276
-# </a>
# is ambiguous because establishes a calendar from the 2nd Sunday in
# October at 0:00 thru the 2nd Saturday in March at 24:00 and the
# complement of that starting on the 2nd Sunday of March at 0:00 and
@@ -431,19 +397,15 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
# ...
# From Alexander Krivenyshev (2010-04-09):
-# According to news reports from El Diario de la Republica Province San
+# According to news reports from El Diario de la República Province San
# Luis, Argentina (standard time UTC-04) will keep Daylight Saving Time
-# after April 11, 2010--will continue to have same time as rest of
+# after April 11, 2010 - will continue to have same time as rest of
# Argentina (UTC-3) (no DST).
#
-# Confirmaron la pr&oacute;rroga del huso horario de verano (Spanish)
-# <a href="http://www.eldiariodelarepublica.com/index.php?option=com_content&task=view&id=29383&Itemid=9">
+# Confirmaron la prórroga del huso horario de verano (Spanish)
# http://www.eldiariodelarepublica.com/index.php?option=com_content&task=view&id=29383&Itemid=9
-# </a>
# or (some English translation):
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_argentina08.html">
# http://www.worldtimezone.com/dst_news/dst_news_argentina08.html
-# </a>
# From Mariano Absatz (2010-04-12):
# yes...I can confirm this...and given that San Luis keeps calling
@@ -455,7 +417,7 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
# Perhaps San Luis operates on the legal fiction that it is at UTC-4
# with perpetual summer time, but ordinary usage typically seems to
# just say it's at UTC-3; see, for example,
-# <http://es.wikipedia.org/wiki/Hora_oficial_argentina>.
+# http://es.wikipedia.org/wiki/Hora_oficial_argentina
# We've documented similar situations as being plain changes to
# standard time, so let's do that here too. This does not change UTC
# offsets, only tm_isdst and the time zone abbreviations. One minor
@@ -463,20 +425,20 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
# setting for time stamps past 2038.
# From Paul Eggert (2013-02-21):
-# Milne says Cordoba time was -4:16:48.2. Round to the nearest second.
+# Milne says Córdoba time was -4:16:48.2. Round to the nearest second.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
#
# Buenos Aires (BA), Capital Federal (CF),
-Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
- -4:16:48 - CMT 1920 May # Cordoba Mean Time
+Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May # Córdoba Mean Time
-4:00 - ART 1930 Dec
-4:00 Arg AR%sT 1969 Oct 5
-3:00 Arg AR%sT 1999 Oct 3
-4:00 Arg AR%sT 2000 Mar 3
-3:00 Arg AR%sT
#
-# Cordoba (CB), Santa Fe (SF), Entre Rios (ER), Corrientes (CN), Misiones (MN),
+# Córdoba (CB), Santa Fe (SF), Entre Ríos (ER), Corrientes (CN), Misiones (MN),
# Chaco (CC), Formosa (FM), Santiago del Estero (SE)
#
# Shanks & Pottenger also make the following claims, which we haven't verified:
@@ -496,7 +458,7 @@ Zone America/Argentina/Cordoba -4:16:48 - LMT 1894 Oct 31
-4:00 Arg AR%sT 2000 Mar 3
-3:00 Arg AR%sT
#
-# Salta (SA), La Pampa (LP), Neuquen (NQ), Rio Negro (RN)
+# Salta (SA), La Pampa (LP), Neuquén (NQ), Rio Negro (RN)
Zone America/Argentina/Salta -4:21:40 - LMT 1894 Oct 31
-4:16:48 - CMT 1920 May
-4:00 - ART 1930 Dec
@@ -508,7 +470,7 @@ Zone America/Argentina/Salta -4:21:40 - LMT 1894 Oct 31
-3:00 Arg AR%sT 2008 Oct 18
-3:00 - ART
#
-# Tucuman (TM)
+# Tucumán (TM)
Zone America/Argentina/Tucuman -4:20:52 - LMT 1894 Oct 31
-4:16:48 - CMT 1920 May
-4:00 - ART 1930 Dec
@@ -619,8 +581,8 @@ Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31
-3:00 - ART
#
# Santa Cruz (SC)
-Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
- -4:16:48 - CMT 1920 May # Cordoba Mean Time
+Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May # Córdoba Mean Time
-4:00 - ART 1930 Dec
-4:00 Arg AR%sT 1969 Oct 5
-3:00 Arg AR%sT 1999 Oct 3
@@ -630,9 +592,9 @@ Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
-3:00 Arg AR%sT 2008 Oct 18
-3:00 - ART
#
-# Tierra del Fuego, Antartida e Islas del Atlantico Sur (TF)
-Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
- -4:16:48 - CMT 1920 May # Cordoba Mean Time
+# Tierra del Fuego, Antártida e Islas del Atlántico Sur (TF)
+Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May # Córdoba Mean Time
-4:00 - ART 1930 Dec
-4:00 Arg AR%sT 1969 Oct 5
-3:00 Arg AR%sT 1999 Oct 3
@@ -663,13 +625,13 @@ Zone America/La_Paz -4:32:36 - LMT 1890
# From IATA SSIM (1996-02):
# _Only_ the following states in BR1 observe DST: Rio Grande do Sul (RS),
-# Santa Catarina (SC), Parana (PR), Sao Paulo (SP), Rio de Janeiro (RJ),
-# Espirito Santo (ES), Minas Gerais (MG), Bahia (BA), Goias (GO),
+# Santa Catarina (SC), Paraná (PR), São Paulo (SP), Rio de Janeiro (RJ),
+# Espírito Santo (ES), Minas Gerais (MG), Bahia (BA), Goiás (GO),
# Distrito Federal (DF), Tocantins (TO), Sergipe [SE] and Alagoas [AL].
# [The last three states are new to this issue of the IATA SSIM.]
# From Gwillim Law (1996-10-07):
-# Geography, history (Tocantins was part of Goias until 1989), and other
+# Geography, history (Tocantins was part of Goiás until 1989), and other
# sources of time zone information lead me to believe that AL, SE, and TO were
# always in BR1, and so the only change was whether or not they observed DST....
# The earliest issue of the SSIM I have is 2/91. Each issue from then until
@@ -683,16 +645,14 @@ Zone America/La_Paz -4:32:36 - LMT 1890
# However, some conclusions can be drawn from another IATA manual: the Airline
# Coding Directory, which lists close to 400 airports in Brazil. For each
# airport it gives a time zone which is coded to the SSIM. From that
-# information, I'm led to conclude that the states of Amapa (AP), Ceara (CE),
-# Maranhao (MA), Paraiba (PR), Pernambuco (PE), Piaui (PI), and Rio Grande do
-# Norte (RN), and the eastern part of Para (PA) are all in BR1 without DST.
+# information, I'm led to conclude that the states of Amapá (AP), Ceará (CE),
+# Maranhão (MA), Paraíba (PR), Pernambuco (PE), Piauí (PI), and Rio Grande do
+# Norte (RN), and the eastern part of Pará (PA) are all in BR1 without DST.
# From Marcos Tadeu (1998-09-27):
-# <a href="http://pcdsh01.on.br/verao1.html">
-# Brazilian official page
-# </a>
+# Brazilian official page <http://pcdsh01.on.br/verao1.html>
-# From Jesper Norgaard (2000-11-03):
+# From Jesper Nørgaard (2000-11-03):
# [For an official list of which regions in Brazil use which time zones, see:]
# http://pcdsh01.on.br/Fusbr.htm
# http://pcdsh01.on.br/Fusbrhv.htm
@@ -725,13 +685,13 @@ Zone America/La_Paz -4:32:36 - LMT 1890
# From Paul Schulze (2008-06-24):
# ...by law number 11.662 of April 24, 2008 (published in the "Diario
-# Oficial da Uniao"...) in Brazil there are changes in the timezones,
+# Oficial da União"...) in Brazil there are changes in the timezones,
# effective today (00:00am at June 24, 2008) as follows:
#
-# a) The timezone UTC+5 is e[x]tinguished, with all the Acre state and the
+# a) The timezone UTC+5 is extinguished, with all the Acre state and the
# part of the Amazonas state that had this timezone now being put to the
# timezone UTC+4
-# b) The whole Para state now is put at timezone UTC+3, instead of just
+# b) The whole Pará state now is put at timezone UTC+3, instead of just
# part of it, as was before.
#
# This change follows a proposal of senator Tiao Viana of Acre state, that
@@ -744,13 +704,11 @@ Zone America/La_Paz -4:32:36 - LMT 1890
# From Rodrigo Severo (2008-06-24):
# Just correcting the URL:
-# <a href="https://www.in.gov.br/imprensa/visualiza/index.jsp?jornal=do&secao=1&pagina=1&data=25/04/2008">
# https://www.in.gov.br/imprensa/visualiza/index.jsp?jornal=do&secao=1&pagina=1&data=25/04/2008
-# </a>
#
# As a result of the above Decree I believe the America/Rio_Branco
# timezone shall be modified from UTC-5 to UTC-4 and a new timezone shall
-# be created to represent the...west side of the Para State. I
+# be created to represent the...west side of the Pará State. I
# suggest this new timezone be called Santarem as the most
# important/populated city in the affected area.
#
@@ -759,19 +717,16 @@ Zone America/La_Paz -4:32:36 - LMT 1890
# From Alex Krivenyshev (2008-06-24):
# This is a quick reference page for New and Old Brazil Time Zones map.
-# <a href="http://www.worldtimezone.com/brazil-time-new-old.php">
# http://www.worldtimezone.com/brazil-time-new-old.php
-# </a>
#
-# - 4 time zones replaced by 3 time zones-eliminating time zone UTC- 05
-# (state Acre and the part of the Amazonas will be UTC/GMT- 04) - western
-# part of Par state is moving to one timezone UTC- 03 (from UTC -04).
+# - 4 time zones replaced by 3 time zones - eliminating time zone UTC-05
+# (state Acre and the part of the Amazonas will be UTC/GMT-04) - western
+# part of Par state is moving to one timezone UTC-03 (from UTC-04).
# From Paul Eggert (2002-10-10):
# The official decrees referenced below are mostly taken from
-# <a href="http://pcdsh01.on.br/DecHV.html">
-# Decretos sobre o Horario de Verao no Brasil
-# </a>.
+# Decretos sobre o Horário de Verão no Brasil.
+# http://pcdsh01.on.br/DecHV.html
# From Steffen Thorsen (2008-08-29):
# As announced by the government and many newspapers in Brazil late
@@ -783,25 +738,17 @@ Zone America/La_Paz -4:32:36 - LMT 1890
# It has not yet been posted to http://pcdsh01.on.br/DecHV.html
#
# An official page about it:
-# <a href="http://www.mme.gov.br/site/news/detail.do?newsId=16722">
# http://www.mme.gov.br/site/news/detail.do?newsId=16722
-# </a>
# Note that this link does not always work directly, but must be accessed
# by going to
-# <a href="http://www.mme.gov.br/first">
# http://www.mme.gov.br/first
-# </a>
#
# One example link that works directly:
-# <a href="http://jornale.com.br/index.php?option=com_content&task=view&id=13530&Itemid=54">
# http://jornale.com.br/index.php?option=com_content&task=view&id=13530&Itemid=54
# (Portuguese)
-# </a>
#
# We have a written a short article about it as well:
-# <a href="http://www.timeanddate.com/news/time/brazil-dst-2008-2009.html">
# http://www.timeanddate.com/news/time/brazil-dst-2008-2009.html
-# </a>
#
# From Alexander Krivenyshev (2011-10-04):
# State Bahia will return to Daylight savings time this year after 8 years off.
@@ -809,17 +756,12 @@ Zone America/La_Paz -4:32:36 - LMT 1890
# television station in Salvador.
# In Portuguese:
-# <a href="http://g1.globo.com/bahia/noticia/2011/10/governador-jaques-wagner-confirma-horario-de-verao-na-bahia.html">
# http://g1.globo.com/bahia/noticia/2011/10/governador-jaques-wagner-confirma-horario-de-verao-na-bahia.html
-# </a> and
-# <a href="http://noticias.terra.com.br/brasil/noticias/0,,OI5390887-EI8139,00-Bahia+volta+a+ter+horario+de+verao+apos+oito+anos.html">
# http://noticias.terra.com.br/brasil/noticias/0,,OI5390887-EI8139,00-Bahia+volta+a+ter+horario+de+verao+apos+oito+anos.html
-# </a>
# From Guilherme Bernardes Rodrigues (2011-10-07):
# There is news in the media, however there is still no decree about it.
-# I just send a e-mail to Zulmira Brandao at
-# <a href="http://pcdsh01.on.br/">http://pcdsh01.on.br/</a> the
+# I just send a e-mail to Zulmira Brandao at http://pcdsh01.on.br/ the
# official agency about time in Brazil, and she confirmed that the old rule is
# still in force.
@@ -831,9 +773,7 @@ Zone America/La_Paz -4:32:36 - LMT 1890
#
# DECRETO No- 7.584, DE 13 DE OUTUBRO DE 2011
# Link :
-# <a href="http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6">
# http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6
-# </a>
# From Kelley Cook (2012-10-16):
# The governor of state of Bahia in Brazil announced on Thursday that
@@ -861,42 +801,42 @@ Zone America/La_Paz -4:32:36 - LMT 1890
# For now, assume western Amazonas will change as well.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# Decree <a href="http://pcdsh01.on.br/HV20466.htm">20,466</a> (1931-10-01)
-# Decree <a href="http://pcdsh01.on.br/HV21896.htm">21,896</a> (1932-01-10)
+# Decree 20,466 <http://pcdsh01.on.br/HV20466.htm> (1931-10-01)
+# Decree 21,896 <http://pcdsh01.on.br/HV21896.htm> (1932-01-10)
Rule Brazil 1931 only - Oct 3 11:00 1:00 S
Rule Brazil 1932 1933 - Apr 1 0:00 0 -
Rule Brazil 1932 only - Oct 3 0:00 1:00 S
-# Decree <a href="http://pcdsh01.on.br/HV23195.htm">23,195</a> (1933-10-10)
+# Decree 23,195 <http://pcdsh01.on.br/HV23195.htm> (1933-10-10)
# revoked DST.
-# Decree <a href="http://pcdsh01.on.br/HV27496.htm">27,496</a> (1949-11-24)
-# Decree <a href="http://pcdsh01.on.br/HV27998.htm">27,998</a> (1950-04-13)
+# Decree 27,496 <http://pcdsh01.on.br/HV27496.htm> (1949-11-24)
+# Decree 27,998 <http://pcdsh01.on.br/HV27998.htm> (1950-04-13)
Rule Brazil 1949 1952 - Dec 1 0:00 1:00 S
Rule Brazil 1950 only - Apr 16 1:00 0 -
Rule Brazil 1951 1952 - Apr 1 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV32308.htm">32,308</a> (1953-02-24)
+# Decree 32,308 <http://pcdsh01.on.br/HV32308.htm> (1953-02-24)
Rule Brazil 1953 only - Mar 1 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV34724.htm">34,724</a> (1953-11-30)
+# Decree 34,724 <http://pcdsh01.on.br/HV34724.htm> (1953-11-30)
# revoked DST.
-# Decree <a href="http://pcdsh01.on.br/HV52700.htm">52,700</a> (1963-10-18)
+# Decree 52,700 <http://pcdsh01.on.br/HV52700.htm> (1963-10-18)
# established DST from 1963-10-23 00:00 to 1964-02-29 00:00
# in SP, RJ, GB, MG, ES, due to the prolongation of the drought.
-# Decree <a href="http://pcdsh01.on.br/HV53071.htm">53,071</a> (1963-12-03)
+# Decree 53,071 <http://pcdsh01.on.br/HV53071.htm> (1963-12-03)
# extended the above decree to all of the national territory on 12-09.
Rule Brazil 1963 only - Dec 9 0:00 1:00 S
-# Decree <a href="http://pcdsh01.on.br/HV53604.htm">53,604</a> (1964-02-25)
+# Decree 53,604 <http://pcdsh01.on.br/HV53604.htm> (1964-02-25)
# extended summer time by one day to 1964-03-01 00:00 (start of school).
Rule Brazil 1964 only - Mar 1 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV55639.htm">55,639</a> (1965-01-27)
+# Decree 55,639 <http://pcdsh01.on.br/HV55639.htm> (1965-01-27)
Rule Brazil 1965 only - Jan 31 0:00 1:00 S
Rule Brazil 1965 only - Mar 31 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV57303.htm">57,303</a> (1965-11-22)
+# Decree 57,303 <http://pcdsh01.on.br/HV57303.htm> (1965-11-22)
Rule Brazil 1965 only - Dec 1 0:00 1:00 S
-# Decree <a href="http://pcdsh01.on.br/HV57843.htm">57,843</a> (1966-02-18)
+# Decree 57,843 <http://pcdsh01.on.br/HV57843.htm> (1966-02-18)
Rule Brazil 1966 1968 - Mar 1 0:00 0 -
Rule Brazil 1966 1967 - Nov 1 0:00 1:00 S
-# Decree <a href="http://pcdsh01.on.br/HV63429.htm">63,429</a> (1968-10-15)
+# Decree 63,429 <http://pcdsh01.on.br/HV63429.htm> (1968-10-15)
# revoked DST.
-# Decree <a href="http://pcdsh01.on.br/HV91698.htm">91,698</a> (1985-09-27)
+# Decree 91,698 <http://pcdsh01.on.br/HV91698.htm> (1985-09-27)
Rule Brazil 1985 only - Nov 2 0:00 1:00 S
# Decree 92,310 (1986-01-21)
# Decree 92,463 (1986-03-13)
@@ -904,42 +844,42 @@ Rule Brazil 1986 only - Mar 15 0:00 0 -
# Decree 93,316 (1986-10-01)
Rule Brazil 1986 only - Oct 25 0:00 1:00 S
Rule Brazil 1987 only - Feb 14 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV94922.htm">94,922</a> (1987-09-22)
+# Decree 94,922 <http://pcdsh01.on.br/HV94922.htm> (1987-09-22)
Rule Brazil 1987 only - Oct 25 0:00 1:00 S
Rule Brazil 1988 only - Feb 7 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV96676.htm">96,676</a> (1988-09-12)
+# Decree 96,676 <http://pcdsh01.on.br/HV96676.htm> (1988-09-12)
# except for the states of AC, AM, PA, RR, RO, and AP (then a territory)
Rule Brazil 1988 only - Oct 16 0:00 1:00 S
Rule Brazil 1989 only - Jan 29 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV98077.htm">98,077</a> (1989-08-21)
+# Decree 98,077 <http://pcdsh01.on.br/HV98077.htm> (1989-08-21)
# with the same exceptions
Rule Brazil 1989 only - Oct 15 0:00 1:00 S
Rule Brazil 1990 only - Feb 11 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV99530.htm">99,530</a> (1990-09-17)
+# Decree 99,530 <http://pcdsh01.on.br/HV99530.htm> (1990-09-17)
# adopted by RS, SC, PR, SP, RJ, ES, MG, GO, MS, DF.
# Decree 99,629 (1990-10-19) adds BA, MT.
Rule Brazil 1990 only - Oct 21 0:00 1:00 S
Rule Brazil 1991 only - Feb 17 0:00 0 -
-# <a href="http://pcdsh01.on.br/HV1991.htm">Unnumbered decree</a> (1991-09-25)
+# Unnumbered decree <http://pcdsh01.on.br/HV1991.htm> (1991-09-25)
# adopted by RS, SC, PR, SP, RJ, ES, MG, BA, GO, MT, MS, DF.
Rule Brazil 1991 only - Oct 20 0:00 1:00 S
Rule Brazil 1992 only - Feb 9 0:00 0 -
-# <a href="http://pcdsh01.on.br/HV1992.htm">Unnumbered decree</a> (1992-10-16)
+# Unnumbered decree <http://pcdsh01.on.br/HV1992.htm> (1992-10-16)
# adopted by same states.
Rule Brazil 1992 only - Oct 25 0:00 1:00 S
Rule Brazil 1993 only - Jan 31 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV942.htm">942</a> (1993-09-28)
+# Decree 942 <http://pcdsh01.on.br/HV942.htm> (1993-09-28)
# adopted by same states, plus AM.
-# Decree <a href="http://pcdsh01.on.br/HV1252.htm">1,252</a> (1994-09-22;
+# Decree 1,252 <http://pcdsh01.on.br/HV1252.htm> (1994-09-22;
# web page corrected 2004-01-07) adopted by same states, minus AM.
-# Decree <a href="http://pcdsh01.on.br/HV1636.htm">1,636</a> (1995-09-14)
+# Decree 1,636 <http://pcdsh01.on.br/HV1636.htm> (1995-09-14)
# adopted by same states, plus MT and TO.
-# Decree <a href="http://pcdsh01.on.br/HV1674.htm">1,674</a> (1995-10-13)
+# Decree 1,674 <http://pcdsh01.on.br/HV1674.htm> (1995-10-13)
# adds AL, SE.
Rule Brazil 1993 1995 - Oct Sun>=11 0:00 1:00 S
Rule Brazil 1994 1995 - Feb Sun>=15 0:00 0 -
Rule Brazil 1996 only - Feb 11 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/HV2000.htm">2,000</a> (1996-09-04)
+# Decree 2,000 <http://pcdsh01.on.br/HV2000.htm> (1996-09-04)
# adopted by same states, minus AL, SE.
Rule Brazil 1996 only - Oct 6 0:00 1:00 S
Rule Brazil 1997 only - Feb 16 0:00 0 -
@@ -952,53 +892,51 @@ Rule Brazil 1997 only - Feb 16 0:00 0 -
#
# Decree 2,317 (1997-09-04), adopted by same states.
Rule Brazil 1997 only - Oct 6 0:00 1:00 S
-# Decree <a href="http://pcdsh01.on.br/figuras/HV2495.JPG">2,495</a>
+# Decree 2,495 <http://pcdsh01.on.br/figuras/HV2495.JPG>
# (1998-02-10)
Rule Brazil 1998 only - Mar 1 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/figuras/Hv98.jpg">2,780</a> (1998-09-11)
+# Decree 2,780 <http://pcdsh01.on.br/figuras/Hv98.jpg> (1998-09-11)
# adopted by the same states as before.
Rule Brazil 1998 only - Oct 11 0:00 1:00 S
Rule Brazil 1999 only - Feb 21 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/figuras/HV3150.gif">3,150</a>
+# Decree 3,150 <http://pcdsh01.on.br/figuras/HV3150.gif>
# (1999-08-23) adopted by same states.
-# Decree <a href="http://pcdsh01.on.br/DecHV99.gif">3,188</a> (1999-09-30)
+# Decree 3,188 <http://pcdsh01.on.br/DecHV99.gif> (1999-09-30)
# adds SE, AL, PB, PE, RN, CE, PI, MA and RR.
Rule Brazil 1999 only - Oct 3 0:00 1:00 S
Rule Brazil 2000 only - Feb 27 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/DEC3592.htm">3,592</a> (2000-09-06)
+# Decree 3,592 <http://pcdsh01.on.br/DEC3592.htm> (2000-09-06)
# adopted by the same states as before.
-# Decree <a href="http://pcdsh01.on.br/Dec3630.jpg">3,630</a> (2000-10-13)
+# Decree 3,630 <http://pcdsh01.on.br/Dec3630.jpg> (2000-10-13)
# repeals DST in PE and RR, effective 2000-10-15 00:00.
-# Decree <a href="http://pcdsh01.on.br/Dec3632.jpg">3,632</a> (2000-10-17)
+# Decree 3,632 <http://pcdsh01.on.br/Dec3632.jpg> (2000-10-17)
# repeals DST in SE, AL, PB, RN, CE, PI and MA, effective 2000-10-22 00:00.
-# Decree <a href="http://pcdsh01.on.br/figuras/HV3916.gif">3,916</a>
+# Decree 3,916 <http://pcdsh01.on.br/figuras/HV3916.gif>
# (2001-09-13) reestablishes DST in AL, CE, MA, PB, PE, PI, RN, SE.
Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 S
Rule Brazil 2001 2006 - Feb Sun>=15 0:00 0 -
# Decree 4,399 (2002-10-01) repeals DST in AL, CE, MA, PB, PE, PI, RN, SE.
-# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/2002/D4399.htm">4,399</a>
+# 4,399 <http://www.presidencia.gov.br/CCIVIL/decreto/2002/D4399.htm>
Rule Brazil 2002 only - Nov 3 0:00 1:00 S
# Decree 4,844 (2003-09-24; corrected 2003-09-26) repeals DST in BA, MT, TO.
-# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/2003/D4844.htm">4,844</a>
+# 4,844 <http://www.presidencia.gov.br/CCIVIL/decreto/2003/D4844.htm>
Rule Brazil 2003 only - Oct 19 0:00 1:00 S
# Decree 5,223 (2004-10-01) reestablishes DST in MT.
-# <a href="http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm">5,223</a>
+# 5,223 <http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm>
Rule Brazil 2004 only - Nov 2 0:00 1:00 S
-# Decree <a href="http://pcdsh01.on.br/DecHV5539.gif">5,539</a> (2005-09-19),
+# Decree 5,539 <http://pcdsh01.on.br/DecHV5539.gif> (2005-09-19),
# adopted by the same states as before.
Rule Brazil 2005 only - Oct 16 0:00 1:00 S
-# Decree <a href="http://pcdsh01.on.br/DecHV5920.gif">5,920</a> (2006-10-03),
+# Decree 5,920 <http://pcdsh01.on.br/DecHV5920.gif> (2006-10-03),
# adopted by the same states as before.
Rule Brazil 2006 only - Nov 5 0:00 1:00 S
Rule Brazil 2007 only - Feb 25 0:00 0 -
-# Decree <a href="http://pcdsh01.on.br/DecHV6212.gif">6,212</a> (2007-09-26),
+# Decree 6,212 <http://pcdsh01.on.br/DecHV6212.gif> (2007-09-26),
# adopted by the same states as before.
Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 S
# From Frederico A. C. Neves (2008-09-10):
# According to this decree
-# <a href="http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm">
# http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm
-# </a>
# [t]he DST period in Brazil now on will be from the 3rd Oct Sunday to the
# 3rd Feb Sunday. There is an exception on the return date when this is
# the Carnival Sunday then the return date will be the next Sunday...
@@ -1033,29 +971,29 @@ Zone America/Noronha -2:09:40 - LMT 1914
-2:00 Brazil FN%sT 2002 Oct 1
-2:00 - FNT
# Other Atlantic islands have no permanent settlement.
-# These include Trindade and Martin Vaz (administratively part of ES),
-# Atol das Rocas (RN), and Penedos de Sao Pedro e Sao Paulo (PE).
+# These include Trindade and Martim Vaz (administratively part of ES),
+# Rocas Atoll (RN), and the St Peter and St Paul Archipelago (PE).
# Fernando de Noronha was a separate territory from 1942-09-02 to 1989-01-01;
# it also included the Penedos.
#
-# Amapa (AP), east Para (PA)
-# East Para includes Belem, Maraba, Serra Norte, and Sao Felix do Xingu.
-# The division between east and west Para is the river Xingu.
+# Amapá (AP), east Pará (PA)
+# East Pará includes Belém, Marabá, Serra Norte, and São Félix do Xingu.
+# The division between east and west Pará is the river Xingu.
# In the north a very small part from the river Javary (now Jari I guess,
-# the border with Amapa) to the Amazon, then to the Xingu.
+# the border with Amapá) to the Amazon, then to the Xingu.
Zone America/Belem -3:13:56 - LMT 1914
-3:00 Brazil BR%sT 1988 Sep 12
-3:00 - BRT
#
-# west Para (PA)
-# West Para includes Altamira, Oribidos, Prainha, Oriximina, and Santarem.
+# west Pará (PA)
+# West Pará includes Altamira, Óbidos, Prainha, Oriximiná, and Santarém.
Zone America/Santarem -3:38:48 - LMT 1914
-4:00 Brazil AM%sT 1988 Sep 12
- -4:00 - AMT 2008 Jun 24 00:00
+ -4:00 - AMT 2008 Jun 24 0:00
-3:00 - BRT
#
-# Maranhao (MA), Piaui (PI), Ceara (CE), Rio Grande do Norte (RN),
-# Paraiba (PB)
+# 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 BR%sT 1990 Sep 17
-3:00 - BRT 1999 Sep 30
@@ -1102,11 +1040,11 @@ Zone America/Bahia -2:34:04 - LMT 1914
-3:00 Brazil BR%sT 2012 Oct 21
-3:00 - BRT
#
-# Goias (GO), Distrito Federal (DF), Minas Gerais (MG),
-# Espirito Santo (ES), Rio de Janeiro (RJ), Sao Paulo (SP), Parana (PR),
+# 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 BR%sT 1963 Oct 23 00:00
+ -3:00 Brazil BR%sT 1963 Oct 23 0:00
-3:00 1:00 BRST 1964
-3:00 Brazil BR%sT
#
@@ -1120,7 +1058,7 @@ Zone America/Cuiaba -3:44:20 - LMT 1914
-4:00 - AMT 2004 Oct 1
-4:00 Brazil AM%sT
#
-# Rondonia (RO)
+# Rondônia (RO)
Zone America/Porto_Velho -4:15:36 - LMT 1914
-4:00 Brazil AM%sT 1988 Sep 12
-4:00 - AMT
@@ -1132,7 +1070,7 @@ Zone America/Boa_Vista -4:02:40 - LMT 1914
-4:00 Brazil AM%sT 2000 Oct 15
-4:00 - AMT
#
-# east Amazonas (AM): Boca do Acre, Jutai, Manaus, Floriano Peixoto
+# 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
@@ -1142,19 +1080,19 @@ Zone America/Manaus -4:00:04 - LMT 1914
-4:00 - AMT
#
# west Amazonas (AM): Atalaia do Norte, Boca do Maoco, Benjamin Constant,
-# Eirunepe, Envira, Ipixuna
+# Eirunepé, Envira, Ipixuna
Zone America/Eirunepe -4:39:28 - LMT 1914
-5:00 Brazil AC%sT 1988 Sep 12
-5:00 - ACT 1993 Sep 28
-5:00 Brazil AC%sT 1994 Sep 22
- -5:00 - ACT 2008 Jun 24 00:00
+ -5:00 - ACT 2008 Jun 24 0:00
-4:00 - AMT 2013 Nov 10
-5:00 - ACT
#
# Acre (AC)
Zone America/Rio_Branco -4:31:12 - LMT 1914
-5:00 Brazil AC%sT 1988 Sep 12
- -5:00 - ACT 2008 Jun 24 00:00
+ -5:00 - ACT 2008 Jun 24 0:00
-4:00 - AMT 2013 Nov 10
-5:00 - ACT
@@ -1175,66 +1113,54 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
# From Oscar van Vlijmen (2006-10-08):
# http://www.horaoficial.cl/cambio.htm
-# From Jesper Norgaard Welen (2006-10-08):
+# From Jesper Nørgaard Welen (2006-10-08):
# I think that there are some obvious mistakes in the suggested link
# from Oscar van Vlijmen,... for instance entry 66 says that GMT-4
# ended 1990-09-12 while entry 67 only begins GMT-3 at 1990-09-15
# (they should have been 1990-09-15 and 1990-09-16 respectively), but
# anyhow it clears up some doubts too.
-# From Paul Eggert (2006-12-27):
-# The following data for Chile and America/Santiago are from
+# From Paul Eggert (2014-08-12):
+# The following data entries for Chile and America/Santiago are from
# <http://www.horaoficial.cl/horaof.htm> (2006-09-20), transcribed by
-# Jesper Norgaard Welen. The data for Pacific/Easter are from Shanks
+# Jesper Nørgaard Welen. The data entries for Pacific/Easter are from Shanks
# & Pottenger, except with DST transitions after 1932 cloned from
-# America/Santiago. The pre-1980 Pacific/Easter data are dubious,
+# America/Santiago. The pre-1980 Pacific/Easter data entries are dubious,
# but we have no other source.
-# From German Poo-Caaman~o (2008-03-03):
+# From Germán Poo-Caamaño (2008-03-03):
# Due to drought, Chile extends Daylight Time in three weeks. This
# is one-time change (Saturday 3/29 at 24:00 for America/Santiago
# and Saturday 3/29 at 22:00 for Pacific/Easter)
# The Supreme Decree is located at
-# <a href="http://www.shoa.cl/servicios/supremo316.pdf">
# http://www.shoa.cl/servicios/supremo316.pdf
-# </a>
# and the instructions for 2008 are located in:
-# <a href="http://www.horaoficial.cl/cambio.htm">
# http://www.horaoficial.cl/cambio.htm
-# </a>.
-# From Jose Miguel Garrido (2008-03-05):
+# From José Miguel Garrido (2008-03-05):
# ...
# You could see the announces of the change on
-# <a href="http://www.shoa.cl/noticias/2008/04hora/hora.htm">
# http://www.shoa.cl/noticias/2008/04hora/hora.htm
-# </a>.
# From Angel Chiang (2010-03-04):
# Subject: DST in Chile exceptionally extended to 3 April due to earthquake
-# <a href="http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098">
# http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098
-# </a>
# (in Spanish, last paragraph).
#
# This is breaking news. There should be more information available later.
-# From Arthur Daivd Olson (2010-03-06):
+# From Arthur David Olson (2010-03-06):
# Angel Chiang's message confirmed by Julio Pacheco; Julio provided a patch.
-# From Glenn Eychaner (2011-03-02): [geychaner@mac.com]
+# From Glenn Eychaner (2011-03-02):
# It appears that the Chilean government has decided to postpone the
# change from summer time to winter time again, by three weeks to April
# 2nd:
-# <a href="http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651">
# http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651
-# </a>
#
# This is not yet reflected in the official "cambio de hora" site, but
# probably will be soon:
-# <a href="http://www.horaoficial.cl/cambio.htm">
# http://www.horaoficial.cl/cambio.htm
-# </a>
# From Arthur David Olson (2011-03-02):
# The emol.com article mentions a water shortage as the cause of the
@@ -1242,9 +1168,7 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
# From Glenn Eychaner (2011-03-28):
# The article:
-# <a href="http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E}">
# http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E}
-# </a>
#
# In English:
# Chile's clocks will go back an hour this year on the 7th of May instead
@@ -1275,7 +1199,7 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
# start date is 2013-09-08 00:00....
# http://www.gob.cl/informa/2013/02/15/gobierno-anuncia-fechas-de-cambio-de-hora-para-el-ano-2013.htm
-# From Jose Miguel Garrido (2014-02-19):
+# From José Miguel Garrido (2014-02-19):
# Today appeared in the Diario Oficial a decree amending the time change
# dates to 2014.
# DST End: last Saturday of April 2014 (Sun 27 Apr 2014 03:00 UTC)
@@ -1329,7 +1253,7 @@ Rule Chile 2012 max - Sep Sun>=2 4:00u 1:00 S
# (1996-09) says 1998-03-08. Ignore these.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Santiago -4:42:46 - LMT 1890
- -4:42:46 - SMT 1910 # Santiago Mean Time
+ -4:42:46 - SMT 1910 # Santiago Mean Time
-5:00 - CLT 1916 Jul 1 # Chile Time
-4:42:46 - SMT 1918 Sep 1 # Santiago Mean Time
-4:00 - CLT 1919 Jul 1 # Chile Time
@@ -1338,16 +1262,16 @@ Zone America/Santiago -4:42:46 - LMT 1890
-4:00 Chile CL%sT
Zone Pacific/Easter -7:17:44 - LMT 1890
-7:17:28 - EMT 1932 Sep # Easter Mean Time
- -7:00 Chile EAS%sT 1982 Mar 13 21:00 # Easter I Time
+ -7:00 Chile EAS%sT 1982 Mar 13 21:00 # Easter Time
-6:00 Chile EAS%sT
#
-# Sala y Gomez Island is like Pacific/Easter.
-# Other Chilean locations, including Juan Fernandez Is, San Ambrosio,
-# San Felix, and Antarctic bases, are like America/Santiago.
+# Salas y Gómez Island is uninhabited.
+# Other Chilean locations, including Juan Fernández Is, Desventuradas Is,
+# and Antarctic bases, are like America/Santiago.
# Colombia
-# Milne gives 4:56:16.4 for Bogota time in 1899; round to nearest. He writes,
+# Milne gives 4:56:16.4 for Bogotá time in 1899; round to nearest. He writes,
# "A variation of fifteen minutes in the public clocks of Bogota is not rare."
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -1355,37 +1279,37 @@ Rule CO 1992 only - May 3 0:00 1:00 S
Rule CO 1993 only - Apr 4 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Bogota -4:56:16 - LMT 1884 Mar 13
- -4:56:16 - BMT 1914 Nov 23 # Bogota Mean Time
+ -4:56:16 - BMT 1914 Nov 23 # Bogotá Mean Time
-5:00 CO CO%sT # Colombia Time
# Malpelo, Providencia, San Andres
# no information; probably like America/Bogota
-# Curacao
+# Curaçao
-# Milne gives 4:35:46.9 for Curacao mean time; round to nearest.
+# Milne gives 4:35:46.9 for Curaçao mean time; round to nearest.
#
# From Paul Eggert (2006-03-22):
# Shanks & Pottenger say that The Bottom and Philipsburg have been at
# -4:00 since standard time was introduced on 1912-03-02; and that
# Kralendijk and Rincon used Kralendijk Mean Time (-4:33:08) from
# 1912-02-02 to 1965-01-01. The former is dubious, since S&P also say
-# Saba Island has been like Curacao.
+# Saba Island has been like Curaçao.
# This all predates our 1970 cutoff, though.
#
-# By July 2007 Curacao and St Maarten are planned to become
+# By July 2007 Curaçao and St Maarten are planned to become
# associated states within the Netherlands, much like Aruba;
# Bonaire, Saba and St Eustatius would become directly part of the
# Netherlands as Kingdom Islands. This won't affect their time zones
# though, as far as we know.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Curacao -4:35:47 - LMT 1912 Feb 12 # Willemstad
+Zone America/Curacao -4:35:47 - LMT 1912 Feb 12 # Willemstad
-4:30 - ANT 1965 # Netherlands Antilles Time
-4:00 - AST
# From Arthur David Olson (2011-06-15):
# use links for places with new iso3166 codes.
-# The name "Lower Prince's Quarter" is both longer than fourteen charaters
+# The name "Lower Prince's Quarter" is both longer than fourteen characters
# and contains an apostrophe; use "Lower_Princes" below.
Link America/Curacao America/Lower_Princes # Sint Maarten
@@ -1393,7 +1317,7 @@ Link America/Curacao America/Kralendijk # Caribbean Netherlands
# Ecuador
#
-# Milne says the Sentral and South American Telegraph Company used -5:24:15.
+# Milne says the Central and South American Telegraph Company used -5:24:15.
#
# From Paul Eggert (2007-03-04):
# Apparently Ecuador had a failed experiment with DST in 1992.
@@ -1404,10 +1328,10 @@ Link America/Curacao America/Kralendijk # Caribbean Netherlands
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Guayaquil -5:19:20 - LMT 1890
-5:14:00 - QMT 1931 # Quito Mean Time
- -5:00 - ECT # Ecuador Time
+ -5:00 - ECT # Ecuador Time
Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
-5:00 - ECT 1986
- -6:00 - GALT # Galapagos Time
+ -6:00 - GALT # Galápagos Time
# Falklands
@@ -1416,7 +1340,7 @@ Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
# the IATA gives 1996-09-08. Go with Shanks & Pottenger.
# From Falkland Islands Government Office, London (2001-01-22)
-# via Jesper Norgaard:
+# via Jesper Nørgaard:
# ... the clocks revert back to Local Mean Time at 2 am on Sunday 15
# April 2001 and advance one hour to summer time at 2 am on Sunday 2
# September. It is anticipated that the clocks will revert back at 2
@@ -1465,9 +1389,7 @@ Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
# daylight saving time.
#
# One source:
-# <a href="http://www.falklandnews.com/public/story.cfm?get=5914&source=3">
# http://www.falklandnews.com/public/story.cfm?get=5914&source=3
-# </a>
#
# We have gotten this confirmed by a clerk of the legislative assembly:
# Normally the clocks revert to Local Mean Time (UTC/GMT -4 hours) on the
@@ -1508,10 +1430,10 @@ Rule Falk 2001 2010 - Apr Sun>=15 2:00 0 -
Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/Stanley -3:51:24 - LMT 1890
- -3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
- -4:00 Falk FK%sT 1983 May # Falkland Is Time
+ -3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
+ -4:00 Falk FK%sT 1983 May # Falkland Is Time
-3:00 Falk FK%sT 1985 Sep 15
- -4:00 Falk FK%sT 2010 Sep 5 02:00
+ -4:00 Falk FK%sT 2010 Sep 5 2:00
-3:00 - FKST
# French Guiana
@@ -1522,7 +1444,7 @@ Zone America/Cayenne -3:29:20 - LMT 1911 Jul
# Guyana
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown
+Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown
-3:45 - GBGT 1966 May 26 # Br Guiana Time
-3:45 - GYT 1975 Jul 31 # Guyana Time
-3:00 - GYT 1991
@@ -1532,8 +1454,8 @@ Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown
# Paraguay
#
# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger say that spring transitions are from 01:00 -> 02:00,
-# and autumn transitions are from 00:00 -> 23:00. Go with pre-1999
+# Shanks & Pottenger say that spring transitions are 01:00 -> 02:00,
+# and autumn transitions are 00:00 -> 23:00. Go with pre-1999
# editions of Shanks, and with the IATA, who say transitions occur at 00:00.
#
# From Waldemar Villamayor-Venialbo (2013-09-20):
@@ -1559,9 +1481,8 @@ Rule Para 1996 only - Mar 1 0:00 0 -
# (10-01).
#
# Translated by Gwillim Law (2001-02-27) from
-# <a href="http://www.diarionoticias.com.py/011000/nacional/naciona1.htm">
-# Noticias, a daily paper in Asuncion, Paraguay (2000-10-01)
-# </a>:
+# Noticias, a daily paper in Asunción, Paraguay (2000-10-01):
+# http://www.diarionoticias.com.py/011000/nacional/naciona1.htm
# Starting at 0:00 today, the clock will be set forward 60 minutes, in
# fulfillment of Decree No. 7,273 of the Executive Power.... The time change
# system has been operating for several years. Formerly there was a separate
@@ -1582,21 +1503,18 @@ Rule Para 1998 2001 - Mar Sun>=1 0:00 0 -
Rule Para 2002 2004 - Apr Sun>=1 0:00 0 -
Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 S
#
-# From Jesper Norgaard Welen (2005-01-02):
+# From Jesper Nørgaard Welen (2005-01-02):
# There are several sources that claim that Paraguay made
# a timezone rule change in autumn 2004.
# From Steffen Thorsen (2005-01-05):
# Decree 1,867 (2004-03-05)
-# From Carlos Raul Perasso via Jesper Norgaard Welen (2006-10-13)
-# <http://www.presidencia.gov.py/decretos/D1867.pdf>
+# From Carlos Raúl Perasso via Jesper Nørgaard Welen (2006-10-13)
+# http://www.presidencia.gov.py/decretos/D1867.pdf
Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 S
Rule Para 2005 2009 - Mar Sun>=8 0:00 0 -
-# From Carlos Raul Perasso (2010-02-18):
-# By decree number 3958 issued yesterday (
-# <a href="http://www.presidencia.gov.py/v1/wp-content/uploads/2010/02/decreto3958.pdf">
+# From Carlos Raúl Perasso (2010-02-18):
+# By decree number 3958 issued yesterday
# http://www.presidencia.gov.py/v1/wp-content/uploads/2010/02/decreto3958.pdf
-# </a>
-# )
# Paraguay changes its DST schedule, postponing the March rule to April and
# modifying the October date. The decree reads:
# ...
@@ -1612,25 +1530,25 @@ Rule Para 2010 2012 - Apr Sun>=8 0:00 0 -
# Paraguay will end DST on 2013-03-24 00:00....
# http://www.ande.gov.py/interna.php?id=1075
#
-# From Carlos Raul Perasso (2013-03-15):
+# From Carlos Raúl Perasso (2013-03-15):
# The change in Paraguay is now final. Decree number 10780
# http://www.presidencia.gov.py/uploads/pdf/presidencia-3b86ff4b691c79d4f5927ca964922ec74772ce857c02ca054a52a37b49afc7fb.pdf
-# From Carlos Raul Perasso (2014-02-28):
+# From Carlos Raúl Perasso (2014-02-28):
# Decree 1264 can be found at:
# http://www.presidencia.gov.py/archivos/documentos/DECRETO1264_ey9r8zai.pdf
Rule Para 2013 max - Mar Sun>=22 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Asuncion -3:50:40 - LMT 1890
- -3:50:40 - AMT 1931 Oct 10 # Asuncion Mean Time
- -4:00 - PYT 1972 Oct # Paraguay Time
+ -3:50:40 - AMT 1931 Oct 10 # Asunción Mean Time
+ -4:00 - PYT 1972 Oct # Paraguay Time
-3:00 - PYT 1974 Apr
-4:00 Para PY%sT
# Peru
#
-# <a href="news:xrGmb.39935$gA1.13896113@news4.srv.hcvlny.cv.net">
-# From Evelyn C. Leeper via Mark Brader (2003-10-26):</a>
+# From Evelyn C. Leeper via Mark Brader (2003-10-26)
+# <news:xrGmb.39935$gA1.13896113@news4.srv.hcvlny.cv.net>:
# When we were in Peru in 1985-1986, they apparently switched over
# sometime between December 29 and January 3 while we were on the Amazon.
#
@@ -1656,7 +1574,7 @@ Zone America/Lima -5:08:12 - LMT 1890
# South Georgia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
+Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
-2:00 - GST # South Georgia Time
# South Sandwich Is
@@ -1666,9 +1584,9 @@ Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
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:40:36 - PMT 1945 Oct # The capital moved?
-3:30 - NEGT 1975 Nov 20 # Dutch Guiana Time
- -3:30 - SRT 1984 Oct # Suriname Time
+ -3:30 - SRT 1984 Oct # Suriname Time
-3:00 - SRT
# Trinidad and Tobago
@@ -1683,7 +1601,7 @@ Link America/Port_of_Spain America/Grenada
Link America/Port_of_Spain America/Guadeloupe
Link America/Port_of_Spain America/Marigot # St Martin (French part)
Link America/Port_of_Spain America/Montserrat
-Link America/Port_of_Spain America/St_Barthelemy
+Link America/Port_of_Spain America/St_Barthelemy # St Barthélemy
Link America/Port_of_Spain America/St_Kitts # St Kitts & Nevis
Link America/Port_of_Spain America/St_Lucia
Link America/Port_of_Spain America/St_Thomas # Virgin Islands (US)
@@ -1742,7 +1660,7 @@ Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 S
Rule Uruguay 1992 only - Oct 18 0:00 1:00 S
Rule Uruguay 1993 only - Feb 28 0:00 0 -
# From Eduardo Cota (2004-09-20):
-# The uruguayan government has decreed a change in the local time....
+# The Uruguayan government has decreed a change in the local time....
# http://www.presidencia.gub.uy/decretos/2004091502.htm
Rule Uruguay 2004 only - Sep 19 0:00 1:00 S
# From Steffen Thorsen (2005-03-11):
@@ -1756,14 +1674,14 @@ Rule Uruguay 2005 only - Mar 27 2:00 0 -
# 02:00 local time, official time in Uruguay will be at GMT -2.
Rule Uruguay 2005 only - Oct 9 2:00 1:00 S
Rule Uruguay 2006 only - Mar 12 2:00 0 -
-# From Jesper Norgaard Welen (2006-09-06):
+# From Jesper Nørgaard Welen (2006-09-06):
# http://www.presidencia.gub.uy/_web/decretos/2006/09/CM%20210_08%2006%202006_00001.PDF
Rule Uruguay 2006 max - Oct Sun>=1 2:00 1:00 S
Rule Uruguay 2007 max - Mar Sun>=8 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28
- -3:44:44 - MMT 1920 May 1 # Montevideo MT
- -3:30 Uruguay UY%sT 1942 Dec 14 # Uruguay Time
+ -3:44:44 - MMT 1920 May 1 # Montevideo MT
+ -3:30 Uruguay UY%sT 1942 Dec 14 # Uruguay Time
-3:00 Uruguay UY%sT
# Venezuela
@@ -1771,14 +1689,14 @@ Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28
# From John Stainforth (2007-11-28):
# ... the change for Venezuela originally expected for 2007-12-31 has
# been brought forward to 2007-12-09. The official announcement was
-# published today in the "Gaceta Oficial de la Republica Bolivariana
-# de Venezuela, numero 38.819" (official document for all laws or
+# published today in the "Gaceta Oficial de la República Bolivariana
+# de Venezuela, número 38.819" (official document for all laws or
# resolution publication)
# http://www.globovision.com/news.php?nid=72208
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Caracas -4:27:44 - LMT 1890
-4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time?
- -4:30 - VET 1965 # Venezuela Time
- -4:00 - VET 2007 Dec 9 03:00
+ -4:30 - VET 1965 # Venezuela Time
+ -4:00 - VET 2007 Dec 9 3:00
-4:30 - VET
diff --git a/elsie.nci.nih.gov/src/strftime.c b/elsie.nci.nih.gov/src/strftime.c
index c324f1b..632f395 100644
--- a/elsie.nci.nih.gov/src/strftime.c
+++ b/elsie.nci.nih.gov/src/strftime.c
@@ -19,17 +19,11 @@
** by the University of California, Berkeley. The name of the
** University may not be used to endorse or promote products derived
** from this software without specific prior written permission.
-** THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+** THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
** IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
-#ifndef LIBC_SCCS
-#ifndef lint
-static const char sccsid[] = "@(#)strftime.c 5.4 (Berkeley) 3/14/89";
-#endif /* !defined lint */
-#endif /* !defined LIBC_SCCS */
-
#include "tzfile.h"
#include "fcntl.h"
#include "locale.h"
@@ -47,15 +41,7 @@ struct lc_time_T {
const char * date_fmt;
};
-#ifdef LOCALE_HOME
-#include "sys/stat.h"
-static struct lc_time_T localebuf;
-static struct lc_time_T * _loc(void);
-#define Locale _loc()
-#endif /* defined LOCALE_HOME */
-#ifndef LOCALE_HOME
#define Locale (&C_time_locale)
-#endif /* !defined LOCALE_HOME */
static const struct lc_time_T C_time_locale = {
{
@@ -107,7 +93,7 @@ static char * _add(const char *, char *, const char *);
static char * _conv(int, const char *, char *, const char *);
static char * _fmt(const char *, const struct tm *, char *, const char *,
int *);
-static char * _yconv(int, int, int, int, char *, const char *);
+static char * _yconv(int, int, bool, bool, char *, char const *);
extern char * tzname[];
@@ -120,6 +106,16 @@ extern char * tzname[];
#define IN_THIS 2
#define IN_ALL 3
+#if HAVE_STRFTIME_L
+size_t
+strftime_l(char *s, size_t maxsize, char const *format, struct tm const *t,
+ locale_t locale)
+{
+ /* Just call strftime, as only the C locale is supported. */
+ return strftime(s, maxsize, format, t);
+}
+#endif
+
size_t
strftime(char * const s, const size_t maxsize, const char *const format,
const struct tm *const t)
@@ -128,25 +124,22 @@ strftime(char * const s, const size_t maxsize, const char *const format,
int warn;
tzset();
-#ifdef LOCALE_HOME
- localebuf.mon[0] = 0;
-#endif /* defined LOCALE_HOME */
warn = IN_NONE;
p = _fmt(((format == NULL) ? "%c" : format), t, s, s + maxsize, &warn);
#ifndef NO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU
if (warn != IN_NONE && getenv(YEAR_2000_NAME) != NULL) {
- (void) fprintf(stderr, "\n");
+ fprintf(stderr, "\n");
if (format == NULL)
- (void) fprintf(stderr, "NULL strftime format ");
- else (void) fprintf(stderr, "strftime format \"%s\" ",
+ fprintf(stderr, "NULL strftime format ");
+ else fprintf(stderr, "strftime format \"%s\" ",
format);
- (void) fprintf(stderr, "yields only two digits of years in ");
+ fprintf(stderr, "yields only two digits of years in ");
if (warn == IN_SOME)
- (void) fprintf(stderr, "some locales");
+ fprintf(stderr, "some locales");
else if (warn == IN_THIS)
- (void) fprintf(stderr, "the current locale");
- else (void) fprintf(stderr, "all locales");
- (void) fprintf(stderr, "\n");
+ fprintf(stderr, "the current locale");
+ else fprintf(stderr, "all locales");
+ fprintf(stderr, "\n");
}
#endif /* !defined NO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU */
if (p == s + maxsize)
@@ -199,8 +192,8 @@ label:
** something completely different.
** (ado, 1993-05-24)
*/
- pt = _yconv(t->tm_year, TM_YEAR_BASE, 1, 0,
- pt, ptlim);
+ pt = _yconv(t->tm_year, TM_YEAR_BASE,
+ true, false, pt, ptlim);
continue;
case 'c':
{
@@ -317,9 +310,9 @@ label:
tm = *t;
mkt = mktime(&tm);
if (TYPE_SIGNED(time_t))
- (void) sprintf(buf, "%"PRIdMAX,
+ sprintf(buf, "%"PRIdMAX,
(intmax_t) mkt);
- else (void) sprintf(buf, "%"PRIuMAX,
+ else sprintf(buf, "%"PRIuMAX,
(uintmax_t) mkt);
pt = _add(buf, pt, ptlim);
}
@@ -355,7 +348,7 @@ label:
** (01-53)."
** (ado, 1993-05-24)
**
-** From "http://www.ft.uni-erlangen.de/~mskuhn/iso-time.html" by Markus Kuhn:
+** From <http://www.ft.uni-erlangen.de/~mskuhn/iso-time.html> by Markus Kuhn:
** "Week 01 of a year is per definition the first week which has the
** Thursday in this year, which is equivalent to the week which contains
** the fourth day of January. In other words, the first week of a new year
@@ -428,9 +421,11 @@ label:
pt, ptlim);
else if (*format == 'g') {
*warnp = IN_ALL;
- pt = _yconv(year, base, 0, 1,
+ pt = _yconv(year, base,
+ false, true,
pt, ptlim);
- } else pt = _yconv(year, base, 1, 1,
+ } else pt = _yconv(year, base,
+ true, true,
pt, ptlim);
}
continue;
@@ -468,11 +463,13 @@ label:
continue;
case 'y':
*warnp = IN_ALL;
- pt = _yconv(t->tm_year, TM_YEAR_BASE, 0, 1,
+ pt = _yconv(t->tm_year, TM_YEAR_BASE,
+ false, true,
pt, ptlim);
continue;
case 'Y':
- pt = _yconv(t->tm_year, TM_YEAR_BASE, 1, 1,
+ pt = _yconv(t->tm_year, TM_YEAR_BASE,
+ true, true,
pt, ptlim);
continue;
case 'Z':
@@ -570,7 +567,7 @@ _conv(const int n, const char *const format, char *const pt,
{
char buf[INT_STRLEN_MAXIMUM(int) + 1];
- (void) sprintf(buf, format, n);
+ sprintf(buf, format, n);
return _add(buf, pt, ptlim);
}
@@ -591,7 +588,7 @@ _add(const char *str, char *pt, const char *const ptlim)
*/
static char *
-_yconv(const int a, const int b, const int convert_top, const int convert_yy,
+_yconv(int a, int b, bool convert_top, bool convert_yy,
char *pt, const char *const ptlim)
{
register int lead;
@@ -617,124 +614,3 @@ _yconv(const int a, const int b, const int convert_top, const int convert_yy,
pt = _conv(((trail < 0) ? -trail : trail), "%02d", pt, ptlim);
return pt;
}
-
-#ifdef LOCALE_HOME
-static struct lc_time_T *
-_loc(void)
-{
- static const char locale_home[] = LOCALE_HOME;
- static const char lc_time[] = "LC_TIME";
- static char * locale_buf;
-
- int fd;
- int oldsun; /* "...ain't got nothin' to do..." */
- char * lbuf;
- char * name;
- char * p;
- const char ** ap;
- const char * plim;
- char filename[FILENAME_MAX];
- struct stat st;
- size_t namesize;
- size_t bufsize;
-
- /*
- ** Use localebuf.mon[0] to signal whether locale is already set up.
- */
- if (localebuf.mon[0])
- return &localebuf;
- name = setlocale(LC_TIME, NULL);
- if (name == NULL || *name == '\0')
- goto no_locale;
- /*
- ** If the locale name is the same as our cache, use the cache.
- */
- lbuf = locale_buf;
- if (lbuf != NULL && strcmp(name, lbuf) == 0) {
- p = lbuf;
- for (ap = (const char **) &localebuf;
- ap < (const char **) (&localebuf + 1);
- ++ap)
- *ap = p += strlen(p) + 1;
- return &localebuf;
- }
- /*
- ** Slurp the locale file into the cache.
- */
- namesize = strlen(name) + 1;
- if (sizeof filename <
- ((sizeof locale_home) + namesize + (sizeof lc_time)))
- goto no_locale;
- oldsun = 0;
- (void) sprintf(filename, "%s/%s/%s", locale_home, name, lc_time);
- fd = open(filename, O_RDONLY);
- if (fd < 0) {
- /*
- ** Old Sun systems have a different naming and data convention.
- */
- oldsun = 1;
- (void) sprintf(filename, "%s/%s/%s", locale_home,
- lc_time, name);
- fd = open(filename, O_RDONLY);
- if (fd < 0)
- goto no_locale;
- }
- if (fstat(fd, &st) != 0)
- goto bad_locale;
- if (st.st_size <= 0)
- goto bad_locale;
- bufsize = namesize + st.st_size;
- locale_buf = NULL;
- lbuf = (lbuf == NULL) ? malloc(bufsize) : realloc(lbuf, bufsize);
- if (lbuf == NULL)
- goto bad_locale;
- (void) strcpy(lbuf, name);
- p = lbuf + namesize;
- plim = p + st.st_size;
- if (read(fd, p, st.st_size) != st.st_size)
- goto bad_lbuf;
- if (close(fd) != 0)
- goto bad_lbuf;
- /*
- ** Parse the locale file into localebuf.
- */
- if (plim[-1] != '\n')
- goto bad_lbuf;
- for (ap = (const char **) &localebuf;
- ap < (const char **) (&localebuf + 1);
- ++ap) {
- if (p == plim)
- goto bad_lbuf;
- *ap = p;
- while (*p != '\n')
- ++p;
- *p++ = '\0';
- }
- if (oldsun) {
- /*
- ** SunOS 4 used an obsolescent format; see localdtconv(3).
- ** c_fmt had the ``short format for dates and times together''
- ** (SunOS 4 date, "%a %b %e %T %Z %Y" in the C locale);
- ** date_fmt had the ``long format for dates''
- ** (SunOS 4 strftime %C, "%A, %B %e, %Y" in the C locale).
- ** Discard the latter in favor of the former.
- */
- localebuf.date_fmt = localebuf.c_fmt;
- }
- /*
- ** Record the successful parse in the cache.
- */
- locale_buf = lbuf;
-
- return &localebuf;
-
-bad_lbuf:
- free(lbuf);
-bad_locale:
- (void) close(fd);
-no_locale:
- localebuf = C_time_locale;
- locale_buf = NULL;
- return &localebuf;
-}
-#endif /* defined LOCALE_HOME */
diff --git a/elsie.nci.nih.gov/src/systemv b/elsie.nci.nih.gov/src/systemv
index e651e85..d9e2995 100644
--- a/elsie.nci.nih.gov/src/systemv
+++ b/elsie.nci.nih.gov/src/systemv
@@ -1,4 +1,3 @@
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
diff --git a/elsie.nci.nih.gov/src/time2posix.3 b/elsie.nci.nih.gov/src/time2posix.3
index e17b011..e4b8e81 100644
--- a/elsie.nci.nih.gov/src/time2posix.3
+++ b/elsie.nci.nih.gov/src/time2posix.3
@@ -3,23 +3,30 @@
time2posix, posix2time \- convert seconds since the Epoch
.SH SYNOPSIS
.nf
-.B #include <sys/types.h>
+.ie \n(.g .ds - \f(CW-\fP
+.el ds - \-
.B #include <time.h>
.PP
-.B time_t time2posix(t)
-.B time_t t
+.B time_t time2posix(time_t t);
.PP
-.B time_t posix2time(t)
-.B time_t t
+.B time_t posix2time(time_t t);
.PP
-.B cc ... -ltz
+.B cc ... \*-ltz
.fi
.SH DESCRIPTION
+.ie '\(en'' .ds en \-
+.el .ds en \(en
+.ie '\(lq'' .ds lq \&"\"
+.el .ds lq \(lq\"
+.ie '\(rq'' .ds rq \&"\"
+.el .ds rq \(rq\"
+.de q
+\\$3\*(lq\\$1\*(rq\\$2
+..
IEEE Standard 1003.1
(POSIX)
-legislates that a time_t value of
-536457599 shall correspond to "Wed Dec 31 23:59:59 UTC 1986."
-This effectively implies that POSIX time_t's cannot include leap
+requires the time_t value 536457599 to stand for 1986-12-31 23:59:59 UTC.
+This effectively implies that POSIX time_t values cannot include leap
seconds and,
therefore,
that the system time must be adjusted as each leap occurs.
@@ -29,14 +36,16 @@ enabled,
however,
no such adjustment is needed and
time_t values continue to increase over leap events
-(as a true `seconds since...' value).
+(as a true
+.q "seconds since..."
+value).
This means that these values will differ from those required by POSIX
by the net number of leap seconds inserted since the Epoch.
.PP
Typically this is not a problem as the type time_t is intended
to be
(mostly)
-opaque\(emtime_t values should only be obtained-from and
+opaque \*(en time_t values should only be obtained-from and
passed-to functions such as
.IR time(2) ,
.IR localtime(3) ,
diff --git a/elsie.nci.nih.gov/src/time2posix.3.txt b/elsie.nci.nih.gov/src/time2posix.3.txt
index 9c756f7..d9db970 100644
--- a/elsie.nci.nih.gov/src/time2posix.3.txt
+++ b/elsie.nci.nih.gov/src/time2posix.3.txt
@@ -4,38 +4,34 @@ NAME
time2posix, posix2time - convert seconds since the Epoch
SYNOPSIS
- #include <sys/types.h>
#include <time.h>
- time_t time2posix(t)
- time_t t
+ time_t time2posix(time_t t);
- time_t posix2time(t)
- time_t t
+ time_t posix2time(time_t t);
cc ... -ltz
DESCRIPTION
- IEEE Standard 1003.1 (POSIX) legislates that a time_t value of
- 536457599 shall correspond to "Wed Dec 31 23:59:59 UTC 1986." This
- effectively implies that POSIX time_t's cannot include leap seconds
- and, therefore, that the system time must be adjusted as each leap
- occurs.
+ IEEE Standard 1003.1 (POSIX) requires the time_t value 536457599 to
+ stand for 1986-12-31 23:59:59 UTC. This effectively implies that POSIX
+ time_t values cannot include leap seconds and, therefore, that the
+ system time must be adjusted as each leap occurs.
If the time package is configured with leap-second support enabled,
however, no such adjustment is needed and time_t values continue to
- increase over leap events (as a true `seconds since...' value). This
+ increase over leap events (as a true "seconds since..." value). This
means that these values will differ from those required by POSIX by the
net number of leap seconds inserted since the Epoch.
Typically this is not a problem as the type time_t is intended to be
- (mostly) opaque--time_t values should only be obtained-from and passed-
- to functions such as time(2), localtime(3), mktime(3), and difftime(3).
- However, POSIX gives an arithmetic expression for directly computing a
- time_t value from a given date/time, and the same relationship is
- assumed by some (usually older) applications. Any programs
- creating/dissecting time_t's using such a relationship will typically
- not handle intervals over leap seconds correctly.
+ (mostly) opaque - time_t values should only be obtained-from and
+ passed-to functions such as time(2), localtime(3), mktime(3), and
+ difftime(3). However, POSIX gives an arithmetic expression for
+ directly computing a time_t value from a given date/time, and the same
+ relationship is assumed by some (usually older) applications. Any
+ programs creating/dissecting time_t's using such a relationship will
+ typically not handle intervals over leap seconds correctly.
The time2posix and posix2time functions are provided to address this
time_t mismatch by converting between local time_t values and their
diff --git a/elsie.nci.nih.gov/src/tz-art.htm b/elsie.nci.nih.gov/src/tz-art.htm
index 4dc097a..ef06675 100644
--- a/elsie.nci.nih.gov/src/tz-art.htm
+++ b/elsie.nci.nih.gov/src/tz-art.htm
@@ -3,7 +3,7 @@ PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
-<meta http-equiv="Content-type" content='text/html; charset="US-ASCII"'>
+<meta http-equiv="Content-type" content='text/html; charset="UTF-8"'>
<title>Time and the Arts</title>
</head>
<body>
@@ -277,8 +277,8 @@ savings days. Lousy farmers."</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>Artist</td><td>Jules Verne</td></tr>
-<tr><td>Book</td><td>Le Tour du Monde en Quatre-Vingts Jours
-(Around the World in Eighty Days)</td></tr>
+<tr><td>Book</td><td><em>Around the World in Eighty Days</em>
+(<em>Le tour du monde en quatre-vingts jours</em>)</td></tr>
<tr><td>Notes</td><td>Wall-clock time plays a central role in the plot.
European readers of the 1870s clearly held the U.S. press in
deep contempt; the protagonists cross the U.S. without once
@@ -292,8 +292,8 @@ An on-line English-language translation of the book is available at
<tr><td>&nbsp;</td></tr>
<tr><td>Artist</td><td>Umberto Eco</td></tr>
-<tr><td>Book</td><td>The Island of the Day Before
-(L'isola del giorno prima)</td></tr>
+<tr><td>Book</td><td><em>The Island of the Day Before</em>
+(<em>L'isola del giorno prima</em>)</td></tr>
<tr><td>Copyright Date</td><td>1994</td></tr>
<tr><td>Notes</td><td>
"...the story of a 17th century Italian nobleman trapped near an island
@@ -301,86 +301,83 @@ on the International Date Line. Time and time zones play an integral
part in the novel." (Paul Eggert, 2006-04-22)
</td></tr>
<tr><td>&nbsp;</td></tr>
-<tr><td>Artist</td><td>David Jebb</td></tr>
-<tr><td>Book</td><td><a href="http://www.thethirteenthtimezone.com">
-The Thirteenth Time Zone</a></td></tr>
-<tr><td>Notes</td><td>
-"It's fiction, but it's based on his experiences and travels." (Paul Eggert, 2006-04-22)
-</td></tr>
-<tr><td>&nbsp;</td></tr>
<tr><td>Artist</td><td>John Dunning</td></tr>
<tr><td>Book</td><td><a
-href="http://www.simonsays.com/content/book.cfm?sid=33&amp;pid=479719">Two
-O'Clock, Eastern Wartime</a></td></tr>
+href="http://books.simonandschuster.com/Two-OClock-Eastern-Wartime/John-Dunning/9781439171530"><em>Two
+O'Clock, Eastern Wartime</em></a></td></tr>
<tr><td>Copyright Date</td><td>2001</td></tr>
<tr><td>Notes</td><td>
Mystery, history, daylight saving time, and old-time radio.
</td></tr>
<tr><td>&nbsp;</td></tr>
-<tr><td>Film</td><td>Bell Science - About Time</td></tr>
-<tr><td>Notes</td><td>The Frank Baxter/Richard Deacon extravaganza.
-Information is available at
-<a href="http://www.videoflicks.com/titles/1035/1035893.htm">http://www.videoflicks.com/titles/1035/1035893.htm</a></td></tr>
+<tr><td>Film</td><td><em>About Time</em></td></tr>
+<tr><td>Copyright Date</td><td>1962</td></tr>
+<tr><td>Notes</td><td>The Bell Science extravaganza, with Frank Baxter,
+Richard Deacon, and Les Tremayne.
+<a href="http://www.imdb.com/title/tt0154110/">Information</a>
+is available at IMDb.</td></tr>
</table>
<hr>
<ul>
<li>
-An episode of "The Adventures of Superman" entitled "The Mysterious
+An episode of <em>The Adventures of Superman</em> entitled "The Mysterious
Cube," first aired 1958-02-24, had Superman convincing the controllers
of WWV to broadcast time signals five minutes ahead of actual time;
doing so got a crook trying to beat the statute of limitations to
emerge a bit too early from the titular enclosure.
</li>
<li>
-The 1960s ITC television series "The Prisoner" included an episode
+The 1960s ITC television series <em>The Prisoner</em> included an episode
entitled "The Chimes of Big Ben" in which our protagonist tumbled to
the fraudulent nature of a Poland-to-England escape upon hearing "Big
Ben" chiming on Polish local time.
</li>
<li>
-The series "Seinfeld" included an episode entitled "The Susie," first
+The series <em>Seinfeld</em> included an episode entitled "The Susie," first
broadcast 1997-02-13, in which Kramer decides that daylight saving time
isn't coming fast enough, so he sets his watch ahead an hour.
</li>
<li>
-The syndicated comic strip "Dilbert" featured an all-too-rare example of
+The syndicated comic strip <em>Dilbert</em> featured an all-too-rare example of
time zone humor on 1998-03-14.
</li>
<li>
Surrealist artist Guy Billout's work "Date Line" appeared on page 103
-of the 1999-11 Atlantic Monthly.
+of the 1999-11 <em>Atlantic Monthly</em>.
</li>
<li>
-"Gloom, Gloom, Go Away" by Walter Kirn appeared on page 106 of Time
-Magazine's 2002-11-11 issue; among other things, it proposed
+"Gloom, Gloom, Go Away" by Walter Kirn appeared on page 106 of <em>Time</em>
+magazine's 2002-11-11 issue; among other things, it proposed
year-round DST as a way of lessening wintertime despair.
</li>
<li>
-The "20 Hours in America" episode of "The West Wing," first aired 2002-09-25,
+The "20 Hours in America" episode of <em>The West Wing</em>,
+first aired 2002-09-25,
saw White House staffers stranded in Indiana; they thought they had time to
catch Air Force One but were done in by intra-Indiana local time changes.
</li>
<li>
"In what time zone would you find New York City?" was a $200 question on
-the 1999-11-13 United States airing of "Who Wants to Be a Millionaire?"
-"In 1883, what industry led the movement to divide the U.S. into four time
+the 1999-11-13 United States airing of <em>Who Wants to Be a Millionaire?</em>,
+and "In 1883, what industry led the movement to divide the U.S. into four time
zones?" was a $32,000 question on the 2001-05-23 United States airing of
-"Who Wants to Be a Millionaire?" At this rate, the million-dollar time-zone
+the same show. At this rate, the million-dollar time-zone
question should have been asked 2002-06-04.
</li>
<li>
A private jet's mid-flight change of time zones distorts Alison Dubois'
-premonition in the "We Had a Dream" episode of "Medium"
+premonition in the "We Had a Dream" episode of <em>Medium</em>
(originally aired 2007-02-28).
</li>
<li>
-In the "30 Rock" episode "Anna Howard Shaw Day" (first broadcast 2010-02-11),
+In the <em>30 Rock</em> episode "Anna Howard Shaw Day"
+(first broadcast 2010-02-11),
Jack Donaghy's date realizes that a Geneva-to-New-York business phone call
received in the evening must be fake given the difference in local times.
</li>
<li>
-In the 1946 movie "A Matter of Life and Death"
-(U.S. title "Stairway to Heaven")
+In the 1946 movie <em>A Matter of Life and Death</em>
+(U.S. title <em>Stairway to Heaven</em>)
there is a reference to British Double Summer Time.
The time does not play a large part in the plot;
it's just a passing reference to the time when one of the
@@ -390,17 +387,17 @@ The IMDb page is at
http://us.imdb.com/title/tt0038733/
</a>. (Dave Cantor)
<li>
-The 1953 railway comedy movie "The Titfield Thunderbolt" includes a
+The 1953 railway comedy movie <em>The Titfield Thunderbolt</em> includes a
play on words on British Double Summer Time. Valentine's wife wants
him to leave the pub and asks him, "Do you know what time it is?"
And he, happy where he is, replies: "Yes, my love. Summer double time."
-IMDB page:
+IMDb page:
<a href="http://us.imdb.com/title/tt0046436/">
http://us.imdb.com/title/tt0046436/
</a>. (Mark Brader, 2009-10-02)
</li>
<li>
-The premise of the 1999 caper movie "Entrapment" involves computers
+The premise of the 1999 caper movie <em>Entrapment</em> involves computers
in an international banking network being shut down briefly at
midnight in each time zone to avoid any problems at the transition
from the year 1999 to 2000 in that zone. (Hmmmm.) If this shutdown
@@ -408,24 +405,26 @@ is extended by 10 seconds, it will create a one-time opportunity for
a gigantic computerized theft. To achieve this, at one location the
crooks interfere with the microwave system supplying time signals to
the computer, advancing the time by 0.1 second each minute over the
-last hour of 1999. (So this movie teaches us that 0.1 x 60 = 10.)
-IMDB page:
+last hour of 1999. (So this movie teaches us that 0.1 &times; 60 = 10.)
+IMDb page:
<a href="http://us.imdb.com/title/tt0137494/">
http://us.imdb.com/title/tt0137494/
</a>. (Mark Brader, 2009-10-02)
</li>
<li>
-In the "Run by the Monkeys" episode of "Da Vinci's Inquest"
+In the "Run by the Monkeys" episode of <em>Da Vinci's Inquest</em>
(first broadcast 2002-11-17),
a witness in a five-year-old fire case realizes they may not have set
their clock back when daylight saving ended on the day of the fire,
introducing the possibility of an hour when arson might have occurred.
</li>
<li>
-In "The Todd Couple" episode of "Outsourced" (first aired 2011-02-10),
-Manmeet sets up teledates for 6:00 and 9:00;
+In "The Todd Couple" episode of <em>Outsourced</em> (first aired 2011-02-10),
+Manmeet sets up Valentine's Day teledates for 6:00 and 9:00pm;
since one is with a New Yorker and the other with a San Franciscan,
hilarity ensues.
+(Never mind that this should be 7:30am in Mumbai, yet for some reason the show
+proceeds as though it's also mid-evening there.)
</li>
</ul>
<hr>
@@ -433,18 +432,18 @@ hilarity ensues.
<li>
"We've been using the five-cent nickel in this country since 1492.
Now that's pretty near 100 years, daylight saving."
-(Groucho Marx as Captain Spaulding in "Animal Crackers", 1930,
+(Groucho Marx as Captain Spaulding in <em>Animal Crackers</em>, 1930,
as noted by Will Fitzgerald)
</li>
<li>
Brady: "...[Bishop Usher] determined that the Lord began the Creation
-on the 23rd of October in the Year 4004 B.C. at -- uh, at 9 A.M.!"
+on the 23rd of October in the Year 4004 B.C. at &ndash; uh, at 9 A.M.!"
<br>
Drummond: "That Eastern Standard Time? (Laughter) Or Rocky Mountain
Time? (More laughter) It wasn't daylight-saving time, was it? Because
the Lord didn't make the sun until the fourth day!"
<br>
-(From the play "Inherit the Wind" by Jerome Lawrence and Robert E. Lee,
+(From the play <em>Inherit the Wind</em> by Jerome Lawrence and Robert E. Lee,
filmed in 1960 with Spencer Tracy as Drummond and Fredric March as
Brady, and several other times. Thanks to Mark Brader.)
</li>
@@ -452,13 +451,13 @@ Brady, and several other times. Thanks to Mark Brader.)
"Good news."
"What did they do? Extend Daylight Saving Time year round?"
(Professional tanner George Hamilton, in dialog from a
-May, 1999 episode of the syndicated television series "Baywatch")
+May, 1999 episode of the syndicated television series <em>Baywatch</em>)
</li>
<li>
"A fundamental belief held by Americans is that if you are on land, you
cannot be killed by a fish...So most Americans remain on land, believing
-they're safe. Unfortunately, this belief&mdash;like so many myths, such as that
-there's a reason for 'Daylight Saving Time'&mdash;is false."
+they're safe. Unfortunately, this belief &ndash; like so many myths, such as that
+there's a reason for 'Daylight Saving Time' &ndash; is false."
(Dave Barry column, 2000-07-02)
</li>
<li>
@@ -468,31 +467,35 @@ when you turn the clocks ahead."
</li>
<li>
"Would it impress you if I told you I invented Daylight Savings Time?"
-("Sahjhan" to "Lilah" in dialog from the "Loyalty" episode of "Angel,"
+("Sahjhan" to "Lilah" in dialog from the "Loyalty" episode of <em>Angel</em>,
originally aired 2002-02-25)
</li>
<li>
-"I thought you said Tulsa was a three hour flight."
+"I thought you said Tulsa was a three-hour flight."
"Well, you're forgetting about the time difference."
-("Chandler" and "Joey" in dialog from the episode of "Friends" first
-aired 2002-12-05)
+("Joey" and "Chandler" in dialog from the episode of <em>Friends</em>
+entitled "The One With Rachel's Phone Number," originally aired 2002-12-05)
</li>
<li>
"Is that a pertinent fact,
-or are you trying to dazzle me with your command of time zones?"
-(Kelsey Grammer as "Frasier Crane")
+or are you just trying to dazzle me with your command of time zones?"
+(Kelsey Grammer as "Frasier Crane" to "Roz" from the episode of <em>Frasier</em>
+entitled "The Kid," originally aired 1997-11-04)
</li>
<li>
-"Don't worry about the world coming to an end today.
-It is already tomorrow in Australia."
-(Charles M. Schulz, provided by Steve Summit)
+Peppermint Patty: "What if the world comes to an end tonight, Marcie?"
+<br>
+Marcie: "I promise there'll be a tomorrow, sir ... in fact,
+it's already tomorrow in Australia!"
+<br>
+(Charles M. Schultz, <em>Peanuts</em>, 1980-06-13)
</li>
<li>
"I put myself and my staff through this crazy, huge ordeal, all because
I refused to go on at midnight, okay? And so I work, you know, and
then I get this job at eleven, supposed to be a big deal. Then
yesterday daylight [saving] time ended. Right now it's basically
-midnight." (Conan O'Brien on the 2010-11-08 premier of "Conan.")
+midnight." (Conan O'Brien on the 2010-11-08 premiere of <em>Conan</em>.)
</li>
</ul>
</body>
diff --git a/elsie.nci.nih.gov/src/tz-link.htm b/elsie.nci.nih.gov/src/tz-link.htm
index 04919a9..f72a3a4 100644
--- a/elsie.nci.nih.gov/src/tz-link.htm
+++ b/elsie.nci.nih.gov/src/tz-link.htm
@@ -5,10 +5,10 @@
<head>
<title>Sources for Time Zone and Daylight Saving Time Data</title>
<link rel="schema.DC" href="http://purl.org/DC/elements/1.1/">
-<meta http-equiv="Content-type" content='text/html; charset="US-ASCII"'>
+<meta http-equiv="Content-type" content='text/html; charset="UTF-8"'>
<meta name="DC.Creator" content="Eggert, Paul">
<meta name="DC.Contributor" content="Olson, Arthur David">
-<meta name="DC.Date" content="2014-05-27">
+<meta name="DC.Date" content="2014-08-26">
<meta name="DC.Description"
content="Sources of information about time zones and daylight saving time">
<meta name="DC.Identifier"
@@ -57,6 +57,7 @@ title="Advanced Interactive eXecutive">AIX</abbr></a>,
<a href="http://en.wikipedia.org/wiki/BlackBerry_10">BlackBerry 10</a>,
<a href="http://www.apple.com/ios/"><abbr
title="iPhone OS">iOS</abbr></a>,
+<a href="http://windows.microsoft.com/">Microsoft Windows</a>,
<a href="http://h71000.www7.hp.com/">Open<abbr
title="Virtual Memory System">VMS</abbr></a>,
<a href="http://oracle.com/database">Oracle Database</a>,
@@ -90,7 +91,7 @@ In the <code><abbr>tz</abbr></code> database's
title="File Transfer Protocol">FTP</abbr> releases</a>
the code is in the file <code>tzcode<var>C</var>.tar.gz</code>,
where <code><var>C</var></code> is the code's version;
-similarly, the data are in <code>tzdata<var>D</var>.tar.gz</code>,
+similarly, the data entries are in <code>tzdata<var>D</var>.tar.gz</code>,
where <code><var>D</var></code> is the data's version.
Since 1996, each version has been a four-digit year followed by
lower-case letter (<samp>a</samp> through <samp>z</samp>,
@@ -128,7 +129,7 @@ machine-readable binary files, one for each location. It also lets
you read a <code><abbr>tz</abbr></code> binary file and interpret time stamps for that
location.</p>
<p>
-The data are by no means authoritative. If you find errors, please
+The files are by no means authoritative. If you find errors, please
send changes to the <a href="mailto:tz@iana.org">time zone
mailing list</a>. You can also <a
href="http://news.gmane.org/gmane.comp.time.tz">browse recent
@@ -179,7 +180,7 @@ timezone information for all countries</a> displays tables of DST rules.
Time Zones</a> lets you sort zone names and convert times.</li>
<li><a href="http://permatime.com/">Permatime</a> generates and views
links that refer to a particular point in time and can be displayed in
-multiple timezones.</li>
+multiple time zones.</li>
<li><a href="http://www.zeitverschiebung.net/en/">Time Difference</a>
calculates the current time difference between locations.</li>
<li><a href="http://www.wx-now.com/">Weather Now</a> lists the weather too.</li>
@@ -187,8 +188,17 @@ calculates the current time difference between locations.</li>
also contains data about time zone boundaries; it supports queries via place
names and shows location maps.</li>
</ul>
-<h2>Other time zone database formats</h2>
+<h2>Network protocols for <code><abbr>tz</abbr></code> data</h2>
<ul>
+<li>The <a href="http://www.ietf.org/">Internet Engineering Task Force</a>'s
+<a href="https://datatracker.ietf.org/wg/tzdist/charter/">Time Zone Data
+Distribution Service (tzdist) working group</a> is developing a scalable
+protocol for distributing time zone data to clients. It has generated a
+a <a href="http://datatracker.ietf.org/doc/draft-ietf-tzdist-service/">draft
+protocol for transferring time zone data</a> and a <a
+href="https://datatracker.ietf.org/doc/draft-ietf-tzdist-caldav-timezone-ref/">draft
+protocol for transferring time zone data by reference</a>. This work is based
+on the iCalendar and CalConnect efforts described below.</li>
<li>The <a href="http://tools.ietf.org/html/rfc5545">
Internet Calendaring and Scheduling Core Object Specification
(iCalendar)</a> (Internet <abbr>RFC</abbr> 5445)
@@ -196,10 +206,11 @@ covers time zone
data; see its VTIMEZONE calendar component.
The iCalendar format requires specialized parsers and generators; a
variant <a href="http://tools.ietf.org/html/rfc6321">xCal</a>
-(Internet RFC 6321) uses
+(Internet <abbr>RFC</abbr> 6321) uses
<a href="http://www.w3.org/XML/"><abbr
-title="Extensible Markup Language">XML</abbr></a> format, and a draft variant
-<a href="http://datatracker.ietf.org/doc/draft-ietf-jcardcal-jcal/">jCal</a>
+title="Extensible Markup Language">XML</abbr></a> format, and a variant
+<a href="http://tools.ietf.org/html/rfc7265">jCal</a>
+(Internet <abbr>RFC</abbr> 7265)
uses <a href="http://www.json.org/"><abbr
title="JavaScript Object Notation">JSON</abbr></a> format.
<a href="http://calconnect.org/">CalConnect, The Calendaring and Scheduling
@@ -207,12 +218,11 @@ Consortium</a> is promoting further work in this area. <a
href="http://calconnect.org/publications/icalendartimezoneproblemsandrecommendationsv1.0.pdf">iCalendar
TIMEZONE Problems and Recommendations</a> offers guidelines and
recommendations for the use of VTIMEZONE and <code><abbr>tz</abbr></code>.</li>
-<li>CalConnect's <a href="http://calconnect.org/tc-timezone.shtml">TIMEZONE
-Technical Committee</a> has developed
-a <a href="http://tools.ietf.org/html/draft-douglass-timezone-service-08">draft
-timezone service protocol</a>. The committee's earlier <a
+<li>The <a
href="http://calconnect.org/publications/timezoneregistryandservicerecommendationsv1.0.pdf">Timezone
-Registry and Service Recommendations</a> discusses a
+Registry and Service Recommendations</a> of CalConnect's
+<a href="http://calconnect.org/tc-timezone.shtml">TIMEZONE
+Technical Committee</a> discusses a
strategy for defining and deploying a time zone
registration process that would establish unique names for each
version of each <code><abbr>tz</abbr></code> zone, along with a polygonal
@@ -230,8 +240,7 @@ href="http://www.w3.org/2000/01/foo">schema</a> was sketched out.</li>
</ul>
<h2>Other <code><abbr>tz</abbr></code> compilers</h2>
<ul>
-<li><a href="http://sourceforge.net/projects/vzic/">Vzic iCalendar
-Timezone Converter</a> describes a <a
+<li><a href="http://sourceforge.net/projects/vzic/">Vzic</a> is a <a
href="http://en.wikipedia.org/wiki/C_%28programming_language%29">C</a>
program that compiles
<code><abbr>tz</abbr></code> source into iCalendar-compatible VTIMEZONE files.
@@ -242,7 +251,8 @@ General Public License (<abbr
title="General Public License">GPL</abbr>)</a>.</li>
<li><a href="http://sourceforge.net/projects/tzical">tziCal &ndash; tz
database conversion utility</a> is like Vzic, except for the <a
-href="http://msdn.microsoft.com/netframework">.NET framework</a>.</li>
+href="http://msdn.microsoft.com/netframework">.NET framework</a>
+and with a <abbr>BSD</abbr>-style license.</li>
<li><a
href="http://search.cpan.org/dist/DateTime-TimeZone/">DateTime::TimeZone</a>
contains a script <code>parse_olson</code> that compiles
@@ -263,7 +273,7 @@ and from <abbr title="Common Locale Data Repository">CLDR</abbr> data
into an <abbr>ICU</abbr>-specific format.
<abbr>ICU</abbr> is freely available under a
<abbr>BSD</abbr>-style license.</li>
-<li><a href="http://www.joda.org/joda-time/">Joda Time &ndash; Java date
+<li><a href="http://www.joda.org/joda-time/">Joda-Time &ndash; Java date
and time <abbr title="Application Program Interface">API</abbr></a>
contains a class
<code>org.joda.time.tz.ZoneInfoCompiler</code> that compiles
@@ -275,21 +285,30 @@ are similar to Joda Time, but for the .NET framework instead of
Java. They are freely available under the
<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License</a>
and a <abbr>BSD</abbr>-style license, respectively.</li>
-<li><a href="https://github.com/mde/timezone-js">TimezoneJS.Date</a>
-is a <a href="http://en.wikipedia.org/wiki/JavaScript">JavaScript</a>
-library that parses <code><abbr>tz</abbr></code> source files and interprets time
-stamps using an API that is upward compatible with standard JavaScript
+<li><a href="http://en.wikipedia.org/wiki/JavaScript">JavaScript</a>-based
+compilers and libraries include:
+<ul>
+<li><a href="http://momentjs.com/timezone/">Moment Timezone</a> is a
+plugin for the <a href="http://momentjs.com/">Moment.js</a> date
+manipulation library. It is freely available under
+the <abbr title="Massachusetts Institute of Technology">MIT</abbr>
+license.</li>
+<li><a href="https://github.com/mde/timezone-js">TimezoneJS.Date</a>'s
+<abbr>API</abbr> is upward compatible with standard JavaScript
Dates. It is freely available under the Apache License.</li>
+<li><a href="https://github.com/sproutsocial/walltime-js">Walltime-js</a>
+translates UTC to local time. It is freely available under the <abbr>MIT</abbr>
+license.</li>
+</ul>
<li><a href="http://pytz.sourceforge.net">pytz &ndash; World Timezone
Definitions for Python</a> compiles <code><abbr>tz</abbr></code> source into
<a href="http://python.org/">Python</a>.
It is freely available under a <abbr>BSD</abbr>-style license.</li>
-<li><a href="http://tzinfo.rubyforge.org/">TZInfo &ndash;
+<li><a href="http://tzinfo.github.io/">TZInfo &ndash;
Ruby Timezone Library</a>
compiles <code><abbr>tz</abbr></code> source into
<a href="http://www.ruby-lang.org/en/">Ruby</a>.
-It is freely available under the <abbr
-title="Massachusetts Institute of Technology">MIT</abbr> license.</li>
+It is freely available under the <abbr>MIT</abbr> license.</li>
<li>The <a href="http://www.squeaksource.com/Chronos/">Chronos Date/Time
Library</a> is
a <a href="http://en.wikipedia.org/wiki/Smalltalk">Smalltalk</a> class
@@ -297,7 +316,7 @@ library that compiles <code><abbr>tz</abbr></code> source into a time
zone repository whose format
is either proprietary or an <abbr>XML</abbr>-encoded
representation.</li>
-<li>Starting with version 8.5, <a href="http://tcl.tk/">Tcl</a>
+<li><a href="http://tcl.tk/">Tcl</a>
contains a developer-oriented parser that compiles <code><abbr>tz</abbr></code>
source into text files, along with a runtime that can read those
files. Tcl is freely available under a <abbr>BSD</abbr>-style
@@ -322,6 +341,9 @@ It is freely available under the <abbr>LGPL</abbr>.</li>
<li><a href="http://bmsi.com/java/#TZ">ZoneInfo.java</a>
is a <code><abbr>tz</abbr></code> binary file reader written in Java.
It is freely available under the <abbr>LGPL</abbr>.</li>
+<li><a href="https://github.com/bigeasy/timezone">Timezone</a> is a
+JavaScript library that supports date arithmetic that is time zone
+aware. It is freely available under the <abbr>MIT</abbr> license.</li>
<li>Tcl, mentioned above, also contains a
<code><abbr>tz</abbr></code> binary file reader.</li>
<li><a href="http://search.cpan.org/perldoc?DateTime::TimeZone::Tzfile">
@@ -339,7 +361,8 @@ are not supported.</li>
<li>The <a
href="http://hackage.haskell.org/package/timezone-olson">timezone-olson</a>
package contains <a href="http://haskell.org">Haskell</a> code that
-parses and uses <code><abbr>tz</abbr></code> binary data.</li>
+parses and uses <code><abbr>tz</abbr></code> binary data. It is freely
+available under a BSD-style license.</li>
</ul>
<h2>Other <code><abbr>tz</abbr></code>-based time zone software</h2>
<ul>
@@ -353,15 +376,37 @@ href="http://mozilla.com/thunderbird">Thunderbird</a>.
It displays multiple clocks in the application window, and has a mapping
interface to <a href="http://earth.google.com/">Google Earth</a>.
It is freely available under the <abbr>GPL</abbr>.</li>
+<li><a href="http://golang.org/">Go programming language</a>
+implementations contain a copy of a 32-bit subset of a recent
+<code><abbr>tz</abbr></code> database in a
+Go-specific format.</li>
<li><a
href="http://users.skynet.be/Peter.Verthez/projects/intclock/">International
-clock (intclock)</a> is a multi-timezone clock for
+clock (intclock)</a> is a clock that displays multiple time zones on
<abbr>GNU</abbr>/Linux and similar systems. It is freely available
under the <abbr>GPL</abbr>.</li>
+<li>Microsoft Windows 8.1
+and later has <code><abbr>tz</abbr></code> data and <abbr>CLDR</abbr>
+data (mentioned below) used by
+<a href="http://en.wikipedia.org/wiki/Windows_Runtime">Windows Runtime</a>
+classes such as <a
+href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.globalization.datetimeformatting.datetimeformatter.aspx"><code>DateTimeFormatter</code></a>.
+<a
+href="http://blogs.msdn.com/b/bclteam/archive/2007/06/07/exploring-windows-time-zones-with-system-timezoneinfo-josh-free.aspx">Exploring
+Windows Time Zones with <code>System.TimeZoneInfo</code></a> describes
+the older, proprietary method of Microsoft Windows 2000 and later,
+which stores time zone data in the
+<a href="http://en.wikipedia.org/wiki/Windows_Registry">Windows Registry</a>. The
+<a
+href="http://unicode.org/cldr/charts/supplemental/zone_tzid.html">Zone &rarr;
+Tzid table</a> or <a
+href="http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml"><abbr>XML</abbr>
+file</a> of the <abbr>CLDR</abbr> data maps proprietary zone IDs
+to <code><abbr>tz</abbr></code> names.
<li><a
href="http://www.oracle.com/us/technologies/java/overview/index.html">Oracle
-Java</a> releases since 1.4
-contain a copy of a subset of a recent <code><abbr>tz</abbr></code> database in a
+Java</a> contains a copy of a subset of a recent
+<code><abbr>tz</abbr></code> database in a
Java-specific format.</li>
<li><a href="http://kimmo.suominen.com/sw/timezone/">Time Zone</a> is
a <a href="http://wordpress.org/">WordPress</a> plugin. It is freely
@@ -372,12 +417,9 @@ download, compile and use the <code>tzdata<var>D</var>.tar.gz</code>
files as they are released. The Basic version is free.</li>
<li><a
href="http://veladg.com/velaterra.html">VelaTerra</a> is
-a Mac <abbr>OS X</abbr> program. Its developers
+an <abbr>OS X</abbr> program. Its developers
<a href="http://veladg.com/tzoffer.html">offer free
licenses</a> to <code><abbr>tz</abbr></code> contributors.</li>
-<li><a
-href="http://worldtimeexplorer.com/">World Time Explorer</a> is a
-Microsoft Windows program.</li>
</ul>
<h2>Other time zone databases</h2>
<ul>
@@ -391,30 +433,19 @@ for the U.S.</a>, and <a
href="http://www.astrocom.com/astrology/books/international-atlas">one for
other locations</a>) by <a
href="http://astrocom.com/">Astro Computing Services</a>.</li>
-<li><a href="http://worldtime.com/">WORLDTIME: interactive atlas,
-time info, public holidays</a>
-contains information on local time, sunrise and sunset,
-and public holidays in several hundred cities around the world.</li>
+<li><a href="http://www.hp.com/go/hpux/">HP-UX</a> has a database in
+its own <code>tztab</code>(4) format.</li>
+<li>Microsoft Windows has proprietary data mentioned above.</li>
<li><a href="http://worldtimeserver.com/">World Time Server</a>
is another time zone database.</li>
<li><a href="http://tycho.usno.navy.mil/tzones.html">World Time Zones</a>
contains data from the Time Service Department of the
-<abbr>US</abbr> Naval Observatory, used as the source
-for the <code><abbr>usno</abbr>*</code> files in
-the <code><abbr>tz</abbr></code> distribution.</li>
+<abbr>US</abbr> Naval Observatory.</li>
<li>The <a href="http://www.iata.org/publications/Pages/ssim.aspx">Standard
Schedules Information Manual</a> of the
-<a href="http://iata.org/index.htm">International Air Transport
+<a href="http://iata.org/">International Air Transport
Association</a>
gives current time zone rules for airports served by commercial aviation.</li>
-<li>Some Microsoft Windows versions contain time zone information in
-an undocumented format, with <abbr>ID</abbr>s that can be mapped to
-<code><abbr>TZ</abbr></code> values using the <a
-href="http://unicode.org/cldr/charts/supplemental/zone_tzid.html">Zone
-&rarr; Tzid table</a> in the <abbr>CLDR</abbr> data mentioned
-below, or via <a href="http://msdn.microsoft.com/en-us/windows/apps">Windows
-Store apps</a> classes such as <a
-href="http://msdn.microsoft.com/en-us/library/windows/apps/dn264145.aspx">DateTimeFormatter</a>.</li>
</ul>
<h2>Maps</h2>
<ul>
@@ -424,7 +455,7 @@ title="Central Intelligence Agency">CIA</abbr>)</a> publishes a <a
href="https://www.cia.gov/library/publications/the-world-factbook/graphics/ref_maps/physical/pdf/standard_time_zones_of_the_world.pdf">time
zone map</a>; the
<a
-href="http://www.lib.utexas.edu/maps/world.html">Perry-Casta&ntilde;eda
+href="http://www.lib.utexas.edu/maps/world.html">Perry&ndash;Casta&ntilde;eda
Library Map Collection</a>
of the University of Texas at Austin has copies of
recent editions.
@@ -448,6 +479,9 @@ where the two differ greatly.</li>
maps</a> contains <a
href="http://en.wikipedia.org/wiki/Shapefile">shapefiles</a> of
sets of <code><abbr>tz</abbr></code> regions.</li>
+<li>The <a href="https://github.com/bradfitz/latlong">latlong package</a>
+maps geographical coordinates to a <code><abbr>tz</abbr></code> region.
+It is written in Go and is freely available under the Apache License.</li>
<li><a href="http://derickrethans.nl/what-time-is-it.html">What Time
is It Here?</a> applies <a href="http://www.mongodb.org/">MongoDB</a>
geospatial query operators to shapefiles' data.</li>
@@ -482,7 +516,7 @@ common.</li>
</ul>
<h2>Civil time concepts and history</h2>
<ul>
-<li><a href="http://physics.nist.gov/GenInt/Time/time.html">A
+<li><a href="http://www.nist.gov/pml/general/time/index.cfm">A
Walk through Time</a>
surveys the evolution of timekeeping.</li>
<li><a href="http://webexhibits.org/daylightsaving/">About Daylight
@@ -584,6 +618,10 @@ title="Network Time Protocol">NTP</abbr>: The Network
Time Protocol</a>
discusses how to synchronize clocks of
Internet hosts.</li>
+<li>The <a href="http://www.nist.gov/el/isd/ieee/ieee1588.cfm">Precision
+Time Protocol</a> (<abbr
+title="Institute of Electrical and Electronics Engineers">IEEE</abbr> 1588)
+can achieve submicrosecond clock accuracy on a local area network.</li>
<li><a
href="http://tools.ietf.org/html/rfc4833">Timezone
Options for <abbr title="Dynamic Host Configuration Protocol">DHCP</abbr></a>
@@ -610,7 +648,8 @@ Scales</a> goes into more detail, particularly for historical variants.</li>
title="International Astronomical Union">IAU</abbr></a>'s <a
href="http://www.iausofa.org/"><abbr
title="Standards Of Fundamental Astronomy">SOFA</abbr></a>
-initiative publishes C and Fortran
+collection contains C and <a
+href="http://en.wikipedia.org/wiki/Fortran">Fortran</a>
code for converting among time scales like
<abbr title="International Atomic Time">TAI</abbr>,
<abbr>TDB</abbr>, <abbr>TDT</abbr> and
@@ -657,7 +696,7 @@ contains French translations for "Eastern European Summer Time",
"<abbr title="Eastern European Summer Time">EEST</abbr>", and
"Bucharest". Its
<a href="http://unicode.org/cldr/charts/by_type/index.html">by-type
-charts</a> show these values for many locales. Data are available in
+charts</a> show these values for many locales. Data values are available in
both <abbr title="Locale Data Markup Language">LDML</abbr>
(an <abbr>XML</abbr> format) and <abbr>JSON</abbr>.
<li>
@@ -677,7 +716,7 @@ Schema: Datatypes &ndash; dateTime</a> specifies a format inspired by
<a href="http://tools.ietf.org/html/rfc5322">Internet
Message Format</a> (Internet <abbr>RFC</abbr> 5322) &sect;3.3
specifies the time notation used in email and <a
-href="http://tools.ietf.org/html/rfc2616"><abbr>HTTP</abbr></a>
+href="http://www.w3.org/Protocols/"><abbr>HTTP</abbr></a>
headers.</li>
<li>
<a href="http://tools.ietf.org/html/rfc3339">Date and Time
@@ -695,12 +734,12 @@ Best of Dates, the Worst of Dates</a> covers many problems encountered
by software developers when handling dates and time stamps.</li>
<li>Alphabetic time zone abbreviations should not be used as unique
identifiers for <abbr>UTC</abbr> offsets as they are ambiguous in
-practice. For example, "<abbr>EST</abbr>" denotes 5 hours behind
-<abbr>UTC</abbr> in English-speaking North America, but it denotes 10
-or 11 hours ahead of <abbr>UTC</abbr> in Australia; and
-French-speaking North Americans prefer
-"<abbr title="Heure Normale de l'Est">HNE</abbr>" to
-"<abbr>EST</abbr>". For <abbr>POSIX</abbr> the <code><abbr>tz</abbr></code>
+practice. For example, in English-speaking North America
+"<abbr>CST</abbr>" denotes 6 hours behind <abbr>UTC</abbr>,
+but in China it denotes 8 hours ahead of <abbr>UTC</abbr>,
+and French-speaking North Americans prefer
+"<abbr title="Heure Normale du Centre">HNC</abbr>" to
+"<abbr>CST</abbr>". For <abbr>POSIX</abbr> the <code><abbr>tz</abbr></code>
database contains English abbreviations for all time stamps but in
many cases these are merely inventions of the database
maintainers.</li>
diff --git a/elsie.nci.nih.gov/src/tzfile.5 b/elsie.nci.nih.gov/src/tzfile.5
index 69b9e8b..54a67c6 100644
--- a/elsie.nci.nih.gov/src/tzfile.5
+++ b/elsie.nci.nih.gov/src/tzfile.5
@@ -13,7 +13,7 @@ followed by a character identifying the version of the file's format
(as of 2013, either an ASCII NUL, or '2', or '3')
followed by fifteen bytes containing zeroes reserved for future use,
followed by six four-byte integer values
-written in a "standard" byte order
+written in a standard byte order
(the high-order byte of the value is written first).
These values are,
in order:
@@ -25,31 +25,31 @@ The number of UT/local indicators stored in the file.
The number of standard/wall indicators stored in the file.
.TP
.I tzh_leapcnt
-The number of leap seconds for which data is stored in the file.
+The number of leap seconds for which data entries are stored in the file.
.TP
.I tzh_timecnt
-The number of "transition times" for which data is stored
+The number of transition times for which data entries are stored
in the file.
.TP
.I tzh_typecnt
-The number of "local time types" for which data is stored
+The number of local time types for which data entries are stored
in the file (must not be zero).
.TP
.I tzh_charcnt
-The number of characters of "time zone abbreviation strings"
+The number of characters of time zone abbreviation strings
stored in the file.
.PP
The above header is followed by
.I tzh_timecnt
four-byte signed integer values sorted in ascending order.
-These values are written in "standard" byte order.
+These values are written in standard byte order.
Each is used as a transition time (as returned by
.IR time (2))
at which the rules for computing local time change.
Next come
.I tzh_timecnt
one-byte unsigned integer values;
-each one tells which of the different types of "local time" types
+each one tells which of the different types of local time types
described in the file is associated with the same-indexed transition time.
These values serve as indices into an array of
.I ttinfo
@@ -144,7 +144,7 @@ For version-3-format time zone files, the POSIX-TZ-style string may
use two minor extensions to the POSIX TZ format, as described in
.IR newtzset (3).
First, the hours part of its transition times may be signed and range from
-\(mi167 through 167 instead of the POSIX-required unsigned values
+\-167 through 167 instead of the POSIX-required unsigned values
from 0 through 24. Second, DST is in effect all year if it starts
January 1 at 00:00 and ends December 31 at 24:00 plus the difference
between daylight saving and standard time.
diff --git a/elsie.nci.nih.gov/src/tzfile.5.txt b/elsie.nci.nih.gov/src/tzfile.5.txt
index 40ec6d8..560a2ce 100644
--- a/elsie.nci.nih.gov/src/tzfile.5.txt
+++ b/elsie.nci.nih.gov/src/tzfile.5.txt
@@ -12,7 +12,7 @@ DESCRIPTION
followed by a character identifying the version of the file's format
(as of 2013, either an ASCII NUL, or '2', or '3') followed by fifteen
bytes containing zeroes reserved for future use, followed by six four-
- byte integer values written in a "standard" byte order (the high-order
+ byte integer values written in a standard byte order (the high-order
byte of the value is written first). These values are, in order:
tzh_ttisgmtcnt
@@ -22,26 +22,27 @@ DESCRIPTION
The number of standard/wall indicators stored in the file.
tzh_leapcnt
- The number of leap seconds for which data is stored in the file.
+ The number of leap seconds for which data entries are stored in
+ the file.
tzh_timecnt
- The number of "transition times" for which data is stored in the
- file.
+ The number of transition times for which data entries are stored
+ in the file.
tzh_typecnt
- The number of "local time types" for which data is stored in the
- file (must not be zero).
+ The number of local time types for which data entries are stored
+ in the file (must not be zero).
tzh_charcnt
- The number of characters of "time zone abbreviation strings"
+ The number of characters of time zone abbreviation strings
stored in the file.
The above header is followed by tzh_timecnt four-byte signed integer
- values sorted in ascending order. These values are written in
- "standard" byte order. Each is used as a transition time (as returned
- by time(2)) at which the rules for computing local time change. Next
- come tzh_timecnt one-byte unsigned integer values; each one tells which
- of the different types of "local time" types described in the file is
+ values sorted in ascending order. These values are written in standard
+ byte order. Each is used as a transition time (as returned by time(2))
+ at which the rules for computing local time change. Next come
+ tzh_timecnt one-byte unsigned integer values; each one tells which of
+ the different types of local time types described in the file is
associated with the same-indexed transition time. These values serve
as indices into an array of ttinfo structures (with tzh_typecnt
entries) that appears next in the file; these structures are defined as
diff --git a/elsie.nci.nih.gov/src/tzfile.h b/elsie.nci.nih.gov/src/tzfile.h
index 911130e..ebecd68 100644
--- a/elsie.nci.nih.gov/src/tzfile.h
+++ b/elsie.nci.nih.gov/src/tzfile.h
@@ -40,7 +40,7 @@
struct tzhead {
char tzh_magic[4]; /* TZ_MAGIC */
char tzh_version[1]; /* '\0' or '2' or '3' as of 2013 */
- char tzh_reserved[15]; /* reserved--must be zero */
+ char tzh_reserved[15]; /* reserved; must be zero */
char tzh_ttisgmtcnt[4]; /* coded number of trans. time flags */
char tzh_ttisstdcnt[4]; /* coded number of trans. time flags */
char tzh_leapcnt[4]; /* coded number of leap seconds */
@@ -62,13 +62,13 @@ struct tzhead {
** tzh_leapcnt repetitions of
** one (char [4]) coded leap second transition times
** one (char [4]) total correction after above
-** tzh_ttisstdcnt (char)s indexed by type; if TRUE, transition
-** time is standard time, if FALSE,
+** tzh_ttisstdcnt (char)s indexed by type; if 1, transition
+** time is standard time, if 0,
** transition time is wall clock time
** if absent, transition times are
** assumed to be wall clock time
-** tzh_ttisgmtcnt (char)s indexed by type; if TRUE, transition
-** time is UT, if FALSE,
+** tzh_ttisgmtcnt (char)s indexed by type; if 1, transition
+** time is UT, if 0,
** transition time is local time
** if absent, transition times are
** assumed to be local time
diff --git a/elsie.nci.nih.gov/src/tzselect.8 b/elsie.nci.nih.gov/src/tzselect.8
index 1dd721a..fb39e1f 100644
--- a/elsie.nci.nih.gov/src/tzselect.8
+++ b/elsie.nci.nih.gov/src/tzselect.8
@@ -2,17 +2,19 @@
.SH NAME
tzselect \- select a time zone
.SH SYNOPSIS
+.ie \n(.g .ds - \f(CW-\fP
+.el ds - \-
.B tzselect
[
-.B \-c
+.B \*-c
.I coord
] [
-.B \-n
+.B \*-n
.I limit
] [
-.B \-\-help
+.B \*-\*-help
] [
-.B \-\-version
+.B \*-\*-version
]
.SH DESCRIPTION
The
@@ -24,7 +26,7 @@ The output is suitable as a value for the TZ environment variable.
All interaction with the user is done via standard input and standard error.
.SH OPTIONS
.TP
-.BI "\-c " coord
+.BI "\*-c " coord
Instead of asking for continent and then country and then city,
ask for selection from time zones whose largest cities
are closest to the location with geographical coordinates
@@ -54,32 +56,27 @@ seconds, with any trailing fractions represent fractional minutes or
.I SS
is present) seconds. The decimal point is that of the current locale.
For example, in the (default) C locale,
-.B "\-c\ +40.689\-074.045"
+.B "\*-c\ +40.689\*-074.045"
specifies 40.689\(de\|N, 74.045\(de\|W,
-.B "\-c\ +4041.4\-07402.7"
+.B "\*-c\ +4041.4\*-07402.7"
specifies 40\(de\|41.4\(fm\|N, 74\(de\|2.7\(fm\|W, and
-.B "\-c\ +404121\-0740240"
+.B "\*-c\ +404121\*-0740240"
specifies 40\(de\|41\(fm\|21\(sd\|N, 74\(de\|2\(fm\|40\(sd\|W.
If
.I coord
is not one of the documented forms, the resulting behavior is unspecified.
.TP
-.BI "\-n " limit
+.BI "\*-n " limit
When
-.B \-c
+.B \*-c
is used, display the closest
.I limit
locations (default 10).
-.PP
-Applications should not assume that
-.BR tzselect 's
-output matches the user's political preferences.
-.RE
.TP
-.B "\-\-help"
+.B "\*-\*-help"
Output help information and exit.
.TP
-.B "\-\-version"
+.B "\*-\*-version"
Output version information and exit.
.SH "ENVIRONMENT VARIABLES"
.TP
@@ -97,8 +94,8 @@ Name of the directory containing time zone data files (default:
\f2TZDIR\fP\f3/iso3166.tab\fP
Table of ISO 3166 2-letter country codes and country names.
.TP
-\f2TZDIR\fP\f3/zone.tab\fP
-Tables of country codes, latitude and longitude, zone names, and
+\f2TZDIR\fP\f3/zone1970.tab\fP
+Table of country codes, latitude and longitude, zone names, and
descriptive comments.
.TP
\f2TZDIR\fP\f3/\fP\f2TZ\fP
@@ -108,5 +105,9 @@ The exit status is zero if a time zone was successfully obtained from the user,
nonzero otherwise.
.SH "SEE ALSO"
newctime(3), tzfile(5), zdump(8), zic(8)
+.SH NOTES
+Applications should not assume that
+.BR tzselect 's
+output matches the user's political preferences.
.\" This file is in the public domain, so clarified as of
.\" 2009-05-17 by Arthur David Olson.
diff --git a/elsie.nci.nih.gov/src/tzselect.8.txt b/elsie.nci.nih.gov/src/tzselect.8.txt
index 6d39ea2..bf9a7f0 100644
--- a/elsie.nci.nih.gov/src/tzselect.8.txt
+++ b/elsie.nci.nih.gov/src/tzselect.8.txt
@@ -41,14 +41,10 @@ OPTIONS
When -c is used, display the closest limit locations (default
10).
- Applications should not assume that tzselect's output matches the
- user's political preferences.
-
---help
-Output help information and exit.
+ --help Output help information and exit.
---version
-Output version information and exit.
+ --version
+ Output version information and exit.
ENVIRONMENT VARIABLES
AWK Name of a Posix-compliant awk program (default: awk).
@@ -60,8 +56,8 @@ FILES
TZDIR/iso3166.tab
Table of ISO 3166 2-letter country codes and country names.
- TZDIR/zone.tab
- Tables of country codes, latitude and longitude, zone names, and
+ TZDIR/zone1970.tab
+ Table of country codes, latitude and longitude, zone names, and
descriptive comments.
TZDIR/TZ
@@ -74,4 +70,8 @@ EXIT STATUS
SEE ALSO
newctime(3), tzfile(5), zdump(8), zic(8)
+NOTES
+ Applications should not assume that tzselect's output matches the
+ user's political preferences.
+
TZSELECT(8)
diff --git a/elsie.nci.nih.gov/src/tzselect.ksh b/elsie.nci.nih.gov/src/tzselect.ksh
index 9d70691..029abcd 100644
--- a/elsie.nci.nih.gov/src/tzselect.ksh
+++ b/elsie.nci.nih.gov/src/tzselect.ksh
@@ -40,12 +40,13 @@ REPORT_BUGS_TO=tz@iana.org
# Check for awk Posix compliance.
($AWK -v x=y 'BEGIN { exit 123 }') </dev/null >/dev/null 2>&1
[ $? = 123 ] || {
- echo >&2 "$0: Sorry, your \`$AWK' program is not Posix compatible."
+ echo >&2 "$0: Sorry, your '$AWK' program is not Posix compatible."
exit 1
}
coord=
location_limit=10
+zonetabtype=zone1970
usage="Usage: tzselect [--version] [--help] [-c COORD] [-n LIMIT]
Select a time zone interactively.
@@ -80,7 +81,7 @@ if
?*) : ;;
'')
# '; exit' should be redundant, but Dash doesn't properly fail without it.
- (eval 'set --; select x; do break; done; exit') 2>/dev/null
+ (eval 'set --; select x; do break; done; exit') </dev/null 2>/dev/null
esac
then
# Do this inside 'eval', as otherwise the shell might exit when parsing it
@@ -139,13 +140,15 @@ else
}
fi
-while getopts c:n:-: opt
+while getopts c:n:t:-: opt
do
case $opt$OPTARG in
c*)
coord=$OPTARG ;;
n*)
location_limit=$OPTARG ;;
+ t*) # Undocumented option, used for developer testing.
+ zonetabtype=$OPTARG ;;
-help)
exec echo "$usage" ;;
-version)
@@ -165,10 +168,10 @@ esac
# Make sure the tables are readable.
TZ_COUNTRY_TABLE=$TZDIR/iso3166.tab
-TZ_ZONE_TABLE=$TZDIR/zone.tab
+TZ_ZONE_TABLE=$TZDIR/$zonetabtype.tab
for f in $TZ_COUNTRY_TABLE $TZ_ZONE_TABLE
do
- <$f || {
+ <"$f" || {
echo >&2 "$0: time zone files are not set up correctly"
exit 1
}
@@ -189,7 +192,13 @@ output_distances='
country[$1] = $2
country["US"] = "US" # Otherwise the strings get too long.
}
- function convert_coord(coord, deg, min, ilen, sign, sec) {
+ function abs(x) {
+ return x < 0 ? -x : x;
+ }
+ function min(x, y) {
+ return x < y ? x : y;
+ }
+ function convert_coord(coord, deg, minute, ilen, sign, sec) {
if (coord ~ /^[-+]?[0-9]?[0-9][0-9][0-9][0-9][0-9][0-9]([^0-9]|$)/) {
degminsec = coord
intdeg = degminsec < 0 ? -int(-degminsec / 10000) : int(degminsec / 10000)
@@ -200,8 +209,8 @@ output_distances='
} else if (coord ~ /^[-+]?[0-9]?[0-9][0-9][0-9][0-9]([^0-9]|$)/) {
degmin = coord
intdeg = degmin < 0 ? -int(-degmin / 100) : int(degmin / 100)
- min = degmin - intdeg * 100
- deg = (intdeg * 60 + min) / 60
+ minute = degmin - intdeg * 100
+ deg = (intdeg * 60 + minute) / 60
} else
deg = coord
return deg * 0.017453292519943296
@@ -217,7 +226,7 @@ output_distances='
# Great-circle distance between points with given latitude and longitude.
# Inputs and output are in radians. This uses the great-circle special
# case of the Vicenty formula for distances on ellipsoids.
- function dist(lat1, long1, lat2, long2, dlong, x, y, num, denom) {
+ function gcdist(lat1, long1, lat2, long2, dlong, x, y, num, denom) {
dlong = long2 - long1
x = cos (lat2) * sin (dlong)
y = cos (lat1) * sin (lat2) - sin (lat1) * cos (lat2) * cos (dlong)
@@ -225,6 +234,19 @@ output_distances='
denom = sin (lat1) * sin (lat2) + cos (lat1) * cos (lat2) * cos (dlong)
return atan2(num, denom)
}
+ # Parallel distance between points with given latitude and longitude.
+ # This is the product of the longitude difference and the cosine
+ # of the latitude of the point that is further from the equator.
+ # I.e., it considers longitudes to be further apart if they are
+ # nearer the equator.
+ function pardist(lat1, long1, lat2, long2) {
+ return abs (long1 - long2) * min (cos (lat1), cos (lat2))
+ }
+ # The distance function is the sum of the great-circle distance and
+ # the parallel distance. It could be weighted.
+ function dist(lat1, long1, lat2, long2) {
+ return gcdist (lat1, long1, lat2, long2) + pardist (lat1, long1, lat2, long2)
+ }
BEGIN {
coord_lat = convert_latitude(coord)
coord_long = convert_longitude(coord)
@@ -232,7 +254,13 @@ output_distances='
/^[^#]/ {
here_lat = convert_latitude($2)
here_long = convert_longitude($2)
- line = $1 "\t" $2 "\t" $3 "\t" country[$1]
+ line = $1 "\t" $2 "\t" $3
+ sep = "\t"
+ ncc = split($1, cc, /,/)
+ for (i = 1; i <= ncc; i++) {
+ line = line sep country[cc[i]]
+ sep = ", "
+ }
if (NF == 4)
line = line " - " $4
printf "%g\t%s\n", dist(coord_lat, coord_long, here_lat, here_long), line
@@ -269,7 +297,7 @@ while
entry = entry " Ocean"
printf "'\''%s'\''\n", entry
}
- ' $TZ_ZONE_TABLE |
+ ' <"$TZ_ZONE_TABLE" |
sort -u |
tr '\n' ' '
echo ''
@@ -308,7 +336,7 @@ while
exit 0
}'
do
- echo >&2 "\`$TZ' is not a conforming" \
+ echo >&2 "'$TZ' is not a conforming" \
'Posix time zone string.'
done
TZ_for_date=$TZ;;
@@ -327,7 +355,7 @@ while
distance_table=`$AWK \
-v coord="$coord" \
-v TZ_COUNTRY_TABLE="$TZ_COUNTRY_TABLE" \
- "$output_distances" <$TZ_ZONE_TABLE |
+ "$output_distances" <"$TZ_ZONE_TABLE" |
sort -n |
sed "${location_limit}q"
`
@@ -355,7 +383,9 @@ while
BEGIN { FS = "\t" }
/^#/ { next }
$3 ~ ("^" continent "/") {
- if (!cc_seen[$1]++) cc_list[++ccs] = $1
+ ncc = split($1, cc, /,/)
+ for (i = 1; i <= ncc; i++)
+ if (!cc_seen[cc[i]]++) cc_list[++ccs] = cc[i]
}
END {
while (getline <TZ_COUNTRY_TABLE) {
@@ -369,7 +399,7 @@ while
print country
}
}
- ' <$TZ_ZONE_TABLE | sort -f`
+ ' <"$TZ_ZONE_TABLE" | sort -f`
# If there's more than one country, ask the user which one.
@@ -399,8 +429,8 @@ while
}
}
}
- $1 == cc { print $4 }
- ' <$TZ_ZONE_TABLE`
+ $1 ~ cc { print $4 }
+ ' <"$TZ_ZONE_TABLE"`
# If there's more than one region, ask the user which one.
@@ -430,13 +460,13 @@ while
}
}
}
- $1 == cc && $4 == region { print $3 }
- ' <$TZ_ZONE_TABLE`
+ $1 ~ cc && $4 == region { print $3 }
+ ' <"$TZ_ZONE_TABLE"`
esac
# Make sure the corresponding zoneinfo file exists.
TZ_for_date=$TZDIR/$TZ
- <$TZ_for_date || {
+ <"$TZ_for_date" || {
echo >&2 "$0: time zone files are not set up correctly"
exit 1
}
diff --git a/elsie.nci.nih.gov/src/workman.sh b/elsie.nci.nih.gov/src/workman.sh
index 7675dc1..4b3b64a 100644
--- a/elsie.nci.nih.gov/src/workman.sh
+++ b/elsie.nci.nih.gov/src/workman.sh
@@ -1,6 +1,5 @@
#! /bin/sh
-# <pre>
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
@@ -14,6 +13,8 @@ echo ".am TH
..
.rm }H
.rm }F" | nroff -man - ${1+"$@"} | perl -ne '
+ binmode STDIN, '\'':encoding(utf8)'\'';
+ binmode STDOUT, '\'':encoding(utf8)'\'';
chomp;
s/.\010//g;
s/\s*$//;
diff --git a/elsie.nci.nih.gov/src/yearistype.sh b/elsie.nci.nih.gov/src/yearistype.sh
index bdc6e58..dfdcdf0 100644
--- a/elsie.nci.nih.gov/src/yearistype.sh
+++ b/elsie.nci.nih.gov/src/yearistype.sh
@@ -5,7 +5,7 @@
case $#-$1 in
2-|2-0*|2-*[!0-9]*)
- echo "$0: wild year - $1" >&2
+ echo "$0: wild year: $1" >&2
exit 1 ;;
esac
@@ -31,7 +31,7 @@ case $#-$2 in
*) exit 1 ;;
esac ;;
2-*)
- echo "$0: wild type - $2" >&2 ;;
+ echo "$0: wild type: $2" >&2 ;;
esac
echo "$0: usage is $0 year even|odd|uspres|nonpres|nonuspres" >&2
diff --git a/elsie.nci.nih.gov/src/zdump.8 b/elsie.nci.nih.gov/src/zdump.8
index 106361a..94de021 100644
--- a/elsie.nci.nih.gov/src/zdump.8
+++ b/elsie.nci.nih.gov/src/zdump.8
@@ -4,17 +4,13 @@ zdump \- time zone dumper
.SH SYNOPSIS
.B zdump
[
-.B \-\-version
-] [
-.B \-v
-] [
-.B \-V
-] [
-.B \-c
-[loyear,]hiyear ] [
-.B \-t
-[lotime,]hitime ] [ zonename ... ]
+.I option
+\&... ] [
+.I zonename
+\&... ]
.SH DESCRIPTION
+.ie \n(.g .ds - \f(CW-\fP
+.el ds - \-
.I Zdump
prints the current time in each
.I zonename
@@ -22,10 +18,10 @@ named on the command line.
.PP
These options are available:
.TP
-.BI "\-\-version"
+.BI "\*-\*-version"
Output version information and exit.
.TP
-.B \-v
+.B \*-v
For each
.I zonename
on the command line,
@@ -41,19 +37,20 @@ if the given time is Daylight Saving Time or
.B isdst=0
otherwise.
.TP
-.B \-V
+.B \*-V
Like
-.BR \-v ,
+.BR \*-v ,
except omit the times relative to the extreme time values.
This generates output that is easier to compare to that of
implementations with different time representations.
.TP
-.BI "\-c " [loyear,]hiyear
+.BI "\*-c " [loyear,]hiyear
Cut off verbose output near the start of the given year(s).
By default,
-the program cuts off verbose output near the starts of the years \-500 and 2500.
+the program cuts off verbose output near the starts of the years
+\-500 and 2500.
.TP
-.BI "\-t " [lotime,]hitime
+.BI "\*-t " [lotime,]hitime
Cut off verbose output at the start of the given time(s),
given in decimal seconds since 1970-01-01 00:00:00 UTC.
.SH LIMITATIONS
diff --git a/elsie.nci.nih.gov/src/zdump.8.txt b/elsie.nci.nih.gov/src/zdump.8.txt
index f633a76..ccae319 100644
--- a/elsie.nci.nih.gov/src/zdump.8.txt
+++ b/elsie.nci.nih.gov/src/zdump.8.txt
@@ -4,8 +4,7 @@ NAME
zdump - time zone dumper
SYNOPSIS
- zdump [ --version ] [ -v ] [ -V ] [ -c [loyear,]hiyear ] [ -t
- [lotime,]hitime ] [ zonename ... ]
+ zdump [ option ... ] [ zonename ... ]
DESCRIPTION
Zdump prints the current time in each zonename named on the command
diff --git a/elsie.nci.nih.gov/src/zdump.c b/elsie.nci.nih.gov/src/zdump.c
index c48ac84..2d82fe5 100644
--- a/elsie.nci.nih.gov/src/zdump.c
+++ b/elsie.nci.nih.gov/src/zdump.c
@@ -9,25 +9,32 @@
** This code has been made independent of the rest of the time
** conversion package to increase confidence in the verification it provides.
** You can use this code to help in verifying other implementations.
-**
-** However, include private.h when debugging, so that it overrides
-** time_t consistently with the rest of the package.
+** To do this, compile with -DUSE_LTZ=0 and link without the tz library.
*/
-#ifdef time_tz
+#ifndef NETBSD_INSPIRED
+# define NETBSD_INSPIRED 1
+#endif
+#ifndef USE_LTZ
+# define USE_LTZ 1
+#endif
+
+#if USE_LTZ
# include "private.h"
#endif
+/* Enable tm_gmtoff and tm_zone on GNUish systems. */
+#define _GNU_SOURCE 1
+/* Enable strtoimax on Solaris 10. */
+#define __EXTENSIONS__ 1
+
#include "stdio.h" /* for stdout, stderr, perror */
#include "string.h" /* for strcpy */
#include "sys/types.h" /* for time_t */
#include "time.h" /* for struct tm */
#include "stdlib.h" /* for exit, malloc, atoi */
#include "limits.h" /* for CHAR_BIT, LLONG_MAX */
-#include "ctype.h" /* for isalpha et al. */
-#ifndef isascii
-#define isascii(x) 1
-#endif /* !defined isascii */
+#include <errno.h>
/*
** Substitutes for pre-C99 compilers.
@@ -58,24 +65,59 @@ typedef int int_fast32_t;
# endif
#endif
+/* Pre-C99 GCC compilers define __LONG_LONG_MAX__ instead of LLONG_MAX. */
+#if !defined LLONG_MAX && defined __LONG_LONG_MAX__
+# define LLONG_MAX __LONG_LONG_MAX__
+#endif
+
#ifndef INTMAX_MAX
-# if defined LLONG_MAX || defined __LONG_LONG_MAX__
+# ifdef LLONG_MAX
typedef long long intmax_t;
# define strtoimax strtoll
-# define PRIdMAX "lld"
-# ifdef LLONG_MAX
-# define INTMAX_MAX LLONG_MAX
-# else
-# define INTMAX_MAX __LONG_LONG_MAX__
-# endif
+# define INTMAX_MAX LLONG_MAX
# else
typedef long intmax_t;
# define strtoimax strtol
-# define PRIdMAX "ld"
# define INTMAX_MAX LONG_MAX
# endif
#endif
+#ifndef PRIdMAX
+# if INTMAX_MAX == LLONG_MAX
+# define PRIdMAX "lld"
+# else
+# define PRIdMAX "ld"
+# endif
+#endif
+
+/* Infer TM_ZONE on systems where this information is known, but suppress
+ guessing if NO_TM_ZONE is defined. Similarly for TM_GMTOFF. */
+#if (defined __GLIBC__ \
+ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ \
+ || (defined __APPLE__ && defined __MACH__))
+# if !defined TM_GMTOFF && !defined NO_TM_GMTOFF
+# define TM_GMTOFF tm_gmtoff
+# endif
+# if !defined TM_ZONE && !defined NO_TM_ZONE
+# define TM_ZONE tm_zone
+# endif
+#endif
+
+#ifndef HAVE_LOCALTIME_R
+# define HAVE_LOCALTIME_R 1
+#endif
+
+#ifndef HAVE_LOCALTIME_RZ
+# ifdef TM_ZONE
+# define HAVE_LOCALTIME_RZ (NETBSD_INSPIRED && USE_LTZ)
+# else
+# define HAVE_LOCALTIME_RZ 0
+# endif
+#endif
+
+#ifndef HAVE_TZSET
+# define HAVE_TZSET 1
+#endif
#ifndef ZDUMP_LO_YEAR
#define ZDUMP_LO_YEAR (-500)
@@ -89,13 +131,13 @@ typedef long intmax_t;
#define MAX_STRING_LENGTH 1024
#endif /* !defined MAX_STRING_LENGTH */
-#ifndef TRUE
-#define TRUE 1
-#endif /* !defined TRUE */
-
-#ifndef FALSE
-#define FALSE 0
-#endif /* !defined FALSE */
+#if __STDC_VERSION__ < 199901
+# define true 1
+# define false 0
+# define bool int
+#else
+# include <stdbool.h>
+#endif
#ifndef EXIT_SUCCESS
#define EXIT_SUCCESS 0
@@ -167,16 +209,6 @@ enum { SECSPER400YEARS_FITS = SECSPERLYEAR <= INTMAX_MAX / 400 };
#include "libintl.h"
#endif /* HAVE_GETTEXT */
-#ifndef GNUC_or_lint
-#ifdef lint
-#define GNUC_or_lint
-#else /* !defined lint */
-#ifdef __GNUC__
-#define GNUC_or_lint
-#endif /* defined __GNUC__ */
-#endif /* !defined lint */
-#endif /* !defined GNUC_or_lint */
-
#if 2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)
# define ATTRIBUTE_PURE __attribute__ ((__pure__))
#else
@@ -185,7 +217,7 @@ enum { SECSPER400YEARS_FITS = SECSPERLYEAR <= INTMAX_MAX / 400 };
/*
** For the benefit of GNU folk...
-** `_(MSGID)' uses the current locale's message library string for MSGID.
+** '_(MSGID)' uses the current locale's message library string for MSGID.
** The default is to use gettext if available, and use MSGID otherwise.
*/
@@ -197,9 +229,14 @@ enum { SECSPER400YEARS_FITS = SECSPERLYEAR <= INTMAX_MAX / 400 };
#endif /* !HAVE_GETTEXT */
#endif /* !defined _ */
-#ifndef TZ_DOMAIN
-#define TZ_DOMAIN "tz"
-#endif /* !defined TZ_DOMAIN */
+#if !defined TZ_DOMAIN && defined HAVE_GETTEXT
+# define TZ_DOMAIN "tz"
+#endif
+
+#if ! HAVE_LOCALTIME_RZ
+# undef timezone_t
+# define timezone_t char **
+#endif
extern char ** environ;
extern int getopt(int argc, char * const argv[],
@@ -217,49 +254,167 @@ static time_t const absolute_max_time =
((time_t) -1 < 0
? - (~ 0 < 0) - ((time_t) -1 << (CHAR_BIT * sizeof (time_t) - 1))
: -1);
-static size_t longest;
+static int longest;
static char * progname;
-static int warned;
+static bool warned;
+static bool errout;
+
+static char const *abbr(struct tm const *);
+static intmax_t delta(struct tm *, struct tm *) ATTRIBUTE_PURE;
+static void dumptime(struct tm const *);
+static time_t hunt(timezone_t, char *, time_t, time_t);
+static void show(timezone_t, char *, time_t, bool);
+static const char *tformat(void);
+static time_t yeartot(intmax_t) ATTRIBUTE_PURE;
+
+/* Is A an alphabetic character in the C locale? */
+static bool
+is_alpha(char a)
+{
+ switch (a) {
+ default:
+ return false;
+ case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G':
+ case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N':
+ case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U':
+ case 'V': case 'W': case 'X': case 'Y': case 'Z':
+ case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g':
+ case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n':
+ case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u':
+ case 'v': case 'w': case 'x': case 'y': case 'z':
+ return true;
+ }
+}
+
+/* Return A + B, exiting if the result would overflow. */
+static size_t
+sumsize(size_t a, size_t b)
+{
+ size_t sum = a + b;
+ if (sum < a) {
+ fprintf(stderr, "%s: size overflow\n", progname);
+ exit(EXIT_FAILURE);
+ }
+ return sum;
+}
+
+#if ! HAVE_TZSET
+# undef tzset
+# define tzset zdump_tzset
+static void tzset(void) { }
+#endif
-static char * abbr(struct tm * tmp);
-static void abbrok(const char * abbrp, const char * zone);
-static intmax_t delta(struct tm * newp, struct tm * oldp) ATTRIBUTE_PURE;
-static void dumptime(const struct tm * tmp);
-static time_t hunt(char * name, time_t lot, time_t hit);
-static void show(char * zone, time_t t, int v);
-static const char * tformat(void);
-static time_t yeartot(intmax_t y) ATTRIBUTE_PURE;
+#if ! HAVE_LOCALTIME_RZ
+
+# if ! HAVE_LOCALTIME_R || ! HAVE_TZSET
+# undef localtime_r
+# define localtime_r zdump_localtime_r
+static struct tm *
+localtime_r(time_t *tp, struct tm *tmp)
+{
+ struct tm *r = localtime(tp);
+ if (r) {
+ *tmp = *r;
+ r = tmp;
+ }
+ return r;
+}
+# endif
+
+# undef localtime_rz
+# define localtime_rz zdump_localtime_rz
+static struct tm *
+localtime_rz(timezone_t rz, time_t *tp, struct tm *tmp)
+{
+ return localtime_r(tp, tmp);
+}
+
+# ifdef TYPECHECK
+# undef mktime_z
+# define mktime_z zdump_mktime_z
+static time_t
+mktime_z(timezone_t tz, struct tm *tmp)
+{
+ return mktime(tmp);
+}
+# endif
+
+# undef tzalloc
+# undef tzfree
+# define tzalloc zdump_tzalloc
+# define tzfree zdump_tzfree
+
+static timezone_t
+tzalloc(char const *val)
+{
+ static char **fakeenv;
+ char **env = fakeenv;
+ char *env0;
+ if (! env) {
+ char **e = environ;
+ int to;
+
+ while (*e++)
+ continue;
+ env = malloc(sumsize(sizeof *environ,
+ (e - environ) * sizeof *environ));
+ if (! env) {
+ perror(progname);
+ exit(EXIT_FAILURE);
+ }
+ to = 1;
+ for (e = environ; (env[to] = *e); e++)
+ to += strncmp(*e, "TZ=", 3) != 0;
+ }
+ env0 = malloc(sumsize(sizeof "TZ=", strlen(val)));
+ if (! env0) {
+ perror(progname);
+ exit(EXIT_FAILURE);
+ }
+ env[0] = strcat(strcpy(env0, "TZ="), val);
+ environ = fakeenv = env;
+ tzset();
+ return env;
+}
+
+static void
+tzfree(timezone_t env)
+{
+ environ = env + 1;
+ free(env[0]);
+}
+#endif /* ! HAVE_LOCALTIME_RZ */
#ifndef TYPECHECK
-#define my_localtime localtime
+# define my_localtime_rz localtime_rz
#else /* !defined TYPECHECK */
+
static struct tm *
-my_localtime(time_t *tp)
+my_localtime_rz(timezone_t tz, time_t *tp, struct tm *tmp)
{
- register struct tm * tmp;
-
- tmp = localtime(tp);
- if (tp != NULL && tmp != NULL) {
+ tmp = localtime_rz(tz, tp, tmp);
+ if (tmp) {
struct tm tm;
register time_t t;
tm = *tmp;
- t = mktime(&tm);
+ t = mktime_z(tz, &tm);
if (t != *tp) {
- (void) fflush(stdout);
- (void) fprintf(stderr, "\n%s: ", progname);
- (void) fprintf(stderr, tformat(), *tp);
- (void) fprintf(stderr, " ->");
- (void) fprintf(stderr, " year=%d", tmp->tm_year);
- (void) fprintf(stderr, " mon=%d", tmp->tm_mon);
- (void) fprintf(stderr, " mday=%d", tmp->tm_mday);
- (void) fprintf(stderr, " hour=%d", tmp->tm_hour);
- (void) fprintf(stderr, " min=%d", tmp->tm_min);
- (void) fprintf(stderr, " sec=%d", tmp->tm_sec);
- (void) fprintf(stderr, " isdst=%d", tmp->tm_isdst);
- (void) fprintf(stderr, " -> ");
- (void) fprintf(stderr, tformat(), t);
- (void) fprintf(stderr, "\n");
+ fflush(stdout);
+ fprintf(stderr, "\n%s: ", progname);
+ fprintf(stderr, tformat(), *tp);
+ fprintf(stderr, " ->");
+ fprintf(stderr, " year=%d", tmp->tm_year);
+ fprintf(stderr, " mon=%d", tmp->tm_mon);
+ fprintf(stderr, " mday=%d", tmp->tm_mday);
+ fprintf(stderr, " hour=%d", tmp->tm_hour);
+ fprintf(stderr, " min=%d", tmp->tm_min);
+ fprintf(stderr, " sec=%d", tmp->tm_sec);
+ fprintf(stderr, " isdst=%d", tmp->tm_isdst);
+ fprintf(stderr, " -> ");
+ fprintf(stderr, tformat(), t);
+ fprintf(stderr, "\n");
+ errout = true;
}
}
return tmp;
@@ -276,7 +431,7 @@ abbrok(const char *const abbrp, const char *const zone)
return;
cp = abbrp;
wp = NULL;
- while (isascii((unsigned char) *cp) && isalpha((unsigned char) *cp))
+ while (is_alpha(*cp))
++cp;
if (cp - abbrp == 0)
wp = _("lacks alphabetic at start");
@@ -286,77 +441,122 @@ abbrok(const char *const abbrp, const char *const zone)
wp = _("has more than 6 alphabetics");
if (wp == NULL && (*cp == '+' || *cp == '-')) {
++cp;
- if (isascii((unsigned char) *cp) &&
- isdigit((unsigned char) *cp))
- if (*cp++ == '1' && *cp >= '0' && *cp <= '4')
- ++cp;
+ if ('0' <= *cp && *cp <= '9')
+ if (*cp++ == '1' && '0' <= *cp && *cp <= '4')
+ cp++;
if (*cp != '\0')
wp = _("differs from POSIX standard");
}
if (wp == NULL)
return;
- (void) fflush(stdout);
- (void) fprintf(stderr,
+ fflush(stdout);
+ fprintf(stderr,
_("%s: warning: zone \"%s\" abbreviation \"%s\" %s\n"),
progname, zone, abbrp, wp);
- warned = TRUE;
+ warned = errout = true;
+}
+
+/* Return a time zone abbreviation. If the abbreviation needs to be
+ saved, use *BUF (of size *BUFALLOC) to save it, and return the
+ abbreviation in the possibly-reallocated *BUF. Otherwise, just
+ return the abbreviation. Get the abbreviation from TMP.
+ Exit on memory allocation failure. */
+static char const *
+saveabbr(char **buf, size_t *bufalloc, struct tm const *tmp)
+{
+ char const *ab = abbr(tmp);
+ if (HAVE_LOCALTIME_RZ)
+ return ab;
+ else {
+ size_t ablen = strlen(ab);
+ if (*bufalloc <= ablen) {
+ free(*buf);
+
+ /* Make the new buffer at least twice as long as the old,
+ to avoid O(N**2) behavior on repeated calls. */
+ *bufalloc = sumsize(*bufalloc, ablen + 1);
+
+ *buf = malloc(*bufalloc);
+ if (! *buf) {
+ perror(progname);
+ exit(EXIT_FAILURE);
+ }
+ }
+ return strcpy(*buf, ab);
+ }
+}
+
+static void
+close_file(FILE *stream)
+{
+ char const *e = (ferror(stream) ? _("I/O error")
+ : fclose(stream) != 0 ? strerror(errno) : NULL);
+ if (e) {
+ fprintf(stderr, "%s: %s\n", progname, e);
+ exit(EXIT_FAILURE);
+ }
}
static void
usage(FILE * const stream, const int status)
{
- (void) fprintf(stream,
+ fprintf(stream,
_("%s: usage: %s [--version] [--help] [-{vV}] [-{ct} [lo,]hi] zonename ...\n"
"\n"
"Report bugs to %s.\n"),
progname, progname, REPORT_BUGS_TO);
+ if (status == EXIT_SUCCESS)
+ close_file(stream);
exit(status);
}
int
main(int argc, char *argv[])
{
+ /* These are static so that they're initially zero. */
+ static char * abbrev;
+ static size_t abbrevsize;
+ static struct tm newtm;
+
register int i;
- register int vflag;
- register int Vflag;
+ register bool vflag;
+ register bool Vflag;
register char * cutarg;
register char * cuttimes;
register time_t cutlotime;
register time_t cuthitime;
- register char ** fakeenv;
time_t now;
time_t t;
time_t newt;
struct tm tm;
- struct tm newtm;
register struct tm * tmp;
register struct tm * newtmp;
cutlotime = absolute_min_time;
cuthitime = absolute_max_time;
#if HAVE_GETTEXT
- (void) setlocale(LC_ALL, "");
+ setlocale(LC_ALL, "");
#ifdef TZ_DOMAINDIR
- (void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
+ bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
#endif /* defined TEXTDOMAINDIR */
- (void) textdomain(TZ_DOMAIN);
+ textdomain(TZ_DOMAIN);
#endif /* HAVE_GETTEXT */
progname = argv[0];
for (i = 1; i < argc; ++i)
if (strcmp(argv[i], "--version") == 0) {
- (void) printf("zdump %s%s\n", PKGVERSION, TZVERSION);
- exit(EXIT_SUCCESS);
+ printf("zdump %s%s\n", PKGVERSION, TZVERSION);
+ return EXIT_SUCCESS;
} else if (strcmp(argv[i], "--help") == 0) {
usage(stdout, EXIT_SUCCESS);
}
- vflag = Vflag = 0;
+ vflag = Vflag = false;
cutarg = cuttimes = NULL;
for (;;)
switch (getopt(argc, argv, "c:t:vV")) {
case 'c': cutarg = optarg; break;
case 't': cuttimes = optarg; break;
- case 'v': vflag = 1; break;
- case 'V': Vflag = 1; break;
+ case 'v': vflag = true; break;
+ case 'V': Vflag = true; break;
case -1:
if (! (optind == argc - 1 && strcmp(argv[optind], "=") == 0))
goto arg_processing_done;
@@ -383,9 +583,9 @@ main(int argc, char *argv[])
cutloyear = lo;
cuthiyear = hi;
} else {
-(void) fprintf(stderr, _("%s: wild -c argument %s\n"),
+ fprintf(stderr, _("%s: wild -c argument %s\n"),
progname, cutarg);
- exit(EXIT_FAILURE);
+ return EXIT_FAILURE;
}
}
if (cutarg != NULL || cuttimes == NULL) {
@@ -415,81 +615,61 @@ main(int argc, char *argv[])
cuthitime = hi;
}
} else {
- (void) fprintf(stderr,
+ fprintf(stderr,
_("%s: wild -t argument %s\n"),
progname, cuttimes);
- exit(EXIT_FAILURE);
+ return EXIT_FAILURE;
}
}
}
- (void) time(&now);
+ now = time(NULL);
longest = 0;
- for (i = optind; i < argc; ++i)
- if (strlen(argv[i]) > longest)
- longest = strlen(argv[i]);
- {
- register int from;
- register int to;
-
- for (i = 0; environ[i] != NULL; ++i)
- continue;
- fakeenv = malloc((i + 2) * sizeof *fakeenv);
- if (fakeenv == NULL
- || (fakeenv[0] = malloc(longest + 4)) == NULL) {
- (void) perror(progname);
- exit(EXIT_FAILURE);
- }
- to = 0;
- (void) strcpy(fakeenv[to++], "TZ=");
- for (from = 0; environ[from] != NULL; ++from)
- if (strncmp(environ[from], "TZ=", 3) != 0)
- fakeenv[to++] = environ[from];
- fakeenv[to] = NULL;
- environ = fakeenv;
+ for (i = optind; i < argc; i++) {
+ size_t arglen = strlen(argv[i]);
+ if (longest < arglen)
+ longest = arglen < INT_MAX ? arglen : INT_MAX;
}
- for (i = optind; i < argc; ++i) {
- static char buf[MAX_STRING_LENGTH];
- (void) strcpy(&fakeenv[0][3], argv[i]);
+ for (i = optind; i < argc; ++i) {
+ timezone_t tz = tzalloc(argv[i]);
+ char const *ab;
+ if (!tz) {
+ perror(argv[i]);
+ return EXIT_FAILURE;
+ }
if (! (vflag | Vflag)) {
- show(argv[i], now, FALSE);
+ show(tz, argv[i], now, false);
+ tzfree(tz);
continue;
}
- warned = FALSE;
+ warned = false;
t = absolute_min_time;
if (!Vflag) {
- show(argv[i], t, TRUE);
+ show(tz, argv[i], t, true);
t += SECSPERDAY;
- show(argv[i], t, TRUE);
+ show(tz, argv[i], t, true);
}
if (t < cutlotime)
t = cutlotime;
- tmp = my_localtime(&t);
- if (tmp != NULL) {
- tm = *tmp;
- (void) strncpy(buf, abbr(&tm), (sizeof buf) - 1);
- }
+ tmp = my_localtime_rz(tz, &t, &tm);
+ if (tmp)
+ ab = saveabbr(&abbrev, &abbrevsize, &tm);
for ( ; ; ) {
newt = (t < absolute_max_time - SECSPERDAY / 2
? t + SECSPERDAY / 2
: absolute_max_time);
if (cuthitime <= newt)
break;
- newtmp = localtime(&newt);
- if (newtmp != NULL)
- newtm = *newtmp;
+ newtmp = localtime_rz(tz, &newt, &newtm);
if ((tmp == NULL || newtmp == NULL) ? (tmp != newtmp) :
(delta(&newtm, &tm) != (newt - t) ||
newtm.tm_isdst != tm.tm_isdst ||
- strcmp(abbr(&newtm), buf) != 0)) {
- newt = hunt(argv[i], t, newt);
- newtmp = localtime(&newt);
- if (newtmp != NULL) {
- newtm = *newtmp;
- (void) strncpy(buf,
- abbr(&newtm),
- (sizeof buf) - 1);
- }
+ strcmp(abbr(&newtm), ab) != 0)) {
+ newt = hunt(tz, argv[i], t, newt);
+ newtmp = localtime_rz(tz, &newt, &newtm);
+ if (newtmp)
+ ab = saveabbr(&abbrev, &abbrevsize,
+ &newtm);
}
t = newt;
tm = newtm;
@@ -498,19 +678,16 @@ main(int argc, char *argv[])
if (!Vflag) {
t = absolute_max_time;
t -= SECSPERDAY;
- show(argv[i], t, TRUE);
+ show(tz, argv[i], t, true);
t += SECSPERDAY;
- show(argv[i], t, TRUE);
+ show(tz, argv[i], t, true);
}
+ tzfree(tz);
}
- if (fflush(stdout) || ferror(stdout)) {
- (void) fprintf(stderr, "%s: ", progname);
- (void) perror(_("Error writing to standard output"));
- exit(EXIT_FAILURE);
- }
- exit(EXIT_SUCCESS);
- /* If exit fails to exit... */
- return EXIT_FAILURE;
+ close_file(stdout);
+ if (errout && (ferror(stderr) || fclose(stderr) != 0))
+ return EXIT_FAILURE;
+ return EXIT_SUCCESS;
}
static time_t
@@ -557,20 +734,20 @@ yeartot(const intmax_t y)
}
static time_t
-hunt(char *name, time_t lot, time_t hit)
+hunt(timezone_t tz, char *name, time_t lot, time_t hit)
{
+ static char * loab;
+ static size_t loabsize;
+ char const * ab;
time_t t;
struct tm lotm;
register struct tm * lotmp;
struct tm tm;
register struct tm * tmp;
- char loab[MAX_STRING_LENGTH];
- lotmp = my_localtime(&lot);
- if (lotmp != NULL) {
- lotm = *lotmp;
- (void) strncpy(loab, abbr(&lotm), (sizeof loab) - 1);
- }
+ lotmp = my_localtime_rz(tz, &lot, &lotm);
+ if (lotmp)
+ ab = saveabbr(&loab, &loabsize, &lotm);
for ( ; ; ) {
time_t diff = hit - lot;
if (diff < 2)
@@ -581,20 +758,18 @@ hunt(char *name, time_t lot, time_t hit)
++t;
else if (t >= hit)
--t;
- tmp = my_localtime(&t);
- if (tmp != NULL)
- tm = *tmp;
+ tmp = my_localtime_rz(tz, &t, &tm);
if ((lotmp == NULL || tmp == NULL) ? (lotmp == tmp) :
(delta(&tm, &lotm) == (t - lot) &&
tm.tm_isdst == lotm.tm_isdst &&
- strcmp(abbr(&tm), loab) == 0)) {
+ strcmp(abbr(&tm), ab) == 0)) {
lot = t;
lotm = tm;
lotmp = tmp;
} else hit = t;
}
- show(name, lot, TRUE);
- show(name, hit, TRUE);
+ show(tz, name, lot, true);
+ show(tz, name, hit, true);
return hit;
}
@@ -624,48 +799,50 @@ delta(struct tm * newp, struct tm *oldp)
}
static void
-show(char *zone, time_t t, int v)
+show(timezone_t tz, char *zone, time_t t, bool v)
{
register struct tm * tmp;
+ struct tm tm;
- (void) printf("%-*s ", (int) longest, zone);
+ printf("%-*s ", longest, zone);
if (v) {
tmp = gmtime(&t);
if (tmp == NULL) {
- (void) printf(tformat(), t);
+ printf(tformat(), t);
} else {
dumptime(tmp);
- (void) printf(" UT");
+ printf(" UT");
}
- (void) printf(" = ");
+ printf(" = ");
}
- tmp = my_localtime(&t);
+ tmp = my_localtime_rz(tz, &t, &tm);
dumptime(tmp);
if (tmp != NULL) {
if (*abbr(tmp) != '\0')
- (void) printf(" %s", abbr(tmp));
+ printf(" %s", abbr(tmp));
if (v) {
- (void) printf(" isdst=%d", tmp->tm_isdst);
+ printf(" isdst=%d", tmp->tm_isdst);
#ifdef TM_GMTOFF
- (void) printf(" gmtoff=%ld", tmp->TM_GMTOFF);
+ printf(" gmtoff=%ld", tmp->TM_GMTOFF);
#endif /* defined TM_GMTOFF */
}
}
- (void) printf("\n");
+ printf("\n");
if (tmp != NULL && *abbr(tmp) != '\0')
abbrok(abbr(tmp), zone);
}
-static char *
-abbr(struct tm *tmp)
+static char const *
+abbr(struct tm const *tmp)
{
- register char * result;
- static char nada;
-
- if (tmp->tm_isdst != 0 && tmp->tm_isdst != 1)
- return &nada;
- result = tzname[tmp->tm_isdst];
- return (result == NULL) ? &nada : result;
+#ifdef TM_ZONE
+ return tmp->TM_ZONE;
+#else
+ return ((0 <= tmp->tm_isdst && tmp->tm_isdst <= 1
+ && tzname[tmp->tm_isdst])
+ ? tzname[tmp->tm_isdst]
+ : "");
+#endif
}
/*
@@ -712,11 +889,11 @@ dumptime(register const struct tm *timeptr)
register int trail;
if (timeptr == NULL) {
- (void) printf("NULL");
+ printf("NULL");
return;
}
/*
- ** The packaged versions of localtime and gmtime never put out-of-range
+ ** The packaged localtime_rz and gmtime never put out-of-range
** values in tm_wday or tm_mon, but since this code might be compiled
** with other (perhaps experimental) versions, paranoia is in order.
*/
@@ -728,7 +905,7 @@ dumptime(register const struct tm *timeptr)
(int) (sizeof mon_name / sizeof mon_name[0]))
mn = "???";
else mn = mon_name[timeptr->tm_mon];
- (void) printf("%.3s %.3s%3d %.2d:%.2d:%.2d ",
+ printf("%.3s %.3s%3d %.2d:%.2d:%.2d ",
wn, mn,
timeptr->tm_mday, timeptr->tm_hour,
timeptr->tm_min, timeptr->tm_sec);
@@ -745,6 +922,6 @@ dumptime(register const struct tm *timeptr)
++lead;
}
if (lead == 0)
- (void) printf("%d", trail);
- else (void) printf("%d%d", lead, ((trail < 0) ? -trail : trail));
+ printf("%d", trail);
+ else printf("%d%d", lead, ((trail < 0) ? -trail : trail));
}
diff --git a/elsie.nci.nih.gov/src/zic.8 b/elsie.nci.nih.gov/src/zic.8
index 5f5268c..11a374f 100644
--- a/elsie.nci.nih.gov/src/zic.8
+++ b/elsie.nci.nih.gov/src/zic.8
@@ -4,57 +4,49 @@ zic \- time zone compiler
.SH SYNOPSIS
.B zic
[
-.B \-\-version
-]
-[
-.B \-v
-] [
-.B \-d
-.I directory
-] [
-.B \-l
-.I localtime
-] [
-.B \-p
-.I posixrules
-] [
-.B \-L
-.I leapsecondfilename
-] [
-.B \-s
-] [
-.B \-y
-.I command
-] [
+.I option
+\&... ] [
.I filename
\&... ]
.SH DESCRIPTION
-.if t .ds lq ``
-.if t .ds rq ''
-.if n .ds lq \&"\"
-.if n .ds rq \&"\"
+.ie '\(lq'' .ds lq \&"\"
+.el .ds lq \(lq\"
+.ie '\(rq'' .ds rq \&"\"
+.el .ds rq \(rq\"
.de q
\\$3\*(lq\\$1\*(rq\\$2
..
+.ie '\(la'' .ds < <
+.el .ds < \(la
+.ie '\(ra'' .ds > >
+.el .ds > \(ra
+.ie \n(.g \{\
+. ds : \:
+. ds - \f(CW-\fP
+.\}
+.el \{\
+. ds :
+. el ds - \-
+.\}
.I Zic
reads text from the file(s) named on the command line
and creates the time conversion information files specified in this input.
If a
.I filename
is
-.BR \- ,
+.q "\*-" ,
the standard input is read.
.PP
These options are available:
.TP
-.BI "\-\-version"
+.BI "\*-\*-version"
Output version information and exit.
.TP
-.BI "\-d " directory
+.BI "\*-d " directory
Create time conversion information files in the named directory rather than
in the standard directory named below.
.TP
-.BI "\-l " timezone
+.BI "\*-l " timezone
Use the given time zone as local time.
.I Zic
will act as if the input contained a link line of the form
@@ -62,7 +54,7 @@ will act as if the input contained a link line of the form
.ti +.5i
Link \fItimezone\fP localtime
.TP
-.BI "\-p " timezone
+.BI "\*-p " timezone
Use the given time zone's rules when handling POSIX-format
time zone environment variables.
.I Zic
@@ -71,16 +63,16 @@ will act as if the input contained a link line of the form
.ti +.5i
Link \fItimezone\fP posixrules
.TP
-.BI "\-L " leapsecondfilename
+.BI "\*-L " leapsecondfilename
Read leap second information from the file with the given name.
If this option is not used,
no leap second information appears in output files.
.TP
-.B \-v
+.B \*-v
Be more verbose, and complain about the following situations:
.RS
.PP
-The input data specifies a link to a link.
+The input specifies a link to a link.
.PP
A year that appears in a data file is outside the range
of years representable by
@@ -112,22 +104,47 @@ before 1970 or after the start of 2038.
.PP
A time zone abbreviation has fewer than 3 characters.
POSIX requires at least 3.
+.PP
+An output file name contains a byte that is not an ASCII letter,
+.q "\*-" ,
+.q "/" ,
+or
+.q "_" ;
+or it contains a file name component that contains more than 14 bytes
+or that starts with
+.q "\*-" .
.RE
.TP
-.B \-s
+.B \*-s
Limit time values stored in output files to values that are the same
whether they're taken to be signed or unsigned.
You can use this option to generate SVVS-compatible files.
.TP
-.BI "\-y " command
+.BI "\*-y " command
Use the given
.I command
rather than
.B yearistype
when checking year types (see below).
.PP
+Input files should be text files, that is, they should be a series of
+zero or more lines, each ending in a newline byte and containing at
+most 511 bytes, and without any NUL bytes. The input text's encoding
+is typically UTF-8 or ASCII; it should have a unibyte representation
+for the POSIX Portable Character Set (PPCS)
+\*<http://pubs\*:.opengroup\*:.org/\*:onlinepubs/\*:9699919799/\*:basedefs/\*:V1_chap06\*:.html\*>
+and the encoding's non-unibyte characters should consist entirely of
+non-PPCS bytes. Non-PPCS characters typically occur only in comments:
+although output file names and time zone abbreviations can contain
+nearly any character, other software will work better if these are
+limited to the restricted syntax described under the
+.B \*-v
+option.
+.PP
Input lines are made up of fields.
Fields are separated from one another by one or more white space characters.
+The white space characters are space, form feed, carriage return, newline,
+tab, and vertical tab.
Leading and trailing white space on input lines is ignored.
An unquoted sharp character (#) in the input introduces a comment which extends
to the end of the line the sharp character appears on.
@@ -150,7 +167,7 @@ Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
For example:
.ti +.5i
.sp
-Rule US 1967 1973 \- Apr lastSun 2:00 1:00 D
+Rule US 1967 1973 \*- Apr lastSun 2:00 1:00 D
.sp
.fi
The fields that make up a rule line are:
@@ -190,7 +207,7 @@ Gives the type of year in which the rule applies.
If
.B TYPE
is
-.B \-
+.q \*-
then the rule applies in all years between
.B FROM
and
@@ -243,7 +260,7 @@ Recognized forms include:
2:00 time in hours and minutes
15:00 24-hour format time (for times after noon)
1:28:14 time in hours, minutes, and seconds
-\- equivalent to 0
+\*- equivalent to 0
.fi
.in -.5i
.sp
@@ -256,7 +273,7 @@ if the given time is local
time,
.B s
if the given time is local
-.q standard
+.q "standard"
time, or
.B u
(or
@@ -266,6 +283,10 @@ or
if the given time is universal time;
in the absence of an indicator,
wall clock time is assumed.
+The intent is that a rule line describes the instants when a
+clock/calendar set to the type of time specified in the
+.B AT
+field would show the specified date and time of day.
.TP
.B SAVE
Gives the amount of time to be added to local standard time when the rule is in
@@ -283,16 +304,16 @@ suffixes are not used).
Gives the
.q "variable part"
(for example, the
-.q S
+.q "S"
or
-.q D
+.q "D"
in
-.q EST
+.q "EST"
or
-.q EDT )
+.q "EDT" )
of time zone abbreviations to be used when this rule is in effect.
If this field is
-.BR \- ,
+.q \*- ,
the variable part is null.
.PP
A zone line has the form
@@ -305,7 +326,7 @@ Zone NAME GMTOFF RULES/SAVE FORMAT [UNTILYEAR [MONTH [DAY [TIME]]]]
For example:
.sp
.ti +.5i
-Zone Australia/Adelaide 9:30 Aus CST 1971 Oct 31 2:00
+Zone Australia/Adelaide 9:30 Aus AC%sT 1971 Oct 31 2:00
.sp
.fi
The fields that make up a zone line are:
@@ -314,6 +335,12 @@ The fields that make up a zone line are:
The name of the time zone.
This is the name used in creating the time conversion information file for the
zone.
+It should not contain a file name component
+.q ".\&"
+or
+.q ".." ;
+a file name component is a maximal substring that does not contain
+.q "/" .
.TP
.B GMTOFF
The amount of time to add to UT to get standard time in this zone.
@@ -328,7 +355,7 @@ begin the field with a minus sign if time must be subtracted from UT.
The name of the rule(s) that apply in the time zone or,
alternately, an amount of time to add to local standard time.
If this field is
-.B \-
+.B \*-
then standard time always applies in the time zone.
.TP
.B FORMAT
@@ -353,16 +380,16 @@ fields of a rule; trailing fields can be omitted, and default to the
earliest possible value for the missing fields.
.IP
The next line must be a
-.q continuation
+.q "continuation"
line; this has the same form as a zone line except that the
string
-.q Zone
+.q "Zone"
and the name are omitted, as the continuation line will
place information starting at the time specified as the
-.q until
+.q "until"
information in the previous line in the file used by the previous line.
Continuation lines may contain
-.q until
+.q "until"
information, just as zone lines do, indicating that the next line is a further
continuation.
.PP
@@ -371,7 +398,7 @@ A link line has the form
.nf
.ti +.5i
.ta \w'Link\0\0'u +\w'Europe/Istanbul\0\0'u
-Link LINK-FROM LINK-TO
+Link TARGET LINK-NAME
.sp
For example:
.sp
@@ -380,13 +407,16 @@ Link Europe/Istanbul Asia/Istanbul
.sp
.fi
The
-.B LINK-FROM
+.B TARGET
field should appear as the
.B NAME
-field in some zone line;
-the
-.B LINK-TO
-field is used as an alternate name for that zone.
+field in some zone line.
+The
+.B LINK-NAME
+field is used as an alternate name for that zone;
+it has the same syntax as a zone line's
+.B NAME
+field.
.PP
Except for continuation lines,
lines may appear in any order in the input.
@@ -418,10 +448,10 @@ The
.B CORR
field
should be
-.q +
+.q "+"
if a second was added
or
-.q -
+.q "\*-"
if a second was skipped.
.\" There's no need to document the following, since it's impossible for more
.\" than one leap second to be inserted or deleted at a time.
@@ -438,11 +468,11 @@ The
.B R/S
field
should be (an abbreviation of)
-.q Stationary
+.q "Stationary"
if the leap second time given by the other fields should be interpreted as UTC
or
(an abbreviation of)
-.q Rolling
+.q "Rolling"
if the leap second time given by the other fields should be interpreted as
local wall clock time.
.SH "EXTENDED EXAMPLE"
@@ -456,20 +486,20 @@ input, intended to illustrate many of its features.
.ta \w'# Rule\0\0'u +\w'NAME\0\0'u +\w'FROM\0\0'u +\w'1973\0\0'u +\w'TYPE\0\0'u +\w'Apr\0\0'u +\w'lastSun\0\0'u +\w'2:00\0\0'u +\w'SAVE\0\0'u
.sp
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Swiss 1941 1942 - May Mon>=1 1:00 1:00 S
-Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 -
+Rule Swiss 1941 1942 \*- May Mon>=1 1:00 1:00 S
+Rule Swiss 1941 1942 \*- Oct Mon>=1 2:00 0 \*-
.sp .5
-Rule EU 1977 1980 - Apr Sun>=1 1:00u 1:00 S
-Rule EU 1977 only - Sep lastSun 1:00u 0 -
-Rule EU 1978 only - Oct 1 1:00u 0 -
-Rule EU 1979 1995 - Sep lastSun 1:00u 0 -
-Rule EU 1981 max - Mar lastSun 1:00u 1:00 S
-Rule EU 1996 max - Oct lastSun 1:00u 0 -
+Rule EU 1977 1980 \*- Apr Sun>=1 1:00u 1:00 S
+Rule EU 1977 only \*- Sep lastSun 1:00u 0 \*-
+Rule EU 1978 only \*- Oct 1 1:00u 0 \*-
+Rule EU 1979 1995 \*- Sep lastSun 1:00u 0 \*-
+Rule EU 1981 max \*- Mar lastSun 1:00u 1:00 S
+Rule EU 1996 max \*- Oct lastSun 1:00u 0 \*-
.sp
.ta \w'# Zone\0\0'u +\w'Europe/Zurich\0\0'u +\w'GMTOFF\0\0'u +\w'RULES/SAVE\0\0'u +\w'FORMAT\0\0'u
# Zone NAME GMTOFF RULES/SAVE FORMAT UNTIL
-Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16
- 0:29:46 - BMT 1894 Jun
+Zone Europe/Zurich 0:34:08 \*- LMT 1853 Jul 16
+ 0:29:46 \*- BMT 1894 Jun
1:00 Swiss CE%sT 1981
1:00 EU CE%sT
.sp
@@ -478,7 +508,6 @@ Link Europe/Zurich Switzerland
.in
.fi
In this example, the zone is named Europe/Zurich but it has an alias
-
as Switzerland. This example says that Zurich was 34 minutes and 8
seconds west of UT until 1853-07-16 at 00:00, when the legal offset
was changed to 7\(de\|26\(fm\|22.50\(sd; although this works out to
@@ -499,7 +528,7 @@ but this changed to the last Sunday in October starting in 1996.
For purposes of
display, "LMT" and "BMT" were initially used, respectively. Since
Swiss rules and later EU rules were applied, the display name for the
-timezone has been CET for standard time and CEST for daylight saving
+time zone has been CET for standard time and CEST for daylight saving
time.
.SH NOTES
For areas with more than two types of local time,
diff --git a/elsie.nci.nih.gov/src/zic.8.txt b/elsie.nci.nih.gov/src/zic.8.txt
index 5e47fe5..51f33de 100644
--- a/elsie.nci.nih.gov/src/zic.8.txt
+++ b/elsie.nci.nih.gov/src/zic.8.txt
@@ -4,14 +4,12 @@ NAME
zic - time zone compiler
SYNOPSIS
- zic [ --version ] [ -v ] [ -d directory ] [ -l localtime ] [ -p
- posixrules ] [ -L leapsecondfilename ] [ -s ] [ -y command ] [ filename
- ... ]
+ zic [ option ... ] [ filename ... ]
DESCRIPTION
Zic reads text from the file(s) named on the command line and creates
the time conversion information files specified in this input. If a
- filename is -, the standard input is read.
+ filename is "-", the standard input is read.
These options are available:
@@ -42,7 +40,7 @@ DESCRIPTION
-v Be more verbose, and complain about the following situations:
- The input data specifies a link to a link.
+ The input specifies a link to a link.
A year that appears in a data file is outside the range of years
representable by time(2) values.
@@ -69,6 +67,10 @@ DESCRIPTION
A time zone abbreviation has fewer than 3 characters. POSIX
requires at least 3.
+ An output file name contains a byte that is not an ASCII letter,
+ "-", "/", or "_"; or it contains a file name component that
+ contains more than 14 bytes or that starts with "-".
+
-s Limit time values stored in output files to values that are the
same whether they're taken to be signed or unsigned. You can
use this option to generate SVVS-compatible files.
@@ -77,15 +79,29 @@ DESCRIPTION
Use the given command rather than yearistype when checking year
types (see below).
+ Input files should be text files, that is, they should be a series of
+ zero or more lines, each ending in a newline byte and containing at
+ most 511 bytes, and without any NUL bytes. The input text's encoding
+ is typically UTF-8 or ASCII; it should have a unibyte representation
+ for the POSIX Portable Character Set (PPCS) <http://pubs.opengroup.org/
+ onlinepubs/9699919799/basedefs/V1_chap06.html> and the encoding's non-
+ unibyte characters should consist entirely of non-PPCS bytes. Non-PPCS
+ characters typically occur only in comments: although output file names
+ and time zone abbreviations can contain nearly any character, other
+ software will work better if these are limited to the restricted syntax
+ described under the -v option.
+
Input lines are made up of fields. Fields are separated from one
- another by one or more white space characters. Leading and trailing
- white space on input lines is ignored. An unquoted sharp character (#)
- in the input introduces a comment which extends to the end of the line
- the sharp character appears on. White space characters and sharp
- characters may be enclosed in double quotes (") if they're to be used
- as part of a field. Any line that is blank (after comment stripping)
- is ignored. Non-blank lines are expected to be of one of three types:
- rule lines, zone lines, and link lines.
+ another by one or more white space characters. The white space
+ characters are space, form feed, carriage return, newline, tab, and
+ vertical tab. Leading and trailing white space on input lines is
+ ignored. An unquoted sharp character (#) in the input introduces a
+ comment which extends to the end of the line the sharp character
+ appears on. White space characters and sharp characters may be
+ enclosed in double quotes (") if they're to be used as part of a field.
+ Any line that is blank (after comment stripping) is ignored. Non-blank
+ lines are expected to be of one of three types: rule lines, zone lines,
+ and link lines.
Names (such as month names) must be in English and are case
insensitive. Abbreviations, if used, must be unambiguous in context.
@@ -118,8 +134,8 @@ DESCRIPTION
abbreviation) may be used to repeat the value of the FROM
field.
- TYPE Gives the type of year in which the rule applies. If TYPE is -
- then the rule applies in all years between FROM and TO
+ TYPE Gives the type of year in which the rule applies. If TYPE is
+ "-" then the rule applies in all years between FROM and TO
inclusive. If TYPE is something else, then zic executes the
command
yearistype year type
@@ -156,7 +172,10 @@ DESCRIPTION
followed by the letter w if the given time is local "wall
clock" time, s if the given time is local "standard" time, or u
(or g or z) if the given time is universal time; in the absence
- of an indicator, wall clock time is assumed.
+ of an indicator, wall clock time is assumed. The intent is
+ that a rule line describes the instants when a clock/calendar
+ set to the type of time specified in the AT field would show
+ the specified date and time of day.
SAVE Gives the amount of time to be added to local standard time
when the rule is in effect. This field has the same format as
@@ -166,7 +185,7 @@ DESCRIPTION
LETTER/S
Gives the "variable part" (for example, the "S" or "D" in "EST"
or "EDT") of time zone abbreviations to be used when this rule
- is in effect. If this field is -, the variable part is null.
+ is in effect. If this field is "-", the variable part is null.
A zone line has the form
@@ -174,12 +193,14 @@ DESCRIPTION
For example:
- Zone Australia/Adelaide 9:30 Aus CST 1971 Oct 31 2:00
+ Zone Australia/Adelaide 9:30 Aus AC%sT 1971 Oct 31 2:00
The fields that make up a zone line are:
NAME The name of the time zone. This is the name used in creating the
- time conversion information file for the zone.
+ time conversion information file for the zone. It should not
+ contain a file name component "." or ".."; a file name component
+ is a maximal substring that does not contain "/".
GMTOFF
The amount of time to add to UT to get standard time in this
@@ -220,14 +241,15 @@ DESCRIPTION
A link line has the form
- Link LINK-FROM LINK-TO
+ Link TARGET LINK-NAME
For example:
Link Europe/Istanbul Asia/Istanbul
- The LINK-FROM field should appear as the NAME field in some zone line;
- the LINK-TO field is used as an alternate name for that zone.
+ The TARGET field should appear as the NAME field in some zone line.
+ The LINK-NAME field is used as an alternate name for that zone; it has
+ the same syntax as a zone line's NAME field.
Except for continuation lines, lines may appear in any order in the
input. However, the behavior is unspecified if multiple zone or link
@@ -272,9 +294,8 @@ EXTENDED EXAMPLE
Link Europe/Zurich Switzerland
- In this example, the zone is named Europe/Zurich but it has an alias
-
- as Switzerland. This example says that Zurich was 34 minutes and 8
+ In this example, the zone is named Europe/Zurich but it has an alias as
+ Switzerland. This example says that Zurich was 34 minutes and 8
seconds west of UT until 1853-07-16 at 00:00, when the legal offset was
changed to 7o26'22.50''; although this works out to 0:29:45.50, the
input format cannot represent fractional seconds so it is rounded here.
@@ -293,7 +314,7 @@ EXTENDED EXAMPLE
For purposes of display, "LMT" and "BMT" were initially used,
respectively. Since Swiss rules and later EU rules were applied, the
- display name for the timezone has been CET for standard time and CEST
+ display name for the time zone has been CET for standard time and CEST
for daylight saving time.
NOTES
diff --git a/elsie.nci.nih.gov/src/zic.c b/elsie.nci.nih.gov/src/zic.c
index 07d6c30..5d0501d 100644
--- a/elsie.nci.nih.gov/src/zic.c
+++ b/elsie.nci.nih.gov/src/zic.c
@@ -23,7 +23,7 @@ typedef int_fast64_t zic_t;
#endif /* !defined ZIC_MAX_ABBR_LEN_WO_WARN */
#if HAVE_SYS_STAT_H
-#include "sys/stat.h"
+#include <sys/stat.h>
#endif
#ifdef S_IRUSR
#define MKDIR_UMASK (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)
@@ -31,19 +31,6 @@ typedef int_fast64_t zic_t;
#define MKDIR_UMASK 0755
#endif
-/*
-** On some ancient hosts, predicates like `isspace(C)' are defined
-** only if isascii(C) || C == EOF. Modern hosts obey the C Standard,
-** which says they are defined only if C == ((unsigned char) C) || C == EOF.
-** Neither the C Standard nor Posix require that `isascii' exist.
-** For portability, we check both ancient and modern requirements.
-** If isascii is not defined, the isascii check succeeds trivially.
-*/
-#include "ctype.h"
-#ifndef isascii
-#define isascii(x) 1
-#endif
-
#define end(cp) (strchr((cp), '\0'))
struct rule {
@@ -54,8 +41,8 @@ struct rule {
zic_t r_loyear; /* for example, 1986 */
zic_t r_hiyear; /* for example, 1986 */
const char * r_yrtype;
- int r_lowasnum;
- int r_hiwasnum;
+ bool r_lowasnum;
+ bool r_hiwasnum;
int r_month; /* 0..11 */
@@ -64,10 +51,10 @@ struct rule {
int r_wday;
zic_t r_tod; /* time from midnight */
- int r_todisstd; /* above is standard time if TRUE */
- /* or wall clock time if FALSE */
- int r_todisgmt; /* above is GMT if TRUE */
- /* or local time if FALSE */
+ bool r_todisstd; /* above is standard time if 1 */
+ /* or wall clock time if 0 */
+ bool r_todisgmt; /* above is GMT if 1 */
+ /* or local time if 0 */
zic_t r_stdoff; /* offset from standard time */
const char * r_abbrvar; /* variable part of abbreviation */
@@ -115,25 +102,25 @@ extern int optind;
#endif
static void addtt(zic_t starttime, int type);
-static int addtype(zic_t gmtoff, const char * abbr, int isdst,
- int ttisstd, int ttisgmt);
-static void leapadd(zic_t t, int positive, int rolling, int count);
+static int addtype(zic_t, char const *, bool, bool, bool);
+static void leapadd(zic_t, bool, int, int);
static void adjleap(void);
static void associate(void);
static void dolink(const char * fromfield, const char * tofield);
static char ** getfields(char * buf);
-static zic_t gethms(const char * string, const char * errstrng,
- int signable);
+static zic_t gethms(const char * string, const char * errstring,
+ bool);
static void infile(const char * filename);
static void inleap(char ** fields, int nfields);
static void inlink(char ** fields, int nfields);
static void inrule(char ** fields, int nfields);
-static int inzcont(char ** fields, int nfields);
-static int inzone(char ** fields, int nfields);
-static int inzsub(char ** fields, int nfields, int iscont);
+static bool inzcont(char ** fields, int nfields);
+static bool inzone(char ** fields, int nfields);
+static bool inzsub(char **, int, bool);
static int itsdir(const char * name);
-static int lowerit(int c);
-static int mkdirs(char * filename);
+static bool is_alpha(char a);
+static char lowerit(char);
+static bool mkdirs(char *);
static void newabbr(const char * abbr);
static zic_t oadd(zic_t t1, zic_t t2);
static void outzone(const struct zone * zp, int ntzones);
@@ -143,13 +130,14 @@ static void rulesub(struct rule * rp,
const char * typep, const char * monthp,
const char * dayp, const char * timep);
static zic_t tadd(zic_t t1, zic_t t2);
-static int yearistype(int year, const char * type);
+static bool yearistype(int year, const char * type);
static int charcnt;
-static int errors;
+static bool errors;
+static bool warnings;
static const char * filename;
static int leapcnt;
-static int leapseen;
+static bool leapseen;
static zic_t leapminyear;
static zic_t leapmaxyear;
static int linenum;
@@ -157,7 +145,7 @@ static int max_abbrvar_len;
static int max_format_len;
static zic_t max_year;
static zic_t min_year;
-static int noise;
+static bool noise;
static const char * rfilename;
static int rlinenum;
static const char * progname;
@@ -333,8 +321,8 @@ static struct lookup const end_years[] = {
};
static struct lookup const leap_types[] = {
- { "Rolling", TRUE },
- { "Stationary", FALSE },
+ { "Rolling", true },
+ { "Stationary", false },
{ NULL, 0 }
};
@@ -354,8 +342,8 @@ static struct attype {
static zic_t gmtoffs[TZ_MAX_TYPES];
static char isdsts[TZ_MAX_TYPES];
static unsigned char abbrinds[TZ_MAX_TYPES];
-static char ttisstds[TZ_MAX_TYPES];
-static char ttisgmts[TZ_MAX_TYPES];
+static bool ttisstds[TZ_MAX_TYPES];
+static bool ttisgmts[TZ_MAX_TYPES];
static char chars[TZ_MAX_CHARS];
static zic_t trans[TZ_MAX_LEAPS];
static zic_t corr[TZ_MAX_LEAPS];
@@ -376,7 +364,7 @@ static ATTRIBUTE_PURE size_t
size_product(size_t nitems, size_t itemsize)
{
if (SIZE_MAX / itemsize < nitems)
- memory_exhausted("size overflow");
+ memory_exhausted(_("size overflow"));
return nitems * itemsize;
}
@@ -401,7 +389,7 @@ growalloc(void *ptr, size_t itemsize, int nitems, int *nitems_alloc)
else {
int amax = INT_MAX < SIZE_MAX ? INT_MAX : SIZE_MAX;
if ((amax - 1) / 3 * 2 < *nitems_alloc)
- memory_exhausted("int overflow");
+ memory_exhausted(_("int overflow"));
*nitems_alloc = *nitems_alloc + (*nitems_alloc >> 1) + 1;
return erealloc(ptr, size_product(*nitems_alloc, itemsize));
}
@@ -438,10 +426,9 @@ verror(const char *const string, va_list args)
fprintf(stderr, _("\"%s\", line %d: "), filename, linenum);
vfprintf(stderr, string, args);
if (rfilename != NULL)
- (void) fprintf(stderr, _(" (rule from \"%s\", line %d)"),
+ fprintf(stderr, _(" (rule from \"%s\", line %d)"),
rfilename, rlinenum);
- (void) fprintf(stderr, "\n");
- ++errors;
+ fprintf(stderr, "\n");
}
static void ATTRIBUTE_FORMAT((printf, 1, 2))
@@ -451,6 +438,7 @@ error(const char *const string, ...)
va_start(args, string);
verror(string, args);
va_end(args);
+ errors = true;
}
static void ATTRIBUTE_FORMAT((printf, 1, 2))
@@ -461,19 +449,35 @@ warning(const char *const string, ...)
va_start(args, string);
verror(string, args);
va_end(args);
- --errors;
+ warnings = true;
+}
+
+static void
+close_file(FILE *stream, char const *name)
+{
+ char const *e = (ferror(stream) ? _("I/O error")
+ : fclose(stream) != 0 ? strerror(errno) : NULL);
+ if (e) {
+ fprintf(stderr, "%s: ", progname);
+ if (name)
+ fprintf(stderr, "%s: ", name);
+ fprintf(stderr, "%s\n", e);
+ exit(EXIT_FAILURE);
+ }
}
static _Noreturn void
usage(FILE *stream, int status)
{
- (void) fprintf(stream, _("%s: usage is %s \
-[ --version ] [ --help ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\
-\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n\
-\n\
-Report bugs to %s.\n"),
- progname, progname, REPORT_BUGS_TO);
- exit(status);
+ fprintf(stream,
+ _("%s: usage is %s [ --version ] [ --help ] [ -v ] \\\n"
+ "\t[ -l localtime ] [ -p posixrules ] [ -d directory ] \\\n"
+ "\t[ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n\n"
+ "Report bugs to %s.\n"),
+ progname, progname, REPORT_BUGS_TO);
+ if (status == EXIT_SUCCESS)
+ close_file(stream, NULL);
+ exit(status);
}
static const char * psxrules;
@@ -490,25 +494,26 @@ main(int argc, char **argv)
register int c;
#ifdef S_IWGRP
- (void) umask(umask(S_IWGRP | S_IWOTH) | (S_IWGRP | S_IWOTH));
+ umask(umask(S_IWGRP | S_IWOTH) | (S_IWGRP | S_IWOTH));
#endif
#if HAVE_GETTEXT
- (void) setlocale(LC_ALL, "");
+ setlocale(LC_ALL, "");
#ifdef TZ_DOMAINDIR
- (void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
+ bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
#endif /* defined TEXTDOMAINDIR */
- (void) textdomain(TZ_DOMAIN);
+ textdomain(TZ_DOMAIN);
#endif /* HAVE_GETTEXT */
progname = argv[0];
if (TYPE_BIT(zic_t) < 64) {
- (void) fprintf(stderr, "%s: %s\n", progname,
+ fprintf(stderr, "%s: %s\n", progname,
_("wild compilation-time specification of zic_t"));
- exit(EXIT_FAILURE);
+ return EXIT_FAILURE;
}
for (i = 1; i < argc; ++i)
if (strcmp(argv[i], "--version") == 0) {
- (void) printf("zic %s%s\n", PKGVERSION, TZVERSION);
- exit(EXIT_SUCCESS);
+ printf("zic %s%s\n", PKGVERSION, TZVERSION);
+ close_file(stdout, NULL);
+ return EXIT_SUCCESS;
} else if (strcmp(argv[i], "--help") == 0) {
usage(stdout, EXIT_SUCCESS);
}
@@ -520,57 +525,57 @@ main(int argc, char **argv)
if (directory == NULL)
directory = optarg;
else {
- (void) fprintf(stderr,
+ fprintf(stderr,
_("%s: More than one -d option specified\n"),
progname);
- exit(EXIT_FAILURE);
+ return EXIT_FAILURE;
}
break;
case 'l':
if (lcltime == NULL)
lcltime = optarg;
else {
- (void) fprintf(stderr,
+ fprintf(stderr,
_("%s: More than one -l option specified\n"),
progname);
- exit(EXIT_FAILURE);
+ return EXIT_FAILURE;
}
break;
case 'p':
if (psxrules == NULL)
psxrules = optarg;
else {
- (void) fprintf(stderr,
+ fprintf(stderr,
_("%s: More than one -p option specified\n"),
progname);
- exit(EXIT_FAILURE);
+ return EXIT_FAILURE;
}
break;
case 'y':
if (yitcommand == NULL)
yitcommand = optarg;
else {
- (void) fprintf(stderr,
+ fprintf(stderr,
_("%s: More than one -y option specified\n"),
progname);
- exit(EXIT_FAILURE);
+ return EXIT_FAILURE;
}
break;
case 'L':
if (leapsec == NULL)
leapsec = optarg;
else {
- (void) fprintf(stderr,
+ fprintf(stderr,
_("%s: More than one -L option specified\n"),
progname);
- exit(EXIT_FAILURE);
+ return EXIT_FAILURE;
}
break;
case 'v':
- noise = TRUE;
+ noise = true;
break;
case 's':
- (void) printf("%s: -s ignored\n", progname);
+ warning(_("-s ignored\n"));
break;
}
if (optind == argc - 1 && strcmp(argv[optind], "=") == 0)
@@ -588,7 +593,7 @@ _("%s: More than one -L option specified\n"),
for (i = optind; i < argc; ++i)
infile(argv[i]);
if (errors)
- exit(EXIT_FAILURE);
+ return EXIT_FAILURE;
associate();
for (i = 0; i < nzones; i = j) {
/*
@@ -611,14 +616,74 @@ _("%s: More than one -L option specified\n"),
warning(_("link to link"));
}
if (lcltime != NULL) {
- eat("command line", 1);
+ eat(_("command line"), 1);
dolink(lcltime, TZDEFAULT);
}
if (psxrules != NULL) {
- eat("command line", 1);
+ eat(_("command line"), 1);
dolink(psxrules, TZDEFRULES);
}
- return (errors == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+ if (warnings && (ferror(stderr) || fclose(stderr) != 0))
+ return EXIT_FAILURE;
+ return errors ? EXIT_FAILURE : EXIT_SUCCESS;
+}
+
+static void
+componentcheck(char const *name, char const *component,
+ char const *component_end)
+{
+ enum { component_len_max = 14 };
+ size_t component_len = component_end - component;
+ if (0 < component_len && component_len <= 2
+ && component[0] == '.' && component_end[-1] == '.') {
+ fprintf(stderr, _("%s: file name '%s' contains"
+ " '%.*s' component"),
+ progname, name, (int) component_len, component);
+ exit(EXIT_FAILURE);
+ }
+ if (!noise)
+ return;
+ if (0 < component_len && component[0] == '-')
+ warning(_("file name '%s' component contains leading '-'"),
+ name);
+ if (component_len_max < component_len)
+ warning(_("file name '%s' contains overlength component"
+ " '%.*s...'"),
+ name, component_len_max, component);
+}
+
+static void
+namecheck(const char *name)
+{
+ register char const *cp;
+
+ /* Benign characters in a portable file name. */
+ static char const benign[] =
+ "-/_"
+ "abcdefghijklmnopqrstuvwxyz"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+ /* Non-control chars in the POSIX portable character set,
+ excluding the benign characters. */
+ static char const printable_and_not_benign[] =
+ " !\"#$%&'()*+,.0123456789:;<=>?@[\\]^`{|}~";
+
+ register char const *component = name;
+ for (cp = name; *cp; cp++) {
+ unsigned char c = *cp;
+ if (noise && !strchr(benign, c)) {
+ warning((strchr(printable_and_not_benign, c)
+ ? _("file name '%s' contains byte '%c'")
+ : _("file name '%s' contains byte '\\%o'")),
+ name, c);
+ return;
+ }
+ if (c == '/') {
+ componentcheck(name, component, cp);
+ component = cp + 1;
+ }
+ }
+ componentcheck(name, component, cp);
}
static void
@@ -626,7 +691,9 @@ dolink(const char *const fromfield, const char *const tofield)
{
register char * fromname;
register char * toname;
+ register int fromisdir;
+ namecheck(tofield);
if (fromfield[0] == '/')
fromname = ecpyalloc(fromfield);
else {
@@ -645,13 +712,19 @@ dolink(const char *const fromfield, const char *const tofield)
** We get to be careful here since
** there's a fair chance of root running us.
*/
- if (!itsdir(toname))
- (void) remove(toname);
- if (link(fromname, toname) != 0
- && access(fromname, F_OK) == 0 && !itsdir(fromname)) {
+ fromisdir = itsdir(fromname);
+ if (fromisdir) {
+ char const *e = strerror(fromisdir < 0 ? errno : EPERM);
+ fprintf(stderr, _("%s: link from %s failed: %s"),
+ progname, fromname, e);
+ exit(EXIT_FAILURE);
+ }
+ if (itsdir(toname) <= 0)
+ remove(toname);
+ if (link(fromname, toname) != 0) {
int result;
- if (mkdirs(toname) != 0)
+ if (! mkdirs(toname))
exit(EXIT_FAILURE);
result = link(fromname, toname);
@@ -684,7 +757,7 @@ warning(_("hard link failed, symbolic link used"));
fp = fopen(fromname, "rb");
if (!fp) {
const char *e = strerror(errno);
- (void) fprintf(stderr,
+ fprintf(stderr,
_("%s: Can't read %s: %s\n"),
progname, fromname, e);
exit(EXIT_FAILURE);
@@ -692,25 +765,15 @@ warning(_("hard link failed, symbolic link used"));
tp = fopen(toname, "wb");
if (!tp) {
const char *e = strerror(errno);
- (void) fprintf(stderr,
+ fprintf(stderr,
_("%s: Can't create %s: %s\n"),
progname, toname, e);
exit(EXIT_FAILURE);
}
while ((c = getc(fp)) != EOF)
putc(c, tp);
- if (ferror(fp) || fclose(fp)) {
- (void) fprintf(stderr,
- _("%s: Error reading %s\n"),
- progname, fromname);
- exit(EXIT_FAILURE);
- }
- if (ferror(tp) || fclose(tp)) {
- (void) fprintf(stderr,
- _("%s: Error writing %s\n"),
- progname, toname);
- exit(EXIT_FAILURE);
- }
+ close_file(fp, fromname);
+ close_file(tp, toname);
warning(_("link failed, copy used"));
}
}
@@ -753,17 +816,24 @@ static const zic_t max_time = -1 - ((zic_t) -1 << (TIME_T_BITS_IN_FILE - 1));
static const zic_t big_bang_time = BIG_BANG;
+/* Return 1 if NAME is a directory, 0 if it's something else, -1 if trouble. */
static int
itsdir(const char *const name)
{
- register char * myname;
- register int accres;
-
- myname = ecpyalloc(name);
- myname = ecatalloc(myname, "/.");
- accres = access(myname, F_OK);
- free(myname);
- return accres == 0;
+ struct stat st;
+ int res = stat(name, &st);
+ if (res != 0)
+ return res;
+#ifdef S_ISDIR
+ return S_ISDIR(st.st_mode) != 0;
+#else
+ {
+ char *nameslashdot = ecatalloc(ecpyalloc(name), "/.");
+ res = stat(nameslashdot, &st);
+ free(nameslashdot);
+ return res == 0;
+ }
+#endif
}
/*
@@ -790,7 +860,7 @@ associate(void)
register int i, j;
if (nrules != 0) {
- (void) qsort(rules, nrules, sizeof *rules, rcomp);
+ qsort(rules, nrules, sizeof *rules, rcomp);
for (i = 0; i < nrules - 1; ++i) {
if (strcmp(rules[i].r_name,
rules[i + 1].r_name) != 0)
@@ -843,7 +913,7 @@ associate(void)
*/
eat(zp->z_filename, zp->z_linenum);
zp->z_stdoff = gethms(zp->z_rule, _("unruly zone"),
- TRUE);
+ true);
/*
** Note, though, that if there's no rule,
** a '%s' in the format is a bad thing.
@@ -864,7 +934,7 @@ infile(const char *name)
register char * cp;
register const struct lookup * lp;
register int nfields;
- register int wantcont;
+ register bool wantcont;
register int num;
char buf[BUFSIZ];
@@ -874,11 +944,11 @@ infile(const char *name)
} else if ((fp = fopen(name, "r")) == NULL) {
const char *e = strerror(errno);
- (void) fprintf(stderr, _("%s: Can't open %s: %s\n"),
+ fprintf(stderr, _("%s: Can't open %s: %s\n"),
progname, name, e);
exit(EXIT_FAILURE);
}
- wantcont = FALSE;
+ wantcont = false;
for (num = 1; ; ++num) {
eat(name, num);
if (fgets(buf, sizeof buf, fp) != buf)
@@ -909,25 +979,25 @@ infile(const char *name)
else switch ((int) (lp->l_value)) {
case LC_RULE:
inrule(fields, nfields);
- wantcont = FALSE;
+ wantcont = false;
break;
case LC_ZONE:
wantcont = inzone(fields, nfields);
break;
case LC_LINK:
inlink(fields, nfields);
- wantcont = FALSE;
+ wantcont = false;
break;
case LC_LEAP:
if (name != leapsec)
- (void) fprintf(stderr,
+ warning(
_("%s: Leap line in non leap seconds file %s\n"),
progname, name);
else inleap(fields, nfields);
- wantcont = FALSE;
+ wantcont = false;
break;
default: /* "cannot happen" */
- (void) fprintf(stderr,
+ fprintf(stderr,
_("%s: panic: Invalid l_value %d\n"),
progname, lp->l_value);
exit(EXIT_FAILURE);
@@ -935,18 +1005,7 @@ _("%s: panic: Invalid l_value %d\n"),
}
free(fields);
}
- if (ferror(fp)) {
- (void) fprintf(stderr, _("%s: Error reading %s\n"),
- progname, filename);
- exit(EXIT_FAILURE);
- }
- if (fp != stdin && fclose(fp)) {
- const char *e = strerror(errno);
-
- (void) fprintf(stderr, _("%s: Error closing %s: %s\n"),
- progname, filename, e);
- exit(EXIT_FAILURE);
- }
+ close_file(fp, filename);
if (wantcont)
error(_("expected continuation line not found"));
}
@@ -960,7 +1019,7 @@ _("%s: panic: Invalid l_value %d\n"),
*/
static zic_t
-gethms(const char *string, const char *const errstring, const int signable)
+gethms(char const *string, char const *errstring, bool signable)
{
zic_t hh;
int mm, ss, sign;
@@ -1014,7 +1073,7 @@ inrule(register char **const fields, const int nfields)
}
r.r_filename = filename;
r.r_linenum = linenum;
- r.r_stdoff = gethms(fields[RF_STDOFF], _("invalid saved time"), TRUE);
+ r.r_stdoff = gethms(fields[RF_STDOFF], _("invalid saved time"), true);
rulesub(&r, fields[RF_LOYEAR], fields[RF_HIYEAR], fields[RF_COMMAND],
fields[RF_MONTH], fields[RF_DAY], fields[RF_TOD]);
r.r_name = ecpyalloc(fields[RF_NAME]);
@@ -1025,26 +1084,26 @@ inrule(register char **const fields, const int nfields)
rules[nrules++] = r;
}
-static int
+static bool
inzone(register char **const fields, const int nfields)
{
register int i;
if (nfields < ZONE_MINFIELDS || nfields > ZONE_MAXFIELDS) {
error(_("wrong number of fields on Zone line"));
- return FALSE;
+ return false;
}
if (strcmp(fields[ZF_NAME], TZDEFAULT) == 0 && lcltime != NULL) {
error(
_("\"Zone %s\" line and -l option are mutually exclusive"),
TZDEFAULT);
- return FALSE;
+ return false;
}
if (strcmp(fields[ZF_NAME], TZDEFRULES) == 0 && psxrules != NULL) {
error(
_("\"Zone %s\" line and -p option are mutually exclusive"),
TZDEFRULES);
- return FALSE;
+ return false;
}
for (i = 0; i < nzones; ++i)
if (zones[i].z_name != NULL &&
@@ -1054,30 +1113,30 @@ _("duplicate zone name %s (file \"%s\", line %d)"),
fields[ZF_NAME],
zones[i].z_filename,
zones[i].z_linenum);
- return FALSE;
+ return false;
}
- return inzsub(fields, nfields, FALSE);
+ return inzsub(fields, nfields, false);
}
-static int
+static bool
inzcont(register char **const fields, const int nfields)
{
if (nfields < ZONEC_MINFIELDS || nfields > ZONEC_MAXFIELDS) {
error(_("wrong number of fields on Zone continuation line"));
- return FALSE;
+ return false;
}
- return inzsub(fields, nfields, TRUE);
+ return inzsub(fields, nfields, true);
}
-static int
-inzsub(register char **const fields, const int nfields, const int iscont)
+static bool
+inzsub(char **fields, int nfields, bool iscont)
{
register char * cp;
static struct zone z;
register int i_gmtoff, i_rule, i_format;
register int i_untilyear, i_untilmonth;
register int i_untilday, i_untiltime;
- register int hasuntil;
+ register bool hasuntil;
if (iscont) {
i_gmtoff = ZFC_GMTOFF;
@@ -1100,11 +1159,11 @@ inzsub(register char **const fields, const int nfields, const int iscont)
}
z.z_filename = filename;
z.z_linenum = linenum;
- z.z_gmtoff = gethms(fields[i_gmtoff], _("invalid UT offset"), TRUE);
+ z.z_gmtoff = gethms(fields[i_gmtoff], _("invalid UT offset"), true);
if ((cp = strchr(fields[i_format], '%')) != 0) {
if (*++cp != 's' || strchr(cp, '%') != 0) {
error(_("invalid abbreviation format"));
- return FALSE;
+ return false;
}
}
z.z_rule = ecpyalloc(fields[i_rule]);
@@ -1134,7 +1193,7 @@ inzsub(register char **const fields, const int nfields, const int iscont)
error(_(
"Zone continuation line end time is not after end time of previous line"
));
- return FALSE;
+ return false;
}
}
zones = growalloc(zones, sizeof *zones, nzones, &nzones_alloc);
@@ -1174,7 +1233,7 @@ inleap(register char ** const fields, const int nfields)
leapmaxyear = year;
if (!leapseen || leapminyear > year)
leapminyear = year;
- leapseen = TRUE;
+ leapseen = true;
j = EPOCH_YEAR;
while (j != year) {
if (year > j) {
@@ -1213,23 +1272,23 @@ inleap(register char ** const fields, const int nfields)
return;
}
t = dayoff * SECSPERDAY;
- tod = gethms(fields[LP_TIME], _("invalid time of day"), FALSE);
+ tod = gethms(fields[LP_TIME], _("invalid time of day"), false);
cp = fields[LP_CORR];
{
- register int positive;
+ register bool positive;
int count;
if (strcmp(cp, "") == 0) { /* infile() turns "-" into "" */
- positive = FALSE;
+ positive = false;
count = 1;
} else if (strcmp(cp, "--") == 0) {
- positive = FALSE;
+ positive = false;
count = 2;
} else if (strcmp(cp, "+") == 0) {
- positive = TRUE;
+ positive = true;
count = 1;
} else if (strcmp(cp, "++") == 0) {
- positive = TRUE;
+ positive = true;
count = 2;
} else {
error(_("illegal CORRECTION field on Leap line"));
@@ -1294,32 +1353,32 @@ rulesub(register struct rule *const rp,
return;
}
rp->r_month = lp->l_value;
- rp->r_todisstd = FALSE;
- rp->r_todisgmt = FALSE;
+ rp->r_todisstd = false;
+ rp->r_todisgmt = false;
dp = ecpyalloc(timep);
if (*dp != '\0') {
ep = dp + strlen(dp) - 1;
switch (lowerit(*ep)) {
case 's': /* Standard */
- rp->r_todisstd = TRUE;
- rp->r_todisgmt = FALSE;
+ rp->r_todisstd = true;
+ rp->r_todisgmt = false;
*ep = '\0';
break;
case 'w': /* Wall */
- rp->r_todisstd = FALSE;
- rp->r_todisgmt = FALSE;
+ rp->r_todisstd = false;
+ rp->r_todisgmt = false;
*ep = '\0';
break;
case 'g': /* Greenwich */
case 'u': /* Universal */
case 'z': /* Zulu */
- rp->r_todisstd = TRUE;
- rp->r_todisgmt = TRUE;
+ rp->r_todisstd = true;
+ rp->r_todisgmt = true;
*ep = '\0';
break;
}
}
- rp->r_tod = gethms(dp, _("invalid time of day"), FALSE);
+ rp->r_tod = gethms(dp, _("invalid time of day"), false);
free(dp);
/*
** Year work.
@@ -1335,7 +1394,7 @@ rulesub(register struct rule *const rp,
rp->r_loyear = ZIC_MAX;
break;
default: /* "cannot happen" */
- (void) fprintf(stderr,
+ fprintf(stderr,
_("%s: panic: Invalid l_value %d\n"),
progname, lp->l_value);
exit(EXIT_FAILURE);
@@ -1357,7 +1416,7 @@ rulesub(register struct rule *const rp,
rp->r_hiyear = rp->r_loyear;
break;
default: /* "cannot happen" */
- (void) fprintf(stderr,
+ fprintf(stderr,
_("%s: panic: Invalid l_value %d\n"),
progname, lp->l_value);
exit(EXIT_FAILURE);
@@ -1453,7 +1512,7 @@ puttzcode(const int_fast32_t val, FILE *const fp)
char buf[4];
convert(val, buf);
- (void) fwrite(buf, sizeof buf, 1, fp);
+ fwrite(buf, sizeof buf, 1, fp);
}
static void
@@ -1462,7 +1521,7 @@ puttzcode64(const zic_t val, FILE *const fp)
char buf[8];
convert64(val, buf);
- (void) fwrite(buf, sizeof buf, 1, fp);
+ fwrite(buf, sizeof buf, 1, fp);
}
static int
@@ -1474,7 +1533,7 @@ atcomp(const void *avp, const void *bvp)
return (a < b) ? -1 : (a > b);
}
-static int
+static bool
is32(const zic_t x)
{
return INT32_MIN <= x && x <= INT32_MAX;
@@ -1495,11 +1554,12 @@ writezone(const char *const name, const char *const string, char version)
void *typesptr = ats + timecnt;
unsigned char *types = typesptr;
+ namecheck(name);
/*
** Sort.
*/
if (timecnt > 1)
- (void) qsort(attypes, timecnt, sizeof *attypes, atcomp);
+ qsort(attypes, timecnt, sizeof *attypes, atcomp);
/*
** Optimize.
*/
@@ -1561,7 +1621,7 @@ writezone(const char *const name, const char *const string, char version)
++timei32;
}
/*
- ** Output an INT32_MIN "transition" if appropriate--see below.
+ ** Output an INT32_MIN "transition" if appropriate; see below.
*/
if (timei32 > 0 && ats[timei32] > INT32_MIN) {
--timei32;
@@ -1575,24 +1635,24 @@ writezone(const char *const name, const char *const string, char version)
}
fullname = erealloc(fullname,
strlen(directory) + 1 + strlen(name) + 1);
- (void) sprintf(fullname, "%s/%s", directory, name);
+ sprintf(fullname, "%s/%s", directory, name);
/*
** Remove old file, if any, to snap links.
*/
- if (!itsdir(fullname) && remove(fullname) != 0 && errno != ENOENT) {
+ if (itsdir(fullname) <= 0 && remove(fullname) != 0 && errno != ENOENT) {
const char *e = strerror(errno);
- (void) fprintf(stderr, _("%s: Can't remove %s: %s\n"),
+ fprintf(stderr, _("%s: Can't remove %s: %s\n"),
progname, fullname, e);
exit(EXIT_FAILURE);
}
if ((fp = fopen(fullname, "wb")) == NULL) {
- if (mkdirs(fullname) != 0)
+ if (! mkdirs(fullname))
exit(EXIT_FAILURE);
if ((fp = fopen(fullname, "wb")) == NULL) {
const char *e = strerror(errno);
- (void) fprintf(stderr, _("%s: Can't create %s: %s\n"),
+ fprintf(stderr, _("%s: Can't create %s: %s\n"),
progname, fullname, e);
exit(EXIT_FAILURE);
}
@@ -1606,7 +1666,7 @@ writezone(const char *const name, const char *const string, char version)
register int thistypecnt;
char thischars[TZ_MAX_CHARS];
char thischarcnt;
- int indmap[TZ_MAX_CHARS];
+ int indmap[TZ_MAX_CHARS];
if (pass == 1) {
thistimei = timei32;
@@ -1629,16 +1689,16 @@ writezone(const char *const name, const char *const string, char version)
** (32- or 64-bit) window.
*/
if (typecnt != 0)
- writetype[typecnt - 1] = TRUE;
+ writetype[typecnt - 1] = true;
} else {
for (i = thistimei - 1; i < thistimelim; ++i)
if (i >= 0)
- writetype[types[i]] = TRUE;
+ writetype[types[i]] = true;
/*
** For America/Godthab and Antarctica/Palmer
*/
if (thistimei == 0)
- writetype[0] = TRUE;
+ writetype[0] = true;
}
#ifndef LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH
/*
@@ -1668,22 +1728,22 @@ writezone(const char *const name, const char *const string, char version)
isdsts[mrudst] = -1;
type = addtype(gmtoffs[mrudst],
&chars[abbrinds[mrudst]],
- TRUE,
+ true,
ttisstds[mrudst],
ttisgmts[mrudst]);
- isdsts[mrudst] = TRUE;
- writetype[type] = TRUE;
+ isdsts[mrudst] = 1;
+ writetype[type] = true;
}
if (histd >= 0 && mrustd >= 0 && histd != mrustd &&
gmtoffs[histd] != gmtoffs[mrustd]) {
isdsts[mrustd] = -1;
type = addtype(gmtoffs[mrustd],
&chars[abbrinds[mrustd]],
- FALSE,
+ false,
ttisstds[mrustd],
ttisgmts[mrustd]);
- isdsts[mrustd] = FALSE;
- writetype[type] = TRUE;
+ isdsts[mrustd] = 0;
+ writetype[type] = true;
}
}
#endif /* !defined LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH */
@@ -1705,15 +1765,15 @@ writezone(const char *const name, const char *const string, char version)
if (strcmp(&thischars[j], thisabbr) == 0)
break;
if (j == thischarcnt) {
- (void) strcpy(&thischars[(int) thischarcnt],
+ strcpy(&thischars[(int) thischarcnt],
thisabbr);
thischarcnt += strlen(thisabbr) + 1;
}
indmap[abbrinds[i]] = j;
}
-#define DO(field) ((void) fwrite(tzh.field, sizeof tzh.field, 1, fp))
+#define DO(field) fwrite(tzh.field, sizeof tzh.field, 1, fp)
tzh = tzh0;
- (void) strncpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic);
+ strncpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic);
tzh.tzh_version[0] = version;
convert(thistypecnt, tzh.tzh_ttisgmtcnt);
convert(thistypecnt, tzh.tzh_ttisstdcnt);
@@ -1735,7 +1795,7 @@ writezone(const char *const name, const char *const string, char version)
if (pass == 1)
/*
** Output an INT32_MIN "transition"
- ** if appropriate--see above.
+ ** if appropriate; see above.
*/
puttzcode(((ats[i] < INT32_MIN) ?
INT32_MIN : ats[i]), fp);
@@ -1744,16 +1804,16 @@ writezone(const char *const name, const char *const string, char version)
unsigned char uc;
uc = typemap[types[i]];
- (void) fwrite(&uc, sizeof uc, 1, fp);
+ fwrite(&uc, sizeof uc, 1, fp);
}
for (i = 0; i < typecnt; ++i)
if (writetype[i]) {
puttzcode(gmtoffs[i], fp);
- (void) putc(isdsts[i], fp);
- (void) putc((unsigned char) indmap[abbrinds[i]], fp);
+ putc(isdsts[i], fp);
+ putc((unsigned char) indmap[abbrinds[i]], fp);
}
if (thischarcnt != 0)
- (void) fwrite(thischars, sizeof thischars[0],
+ fwrite(thischars, sizeof thischars[0],
thischarcnt, fp);
for (i = thisleapi; i < thisleaplim; ++i) {
register zic_t todo;
@@ -1782,23 +1842,19 @@ writezone(const char *const name, const char *const string, char version)
}
for (i = 0; i < typecnt; ++i)
if (writetype[i])
- (void) putc(ttisstds[i], fp);
+ putc(ttisstds[i], fp);
for (i = 0; i < typecnt; ++i)
if (writetype[i])
- (void) putc(ttisgmts[i], fp);
- }
- (void) fprintf(fp, "\n%s\n", string);
- if (ferror(fp) || fclose(fp)) {
- (void) fprintf(stderr, _("%s: Error writing %s\n"),
- progname, fullname);
- exit(EXIT_FAILURE);
+ putc(ttisgmts[i], fp);
}
+ fprintf(fp, "\n%s\n", string);
+ close_file(fp, fullname);
free(ats);
}
static void
doabbr(char *const abbr, const char *const format, const char *const letters,
- const int isdst, const int doquotes)
+ bool isdst, bool doquotes)
{
register char * cp;
register char * slashp;
@@ -1807,21 +1863,18 @@ doabbr(char *const abbr, const char *const format, const char *const letters,
slashp = strchr(format, '/');
if (slashp == NULL) {
if (letters == NULL)
- (void) strcpy(abbr, format);
- else (void) sprintf(abbr, format, letters);
+ strcpy(abbr, format);
+ else sprintf(abbr, format, letters);
} else if (isdst) {
- (void) strcpy(abbr, slashp + 1);
+ strcpy(abbr, slashp + 1);
} else {
- if (slashp > format)
- (void) strncpy(abbr, format, slashp - format);
+ memcpy(abbr, format, slashp - format);
abbr[slashp - format] = '\0';
}
if (!doquotes)
return;
- for (cp = abbr; *cp != '\0'; ++cp)
- if (strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZ", *cp) == NULL &&
- strchr("abcdefghijklmnopqrstuvwxyz", *cp) == NULL)
- break;
+ for (cp = abbr; is_alpha(*cp); cp++)
+ continue;
len = strlen(abbr);
if (len > 0 && *cp == '\0')
return;
@@ -1841,7 +1894,7 @@ updateminmax(const zic_t x)
max_year = x;
}
-static int
+static bool
stringoffset(char *result, zic_t offset)
{
register int hours;
@@ -1850,7 +1903,7 @@ stringoffset(char *result, zic_t offset)
result[0] = '\0';
if (offset < 0) {
- (void) strcpy(result, "-");
+ strcpy(result, "-");
offset = -offset;
}
seconds = offset % SECSPERMIN;
@@ -1860,15 +1913,15 @@ stringoffset(char *result, zic_t offset)
hours = offset;
if (hours >= HOURSPERDAY * DAYSPERWEEK) {
result[0] = '\0';
- return -1;
+ return false;
}
- (void) sprintf(end(result), "%d", hours);
+ sprintf(end(result), "%d", hours);
if (minutes != 0 || seconds != 0) {
- (void) sprintf(end(result), ":%02d", minutes);
+ sprintf(end(result), ":%02d", minutes);
if (seconds != 0)
- (void) sprintf(end(result), ":%02d", seconds);
+ sprintf(end(result), ":%02d", seconds);
}
- return 0;
+ return true;
}
static int
@@ -1889,9 +1942,9 @@ stringrule(char *result, const struct rule *const rp, const zic_t dstoff,
total += len_months[0][month];
/* Omit the "J" in Jan and Feb, as that's shorter. */
if (rp->r_month <= 1)
- (void) sprintf(result, "%d", total + rp->r_dayofmonth - 1);
+ sprintf(result, "%d", total + rp->r_dayofmonth - 1);
else
- (void) sprintf(result, "J%d", total + rp->r_dayofmonth);
+ sprintf(result, "J%d", total + rp->r_dayofmonth);
} else {
register int week;
register int wday = rp->r_wday;
@@ -1918,7 +1971,7 @@ stringrule(char *result, const struct rule *const rp, const zic_t dstoff,
} else return -1; /* "cannot happen" */
if (wday < 0)
wday += DAYSPERWEEK;
- (void) sprintf(result, "M%d.%d.%d",
+ sprintf(result, "M%d.%d.%d",
rp->r_month + 1, week, wday);
}
if (rp->r_todisgmt)
@@ -1926,8 +1979,8 @@ stringrule(char *result, const struct rule *const rp, const zic_t dstoff,
if (rp->r_todisstd && rp->r_stdoff == 0)
tod += dstoff;
if (tod != 2 * SECSPERMIN * MINSPERHOUR) {
- (void) strcat(result, "/");
- if (stringoffset(end(result), tod) != 0)
+ strcat(result, "/");
+ if (! stringoffset(end(result), tod))
return -1;
if (tod < 0) {
if (compat < 2013)
@@ -2016,14 +2069,14 @@ stringzone(char *result, const struct zone *const zpfirst, const int zonecount)
dstr.r_dycode = DC_DOM;
dstr.r_dayofmonth = 1;
dstr.r_tod = 0;
- dstr.r_todisstd = dstr.r_todisgmt = FALSE;
+ dstr.r_todisstd = dstr.r_todisgmt = false;
dstr.r_stdoff = stdrp->r_stdoff;
dstr.r_abbrvar = stdrp->r_abbrvar;
stdr.r_month = TM_DECEMBER;
stdr.r_dycode = DC_DOM;
stdr.r_dayofmonth = 31;
stdr.r_tod = SECSPERDAY + stdrp->r_stdoff;
- stdr.r_todisstd = stdr.r_todisgmt = FALSE;
+ stdr.r_todisstd = stdr.r_todisgmt = false;
stdr.r_stdoff = 0;
stdr.r_abbrvar
= (stdabbrrp ? stdabbrrp->r_abbrvar : "");
@@ -2034,21 +2087,21 @@ stringzone(char *result, const struct zone *const zpfirst, const int zonecount)
if (stdrp == NULL && (zp->z_nrules != 0 || zp->z_stdoff != 0))
return -1;
abbrvar = (stdrp == NULL) ? "" : stdrp->r_abbrvar;
- doabbr(result, zp->z_format, abbrvar, FALSE, TRUE);
- if (stringoffset(end(result), -zp->z_gmtoff) != 0) {
+ doabbr(result, zp->z_format, abbrvar, false, true);
+ if (! stringoffset(end(result), -zp->z_gmtoff)) {
result[0] = '\0';
return -1;
}
if (dstrp == NULL)
return compat;
- doabbr(end(result), zp->z_format, dstrp->r_abbrvar, TRUE, TRUE);
+ doabbr(end(result), zp->z_format, dstrp->r_abbrvar, true, true);
if (dstrp->r_stdoff != SECSPERMIN * MINSPERHOUR)
- if (stringoffset(end(result),
- -(zp->z_gmtoff + dstrp->r_stdoff)) != 0) {
+ if (! stringoffset(end(result),
+ -(zp->z_gmtoff + dstrp->r_stdoff))) {
result[0] = '\0';
return -1;
}
- (void) strcat(result, ",");
+ strcat(result, ",");
c = stringrule(result, dstrp, dstrp->r_stdoff, zp->z_gmtoff);
if (c < 0) {
result[0] = '\0';
@@ -2056,7 +2109,7 @@ stringzone(char *result, const struct zone *const zpfirst, const int zonecount)
}
if (compat < c)
compat = c;
- (void) strcat(result, ",");
+ strcat(result, ",");
c = stringrule(result, stdrp, dstrp->r_stdoff, zp->z_gmtoff);
if (c < 0) {
result[0] = '\0';
@@ -2073,23 +2126,23 @@ outzone(const struct zone * const zpfirst, const int zonecount)
register const struct zone * zp;
register struct rule * rp;
register int i, j;
- register int usestart, useuntil;
+ register bool usestart, useuntil;
register zic_t starttime, untiltime;
register zic_t gmtoff;
register zic_t stdoff;
register zic_t year;
register zic_t startoff;
- register int startttisstd;
- register int startttisgmt;
+ register bool startttisstd;
+ register bool startttisgmt;
register int type;
register char * startbuf;
register char * ab;
register char * envvar;
register int max_abbr_len;
register int max_envvar_len;
- register int prodstic; /* all rules are min to max */
+ register bool prodstic; /* all rules are min to max */
register int compat;
- register int do_extend;
+ register bool do_extend;
register char version;
max_abbr_len = 2 + max_format_len + max_abbrvar_len;
@@ -2110,8 +2163,8 @@ outzone(const struct zone * const zpfirst, const int zonecount)
** Thanks to Earl Chew
** for noting the need to unconditionally initialize startttisstd.
*/
- startttisstd = FALSE;
- startttisgmt = FALSE;
+ startttisstd = false;
+ startttisgmt = false;
min_year = max_year = EPOCH_YEAR;
if (leapseen) {
updateminmax(leapminyear);
@@ -2128,7 +2181,7 @@ outzone(const struct zone * const zpfirst, const int zonecount)
if (rp->r_hiwasnum)
updateminmax(rp->r_hiyear);
if (rp->r_lowasnum || rp->r_hiwasnum)
- prodstic = FALSE;
+ prodstic = false;
}
}
/*
@@ -2209,13 +2262,13 @@ outzone(const struct zone * const zpfirst, const int zonecount)
if (zp->z_nrules == 0) {
stdoff = zp->z_stdoff;
doabbr(startbuf, zp->z_format,
- NULL, stdoff != 0, FALSE);
+ NULL, stdoff != 0, false);
type = addtype(oadd(zp->z_gmtoff, stdoff),
startbuf, stdoff != 0, startttisstd,
startttisgmt);
if (usestart) {
addtt(starttime, type);
- usestart = FALSE;
+ usestart = false;
} else addtt(big_bang_time, type);
} else for (year = min_year; year <= max_year; ++year) {
if (useuntil && year > zp->z_untilrule.r_hiyear)
@@ -2281,12 +2334,12 @@ outzone(const struct zone * const zpfirst, const int zonecount)
if (k < 0)
break; /* go on to next year */
rp = &zp->z_rules[k];
- rp->r_todo = FALSE;
+ rp->r_todo = false;
if (useuntil && ktime >= untiltime)
break;
stdoff = rp->r_stdoff;
if (usestart && ktime == starttime)
- usestart = FALSE;
+ usestart = false;
if (usestart) {
if (ktime < starttime) {
startoff = oadd(zp->z_gmtoff,
@@ -2294,7 +2347,7 @@ outzone(const struct zone * const zpfirst, const int zonecount)
doabbr(startbuf, zp->z_format,
rp->r_abbrvar,
rp->r_stdoff != 0,
- FALSE);
+ false);
continue;
}
if (*startbuf == '\0' &&
@@ -2304,14 +2357,14 @@ outzone(const struct zone * const zpfirst, const int zonecount)
zp->z_format,
rp->r_abbrvar,
rp->r_stdoff !=
- 0,
- FALSE);
+ false,
+ false);
}
}
eats(zp->z_filename, zp->z_linenum,
rp->r_filename, rp->r_linenum);
doabbr(ab, zp->z_format, rp->r_abbrvar,
- rp->r_stdoff != 0, FALSE);
+ rp->r_stdoff != 0, false);
offset = oadd(zp->z_gmtoff, rp->r_stdoff);
type = addtype(offset, ab, rp->r_stdoff != 0,
rp->r_todisstd, rp->r_todisgmt);
@@ -2323,7 +2376,7 @@ outzone(const struct zone * const zpfirst, const int zonecount)
zp->z_format != NULL &&
strchr(zp->z_format, '%') == NULL &&
strchr(zp->z_format, '/') == NULL)
- (void) strcpy(startbuf, zp->z_format);
+ strcpy(startbuf, zp->z_format);
eat(zp->z_filename, zp->z_linenum);
if (*startbuf == '\0')
error(_("can't determine time zone abbreviation to use just after until time"));
@@ -2369,7 +2422,7 @@ error(_("can't determine time zone abbreviation to use just after until time"));
if (lastat->at < rpytime(&xr, max_year - 1)) {
/*
** Create new type code for the redundant entry,
- ** to prevent it being optimised away.
+ ** to prevent it being optimized away.
*/
if (typecnt >= TZ_MAX_TYPES) {
error(_("too many local time types"));
@@ -2400,7 +2453,7 @@ addtt(const zic_t starttime, int type)
ttisstds[0] = ttisstds[type];
ttisgmts[0] = ttisgmts[type];
if (abbrinds[type] != 0)
- (void) strcpy(chars, &chars[abbrinds[type]]);
+ strcpy(chars, &chars[abbrinds[type]]);
abbrinds[0] = 0;
charcnt = strlen(chars) + 1;
typecnt = 1;
@@ -2414,23 +2467,10 @@ addtt(const zic_t starttime, int type)
}
static int
-addtype(const zic_t gmtoff, const char *const abbr, const int isdst,
- const int ttisstd, const int ttisgmt)
+addtype(zic_t gmtoff, char const *abbr, bool isdst, bool ttisstd, bool ttisgmt)
{
register int i, j;
- if (isdst != TRUE && isdst != FALSE) {
- error(_("internal error - addtype called with bad isdst"));
- exit(EXIT_FAILURE);
- }
- if (ttisstd != TRUE && ttisstd != FALSE) {
- error(_("internal error - addtype called with bad ttisstd"));
- exit(EXIT_FAILURE);
- }
- if (ttisgmt != TRUE && ttisgmt != FALSE) {
- error(_("internal error - addtype called with bad ttisgmt"));
- exit(EXIT_FAILURE);
- }
/*
** See if there's already an entry for this zone type.
** If so, just return its index.
@@ -2470,7 +2510,7 @@ addtype(const zic_t gmtoff, const char *const abbr, const int isdst,
}
static void
-leapadd(const zic_t t, const int positive, const int rolling, int count)
+leapadd(zic_t t, bool positive, int rolling, int count)
{
register int i, j;
@@ -2514,59 +2554,102 @@ adjleap(void)
}
}
-static int
+static bool
yearistype(const int year, const char *const type)
{
static char * buf;
int result;
if (type == NULL || *type == '\0')
- return TRUE;
+ return true;
buf = erealloc(buf, 132 + strlen(yitcommand) + strlen(type));
- (void) sprintf(buf, "%s %d %s", yitcommand, year, type);
+ sprintf(buf, "%s %d %s", yitcommand, year, type);
result = system(buf);
if (WIFEXITED(result)) switch (WEXITSTATUS(result)) {
case 0:
- return TRUE;
+ return true;
case 1:
- return FALSE;
+ return false;
}
error(_("Wild result from command execution"));
- (void) fprintf(stderr, _("%s: command was '%s', result was %d\n"),
+ fprintf(stderr, _("%s: command was '%s', result was %d\n"),
progname, buf, result);
for ( ; ; )
exit(EXIT_FAILURE);
}
-static int
-lowerit(int a)
+/* Is A a space character in the C locale? */
+static bool
+is_space(char a)
{
- a = (unsigned char) a;
- return (isascii(a) && isupper(a)) ? tolower(a) : a;
+ switch (a) {
+ default:
+ return false;
+ case ' ': case '\f': case '\n': case '\r': case '\t': case '\v':
+ return true;
+ }
+}
+
+/* Is A an alphabetic character in the C locale? */
+static bool
+is_alpha(char a)
+{
+ switch (a) {
+ default:
+ return false;
+ case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G':
+ case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N':
+ case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U':
+ case 'V': case 'W': case 'X': case 'Y': case 'Z':
+ case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g':
+ case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n':
+ case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u':
+ case 'v': case 'w': case 'x': case 'y': case 'z':
+ return true;
+ }
+}
+
+/* If A is an uppercase character in the C locale, return its lowercase
+ counterpart. Otherwise, return A. */
+static char
+lowerit(char a)
+{
+ switch (a) {
+ default: return a;
+ case 'A': return 'a'; case 'B': return 'b'; case 'C': return 'c';
+ case 'D': return 'd'; case 'E': return 'e'; case 'F': return 'f';
+ case 'G': return 'g'; case 'H': return 'h'; case 'I': return 'i';
+ case 'J': return 'j'; case 'K': return 'k'; case 'L': return 'l';
+ case 'M': return 'm'; case 'N': return 'n'; case 'O': return 'o';
+ case 'P': return 'p'; case 'Q': return 'q'; case 'R': return 'r';
+ case 'S': return 's'; case 'T': return 't'; case 'U': return 'u';
+ case 'V': return 'v'; case 'W': return 'w'; case 'X': return 'x';
+ case 'Y': return 'y'; case 'Z': return 'z';
+ }
}
/* case-insensitive equality */
-static ATTRIBUTE_PURE int
+static ATTRIBUTE_PURE bool
ciequal(register const char *ap, register const char *bp)
{
while (lowerit(*ap) == lowerit(*bp++))
if (*ap++ == '\0')
- return TRUE;
- return FALSE;
+ return true;
+ return false;
}
-static ATTRIBUTE_PURE int
+static ATTRIBUTE_PURE bool
itsabbr(register const char *abbr, register const char *word)
{
if (lowerit(*abbr) != lowerit(*word))
- return FALSE;
+ return false;
++word;
while (*++abbr != '\0')
do {
if (*word == '\0')
- return FALSE;
+ return false;
} while (lowerit(*word++) != lowerit(*abbr));
- return TRUE;
+ return true;
}
static ATTRIBUTE_PURE const struct lookup *
@@ -2609,8 +2692,7 @@ getfields(register char *cp)
array = emalloc(size_product(strlen(cp) + 1, sizeof *array));
nsubs = 0;
for ( ; ; ) {
- while (isascii((unsigned char) *cp) &&
- isspace((unsigned char) *cp))
+ while (is_space(*cp))
++cp;
if (*cp == '\0' || *cp == '#')
break;
@@ -2627,9 +2709,8 @@ getfields(register char *cp)
));
exit(1);
}
- } while (*cp != '\0' && *cp != '#' &&
- (!isascii(*cp) || !isspace((unsigned char) *cp)));
- if (isascii(*cp) && isspace((unsigned char) *cp))
+ } while (*cp && *cp != '#' && !is_space(*cp));
+ if (is_space(*cp))
++cp;
*dp = '\0';
}
@@ -2662,8 +2743,8 @@ tadd(const zic_t t1, const zic_t t2)
}
/*
-** Given a rule, and a year, compute the date - in seconds since January 1,
-** 1970, 00:00 LOCAL time - in that year that the rule refers to.
+** Given a rule, and a year, compute the date (in seconds since January 1,
+** 1970, 00:00 LOCAL time) in that year that the rule refers to.
*/
static zic_t
@@ -2735,7 +2816,7 @@ rpytime(register const struct rule *const rp, register const zic_t wantedy)
}
if (i < 0 || i >= len_months[isleap(y)][m]) {
if (noise)
- warning(_("rule goes past start/end of month--\
+ warning(_("rule goes past start/end of month; \
will not work with pre-2004 versions of zic"));
}
}
@@ -2762,8 +2843,7 @@ newabbr(const char *const string)
*/
cp = string;
mp = NULL;
- while (isascii((unsigned char) *cp) &&
- isalpha((unsigned char) *cp))
+ while (is_alpha(*cp))
++cp;
if (cp - string == 0)
mp = _("time zone abbreviation lacks alphabetic at start");
@@ -2773,8 +2853,7 @@ mp = _("time zone abbreviation has fewer than 3 alphabetics");
mp = _("time zone abbreviation has too many alphabetics");
if (mp == NULL && (*cp == '+' || *cp == '-')) {
++cp;
- if (isascii((unsigned char) *cp) &&
- isdigit((unsigned char) *cp))
+ if (is_digit(*cp))
if (*cp++ == '1' &&
*cp >= '0' && *cp <= '4')
++cp;
@@ -2789,18 +2868,18 @@ mp = _("time zone abbreviation differs from POSIX standard");
error(_("too many, or too long, time zone abbreviations"));
exit(EXIT_FAILURE);
}
- (void) strcpy(&chars[charcnt], string);
+ strcpy(&chars[charcnt], string);
charcnt += i;
}
-static int
+static bool
mkdirs(char *argname)
{
register char * name;
register char * cp;
if (argname == NULL || *argname == '\0')
- return 0;
+ return true;
cp = name = ecpyalloc(argname);
while ((cp = strchr(cp + 1, '/')) != 0) {
*cp = '\0';
@@ -2808,37 +2887,29 @@ mkdirs(char *argname)
/*
** DOS drive specifier?
*/
- if (isalpha((unsigned char) name[0]) &&
- name[1] == ':' && name[2] == '\0') {
+ if (is_alpha(name[0]) && name[1] == ':' && name[2] == '\0') {
*cp = '/';
continue;
}
#endif
- if (!itsdir(name)) {
- /*
- ** It doesn't seem to exist, so we try to create it.
- ** Creation may fail because of the directory being
- ** created by some other multiprocessor, so we get
- ** to do extra checking.
- */
- if (mkdir(name, MKDIR_UMASK) != 0) {
- const char *e = strerror(errno);
-
- if (errno != EEXIST || !itsdir(name)) {
- (void) fprintf(stderr,
-_("%s: Can't create directory %s: %s\n"),
- progname, name, e);
- free(name);
- return -1;
- }
+ /*
+ ** Try to create it. It's OK if creation fails because
+ ** the directory already exists, perhaps because some
+ ** other process just created it.
+ */
+ if (mkdir(name, MKDIR_UMASK) != 0) {
+ int err = errno;
+ if (itsdir(name) <= 0) {
+ char const *e = strerror(err);
+ warning(_("%s: Can't create directory"
+ " %s: %s\n"),
+ progname, name, e);
+ free(name);
+ return false;
}
}
*cp = '/';
}
free(name);
- return 0;
+ return true;
}
-
-/*
-** UNIX was a registered trademark of The Open Group in 2003.
-*/
diff --git a/elsie.nci.nih.gov/src/zone.tab b/elsie.nci.nih.gov/src/zone.tab
index 923d6ac..084bb2f 100644
--- a/elsie.nci.nih.gov/src/zone.tab
+++ b/elsie.nci.nih.gov/src/zone.tab
@@ -1,36 +1,24 @@
-# TZ zone descriptions
+# tz zone descriptions (deprecated version)
#
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
#
-# From Paul Eggert (2013-08-14):
+# From Paul Eggert (2014-07-31):
+# This file is intended as a backward-compatibility aid for older programs.
+# New programs should use zone1970.tab. This file is like zone1970.tab (see
+# zone1970.tab's comments), but with the following additional restrictions:
#
-# This file contains a table where each row stands for an area that is
-# the intersection of a region identified by a country code and of a
-# zone where civil clocks have agreed since 1970. The columns of the
-# table are as follows:
+# 1. This file contains only ASCII characters.
+# 2. The first data column contains exactly one country code.
#
-# 1. ISO 3166 2-character country code. See the file 'iso3166.tab'.
-# 2. Latitude and longitude of the area's principal location
-# in ISO 6709 sign-degrees-minutes-seconds format,
-# either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
-# first latitude (+ is north), then longitude (+ is east).
-# 3. Zone name used in value of TZ environment variable.
-# Please see the 'Theory' file for how zone names are chosen.
-# If multiple zones overlap a country, each has a row in the
-# table, with column 1 being duplicated.
-# 4. Comments; present if and only if the country has multiple rows.
-#
-# Columns are separated by a single tab.
-# The table is sorted first by country, then an order within the country that
-# (1) makes some geographical sense, and
-# (2) puts the most populous areas first, where that does not contradict (1).
-#
-# Lines beginning with '#' are comments.
+# Because of (2), each row stands for an area that is the intersection
+# of a region identified by a country code and of a zone where civil
+# clocks have agreed since 1970; this is a narrower definition than
+# that of zone1970.tab.
#
# This table is intended as an aid for users, to help them select time
-# zone data appropriate for their practical needs. It is not intended
-# to take or endorse any position on legal or territorial claims.
+# zone data entries appropriate for their practical needs. It is not
+# intended to take or endorse any position on legal or territorial claims.
#
#country-
#code coordinates TZ comments
@@ -49,7 +37,7 @@ AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay
AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills
AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula
AQ -7824+10654 Antarctica/Vostok Vostok Station, Lake Vostok
-AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Terre Adelie
+AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Adelie Land
AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I
AQ -720041+0023206 Antarctica/Troll Troll Station, Queen Maud Land
AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF)
@@ -128,7 +116,7 @@ CA +4901-08816 America/Nipigon Eastern Time - Ontario & Quebec - places that did
CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario
CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations
CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut
-CA +744144-0944945 America/Resolute Central Standard Time - Resolute, Nunavut
+CA +744144-0944945 America/Resolute Central Time - Resolute, Nunavut
CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut
CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario
@@ -153,13 +141,10 @@ CH +4723+00832 Europe/Zurich
CI +0519-00402 Africa/Abidjan
CK -2114-15946 Pacific/Rarotonga
CL -3327-07040 America/Santiago most locations
-CL -2709-10926 Pacific/Easter Easter Island & Sala y Gomez
+CL -2709-10926 Pacific/Easter Easter Island
CM +0403+00942 Africa/Douala
-CN +3114+12128 Asia/Shanghai east China - Beijing, Guangdong, Shanghai, etc.
-CN +4545+12641 Asia/Harbin Heilongjiang (except Mohe), Jilin
-CN +2934+10635 Asia/Chongqing central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.
-CN +4348+08735 Asia/Urumqi most of Tibet & Xinjiang
-CN +3929+07559 Asia/Kashgar west Tibet & Xinjiang
+CN +3114+12128 Asia/Shanghai Beijing Time
+CN +4348+08735 Asia/Urumqi Xinjiang Time
CO +0436-07405 America/Bogota
CR +0956-08405 America/Costa_Rica
CU +2308-08222 America/Havana
@@ -341,24 +326,26 @@ RE -2052+05528 Indian/Reunion
RO +4426+02606 Europe/Bucharest
RS +4450+02030 Europe/Belgrade
RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad
-RU +5545+03735 Europe/Moscow Moscow+00 - west Russia
-RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea
-RU +5312+05009 Europe/Samara Moscow+00 - Samara, Udmurtia
+RU +554521+0373704 Europe/Moscow Moscow+00 - west Russia
RU +4457+03406 Europe/Simferopol Moscow+00 - Crimea
+RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea
+RU +5312+05009 Europe/Samara Moscow+00 (Moscow+01 after 2014-10-26) - Samara, Udmurtia
RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals
RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia
RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk
-RU +5345+08707 Asia/Novokuznetsk Moscow+03 - Novokuznetsk
+RU +5345+08707 Asia/Novokuznetsk Moscow+03 (Moscow+04 after 2014-10-26) - Kemerovo
RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River
RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal
+RU +5203+11328 Asia/Chita Moscow+06 (Moscow+05 after 2014-10-26) - Zabaykalsky
RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River
RU +623923+1353314 Asia/Khandyga Moscow+06 - Tomponsky, Ust-Maysky
RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River
RU +4658+14242 Asia/Sakhalin Moscow+07 - Sakhalin Island
RU +643337+1431336 Asia/Ust-Nera Moscow+07 - Oymyakonsky
-RU +5934+15048 Asia/Magadan Moscow+08 - Magadan
-RU +5301+15839 Asia/Kamchatka Moscow+08 - Kamchatka
-RU +6445+17729 Asia/Anadyr Moscow+08 - Bering Sea
+RU +5934+15048 Asia/Magadan Moscow+08 (Moscow+07 after 2014-10-26) - Magadan
+RU +6728+15343 Asia/Srednekolymsk Moscow+08 - E Sakha, N Kuril Is
+RU +5301+15839 Asia/Kamchatka Moscow+08 (Moscow+09 after 2014-10-26) - Kamchatka
+RU +6445+17729 Asia/Anadyr Moscow+08 (Moscow+09 after 2014-10-26) - Bering Sea
RW -0157+03004 Africa/Kigali
SA +2438+04643 Asia/Riyadh
SB -0932+16012 Pacific/Guadalcanal
@@ -425,13 +412,13 @@ US +394421-1045903 America/Denver Mountain Time
US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon
US +332654-1120424 America/Phoenix Mountain Standard Time - Arizona (except Navajo)
US +340308-1181434 America/Los_Angeles Pacific Time
+US +550737-1313435 America/Metlakatla Pacific Standard Time - Annette Island, Alaska
US +611305-1495401 America/Anchorage Alaska Time
US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle
US +571035-1351807 America/Sitka Alaska Time - southeast Alaska panhandle
US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck
US +643004-1652423 America/Nome Alaska Time - west Alaska
US +515248-1763929 America/Adak Aleutian Islands
-US +550737-1313435 America/Metlakatla Metlakatla Time - Annette Island
US +211825-1575130 Pacific/Honolulu Hawaii
UY -3453-05611 America/Montevideo
UZ +3940+06648 Asia/Samarkand west Uzbekistan
diff --git a/elsie.nci.nih.gov/src/zone1970.tab b/elsie.nci.nih.gov/src/zone1970.tab
new file mode 100644
index 0000000..03c50d8
--- /dev/null
+++ b/elsie.nci.nih.gov/src/zone1970.tab
@@ -0,0 +1,369 @@
+# tz zone descriptions
+#
+# This file is in the public domain.
+#
+# From Paul Eggert (2014-07-31):
+# This file contains a table where each row stands for a zone where
+# civil time stamps have agreed since 1970. Columns are separated by
+# a single tab. Lines beginning with '#' are comments. All text uses
+# UTF-8 encoding. The columns of the table are as follows:
+#
+# 1. The countries that overlap the zone, as a comma-separated list
+# of ISO 3166 2-character country codes. See the file 'iso3166.tab'.
+# 2. Latitude and longitude of the zone's principal location
+# in ISO 6709 sign-degrees-minutes-seconds format,
+# either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
+# first latitude (+ is north), then longitude (+ is east).
+# 3. Zone name used in value of TZ environment variable.
+# Please see the 'Theory' file for how zone names are chosen.
+# If multiple zones overlap a country, each has a row in the
+# table, with each column 1 containing the country code.
+# 4. Comments; present if and only if a country has multiple zones.
+#
+# If a zone covers multiple countries, the most-populous city is used,
+# and that country is listed first in column 1; any other countries
+# are listed alphabetically by country code. The table is sorted
+# first by country code, then (if possible) by an order within the
+# country that (1) makes some geographical sense, and (2) puts the
+# most populous zones first, where that does not contradict (1).
+#
+# This table is intended as an aid for users, to help them select time
+# zone data entries appropriate for their practical needs. It is not
+# intended to take or endorse any position on legal or territorial claims.
+#
+#country-
+#codes coordinates TZ comments
+AD +4230+00131 Europe/Andorra
+AE,OM +2518+05518 Asia/Dubai
+AF +3431+06912 Asia/Kabul
+AL +4120+01950 Europe/Tirane
+AM +4011+04430 Asia/Yerevan
+AQ -6734-06808 Antarctica/Rothera Rothera Station, Adelaide Island
+AQ -6448-06406 Antarctica/Palmer Palmer Station, Anvers Island
+AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay
+AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills
+AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula
+AQ -7824+10654 Antarctica/Vostok Vostok Station, Lake Vostok
+AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Adélie Land
+AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I
+AQ -720041+0023206 Antarctica/Troll Troll Station, Queen Maud Land
+AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF)
+AR -3124-06411 America/Argentina/Cordoba most locations (CB, CC, CN, ER, FM, MN, SE, SF)
+AR -2447-06525 America/Argentina/Salta (SA, LP, NQ, RN)
+AR -2411-06518 America/Argentina/Jujuy Jujuy (JY)
+AR -2649-06513 America/Argentina/Tucuman Tucumán (TM)
+AR -2828-06547 America/Argentina/Catamarca Catamarca (CT), Chubut (CH)
+AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR)
+AR -3132-06831 America/Argentina/San_Juan San Juan (SJ)
+AR -3253-06849 America/Argentina/Mendoza Mendoza (MZ)
+AR -3319-06621 America/Argentina/San_Luis San Luis (SL)
+AR -5138-06913 America/Argentina/Rio_Gallegos Santa Cruz (SC)
+AR -5448-06818 America/Argentina/Ushuaia Tierra del Fuego (TF)
+AS,UM -1416-17042 Pacific/Pago_Pago Samoa, Midway
+AT +4813+01620 Europe/Vienna
+AU -3133+15905 Australia/Lord_Howe Lord Howe Island
+AU -5430+15857 Antarctica/Macquarie Macquarie Island
+AU -4253+14719 Australia/Hobart Tasmania - most locations
+AU -3956+14352 Australia/Currie Tasmania - King Island
+AU -3749+14458 Australia/Melbourne Victoria
+AU -3352+15113 Australia/Sydney New South Wales - most locations
+AU -3157+14127 Australia/Broken_Hill New South Wales - Yancowinna
+AU -2728+15302 Australia/Brisbane Queensland - most locations
+AU -2016+14900 Australia/Lindeman Queensland - Holiday Islands
+AU -3455+13835 Australia/Adelaide South Australia
+AU -1228+13050 Australia/Darwin Northern Territory
+AU -3157+11551 Australia/Perth Western Australia - most locations
+AU -3143+12852 Australia/Eucla Western Australia - Eucla area
+AZ +4023+04951 Asia/Baku
+BB +1306-05937 America/Barbados
+BD +2343+09025 Asia/Dhaka
+BE +5050+00420 Europe/Brussels
+BG +4241+02319 Europe/Sofia
+BM +3217-06446 Atlantic/Bermuda
+BN +0456+11455 Asia/Brunei
+BO -1630-06809 America/La_Paz
+BR -0351-03225 America/Noronha Atlantic islands
+BR -0127-04829 America/Belem Amapá, E Pará
+BR -0343-03830 America/Fortaleza NE Brazil (MA, PI, CE, RN, PB)
+BR -0803-03454 America/Recife Pernambuco
+BR -0712-04812 America/Araguaina Tocantins
+BR -0940-03543 America/Maceio Alagoas, Sergipe
+BR -1259-03831 America/Bahia Bahia
+BR -2332-04637 America/Sao_Paulo S & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS)
+BR -2027-05437 America/Campo_Grande Mato Grosso do Sul
+BR -1535-05605 America/Cuiaba Mato Grosso
+BR -0226-05452 America/Santarem W Pará
+BR -0846-06354 America/Porto_Velho Rondônia
+BR +0249-06040 America/Boa_Vista Roraima
+BR -0308-06001 America/Manaus E Amazonas
+BR -0640-06952 America/Eirunepe W Amazonas
+BR -0958-06748 America/Rio_Branco Acre
+BS +2505-07721 America/Nassau
+BT +2728+08939 Asia/Thimphu
+BY +5354+02734 Europe/Minsk
+BZ +1730-08812 America/Belize
+CA +4734-05243 America/St_Johns Newfoundland Time, including SE Labrador
+CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), PEI
+CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971
+CA +4606-06447 America/Moncton Atlantic Time - New Brunswick
+CA +5320-06025 America/Goose_Bay Atlantic Time - Labrador - most locations
+CA +5125-05707 America/Blanc-Sablon Atlantic Standard Time - Quebec - Lower North Shore
+CA +4339-07923 America/Toronto Eastern Time - Ontario & Quebec - most locations
+CA +4901-08816 America/Nipigon Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973
+CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario
+CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations
+CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut
+CA +744144-0944945 America/Resolute Central Time - Resolute, Nunavut
+CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
+CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut
+CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario
+CA +4843-09434 America/Rainy_River Central Time - Rainy River & Fort Frances, Ontario
+CA +5024-10439 America/Regina Central Standard Time - Saskatchewan - most locations
+CA +5017-10750 America/Swift_Current Central Standard Time - Saskatchewan - midwest
+CA +5333-11328 America/Edmonton Mountain Time - Alberta, east British Columbia & west Saskatchewan
+CA +690650-1050310 America/Cambridge_Bay Mountain Time - west Nunavut
+CA +6227-11421 America/Yellowknife Mountain Time - central Northwest Territories
+CA +682059-1334300 America/Inuvik Mountain Time - west Northwest Territories
+CA +4906-11631 America/Creston Mountain Standard Time - Creston, British Columbia
+CA +5946-12014 America/Dawson_Creek Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia
+CA +4916-12307 America/Vancouver Pacific Time - west British Columbia
+CA +6043-13503 America/Whitehorse Pacific Time - south Yukon
+CA +6404-13925 America/Dawson Pacific Time - north Yukon
+CC -1210+09655 Indian/Cocos
+CH,DE,LI +4723+00832 Europe/Zurich Swiss time
+CI,BF,GM,GN,ML,MR,SH,SL,SN,ST,TG +0519-00402 Africa/Abidjan
+CK -2114-15946 Pacific/Rarotonga
+CL -3327-07040 America/Santiago most locations
+CL -2709-10926 Pacific/Easter Easter Island
+CN +3114+12128 Asia/Shanghai Beijing Time
+CN +4348+08735 Asia/Urumqi Xinjiang Time
+CO +0436-07405 America/Bogota
+CR +0956-08405 America/Costa_Rica
+CU +2308-08222 America/Havana
+CV +1455-02331 Atlantic/Cape_Verde
+CW,AW,BQ,SX +1211-06900 America/Curacao
+CX -1025+10543 Indian/Christmas
+CY +3510+03322 Asia/Nicosia
+CZ,SK +5005+01426 Europe/Prague
+DE +5230+01322 Europe/Berlin Berlin time
+DK +5540+01235 Europe/Copenhagen
+DO +1828-06954 America/Santo_Domingo
+DZ +3647+00303 Africa/Algiers
+EC -0210-07950 America/Guayaquil mainland
+EC -0054-08936 Pacific/Galapagos Galápagos Islands
+EE +5925+02445 Europe/Tallinn
+EG +3003+03115 Africa/Cairo
+EH +2709-01312 Africa/El_Aaiun
+ES +4024-00341 Europe/Madrid mainland
+ES +3553-00519 Africa/Ceuta Ceuta & Melilla
+ES +2806-01524 Atlantic/Canary Canary Islands
+FI,AX +6010+02458 Europe/Helsinki
+FJ -1808+17825 Pacific/Fiji
+FK -5142-05751 Atlantic/Stanley
+FM +0725+15147 Pacific/Chuuk Chuuk (Truk) and Yap
+FM +0658+15813 Pacific/Pohnpei Pohnpei (Ponape)
+FM +0519+16259 Pacific/Kosrae Kosrae
+FO +6201-00646 Atlantic/Faroe
+FR +4852+00220 Europe/Paris
+GB,GG,IM,JE +513030-0000731 Europe/London
+GE +4143+04449 Asia/Tbilisi
+GF +0456-05220 America/Cayenne
+GH +0533-00013 Africa/Accra
+GI +3608-00521 Europe/Gibraltar
+GL +6411-05144 America/Godthab most locations
+GL +7646-01840 America/Danmarkshavn east coast, north of Scoresbysund
+GL +7029-02158 America/Scoresbysund Scoresbysund / Ittoqqortoormiit
+GL +7634-06847 America/Thule Thule / Pituffik
+GR +3758+02343 Europe/Athens
+GS -5416-03632 Atlantic/South_Georgia
+GT +1438-09031 America/Guatemala
+GU,MP +1328+14445 Pacific/Guam
+GW +1151-01535 Africa/Bissau
+GY +0648-05810 America/Guyana
+HK +2217+11409 Asia/Hong_Kong
+HN +1406-08713 America/Tegucigalpa
+HT +1832-07220 America/Port-au-Prince
+HU +4730+01905 Europe/Budapest
+ID -0610+10648 Asia/Jakarta Java & Sumatra
+ID -0002+10920 Asia/Pontianak west & central Borneo
+ID -0507+11924 Asia/Makassar east & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor
+ID -0232+14042 Asia/Jayapura west New Guinea (Irian Jaya) & Malukus (Moluccas)
+IE +5320-00615 Europe/Dublin
+IL +314650+0351326 Asia/Jerusalem
+IN +2232+08822 Asia/Kolkata
+IO -0720+07225 Indian/Chagos
+IQ +3321+04425 Asia/Baghdad
+IR +3540+05126 Asia/Tehran
+IS +6409-02151 Atlantic/Reykjavik
+IT,SM,VA +4154+01229 Europe/Rome
+JM +175805-0764736 America/Jamaica
+JO +3157+03556 Asia/Amman
+JP +353916+1394441 Asia/Tokyo
+KE,DJ,ER,ET,KM,MG,SO,TZ,UG,YT -0117+03649 Africa/Nairobi
+KG +4254+07436 Asia/Bishkek
+KI +0125+17300 Pacific/Tarawa Gilbert Islands
+KI -0308-17105 Pacific/Enderbury Phoenix Islands
+KI +0152-15720 Pacific/Kiritimati Line Islands
+KP +3901+12545 Asia/Pyongyang
+KR +3733+12658 Asia/Seoul
+KZ +4315+07657 Asia/Almaty most locations
+KZ +4448+06528 Asia/Qyzylorda Qyzylorda (Kyzylorda, Kzyl-Orda)
+KZ +5017+05710 Asia/Aqtobe Aqtobe (Aktobe)
+KZ +4431+05016 Asia/Aqtau Atyrau (Atirau, Gur'yev), Mangghystau (Mankistau)
+KZ +5113+05121 Asia/Oral West Kazakhstan
+LB +3353+03530 Asia/Beirut
+LK +0656+07951 Asia/Colombo
+LR +0618-01047 Africa/Monrovia
+LT +5441+02519 Europe/Vilnius
+LU +4936+00609 Europe/Luxembourg
+LV +5657+02406 Europe/Riga
+LY +3254+01311 Africa/Tripoli
+MA +3339-00735 Africa/Casablanca
+MC +4342+00723 Europe/Monaco
+MD +4700+02850 Europe/Chisinau
+MH +0709+17112 Pacific/Majuro most locations
+MH +0905+16720 Pacific/Kwajalein Kwajalein
+MM +1647+09610 Asia/Rangoon
+MN +4755+10653 Asia/Ulaanbaatar most locations
+MN +4801+09139 Asia/Hovd Bayan-Ölgii, Govi-Altai, Hovd, Uvs, Zavkhan
+MN +4804+11430 Asia/Choibalsan Dornod, Sükhbaatar
+MO +2214+11335 Asia/Macau
+MQ +1436-06105 America/Martinique
+MT +3554+01431 Europe/Malta
+MU -2010+05730 Indian/Mauritius
+MV +0410+07330 Indian/Maldives
+MX +1924-09909 America/Mexico_City Central Time - most locations
+MX +2105-08646 America/Cancun Central Time - Quintana Roo
+MX +2058-08937 America/Merida Central Time - Campeche, Yucatán
+MX +2540-10019 America/Monterrey Mexican Central Time - Coahuila, Durango, Nuevo León, Tamaulipas away from US border
+MX +2550-09730 America/Matamoros US Central Time - Coahuila, Durango, Nuevo León, Tamaulipas near US border
+MX +2313-10625 America/Mazatlan Mountain Time - S Baja, Nayarit, Sinaloa
+MX +2838-10605 America/Chihuahua Mexican Mountain Time - Chihuahua away from US border
+MX +2934-10425 America/Ojinaga US Mountain Time - Chihuahua near US border
+MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora
+MX +3232-11701 America/Tijuana US Pacific Time - Baja California near US border
+MX +3018-11452 America/Santa_Isabel Mexican Pacific Time - Baja California away from US border
+MX +2048-10515 America/Bahia_Banderas Mexican Central Time - Bahía de Banderas
+MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia
+MY +0133+11020 Asia/Kuching Sabah & Sarawak
+MZ,BI,BW,CD,MW,RW,ZM,ZW -2558+03235 Africa/Maputo Central Africa Time (UTC+2)
+NA -2234+01706 Africa/Windhoek
+NC -2216+16627 Pacific/Noumea
+NF -2903+16758 Pacific/Norfolk
+NG,AO,BJ,CD,CF,CG,CM,GA,GQ,NE +0627+00324 Africa/Lagos West Africa Time (UTC+1)
+NI +1209-08617 America/Managua
+NL +5222+00454 Europe/Amsterdam
+NO,SJ +5955+01045 Europe/Oslo
+NP +2743+08519 Asia/Kathmandu
+NR -0031+16655 Pacific/Nauru
+NU -1901-16955 Pacific/Niue
+NZ,AQ -3652+17446 Pacific/Auckland New Zealand time
+NZ -4357-17633 Pacific/Chatham Chatham Islands
+PA,KY +0858-07932 America/Panama
+PE -1203-07703 America/Lima
+PF -1732-14934 Pacific/Tahiti Society Islands
+PF -0900-13930 Pacific/Marquesas Marquesas Islands
+PF -2308-13457 Pacific/Gambier Gambier Islands
+PG -0930+14710 Pacific/Port_Moresby
+PH +1435+12100 Asia/Manila
+PK +2452+06703 Asia/Karachi
+PL +5215+02100 Europe/Warsaw
+PM +4703-05620 America/Miquelon
+PN -2504-13005 Pacific/Pitcairn
+PR +182806-0660622 America/Puerto_Rico
+PS +3130+03428 Asia/Gaza Gaza Strip
+PS +313200+0350542 Asia/Hebron West Bank
+PT +3843-00908 Europe/Lisbon mainland
+PT +3238-01654 Atlantic/Madeira Madeira Islands
+PT +3744-02540 Atlantic/Azores Azores
+PW +0720+13429 Pacific/Palau
+PY -2516-05740 America/Asuncion
+QA,BH +2517+05132 Asia/Qatar
+RE,TF -2052+05528 Indian/Reunion Réunion, Crozet Is, Scattered Is
+RO +4426+02606 Europe/Bucharest
+RS,BA,HR,ME,MK,SI +4450+02030 Europe/Belgrade
+RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad
+RU +554521+0373704 Europe/Moscow Moscow+00 - west Russia
+RU +4457+03406 Europe/Simferopol Moscow+00 - Crimea
+RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea
+RU +5312+05009 Europe/Samara Moscow+00 (Moscow+01 after 2014-10-26) - Samara, Udmurtia
+RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals
+RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia
+RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk
+RU +5345+08707 Asia/Novokuznetsk Moscow+03 (Moscow+04 after 2014-10-26) - Kemerovo
+RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River
+RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal
+RU +5203+11328 Asia/Chita Moscow+06 (Moscow+05 after 2014-10-26) - Zabaykalsky
+RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River
+RU +623923+1353314 Asia/Khandyga Moscow+06 - Tomponsky, Ust-Maysky
+RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River
+RU +4658+14242 Asia/Sakhalin Moscow+07 - Sakhalin Island
+RU +643337+1431336 Asia/Ust-Nera Moscow+07 - Oymyakonsky
+RU +5934+15048 Asia/Magadan Moscow+08 (Moscow+07 after 2014-10-26) - Magadan
+RU +6728+15343 Asia/Srednekolymsk Moscow+08 - E Sakha, N Kuril Is
+RU +5301+15839 Asia/Kamchatka Moscow+08 (Moscow+09 after 2014-10-26) - Kamchatka
+RU +6445+17729 Asia/Anadyr Moscow+08 (Moscow+09 after 2014-10-26) - Bering Sea
+SA,KW,YE +2438+04643 Asia/Riyadh
+SB -0932+16012 Pacific/Guadalcanal
+SC -0440+05528 Indian/Mahe
+SD,SS +1536+03232 Africa/Khartoum
+SE +5920+01803 Europe/Stockholm
+SG +0117+10351 Asia/Singapore
+SR +0550-05510 America/Paramaribo
+SV +1342-08912 America/El_Salvador
+SY +3330+03618 Asia/Damascus
+TC +2128-07108 America/Grand_Turk
+TD +1207+01503 Africa/Ndjamena
+TF -492110+0701303 Indian/Kerguelen Kerguelen, St Paul I, Amsterdam I
+TH,KH,LA,VN +1345+10031 Asia/Bangkok
+TJ +3835+06848 Asia/Dushanbe
+TK -0922-17114 Pacific/Fakaofo
+TL -0833+12535 Asia/Dili
+TM +3757+05823 Asia/Ashgabat
+TN +3648+01011 Africa/Tunis
+TO -2110-17510 Pacific/Tongatapu
+TR +4101+02858 Europe/Istanbul
+TT,AG,AI,BL,DM,GD,GP,MF,LC,KN,MS,VC,VG,VI +1039-06131 America/Port_of_Spain
+TV -0831+17913 Pacific/Funafuti
+TW +2503+12130 Asia/Taipei
+UA +5026+03031 Europe/Kiev most locations
+UA +4837+02218 Europe/Uzhgorod Ruthenia
+UA +4750+03510 Europe/Zaporozhye Zaporozh'ye, E Lugansk / Zaporizhia, E Luhansk
+UM +1917+16637 Pacific/Wake Wake Island
+US +404251-0740023 America/New_York Eastern Time
+US +421953-0830245 America/Detroit Eastern Time - Michigan - most locations
+US +381515-0854534 America/Kentucky/Louisville Eastern Time - Kentucky - Louisville area
+US +364947-0845057 America/Kentucky/Monticello Eastern Time - Kentucky - Wayne County
+US +394606-0860929 America/Indiana/Indianapolis Eastern Time - Indiana - most locations
+US +384038-0873143 America/Indiana/Vincennes Eastern Time - Indiana - Daviess, Dubois, Knox & Martin Counties
+US +410305-0863611 America/Indiana/Winamac Eastern Time - Indiana - Pulaski County
+US +382232-0862041 America/Indiana/Marengo Eastern Time - Indiana - Crawford County
+US +382931-0871643 America/Indiana/Petersburg Eastern Time - Indiana - Pike County
+US +384452-0850402 America/Indiana/Vevay Eastern Time - Indiana - Switzerland County
+US +415100-0873900 America/Chicago Central Time
+US +375711-0864541 America/Indiana/Tell_City Central Time - Indiana - Perry County
+US +411745-0863730 America/Indiana/Knox Central Time - Indiana - Starke County
+US +450628-0873651 America/Menominee Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties
+US +470659-1011757 America/North_Dakota/Center Central Time - North Dakota - Oliver County
+US +465042-1012439 America/North_Dakota/New_Salem Central Time - North Dakota - Morton County (except Mandan area)
+US +471551-1014640 America/North_Dakota/Beulah Central Time - North Dakota - Mercer County
+US +394421-1045903 America/Denver Mountain Time
+US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon
+US +332654-1120424 America/Phoenix Mountain Standard Time - Arizona (except Navajo)
+US +340308-1181434 America/Los_Angeles Pacific Time
+US +550737-1313435 America/Metlakatla Pacific Standard Time - Annette Island, Alaska
+US +611305-1495401 America/Anchorage Alaska Time
+US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle
+US +571035-1351807 America/Sitka Alaska Time - southeast Alaska panhandle
+US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck
+US +643004-1652423 America/Nome Alaska Time - west Alaska
+US +515248-1763929 America/Adak Aleutian Islands
+US,UM +211825-1575130 Pacific/Honolulu Hawaii time
+UY -3453-05611 America/Montevideo
+UZ +3940+06648 Asia/Samarkand west Uzbekistan
+UZ +4120+06918 Asia/Tashkent east Uzbekistan
+VE +1030-06656 America/Caracas
+VU -1740+16825 Pacific/Efate
+WF -1318-17610 Pacific/Wallis
+WS -1350-17144 Pacific/Apia
+ZA,LS,SZ -2615+02800 Africa/Johannesburg
diff --git a/elsie.nci.nih.gov/src/zoneinfo2tdf.pl b/elsie.nci.nih.gov/src/zoneinfo2tdf.pl
index 3192e0c..e05ec01 100755
--- a/elsie.nci.nih.gov/src/zoneinfo2tdf.pl
+++ b/elsie.nci.nih.gov/src/zoneinfo2tdf.pl
@@ -6,8 +6,8 @@ use strict;
#This file released to the public domain.
-#Note: error checking is poor --- only trust the output if the input
-#has been checked by zic.
+# Note: error checking is poor; trust the output only if the input
+# has been checked by zic.
my $contZone = '';
while (<>) {
@@ -40,7 +40,7 @@ while (<>) {
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@fields == 10 or warn "bad rule line";
} elsif ($type eq 'link') {
- # Link LINK-FROM LINK-TO
+ # Link TARGET LINK-NAME
@fields == 3 or warn "bad link line";
} elsif ($type eq 'leap') {
# Leap YEAR MONTH DAY HH:MM:SS CORR R/S