summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--elsie.nci.nih.gov/src/Makefile3
-rw-r--r--elsie.nci.nih.gov/src/README2
-rw-r--r--elsie.nci.nih.gov/src/Theory2
-rw-r--r--elsie.nci.nih.gov/src/africa64
-rw-r--r--elsie.nci.nih.gov/src/antarctica10
-rw-r--r--elsie.nci.nih.gov/src/asctime.c13
-rw-r--r--elsie.nci.nih.gov/src/asia239
-rw-r--r--elsie.nci.nih.gov/src/australasia46
-rw-r--r--elsie.nci.nih.gov/src/backward2
-rw-r--r--elsie.nci.nih.gov/src/checktab.awk2
-rw-r--r--elsie.nci.nih.gov/src/date.12
-rw-r--r--elsie.nci.nih.gov/src/date.c29
-rw-r--r--elsie.nci.nih.gov/src/difftime.c2
-rw-r--r--elsie.nci.nih.gov/src/etcetera2
-rw-r--r--elsie.nci.nih.gov/src/europe203
-rw-r--r--elsie.nci.nih.gov/src/factory2
-rw-r--r--elsie.nci.nih.gov/src/iso3166.tab2
-rw-r--r--elsie.nci.nih.gov/src/leapseconds2
-rw-r--r--elsie.nci.nih.gov/src/localtime.c231
-rw-r--r--elsie.nci.nih.gov/src/logwtmp.c2
-rw-r--r--elsie.nci.nih.gov/src/newctime.32
-rw-r--r--elsie.nci.nih.gov/src/newstrftime.32
-rw-r--r--elsie.nci.nih.gov/src/newtzset.32
-rw-r--r--elsie.nci.nih.gov/src/northamerica536
-rw-r--r--elsie.nci.nih.gov/src/pacificnew2
-rw-r--r--elsie.nci.nih.gov/src/private.h83
-rw-r--r--elsie.nci.nih.gov/src/scheck.c11
-rw-r--r--elsie.nci.nih.gov/src/solar872
-rw-r--r--elsie.nci.nih.gov/src/solar882
-rw-r--r--elsie.nci.nih.gov/src/solar892
-rw-r--r--elsie.nci.nih.gov/src/southamerica97
-rw-r--r--elsie.nci.nih.gov/src/strftime.c2
-rw-r--r--elsie.nci.nih.gov/src/systemv2
-rw-r--r--elsie.nci.nih.gov/src/time2posix.32
-rw-r--r--elsie.nci.nih.gov/src/tz-art.htm34
-rw-r--r--elsie.nci.nih.gov/src/tz-link.htm75
-rw-r--r--elsie.nci.nih.gov/src/tzfile.516
-rw-r--r--elsie.nci.nih.gov/src/tzfile.5.txt21
-rw-r--r--elsie.nci.nih.gov/src/tzfile.h23
-rw-r--r--elsie.nci.nih.gov/src/tzselect.82
-rw-r--r--elsie.nci.nih.gov/src/tzselect.ksh2
-rw-r--r--elsie.nci.nih.gov/src/usno19882
-rw-r--r--elsie.nci.nih.gov/src/usno19892
-rw-r--r--elsie.nci.nih.gov/src/usno1989a2
-rw-r--r--elsie.nci.nih.gov/src/usno19952
-rw-r--r--elsie.nci.nih.gov/src/usno19972
-rw-r--r--elsie.nci.nih.gov/src/usno19982
-rw-r--r--elsie.nci.nih.gov/src/workman.sh2
-rw-r--r--elsie.nci.nih.gov/src/yearistype.sh2
-rw-r--r--elsie.nci.nih.gov/src/zdump.82
-rw-r--r--elsie.nci.nih.gov/src/zdump.c37
-rw-r--r--elsie.nci.nih.gov/src/zic.816
-rw-r--r--elsie.nci.nih.gov/src/zic.8.txt10
-rw-r--r--elsie.nci.nih.gov/src/zic.c710
-rw-r--r--elsie.nci.nih.gov/src/zone.tab20
55 files changed, 1788 insertions, 803 deletions
diff --git a/elsie.nci.nih.gov/src/Makefile b/elsie.nci.nih.gov/src/Makefile
index a2ae4af..7f3f2e5 100644
--- a/elsie.nci.nih.gov/src/Makefile
+++ b/elsie.nci.nih.gov/src/Makefile
@@ -1,4 +1,4 @@
-# @(#)Makefile 7.109
+# @(#)Makefile 8.1
# Change the line below for your time zone (after finding the zone you want in
# the time zone files, or adding it to a time zone file).
@@ -95,6 +95,7 @@ LDLIBS=
# -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_STRERROR=0 if your system lacks the strerror function
# -DHAVE_SYMLINK=0 if your system lacks the symlink function
# -DHAVE_SYS_STAT_H=0 if your compiler lacks a "sys/stat.h"
diff --git a/elsie.nci.nih.gov/src/README b/elsie.nci.nih.gov/src/README
index e868f6d..5ef11b2 100644
--- a/elsie.nci.nih.gov/src/README
+++ b/elsie.nci.nih.gov/src/README
@@ -1,4 +1,4 @@
-@(#)README 7.12
+@(#)README 8.1
"What time is it?" -- Richard Deacon as The King
"Any time you want it to be." -- Frank Baxter as The Scientist
diff --git a/elsie.nci.nih.gov/src/Theory b/elsie.nci.nih.gov/src/Theory
index 23faf30..57bcb3f 100644
--- a/elsie.nci.nih.gov/src/Theory
+++ b/elsie.nci.nih.gov/src/Theory
@@ -1,4 +1,4 @@
-@(#)Theory 7.19
+@(#)Theory 8.1
----- Outline -----
diff --git a/elsie.nci.nih.gov/src/africa b/elsie.nci.nih.gov/src/africa
index 153e254..6d5c9fb 100644
--- a/elsie.nci.nih.gov/src/africa
+++ b/elsie.nci.nih.gov/src/africa
@@ -1,15 +1,15 @@
-# @(#)africa 7.40
+# @(#)africa 8.3
# <pre>
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert (1999-03-22):
+# From Paul Eggert (2006-03-22):
#
# A good source for time zone historical data outside the U.S. is
-# Thomas G. Shanks, The International Atlas (5th edition),
-# San Diego: ACS Publications, Inc. (1999).
+# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
+# San Diego: ACS Publications, Inc. (2003).
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
@@ -17,8 +17,8 @@
# published semiannually. Law sent in several helpful summaries
# of the IATA's data after 1990.
#
-# Except where otherwise noted, Shanks is the source for entries through 1990,
-# and IATA SSIM is the source for entries after 1990.
+# Except where otherwise noted, Shanks & Pottenger is the source for
+# entries through 1990, and IATA SSIM is the source for entries afterwards.
#
# Another source occasionally used is Edward W. Whitman, World Time Differences,
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
@@ -65,7 +65,7 @@
# Algeria
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Algeria 1916 only - Jun 14 23:00s 1:00 S
-Rule Algeria 1916 1919 - Oct Sun<=7 23:00s 0 -
+Rule Algeria 1916 1919 - Oct Sun>=1 23:00s 0 -
Rule Algeria 1917 only - Mar 24 23:00s 1:00 S
Rule Algeria 1918 only - Mar 9 23:00s 1:00 S
Rule Algeria 1919 only - Mar 1 23:00s 1:00 S
@@ -75,7 +75,7 @@ Rule Algeria 1921 only - Mar 14 23:00s 1:00 S
Rule Algeria 1921 only - Jun 21 23:00s 0 -
Rule Algeria 1939 only - Sep 11 23:00s 1:00 S
Rule Algeria 1939 only - Nov 19 1:00 0 -
-Rule Algeria 1944 1945 - Apr Mon<=7 2:00 1:00 S
+Rule Algeria 1944 1945 - Apr Mon>=1 2:00 1:00 S
Rule Algeria 1944 only - Oct 8 2:00 0 -
Rule Algeria 1945 only - Sep 16 1:00 0 -
Rule Algeria 1971 only - Apr 25 23:00s 1:00 S
@@ -86,7 +86,8 @@ Rule Algeria 1978 only - Mar 24 1:00 1:00 S
Rule Algeria 1978 only - Sep 22 3:00 0 -
Rule Algeria 1980 only - Apr 25 0:00 1:00 S
Rule Algeria 1980 only - Oct 31 2:00 0 -
-# Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21.
+# 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
@@ -106,7 +107,8 @@ Zone Africa/Luanda 0:52:56 - LMT 1892
1:00 - WAT
# Benin
-# Whitman says they switched to 1:00 in 1946, not 1934; go with Shanks.
+# 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
@@ -130,7 +132,7 @@ Zone Africa/Bujumbura 1:57:28 - LMT 1890
2:00 - CAT
# Cameroon
-# Whitman says they switched to 1:00 in 1920; go with Shanks.
+# 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
@@ -229,9 +231,9 @@ Zone Africa/Asmera 2:35:32 - LMT 1870
3:00 - EAT
# Ethiopia
-# From Paul Eggert (1997-10-05):
-# Shanks writes that Ethiopia had six narrowly-spaced time zones between
-# 1870 and 1890, and that they merged to 38E50 (2:35:20) in 1890.
+# 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.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Addis_Ababa 2:34:48 - LMT 1870
@@ -252,7 +254,8 @@ Zone Africa/Banjul -1:06:36 - LMT 1912
# 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.
+# 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
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -288,13 +291,14 @@ Zone Africa/Maseru 1:50:00 - LMT 1903 Mar
2:00 - SAST
# Liberia
-# From Paul Eggert (2001-07-17):
+# From Paul Eggert (2006-03-22):
# In 1972 Liberia was the last country to switch
# from a UTC offset that was not a multiple of 15 or 20 minutes.
# Howse reports that it was in honor of their president's birthday.
-# Shanks reports the date as May 1, whereas Howse reports Jan; go with Shanks.
-# For Liberia before 1972, Shanks reports -0:44, whereas Howse and Whitman
-# each report -0:44:30; go with the more precise figure.
+# Shank & Pottenger report the date as May 1, whereas Howse reports Jan;
+# go with Shanks & Pottenger.
+# For Liberia before 1972, Shanks & Pottenger report -0:44, whereas Howse and
+# Whitman each report -0:44:30; go with the more precise figure.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Monrovia -0:43:08 - LMT 1882
-0:43:08 - MMT 1919 Mar # Monrovia Mean Time
@@ -324,7 +328,7 @@ Zone Africa/Tripoli 0:52:44 - LMT 1920
1:00 Libya CE%sT 1959
2:00 - EET 1982
1:00 Libya CE%sT 1990 May 4
-# The following entries are all from Shanks;
+# The following entries are from Shanks & Pottenger;
# the IATA SSIM data contain some obvious errors.
2:00 - EET 1996 Sep 30
1:00 - CET 1997 Apr 4
@@ -403,8 +407,8 @@ Zone Africa/Maputo 2:10:20 - LMT 1903 Mar
2:00 - CAT
# Namibia
-# The 1994-04-03 transition is from Shanks.
-# Shanks reports no DST after 1998-04; go with IATA.
+# The 1994-04-03 transition is from Shanks & Pottenger.
+# Shanks & Pottenger report no DST after 1998-04; go with IATA.
# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Namibia 1994 max - Sep Sun>=1 2:00 1:00 S
Rule Namibia 1995 max - Apr Sun>=1 2:00 0 -
@@ -488,7 +492,7 @@ Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
# 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.
+# 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
@@ -557,7 +561,6 @@ Zone Africa/Lome 0:04:52 - LMT 1893
# Tunisia
# From Gwillim Law (2005-04-30):
-#
# My correspondent, Risto Nykanen, 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
@@ -571,6 +574,12 @@ Zone Africa/Lome 0:04:52 - LMT 1893
# <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.
+#
+# From Atef Loukil (2006-03-28):
+# The daylight saving time will be the same each year:
+# Beginning : the last Sunday of March at 02:00
+# Ending : the last Sunday of October at 03:00 ...
+# http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=1188&Itemid=50
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Tunisia 1939 only - Apr 15 23:00s 1:00 S
@@ -596,8 +605,11 @@ Rule Tunisia 1989 only - Mar 26 0:00s 1:00 S
Rule Tunisia 1990 only - May 1 0:00s 1:00 S
Rule Tunisia 2005 only - May 1 0:00s 1:00 S
Rule Tunisia 2005 only - Sep 30 1:00s 0 -
-# Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21.
-# Shanks says the 1911 switch occurred on Mar 9; go with Howse's Mar 11.
+Rule Tunisia 2006 max - Mar lastSun 2:00s 1:00 S
+Rule Tunisia 2006 max - Oct lastSun 2:00s 0 -
+# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
+# more precise 0:09:21.
+# 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
diff --git a/elsie.nci.nih.gov/src/antarctica b/elsie.nci.nih.gov/src/antarctica
index f3efe19..0efde38 100644
--- a/elsie.nci.nih.gov/src/antarctica
+++ b/elsie.nci.nih.gov/src/antarctica
@@ -1,4 +1,4 @@
-# @(#)antarctica 7.30
+# @(#)antarctica 8.2
# <pre>
# From Paul Eggert (1999-11-15):
@@ -34,12 +34,12 @@ Rule RussAQ 1996 max - Oct lastSun 2:00s 0 -
Rule ArgAQ 1964 1966 - Mar 1 0:00 0 -
Rule ArgAQ 1964 1966 - Oct 15 0:00 1:00 S
Rule ArgAQ 1967 only - Apr 1 0:00 0 -
-Rule ArgAQ 1967 1968 - Oct Sun<=7 0:00 1:00 S
-Rule ArgAQ 1968 1969 - Apr Sun<=7 0:00 0 -
+Rule ArgAQ 1967 1968 - Oct Sun>=1 0:00 1:00 S
+Rule ArgAQ 1968 1969 - Apr Sun>=1 0:00 0 -
Rule ArgAQ 1974 only - Jan 23 0:00 1:00 S
Rule ArgAQ 1974 only - May 1 0:00 0 -
-Rule ArgAQ 1974 1976 - Oct Sun<=7 0:00 1:00 S
-Rule ArgAQ 1975 1977 - Apr Sun<=7 0:00 0 -
+Rule ArgAQ 1974 1976 - Oct Sun>=1 0:00 1:00 S
+Rule ArgAQ 1975 1977 - Apr Sun>=1 0:00 0 -
Rule ChileAQ 1966 1997 - Oct Sun>=9 0:00 1:00 S
Rule ChileAQ 1967 1998 - Mar Sun>=9 0:00 0 -
Rule ChileAQ 1998 only - Sep 27 0:00 1:00 S
diff --git a/elsie.nci.nih.gov/src/asctime.c b/elsie.nci.nih.gov/src/asctime.c
index f5d8f53..e0804f1 100644
--- a/elsie.nci.nih.gov/src/asctime.c
+++ b/elsie.nci.nih.gov/src/asctime.c
@@ -11,7 +11,7 @@
#ifndef lint
#ifndef NOID
-static char elsieid[] = "@(#)asctime.c 7.32";
+static char elsieid[] = "@(#)asctime.c 8.2";
#endif /* !defined NOID */
#endif /* !defined lint */
@@ -23,7 +23,8 @@ static char elsieid[] = "@(#)asctime.c 7.32";
/*
** Some systems only handle "%.2d"; others only handle "%02d";
** "%02.2d" makes (most) everybody happy.
-** At least some versions of gcc warn about the %02.2d; ignore the warning.
+** At least some versions of gcc warn about the %02.2d;
+** we conditionalize below to avoid the warning.
*/
/*
** All years associated with 32-bit time_t values are exactly four digits long;
@@ -37,14 +38,22 @@ static char elsieid[] = "@(#)asctime.c 7.32";
** The ISO C 1999 and POSIX 1003.1-2004 standards prohibit padding the year,
** but many implementations pad anyway; most likely the standards are buggy.
*/
+#ifdef __GNUC__
+#define ASCTIME_FMT "%.3s %.3s%3d %2.2d:%2.2d:%2.2d %-4s\n"
+#else /* !defined __GNUC__ */
#define ASCTIME_FMT "%.3s %.3s%3d %02.2d:%02.2d:%02.2d %-4s\n"
+#endif /* !defined __GNUC__ */
/*
** For years that are more than four digits we put extra spaces before the year
** so that code trying to overwrite the newline won't end up overwriting
** a digit within a year and truncating the year (operating on the assumption
** that no output is better than wrong output).
*/
+#ifdef __GNUC__
+#define ASCTIME_FMT_B "%.3s %.3s%3d %2.2d:%2.2d:%2.2d %s\n"
+#else /* !defined __GNUC__ */
#define ASCTIME_FMT_B "%.3s %.3s%3d %02.2d:%02.2d:%02.2d %s\n"
+#endif /* !defined __GNUC__ */
#define STD_ASCTIME_BUF_SIZE 26
/*
diff --git a/elsie.nci.nih.gov/src/asia b/elsie.nci.nih.gov/src/asia
index 59e62dd..0d4c883 100644
--- a/elsie.nci.nih.gov/src/asia
+++ b/elsie.nci.nih.gov/src/asia
@@ -1,15 +1,15 @@
-# @(#)asia 7.90
+# @(#)asia 8.4
# <pre>
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert (1999-03-22):
+# From Paul Eggert (2006-03-22):
#
# A good source for time zone historical data outside the U.S. is
-# Thomas G. Shanks, The International Atlas (5th edition),
-# San Diego: ACS Publications, Inc. (1999).
+# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
+# San Diego: ACS Publications, Inc. (2003).
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
@@ -17,8 +17,8 @@
# published semiannually. Law sent in several helpful summaries
# of the IATA's data after 1990.
#
-# Except where otherwise noted, Shanks is the source for entries through 1990,
-# and IATA SSIM is the source for entries after 1990.
+# Except where otherwise noted, Shanks & Pottenger is the source for
+# entries through 1990, and IATA SSIM is the source for entries afterwards.
#
# Another source occasionally used is Edward W. Whitman, World Time Differences,
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
@@ -61,6 +61,7 @@
# 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 -
Rule EUAsia 1996 max - Oct lastSun 1:00u 0 -
Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 S
Rule E-EurAsia 1979 1995 - Sep lastSun 0:00 0 -
@@ -82,10 +83,11 @@ Zone Asia/Kabul 4:36:48 - LMT 1890
4:30 - AFT
# Armenia
-# From Paul Eggert (1999-10-29):
-# Shanks has Yerevan switching to 3:00 (with Russian DST) in spring 1991,
-# then to 4:00 with no DST in fall 1995, then readopting Russian DST in 1997.
-# Go with Shanks, even when he disagrees with others. Edgar Der-Danieliantz
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger have Yerevan switching to 3:00 (with Russian DST)
+# in spring 1991, then to 4:00 with no DST in fall 1995, then
+# readopting Russian DST in 1997. Go with Shanks & Pottenger, even
+# when they disagree with others. Edgar Der-Danieliantz
# reported (1996-05-04) that Yerevan probably wouldn't use DST
# in 1996, though it did use DST in 1995. IATA SSIM (1991/1998) reports that
# Armenia switched from 3:00 to 4:00 in 1998 and observed DST after 1991,
@@ -194,13 +196,15 @@ 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 (1995-12-19):
-# Shanks writes that China has had a single time zone since 1980 May 1,
-# observing summer DST from 1986 through 1991; this contradicts Devine's
+# 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 for now. I made up names for the other pre-1980 time zones.
+# Go with Shanks & Pottenger for now. I made up names for the other
+# pre-1980 time zones.
-# From Shanks:
+# From Shanks & Pottenger:
# 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
@@ -266,7 +270,7 @@ Zone Asia/Hong_Kong 7:36:36 - LMT 1904 Oct 30
# Taiwan
-# Shanks writes that Taiwan observed DST during 1945, when it
+# 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.
@@ -423,7 +427,7 @@ Zone Asia/Calcutta 5:53:28 - LMT 1880 # Kolkata
# Indonesia
#
-# From Gwillim Law (2001-05-28), overriding Shanks:
+# From Gwillim Law (2001-05-28), overriding Shanks & Pottenger:
# <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
@@ -431,7 +435,7 @@ Zone Asia/Calcutta 5:53:28 - LMT 1880 # Kolkata
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Jakarta 7:07:12 - LMT 1867 Aug 10
-# Shanks says the next transition was at 1924 Jan 1 0:13,
+# Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
# but this must be a typo.
7:07:12 - JMT 1923 Dec 31 23:47:12 # Jakarta
7:20 - JAVT 1932 Nov # Java Time
@@ -498,8 +502,8 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
# leap year calculation involved. There has never been any serious
# plan to change that law....
#
-# From Paul Eggert (2005-04-05):
-# Go with Shanks before September 1991, and with Pournader thereafter.
+# From Paul Eggert (2006-03-22):
+# Go with Shanks & Pottenger before Sept. 1991, and with Pournader thereafter.
# I used Ed Reingold's cal-persia in GNU Emacs 21.2 to check Persian dates,
# stopping after 2037 when 32-bit time_t's overflow.
# That cal-persia used Birashk's approximation, which disagrees with the solar
@@ -519,6 +523,14 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
# Reingold's/Dershowitz' calculator gives correctly the Gregorian date
# 2058-03-21 for 1 Farvardin 1437 (astronomical).
#
+# From Paul Eggert (2006-03-22):
+# The above comments about post-2006 transitions may become relevant again,
+# if Iran ever resuscitates DST, so we'll leave the comments in.
+#
+# From Steffen Thorsen (2006-03-22):
+# Several of my users have reported that Iran will not observe DST anymore:
+# http://www.irna.ir/en/news/view/line-17/0603193812164948.htm
+#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Iran 1978 1980 - Mar 21 0:00 1:00 D
Rule Iran 1978 only - Oct 21 0:00 0 S
@@ -537,38 +549,8 @@ Rule Iran 2001 2003 - Mar 22 0:00 1:00 D
Rule Iran 2001 2003 - Sep 22 0:00 0 S
Rule Iran 2004 only - Mar 21 0:00 1:00 D
Rule Iran 2004 only - Sep 21 0:00 0 S
-Rule Iran 2005 2007 - Mar 22 0:00 1:00 D
-Rule Iran 2005 2007 - Sep 22 0:00 0 S
-Rule Iran 2008 only - Mar 21 0:00 1:00 D
-Rule Iran 2008 only - Sep 21 0:00 0 S
-Rule Iran 2009 2011 - Mar 22 0:00 1:00 D
-Rule Iran 2009 2011 - Sep 22 0:00 0 S
-Rule Iran 2012 only - Mar 21 0:00 1:00 D
-Rule Iran 2012 only - Sep 21 0:00 0 S
-Rule Iran 2013 2015 - Mar 22 0:00 1:00 D
-Rule Iran 2013 2015 - Sep 22 0:00 0 S
-Rule Iran 2016 only - Mar 21 0:00 1:00 D
-Rule Iran 2016 only - Sep 21 0:00 0 S
-Rule Iran 2017 2019 - Mar 22 0:00 1:00 D
-Rule Iran 2017 2019 - Sep 22 0:00 0 S
-Rule Iran 2020 only - Mar 21 0:00 1:00 D
-Rule Iran 2020 only - Sep 21 0:00 0 S
-Rule Iran 2021 2023 - Mar 22 0:00 1:00 D
-Rule Iran 2021 2023 - Sep 22 0:00 0 S
-Rule Iran 2024 only - Mar 21 0:00 1:00 D
-Rule Iran 2024 only - Sep 21 0:00 0 S
-Rule Iran 2025 2027 - Mar 22 0:00 1:00 D
-Rule Iran 2025 2027 - Sep 22 0:00 0 S
-Rule Iran 2028 2029 - Mar 21 0:00 1:00 D
-Rule Iran 2028 2029 - Sep 21 0:00 0 S
-Rule Iran 2030 2031 - Mar 22 0:00 1:00 D
-Rule Iran 2030 2031 - Sep 22 0:00 0 S
-Rule Iran 2032 2033 - Mar 21 0:00 1:00 D
-Rule Iran 2032 2033 - Sep 21 0:00 0 S
-Rule Iran 2034 2035 - Mar 22 0:00 1:00 D
-Rule Iran 2034 2035 - Sep 22 0:00 0 S
-Rule Iran 2036 2037 - Mar 21 0:00 1:00 D
-Rule Iran 2036 2037 - Sep 21 0:00 0 S
+Rule Iran 2005 only - Mar 22 0:00 1:00 D
+Rule Iran 2005 only - Sep 22 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
@@ -601,7 +583,8 @@ 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.
-# Shanks says Iraq did not observe DST 1992/1997 or 1999 on; ignore this.
+# Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this.
+#
Rule Iraq 1991 max - Apr 1 3:00s 1:00 D
Rule Iraq 1991 max - Oct 1 3:00s 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -635,7 +618,7 @@ Zone Asia/Baghdad 2:57:40 - LMT 1890
# high on my favorite-country list (and not only because my wife's
# family is from India).
-# From Shanks:
+# From Shanks & Pottenger:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Zion 1940 only - Jun 1 0:00 1:00 D
Rule Zion 1942 1944 - Nov 1 0:00 0 S
@@ -874,14 +857,15 @@ Zone Asia/Jerusalem 2:20:56 - LMT 1880
# of the Japanese wanted to scrap daylight-saving time, as opposed to 30% who
# wanted to keep it.)
-# Shanks writes that daylight saving in Japan during those years was as follows:
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger write that DST in Japan during those years was as follows:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Japan 1948 only - May Sun>=1 2:00 1:00 D
Rule Japan 1948 1951 - Sep Sat>=8 2:00 0 S
Rule Japan 1949 only - Apr Sun>=1 2:00 1:00 D
Rule Japan 1950 1951 - May Sun>=1 2:00 1:00 D
# but the only locations using it (for birth certificates, presumably, since
-# Shanks's audience is astrologers) were US military bases. For now, assume
+# their audience is astrologers) were US military bases. For now, assume
# that for most purposes daylight-saving time was observed; otherwise, what
# would have been the point of the 1951 poll?
@@ -906,8 +890,9 @@ 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 claims 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.
+# 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.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
@@ -934,6 +919,10 @@ Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
# From Paul Eggert (2005-11-22):
# Starting 2003 transitions are from Steffen Thorsen's web site timeanddate.com.
#
+# From Steffen Thorsen (2005-11-23):
+# For Jordan I have received multiple independent user reports every year
+# about DST end dates, as the end-rule is different every year.
+#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Jordan 1973 only - Jun 6 0:00 1:00 S
Rule Jordan 1973 1975 - Oct 1 0:00 0 -
@@ -975,11 +964,11 @@ Zone Asia/Amman 2:23:44 - LMT 1931
# Guess that Aqtau and Aqtobe diverged in 1995, since that's the first time
# IATA SSIM mentions a third time zone in Kazakhstan.
-# From Paul Eggert (2001-10-18):
+# From Paul Eggert (2006-03-22):
# German Iofis, ELSI, Almaty (2001-10-09) reports that Kazakhstan uses
# RussiaAsia rules, instead of switching at 00:00 as the IATA has it.
-# Go with Shanks, who has them always using RussiaAsia rules.
-# Also go with the following claims of Shanks:
+# Go with Shanks & Pottenger, who have them always using RussiaAsia rules.
+# Also go with the following claims of Shanks & Pottenger:
#
# - Kazakhstan did not observe DST in 1991.
# - Qyzylorda switched from +5:00 to +6:00 on 1992-01-19 02:00.
@@ -1059,7 +1048,7 @@ Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk
5:00 - ORAT
# Kyrgyzstan (Kirgizstan)
-# Transitions through 1991 are from Shanks.
+# Transitions through 1991 are from Shanks & Pottenger.
# From Paul Eggert (2005-08-15):
# According to an article dated today in the Kyrgyzstan Development Gateway
@@ -1092,12 +1081,12 @@ Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2
# Daylight Savings Time was not observed until 1987. He did not know
# at what time of day DST starts or ends.
-# From Shanks:
+# From Shanks & Pottenger:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule ROK 1960 only - May 15 0:00 1:00 D
Rule ROK 1960 only - Sep 13 0:00 0 S
-Rule ROK 1987 1988 - May Sun<=14 0:00 1:00 D
-Rule ROK 1987 1988 - Oct Sun<=14 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
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Seoul 8:27:52 - LMT 1890
@@ -1180,8 +1169,8 @@ 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 (2003-11-01):
-# The data here are mostly from Shanks, but the 1942, 1945 and 1982
+# 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.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Kuching 7:21:20 - LMT 1926 Mar
@@ -1199,8 +1188,8 @@ Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
# Mongolia
-# Shanks says that Mongolia has three time zones, but usno1995 and the CIA map
-# Standard Time Zones of the World (1997-01)
+# 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.
# From Oscar van Vlijmen (1999-12-11):
@@ -1270,11 +1259,19 @@ Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Mongol 1983 1984 - Apr 1 0:00 1:00 S
Rule Mongol 1983 only - Oct 1 0:00 0 -
-# IATA SSIM says 1990s switches occurred at 00:00, but Shanks (1995) lists
-# them at 02:00s, and McDow says the 2001 switches also occurred at 02:00.
-# Also, IATA SSIM (1996-09) says 1996-10-25. Go with Shanks through 1998.
-Rule Mongol 1985 1998 - Mar lastSun 2:00s 1:00 S
-Rule Mongol 1984 1998 - Sep lastSun 2:00s 0 -
+# Shanks & Pottenger and IATA SSIM say 1990s switches occurred at 00:00,
+# but McDow says the 2001 switches occurred at 02:00. Also, IATA SSIM
+# (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
+# 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
+# in the latest edition; so ignore it for now.
+
+Rule Mongol 1985 1998 - Mar lastSun 0:00 1:00 S
+Rule Mongol 1984 1998 - Sep lastSun 0:00 0 -
# IATA SSIM (1999-09) says Mongolia no longer observes DST.
Rule Mongol 2001 only - Apr lastSat 2:00 1:00 S
Rule Mongol 2001 max - Sep lastSat 2:00 0 -
@@ -1400,8 +1397,8 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# I guess more info may be available from the PA's web page (if/when they
# have one).
-# From Paul Eggert (1998-02-25):
-# Shanks writes that Gaza did not observe DST until 1957, but we'll go
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger write that Gaza did not observe DST until 1957, but go
# with Shapir and assume that it observed DST from 1940 through 1947,
# and that it used Jordanian rules starting in 1996.
# We don't yet need a separate entry for the West Bank, since
@@ -1433,6 +1430,12 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# From Paul Eggert (2005-11-22):
# Starting 2004 transitions are from Steffen Thorsen's web site timeanddate.com.
+# From Steffen Thorsen (2005-11-23):
+# 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.
+
# The rules for Egypt are stolen from the `africa' file.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule EgyptAsia 1957 only - May 10 0:00 1:00 S
@@ -1445,7 +1448,7 @@ Rule EgyptAsia 1966 only - Oct 1 3:00 0 -
Rule Palestine 1999 max - Apr Fri>=15 0:00 1:00 S
Rule Palestine 1999 2003 - Oct Fri>=15 0:00 0 -
Rule Palestine 2004 only - Oct 1 1:00 0 -
-Rule Palestine 2005 max - Oct 4 1:00 0 -
+Rule Palestine 2005 max - Oct 4 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
@@ -1463,7 +1466,21 @@ Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
# 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 this data is from Shanks.
+# The rest of the data 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):
+# ... 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]
+
# 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 -
@@ -1523,6 +1540,49 @@ Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
# 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
+# <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>
+# [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.
+# From Paul Eggert (2006-04-18):
+# People who live in regions under Tamil control can use TZ='Asia/Calcutta',
+# as that zone has agreed with the Tamil areas since our cutoff date of 1970.
+
+# From K Sethu (2006-04-25):
+# I think the abbreviation LKT originated from the world of computers at
+# the time of or subsequent to the time zone changes by SL Government
+# 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
+# mentioning it as simply changing Sri Lanka Standard Time or Sri Lanka
+# Time and no mention was made about the abbreviation.
+#
+# If we look at Sri Lanka Department of Government's "Official News
+# Website of Sri Lanka" ... http://www.news.lk/ we can see that they
+# use SLT as abbreviation in time stamp at the beginning of each news
+# 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
+# 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).
+#
+# But if indeed our government has adopted SLT as standard abbreviation
+# (that we have not known so far) then it is better that it be used for
+# all computers.
+
+# From Paul Eggert (2006-04-25):
+# One possibility is that we wait for a bit for the dust to settle down
+# and then see what people actually say in practice.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Colombo 5:19:24 - LMT 1880
5:19:32 - MMT 1906 # Moratuwa Mean Time
@@ -1531,7 +1591,8 @@ Zone Asia/Colombo 5:19:24 - LMT 1880
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
+ 6:00 - LKT 2006 Apr 15 0:30
+ 5:30 - IST
# Syria
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -1566,7 +1627,7 @@ Rule Syria 1993 only - Sep 25 0:00 0 -
# IATA SSIM (1998-02) says 1998-04-02;
# (1998-09) says 1999-03-29 and 1999-09-29; (1999-02) says 1999-04-02,
# 2000-04-02, and 2001-04-02; (1999-09) says 2000-03-31 and 2001-03-31;
-# ignore all these claims and go with Shanks.
+# ignore all these claims and go with Shanks & Pottenger.
Rule Syria 1994 1996 - Apr 1 0:00 1:00 S
Rule Syria 1994 max - Oct 1 0:00 0 -
Rule Syria 1997 1998 - Mar lastMon 0:00 1:00 S
@@ -1576,7 +1637,7 @@ Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
2:00 Syria EE%sT
# Tajikistan
-# From Shanks.
+# From Shanks & Pottenger.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
5:00 - DUST 1930 Jun 21 # Dushanbe Time
@@ -1591,13 +1652,13 @@ Zone Asia/Bangkok 6:42:04 - LMT 1880
7:00 - ICT
# Turkmenistan
-# From Shanks.
+# From Shanks & Pottenger.
# 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
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
@@ -1611,24 +1672,24 @@ Zone Asia/Samarkand 4:27:12 - 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
- 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00 # Tashkent Time
- 5:00 RussiaAsia TAS%sT 1991 Sep 1 # independence
+ 6:00 - TAST 1982 Apr 1 # Tashkent Time
+ 5:00 RussiaAsia SAM%sT 1991 Sep 1 # independence
5:00 RussiaAsia UZ%sT 1992
- 5:00 RussiaAsia UZ%sT 1993
5:00 - UZT
Zone Asia/Tashkent 4:37:12 - LMT 1924 May 2
5:00 - TAST 1930 Jun 21 # Tashkent Time
- 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00s
+ 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 RussiaAsia UZ%sT 1993
5:00 - UZT
# Vietnam
+
# From Paul Eggert (1993-11-18):
# Saigon's official name is Thanh-Pho Ho Chi Minh, but it's too long.
# We'll stick with the traditional name for now.
-# From Shanks:
+
+# From Shanks & Pottenger:
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Saigon 7:06:40 - LMT 1906 Jun 9
7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
diff --git a/elsie.nci.nih.gov/src/australasia b/elsie.nci.nih.gov/src/australasia
index 6cf9761..2be8338 100644
--- a/elsie.nci.nih.gov/src/australasia
+++ b/elsie.nci.nih.gov/src/australasia
@@ -1,4 +1,4 @@
-# @(#)australasia 7.78
+# @(#)australasia 8.2
# <pre>
# This file also includes Pacific islands.
@@ -210,7 +210,7 @@ Zone Indian/Christmas 7:02:52 - LMT 1895 Feb
7:00 - CXT # Christmas Island Time
# Cook Is
-# From Shanks:
+# 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 -
@@ -308,7 +308,7 @@ Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
Rule NC 1977 1978 - Dec Sun>=1 0:00 1:00 S
Rule NC 1978 1979 - Feb 27 0:00 0 -
Rule NC 1996 only - Dec 1 2:00s 1:00 S
-# Shanks says the following was at 2:00; go with IATA.
+# 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
@@ -507,10 +507,10 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert (1999-10-29):
+# From Paul Eggert (2006-03-22):
# A good source for time zone historical data outside the U.S. is
-# Thomas G. Shanks, The International Atlas (5th edition),
-# San Diego: ACS Publications, Inc. (1999).
+# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
+# San Diego: ACS Publications, Inc. (2003).
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
@@ -518,8 +518,8 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# published semiannually. Law sent in several helpful summaries
# of the IATA's data after 1990.
#
-# Except where otherwise noted, Shanks is the source for entries through 1990,
-# and IATA SSIM is the source for entries after 1990.
+# Except where otherwise noted, Shanks & Pottenger is the source for
+# entries through 1990, and IATA SSIM is the source for entries afterwards.
#
# Another source occasionally used is Edward W. Whitman, World Time Differences,
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
@@ -669,7 +669,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# understood in Australia.
# From Paul Eggert (1995-12-19):
-# Shanks reports 2:00 for all autumn changes in Australia and New Zealand.
+# 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
@@ -842,14 +842,14 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# current DST ending dates, no worries.
#
# Rule Oz 1971 1985 - Oct lastSun 2:00 1:00 -
-# Rule Oz 1986 max - Oct Sun<=24 2:00 1:00 -
+# Rule Oz 1986 max - Oct Sun>=18 2:00 1:00 -
# Rule Oz 1972 only - Feb 27 3:00 0 -
# Rule Oz 1973 1986 - Mar Sun>=1 3:00 0 -
-# Rule Oz 1987 max - Mar Sun<=21 3:00 0 -
+# Rule Oz 1987 max - Mar Sun>=15 3:00 0 -
# Zone Australia/Tasmania 10:00 Oz EST
# Zone Australia/South 9:30 Oz CST
# Zone Australia/Victoria 10:00 Oz EST 1985 Oct lastSun 2:00
-# 10:00 1:00 EST 1986 Mar Sun<=21 3:00
+# 10:00 1:00 EST 1986 Mar Sun>=15 3:00
# 10:00 Oz EST
# From Robert Elz (1991-03-06):
@@ -875,7 +875,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# ...
# Rule AS 1971 max - Oct lastSun 2:00 1:00 D
# Rule AS 1972 1985 - Mar Sun>=1 3:00 0 C
-# Rule AS 1986 1990 - Mar Sun<=21 3:00 0 C
+# Rule AS 1986 1990 - Mar Sun>=15 3:00 0 C
# Rule AS 1991 max - Mar Sun>=1 3:00 0 C
# From Bradley White (1992-03-11):
@@ -1068,9 +1068,9 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# shown on clocks on LHI. I guess this means that for 30 minutes at the start
# of DST, LHI is actually 1 hour ahead of the rest of NSW.
-# From Paul Eggert (2001-02-09):
-# For Lord Howe dates we use Shanks through 1989, and Lonergan thereafter.
-# For times we use Lonergan.
+# From Paul Eggert (2006-03-22):
+# For Lord Howe dates we use Shanks & Pottenger through 1989, and
+# Lonergan thereafter. For times we use Lonergan.
###############################################################################
@@ -1101,16 +1101,16 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# rather than the October 1 value.
# From Paul Eggert (1995-12-19);
-# Shanks reports 2:00 for all autumn changes in Australia and New Zealand.
+# Shank & Pottenger report 2:00 for all autumn changes in Australia and NZ.
# Robert Uzgalis writes that the New Zealand Daylight
# Savings Time Order in Council dated 1990-06-18 specifies 2:00 standard
# time on both the first Sunday in October and the third Sunday in March.
# As with Australia, we'll assume the tradition is 2:00s, not 2:00.
#
-# From Paul Eggert (2003-05-26):
+# From Paul Eggert (2006-03-22):
# The Department of Internal Affairs (DIA) maintains a brief history,
# as does Carol Squires; see tz-link.htm for the full references.
-# Use these sources in preference to Shanks.
+# Use these sources in preference to Shanks & Pottenger.
#
# For Chatham, IATA SSIM (1991/1999) gives the NZ rules but with
# transitions at 2:45 local standard time; this confirms that Chatham
@@ -1185,8 +1185,8 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# ``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 writes that Truk switched from UTC+10 to UTC+11 on 1978-10-01;
-# ignore this for now.
+# 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
@@ -1279,8 +1279,8 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# on the World Day of Prayer, you would be the first people on Earth
# to say your prayers in the morning."
-# From Paul Eggert (1999-08-12):
-# Shanks says the transition was on 1968-10-01; go with Mundell.
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger say the transition was on 1968-10-01; go with Mundell.
# From Eric Ulevik (1999-05-03):
# Tonga's director of tourism, who is also secretary of the National Millenium
diff --git a/elsie.nci.nih.gov/src/backward b/elsie.nci.nih.gov/src/backward
index 4ddfe41..66fbf30 100644
--- a/elsie.nci.nih.gov/src/backward
+++ b/elsie.nci.nih.gov/src/backward
@@ -1,4 +1,4 @@
-# @(#)backward 7.30
+# @(#)backward 8.1
# This file provides links between current names for time zones
# and their old names. Many names changed in late 1993.
diff --git a/elsie.nci.nih.gov/src/checktab.awk b/elsie.nci.nih.gov/src/checktab.awk
index 6d53214..80ad7d5 100644
--- a/elsie.nci.nih.gov/src/checktab.awk
+++ b/elsie.nci.nih.gov/src/checktab.awk
@@ -1,6 +1,6 @@
# Check tz tables for consistency.
-# @(#)checktab.awk 1.7
+# @(#)checktab.awk 8.1
# Contributed by Paul Eggert.
diff --git a/elsie.nci.nih.gov/src/date.1 b/elsie.nci.nih.gov/src/date.1
index 78e3500..3c75ba4 100644
--- a/elsie.nci.nih.gov/src/date.1
+++ b/elsie.nci.nih.gov/src/date.1
@@ -172,4 +172,4 @@ If
is absent,
UTC leap seconds are loaded from
.BR /usr/local/etc/zoneinfo/posixrules .
-.\" @(#)date.1 7.4
+.\" @(#)date.1 8.1
diff --git a/elsie.nci.nih.gov/src/date.c b/elsie.nci.nih.gov/src/date.c
index cc237c8..6e6a682 100644
--- a/elsie.nci.nih.gov/src/date.c
+++ b/elsie.nci.nih.gov/src/date.c
@@ -1,6 +1,6 @@
#ifndef lint
#ifndef NOID
-static char elsieid[] = "@(#)date.c 7.42";
+static char elsieid[] = "@(#)date.c 8.2";
/*
** Modified from the UCB version with the SCCS ID appearing below.
*/
@@ -254,7 +254,7 @@ _("date: error: multiple values in command line\n"));
struct timeval tv;
tv.tv_sec = (int) adjust;
- tv.tv_usec = (int) ((adjust - tv.tv_sec) * 1000000);
+ tv.tv_usec = (int) ((adjust - tv.tv_sec) * 1000000L);
if (adjtime(&tv, (struct timeval *) NULL) != 0)
oops("adjtime");
#endif /* HAVE_ADJTIME */
@@ -352,9 +352,7 @@ dogmt()
/*ARGSUSED*/
static void
-reset(newt, nflag)
-const time_t newt;
-const int nflag;
+reset(const time_t newt, const int nflag)
{
register int fid;
time_t oldt;
@@ -619,10 +617,7 @@ register const struct tm * const btmp;
#define ATOI2(ar) (ar[0] - '0') * 10 + (ar[1] - '0'); ar += 2;
static time_t
-convert(value, dousg, t)
-register const char * const value;
-const int dousg;
-const time_t t;
+convert(register const char * const value, const int dousg, const time_t t)
{
register const char * cp;
register const char * dotp;
@@ -726,11 +721,10 @@ const time_t t;
*/
static void
-checkfinal(value, didusg, t, oldnow)
-const char * const value;
-const int didusg;
-const time_t t;
-const time_t oldnow;
+checkfinal(const char * const value,
+ const int didusg,
+ const time_t t,
+ const time_t oldnow)
{
time_t othert;
struct tm tm;
@@ -789,11 +783,8 @@ const time_t oldnow;
}
static void
-iffy(thist, thatt, value, reason)
-const time_t thist;
-const time_t thatt;
-const char * const value;
-const char * const reason;
+iffy(const time_t thist, const time_t thatt,
+ const char * const value, const char * const reason)
{
struct tm tm;
diff --git a/elsie.nci.nih.gov/src/difftime.c b/elsie.nci.nih.gov/src/difftime.c
index c5efbca..da77977 100644
--- a/elsie.nci.nih.gov/src/difftime.c
+++ b/elsie.nci.nih.gov/src/difftime.c
@@ -5,7 +5,7 @@
#ifndef lint
#ifndef NOID
-static char elsieid[] = "@(#)difftime.c 7.19";
+static char elsieid[] = "@(#)difftime.c 8.1";
#endif /* !defined NOID */
#endif /* !defined lint */
diff --git a/elsie.nci.nih.gov/src/etcetera b/elsie.nci.nih.gov/src/etcetera
index 431206e..cddbe8a 100644
--- a/elsie.nci.nih.gov/src/etcetera
+++ b/elsie.nci.nih.gov/src/etcetera
@@ -1,4 +1,4 @@
-# @(#)etcetera 7.12
+# @(#)etcetera 8.1
# These entries are mostly present for historical reasons, so that
# people in areas not otherwise covered by the tz files could "zic -l"
diff --git a/elsie.nci.nih.gov/src/europe b/elsie.nci.nih.gov/src/europe
index 8782860..3a0ae10 100644
--- a/elsie.nci.nih.gov/src/europe
+++ b/elsie.nci.nih.gov/src/europe
@@ -1,14 +1,14 @@
-# @(#)europe 7.96
+# @(#)europe 8.3
# <pre>
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert (1999-10-29):
+# From Paul Eggert (2006-03-22):
# A good source for time zone historical data outside the U.S. is
-# Thomas G. Shanks, The International Atlas (5th edition),
-# San Diego: ACS Publications, Inc. (1999).
+# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
+# San Diego: ACS Publications, Inc. (2003).
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
@@ -16,8 +16,8 @@
# published semiannually. Law sent in several helpful summaries
# of the IATA's data after 1990.
#
-# Except where otherwise noted, Shanks is the source for entries through 1991,
-# and IATA SSIM is the source for entries afterwards.
+# Except where otherwise noted, Shanks & Pottenger is the source for
+# entries through 1991, and IATA SSIM is the source for entries afterwards.
#
# Other sources occasionally used include:
#
@@ -221,11 +221,12 @@
# (Lords Hansard 11 June 1997 columns 964 to 976)
# </a>.
-# From Paul Eggert (2001-07-18):
+# From Paul Eggert (2006-03-22):
#
-# For lack of other data, we'll follow Shanks for Eire in 1940-1948.
+# For lack of other data, follow Shanks & Pottenger for Eire in 1940-1948.
#
-# Given Ilieve and Myers's data, the following claims by Shanks are incorrect:
+# Given Ilieve and Myers's data, the following claims by Shanks & Pottenger
+# are incorrect:
# * Wales did not switch from GMT to daylight saving time until
# 1921 Apr 3, when they began to conform with the rest of Great Britain.
# Actually, Wales was identical after 1880.
@@ -237,18 +238,19 @@
# Actually, that date saw the usual switch to summer time.
# Standard time was not changed until 1968-10-27 (the clocks didn't change).
#
-# Here is another incorrect claim by Shanks:
+# Here is another incorrect claim by Shanks & Pottenger:
# * Jersey, Guernsey, and the Isle of Man did not switch from GMT
# to daylight saving time until 1921 Apr 3, when they began to
# conform with Great Britain.
# S.R.&O. 1916, No. 382 and HO 45/10811/312364 (quoted above) say otherwise.
#
-# The following claim by Shanks is possible though doubtful;
+# The following claim by Shanks & Pottenger is possible though doubtful;
# we'll ignore it for now.
# * Dublin's 1971-10-31 switch was at 02:00, even though London's was 03:00.
#
#
-# Whitman says Dublin Mean Time was -0:25:21, which is more precise than Shanks.
+# Whitman says Dublin Mean Time was -0:25:21, which is more precise than
+# Shanks & Pottenger.
# Perhaps this was Dunsink Observatory Time, as Dunsink Observatory
# (8 km NW of Dublin's center) seemingly was to Dublin as Greenwich was
# to London. For example:
@@ -418,7 +420,7 @@ Rule GB-Eire 1990 1995 - Oct Sun>=22 1:00u 0 GMT
# See EU for rules starting in 1996.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/London -0:01:15 - LMT 1847 Dec 1
+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
0:00 GB-Eire %s 1996
@@ -476,7 +478,7 @@ Rule C-Eur 1942 only - Nov 2 2:00s 0 -
Rule C-Eur 1943 only - Mar 29 2:00s 1:00 S
Rule C-Eur 1943 only - Oct 4 2:00s 0 -
Rule C-Eur 1944 only - Apr 3 2:00s 1:00 S
-# Whitman gives 1944 Oct 7; go with Shanks.
+# Whitman gives 1944 Oct 7; go with Shanks & Pottenger.
Rule C-Eur 1944 only - Oct 2 2:00s 0 -
Rule C-Eur 1977 1980 - Apr Sun>=1 2:00s 1:00 S
Rule C-Eur 1977 only - Sep lastSun 2:00s 0 -
@@ -596,12 +598,12 @@ Zone Europe/Andorra 0:06:04 - LMT 1901
# Austria
-# From Paul Eggert (2003-02-28): Shanks gives 1918-06-16 and
+# From Paul Eggert (2006-03-22): Shanks & Pottenger give 1918-06-16 and
# 1945-11-18, but the Austrian Federal Office of Metrology and
# Surveying (BEV) gives 1918-09-16 and for Vienna gives the "alleged"
# date of 1945-04-12 with no time. For the 1980-04-06 transition
-# Shanks gives 02:00, the BEV 00:00. Go with the BEV, and guess 02:00
-# for 1945-04-12.
+# Shanks & Pottenger give 02:00, the BEV 00:00. Go with the BEV,
+# and guess 02:00 for 1945-04-12.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Austria 1920 only - Apr 5 2:00s 1:00 S
@@ -713,7 +715,7 @@ Zone Europe/Brussels 0:17:30 - LMT 1880
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Bulg 1979 only - Mar 31 23:00 1:00 S
Rule Bulg 1979 only - Oct 1 1:00 0 -
-Rule Bulg 1980 1982 - Apr Sat<=7 23:00 1:00 S
+Rule Bulg 1980 1982 - Apr Sat>=1 23:00 1:00 S
Rule Bulg 1980 only - Sep 29 1:00 0 -
Rule Bulg 1981 only - Sep 27 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -813,10 +815,10 @@ Zone Atlantic/Faeroe -0:27:04 - LMT 1908 Jan 11 # Torshavn
# East Greenland and Franz Josef Land, but we don't know their time zones.
# My source for this is Wilhelm Dege's book mentioned under Svalbard.
#
-# From Paul Eggert (1996-11-22):
+# 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 says Scoresbysund and Godthab
+# rules at least through 1984. Shanks & Pottenger say Scoresbysund and Godthab
# 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.
@@ -871,17 +873,21 @@ Zone Atlantic/Faeroe -0:27:04 - LMT 1908 Jan 11 # Torshavn
# I heard back from someone stationed at Thule; the time change took place
# there at 2:00 AM.
-# From Paul Eggert (2001-11-19):
-# The 1997 CIA map shows Danmarkshavn on GMT; the 1995 map as like Godthab.
+# 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.
# startkart.no says Thule does not observe DST, but this is clearly an error,
-# so go with Shanks for all Thule transitions.
+# so go with Shanks & Pottenger for Thule transitions until this year.
+# For 2007 on assume Thule will stay in sync with US DST rules.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Thule 1991 1992 - Mar lastSun 2:00 1:00 D
Rule Thule 1991 1992 - Sep lastSun 2:00 0 S
-Rule Thule 1993 max - Apr Sun>=1 2:00 1:00 D
-Rule Thule 1993 max - Oct lastSun 2:00 0 S
+Rule Thule 1993 2006 - Apr Sun>=1 2:00 1:00 D
+Rule Thule 1993 2006 - Oct lastSun 2:00 0 S
+Rule Thule 2007 max - Mar Sun>=8 2:00 1:00 D
+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
@@ -963,13 +969,13 @@ Zone Europe/Tallinn 1:39:00 - LMT 1880
# Finland
#
-# From Hannu Strang (25 Sep 1994 06:03:37 UTC):
+# From Hannu Strang (1994-09-25 06:03:37 UTC):
# Well, here in Helsinki we're just changing from summer time to regular one,
# and it's supposed to change at 4am...
#
-# From Paul Eggert (25 Sep 1994):
-# Shanks says Finland has switched at 02:00 standard time since 1981.
-# Go with Strang instead.
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger say Finland has switched at 02:00 standard time
+# since 1981. Go with Strang instead.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Finland 1942 only - Apr 3 0:00 1:00 S
@@ -999,7 +1005,7 @@ Link Europe/Helsinki Europe/Mariehamn
#
-# Shanks seems to use `24:00' ambiguously; we resolve it with Whitman.
+# Shank & Pottenger seem to use `24:00' ambiguously; resolve it with Whitman.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule France 1916 only - Jun 14 23:00s 1:00 S
Rule France 1916 1919 - Oct Sun>=1 23:00s 0 -
@@ -1013,7 +1019,7 @@ Rule France 1921 only - Oct 25 23:00s 0 -
Rule France 1922 only - Mar 25 23:00s 1:00 S
# DSH writes that a law of 1923-05-24 specified 3rd Sat in Apr at 23:00 to 1st
# Sat in Oct at 24:00; and that in 1930, because of Easter, the transitions
-# were Apr 12 and Oct 5. Go with Shanks.
+# were Apr 12 and Oct 5. Go with Shanks & Pottenger.
Rule France 1922 1938 - Oct Sat>=1 23:00s 0 -
Rule France 1923 only - May 26 23:00s 1:00 S
Rule France 1924 only - Mar 29 23:00s 1:00 S
@@ -1034,8 +1040,8 @@ Rule France 1938 only - Mar 26 23:00s 1:00 S
Rule France 1939 only - Apr 15 23:00s 1:00 S
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 writes
-# that they were used in Monaco and in many French locations.
+# 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-Decartes,
@@ -1043,7 +1049,7 @@ Rule France 1940 only - Feb 25 2:00 1:00 S
# Paray-le-Monial, Montceau-les-Mines, Chalons-sur-Saone, Arbois,
# Dole, Morez, St-Claude, and Collognes (Haute-Savioe).
Rule France 1941 only - May 5 0:00 2:00 M # Midsummer
-# Shanks says this transition occurred at Oct 6 1:00,
+# 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
# as saying 5/10/41 22hUT.
@@ -1056,21 +1062,21 @@ Rule France 1944 only - Apr 3 2:00 2:00 M
Rule France 1944 only - Oct 8 1:00 1:00 S
Rule France 1945 only - Apr 2 2:00 2:00 M
Rule France 1945 only - Sep 16 3:00 0 -
-# Shanks gives Mar 28 2:00 and Sep 26 3:00;
+# Shanks & Pottenger give Mar 28 2:00 and Sep 26 3:00;
# go with Excoffier's 28/3/76 0hUT and 25/9/76 23hUT.
Rule France 1976 only - Mar 28 1:00 1:00 S
Rule France 1976 only - Sep 26 1:00 0 -
-# Shanks gives 0:09 for Paris Mean Time, and Whitman gives 0:09:05,
+# Shanks & Pottenger give 0:09:20 for Paris Mean Time, and Whitman 0:09:05,
# but Howse quotes the actual French legislation as saying 0:09:21.
# Go with Howse. Howse writes that the time in France was officially based
# 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
-# Shanks gives 1940 Jun 14 0:00; go with Excoffier and Le Corre.
+# 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;
-# go with Shanks.
+# go with Shanks & Pottenger.
1:00 C-Eur CE%sT 1944 Aug 25
0:00 France WE%sT 1945 Sep 16 3:00
1:00 France CE%sT 1977
@@ -1121,23 +1127,23 @@ Zone Europe/Berlin 0:53:28 - LMT 1893 Apr
# Gibraltar
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2
+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
# Greece
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# Whitman gives 1932 Jul 5 - Nov 1; go with Shanks.
+# Whitman gives 1932 Jul 5 - Nov 1; go with Shanks & Pottenger.
Rule Greece 1932 only - Jul 7 0:00 1:00 S
Rule Greece 1932 only - Sep 1 0:00 0 -
-# Whitman gives 1941 Apr 25 - ?; go with Shanks.
+# Whitman gives 1941 Apr 25 - ?; go with Shanks & Pottenger.
Rule Greece 1941 only - Apr 7 0:00 1:00 S
-# Whitman gives 1942 Feb 2 - ?; go with Shanks.
+# Whitman gives 1942 Feb 2 - ?; go with Shanks & Pottenger.
Rule Greece 1942 only - Nov 2 3:00 0 -
Rule Greece 1943 only - Mar 30 0:00 1:00 S
Rule Greece 1943 only - Oct 4 0:00 0 -
-# Whitman gives 1944 Oct 3 - Oct 31; go with Shanks.
+# Whitman gives 1944 Oct 3 - Oct 31; go with Shanks & Pottenger.
Rule Greece 1952 only - Jul 1 0:00 1:00 S
Rule Greece 1952 only - Nov 2 0:00 0 -
Rule Greece 1975 only - Apr 12 0:00s 1:00 S
@@ -1157,7 +1163,7 @@ Zone Europe/Athens 1:34:52 - LMT 1895 Sep 14
2:00 Greece EE%sT 1941 Apr 30
1:00 Greece CE%sT 1944 Apr 4
2:00 Greece EE%sT 1981
- # Shanks says they switched to C-Eur in 1981;
+ # Shanks & Pottenger say it switched to C-Eur in 1981;
# go with EU instead, since Greece joined it on Jan 1.
2:00 EU EE%sT
@@ -1220,10 +1226,10 @@ Zone Europe/Budapest 1:16:20 - LMT 1890 Oct
# might be a reference to the Julian calendar as opposed to Gregorian, or it
# might mean something else (???).
#
-# From Paul Eggert (1999-10-29):
-# The Iceland Almanak, Shanks and Whitman disagree on many points.
-# We go with the Almanak, except for one claim from Shanks, namely that
-# Reykavik was 21W57 from 1837 to 1908, local mean time before that.
+# From Paul Eggert (2006-03-22):
+# The Iceland Almanak, Shanks & Pottenger, and Whitman disagree on many points.
+# We go with the Almanak, except for one claim from Shanks & Pottenger, namely
+# that Reykavik was 21W57 from 1837 to 1908, local mean time before that.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Iceland 1917 1918 - Feb 19 23:00 1:00 S
@@ -1261,15 +1267,16 @@ Zone Atlantic/Reykjavik -1:27:24 - LMT 1837
# But these events all occurred before the 1970 cutoff,
# so record only the time in Rome.
#
-# From Paul Eggert (1996-05-06):
-# For Italian DST we have three sources: Shanks, Whitman, and F. Pollastri
+# 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 (1996-03-14)
+# Day-light Saving Time in Italy (2006-02-03)
# </a>
# (`FP' below), taken from an Italian National Electrotechnical Institute
# publication. When the three sources disagree, guess who's right, as follows:
#
-# year FP Shanks (S) Whitman (W) Go with:
+# year FP Shanks&P. (S) Whitman (W) Go with:
# 1916 06-03 06-03 24:00 06-03 00:00 FP & W
# 09-30 09-30 24:00 09-30 01:00 FP; guess 24:00s
# 1917 04-01 03-31 24:00 03-31 00:00 FP & S
@@ -1325,7 +1332,7 @@ 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 # Rome Mean Time
+ 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
@@ -1467,7 +1474,8 @@ Zone Europe/Vilnius 1:41:16 - LMT 1880
2:00 EU EE%sT
# Luxembourg
-# Whitman disagrees with most of these dates in minor ways; go with Shanks.
+# Whitman disagrees with most of these dates in minor ways;
+# go with Shanks & Pottenger.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Lux 1916 only - May 14 23:00 1:00 S
Rule Lux 1916 only - Oct 1 1:00 0 -
@@ -1514,7 +1522,7 @@ 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 # Valletta
+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
@@ -1523,9 +1531,9 @@ Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 # Valletta
# Moldova
-# From Paul Eggert (2001-02-11):
-# A previous version of this database followed Shanks, who writes that
-# Tiraspol switched to Moscow time on 1992-01-19 at 02:00.
+# From Paul Eggert (2006-03-22):
+# A previous version of this database followed Shanks & Pottenger, who write
+# that Tiraspol switched to Moscow time on 1992-01-19 at 02:00.
# However, this is most likely an error, as Moldova declared independence
# on 1991-08-27 (the 1992-01-19 date is that of a Russian decree).
# In early 1992 there was large-scale interethnic violence in the area
@@ -1550,7 +1558,8 @@ Zone Europe/Chisinau 1:55:20 - LMT 1880
2:00 EU EE%sT
# Monaco
-# Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21.
+# 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 Europe/Monaco 0:29:32 - LMT 1891 Mar 15
0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
@@ -1633,7 +1642,8 @@ Zone Europe/Amsterdam 0:19:32 - LMT 1835
1:00 EU CE%sT
# Norway
-# http://met.no/met/met_lex/q_u/sommertid.html (2004-01) agrees with Shanks.
+# http://met.no/met/met_lex/q_u/sommertid.html (2004-01) agrees with Shanks &
+# Pottenger.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Norway 1916 only - May 22 1:00 1:00 S
Rule Norway 1916 only - Sep 30 0:00 0 -
@@ -1704,9 +1714,10 @@ Link Europe/Oslo Atlantic/Jan_Mayen
# 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
-# Whitman gives 1944 Nov 30; go with Shanks.
+Rule Poland 1944 only - Apr 3 2:00s 1:00 S
+# Whitman gives 1944 Nov 30; go with Shanks & Pottenger.
Rule Poland 1944 only - Oct 4 2:00 0 -
-# For 1944-1948 Whitman gives the previous day; go with Shanks.
+# For 1944-1948 Whitman gives the previous day; go with Shanks & Pottenger.
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,
@@ -1762,9 +1773,9 @@ Zone Europe/Warsaw 1:24:00 - LMT 1880
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
# DSH writes that despite Decree 1,469 (1915), the change to the clocks was not
# done every year, depending on what Spain did, because of railroad schedules.
-# Go with Shanks.
+# Go with Shanks & Pottenger.
Rule Port 1916 only - Jun 17 23:00 1:00 S
-# Whitman gives 1916 Oct 31; go with Shanks.
+# Whitman gives 1916 Oct 31; go with Shanks & Pottenger.
Rule Port 1916 only - Nov 1 1:00 0 -
Rule Port 1917 only - Feb 28 23:00s 1:00 S
Rule Port 1917 1921 - Oct 14 23:00s 0 -
@@ -1780,24 +1791,23 @@ Rule Port 1927 only - Apr 9 23:00s 1:00 S
Rule Port 1928 only - Apr 14 23:00s 1:00 S
Rule Port 1929 only - Apr 20 23:00s 1:00 S
Rule Port 1931 only - Apr 18 23:00s 1:00 S
-# Whitman gives 1931 Oct 8; go with Shanks.
+# Whitman gives 1931 Oct 8; go with Shanks & Pottenger.
Rule Port 1931 1932 - Oct Sat>=1 23:00s 0 -
Rule Port 1932 only - Apr 2 23:00s 1:00 S
-# Shanks gives 1934 Apr 4; go with Whitman.
Rule Port 1934 only - Apr 7 23:00s 1:00 S
-# Whitman gives 1934 Oct 5; go with Shanks.
+# Whitman gives 1934 Oct 5; go with Shanks & Pottenger.
Rule Port 1934 1938 - Oct Sat>=1 23:00s 0 -
-# Shanks gives 1935 Apr 30; go with Whitman.
+# Shanks & Pottenger give 1935 Apr 30; go with Whitman.
Rule Port 1935 only - Mar 30 23:00s 1:00 S
Rule Port 1936 only - Apr 18 23:00s 1:00 S
-# Whitman gives 1937 Apr 2; go with Shanks.
+# Whitman gives 1937 Apr 2; go with Shanks & Pottenger.
Rule Port 1937 only - Apr 3 23:00s 1:00 S
Rule Port 1938 only - Mar 26 23:00s 1:00 S
Rule Port 1939 only - Apr 15 23:00s 1:00 S
-# Whitman gives 1939 Oct 7; go with Shanks.
+# Whitman gives 1939 Oct 7; go with Shanks & Pottenger.
Rule Port 1939 only - Nov 18 23:00s 0 -
Rule Port 1940 only - Feb 24 23:00s 1:00 S
-# Shanks gives 1940 Oct 7; go with Whitman.
+# Shanks & Pottenger give 1940 Oct 7; go with Whitman.
Rule Port 1940 1941 - Oct 5 23:00s 0 -
Rule Port 1941 only - Apr 5 23:00s 1:00 S
Rule Port 1942 1945 - Mar Sat>=8 23:00s 1:00 S
@@ -1811,8 +1821,8 @@ Rule Port 1946 only - Apr Sat>=1 23:00s 1:00 S
Rule Port 1946 only - Oct Sat>=1 23:00s 0 -
Rule Port 1947 1949 - Apr Sun>=1 2:00s 1:00 S
Rule Port 1947 1949 - Oct Sun>=1 2:00s 0 -
-# Shanks says DST was observed in 1950; go with Whitman.
-# Whitman gives Oct lastSun for 1952 on; go with Shanks.
+# Shanks & Pottenger say DST was observed in 1950; go with Whitman.
+# Whitman gives Oct lastSun for 1952 on; go with Shanks & Pottenger.
Rule Port 1951 1965 - Apr Sun>=1 2:00s 1:00 S
Rule Port 1951 1965 - Oct Sun>=1 2:00s 0 -
Rule Port 1977 only - Mar 27 0:00s 1:00 S
@@ -1824,7 +1834,7 @@ 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 says that the transition from LMT to WET occurred 1911-05-24;
+# 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
@@ -1877,11 +1887,12 @@ Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct
# Russia
-# From Paul Eggert (1999-11-12):
+# 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,
-# are from Andrey A. Chernov. The rest is from Shanks, except we follow
-# Chernov's report that 1992 DST transitions were Sat 23:00, not Sun 02:00s.
+# are from Andrey A. Chernov. The rest is from Shanks & Pottenger,
+# except we follow Chernov's report that 1992 DST transitions were Sat
+# 23:00, not Sun 02:00s.
#
# From Stanislaw A. Kuzikowski (1994-06-29):
# But now it is some months since Novosibirsk is 3 hours ahead of Moscow!
@@ -1989,7 +2000,7 @@ 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 1993 May 23 # says Shanks
+ 7:00 Russia NOV%sT 1993 May 23 # say Shanks & P.
6:00 Russia NOV%sT
#
# From Oscar van Vlijmen (2001-08-25): [This region consists of]
@@ -2085,7 +2096,7 @@ Zone Europe/Belgrade 1:22:00 - LMT 1884
1:00 1:00 CEST 1945 Sep 16 2:00s
# Metod Kozelj reports that the legal date of
# transition to EU rules was 1982-11-27, for all of Yugoslavia at the time.
-# Shanks doesn't give as much detail, so go with Kozelj.
+# Shanks & Pottenger don't give as much detail, so go with Kozelj.
1:00 - CET 1982 Nov 27
1:00 EU CE%sT
Link Europe/Belgrade Europe/Ljubljana # Slovenia
@@ -2101,28 +2112,30 @@ Link Europe/Prague Europe/Bratislava
# Spain
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# For 1917-1919 Whitman gives Apr Sat>=1 - Oct Sat>=1; go with Shanks.
+# For 1917-1919 Whitman gives Apr Sat>=1 - Oct Sat>=1;
+# go with Shanks & Pottenger.
Rule Spain 1917 only - May 5 23:00s 1:00 S
Rule Spain 1917 1919 - Oct 6 23:00s 0 -
Rule Spain 1918 only - Apr 15 23:00s 1:00 S
Rule Spain 1919 only - Apr 5 23:00s 1:00 S
-# Whitman gives 1921 Feb 28 - Oct 14; go with Shanks.
+# Whitman gives 1921 Feb 28 - Oct 14; go with Shanks & Pottenger.
Rule Spain 1924 only - Apr 16 23:00s 1:00 S
-# Whitman gives 1924 Oct 14; go with Shanks.
+# Whitman gives 1924 Oct 14; go with Shanks & Pottenger.
Rule Spain 1924 only - Oct 4 23:00s 0 -
Rule Spain 1926 only - Apr 17 23:00s 1:00 S
-# Whitman says no DST in 1929; go with Shanks.
+# Whitman says no DST in 1929; go with Shanks & Pottenger.
Rule Spain 1926 1929 - Oct Sat>=1 23:00s 0 -
Rule Spain 1927 only - Apr 9 23:00s 1:00 S
Rule Spain 1928 only - Apr 14 23:00s 1:00 S
Rule Spain 1929 only - Apr 20 23:00s 1:00 S
-# Whitman gives 1937 Jun 16, 1938 Apr 16, 1940 Apr 13; go with Shanks.
+# Whitman gives 1937 Jun 16, 1938 Apr 16, 1940 Apr 13;
+# go with Shanks & Pottenger.
Rule Spain 1937 only - May 22 23:00s 1:00 S
Rule Spain 1937 1939 - Oct Sat>=1 23:00s 0 -
Rule Spain 1938 only - Mar 22 23:00s 1:00 S
Rule Spain 1939 only - Apr 15 23:00s 1:00 S
Rule Spain 1940 only - Mar 16 23:00s 1:00 S
-# Whitman says no DST 1942-1945; go with Shanks.
+# Whitman says no DST 1942-1945; go with Shanks & Pottenger.
Rule Spain 1942 only - May 2 22:00s 2:00 M # Midsummer
Rule Spain 1942 only - Sep 1 22:00s 1:00 S
Rule Spain 1943 1946 - Apr Sat>=13 22:00s 2:00 M
@@ -2149,7 +2162,7 @@ Rule SpainAfrica 1977 only - Sep 28 0:00 0 -
Rule SpainAfrica 1978 only - Jun 1 0:00 1:00 S
Rule SpainAfrica 1978 only - Aug 4 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Madrid -0:14:44 - LMT 1901
+Zone Europe/Madrid -0:14:44 - LMT 1901 Jan 1 0:00s
0:00 Spain WE%sT 1946 Sep 30
1:00 Spain CE%sT 1979
1:00 EU CE%sT
@@ -2171,7 +2184,7 @@ Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
# Sweden
-# From Ivan Nilsson (2001-04-13), superseding Shanks:
+# From Ivan Nilsson (2001-04-13), superseding Shanks & Pottenger:
#
# The law "Svensk forfattningssamling 1878, no 14" about standard time in 1879:
# From the beginning of 1879 (that is 01-01 00:00) the time for all
@@ -2232,7 +2245,7 @@ Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1
# From Whitman (who writes ``Midnight?''):
Rule Swiss 1940 only - Nov 2 0:00 1:00 S
Rule Swiss 1940 only - Dec 31 0:00 0 -
-# From Shanks:
+# From Shanks & Pottenger:
Rule Swiss 1941 1942 - May Sun>=1 2:00 1:00 S
Rule Swiss 1941 1942 - Oct Sun>=1 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -2251,7 +2264,8 @@ Rule Turkey 1921 only - Apr 3 0:00 1:00 S
Rule Turkey 1921 only - Oct 3 0:00 0 -
Rule Turkey 1922 only - Mar 26 0:00 1:00 S
Rule Turkey 1922 only - Oct 8 0:00 0 -
-# Whitman gives 1923 Apr 28 - Sep 16 and no DST in 1924-1925; go with Shanks.
+# Whitman gives 1923 Apr 28 - Sep 16 and no DST in 1924-1925;
+# go with Shanks & Pottenger.
Rule Turkey 1924 only - May 13 0:00 1:00 S
Rule Turkey 1924 1925 - Oct 1 0:00 0 -
Rule Turkey 1925 only - May 1 0:00 1:00 S
@@ -2260,7 +2274,8 @@ Rule Turkey 1940 only - Oct 5 0:00 0 -
Rule Turkey 1940 only - Dec 1 0:00 1:00 S
Rule Turkey 1941 only - Sep 21 0:00 0 -
Rule Turkey 1942 only - Apr 1 0:00 1:00 S
-# Whitman omits the next two transition and gives 1945 Oct 1; go with Shanks.
+# Whitman omits the next two transition and gives 1945 Oct 1;
+# go with Shanks & Pottenger.
Rule Turkey 1942 only - Nov 1 0:00 0 -
Rule Turkey 1945 only - Apr 2 0:00 1:00 S
Rule Turkey 1945 only - Oct 8 0:00 0 -
@@ -2357,11 +2372,13 @@ Zone Europe/Simferopol 2:16:24 - LMT 1880
3:00 Russia MSK/MSD 1990
3:00 - MSK 1990 Jul 1 2:00
2:00 - EET 1992
-# From Paul Eggert (1999-11-12):
+# 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 says ``date of change uncertain'', but implies that it happened
-# sometime between the 1994 DST switches. For now, guess it changed in May.
+# 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
diff --git a/elsie.nci.nih.gov/src/factory b/elsie.nci.nih.gov/src/factory
index ba27c63..946063c 100644
--- a/elsie.nci.nih.gov/src/factory
+++ b/elsie.nci.nih.gov/src/factory
@@ -1,4 +1,4 @@
-# @(#)factory 7.3
+# @(#)factory 8.1
# For companies who don't want to put time zone specification in
# their installation procedures. When users run date, they'll get the message.
diff --git a/elsie.nci.nih.gov/src/iso3166.tab b/elsie.nci.nih.gov/src/iso3166.tab
index 07b43fc..1cfaf26 100644
--- a/elsie.nci.nih.gov/src/iso3166.tab
+++ b/elsie.nci.nih.gov/src/iso3166.tab
@@ -1,6 +1,6 @@
# ISO 3166 alpha-2 country codes
#
-# @(#)iso3166.tab 1.17
+# @(#)iso3166.tab 8.1
#
# From Paul Eggert (2004-06-14):
#
diff --git a/elsie.nci.nih.gov/src/leapseconds b/elsie.nci.nih.gov/src/leapseconds
index a107883..d2b506b 100644
--- a/elsie.nci.nih.gov/src/leapseconds
+++ b/elsie.nci.nih.gov/src/leapseconds
@@ -1,4 +1,4 @@
-# @(#)leapseconds 7.20
+# @(#)leapseconds 8.1
# Allowance for leapseconds added to each timezone file.
diff --git a/elsie.nci.nih.gov/src/localtime.c b/elsie.nci.nih.gov/src/localtime.c
index 7385678..06a93c9 100644
--- a/elsie.nci.nih.gov/src/localtime.c
+++ b/elsie.nci.nih.gov/src/localtime.c
@@ -5,7 +5,7 @@
#ifndef lint
#ifndef NOID
-static char elsieid[] = "@(#)localtime.c 7.97";
+static char elsieid[] = "@(#)localtime.c 8.3";
#endif /* !defined NOID */
#endif /* !defined lint */
@@ -110,6 +110,8 @@ struct state {
int timecnt;
int typecnt;
int charcnt;
+ int goback;
+ int goahead;
time_t ats[TZ_MAX_TIMES];
unsigned char types[TZ_MAX_TIMES];
struct ttinfo ttis[TZ_MAX_TYPES];
@@ -135,8 +137,10 @@ struct rule {
*/
static long detzcode P((const char * codep));
+static time_t detzcode64 P((const char * codep));
+static int differ_by_repeat P((time_t t1, time_t t0));
static const char * getzname P((const char * strp));
-static const char * getqzname P((const char * strp, const char delim));
+static const char * getqzname P((const char * strp, const int delim));
static const char * getnum P((const char * strp, int * nump, int min,
int max));
static const char * getsecs P((const char * strp, long * secsp));
@@ -173,7 +177,8 @@ static int tmcomp P((const struct tm * atmp,
const struct tm * btmp));
static time_t transtime P((time_t janfirst, int year,
const struct rule * rulep, long offset));
-static int tzload P((const char * name, struct state * sp));
+static int tzload P((const char * name, struct state * sp,
+ int doextend));
static int tzparse P((const char * name, struct state * sp,
int lastditch));
@@ -228,12 +233,25 @@ const char * const codep;
register long result;
register int i;
- result = (codep[0] & 0x80) ? ~0L : 0L;
+ result = (codep[0] & 0x80) ? ~0L : 0;
for (i = 0; i < 4; ++i)
result = (result << 8) | (codep[i] & 0xff);
return result;
}
+static time_t
+detzcode64(codep)
+const char * const codep;
+{
+ register time_t result;
+ register int i;
+
+ result = (codep[0] & 0x80) ? (~(int_fast64_t) 0) : 0;
+ for (i = 0; i < 8; ++i)
+ result = result * 256 + (codep[i] & 0xff);
+ return result;
+}
+
static void
settzname P((void))
{
@@ -303,13 +321,33 @@ settzname P((void))
}
static int
-tzload(name, sp)
+differ_by_repeat(t1, t0)
+const time_t t1;
+const time_t t0;
+{
+ if (TYPE_INTEGRAL(time_t) &&
+ TYPE_BIT(time_t) - TYPE_SIGNED(time_t) < SECSPERREPEAT_BITS)
+ return 0;
+ return t1 - t0 == SECSPERREPEAT;
+}
+
+static int
+tzload(name, sp, doextend)
register const char * name;
register struct state * const sp;
+register const int doextend;
{
- register const char * p;
- register int i;
- register int fid;
+ register const char * p;
+ register int i;
+ register int fid;
+ register int stored;
+ register int nread;
+ union {
+ struct tzhead tzhead;
+ char buf[2 * sizeof(struct tzhead) +
+ 2 * sizeof *sp +
+ 4 * TZ_MAX_TIMES];
+ } u;
if (name == NULL && (name = TZDEFAULT) == NULL)
return -1;
@@ -347,18 +385,13 @@ register struct state * const sp;
if ((fid = open(name, OPEN_MODE)) == -1)
return -1;
}
- {
- struct tzhead * tzhp;
- union {
- struct tzhead tzhead;
- char buf[sizeof *sp + sizeof *tzhp];
- } u;
+ nread = read(fid, u.buf, sizeof u.buf);
+ if (close(fid) < 0 || nread <= 0)
+ return -1;
+ for (stored = 4; stored <= 8; stored *= 2) {
int ttisstdcnt;
int ttisgmtcnt;
- i = read(fid, u.buf, sizeof u.buf);
- if (close(fid) != 0)
- return -1;
ttisstdcnt = (int) detzcode(u.tzhead.tzh_ttisstdcnt);
ttisgmtcnt = (int) detzcode(u.tzhead.tzh_ttisgmtcnt);
sp->leapcnt = (int) detzcode(u.tzhead.tzh_leapcnt);
@@ -373,17 +406,19 @@ register struct state * const sp;
(ttisstdcnt != sp->typecnt && ttisstdcnt != 0) ||
(ttisgmtcnt != sp->typecnt && ttisgmtcnt != 0))
return -1;
- if (i - (p - u.buf) < sp->timecnt * 4 + /* ats */
+ if (nread - (p - u.buf) <
+ sp->timecnt * stored + /* ats */
sp->timecnt + /* types */
- sp->typecnt * (4 + 2) + /* ttinfos */
+ sp->typecnt * 6 + /* ttinfos */
sp->charcnt + /* chars */
- sp->leapcnt * (4 + 4) + /* lsinfos */
+ sp->leapcnt * (stored + 4) + /* lsinfos */
ttisstdcnt + /* ttisstds */
ttisgmtcnt) /* ttisgmts */
return -1;
for (i = 0; i < sp->timecnt; ++i) {
- sp->ats[i] = detzcode(p);
- p += 4;
+ sp->ats[i] = (stored == 4) ?
+ detzcode(p) : detzcode64(p);
+ p += stored;
}
for (i = 0; i < sp->timecnt; ++i) {
sp->types[i] = (unsigned char) *p++;
@@ -411,8 +446,9 @@ register struct state * const sp;
register struct lsinfo * lsisp;
lsisp = &sp->lsis[i];
- lsisp->ls_trans = detzcode(p);
- p += 4;
+ lsisp->ls_trans = (stored == 4) ?
+ detzcode(p) : detzcode64(p);
+ p += stored;
lsisp->ls_corr = detzcode(p);
p += 4;
}
@@ -469,7 +505,63 @@ register struct state * const sp;
}
break;
}
+ /*
+ ** If this is an old file, we're done.
+ */
+ if (u.tzhead.tzh_version[0] == '\0')
+ break;
+ nread -= p - u.buf;
+ for (i = 0; i < nread; ++i)
+ u.buf[i] = p[i];
+ /*
+ ** If this is a narrow integer time_t system, we're done.
+ */
+ if (stored >= (int) sizeof(time_t) && TYPE_INTEGRAL(time_t))
+ break;
+ }
+ if (doextend && nread > 2 &&
+ u.buf[0] == '\n' && u.buf[nread - 1] == '\n' &&
+ sp->typecnt + 2 <= TZ_MAX_TYPES) {
+ struct state ts;
+ register int result;
+
+ u.buf[nread - 1] = '\0';
+ result = tzparse(&u.buf[1], &ts, FALSE);
+ if (result == 0 && ts.typecnt == 2 &&
+ sp->charcnt + ts.charcnt <= TZ_MAX_CHARS) {
+ for (i = 0; i < 2; ++i)
+ ts.ttis[i].tt_abbrind +=
+ sp->charcnt;
+ for (i = 0; i < ts.charcnt; ++i)
+ sp->chars[sp->charcnt++] =
+ ts.chars[i];
+ i = 0;
+ while (i < ts.timecnt &&
+ ts.ats[i] <=
+ sp->ats[sp->timecnt - 1])
+ ++i;
+ while (i < ts.timecnt &&
+ sp->timecnt < TZ_MAX_TIMES) {
+ sp->ats[sp->timecnt] =
+ ts.ats[i];
+ sp->types[sp->timecnt] =
+ sp->typecnt +
+ ts.types[i];
+ ++sp->timecnt;
+ ++i;
+ }
+ sp->ttis[sp->typecnt++] = ts.ttis[0];
+ sp->ttis[sp->typecnt++] = ts.ttis[1];
+ }
}
+ i = 2 * YEARSPERREPEAT;
+ sp->goback = sp->goahead = sp->timecnt > i;
+ sp->goback &= sp->types[i] == sp->types[0] &&
+ differ_by_repeat(sp->ats[i], sp->ats[0]);
+ sp->goahead &=
+ sp->types[sp->timecnt - 1] == sp->types[sp->timecnt - 1 - i] &&
+ differ_by_repeat(sp->ats[sp->timecnt - 1],
+ sp->ats[sp->timecnt - 1 - i]);
return 0;
}
@@ -502,19 +594,17 @@ register const char * strp;
/*
** Given a pointer into an extended time zone string, scan until the ending
-** delimiter of the zone name is located. Return a pointer to the delimiter.
+** delimiter of the zone name is located. Return a pointer to the delimiter.
**
** As with getzname above, the legal character set is actually quite
** restricted, with other characters producing undefined results.
-** We choose not to care - allowing almost anything to be in the zone abbrev.
+** We don't do any checking here; checking is done later in common-case code.
*/
static const char *
-getqzname(strp, delim)
-register const char * strp;
-const char delim;
+getqzname(register const char *strp, const int delim)
{
- register char c;
+ register int c;
while ((c = *strp) != '\0' && c != delim)
++strp;
@@ -823,9 +913,10 @@ const int lastditch;
if (name == NULL)
return -1;
}
- load_result = tzload(TZDEFRULES, sp);
+ load_result = tzload(TZDEFRULES, sp, FALSE);
if (load_result != 0)
sp->leapcnt = 0; /* so, we're off a little */
+ sp->timecnt = 0;
if (*name != '\0') {
if (*name == '<') {
dstname = ++name;
@@ -865,11 +956,8 @@ const int lastditch;
return -1;
sp->typecnt = 2; /* standard time and DST */
/*
- ** Two transitions per year, from EPOCH_YEAR to 2037.
+ ** Two transitions per year, from EPOCH_YEAR forward.
*/
- sp->timecnt = 2 * (2037 - EPOCH_YEAR + 1);
- if (sp->timecnt > TZ_MAX_TIMES)
- return -1;
sp->ttis[0].tt_gmtoff = -dstoffset;
sp->ttis[0].tt_isdst = 1;
sp->ttis[0].tt_abbrind = stdlen + 1;
@@ -879,7 +967,11 @@ const int lastditch;
atp = sp->ats;
typep = sp->types;
janfirst = 0;
- for (year = EPOCH_YEAR; year <= 2037; ++year) {
+ for (year = EPOCH_YEAR;
+ sp->timecnt + 2 <= TZ_MAX_TIMES;
+ ++year) {
+ time_t newfirst;
+
starttime = transtime(janfirst, year, &start,
stdoffset);
endtime = transtime(janfirst, year, &end,
@@ -895,8 +987,13 @@ const int lastditch;
*atp++ = endtime;
*typep++ = 1; /* DST ends */
}
- janfirst += year_lengths[isleap(year)] *
+ sp->timecnt += 2;
+ newfirst = janfirst;
+ newfirst += year_lengths[isleap(year)] *
SECSPERDAY;
+ if (newfirst <= janfirst)
+ break;
+ janfirst = newfirst;
}
} else {
register long theirstdoffset;
@@ -1011,7 +1108,7 @@ static void
gmtload(sp)
struct state * const sp;
{
- if (tzload(gmt, sp) != 0)
+ if (tzload(gmt, sp, TRUE) != 0)
(void) tzparse(gmt, sp, TRUE);
}
@@ -1038,7 +1135,7 @@ tzsetwall P((void))
}
}
#endif /* defined ALL_STATE */
- if (tzload((char *) NULL, lclptr) != 0)
+ if (tzload((char *) NULL, lclptr, TRUE) != 0)
gmtload(lclptr);
settzname();
}
@@ -1080,7 +1177,7 @@ tzset P((void))
lclptr->ttis[0].tt_gmtoff = 0;
lclptr->ttis[0].tt_abbrind = 0;
(void) strcpy(lclptr->chars, gmt);
- } else if (tzload(name, lclptr) != 0)
+ } else if (tzload(name, lclptr, TRUE) != 0)
if (name[0] == ':' || tzparse(name, lclptr, FALSE) != 0)
(void) gmtload(lclptr);
settzname();
@@ -1113,6 +1210,45 @@ struct tm * const tmp;
if (sp == NULL)
return gmtsub(timep, offset, tmp);
#endif /* defined ALL_STATE */
+ if ((sp->goback && t < sp->ats[0]) ||
+ (sp->goahead && t > sp->ats[sp->timecnt - 1])) {
+ time_t newt = t;
+ register time_t seconds;
+ register time_t tcycles;
+ register int_fast64_t icycles;
+
+ if (t < sp->ats[0])
+ seconds = sp->ats[0] - t;
+ else seconds = t - sp->ats[sp->timecnt - 1];
+ --seconds;
+ tcycles = seconds / YEARSPERREPEAT / AVGSECSPERYEAR;
+ ++tcycles;
+ icycles = tcycles;
+ if (tcycles - icycles >= 1 || icycles - tcycles >= 1)
+ return NULL;
+ seconds = icycles;
+ seconds *= YEARSPERREPEAT;
+ seconds *= AVGSECSPERYEAR;
+ if (t < sp->ats[0])
+ newt += seconds;
+ else newt -= seconds;
+ if (newt < sp->ats[0] ||
+ newt > sp->ats[sp->timecnt - 1])
+ return NULL; /* "cannot happen" */
+ result = localsub(&newt, offset, tmp);
+ if (result == tmp) {
+ register time_t newy;
+
+ newy = tmp->tm_year;
+ if (t < sp->ats[0])
+ newy -= icycles * YEARSPERREPEAT;
+ else newy += icycles * YEARSPERREPEAT;
+ tmp->tm_year = newy;
+ if (tmp->tm_year != newy)
+ return NULL;
+ }
+ return result;
+ }
if (sp->timecnt == 0 || t < sp->ats[0]) {
i = 0;
while (sp->ttis[i].tt_isdst)
@@ -1121,10 +1257,17 @@ struct tm * const tmp;
break;
}
} else {
- for (i = 1; i < sp->timecnt; ++i)
- if (t < sp->ats[i])
- break;
- i = (int) sp->types[i - 1];
+ register int lo = 1;
+ register int hi = sp->timecnt;
+
+ while (lo < hi) {
+ register int mid = (lo + hi) >> 1;
+
+ if (t < sp->ats[mid])
+ hi = mid;
+ else lo = mid + 1;
+ }
+ i = (int) sp->types[lo - 1];
}
ttisp = &sp->ttis[i];
/*
diff --git a/elsie.nci.nih.gov/src/logwtmp.c b/elsie.nci.nih.gov/src/logwtmp.c
index d84ff33..e4be0d5 100644
--- a/elsie.nci.nih.gov/src/logwtmp.c
+++ b/elsie.nci.nih.gov/src/logwtmp.c
@@ -1,6 +1,6 @@
#ifndef lint
#ifndef NOID
-static char elsieid[] = "@(#)logwtmp.c 7.7";
+static char elsieid[] = "@(#)logwtmp.c 8.1";
/* As received from UCB, with include reordering and OLD_TIME condition. */
#endif /* !defined NOID */
#endif /* !defined lint */
diff --git a/elsie.nci.nih.gov/src/newctime.3 b/elsie.nci.nih.gov/src/newctime.3
index 7fcf04f..2676acc 100644
--- a/elsie.nci.nih.gov/src/newctime.3
+++ b/elsie.nci.nih.gov/src/newctime.3
@@ -234,4 +234,4 @@ instead.
Avoid using out-of-range values with
.I mktime
when setting up lunch with promptness sticklers in Riyadh.
-.\" @(#)newctime.3 7.17
+.\" @(#)newctime.3 8.1
diff --git a/elsie.nci.nih.gov/src/newstrftime.3 b/elsie.nci.nih.gov/src/newstrftime.3
index 19db8ea..92392dc 100644
--- a/elsie.nci.nih.gov/src/newstrftime.3
+++ b/elsie.nci.nih.gov/src/newstrftime.3
@@ -227,4 +227,4 @@ newctime(3),
newtzset(3),
time(2),
tzfile(5)
-.\" @(#)newstrftime.3 7.15
+.\" @(#)newstrftime.3 8.1
diff --git a/elsie.nci.nih.gov/src/newtzset.3 b/elsie.nci.nih.gov/src/newtzset.3
index 427e473..e19ad70 100644
--- a/elsie.nci.nih.gov/src/newtzset.3
+++ b/elsie.nci.nih.gov/src/newtzset.3
@@ -234,4 +234,4 @@ newctime(3),
newstrftime(3),
time(2),
tzfile(5)
-.\" @(#)newtzset.3 7.5
+.\" @(#)newtzset.3 8.1
diff --git a/elsie.nci.nih.gov/src/northamerica b/elsie.nci.nih.gov/src/northamerica
index 9f9b98b..8e535dc 100644
--- a/elsie.nci.nih.gov/src/northamerica
+++ b/elsie.nci.nih.gov/src/northamerica
@@ -1,4 +1,4 @@
-# @(#)northamerica 7.87
+# @(#)northamerica 8.5
# <pre>
# also includes Central America and the Caribbean
@@ -30,12 +30,12 @@
# That 1883 transition occurred at 12:00 new time, not at 12:00 old time.
# See p 46 of David Prerau, Seize the daylight, Thunder's Mouth Press (2005).
-# From Paul Eggert (1995-12-19):
+# From Paul Eggert (2006-03-22):
# A good source for time zone historical data in the US is
# Thomas G. Shanks, The American Atlas (5th edition),
# San Diego: ACS Publications, Inc. (1991).
# Make sure you have the errata sheet; the book is somewhat useless without it.
-# It is the source for most of the pre-1991 US and Puerto Rico entries below.
+# It is the source for most of the pre-1991 US entries below.
# From Paul Eggert (2001-03-06):
# Daylight Saving Time was first suggested as a joke by Benjamin Franklin
@@ -229,7 +229,7 @@ Zone PST8PDT -8:00 US P%sT
# Public law 106-564 (2000-12-23) introduced the abbreviation
# "Chamorro Standard Time" for time in Guam and the Northern Marianas.
# See the file "australasia".
-
+
# From Arthur David Olson, 2005-08-09
# The following was signed into law on 2005-08-08.
#
@@ -274,7 +274,7 @@ Zone PST8PDT -8:00 US P%sT
# set their watches and clocks on Eastern time." It quotes H.H. "Bubba"
# Roberts, city administrator in Phenix City. as saying "We are in the Central
# time zone, but we do go by the Eastern time zone because so many people work
-# in Columbus."
+# in Columbus."
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
Rule NYC 1920 only - Mar lastSun 2:00 1:00 D
@@ -301,6 +301,13 @@ Zone America/New_York -4:56:02 - LMT 1883 Nov 18 12:03:58
# Nebraska, eastern North Dakota, Oklahoma, eastern South Dakota,
# western Tennessee, most of Texas, Wisconsin
+# From Larry M. Smith (2006-04-26) re Wisconsin:
+# http://www.legis.state.wi.us/statutes/Stat0175.pdf ...
+# is currently enforced at the 01:00 time of change. Because the local
+# "bar time" in the state corresponds to 02:00, a number of citations
+# are issued for the "sale of class 'B' alcohol after prohibited
+# hours" within the deviated hour of this change every year....
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
Rule Chicago 1920 only - Jun 13 2:00 1:00 D
Rule Chicago 1920 1921 - Oct lastSun 2:00 0 S
@@ -321,6 +328,16 @@ Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 12:09:24
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
-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.
+# See <http://dmses.dot.gov/docimages/p63/135818.pdf>.
+# Officially this switch also included part of Sioux County, and
+# 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
+ -6:00 US C%sT
# US mountain time, represented by Denver
#
@@ -399,7 +416,8 @@ Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18
Zone America/Anchorage 14:00:24 - LMT 1867 Oct 18
-9:59:36 - LMT 1900 Aug 20 12:00
-10:00 - CAT 1942
- -10:00 US CAT/CAWT 1946
+ -10:00 US CAT/CAWT 1945 Aug 14 23:00u
+ -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
@@ -519,9 +537,9 @@ Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11
# 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> (2005-05-03)
+# </a> (2006-03-01)
#
-# From Paul Eggert (2005-08-22):
+# From Paul Eggert (2006-03-22):
# Since 1970, most of Indiana has been like America/Indiana/Indianapolis,
# with the following exceptions:
#
@@ -533,11 +551,15 @@ Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11
# - Clark, Floyd, and Harrison counties have been like
# America/Kentucky/Louisville.
#
-# - Crawford, Starke, and Switzerland counties have their own time zone
+# - Daviess, Dubois, Knox, Martin, Perry, and Pulaski counties
+# have been like America/Indiana/Vincennes.
+#
+# - Crawford, Pike, Starke, and Switzerland counties have their own time zone
# histories as noted below.
#
-# Shanks partitions Indiana into 345 regions, each with its own time history,
-# and writes ``Even newspaper reports present contradictory information.''
+# Shanks partitioned Indiana into 345 regions, each with its own time history,
+# and wrote ``Even newspaper reports present contradictory information.''
+# Those Hoosiers! Such a flighty and changeable people!
# Fortunately, most of the complexity occurred before our cutoff date of 1970.
#
# Other than Indianapolis, the Indiana place names are so nondescript
@@ -545,11 +567,21 @@ Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11
# 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,
-# and that many counties may switch either to Central or to Eastern time.
-# The county-by-county decisions have not been made yet, so for now assume
-# that no counties will switch: this assumption is most likely wrong,
-# but it's the best we can do for now.
+# 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,
+# 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
+# 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.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
Rule Indianapolis 1941 only - Jun 22 2:00 1:00 D
@@ -568,8 +600,8 @@ Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
-5:00 - EST 2006
-5:00 US E%sT
#
-# Part of Crawford County, Indiana, last observed DST in 1975,
-# and left its clocks alone in 1974.
+# Eastern Crawford County, Indiana, left its clocks alone in 1974,
+# as well as from 1976 through 2005.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
Rule Marengo 1951 only - Apr lastSun 2:00 1:00 D
Rule Marengo 1951 only - Sep lastSun 2:00 0 S
@@ -586,7 +618,45 @@ Zone America/Indiana/Marengo -5:45:23 - LMT 1883 Nov 18 12:14:37
-5:00 - EST 2006
-5:00 US E%sT
#
-# Starke County, Indiana
+# Daviess, Dubois, Knox, Martin, Perry, and Pulaski Counties, Indiana,
+# switched from eastern to central time in April 2006.
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
+Rule Vincennes 1946 only - Apr lastSun 2:00 1:00 D
+Rule Vincennes 1946 only - Sep lastSun 2:00 0 S
+Rule Vincennes 1953 1954 - Apr lastSun 2:00 1:00 D
+Rule Vincennes 1953 1959 - Sep lastSun 2:00 0 S
+Rule Vincennes 1955 only - May 1 0:00 1:00 D
+Rule Vincennes 1956 1963 - Apr lastSun 2:00 1:00 D
+Rule Vincennes 1960 only - Oct lastSun 2:00 0 S
+Rule Vincennes 1961 only - Sep lastSun 2:00 0 S
+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
+ -5:00 - EST 1969
+ -5:00 US E%sT 1971
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT
+#
+# Pike County, Indiana moved from central to eastern time in 1977,
+# then switched back in 2006.
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
+Rule Pike 1955 only - May 1 0:00 1:00 D
+Rule Pike 1955 1960 - Sep lastSun 2:00 0 S
+Rule Pike 1956 1964 - Apr lastSun 2:00 1:00 D
+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
+#
+# Starke County, Indiana moved from central to eastern time in 1991,
+# then switched back in 2006.
# From Arthur David Olson (1991-10-28):
# An article on page A3 of the Sunday, 1991-10-27 Washington Post
# notes that Starke County switched from Central time to Eastern time as of
@@ -603,10 +673,10 @@ Zone America/Indiana/Knox -5:46:30 - LMT 1883 Nov 18 12:13:30
-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
- -5:00 US E%sT
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT
#
-# Switzerland County, Indiana, last observed DST in 1972.
+# 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
@@ -636,7 +706,7 @@ Zone America/Kentucky/Louisville -5:43:02 - LMT 1883 Nov 18 12:16:58
-6:00 1:00 CDT 1974 Oct 27 2:00
-5:00 US E%sT
#
-# Wayne, Clinton, and Russell Counties, Kentucky
+# Wayne County, Kentucky
#
# From
# <a href="http://www.lake-cumberland.com/life/archive/news990129time.shtml">
@@ -733,7 +803,8 @@ Zone America/Detroit -5:32:11 - LMT 1905
-5:00 - EST 1975 Apr 27 2:00
-5:00 US E%sT
#
-# The Michigan border with Wisconsin switched from EST to CST/CDT in 1973.
+# Dickinson, Gogebic, Iron, and Menominee Counties, Michigan,
+# switched from EST to CST/CDT in 1973.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
Rule Menominee 1946 only - Apr lastSun 2:00 1:00 D
Rule Menominee 1946 only - Sep lastSun 2:00 0 S
@@ -760,10 +831,10 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
################################################################################
-# From Paul Eggert (1999-10-29):
-# A good source for time zone historical data outside the US is
-# Thomas G. Shanks, The International Atlas (5th edition),
-# San Diego: ACS Publications, Inc. (1999).
+# From Paul Eggert (2006-03-22):
+# 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).
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
@@ -771,8 +842,8 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
# published semiannually. Law sent in several helpful summaries
# of the IATA's data after 1990.
#
-# Except where otherwise noted, Shanks is the source for entries through 1990,
-# and IATA SSIM is the source for entries after 1990.
+# Except where otherwise noted, Shanks & Pottenger is the source for
+# entries through 1990, and IATA SSIM is the source for entries afterwards.
#
# Other sources occasionally used include:
#
@@ -820,9 +891,16 @@ 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 for Canada are all from Shanks
+# & Pottenger.
+
+# From Chris Walton (2006-04-01):
+# The British Columbia government announced yesterday that it will
+# adjust daylight savings next year to align with changes in the
+# U.S. and the rest of Canada....
+# http://www2.news.gov.bc.ca/news_releases_2005-2009/2006AG0014-000330.htm
-# From Paul Eggert (2005-12-21):
+# 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)
@@ -836,23 +914,14 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
# Its unofficial information is often taken from Matthews and Vincent.
#
# CBC News reported that Ontario and Manitoba have announced plans to
-# follow the US change, and that Nova Scotia is considering it; see
+# follow the US change; see
# <http://www.cbc.ca/news/background/daylightsavingtime/> (2005-10-21).
# CBC news also reported that Prince Edward Island is the first
# province in Atlantic Canada to follow the US change, and that Quebec
# had agreed; see <http://www.cbc.ca/pei/story/pe_daylight_20051207.html>
-# (2005-12-07).
-#
-# To reflect all this, the Canada and Winn rules have been adjusted to
-# agree with the 2007 US change. This means we assume most of Canada
-# will fall into line. However, Alberta, British Columbia,
-# Newfoundland, Northwest Territories, and Yukon already have separate
-# rules in our database, so for now we'll leave them alone, which
-# means that we currently assume these regions will not change their
-# rules and will disagree with the US starting in 2007. This
-# assumption is probably incorrect, with the possible exception of
-# Newfoundland. We plan to adjust the Edm, Vanc, StJohns, and NT_YK
-# rules as the corresponding provinces make their announcements.
+# (2005-12-07). It also reported that Alberta will fall into line; see
+# <http://www.cbc.ca/calgary/story/ca_daylight20060202.html> (2006-02-02).
+# For now, assume all of Canada will fall into line.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Canada 1918 only - Apr 14 2:00 1:00 D
@@ -878,20 +947,21 @@ Rule Canada 2007 max - Nov Sun>=1 2:00 0 S
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule StJohns 1917 only - Apr 8 2:00 1:00 D
Rule StJohns 1917 only - Sep 17 2:00 0 S
-# Whitman gives 1919 Apr 5 and 1920 Apr 5; go with Shanks.
+# Whitman gives 1919 Apr 5 and 1920 Apr 5; go with Shanks & Pottenger.
Rule StJohns 1919 only - May 5 23:00 1:00 D
Rule StJohns 1919 only - Aug 12 23:00 0 S
-# For 1931-1935 Whitman gives Apr same date; go with Shanks.
+# For 1931-1935 Whitman gives Apr same date; go with Shanks & Pottenger.
Rule StJohns 1920 1935 - May Sun>=1 23:00 1:00 D
Rule StJohns 1920 1935 - Oct lastSun 23:00 0 S
-# For 1936-1941 Whitman gives May Sun>=8 and Oct Sun>=1; go with Shanks.
+# For 1936-1941 Whitman gives May Sun>=8 and Oct Sun>=1; go with Shanks &
+# Pottenger.
Rule StJohns 1936 1941 - May Mon>=9 0:00 1:00 D
Rule StJohns 1936 1941 - Oct Mon>=2 0:00 0 S
# Whitman gives the following transitions:
# 1942 03-01/12-31, 1943 05-30/09-05, 1944 07-10/09-02, 1945 01-01/10-07
-# but go with Shanks and assume they used Canadian rules.
+# but go with Shanks & Pottenger and assume they used Canadian rules.
# For 1946-9 Whitman gives May 5,4,9,1 - Oct 1,5,3,2, and for 1950 he gives
-# Apr 30 - Sep 24; go with Shanks.
+# Apr 30 - Sep 24; go with Shanks & Pottenger.
Rule StJohns 1946 1950 - May Sun>=8 2:00 1:00 D
Rule StJohns 1946 1950 - Oct Sun>=2 2:00 0 S
Rule StJohns 1951 1986 - Apr lastSun 2:00 1:00 D
@@ -901,9 +971,15 @@ Rule StJohns 1960 1986 - Oct lastSun 2:00 0 S
# INMS (2000-09-12) says that, since 1988 at least, Newfoundland switches
# at 00:01 local time. For now, assume it started in 1987.
Rule StJohns 1987 only - Apr Sun>=1 0:01 1:00 D
-Rule StJohns 1987 max - Oct lastSun 0:01 0 S
+Rule StJohns 1987 2006 - Oct lastSun 0:01 0 S
Rule StJohns 1988 only - Apr Sun>=1 0:01 2:00 DD
-Rule StJohns 1989 max - Apr Sun>=1 0:01 1:00 D
+Rule StJohns 1989 2006 - Apr Sun>=1 0:01 1:00 D
+# From Chris Walton (2006-04-05):
+# http://www.releases.gov.nl.ca/releases/2006/mpa/0331n01.htm
+# [This says Newfoundlandland expects to follow step with the US.]
+Rule StJohns 2007 max - Mar Sun>=8 0:01 1:00 D
+Rule StJohns 2007 max - Nov Sun>=1 0:01 0 S
+#
# St John's has an apostrophe, but Posix file names can't have apostrophes.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/St_Johns -3:30:52 - LMT 1884
@@ -929,62 +1005,63 @@ Zone America/Goose_Bay -4:01:40 - LMT 1884 # Happy Valley-Goose Bay
-4:00 StJohns A%sT
-# west Labrador, New Brunswick, Nova Scotia, Prince Edward I
+# west Labrador, Nova Scotia, Prince Edward I
-# From Paul Eggert (1996-06-12):
-# Shanks writes that since 1970 most of this region has been like Halifax.
-# Many locales did not observe peacetime DST until 1972;
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger write that since 1970 most of this region has been like
+# Halifax. Many locales did not observe peacetime DST until 1972;
# Glace Bay, NS is the largest that we know of.
-# Shanks also writes that Liverpool, NS was the only town in Canada to observe
-# DST in 1971 but not 1970; for now we'll assume this is a typo.
-
-# From Paul Eggert (2000-10-02):
-# INMS (2000-09-12) says that, since 1988 at least, New Brunswick switches
-# at 00:01 local time. FIXME: verify and create a new Zone for this.
+# Shanks & Pottenger also write that Liverpool, NS was the only town
+# in Canada to observe DST in 1971 but not 1970; for now we'll assume
+# this is a typo.
+# From Chris Walton (2006-04-25):
+# Daylight saving time will be extended by four weeks starting in 2007....
+# Here is a news release which was issued today by the Nova Scotia government:
+# http://www.gov.ns.ca/news/details.asp?id=20060425004
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Halifax 1916 only - Apr 1 0:00 1:00 D
-Rule Halifax 1916 only - Oct 1 0:00 0 S
-Rule Halifax 1920 only - May 9 0:00 1:00 D
-Rule Halifax 1920 only - Aug 29 0:00 0 S
-Rule Halifax 1921 only - May 6 0:00 1:00 D
-Rule Halifax 1921 1922 - Sep 5 0:00 0 S
-Rule Halifax 1922 only - Apr 30 0:00 1:00 D
-Rule Halifax 1923 1925 - May Sun>=1 0:00 1:00 D
-Rule Halifax 1923 only - Sep 4 0:00 0 S
-Rule Halifax 1924 only - Sep 15 0:00 0 S
-Rule Halifax 1925 only - Sep 28 0:00 0 S
-Rule Halifax 1926 only - May 16 0:00 1:00 D
-Rule Halifax 1926 only - Sep 13 0:00 0 S
-Rule Halifax 1927 only - May 1 0:00 1:00 D
-Rule Halifax 1927 only - Sep 26 0:00 0 S
-Rule Halifax 1928 1931 - May Sun>=8 0:00 1:00 D
-Rule Halifax 1928 only - Sep 9 0:00 0 S
-Rule Halifax 1929 only - Sep 3 0:00 0 S
-Rule Halifax 1930 only - Sep 15 0:00 0 S
-Rule Halifax 1931 1932 - Sep Mon>=24 0:00 0 S
-Rule Halifax 1932 only - May 1 0:00 1:00 D
-Rule Halifax 1933 only - Apr 30 0:00 1:00 D
-Rule Halifax 1933 only - Oct 2 0:00 0 S
-Rule Halifax 1934 only - May 20 0:00 1:00 D
-Rule Halifax 1934 only - Sep 16 0:00 0 S
-Rule Halifax 1935 only - Jun 2 0:00 1:00 D
-Rule Halifax 1935 only - Sep 30 0:00 0 S
-Rule Halifax 1936 only - Jun 1 0:00 1:00 D
-Rule Halifax 1936 only - Sep 14 0:00 0 S
-Rule Halifax 1937 1938 - May Sun>=1 0:00 1:00 D
-Rule Halifax 1937 1941 - Sep Mon>=24 0:00 0 S
-Rule Halifax 1939 only - May 28 0:00 1:00 D
-Rule Halifax 1940 1941 - May Sun>=1 0:00 1:00 D
-Rule Halifax 1946 1949 - Sep lastSun 2:00 0 S
-Rule Halifax 1946 1949 - Apr lastSun 2:00 1:00 D
-Rule Halifax 1951 1954 - Sep lastSun 2:00 0 S
-Rule Halifax 1951 1954 - Apr lastSun 2:00 1:00 D
-Rule Halifax 1956 1959 - Sep lastSun 2:00 0 S
-Rule Halifax 1956 1959 - Apr lastSun 2:00 1:00 D
-Rule Halifax 1962 1973 - Apr lastSun 2:00 1:00 D
-Rule Halifax 1962 1973 - Oct lastSun 2:00 0 S
+Rule Halifax 1916 only - Apr 1 0:00 1:00 D
+Rule Halifax 1916 only - Oct 1 0:00 0 S
+Rule Halifax 1920 only - May 9 0:00 1:00 D
+Rule Halifax 1920 only - Aug 29 0:00 0 S
+Rule Halifax 1921 only - May 6 0:00 1:00 D
+Rule Halifax 1921 1922 - Sep 5 0:00 0 S
+Rule Halifax 1922 only - Apr 30 0:00 1:00 D
+Rule Halifax 1923 1925 - May Sun>=1 0:00 1:00 D
+Rule Halifax 1923 only - Sep 4 0:00 0 S
+Rule Halifax 1924 only - Sep 15 0:00 0 S
+Rule Halifax 1925 only - Sep 28 0:00 0 S
+Rule Halifax 1926 only - May 16 0:00 1:00 D
+Rule Halifax 1926 only - Sep 13 0:00 0 S
+Rule Halifax 1927 only - May 1 0:00 1:00 D
+Rule Halifax 1927 only - Sep 26 0:00 0 S
+Rule Halifax 1928 1931 - May Sun>=8 0:00 1:00 D
+Rule Halifax 1928 only - Sep 9 0:00 0 S
+Rule Halifax 1929 only - Sep 3 0:00 0 S
+Rule Halifax 1930 only - Sep 15 0:00 0 S
+Rule Halifax 1931 1932 - Sep Mon>=24 0:00 0 S
+Rule Halifax 1932 only - May 1 0:00 1:00 D
+Rule Halifax 1933 only - Apr 30 0:00 1:00 D
+Rule Halifax 1933 only - Oct 2 0:00 0 S
+Rule Halifax 1934 only - May 20 0:00 1:00 D
+Rule Halifax 1934 only - Sep 16 0:00 0 S
+Rule Halifax 1935 only - Jun 2 0:00 1:00 D
+Rule Halifax 1935 only - Sep 30 0:00 0 S
+Rule Halifax 1936 only - Jun 1 0:00 1:00 D
+Rule Halifax 1936 only - Sep 14 0:00 0 S
+Rule Halifax 1937 1938 - May Sun>=1 0:00 1:00 D
+Rule Halifax 1937 1941 - Sep Mon>=24 0:00 0 S
+Rule Halifax 1939 only - May 28 0:00 1:00 D
+Rule Halifax 1940 1941 - May Sun>=1 0:00 1:00 D
+Rule Halifax 1946 1949 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1946 1949 - Sep lastSun 2:00 0 S
+Rule Halifax 1951 1954 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1951 1954 - Sep lastSun 2:00 0 S
+Rule Halifax 1956 1959 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1956 1959 - Sep lastSun 2:00 0 S
+Rule Halifax 1962 1973 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1962 1973 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Halifax -4:14:24 - LMT 1902 Jun 15
-4:00 Halifax A%sT 1918
@@ -1000,12 +1077,49 @@ Zone America/Glace_Bay -3:59:48 - LMT 1902 Jun 15
-4:00 Halifax A%sT 1974
-4:00 Canada A%sT
+# New Brunswick
+
+# From Paul Eggert (2006-01-20):
+# New Brunswick's Time Definition Act
+# <http://www.gnb.ca/0062/PDF-acts/t-06.pdf> says they change at 00:01, and
+# <http://www.canlii.org/nb/laws/sta/t-6/20030127/whole.html> makes it
+# clear that this has been the case since at least 1993.
+# For now, assume it started in 1993. The Office of the Premier announced
+# <http://www.gnb.ca/cnb/news/pre/2005e1737pr.htm> (2005-12-23)
+# that they will bring forward proposed amendments to harmonize with the US;
+# for now assume that this will happen, but they'll still switch at 00:01.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Moncton 1933 1935 - Jun Sun>=8 1:00 1:00 D
+Rule Moncton 1933 1935 - Sep Sun>=8 1:00 0 S
+Rule Moncton 1936 1938 - Jun Sun>=1 1:00 1:00 D
+Rule Moncton 1936 1938 - Sep Sun>=1 1:00 0 S
+Rule Moncton 1939 only - May 27 1:00 1:00 D
+Rule Moncton 1939 1941 - Sep Sat>=21 1:00 0 S
+Rule Moncton 1940 only - May 19 1:00 1:00 D
+Rule Moncton 1941 only - May 4 1:00 1:00 D
+Rule Moncton 1946 1972 - Apr lastSun 2:00 1:00 D
+Rule Moncton 1946 1956 - Sep lastSun 2:00 0 S
+Rule Moncton 1957 1972 - Oct lastSun 2:00 0 S
+Rule Moncton 1993 2006 - Apr Sun>=1 0:01 1:00 D
+Rule Moncton 1993 2006 - Oct lastSun 0:01 0 S
+Rule Moncton 2007 max - Mar Sun>=8 0:01 1:00 D
+Rule Moncton 2007 max - Nov Sun>=1 0:01 0 S
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
+ -5:00 - EST 1902 Jun 15
+ -4:00 Canada A%sT 1933
+ -4:00 Moncton A%sT 1942
+ -4:00 Canada A%sT 1946
+ -4:00 Moncton A%sT 1973
+ -4:00 Canada A%sT 1993
+ -4:00 Moncton A%sT
# Ontario, Quebec
-# From Paul Eggert (1996-06-12):
-# Shanks writes that since 1970 most of Ontario has been like Toronto,
-# and most of Quebec has been like Montreal.
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger writes that since 1970 most of Ontario has been like
+# Toronto, and most of Quebec has been like Montreal.
# Thunder Bay skipped DST in 1973.
# Many smaller locales did not observe peacetime DST until 1974;
# Nipigon (EST) and Rainy River (CST) are the largest that we know of.
@@ -1035,7 +1149,9 @@ Zone America/Glace_Bay -3:59:48 - LMT 1902 Jun 15
# 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.
-# For what it's worth, Shanks says that Atikokan has agreed with
+#
+# From Paul Eggert (2006-03-22):
+# For what it's worth, Shanks & Pottenger say that Atikokan has agreed with
# Rainy River ever since standard time was introduced.
# From Paul Eggert (2000-10-02):
@@ -1086,7 +1202,8 @@ Rule Toronto 1920 only - Sep 26 0:00 0 S
Rule Toronto 1921 only - May 15 2:00 1:00 D
Rule Toronto 1921 only - Sep 15 2:00 0 S
Rule Toronto 1922 1923 - May Sun>=8 2:00 1:00 D
-# Shanks says 1923-09-19; assume it's a typo and that "-16" was meant.
+# Shanks & Pottenger say 1923-09-19; assume it's a typo and that "-16"
+# was meant.
Rule Toronto 1922 1926 - Sep Sun>=15 2:00 0 S
Rule Toronto 1924 1927 - May Sun>=1 2:00 1:00 D
# The 1927-to-1939 rules can be expressed more simply as
@@ -1110,9 +1227,10 @@ Rule Toronto 1949 only - Nov lastSun 0:00 0 S
Rule Toronto 1950 1973 - Apr lastSun 2:00 1:00 D
Rule Toronto 1950 only - Nov lastSun 2:00 0 S
Rule Toronto 1951 1956 - Sep lastSun 2:00 0 S
-# Shanks says Toronto ended DST a week early in 1971, namely on 1971-10-24,
-# but Mark Brader wrote (2003-05-31) that he checked the 1971-10-30 issue
-# of the Toronto Star, and it said that DST ended 1971-10-31 as usual.
+# Shanks & Pottenger say Toronto ended DST a week early in 1971,
+# namely on 1971-10-24, but Mark Brader wrote (2003-05-31) that he
+# checked the 1971-10-30 issue of the Toronto Star, and it said that
+# DST ended 1971-10-31 as usual.
Rule Toronto 1957 1973 - Oct lastSun 2:00 0 S
# From Paul Eggert (2003-07-27):
@@ -1166,6 +1284,30 @@ Zone America/Rainy_River -6:17:56 - LMT 1895
# Manitoba
+# From Chris Walton (2006-04-05):
+# Here is a copy of the new official time act ...
+# http://web2.gov.mb.ca/laws/statutes/ccsm/o030e.php
+# The act indicates that daylight savings ends at 2:00am.
+
+# From Rob Douglas (2006-04-06):
+# the old Manitoba Time Act - as amended by Bill 2, assented to
+# March 27, 1987 ... said ...
+# "between two o'clock Central Standard Time in the morning of
+# 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 =
+# 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
+# the 1987 version would apply - the changeover was at 2:00 Central
+# Standard Time (i.e. not until 3:00 Central Daylight Time).
+
+# From Paul Eggert (2006-04-10):
+# Shanks & Pottenger say Manitoba switched at 02:00 (not 02:00s)
+# starting 1966. Since 02:00s is clearly correct for 1967 on, assume
+# it was also 02:00s in 1966.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Winn 1916 only - Apr 23 0:00 1:00 D
Rule Winn 1916 only - Sep 17 0:00 0 S
@@ -1188,18 +1330,13 @@ Rule Winn 1959 only - Oct lastSun 2:00 0 S
Rule Winn 1960 only - Sep lastSun 2:00 0 S
Rule Winn 1963 only - Apr lastSun 2:00 1:00 D
Rule Winn 1963 only - Sep 22 2:00 0 S
-Rule Winn 1966 1986 - Apr lastSun 2:00 1:00 D
-Rule Winn 1966 1986 - Oct lastSun 2:00 0 S
-Rule Winn 1987 2006 - Apr Sun>=1 2:00s 1:00 D
-# From Paul Eggert (2000-10-02):
-# INMS (2000-09-12) says that, since 1988 at least, Manitoba switches from
-# DST at 03:00 local time. For now, assume it started in 1987.
-Rule Winn 1987 2006 - Oct lastSun 2:00s 0 S
-Rule Winn 2007 max - Mar Sun>=8 2:00s 1:00 D
-Rule Winn 2007 max - Nov Sun>=1 2:00s 0 S
+Rule Winn 1966 1986 - Apr lastSun 2:00s 1:00 D
+Rule Winn 1966 2005 - Oct lastSun 2:00s 0 S
+Rule Winn 1987 2005 - Apr Sun>=1 2:00s 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Winnipeg -6:28:36 - LMT 1887 Jul 16
- -6:00 Winn C%sT
+ -6:00 Winn C%sT 2006
+ -6:00 Canada C%sT
# Saskatchewan
@@ -1218,8 +1355,8 @@ Zone America/Winnipeg -6:28:36 - LMT 1887 Jul 16
# Willett (1914-03) notes that DST "has been in operation ... in the
# City of Moose Jaw, Saskatchewan, for one year."
-# From Paul Eggert (2000-10-02):
-# Shanks writes that since 1970 most of this region has been like Regina.
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger say that since 1970 this region has mostly been as Regina.
# Some western towns (e.g. Swift Current) switched from MST/MDT to CST in 1972.
# Other western towns (e.g. Lloydminster) are like Edmonton.
# Matthews and Vincent (1998) write that Denare Beach and Creighton
@@ -1305,17 +1442,18 @@ Rule Edm 1967 only - Oct lastSun 2:00 0 S
Rule Edm 1969 only - Apr lastSun 2:00 1:00 D
Rule Edm 1969 only - Oct lastSun 2:00 0 S
Rule Edm 1972 1986 - Apr lastSun 2:00 1:00 D
-Rule Edm 1972 max - Oct lastSun 2:00 0 S
-Rule Edm 1987 max - Apr Sun>=1 2:00 1:00 D
+Rule Edm 1972 2006 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Edmonton -7:33:52 - LMT 1906 Sep
- -7:00 Edm M%sT
+ -7:00 Edm M%sT 1987
+ -7:00 Canada M%sT
# British Columbia
-# From Paul Eggert (2000-10-02):
-# Shanks writes that since 1970 most of this region has been like Vancouver.
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger write that since 1970 most of this region has
+# been like Vancouver.
# Dawson Creek uses MST. Much of east BC is like Edmonton.
# Matthews and Vincent (1998) write that Creston is like Dawson Creek.
@@ -1328,11 +1466,11 @@ Rule Vanc 1945 only - Sep 30 2:00 0 S
Rule Vanc 1946 1986 - Apr lastSun 2:00 1:00 D
Rule Vanc 1946 only - Oct 13 2:00 0 S
Rule Vanc 1947 1961 - Sep lastSun 2:00 0 S
-Rule Vanc 1962 max - Oct lastSun 2:00 0 S
-Rule Vanc 1987 max - Apr Sun>=1 2:00 1:00 D
+Rule Vanc 1962 2006 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Vancouver -8:12:28 - LMT 1884
- -8:00 Vanc P%sT
+ -8:00 Vanc P%sT 1987
+ -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
@@ -1341,7 +1479,7 @@ Zone America/Dawson_Creek -8:00:56 - LMT 1884
# Northwest Territories, Nunavut, Yukon
-# From Paul Eggert (1999-10-29):
+# From Paul Eggert (2006-03-22):
# Dawson switched to PST in 1973. Inuvik switched to MST in 1979.
# Mathew Englander (1996-10-07) gives the following refs:
# * 1967. Paragraph 28(34)(g) of the Interpretation Act, S.C. 1967-68,
@@ -1350,7 +1488,8 @@ Zone America/Dawson_Creek -8:00:56 - LMT 1884
# * C.O. 1973/214 switched Yukon to PST on 1973-10-28 00:00.
# * O.I.C. 1980/02 established DST.
# * O.I.C. 1987/056 changed DST to Apr firstSun 2:00 to Oct lastSun 2:00.
-# Shanks says Yukon's 1973-10-28 switch was at 2:00; go with Englander.
+# Shanks & Pottenger say Yukon's 1973-10-28 switch was at 2:00; go
+# with Englander.
# From Rives McDow (1999-09-04):
# Nunavut ... moved ... to incorporate the whole territory into one time zone.
@@ -1458,6 +1597,10 @@ Zone America/Dawson_Creek -8:00:56 - LMT 1884
# From Paul Eggert (2005-07-26):
# For lack of better information, assume that Southampton Island observed
# daylight saving only during wartime.
+#
+# From Chris Walton (2006-04-25):
+# Daylight saving time will be extended by four weeks starting in 2007....
+# http://www.cbc.ca/north/story/nor-nwt-time-change.html
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule NT_YK 1918 only - Apr 14 2:00 1:00 D
@@ -1470,8 +1613,8 @@ Rule NT_YK 1945 only - Sep 30 2:00 0 S
Rule NT_YK 1965 only - Apr lastSun 0:00 2:00 DD
Rule NT_YK 1965 only - Oct lastSun 2:00 0 S
Rule NT_YK 1980 1986 - Apr lastSun 2:00 1:00 D
-Rule NT_YK 1980 max - Oct lastSun 2:00 0 S
-Rule NT_YK 1987 max - Apr Sun>=1 2:00 1:00 D
+Rule NT_YK 1980 2006 - Oct lastSun 2:00 0 S
+Rule NT_YK 1987 2006 - Apr Sun>=1 2:00 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Pangnirtung -4:22:56 - LMT 1884
-4:00 NT_YK A%sT 1995 Apr Sun>=1 2:00
@@ -1496,16 +1639,20 @@ Zone America/Cambridge_Bay -7:00:20 - LMT 1884
-6:00 - CST 2001 Apr 1 3:00
-7:00 Canada M%sT
Zone America/Yellowknife -7:37:24 - LMT 1884
- -7:00 NT_YK M%sT
+ -7:00 NT_YK M%sT 1980
+ -7:00 Canada M%sT
Zone America/Inuvik -8:54:00 - LMT 1884
-8:00 NT_YK P%sT 1979 Apr lastSun 2:00
- -7:00 NT_YK M%sT
+ -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
- -8:00 NT_YK P%sT
+ -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
- -8:00 NT_YK P%sT
+ -8:00 NT_YK P%sT 1980
+ -8:00 Canada P%sT
###############################################################################
@@ -1519,16 +1666,12 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
# history of Mexican local time (in Spanish)
# </a>.
#
-# Here are the discrepancies between Shanks and the MLoC.
+# Here are the discrepancies between Shanks & Pottenger (S&P) and the MLoC.
# (In all cases we go with the MLoC.)
-# Shanks reports that Baja was at -8:00 in 1922/1923.
-# Shanks says the 1930 transition in Baja was 1930-11-16.
-# Shanks reports no DST during summer 1931.
-# Shanks reports a transition at 1932-03-30 23:00, not 1932-04-01.
-# Shanks does not report transitions for Baja in 1945 or 1948.
-# Shanks reports southern Mexico transitions on 1981-12-01, not 12-23.
-# Shanks says Quintana Roo switched to -6:00 on 1982-12-02, and to -5:00
-# on 1997-10-26 at 02:00.
+# S&P report that Baja was at -8:00 in 1922/1923.
+# S&P say the 1930 transition in Baja was 1930-11-16.
+# S&P report no DST during summer 1931.
+# S&P report a transition at 1932-03-30 23:00, not 1932-04-01.
# From Gwillim Law (2001-02-20):
# There are some other discrepancies between the Decrees page and the
@@ -1536,10 +1679,6 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
# the researchers who prepared the Decrees page failed to find some of
# the relevant documents.
-# From Paul Eggert (2000-07-26):
-# Shanks gives 1942-04-01 instead of 1942-04-24, and omits the 1981
-# and 1988 DST experiments. Go with spin.com.mx.
-
# From Alan Perry (1996-02-15):
# A guy from our Mexico subsidiary finally found the Presidential Decree
# outlining the timezone changes in Mexico.
@@ -1739,7 +1878,8 @@ Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56
-8:00 - PST 1931 Apr 1
-8:00 1:00 PDT 1931 Sep 30
-8:00 - PST 1942 Apr 24
- -8:00 1:00 PWT 1945 Nov 12
+ -8:00 1:00 PWT 1945 Aug 14 23:00u
+ -8:00 1:00 PPT 1945 Nov 12 # Peace
-8:00 - PST 1948 Apr 5
-8:00 1:00 PDT 1949 Jan 14
-8:00 - PST 1954
@@ -1749,12 +1889,13 @@ Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56
-8:00 Mexico P%sT 2001
-8:00 US P%sT 2002 Feb 20
-8:00 Mexico P%sT
-# From Paul Eggert (2001-03-05):
+# From Paul Eggert (2006-03-22):
# Formerly there was an America/Ensenada zone, which differed from
# America/Tijuana only in that it did not observe DST from 1976
-# through 1995. This was as per Shanks. However, Guy Harris reports
+# 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
-# Tijuana observe DST," which contradicts Shanks but does imply that
+# 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
# other than America/Tijuana for Baja, but it's not clear yet what its
@@ -1798,7 +1939,7 @@ Zone America/Barbados -3:58:28 - LMT 1924 # Bridgetown
-4:00 Barb A%sT
# Belize
-# Whitman entirely disagrees with Shanks; go with Shanks.
+# Whitman entirely disagrees with Shanks; go with Shanks & Pottenger.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Belize 1918 1942 - Oct Sun>=2 0:00 0:30 HD
Rule Belize 1919 1943 - Feb Sun>=9 0:00 0 S
@@ -1827,7 +1968,8 @@ Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown
Rule CR 1979 1980 - Feb lastSun 0:00 1:00 D
Rule CR 1979 1980 - Jun Sun>=1 0:00 0 S
Rule CR 1991 1992 - Jan Sat>=15 0:00 1:00 D
-# IATA SSIM (1991-09) says the following was at 1:00; go with Shanks.
+# IATA SSIM (1991-09) says the following was at 1:00;
+# 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'.
@@ -1853,12 +1995,12 @@ Zone America/Costa_Rica -5:36:20 - LMT 1890 # San Jose
# From Evert van der Veer via Steffen Thorsen (2004-10-28):
# Cuba is not going back to standard time this year.
-# From Paul Eggert (2004-10-28):
+# From Paul Eggert (2006-03-22):
# http://www.granma.cu/ingles/2004/septiembre/juev30/41medid-i.html
# says that it's due to a problem at the Antonio Guiteras
# thermoelectric plant, and says "This October there will be no return
# to normal hours (after daylight saving time)".
-# For now, let's assume that it's a one-year temporary measure.
+# For now, let's assume that it's a temporary measure.
# From Carlos A. Carnero Delgado (2005-11-12):
# This year (just like in 2004-2005) there's no change in time zone
@@ -1963,6 +2105,14 @@ Zone America/Guadeloupe -4:06:08 - LMT 1911 Jun 8 # Pointe a Pitre
-4:00 - AST
# 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,
+# 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
+# 2006-04-29 24:00 (Guatemalan standard time) to 2006-09-30 (time unspecified).
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Guat 1973 only - Nov 25 0:00 1:00 D
Rule Guat 1974 only - Feb 24 0:00 0 S
@@ -1970,6 +2120,8 @@ Rule Guat 1983 only - May 21 0:00 1:00 D
Rule Guat 1983 only - Sep 22 0:00 0 S
Rule Guat 1991 only - Mar 23 0:00 1:00 D
Rule Guat 1991 only - Sep 7 0:00 0 S
+Rule Guat 2006 only - Apr 30 0:00 1:00 D
+Rule Guat 2006 only - Oct 1 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5
-6:00 Guat C%sT
@@ -1994,23 +2146,36 @@ Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5
# October 2005.
#
# "Port-au-Prince, March 31, 2005"
+#
+# From Steffen Thorsen (2006-04-04):
+# I have been informed by users that Haiti observes DST this year like
+# last year, so the current "only" rule for 2005 might be changed to a
+# "max" rule or to last until 2006. (Who knows if they will observe DST
+# next year or if they will extend their DST like US/Canada next year).
+#
+# I have found this article about it (in French):
+# http://www.haitipressnetwork.com/news.cfm?articleID=7612
+#
+# The reason seems to be an energy crisis.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Haiti 1983 only - May 8 0:00 1:00 D
Rule Haiti 1984 1987 - Apr lastSun 0:00 1:00 D
Rule Haiti 1983 1987 - Oct lastSun 0:00 0 S
-# Shanks says AT is 2:00, but IATA SSIM (1991/1997) says 1:00s. Go with IATA.
+# Shanks & Pottenger say AT is 2:00, but IATA SSIM (1991/1997) says 1:00s.
+# Go with IATA.
Rule Haiti 1988 1997 - Apr Sun>=1 1:00s 1:00 D
Rule Haiti 1988 1997 - Oct lastSun 1:00s 0 S
-Rule Haiti 2005 only - Apr Sun>=1 0:00 1:00 D
-Rule Haiti 2005 only - Oct lastSun 0:00 0 S
+Rule Haiti 2005 max - Apr Sun>=1 0:00 1:00 D
+Rule Haiti 2005 max - Oct lastSun 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Port-au-Prince -4:49:20 - LMT 1890
-4:49 - PPMT 1917 Jan 24 12:00 # P-a-P MT
-5:00 Haiti E%sT
# Honduras
-# Shanks says 1921 Jan 1; go with Whitman's more precise Apr 1.
+# Shanks & Pottenger say 1921 Jan 1; go with Whitman's more precise Apr 1.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Tegucigalpa -5:48:52 - LMT 1921 Apr
-6:00 Salv C%sT
@@ -2025,7 +2190,7 @@ Zone America/Tegucigalpa -5:48:52 - LMT 1921 Apr
# From U. S. Naval Observatory (1989-01-19):
# JAMAICA 5 H BEHIND UTC
-# From Shanks:
+# From Shanks & Pottenger:
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Jamaica -5:07:12 - LMT 1890 # Kingston
-5:07:12 - KMT 1912 Feb # Kingston Mean Time
@@ -2042,18 +2207,16 @@ Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France
-4:00 - AST
# Montserrat
-# From Paul Eggert (1997-08-31):
-# Recent volcanic eruptions have forced evacuation of Plymouth, the capital.
-# Luckily, Olveston, the current de facto capital, has the same longitude.
+# 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 NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Olveston
+Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Cork Hill
-4:00 - AST
# Nicaragua
#
-# From Steffen Thorsen (1998-12-29):
-# Nicaragua seems to be back at -6:00 but I have not been able to find when
-# they changed from -5:00.
+# This uses Shanks & Pottenger for times before 2005.
#
# From Steffen Thorsen (2005-04-12):
# I've got reports from 8 different people that Nicaragua just started
@@ -2067,8 +2230,7 @@ Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Olveston
#
# From Paul Eggert (2005-05-01):
# The decree doesn't say anything about daylight saving, but for now let's
-# assume that it is daylight saving and that they'll switch back on the
-# 3rd Sunday in September.
+# assume that it is daylight saving....
#
# From Gwillim Law (2005-04-21):
# The Associated Press story on the time change, which can be found at
@@ -2086,20 +2248,32 @@ Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Olveston
# http://www.presidencia.gob.ni/presidencia/files_index/secretaria/comunicados/2005/septiembre/26septiembre-cambio-hora.htm
# (2005-09-26)
#
+# From Jesper Norgaard Welen (2006-04-24):
+# http://www.elnuevodiario.com.ni/2006/04/26/nacionales/18036
+# It claims that DST will start 2006-04-30 at 2:00, and will last until the
+# end of august (without being more specific).
+# From Paul Eggert (2006-04-26):
+# Yesterday the president of Nicaragua announced that DST will begin
+# April 30 at 02:00. No end date was announced.
+# http://www.presidencia.gob.ni/Presidencia/Files_index/Secretaria/Comunicados/2006/PRESIDENTE/250406-Que%20la%20Crisis%20originada%20por%20el%20alza%20constante%20de%20los%20precios%20internacionales.htm
+# For now, assume DST ends first Sunday in September at 02:00.
+#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Nic 1979 1980 - Mar Sun>=16 0:00 1:00 D
Rule Nic 1979 1980 - Jun Mon>=23 0:00 0 S
-Rule Nic 1992 only - Jan 1 4:00 1:00 D
-Rule Nic 1992 only - Sep 24 0:00 0 S
Rule Nic 2005 only - Apr 10 0:00 1:00 D
Rule Nic 2005 only - Oct 2 0:00 0 S
+Rule Nic 2006 only - Apr 30 2:00 1:00 D
+Rule Nic 2006 only - Sep Sun>=1 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
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 1993 Jan 1 4:00
- -5:00 - EST 1998 Dec
+ -6:00 Nic C%sT 1992 Jan 1 4:00
+ -5:00 - EST 1992 Sep 24
+ -6:00 - CST 1993
+ -5:00 - EST 1997
-6:00 Nic C%sT
# Panama
@@ -2113,7 +2287,7 @@ Zone America/Panama -5:18:08 - LMT 1890
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan
-4:00 - AST 1942 May 3
- -4:00 1:00 AWT 1945 Sep 30 2:00
+ -4:00 US A%sT 1946
-4:00 - AST
# St Kitts-Nevis
@@ -2142,8 +2316,8 @@ Zone America/St_Vincent -4:04:56 - LMT 1890 # Kingstown
-4:00 - AST
# Turks and Caicos
-# From Paul Eggert (1998-08-06):
-# Shanks says they use US DST rules, but IATA SSIM (1991/1998)
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger say they use US DST rules, but IATA SSIM (1991/1998)
# says they switch at midnight. Go with IATA SSIM.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule TC 1979 1986 - Apr lastSun 0:00 1:00 D
diff --git a/elsie.nci.nih.gov/src/pacificnew b/elsie.nci.nih.gov/src/pacificnew
index 86dd688..667940b 100644
--- a/elsie.nci.nih.gov/src/pacificnew
+++ b/elsie.nci.nih.gov/src/pacificnew
@@ -1,4 +1,4 @@
-# @(#)pacificnew 7.10
+# @(#)pacificnew 8.1
# From Arthur David Olson (1989-04-05):
# On 1989-04-05, the U. S. House of Representatives passed (238-154) a bill
diff --git a/elsie.nci.nih.gov/src/private.h b/elsie.nci.nih.gov/src/private.h
index 33dc4c3..2837b70 100644
--- a/elsie.nci.nih.gov/src/private.h
+++ b/elsie.nci.nih.gov/src/private.h
@@ -21,7 +21,7 @@
#ifndef lint
#ifndef NOID
-static char privatehid[] = "@(#)private.h 7.55";
+static char privatehid[] = "@(#)private.h 8.2";
#endif /* !defined NOID */
#endif /* !defined lint */
@@ -89,7 +89,7 @@ static char privatehid[] = "@(#)private.h 7.55";
#include "stdio.h"
#include "errno.h"
#include "string.h"
-#include "limits.h" /* for CHAR_BIT */
+#include "limits.h" /* for CHAR_BIT et al. */
#include "time.h"
#include "stdlib.h"
@@ -125,20 +125,51 @@ static char privatehid[] = "@(#)private.h 7.55";
#define is_digit(c) ((unsigned)(c) - '0' <= 9)
/*
+** Define HAVE_STDINT_H's default value here, rather than at the
+** start, since __GLIBC__'s value depends on previously-included
+** files.
+** (glibc 2.1 and later have stdint.h, even with pre-C99 compilers.)
+*/
+#ifndef HAVE_STDINT_H
+#define HAVE_STDINT_H \
+ (199901 <= __STDC_VERSION__ || \
+ 2 < (__GLIBC__ + (0 < __GLIBC_MINOR__)))
+#endif /* !defined HAVE_STDINT_H */
+
+#if HAVE_STDINT_H
+#include "stdint.h"
+#endif /* !HAVE_STDINT_H */
+
+#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;
+#else /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
+#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 */
+typedef long int_fast64_t;
+#endif /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
+#endif /* !defined INT_FAST64_MAX */
+
+#ifndef INT32_MAX
+#define INT32_MAX 0x7fffffff
+#endif /* !defined INT32_MAX */
+#ifndef INT32_MIN
+#define INT32_MIN (-1 - INT32_MAX)
+#endif /* !defined INT32_MIN */
+
+/*
** Workarounds for compilers/systems.
*/
/*
-** SunOS 4.1.1 cc lacks prototypes.
+** If your compiler lacks prototypes, "#define P(x) ()".
*/
#ifndef P
-#ifdef __STDC__
#define P(x) x
-#endif /* defined __STDC__ */
-#ifndef __STDC__
-#define P(x) ()
-#endif /* !defined __STDC__ */
#endif /* !defined P */
/*
@@ -211,14 +242,14 @@ extern char * asctime_r();
** Private function declarations.
*/
-char * icalloc P((int nelem, int elsize));
-char * icatalloc P((char * old, const char * new));
-char * icpyalloc P((const char * string));
-char * imalloc P((int n));
-void * irealloc P((void * pointer, int size));
-void icfree P((char * pointer));
-void ifree P((char * pointer));
-char * scheck P((const char *string, char *format));
+char * icalloc P((int nelem, int elsize));
+char * icatalloc P((char * old, const char * new));
+char * icpyalloc P((const char * string));
+char * imalloc P((int n));
+void * irealloc P((void * pointer, int size));
+void icfree P((char * pointer));
+void ifree P((char * pointer));
+const char * scheck P((const char * string, const char * format));
/*
** Finally, some convenience items.
@@ -310,6 +341,26 @@ char *asctime_r P((struct tm const *, char *));
char *ctime_r P((time_t const *, char *));
#endif /* HAVE_INCOMPATIBLE_CTIME_R */
+#ifndef YEARSPERREPEAT
+#define YEARSPERREPEAT 400 /* years before a Gregorian repeat */
+#endif /* !defined YEARSPERREPEAT */
+
+/*
+** The Gregorian year averages 365.2425 days, which is 31556952 seconds.
+*/
+
+#ifndef AVGSECSPERYEAR
+#define AVGSECSPERYEAR 31556952L
+#endif /* !defined AVGSECSPERYEAR */
+
+#ifndef SECSPERREPEAT
+#define SECSPERREPEAT ((int_fast64_t) YEARSPERREPEAT * (int_fast64_t) AVGSECSPERYEAR)
+#endif /* !defined SECSPERREPEAT */
+
+#ifndef SECSPERREPEAT_BITS
+#define SECSPERREPEAT_BITS 34 /* ceil(log2(SECSPERREPEAT)) */
+#endif /* !defined SECSPERREPEAT_BITS */
+
/*
** UNIX was a registered trademark of The Open Group in 2003.
*/
diff --git a/elsie.nci.nih.gov/src/scheck.c b/elsie.nci.nih.gov/src/scheck.c
index 2dd9b35..1f21223 100644
--- a/elsie.nci.nih.gov/src/scheck.c
+++ b/elsie.nci.nih.gov/src/scheck.c
@@ -1,6 +1,6 @@
#ifndef lint
#ifndef NOID
-static char elsieid[] = "@(#)scheck.c 8.16";
+static char elsieid[] = "@(#)scheck.c 8.18";
#endif /* !defined lint */
#endif /* !defined NOID */
@@ -8,20 +8,19 @@ static char elsieid[] = "@(#)scheck.c 8.16";
#include "private.h"
-char *
+const char *
scheck(string, format)
const char * const string;
-char * const format;
+const char * const format;
{
register char * fbuf;
register const char * fp;
register char * tp;
register int c;
- register char * result;
+ register const char * result;
char dummy;
- static char nada;
- result = &nada;
+ result = "";
if (string == NULL || format == NULL)
return result;
fbuf = imalloc((int) (2 * strlen(format) + 4));
diff --git a/elsie.nci.nih.gov/src/solar87 b/elsie.nci.nih.gov/src/solar87
index 21ba2c2..7183932 100644
--- a/elsie.nci.nih.gov/src/solar87
+++ b/elsie.nci.nih.gov/src/solar87
@@ -1,4 +1,4 @@
-# @(#)solar87 7.4
+# @(#)solar87 8.1
# So much for footnotes about Saudi Arabia.
# Apparent noon times below are for Riyadh; your mileage will vary.
diff --git a/elsie.nci.nih.gov/src/solar88 b/elsie.nci.nih.gov/src/solar88
index 7e15f2b..b4cfe8e 100644
--- a/elsie.nci.nih.gov/src/solar88
+++ b/elsie.nci.nih.gov/src/solar88
@@ -1,4 +1,4 @@
-# @(#)solar88 7.4
+# @(#)solar88 8.1
# Apparent noon times below are for Riyadh; they're a bit off for other places.
# Times were computed using formulas in the U.S. Naval Observatory's
diff --git a/elsie.nci.nih.gov/src/solar89 b/elsie.nci.nih.gov/src/solar89
index 3c36b6a..8c48531 100644
--- a/elsie.nci.nih.gov/src/solar89
+++ b/elsie.nci.nih.gov/src/solar89
@@ -1,4 +1,4 @@
-# @(#)solar89 7.5
+# @(#)solar89 8.1
# Apparent noon times below are for Riyadh; they're a bit off for other places.
# Times were computed using a formula provided by the U. S. Naval Observatory:
diff --git a/elsie.nci.nih.gov/src/southamerica b/elsie.nci.nih.gov/src/southamerica
index eb7b5c7..3503074 100644
--- a/elsie.nci.nih.gov/src/southamerica
+++ b/elsie.nci.nih.gov/src/southamerica
@@ -1,14 +1,14 @@
-# @(#)southamerica 7.66
+# @(#)southamerica 8.3
# <pre>
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert (1999-07-07):
+# From Paul Eggert (2006-03-22):
# A good source for time zone historical data outside the U.S. is
-# Thomas G. Shanks, The International Atlas (5th edition),
-# San Diego: ACS Publications, Inc. (1999).
+# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
+# San Diego: ACS Publications, Inc. (2003).
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
@@ -16,8 +16,8 @@
# published semiannually. Law sent in several helpful summaries
# of the IATA's data after 1990.
#
-# Except where otherwise noted, Shanks is the source for entries through 1990,
-# and IATA SSIM is the source for entries after 1990.
+# Except where otherwise noted, Shanks & Pottenger is the source for
+# entries through 1990, and IATA SSIM is the source for entries afterwards.
#
# Earlier editions of these tables used the North American style (e.g. ARST and
# ARDT for Argentine Standard and Daylight Time), but the following quote
@@ -92,8 +92,6 @@ Rule Arg 1988 only - Dec 1 0:00 1:00 S
# obtaining the data from the:
# Talleres de Hidrografia Naval Argentina
# (Argentine Naval Hydrography Institute)
-#
-# Shanks stops after 1992-03-01; go with Otero.
Rule Arg 1989 1993 - Mar Sun>=1 0:00 0 -
Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 S
#
@@ -150,12 +148,12 @@ Rule Arg 2000 only - Mar Sun>=1 0:00 0 -
# 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 (2002-01-22):
+# From Paul Eggert (2006-03-22):
# <a href="http://www.spicasc.net/horvera.html">
-# Hora de verano para la Republica Argentina (2000-10-01)
+# Hora de verano para la Republica Argentina (2003-06-08)
# </a> 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.
+# over Shanks & Pottenger.
#
# From Mariano Absatz (2004-06-05):
# These media articles from a major newspaper mostly cover the current state:
@@ -202,8 +200,8 @@ Rule Arg 2000 only - Mar Sun>=1 0:00 0 -
# http://www.sanjuan.gov.ar/prensa/archivo/000426.html
# http://www.sanjuan.gov.ar/prensa/archivo/000441.html
-# Unless otherwise specified, data are from Shanks through 1992, from
-# the IATA otherwise. As noted below, Shanks says that
+# Unless otherwise specified, data 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, but we
# haven't verified this yet so for now we'll keep it a single region.
#
@@ -222,7 +220,7 @@ Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
# Formosa (FM), Salta (SA), Santiago del Estero (SE), Cordoba (CB),
# San Luis (SL), La Pampa (LP), Neuquen (NQ), Rio Negro (RN)
#
-# Shanks also makes the following claims, which we haven't verified:
+# Shanks & Pottenger also make the following claims, which we haven't verified:
# - Formosa switched to -3:00 on 1991-01-07.
# - Misiones switched to -3:00 on 1990-12-29.
# - Chaco switched to -3:00 on 1991-01-04.
@@ -712,7 +710,7 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
# It clearly confirms my earlier suggestion, that DST begins at 22:00
# on Easter Island.... But it also seems to be saying that the
# observance of DST in Chile began in 1966, rather than 1969 as
-# ... [Shanks] has it....
+# ... [Shanks & Pottenger have] it....
#
# My translation:
#
@@ -724,8 +722,8 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
# to Easter Island and Sala y Gomez Island, will be set forward at
# midnight and at 22:00, respectively, by 20 minutes."
-# From Paul Eggert (2001-05-04):
-# Go with this article in preference to Shanks's 1969 date for modern DST.
+# From Paul Eggert (2006-03-22):
+# Go with Law in preference to Shanks & Pottenger's 1969 date for modern DST.
# Assume this rule has been used since DST was introduced in the islands.
# From Paul Eggert (2002-10-24):
@@ -752,7 +750,7 @@ Zone America/Santiago -4:42:40 - LMT 1890
-4:00 Chile CL%sT
Zone Pacific/Easter -7:17:28 - LMT 1890 # Mataveri
-7:17:28 - MMT 1932 Sep # Mataveri Mean Time
- -7:00 Chile EAS%sT 1982 Mar 14 # Easter I Time
+ -7:00 Chile EAS%sT 1982 Mar 13 21:00 # Easter I Time
-6:00 Chile EAS%sT
#
# Sala y Gomez Island is like Pacific/Easter.
@@ -760,11 +758,9 @@ Zone Pacific/Easter -7:17:28 - LMT 1890 # Mataveri
# San Felix, and Antarctic bases, are like America/Santiago.
# Colombia
-# Shanks specifies 24:00 for 1992 transition times; go with IATA,
-# as it seems implausible to change clocks at midnight New Year's Eve.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule CO 1992 only - May 2 0:00 1:00 S
-Rule CO 1992 only - Dec 31 0:00 0 -
+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:20 - LMT 1884 Mar 13
-4:56:20 - BMT 1914 Nov 23 # Bogota Mean Time
@@ -773,10 +769,21 @@ Zone America/Bogota -4:56:20 - LMT 1884 Mar 13
# no information; probably like America/Bogota
# Curacao
-# Shanks says that Bottom and Oranjestad 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.
-# This all predates our 1970 cutoff, though.
+#
+# 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.
+# This all predates our 1970 cutoff, though.
+#
+# By July 2007 Curacao 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:44 - LMT 1912 Feb 12 # Willemstad
-4:30 - ANT 1965 # Netherlands Antilles Time
@@ -793,9 +800,9 @@ Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
# Falklands
-# From Paul Eggert (2001-03-05):
-# Between 1990 and 2000 inclusive, Shanks and the IATA agree except
-# the IATA gives 1996-09-08. Go with Shanks.
+# From Paul Eggert (2006-03-22):
+# Between 1990 and 2000 inclusive, Shanks & Pottenger and the IATA agree except
+# the IATA gives 1996-09-08. Go with Shanks & Pottenger.
# From Falkland Islands Government Office, London (2001-01-22)
# via Jesper Norgaard:
@@ -878,9 +885,9 @@ Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown
-4:00 - GYT
# Paraguay
-# From Paul Eggert (1999-10-29):
-# Shanks (1999) says that spring transitions are from 01:00 -> 02:00,
-# and autumn transitions are from 00:00 -> 23:00. Go with earlier
+# 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
# editions of Shanks, and with the IATA, who say transitions occur at 00:00.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Para 1975 1988 - Oct 1 0:00 1:00 S
@@ -915,9 +922,9 @@ Rule Para 1996 only - Mar 1 0:00 0 -
# http://gateway.abc.com.py:8000/pub/pag04.mbr/artic?FHA=2001-03-03-02.24.52.900592
#
Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 S
-# IATA SSIM (1997-09) says Mar 1; go with Shanks.
+# IATA SSIM (1997-09) says Mar 1; go with Shanks & Pottenger.
Rule Para 1997 only - Feb lastSun 0:00 0 -
-# Shanks says 1999-02-28; IATA SSIM (1999-02) says 1999-02-27, but
+# Shanks & Pottenger say 1999-02-28; IATA SSIM (1999-02) says 1999-02-27, but
# (1999-09) reports no date; go with above sources and Gerd Knops (2001-02-27).
Rule Para 1998 2001 - Mar Sun>=1 0:00 0 -
# From Rives McDow (2002-02-28):
@@ -949,8 +956,8 @@ Zone America/Asuncion -3:50:40 - LMT 1890
# 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.
#
-# From Paul Eggert (2003-11-02):
-# Shanks doesn't have this transition. Assume 1986 was like 1987.
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger don't have this transition. Assume 1986 was like 1987.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Peru 1938 only - Jan 1 0:00 1:00 S
@@ -961,7 +968,7 @@ Rule Peru 1986 1987 - Jan 1 0:00 1:00 S
Rule Peru 1986 1987 - Apr 1 0:00 0 -
Rule Peru 1990 only - Jan 1 0:00 1:00 S
Rule Peru 1990 only - Apr 1 0:00 0 -
-# IATA is ambiguous for 1993/1995; go with Shanks.
+# IATA is ambiguous for 1993/1995; go with Shanks & Pottenger.
Rule Peru 1994 only - Jan 1 0:00 1:00 S
Rule Peru 1994 only - Apr 1 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -994,23 +1001,23 @@ Zone America/Port_of_Spain -4:06:04 - LMT 1912 Mar 2
# Uruguay
# From Paul Eggert (1993-11-18):
# Uruguay wins the prize for the strangest peacetime manipulation of the rules.
-# From Shanks:
+# From Shanks & Pottenger:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# Whitman gives 1923 Oct 1; go with Shanks.
+# Whitman gives 1923 Oct 1; go with Shanks & Pottenger.
Rule Uruguay 1923 only - Oct 2 0:00 0:30 HS
Rule Uruguay 1924 1926 - Apr 1 0:00 0 -
Rule Uruguay 1924 1925 - Oct 1 0:00 0:30 HS
Rule Uruguay 1933 1935 - Oct lastSun 0:00 0:30 HS
-# Shanks gives 1935 Apr 1 0:00 and 1936 Mar 30 0:00; go with Whitman.
+# Shanks & Pottenger give 1935 Apr 1 0:00 & 1936 Mar 30 0:00; go with Whitman.
Rule Uruguay 1934 1936 - Mar Sat>=25 23:30s 0 -
Rule Uruguay 1936 only - Nov 1 0:00 0:30 HS
Rule Uruguay 1937 1941 - Mar lastSun 0:00 0 -
-# Whitman gives 1937 Oct 3; go with Shanks.
+# Whitman gives 1937 Oct 3; go with Shanks & Pottenger.
Rule Uruguay 1937 1940 - Oct lastSun 0:00 0:30 HS
# Whitman gives 1941 Oct 24 - 1942 Mar 27, 1942 Dec 14 - 1943 Apr 13,
-# and 1943 Apr 13 ``to present time''; go with Shanks.
-Rule Uruguay 1941 only - Aug 1 0:00 0 -
-Rule Uruguay 1942 only - Jan 1 0:00 0:30 HS
+# and 1943 Apr 13 ``to present time''; go with Shanks & Pottenger.
+Rule Uruguay 1941 only - Aug 1 0:00 0:30 HS
+Rule Uruguay 1942 only - Jan 1 0:00 0 -
Rule Uruguay 1942 only - Dec 14 0:00 1:00 S
Rule Uruguay 1943 only - Mar 14 0:00 0 -
Rule Uruguay 1959 only - May 24 0:00 1:00 S
@@ -1036,7 +1043,7 @@ Rule Uruguay 1988 only - Mar 14 0:00 0 -
Rule Uruguay 1988 only - Dec 11 0:00 1:00 S
Rule Uruguay 1989 only - Mar 12 0:00 0 -
Rule Uruguay 1989 only - Oct 29 0:00 1:00 S
-# Shanks says no DST was observed in 1990/1 and 1991/2,
+# Shanks & Pottenger say no DST was observed in 1990/1 and 1991/2,
# and that 1992/3's DST was from 10-25 to 03-01. Go with IATA.
Rule Uruguay 1990 1992 - Mar Sun>=1 0:00 0 -
Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 S
diff --git a/elsie.nci.nih.gov/src/strftime.c b/elsie.nci.nih.gov/src/strftime.c
index af328ce..e6ca193 100644
--- a/elsie.nci.nih.gov/src/strftime.c
+++ b/elsie.nci.nih.gov/src/strftime.c
@@ -1,6 +1,6 @@
#ifndef lint
#ifndef NOID
-static char elsieid[] = "@(#)strftime.c 7.75";
+static char elsieid[] = "@(#)strftime.c 8.1";
/*
** Based on the UCB version with the ID appearing below.
** This is ANSIish only when "multibyte character == plain character".
diff --git a/elsie.nci.nih.gov/src/systemv b/elsie.nci.nih.gov/src/systemv
index a5b4209..6cf9645 100644
--- a/elsie.nci.nih.gov/src/systemv
+++ b/elsie.nci.nih.gov/src/systemv
@@ -1,4 +1,4 @@
-# @(#)systemv 7.5
+# @(#)systemv 8.1
# Old rules, should the need arise.
# No attempt is made to handle Newfoundland, since it cannot be expressed
diff --git a/elsie.nci.nih.gov/src/time2posix.3 b/elsie.nci.nih.gov/src/time2posix.3
index 3ce2e0e..96959c6 100644
--- a/elsie.nci.nih.gov/src/time2posix.3
+++ b/elsie.nci.nih.gov/src/time2posix.3
@@ -116,6 +116,6 @@ difftime(3),
localtime(3),
mktime(3),
time(2)
-.\" @(#)time2posix.3 7.8
+.\" @(#)time2posix.3 8.1
.\" This file is in the public domain, so clarified as of
.\" 1996-06-05 by Arthur David Olson.
diff --git a/elsie.nci.nih.gov/src/tz-art.htm b/elsie.nci.nih.gov/src/tz-art.htm
index 4abbd51..30ef57b 100644
--- a/elsie.nci.nih.gov/src/tz-art.htm
+++ b/elsie.nci.nih.gov/src/tz-art.htm
@@ -10,7 +10,7 @@ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
<body>
<h1>Time and the Arts</h1>
<address>
-@(#)tz-art.htm 7.59
+@(#)tz-art.htm 8.3
</address>
<p>
Please send corrections to this web page to the
@@ -160,6 +160,16 @@ Richard Teitelbaum, modular moog and micromoog synthesizer</td></tr>
<tr><td>ADO Rating</td><td>black dot</td></tr>
<tr><td><a href="http://www.allmusic.com/cg/amg.dll?p=amg&amp;sql=A5bkvu3xjan1k">AMG Rating</a></td><td>unrated</td></tr>
<tr><td>&nbsp;</td></tr>
+<tr><td>Artist</td><td>Charles Gayle</td></tr>
+<tr><td>CD</td><td>Time Zones</td></tr>
+<tr><td>Copyright Date</td><td>2006</td></tr>
+<tr><td>Label</td><td>Tompkins Square</td></tr>
+<tr><td>ID</td><td>TSQ2839</td></tr>
+<tr><td>Total Time</td><td>49:06</td></tr>
+<tr><td>Personnel</td><td>Charles Gayle, piano</td></tr>
+<tr><td>ADO Rating</td><td>1 star</td></tr>
+<tr><td><a href="http://www.allmusic.com/cg/amg.dll?p=amg&amp;sql=10:13rc28vw054a">AMG Rating</a></td><td>4.5 stars</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>
@@ -173,13 +183,33 @@ is available at
<a href="http://fourmilab.ch/etexts/www/tdm80j">http://fourmilab.ch/etexts/www/tdm80j</a>
An on-line English-language translation of the book is available at
<a href="http://www.literature.org/Works/Jules-Verne/eighty">http://www.literature.org/Works/Jules-Verne/eighty</a></td></tr>
+
+<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>Copyright Date</td><td>1994</td></tr>
+<tr><td>Notes</td><td>
+"...the story of a 17th century Italian nobleman trapped near an island
+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>The Thirteenth Time Zone</td></tr>
+<tr><td>Notes</td><td>
+"It's fiction, but it's based on his experiences and travels.
+<a href="http://www.thethirteenthtimezone.com">
+http://www.thethirteenthtimezone.com
+</a>" (Paul Eggert, 2006-04-22)
+</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>
</table>
-<hr />
+<hr>
<ul>
<li>
An episode of "The Adventures of Superman" entitled "The Mysterious
diff --git a/elsie.nci.nih.gov/src/tz-link.htm b/elsie.nci.nih.gov/src/tz-link.htm
index 2b593fa..6b21cbb 100644
--- a/elsie.nci.nih.gov/src/tz-link.htm
+++ b/elsie.nci.nih.gov/src/tz-link.htm
@@ -9,7 +9,7 @@
<meta http-equiv="Content-type" content='text/html; charset="US-ASCII"' />
<meta name="DC.Creator" content="Eggert, Paul" />
<meta name="DC.Contributor" content="Olson, Arthur David" />
-<meta name="DC.Date" content="2005-11-17" />
+<meta name="DC.Date" content="2006-03-31" />
<meta name="DC.Description"
content="Sources of information about time zones and daylight saving time" />
<meta name="DC.Identifier" content="http://www.twinsun.com/tz/tz-link.htm" />
@@ -19,7 +19,7 @@
<body>
<h1>Sources for Time Zone and Daylight Saving Time Data</h1>
<address>
-@(#)tz-link.htm 7.53
+@(#)tz-link.htm 8.3
</address>
<p>
Please send corrections to this web page to the
@@ -31,7 +31,8 @@ that represent the history of local time
for many representative locations around the globe.
It is updated periodically to reflect changes made by political bodies
to <a href="http://en.wikipedia.org/wiki/Time_zone">time zone</a>
-boundaries, <a href="http://en.wikipedia.org/wiki/UTC"><abbr
+boundaries, <a
+href="http://en.wikipedia.org/wiki/Coordinated_Universal_Time"><abbr
title="Coordinated Universal Time">UTC</abbr></a> offsets, and
<a href="http://en.wikipedia.org/wiki/Daylight_saving">daylight-saving</a>
rules.
@@ -68,7 +69,8 @@ title="daylight saving time">DST</abbr>);
<code>America/Detroit</code> represents most of Michigan, which uses
eastern time but with different <abbr>DST</abbr> rules in 1975;
and other entries represent smaller regions like Starke County,
-Indiana, which switched from central to eastern time in 1991.
+Indiana, which switched from central to eastern time in 1991
+and switched back in 2006.
To use the database on an extended <a
href="http://en.wikipedia.org/wiki/POSIX"><abbr
title="Portable Operating System Interface">POSIX</abbr></a>
@@ -141,7 +143,22 @@ title="Calendaring and Scheduling Working Group">calsch</abbr>)</a>
covers time zone
data; see its VTIMEZONE calendar component.
The <a href="http://www.calconnect.org/">Calendaring and Scheduling
-Consortium</a> is promoting further work in this area.</li>
+Consortium</a> is promoting further work in this area. <a
+href="ftp://ftp.rfc-editor.org/internet-drafts/draft-royer-ical-basic-04.txt">iCalendar
+Basic</a> is a draft simplified definition that omits VTIMEZONE due to
+its complexity, but this removal is expected to appear as an
+independent specification later. <a
+href="http://www.calconnect.org/publications/icalendartimezoneproblemsandrecommendationsv1.0.pdf">iCalendar
+TIMEZONE Problems and Recommendations</a> offers guidelines and
+recommendations for the use of VTIMEZONE and <code>tz</code>.</li>
+<li><a
+href="http://ietfreport.isoc.org/idref/draft-royer-timezone-registry/">Time
+Zone Registry</a> proposes an <a href="http://www.iana.org/"><abbr
+title="Internet Assigned Numbers Authority">IANA</abbr></a> time zone
+registration process that would establish unique names for each
+version of each <code>tz</code> zone, along with a polygonal
+representation of the geographical area corresponding to the
+zone. (This draft has expired, though.)</li>
<li>The <a
href="http://lists.w3.org/Archives/Public/www-rdf-calendar/">www-rdf-calendar</a>
list discusses <a
@@ -196,6 +213,16 @@ is freely available under a <abbr>BSD</abbr>-style license.</li>
Zone Library</a> compiles <code>tz</code> source into
<a href="http://www.python.org/">Python</a>.
It is freely available under a <abbr>BSD</abbr>-style license.</li>
+<li><a href="http://tzinfo.rubyforge.org/">TZInfo - Ruby Timezone Library</a>
+compiles <code>tz</code> source into
+<a href="http://www.ruby-lang.org/">Ruby</a>.
+It is freely available under the <abbr
+title="Massachusetts Institute of Technology">MIT</abbr> license.</li>
+<li>Starting with version 8.5, <a href="http://www.tcl.tk/">Tcl</a>
+contains a developer-oriented parser that compiles <samp>tz</samp>
+source into text files, along with a runtime that can read those
+files. Tcl is freely available under a <abbr>BSD</abbr>-style
+license.</li>
</ul>
<h2>Other <code>tz</code> binary file readers</h2>
<ul>
@@ -215,6 +242,8 @@ It is freely available under the <abbr>LGPL</abbr>.</li>
<li><a href="http://s.keim.free.fr/tz/doc.html">Python time zones</a>
is a <code>tz</code> binary file reader written in Python.
It is freely available under a <abbr>BSD</abbr>-style license.</li>
+<li>Tcl, mentioned above, also contains a
+<code>tz</code> binary file reader.</li>
</ul>
<h2>Other <code>tz</code>-based time zone software</h2>
<ul>
@@ -235,7 +264,7 @@ a Mac OS X program. Its developers
<a href="http://www.veladg.com/tzoffer.html">offer free
licenses</a> to <code>tz</code> contributors.</li>
<li><a
-href="http://www.cimmyt.org/timezone/">World Time Explorer</a> is a
+href="http://www.worldtimeexplorer.com/index.html">World Time Explorer</a> is a
Microsoft Windows program.</li>
</ul>
<h2>Other time zone databases</h2>
@@ -243,8 +272,12 @@ Microsoft Windows program.</li>
<li><a href="http://www.astro.com/cgi/aq.cgi?lang=e">Atlas Query</a>
is Astrodienst's Web version of Shanks's
excellent time zone history atlases published in both <a
-href="http://astrocom.com/products/software.php?software_id=ibmwboth">computer
-and book form</a> by <a
+href="http://astrocom.com/products/software.php?software_id=ibmwboth">computer</a>
+and book form (<a
+href="http://astrocom.com/products/book.php?book_id=b110x">one volume
+for the USA</a>, and <a
+href="http://astrocom.com/products/book.php?book_id=b112x">one for
+other locations</a>) by <a
href="http://astrocom.com/">Astro Communications Services</a>.</li>
<li><a href="http://worldtime.com/">WORLDTIME: interactive atlas,
time info, public holidays</a>
@@ -413,6 +446,12 @@ title="Network Time Protocol">NTP</abbr>: The Network
Time Protocol</a>
discusses how to synchronize clocks of
Internet hosts.</li>
+<li><a
+href="ftp://ftp.rfc-editor.org/internet-drafts/draft-lear-dhc-timezone-option-02.txt">A
+Timezone Option for <abbr title="Dynamic Host Configuration
+Protocol">DHCP</abbr></a> proposes a <a
+href="http://www.dhcp.org/">DHCP</a> option for a server to configure
+a client's time zone and daylight saving settings automatically.</li>
<li><a href="http://gauss.gge.unb.ca/GMT.UT.and.the.RGO.html">A Few
Facts Concerning <abbr title="Greenwich Mean Time">GMT</abbr>, <abbr
title="Universal Time">UT</abbr>, and
@@ -424,7 +463,9 @@ href="http://www.cv.nrao.edu/~rfisher/Ephemerides/times.html">Astronomical
Times</a> explains more abstruse astronomical time scales like
<abbr title="Terrestrial Dynamic Time">TDT</abbr>,
<abbr title="Geocentric Coordinate Time">TCG</abbr>, and
-<abbr title="Barycentric Dynamic Time">TDB</abbr>.</li>
+<abbr title="Barycentric Dynamic Time">TDB</abbr>.
+<a href="http://www.ucolick.org/~sla/leapsecs/timescales.html">Time
+Scales</a> goes into more detail, particularly for historical variants.</li>
<li>The <a href="http://www.iau.org/"><abbr
title="International Astronomical Union">IAU</abbr></a>'s <a
href="http://www.iau-sofa.rl.ac.uk/"><abbr
@@ -444,6 +485,10 @@ describes Mars Coordinated Time (<abbr
title="Mars Coordinated Time">MTC</abbr>) and the
diverse local time
scales used by each landed mission on Mars.</li>
+<li><a href="http://www.leapsecond.com/">LeapSecond.com</a> is
+dedicated not only to leap seconds but to precise time and frequency
+in general. It covers the state of the art in amateur timekeeping, and
+how the art has progressed over the past few decades.</li>
<li><a
href="http://hpiers.obspm.fr/eop-pc/products/bulletins/bulletins.html">Bulletins
maintained by the
@@ -467,8 +512,8 @@ title="Global Positioning System">GPS</abbr> World</a>
leap second: its history and possible future</a>,
<a href="http://www.bipm.fr/metrologia/index.html">Metrologia</a>
<strong>38</strong> (2001), 509&ndash;529.
-<a href="http://www.ucolick.org/~sla/leapsecs/onlinebib.html">The
-Future of Leap Seconds</a> catalogs information about this
+<a href="http://www.ucolick.org/~sla/leapsecs/">The
+Future of Leap Seconds</a> covers this
contentious issue.</li>
</ul>
<h2>Time notation</h2>
@@ -483,6 +528,10 @@ title="International Organization for Standardization">ISO</abbr>
8601:2004 -- Data elements and interchange formats -- Information
interchange -- Representation of dates and times</a>.</li>
<li>
+<a href="http://www.w3.org/TR/xmlschema-2/#dateTime"><abbr>XML</abbr>
+Schema: Datatypes - dateTime</a> specifies a format inspired by
+<abbr>ISO</abbr> 8601 that is in common use in <abbr>XML</abbr> data.</li>
+<li>
Section 3.3 of <a
href="ftp://ftp.rfc-editor.org/in-notes/rfc2822.txt">Internet
<abbr title="Request For Comments">RFC</abbr> 2822</a>
@@ -495,6 +544,10 @@ headers.</li>
profile for use in new Internet
protocols.</li>
<li>
+<a href="http://www.hackcraft.net/web/datetime/">Date &amp; Time
+Formats on the Web</a> surveys web- and Internet-oriented date and time
+formats.</li>
+<li>
<a href="http://www.exit109.com/~ghealton/y2k/yrexamples.html">The
Best of Dates, the Worst of Dates</a> covers many problems encountered
by software developers when handling dates and time stamps.</li>
diff --git a/elsie.nci.nih.gov/src/tzfile.5 b/elsie.nci.nih.gov/src/tzfile.5
index ceb6a77..1590c45 100644
--- a/elsie.nci.nih.gov/src/tzfile.5
+++ b/elsie.nci.nih.gov/src/tzfile.5
@@ -9,7 +9,9 @@ The time zone information files used by
.IR tzset (3)
begin with the magic characters "TZif" to identify then as
time zone information files,
-followed by sixteen bytes reserved for future use,
+followed by a character identifying the version of the file's format
+(as of 2005, either an ASCII NUL or a '2')
+followed by fifteen bytes containing zeroes reserved for future use,
followed by six four-byte values of type
.BR long ,
written in a ``standard'' byte order
@@ -131,8 +133,18 @@ if either
.I tzh_timecnt
is zero or the time argument is less than the first transition time recorded
in the file.
+.PP
+For version-2-format time zone files,
+the above header and data is followed by a second header and data,
+identical in format except that
+eight bytes are used for each transition time or leap second time.
+After the second header and data comes a newline-encloded,
+POSIX-TZ-environment-variable-style string for use in handling instants
+after the last transition time stored in the file
+(with nothing between the newlines if there is no POSIX representation for
+such instants).
.SH SEE ALSO
newctime(3)
-.\" @(#)tzfile.5 7.12
+.\" @(#)tzfile.5 8.1
.\" This file is in the public domain, so clarified as of
.\" 1996-06-05 by Arthur David Olson.
diff --git a/elsie.nci.nih.gov/src/tzfile.5.txt b/elsie.nci.nih.gov/src/tzfile.5.txt
index dec5df5..6b68ae6 100644
--- a/elsie.nci.nih.gov/src/tzfile.5.txt
+++ b/elsie.nci.nih.gov/src/tzfile.5.txt
@@ -8,10 +8,13 @@ SYNOPSIS
DESCRIPTION
The time zone information files used by tzset(3) begin with
the magic characters "TZif" to identify then as time zone
- information files, followed by sixteen bytes reserved for
- future use, followed by six four-byte values of type long,
- written in a ``standard'' byte order (the high-order byte of
- the value is written first). These values are, in order:
+ information files, followed by a character identifying the
+ version of the file's format (as of 2005, either an ASCII
+ NUL or a '2') followed by fifteen bytes containing zeroes
+ reserved for future use, followed by six four-byte values of
+ type long, written in a ``standard'' byte order (the high-
+ order byte of the value is written first). These values
+ are, in order:
tzh_ttisgmtcnt
The number of UTC/local indicators stored in the file.
@@ -89,5 +92,15 @@ DESCRIPTION
is zero or the time argument is less than the first
transition time recorded in the file.
+ For version-2-format time zone files, the above header and
+ data is followed by a second header and data, identical in
+ format except that eight bytes are used for each transition
+ time or leap second time. After the second header and data
+ comes a newline-encloded, POSIX-TZ-environment-variable-
+ style string for use in handling instants after the last
+ transition time stored in the file (with nothing between the
+ newlines if there is no POSIX representation for such
+ instants).
+
SEE ALSO
newctime(3)
diff --git a/elsie.nci.nih.gov/src/tzfile.h b/elsie.nci.nih.gov/src/tzfile.h
index fb6ca98..3a9eee3 100644
--- a/elsie.nci.nih.gov/src/tzfile.h
+++ b/elsie.nci.nih.gov/src/tzfile.h
@@ -21,7 +21,7 @@
#ifndef lint
#ifndef NOID
-static char tzfilehid[] = "@(#)tzfile.h 7.18";
+static char tzfilehid[] = "@(#)tzfile.h 8.1";
#endif /* !defined NOID */
#endif /* !defined lint */
@@ -49,7 +49,8 @@ static char tzfilehid[] = "@(#)tzfile.h 7.18";
struct tzhead {
char tzh_magic[4]; /* TZ_MAGIC */
- char tzh_reserved[16]; /* reserved for future use */
+ char tzh_version[1]; /* '\0' or '2' as of 2005 */
+ 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 */
@@ -84,18 +85,22 @@ struct tzhead {
*/
/*
+** If tzh_version is '2' or greater, the above is followed by a second instance
+** of tzhead and a second instance of the data in which each coded transition
+** time uses 8 rather than 4 chars,
+** then a POSIX-TZ-environment-variable-style string for use in handling
+** instants after the last transition time stored in the file
+** (with nothing between the newlines if there is no POSIX representation for
+** such instants).
+*/
+
+/*
** In the current implementation, "tzset()" refuses to deal with files that
** exceed any of the limits below.
*/
#ifndef TZ_MAX_TIMES
-/*
-** The TZ_MAX_TIMES value below is enough to handle a bit more than a
-** year's worth of solar time (corrected daily to the nearest second) or
-** 138 years of Pacific Presidential Election time
-** (where there are three time zone transitions every fourth year).
-*/
-#define TZ_MAX_TIMES 370
+#define TZ_MAX_TIMES 1200
#endif /* !defined TZ_MAX_TIMES */
#ifndef TZ_MAX_TYPES
diff --git a/elsie.nci.nih.gov/src/tzselect.8 b/elsie.nci.nih.gov/src/tzselect.8
index 1545481..949d9f7 100644
--- a/elsie.nci.nih.gov/src/tzselect.8
+++ b/elsie.nci.nih.gov/src/tzselect.8
@@ -38,4 +38,4 @@ 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)
-.\" @(#)tzselect.8 1.3
+.\" @(#)tzselect.8 8.1
diff --git a/elsie.nci.nih.gov/src/tzselect.ksh b/elsie.nci.nih.gov/src/tzselect.ksh
index fa0c3e5..26dfa98 100644
--- a/elsie.nci.nih.gov/src/tzselect.ksh
+++ b/elsie.nci.nih.gov/src/tzselect.ksh
@@ -1,6 +1,6 @@
#! /bin/ksh
-# '@(#)tzselect.ksh 1.8'
+# '@(#)tzselect.ksh 8.1'
# Ask the user about the time zone, and output the resulting TZ value to stdout.
# Interact with the user via stderr and stdin.
diff --git a/elsie.nci.nih.gov/src/usno1988 b/elsie.nci.nih.gov/src/usno1988
index 1607da5..5766d9b 100644
--- a/elsie.nci.nih.gov/src/usno1988
+++ b/elsie.nci.nih.gov/src/usno1988
@@ -1,4 +1,4 @@
-# @(#)usno1988 7.2
+# @(#)usno1988 8.1
#
# From Arthur David Olson (1989-01-19):
#
diff --git a/elsie.nci.nih.gov/src/usno1989 b/elsie.nci.nih.gov/src/usno1989
index 6af33c0..e242cb9 100644
--- a/elsie.nci.nih.gov/src/usno1989
+++ b/elsie.nci.nih.gov/src/usno1989
@@ -1,4 +1,4 @@
-# @(#)usno1989 7.2
+# @(#)usno1989 8.1
#
# From Arthur David Olson (1989-01-19):
#
diff --git a/elsie.nci.nih.gov/src/usno1989a b/elsie.nci.nih.gov/src/usno1989a
index 30d100b..b197b85 100644
--- a/elsie.nci.nih.gov/src/usno1989a
+++ b/elsie.nci.nih.gov/src/usno1989a
@@ -1,4 +1,4 @@
-# @(#)usno1989a 7.4
+# @(#)usno1989a 8.1
#
# From Arthur David Olson (1994-02-07):
#
diff --git a/elsie.nci.nih.gov/src/usno1995 b/elsie.nci.nih.gov/src/usno1995
index ff114a6..8b9ec8d 100644
--- a/elsie.nci.nih.gov/src/usno1995
+++ b/elsie.nci.nih.gov/src/usno1995
@@ -1,4 +1,4 @@
-# @(#)usno1995 7.5
+# @(#)usno1995 8.1
#
# From Arthur David Olson (1995-12-21):
#
diff --git a/elsie.nci.nih.gov/src/usno1997 b/elsie.nci.nih.gov/src/usno1997
index fa47d6a..e18fcdf 100644
--- a/elsie.nci.nih.gov/src/usno1997
+++ b/elsie.nci.nih.gov/src/usno1997
@@ -1,4 +1,4 @@
-# @(#)usno1997 7.7
+# @(#)usno1997 8.1
#
# From Arthur David Olson (1997-03-07):
#
diff --git a/elsie.nci.nih.gov/src/usno1998 b/elsie.nci.nih.gov/src/usno1998
index ac70bc8..c3c6991 100644
--- a/elsie.nci.nih.gov/src/usno1998
+++ b/elsie.nci.nih.gov/src/usno1998
@@ -1,4 +1,4 @@
-# @(#)usno1998 7.4
+# @(#)usno1998 8.1
#
# From Arthur David Olson (1998-05-26):
#
diff --git a/elsie.nci.nih.gov/src/workman.sh b/elsie.nci.nih.gov/src/workman.sh
index 1ea32fc..cdf5b73 100644
--- a/elsie.nci.nih.gov/src/workman.sh
+++ b/elsie.nci.nih.gov/src/workman.sh
@@ -1,6 +1,6 @@
#! /bin/sh
-# @(#)workman.sh 1.8
+# @(#)workman.sh 8.1
# Tell groff not to emit SGR escape sequences (ANSI color escapes).
GROFF_NO_SGR=1
diff --git a/elsie.nci.nih.gov/src/yearistype.sh b/elsie.nci.nih.gov/src/yearistype.sh
index d3a2480..bba14a9 100644
--- a/elsie.nci.nih.gov/src/yearistype.sh
+++ b/elsie.nci.nih.gov/src/yearistype.sh
@@ -1,6 +1,6 @@
#! /bin/sh
-: '@(#)yearistype.sh 7.8'
+: '@(#)yearistype.sh 8.1'
case $#-$1 in
2-|2-0*|2-*[!0-9]*)
diff --git a/elsie.nci.nih.gov/src/zdump.8 b/elsie.nci.nih.gov/src/zdump.8
index b22a129..67cbaea 100644
--- a/elsie.nci.nih.gov/src/zdump.8
+++ b/elsie.nci.nih.gov/src/zdump.8
@@ -54,4 +54,4 @@ This works in all real-world cases;
one can construct artificial time zones for which this fails.
.SH "SEE ALSO"
newctime(3), tzfile(5), zic(8)
-.\" @(#)zdump.8 7.7
+.\" @(#)zdump.8 8.1
diff --git a/elsie.nci.nih.gov/src/zdump.c b/elsie.nci.nih.gov/src/zdump.c
index 45ce641..b5dd09b 100644
--- a/elsie.nci.nih.gov/src/zdump.c
+++ b/elsie.nci.nih.gov/src/zdump.c
@@ -1,4 +1,4 @@
-static char elsieid[] = "@(#)zdump.c 7.74";
+static char elsieid[] = "@(#)zdump.c 8.2";
/*
** This code has been made independent of the rest of the time
@@ -15,7 +15,7 @@ static char elsieid[] = "@(#)zdump.c 7.74";
#include "ctype.h" /* for isalpha et al. */
#ifndef isascii
#define isascii(x) 1
-#endif
+#endif /* !defined isascii */
#ifndef ZDUMP_LO_YEAR
#define ZDUMP_LO_YEAR (-500)
@@ -130,11 +130,7 @@ static char elsieid[] = "@(#)zdump.c 7.74";
#endif /* !defined TZ_DOMAIN */
#ifndef P
-#ifdef __STDC__
#define P(x) x
-#else /* !defined __STDC__ */
-#define P(x) ()
-#endif /* !defined __STDC__ */
#endif /* !defined P */
extern char ** environ;
@@ -418,14 +414,21 @@ _("%s: use of -v on system with floating time_t other than float or double\n"),
}
} else if (0 > (time_t) -1) {
/*
- ** time_t is signed.
+ ** time_t is signed. Assume overflow wraps around.
*/
- register time_t hibit;
+ time_t t = 0;
+ time_t t1 = 1;
- for (hibit = 1; (hibit * 2) != 0; hibit *= 2)
- continue;
- absolute_min_time = hibit;
- absolute_max_time = -(hibit + 1);
+ while (t < t1) {
+ t = t1;
+ t1 = 2 * t1 + 1;
+ }
+
+ absolute_max_time = t;
+ t = -t;
+ absolute_min_time = t - 1;
+ if (t < absolute_min_time)
+ absolute_min_time = t;
} else {
/*
** time_t is unsigned.
@@ -468,10 +471,7 @@ const long y;
}
static time_t
-hunt(name, lot, hit)
-char * name;
-time_t lot;
-time_t hit;
+hunt(char *name, time_t lot, time_t hit)
{
time_t t;
long diff;
@@ -541,10 +541,7 @@ struct tm * oldp;
}
static void
-show(zone, t, v)
-char * zone;
-time_t t;
-int v;
+show(char *zone, time_t t, int v)
{
register struct tm * tmp;
diff --git a/elsie.nci.nih.gov/src/zic.8 b/elsie.nci.nih.gov/src/zic.8
index 86b1354..9555132 100644
--- a/elsie.nci.nih.gov/src/zic.8
+++ b/elsie.nci.nih.gov/src/zic.8
@@ -411,14 +411,26 @@ or
.q Rolling
if the leap second time given by the other fields should be interpreted as
local wall clock time.
-.SH NOTE
+.SH NOTES
For areas with more than two types of local time,
you may need to use local standard time in the
.B AT
field of the earliest transition time's rule to ensure that
the earliest transition time recorded in the compiled file is correct.
+.PP
+If,
+for a particular zone,
+a clock advance caused by the start of daylight saving
+coincides with and is equal to
+a clock retreat caused by a change in UTC offset,
+.IR zic
+produces a single transition to daylight saving at the new UTC offset
+(without any change in wall clock time).
+To get separate transitions
+use multiple zone continuation lines
+specifying transition instants using universal time.
.SH FILE
/usr/local/etc/zoneinfo standard directory used for created files
.SH "SEE ALSO"
newctime(3), tzfile(5), zdump(8)
-.\" @(#)zic.8 7.22
+.\" @(#)zic.8 8.1
diff --git a/elsie.nci.nih.gov/src/zic.8.txt b/elsie.nci.nih.gov/src/zic.8.txt
index b47dc79..45c4d30 100644
--- a/elsie.nci.nih.gov/src/zic.8.txt
+++ b/elsie.nci.nih.gov/src/zic.8.txt
@@ -237,12 +237,20 @@ DESCRIPTION
time given by the other fields should be interpreted as
local wall clock time.
-NOTE
+NOTES
For areas with more than two types of local time, you may
need to use local standard time in the AT field of the
earliest transition time's rule to ensure that the earliest
transition time recorded in the compiled file is correct.
+ If, for a particular zone, a clock advance caused by the
+ start of daylight saving coincides with and is equal to a
+ clock retreat caused by a change in UTC offset, zic produces
+ a single transition to daylight saving at the new UTC offset
+ (without any change in wall clock time). To get separate
+ transitions use multiple zone continuation lines specifying
+ transition instants using universal time.
+
FILE
/usr/local/etc/zoneinfo standard directory used for created
files
diff --git a/elsie.nci.nih.gov/src/zic.c b/elsie.nci.nih.gov/src/zic.c
index 128bf10..82fd5fe 100644
--- a/elsie.nci.nih.gov/src/zic.c
+++ b/elsie.nci.nih.gov/src/zic.c
@@ -1,15 +1,13 @@
-static char elsieid[] = "@(#)zic.c 7.128";
-
-/*
-** Regardless of the type of time_t, we do our work using this type.
-*/
-
-typedef int zic_t;
+static char elsieid[] = "@(#)zic.c 8.5";
#include "private.h"
#include "locale.h"
#include "tzfile.h"
+#define ZIC_VERSION '2'
+
+typedef int_fast64_t zic_t;
+
#ifndef ZIC_MAX_ABBR_LEN_WO_WARN
#define ZIC_MAX_ABBR_LEN_WO_WARN 6
#endif /* !defined ZIC_MAX_ABBR_LEN_WO_WARN */
@@ -36,6 +34,11 @@ typedef int zic_t;
#define isascii(x) 1
#endif
+#define OFFSET_STRLEN_MAXIMUM (7 + INT_STRLEN_MAXIMUM(long))
+#define RULE_STRLEN_MAXIMUM 8 /* "Mdd.dd.d" */
+
+#define end(cp) (strchr((cp), '\0'))
+
struct rule {
const char * r_filename;
int r_linenum;
@@ -44,6 +47,8 @@ struct rule {
int r_loyear; /* for example, 1986 */
int r_hiyear; /* for example, 1986 */
const char * r_yrtype;
+ int r_lowasnum;
+ int r_hiwasnum;
int r_month; /* 0..11 */
@@ -103,9 +108,10 @@ static void adjleap P((void));
static void associate P((void));
static int ciequal P((const char * ap, const char * bp));
static void convert P((long val, char * buf));
+static void convert64 P((zic_t val, char * buf));
static void dolink P((const char * fromfile, const char * tofile));
static void doabbr P((char * abbr, const char * format,
- const char * letters, int isdst));
+ const char * letters, int isdst, int doquotes));
static void eat P((const char * name, int num));
static void eats P((const char * name, int num,
const char * rname, int rnum));
@@ -121,6 +127,7 @@ static void inrule P((char ** fields, int nfields));
static int inzcont P((char ** fields, int nfields));
static int inzone P((char ** fields, int nfields));
static int inzsub P((char ** fields, int nfields, int iscont));
+static int is32 P((zic_t x));
static int itsabbr P((const char * abbr, const char * word));
static int itsdir P((const char * name));
static int lowerit P((int c));
@@ -130,16 +137,22 @@ static void newabbr P((const char * abbr));
static long oadd P((long t1, long t2));
static void outzone P((const struct zone * zp, int ntzones));
static void puttzcode P((long code, FILE * fp));
+static void puttzcode64 P((zic_t code, FILE * fp));
static int rcomp P((const void * leftp, const void * rightp));
static zic_t rpytime P((const struct rule * rp, int wantedy));
static void rulesub P((struct rule * rp,
const char * loyearp, const char * hiyearp,
const char * typep, const char * monthp,
const char * dayp, const char * timep));
+static int stringoffset P((char * result, long offset));
+static int stringrule P((char * result, const struct rule * rp,
+ long dstoff, long gmtoff));
+static void stringzone P((char * result,
+ const struct zone * zp, int ntzones));
static void setboundaries P((void));
static zic_t tadd P((zic_t t1, long t2));
static void usage P((void));
-static void writezone P((const char * name));
+static void writezone P((const char * name, const char * string));
static int yearistype P((int year, const char * type));
#if !HAVE_STRERROR
@@ -150,13 +163,16 @@ static int charcnt;
static int errors;
static const char * filename;
static int leapcnt;
+static int leapseen;
+static int leapminyear;
+static int leapmaxyear;
static int linenum;
+static int max_abbrvar_len;
+static int max_format_len;
static zic_t max_time;
static int max_year;
-static int max_year_representable;
static zic_t min_time;
static int min_year;
-static int min_year_representable;
static int noise;
static const char * rfilename;
static int rlinenum;
@@ -453,7 +469,7 @@ static void
usage P((void))
{
(void) fprintf(stderr, _("%s: usage is %s \
-[ --version ] [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\
+[ --version ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\
\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"),
progname, progname);
exit(EXIT_FAILURE);
@@ -464,7 +480,6 @@ static const char * lcltime;
static const char * directory;
static const char * leapsec;
static const char * yitcommand;
-static int sflag = FALSE;
int
main(argc, argv)
@@ -486,6 +501,11 @@ char * argv[];
(void) textdomain(TZ_DOMAIN);
#endif /* HAVE_GETTEXT */
progname = argv[0];
+ if (TYPE_BIT(zic_t) < 64) {
+ (void) fprintf(stderr, "%s: %s\n", progname,
+ _("wild compilation-time specification of zic_t"));
+ exit(EXIT_FAILURE);
+ }
for (i = 1; i < argc; ++i)
if (strcmp(argv[i], "--version") == 0) {
(void) printf("%s\n", elsieid);
@@ -549,7 +569,7 @@ _("%s: More than one -L option specified\n"),
noise = TRUE;
break;
case 's':
- sflag = TRUE;
+ (void) printf("%s: -s ignored\n", progname);
break;
}
if (optind == argc - 1 && strcmp(argv[optind], "=") == 0)
@@ -671,54 +691,17 @@ warning(_("hard link failed, symbolic link used"));
ifree(toname);
}
-#ifndef INT_MAX
-#define INT_MAX ((int) (((unsigned)~0)>>1))
-#endif /* !defined INT_MAX */
-
-#ifndef INT_MIN
-#define INT_MIN ((int) ~(((unsigned)~0)>>1))
-#endif /* !defined INT_MIN */
-
-/*
-** The tz file format currently allows at most 32-bit quantities.
-** This restriction should be removed before signed 32-bit values
-** wrap around in 2038, but unfortunately this will require a
-** change to the tz file format.
-*/
-
-#define MAX_BITS_IN_FILE 32
-#define TIME_T_BITS_IN_FILE ((TYPE_BIT(zic_t) < MAX_BITS_IN_FILE) ? \
- TYPE_BIT(zic_t) : MAX_BITS_IN_FILE)
+#define TIME_T_BITS_IN_FILE 64
static void
setboundaries P((void))
{
register int i;
- if (TYPE_SIGNED(zic_t)) {
- min_time = -1;
- for (i = 0; i < TIME_T_BITS_IN_FILE - 1; ++i)
- min_time *= 2;
- max_time = -(min_time + 1);
- if (sflag)
- min_time = 0;
- } else {
- min_time = 0;
- max_time = 2 - sflag;
- for (i = 0; i < TIME_T_BITS_IN_FILE - 1; ++i)
- max_time *= 2;
- --max_time;
- }
- {
- time_t t;
-
- t = (time_t) min_time;
- min_year = TM_YEAR_BASE + gmtime(&t)->tm_year;
- t = (time_t) max_time;
- max_year = TM_YEAR_BASE + gmtime(&t)->tm_year;
- }
- min_year_representable = min_year;
- max_year_representable = max_year;
+ min_time = -1;
+ for (i = 0; i < TIME_T_BITS_IN_FILE - 1; ++i)
+ min_time *= 2;
+ max_time = -(min_time + 1);
}
static int
@@ -993,6 +976,8 @@ const int nfields;
fields[RF_MONTH], fields[RF_DAY], fields[RF_TOD]);
r.r_name = ecpyalloc(fields[RF_NAME]);
r.r_abbrvar = ecpyalloc(fields[RF_ABBRVAR]);
+ if (max_abbrvar_len < strlen(r.r_abbrvar))
+ max_abbrvar_len = strlen(r.r_abbrvar);
rules = (struct rule *) (void *) erealloc((char *) rules,
(int) ((nrules + 1) * sizeof *rules));
rules[nrules++] = r;
@@ -1098,6 +1083,8 @@ const int iscont;
}
z.z_rule = ecpyalloc(fields[i_rule]);
z.z_format = ecpyalloc(fields[i_format]);
+ if (max_format_len < strlen(z.z_format))
+ max_format_len = strlen(z.z_format);
hasuntil = nfields > i_untilyear;
if (hasuntil) {
z.z_untilrule.r_filename = filename;
@@ -1159,6 +1146,11 @@ const int nfields;
error(_("invalid leaping year"));
return;
}
+ if (!leapseen || leapmaxyear < year)
+ leapmaxyear = year;
+ if (!leapseen || leapminyear > year)
+ leapminyear = year;
+ leapseen = TRUE;
j = EPOCH_YEAR;
while (j != year) {
if (year > j) {
@@ -1313,7 +1305,8 @@ const char * const timep;
*/
cp = loyearp;
lp = byword(cp, begin_years);
- if (lp != NULL) switch ((int) lp->l_value) {
+ rp->r_lowasnum = lp == NULL;
+ if (!rp->r_lowasnum) switch ((int) lp->l_value) {
case YR_MINIMUM:
rp->r_loyear = INT_MIN;
break;
@@ -1328,14 +1321,11 @@ const char * const timep;
} else if (sscanf(cp, scheck(cp, "%d"), &rp->r_loyear) != 1) {
error(_("invalid starting year"));
return;
- } else if (noise) {
- if (rp->r_loyear < min_year_representable)
- warning(_("starting year too low to be represented"));
- else if (rp->r_loyear > max_year_representable)
- warning(_("starting year too high to be represented"));
}
cp = hiyearp;
- if ((lp = byword(cp, end_years)) != NULL) switch ((int) lp->l_value) {
+ lp = byword(cp, end_years);
+ rp->r_hiwasnum = lp == NULL;
+ if (!rp->r_hiwasnum) switch ((int) lp->l_value) {
case YR_MINIMUM:
rp->r_hiyear = INT_MIN;
break;
@@ -1353,11 +1343,6 @@ const char * const timep;
} else if (sscanf(cp, scheck(cp, "%d"), &rp->r_hiyear) != 1) {
error(_("invalid ending year"));
return;
- } else if (noise) {
- if (rp->r_loyear < min_year_representable)
- warning(_("ending year too low to be represented"));
- else if (rp->r_loyear > max_year_representable)
- warning(_("ending year too high to be represented"));
}
if (rp->r_loyear > rp->r_hiyear) {
error(_("starting year greater than ending year"));
@@ -1372,8 +1357,6 @@ const char * const timep;
}
rp->r_yrtype = ecpyalloc(typep);
}
- if (rp->r_loyear < min_year && rp->r_loyear > 0)
- min_year = rp->r_loyear;
/*
** Day work.
** Accept things such as:
@@ -1427,13 +1410,25 @@ const long val;
char * const buf;
{
register int i;
- register long shift;
+ register int shift;
for (i = 0, shift = 24; i < 4; ++i, shift -= 8)
buf[i] = val >> shift;
}
static void
+convert64(val, buf)
+const zic_t val;
+char * const buf;
+{
+ register int i;
+ register int shift;
+
+ for (i = 0, shift = 56; i < 8; ++i, shift -= 8)
+ buf[i] = val >> shift;
+}
+
+static void
puttzcode(val, fp)
const long val;
FILE * const fp;
@@ -1444,28 +1439,50 @@ FILE * const fp;
(void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
}
+static void
+puttzcode64(val, fp)
+const zic_t val;
+FILE * const fp;
+{
+ char buf[8];
+
+ convert64(val, buf);
+ (void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
+}
+
static int
atcomp(avp, bvp)
-void * avp;
-void * bvp;
+const void * avp;
+const void * bvp;
{
- if (((struct attype *) avp)->at < ((struct attype *) bvp)->at)
- return -1;
- else if (((struct attype *) avp)->at > ((struct attype *) bvp)->at)
- return 1;
- else return 0;
+ const zic_t a = ((const struct attype *) avp)->at;
+ const zic_t b = ((const struct attype *) bvp)->at;
+
+ return (a < b) ? -1 : (a > b);
+}
+
+static int
+is32(x)
+const zic_t x;
+{
+ return INT32_MIN <= x && x <= INT32_MAX;
}
static void
-writezone(name)
+writezone(name, string)
const char * const name;
+const char * const string;
{
- register FILE * fp;
- register int i, j;
- static char * fullname;
- static struct tzhead tzh;
- zic_t ats[TZ_MAX_TIMES];
- unsigned char types[TZ_MAX_TIMES];
+ register FILE * fp;
+ register int i, j;
+ register int leapcnt32, leapi32;
+ register int timecnt32, timei32;
+ register int pass;
+ static char * fullname;
+ static const struct tzhead tzh0;
+ static struct tzhead tzh;
+ zic_t ats[TZ_MAX_TIMES];
+ unsigned char types[TZ_MAX_TIMES];
/*
** Sort.
@@ -1509,6 +1526,36 @@ const char * const name;
ats[i] = attypes[i].at;
types[i] = attypes[i].type;
}
+ /*
+ ** Correct for leap seconds.
+ */
+ for (i = 0; i < timecnt; ++i) {
+ j = leapcnt;
+ while (--j >= 0)
+ if (ats[i] >= trans[j]) {
+ ats[i] = tadd(ats[i], corr[j]);
+ break;
+ }
+ }
+ /*
+ ** Figure out 32-bit-limited starts and counts.
+ */
+ timecnt32 = timecnt;
+ timei32 = 0;
+ leapcnt32 = leapcnt;
+ leapi32 = 0;
+ while (timecnt32 > 0 && !is32(ats[timecnt32 - 1]))
+ --timecnt32;
+ while (timecnt32 > 0 && !is32(ats[timei32])) {
+ --timecnt32;
+ ++timei32;
+ }
+ while (leapcnt32 > 0 && !is32(trans[leapcnt32 - 1]))
+ --leapcnt32;
+ while (leapcnt32 > 0 && !is32(trans[leapi32])) {
+ --leapcnt32;
+ ++leapi32;
+ }
fullname = erealloc(fullname,
(int) (strlen(directory) + 1 + strlen(name) + 1));
(void) sprintf(fullname, "%s/%s", directory, name);
@@ -1533,67 +1580,150 @@ const char * const name;
exit(EXIT_FAILURE);
}
}
- convert(eitol(typecnt), tzh.tzh_ttisgmtcnt);
- convert(eitol(typecnt), tzh.tzh_ttisstdcnt);
- convert(eitol(leapcnt), tzh.tzh_leapcnt);
- convert(eitol(timecnt), tzh.tzh_timecnt);
- convert(eitol(typecnt), tzh.tzh_typecnt);
- convert(eitol(charcnt), tzh.tzh_charcnt);
- (void) strncpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic);
+ for (pass = 1; pass <= 2; ++pass) {
+ register int thistimei, thistimecnt;
+ register int thisleapi, thisleapcnt;
+ register int thistimelim, thisleaplim;
+ int writetype[TZ_MAX_TIMES];
+ int typemap[TZ_MAX_TYPES];
+ register int thistypecnt;
+ char thischars[TZ_MAX_CHARS];
+ char thischarcnt;
+ int indmap[TZ_MAX_CHARS];
+
+ if (pass == 1) {
+ thistimei = timei32;
+ thistimecnt = timecnt32;
+ thisleapi = leapi32;
+ thisleapcnt = leapcnt32;
+ } else {
+ thistimei = 0;
+ thistimecnt = timecnt;
+ thisleapi = 0;
+ thisleapcnt = leapcnt;
+ }
+ thistimelim = thistimei + thistimecnt;
+ thisleaplim = thisleapi + thisleapcnt;
+ for (i = 0; i < typecnt; ++i)
+ writetype[i] = thistimecnt == timecnt;
+ if (thistimecnt == 0) {
+ /*
+ ** No transition times fall in the current
+ ** (32- or 64-bit) window.
+ */
+ if (typecnt != 0)
+ writetype[typecnt - 1] = TRUE;
+ } else {
+ for (i = thistimei - 1; i < thistimelim; ++i)
+ if (i >= 0)
+ writetype[types[i]] = TRUE;
+ /*
+ ** For America/Godthab and Antarctica/Palmer
+ */
+ if (thistimei == 0)
+ writetype[0] = TRUE;
+ }
+ thistypecnt = 0;
+ for (i = 0; i < typecnt; ++i)
+ typemap[i] = writetype[i] ? thistypecnt++ : -1;
+ for (i = 0; i < sizeof indmap / sizeof indmap[0]; ++i)
+ indmap[i] = -1;
+ thischarcnt = 0;
+ for (i = 0; i < typecnt; ++i) {
+ register char * thisabbr;
+
+ if (!writetype[i])
+ continue;
+ if (indmap[abbrinds[i]] >= 0)
+ continue;
+ thisabbr = &chars[abbrinds[i]];
+ for (j = 0; j < thischarcnt; ++j)
+ if (strcmp(&thischars[j], thisabbr) == 0)
+ break;
+ if (j == thischarcnt) {
+ (void) strcpy(&thischars[(int) thischarcnt],
+ thisabbr);
+ thischarcnt += strlen(thisabbr) + 1;
+ }
+ indmap[abbrinds[i]] = j;
+ }
#define DO(field) (void) fwrite((void *) tzh.field, \
(size_t) sizeof tzh.field, (size_t) 1, fp)
- DO(tzh_magic);
- DO(tzh_reserved);
- DO(tzh_ttisgmtcnt);
- DO(tzh_ttisstdcnt);
- DO(tzh_leapcnt);
- DO(tzh_timecnt);
- DO(tzh_typecnt);
- DO(tzh_charcnt);
+ tzh = tzh0;
+ (void) strncpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic);
+ tzh.tzh_version[0] = ZIC_VERSION;
+ convert(eitol(thistypecnt), tzh.tzh_ttisgmtcnt);
+ convert(eitol(thistypecnt), tzh.tzh_ttisstdcnt);
+ convert(eitol(thisleapcnt), tzh.tzh_leapcnt);
+ convert(eitol(thistimecnt), tzh.tzh_timecnt);
+ convert(eitol(thistypecnt), tzh.tzh_typecnt);
+ convert(eitol(thischarcnt), tzh.tzh_charcnt);
+ DO(tzh_magic);
+ DO(tzh_version);
+ DO(tzh_reserved);
+ DO(tzh_ttisgmtcnt);
+ DO(tzh_ttisstdcnt);
+ DO(tzh_leapcnt);
+ DO(tzh_timecnt);
+ DO(tzh_typecnt);
+ DO(tzh_charcnt);
#undef DO
- for (i = 0; i < timecnt; ++i) {
- j = leapcnt;
- while (--j >= 0)
- if (ats[i] >= trans[j]) {
- ats[i] = tadd(ats[i], corr[j]);
- break;
- }
- puttzcode((long) ats[i], fp);
- }
- if (timecnt > 0)
- (void) fwrite((void *) types, (size_t) sizeof types[0],
- (size_t) timecnt, fp);
- for (i = 0; i < typecnt; ++i) {
- puttzcode((long) gmtoffs[i], fp);
- (void) putc(isdsts[i], fp);
- (void) putc(abbrinds[i], fp);
- }
- if (charcnt != 0)
- (void) fwrite((void *) chars, (size_t) sizeof chars[0],
- (size_t) charcnt, fp);
- for (i = 0; i < leapcnt; ++i) {
- if (roll[i]) {
- if (timecnt == 0 || trans[i] < ats[0]) {
- j = 0;
- while (isdsts[j])
- if (++j >= typecnt) {
- j = 0;
- break;
- }
- } else {
- j = 1;
- while (j < timecnt && trans[i] >= ats[j])
- ++j;
- j = types[j - 1];
+ for (i = thistimei; i < thistimelim; ++i)
+ if (pass == 1)
+ puttzcode((long) ats[i], fp);
+ else puttzcode64(ats[i], fp);
+ for (i = thistimei; i < thistimelim; ++i) {
+ unsigned char uc;
+
+ uc = typemap[types[i]];
+ (void) fwrite((void *) &uc,
+ (size_t) sizeof uc,
+ (size_t) 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);
}
- puttzcode((long) tadd(trans[i], -gmtoffs[j]), fp);
- } else puttzcode((long) trans[i], fp);
- puttzcode((long) corr[i], fp);
- }
- for (i = 0; i < typecnt; ++i)
- (void) putc(ttisstds[i], fp);
- for (i = 0; i < typecnt; ++i)
- (void) putc(ttisgmts[i], fp);
+ if (thischarcnt != 0)
+ (void) fwrite((void *) thischars,
+ (size_t) sizeof thischars[0],
+ (size_t) thischarcnt, fp);
+ for (i = thisleapi; i < thisleaplim; ++i) {
+ register zic_t todo;
+
+ if (roll[i]) {
+ if (timecnt == 0 || trans[i] < ats[0]) {
+ j = 0;
+ while (isdsts[j])
+ if (++j >= typecnt) {
+ j = 0;
+ break;
+ }
+ } else {
+ j = 1;
+ while (j < timecnt &&
+ trans[i] >= ats[j])
+ ++j;
+ j = types[j - 1];
+ }
+ todo = tadd(trans[i], -gmtoffs[j]);
+ } else todo = trans[i];
+ if (pass == 1)
+ puttzcode((long) todo, fp);
+ else puttzcode64(todo, fp);
+ puttzcode(corr[i], fp);
+ }
+ for (i = 0; i < typecnt; ++i)
+ if (writetype[i])
+ (void) 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);
@@ -1602,21 +1732,223 @@ const char * const name;
}
static void
-doabbr(abbr, format, letters, isdst)
+doabbr(abbr, format, letters, isdst, doquotes)
char * const abbr;
const char * const format;
const char * const letters;
const int isdst;
+const int doquotes;
{
- if (strchr(format, '/') == NULL) {
+ register char * cp;
+ register char * slashp;
+ register int len;
+
+ slashp = strchr(format, '/');
+ if (slashp == NULL) {
if (letters == NULL)
(void) strcpy(abbr, format);
else (void) sprintf(abbr, format, letters);
- } else if (isdst)
- (void) strcpy(abbr, strchr(format, '/') + 1);
- else {
- (void) strcpy(abbr, format);
- *strchr(abbr, '/') = '\0';
+ } else if (isdst) {
+ (void) strcpy(abbr, slashp + 1);
+ } else {
+ if (slashp > format)
+ (void) strncpy(abbr, format,
+ (unsigned) (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;
+ len = strlen(abbr);
+ if (len > 0 && *cp == '\0')
+ return;
+ abbr[len + 2] = '\0';
+ abbr[len + 1] = '>';
+ for ( ; len > 0; --len)
+ abbr[len] = abbr[len - 1];
+ abbr[0] = '<';
+}
+
+static void
+updateminmax(x)
+const int x;
+{
+ if (min_year > x)
+ min_year = x;
+ if (max_year < x)
+ max_year = x;
+}
+
+static int
+stringoffset(result, offset)
+char * result;
+long offset;
+{
+ register int hours;
+ register int minutes;
+ register int seconds;
+
+ result[0] = '\0';
+ if (offset < 0) {
+ (void) strcpy(result, "-");
+ offset = -offset;
+ }
+ seconds = offset % SECSPERMIN;
+ offset /= SECSPERMIN;
+ minutes = offset % MINSPERHOUR;
+ offset /= MINSPERHOUR;
+ hours = offset;
+ if (hours >= HOURSPERDAY) {
+ result[0] = '\0';
+ return -1;
+ }
+ (void) sprintf(end(result), "%d", hours);
+ if (minutes != 0 || seconds != 0) {
+ (void) sprintf(end(result), ":%02d", minutes);
+ if (seconds != 0)
+ (void) sprintf(end(result), ":%02d", seconds);
+ }
+ return 0;
+}
+
+static int
+stringrule(result, rp, dstoff, gmtoff)
+char * result;
+const struct rule * const rp;
+const long dstoff;
+const long gmtoff;
+{
+ register long tod;
+
+ result = end(result);
+ if (rp->r_dycode == DC_DOM) {
+ register int month, total;
+
+ if (rp->r_dayofmonth == 29 && rp->r_month == TM_FEBRUARY)
+ return -1;
+ total = 0;
+ for (month = 0; month < rp->r_month; ++month)
+ total += len_months[0][month];
+ (void) sprintf(result, "J%d", total + rp->r_dayofmonth);
+ } else {
+ register int week;
+
+ if (rp->r_dycode == DC_DOWGEQ) {
+ week = 1 + rp->r_dayofmonth / DAYSPERWEEK;
+ if ((week - 1) * DAYSPERWEEK + 1 != rp->r_dayofmonth)
+ return -1;
+ } else if (rp->r_dycode == DC_DOWLEQ) {
+ if (rp->r_dayofmonth == len_months[1][rp->r_month])
+ week = 5;
+ else {
+ week = 1 + rp->r_dayofmonth / DAYSPERWEEK;
+ if (week * DAYSPERWEEK - 1 != rp->r_dayofmonth)
+ return -1;
+ }
+ } else return -1; /* "cannot happen" */
+ (void) sprintf(result, "M%d.%d.%d",
+ rp->r_month + 1, week, rp->r_wday);
+ }
+ tod = rp->r_tod;
+ if (rp->r_todisgmt)
+ tod += gmtoff;
+ if (rp->r_todisstd && rp->r_stdoff == 0)
+ tod += dstoff;
+ if (tod < 0) {
+ result[0] = '\0';
+ return -1;
+ }
+ if (tod != 2 * SECSPERMIN * MINSPERHOUR) {
+ (void) strcat(result, "/");
+ if (stringoffset(end(result), tod) != 0)
+ return -1;
+ }
+ return 0;
+}
+
+static void
+stringzone(result, zpfirst, zonecount)
+char * result;
+const struct zone * const zpfirst;
+const int zonecount;
+{
+ register const struct zone * zp;
+ register struct rule * rp;
+ register struct rule * stdrp;
+ register struct rule * dstrp;
+ register int i;
+ register const char * abbrvar;
+
+ result[0] = '\0';
+ zp = zpfirst + zonecount - 1;
+ stdrp = dstrp = NULL;
+ for (i = 0; i < zp->z_nrules; ++i) {
+ rp = &zp->z_rules[i];
+ if (rp->r_hiwasnum || rp->r_hiyear != INT_MAX)
+ continue;
+ if (rp->r_yrtype != NULL)
+ continue;
+ if (rp->r_stdoff == 0) {
+ if (stdrp == NULL)
+ stdrp = rp;
+ else return;
+ } else {
+ if (dstrp == NULL)
+ dstrp = rp;
+ else return;
+ }
+ }
+ if (stdrp == NULL && dstrp == NULL) {
+ /*
+ ** There are no rules running through "max".
+ ** Let's find the latest rule.
+ */
+ for (i = 0; i < zp->z_nrules; ++i) {
+ rp = &zp->z_rules[i];
+ if (stdrp == NULL || rp->r_hiyear > stdrp->r_hiyear ||
+ (rp->r_hiyear == stdrp->r_hiyear &&
+ rp->r_month > stdrp->r_month))
+ stdrp = rp;
+ }
+ if (stdrp != NULL && stdrp->r_stdoff != 0)
+ return; /* We end up in DST (a POSIX no-no). */
+ /*
+ ** Horrid special case: if year is 2037,
+ ** presume this is a zone handled on a year-by-year basis;
+ ** do not try to apply a rule to the zone.
+ */
+ if (stdrp != NULL && stdrp->r_hiyear == 2037)
+ return;
+ }
+ if (stdrp == NULL && zp->z_nrules != 0)
+ return;
+ abbrvar = (stdrp == NULL) ? "" : stdrp->r_abbrvar;
+ doabbr(result, zp->z_format, abbrvar, FALSE, TRUE);
+ if (stringoffset(end(result), -zp->z_gmtoff) != 0) {
+ result[0] = '\0';
+ return;
+ }
+ if (dstrp == NULL)
+ return;
+ 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) {
+ result[0] = '\0';
+ return;
+ }
+ (void) strcat(result, ",");
+ if (stringrule(result, dstrp, dstrp->r_stdoff, zp->z_gmtoff) != 0) {
+ result[0] = '\0';
+ return;
+ }
+ (void) strcat(result, ",");
+ if (stringrule(result, stdrp, dstrp->r_stdoff, zp->z_gmtoff) != 0) {
+ result[0] = '\0';
+ return;
}
}
@@ -1637,8 +1969,17 @@ const int zonecount;
register int startttisstd;
register int startttisgmt;
register int type;
- char startbuf[BUFSIZ];
-
+ register char * startbuf;
+ register char * ab;
+ register char * envvar;
+ register int max_abbr_len;
+ register int max_envvar_len;
+
+ max_abbr_len = 2 + max_format_len + max_abbrvar_len;
+ max_envvar_len = 2 * max_abbr_len + 5 * 9;
+ startbuf = emalloc(max_abbr_len + 1);
+ ab = emalloc(max_abbr_len + 1);
+ envvar = emalloc(max_envvar_len + 1);
INITIALIZE(untiltime);
INITIALIZE(starttime);
/*
@@ -1653,6 +1994,48 @@ const int zonecount;
*/
startttisstd = FALSE;
startttisgmt = FALSE;
+ min_year = max_year = EPOCH_YEAR;
+ if (leapseen) {
+ updateminmax(leapminyear);
+ updateminmax(leapmaxyear);
+ }
+ for (i = 0; i < zonecount; ++i) {
+ zp = &zpfirst[i];
+ updateminmax(zp->z_untilrule.r_loyear);
+ for (j = 0; j < zp->z_nrules; ++j) {
+ rp = &zp->z_rules[j];
+ if (rp->r_lowasnum)
+ updateminmax(rp->r_loyear);
+ if (rp->r_hiwasnum)
+ updateminmax(rp->r_hiyear);
+ }
+ }
+ /*
+ ** Generate lots of data if a rule can't cover all future times.
+ */
+ stringzone(envvar, zpfirst, zonecount);
+ if (noise && envvar[0] == '\0') {
+ register char * wp;
+
+wp = ecpyalloc(_("no POSIX environment variable for zone"));
+ wp = ecatalloc(wp, " ");
+ wp = ecatalloc(wp, zpfirst->z_name);
+ warning(wp);
+ ifree(wp);
+ }
+ if (envvar[0] == '\0') {
+ if (min_year >= INT_MIN + YEARSPERREPEAT)
+ min_year -= YEARSPERREPEAT;
+ else min_year = INT_MIN;
+ if (max_year <= INT_MAX - YEARSPERREPEAT)
+ max_year += YEARSPERREPEAT;
+ else max_year = INT_MAX;
+ }
+ /*
+ ** For the benefit of older systems, generate data through 2037.
+ */
+ if (max_year < 2037)
+ max_year = 2037;
for (i = 0; i < zonecount; ++i) {
/*
** A guess that may well be corrected later.
@@ -1670,7 +2053,7 @@ const int zonecount;
if (zp->z_nrules == 0) {
stdoff = zp->z_stdoff;
doabbr(startbuf, zp->z_format,
- (char *) NULL, stdoff != 0);
+ (char *) NULL, stdoff != 0, FALSE);
type = addtype(oadd(zp->z_gmtoff, stdoff),
startbuf, stdoff != 0, startttisstd,
startttisgmt);
@@ -1700,7 +2083,6 @@ const int zonecount;
register int k;
register zic_t jtime, ktime;
register long offset;
- char buf[BUFSIZ];
INITIALIZE(ktime);
if (useuntil) {
@@ -1756,24 +2138,27 @@ const int zonecount;
stdoff);
doabbr(startbuf, zp->z_format,
rp->r_abbrvar,
- rp->r_stdoff != 0);
+ rp->r_stdoff != 0,
+ FALSE);
continue;
}
if (*startbuf == '\0' &&
startoff == oadd(zp->z_gmtoff,
- stdoff))
+ stdoff)) {
doabbr(startbuf,
zp->z_format,
rp->r_abbrvar,
rp->r_stdoff !=
- 0);
+ 0,
+ FALSE);
+ }
}
eats(zp->z_filename, zp->z_linenum,
rp->r_filename, rp->r_linenum);
- doabbr(buf, zp->z_format, rp->r_abbrvar,
- rp->r_stdoff != 0);
+ doabbr(ab, zp->z_format, rp->r_abbrvar,
+ rp->r_stdoff != 0, FALSE);
offset = oadd(zp->z_gmtoff, rp->r_stdoff);
- type = addtype(offset, buf, rp->r_stdoff != 0,
+ type = addtype(offset, ab, rp->r_stdoff != 0,
rp->r_todisstd, rp->r_todisgmt);
addtt(ktime, type);
}
@@ -1806,7 +2191,10 @@ error(_("can't determine time zone abbreviation to use just after until time"));
starttime = tadd(starttime, -gmtoff);
}
}
- writezone(zpfirst->z_name);
+ writezone(zpfirst->z_name, envvar);
+ ifree(startbuf);
+ ifree(ab);
+ ifree(envvar);
}
static void
@@ -2185,8 +2573,6 @@ register const int wantedy;
will not work with pre-2004 versions of zic"));
}
}
- if (dayoff < 0 && !TYPE_SIGNED(zic_t))
- return min_time;
if (dayoff < min_time / SECSPERDAY)
return min_time;
if (dayoff > max_time / SECSPERDAY)
diff --git a/elsie.nci.nih.gov/src/zone.tab b/elsie.nci.nih.gov/src/zone.tab
index d9b278b..13e3840 100644
--- a/elsie.nci.nih.gov/src/zone.tab
+++ b/elsie.nci.nih.gov/src/zone.tab
@@ -1,4 +1,4 @@
-# @(#)zone.tab 1.32
+# @(#)zone.tab 8.3
#
# TZ zone descriptions
#
@@ -100,8 +100,9 @@ BW -2545+02555 Africa/Gaborone
BY +5354+02734 Europe/Minsk
BZ +1730-08812 America/Belize
CA +4734-05243 America/St_Johns Newfoundland Island
-CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), NB, W Labrador, E Quebec & PEI
+CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), W Labrador, E Quebec & 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 - E Labrador
CA +4531-07334 America/Montreal Eastern Time - Quebec - most locations
CA +4339-07923 America/Toronto Eastern Time - Ontario - most locations
@@ -256,7 +257,7 @@ MO +2214+11335 Asia/Macau
MP +1512+14545 Pacific/Saipan
MQ +1436-06105 America/Martinique
MR +1806-01557 Africa/Nouakchott
-MS +1644-06213 America/Montserrat
+MS +1643-06213 America/Montserrat
MT +3554+01431 Europe/Malta
MU -2010+05730 Indian/Mauritius
MV +0410+07330 Indian/Maldives
@@ -370,13 +371,16 @@ 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 Standard Time - Indiana - most locations
-US +382232-0862041 America/Indiana/Marengo Eastern Standard Time - Indiana - Crawford County
-US +411745-0863730 America/Indiana/Knox Eastern Standard Time - Indiana - Starke County
-US +384452-0850402 America/Indiana/Vevay Eastern Standard Time - Indiana - Switzerland County
+US +394606-0860929 America/Indiana/Indianapolis Eastern Time - Indiana - most locations
+US +382232-0862041 America/Indiana/Marengo Eastern Time - Indiana - Crawford County
+US +411745-0863730 America/Indiana/Knox Eastern Time - Indiana - Starke County
+US +384452-0850402 America/Indiana/Vevay Eastern Time - Indiana - Switzerland County
US +415100-0873900 America/Chicago Central Time
-US +450628-0873651 America/Menominee Central Time - Michigan - Wisconsin border
+US +384038-0873143 America/Indiana/Vincennes Central Time - Indiana - Daviess, Dubois, Knox, Martin, Perry & Pulaski Counties
+US +382931-0871643 America/Indiana/Petersburg Central Time - Indiana - Pike 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 +394421-1045903 America/Denver Mountain Time
US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon
US +364708-1084111 America/Shiprock Mountain Time - Navajo