summary refs log tree commit diff
path: root/time
diff options
context:
space:
mode:
Diffstat (limited to 'time')
-rw-r--r--time/africa11
-rw-r--r--time/asia103
-rw-r--r--time/australasia40
-rw-r--r--time/europe218
-rw-r--r--time/northamerica73
-rw-r--r--time/private.h7
-rw-r--r--time/southamerica7
-rw-r--r--time/tzfile.h7
-rw-r--r--time/zdump.c7
-rw-r--r--time/zic.c213
10 files changed, 409 insertions, 277 deletions
diff --git a/time/africa b/time/africa
index ddb472d320..d55b598912 100644
--- a/time/africa
+++ b/time/africa
@@ -1,4 +1,4 @@
-# @(#)africa	7.12
+# @(#)africa	7.13
 
 # 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
@@ -80,7 +80,6 @@
 
 # Algeria
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Algeria	1911	only	-	Jan	 1	 0:00s	0	-
 Rule	Algeria	1916	only	-	Jun	14	23:00s	1:00	" DST"
 Rule	Algeria	1916	1919	-	Oct	Sun<=7	23:00s	0	-
 Rule	Algeria	1917	only	-	Mar	24	23:00s	1:00	" DST"
@@ -212,7 +211,6 @@ Zone	Africa/Djibouti	2:52:36 -	LMT	1911 Jul
 
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Egypt	1900	only	-	Oct	 1	0:00	0	-
 Rule	Egypt	1940	only	-	Jul	15	0:00	1:00	" DST"
 Rule	Egypt	1940	only	-	Oct	 1	0:00	0	-
 Rule	Egypt	1941	only	-	Apr	15	0:00	1:00	" DST"
@@ -275,7 +273,6 @@ Zone	Africa/Banjul	-1:06:36 -	LMT	1912
 # WATDT is my invention for ``West Africa one-Third Daylight Time''.
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Ghana	1918	only	-	Jan	 1	0:00	0	WAT
 # Whitman says DST was observed from 1931 to ``the present''; go with Shanks.
 Rule	Ghana	1936	1942	-	Sep	 1	0:00	0:20	WATDT
 Rule	Ghana	1936	1942	-	Dec	31	0:00	0	WAT
@@ -348,7 +345,6 @@ Zone	Africa/Monrovia	-0:43:08 -	LMT	1882
 
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Libya	1920	only	-	Jan	 1	0:00	0	-
 Rule	Libya	1951	only	-	Oct	14	2:00	1:00	" DST"
 Rule	Libya	1952	only	-	Jan	 1	0:00	0	-
 Rule	Libya	1953	only	-	Oct	 9	2:00	1:00	" DST"
@@ -416,7 +412,6 @@ Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
 
 # Morocco
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Morocco	1913	only	-	Oct	26	 0:00	0	-
 Rule	Morocco	1939	only	-	Sep	12	 0:00	1:00	" DST"
 Rule	Morocco	1939	only	-	Nov	19	 0:00	0	-
 Rule	Morocco	1940	only	-	Feb	25	 0:00	1:00	" DST"
@@ -504,7 +499,6 @@ Zone	Indian/Mahe	3:41:48 -	LMT	1906 Jun	# Victoria
 
 # Sierra Leone
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	SL	1913	only	-	Oct	26	0:00	0	-
 # Whitman gives Mar 31 - Aug 31 for 1931 on; go with Shanks.
 Rule	SL	1935	1942	-	Jun	 1	0:00	1:00	S
 Rule	SL	1935	1942	-	Oct	 1	0:00	0	-
@@ -528,7 +522,6 @@ Zone Africa/Mogadishu	3:01:28 -	LMT	1893 Nov
 
 # South Africa
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	SA	1892	only	-	Feb	8	0:00	0	-
 Rule	SA	1942	1943	-	Sep	Sun>=15	2:00	1:00	S
 Rule	SA	1943	1944	-	Mar	Sun>=15	2:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -544,7 +537,6 @@ Zone Africa/Johannesburg 1:52:00 -	LMT	1892 Feb 8
 # I verified this today by telephone with the Sudan Mission to the
 # United Nations: 212-573-6033
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Sudan	1931	only	-	Feb	 8	0:00	0	-
 Rule	Sudan	1970	only	-	May	 1	0:00	1:00	" DST"
 Rule	Sudan	1970	1985	-	Oct	15	0:00	0	-
 Rule	Sudan	1971	only	-	Apr	30	0:00	1:00	" DST"
@@ -575,7 +567,6 @@ Zone	Africa/Lome	0:04:52 -	LMT	1893
 
 # Tunisia
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Tunisia	1911	only	-	Mar	 9	 0:00	0	-
 Rule	Tunisia	1939	only	-	Apr	15	23:00s	1:00	" DST"
 Rule	Tunisia	1939	only	-	Nov	18	23:00s	0	-
 Rule	Tunisia	1940	only	-	Feb	25	23:00s	1:00	" DST"
diff --git a/time/asia b/time/asia
index c9cdc7ebad..a5d0ab59f5 100644
--- a/time/asia
+++ b/time/asia
@@ -1,4 +1,4 @@
-# @(#)asia	7.18
+# @(#)asia	7.23
 
 # 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
@@ -30,10 +30,11 @@
 #	3:00	AST ADT	Arabia*
 #	3:00	BSK BSD	Baku (was 4:00)*
 #	3:30	IST IDT	Iran
+#	4:00	AMST AMDT Armenia (was 3:00) (was YSK, YSD)*
 #	4:00	TBSK TBSD Tbilisi (was 3:00)*
-#	4:00	YSK YSD Yerevan (was 3:00)*
 #	4:00	GST GDT	Gulf*
 #	4:30	AFT	Afghanistan*
+#	5:00	ASK ASD	Aktau (was SHSK, SHSD)*
 #	5:00	ASK ASD	Ashkhabad (was 4:00)*
 #	5:00	BSK BSD Bishkek (was 6:00) (was FSK, FSD)*
 #	5:00	PKT	Pakistan*
@@ -69,11 +70,12 @@
 
 ###############################################################################
 
+# These rules for Russia are stolen from the `europe' file.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Russia	1981	1984	-	Apr	1	0:00	1:00	D
-Rule	Russia	1981	1983	-	Oct	1	0:00	0	K
-Rule	Russia	1984	max	-	Sep	lastSun	2:00s	0	K
-Rule	Russia	1985	max	-	Mar	lastSun	2:00s	1:00	D
+Rule RussiaAsia 1981	1984	-	Apr	1	0:00	1:00	D
+Rule RussiaAsia 1981	1983	-	Oct	1	0:00	0	K
+Rule RussiaAsia 1984	max	-	Sep	lastSun	2:00s	0	K
+Rule RussiaAsia 1985	max	-	Mar	lastSun	2:00s	1:00	D
 
 # Afghanistan
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -82,18 +84,32 @@ Zone	Asia/Kabul	4:36:48 -	LMT	1890
 			4:30	-	AFT
 
 # Armenia
+# From Paul Eggert (1996-05-04):
+# Shanks has Yerevan switching to 3:00 (with Russian DST) in spring 1991,
+# but usno1995 has Armenia at 4:00 (with DST), and Edgar Der-Danieliantz
+# <edd@AIC.NET> reported today that Yerevan probably won't use DST this year,
+# though it did use DST in 1995.  We guess Yerevan stayed in sync with Moscow
+# between 1990 and 1995, but stopped using DST in 1996.
+# Der-Danieliantz also asked for a better abbreviation than `YSK'
+# after independence.  Apparently no abbreviation is in common use;
+# use `AMST/AMDT' since `AM' is the ISO country code for Armenia.
+# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+Rule	Armenia	1992	1995	-	Sep	lastSun	2:00s	0	S
+Rule	Armenia	1992	1995	-	Mar	lastSun	2:00s	1:00	D
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Yerevan	2:58:00 -	LMT	1924 May  2
 			3:00	-	YSK	1957 Mar
-			4:00	Russia	YS%s
-# Shanks has Yerevan switching to 3:00 (with Russian DST) in spring 1991,
-# but usno1995 has Armenia at 4:00 (with DST).  Ignore the 1991 switch for now.
+			4:00 RussiaAsia YS%s	1991 Mar 31 2:00s
+			3:00	1:00	YSD	1991 Sep 29 2:00s
+			3:00	-	AMST	1992 Jan 19 2:00s
+			4:00	Armenia	AM%sT	1996
+			4:00	-	AMST
 
 # Azerbaijan
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Baku	3:19:24 -	LMT	1924 May  2
 			3:00	-	BSK	1957 Mar
-			4:00	Russia	BS%s	1991 Mar 31 2:00s
+			4:00 RussiaAsia BS%s	1991 Mar 31 2:00s
 			3:00	1:00	BSD	1991 Sep 29 2:00s
 			3:00	-	BSK
 # Shanks has Baku using Russian DST rules after 1991,
@@ -133,7 +149,7 @@ Zone	Asia/Brunei	7:39:40 -	LMT	1926 Mar   # Bandar Seri Begawan
 
 # Burma / Myanmar
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Rangoon	6:24:40 -	LMT	1880
+Zone	Asia/Rangoon	6:24:40 -	LMT	1880		# or Yangon
 			6:25	-	RMT	1920
 			6:30	-	BMT	1942 May
 			9:00	-	JST	1945 May 3
@@ -179,7 +195,6 @@ Zone	Asia/Phnom_Penh	6:59:40 -	LMT	1906 Jun  9
 
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Shang	1928	only	-	Jan	 1	0:00	0	S
 Rule	Shang	1940	only	-	Jun	 3	0:00	1:00	D
 Rule	Shang	1940	1941	-	Oct	 1	0:00	0	S
 Rule	Shang	1941	only	-	Mar	16	0:00	1:00	D
@@ -213,7 +228,6 @@ Zone	Asia/Kashgar	5:03:56	-	LMT	1928
 # Republic of China
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Taiwan	1896	only	-	Jan	1	0:00	0	S
 Rule	Taiwan	1945	1951	-	May	1	0:00	1:00	D
 Rule	Taiwan	1945	1951	-	Oct	1	0:00	0	S
 Rule	Taiwan	1952	only	-	Mar	1	0:00	1:00	D
@@ -232,7 +246,6 @@ Zone	Asia/Taipei	8:06:00 -	LMT	1896
 ###############################################################################
 # Hong Kong
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	HK	1904	only	-	Oct	30	0:00	0	-
 Rule	HK	1946	only	-	Apr	20	3:30	1:00	S
 Rule	HK	1946	only	-	Dec	1	3:30	0	-
 Rule	HK	1947	only	-	Apr	13	3:30	1:00	S
@@ -254,7 +267,6 @@ Zone	Asia/Hong_Kong	7:36:36 -	LMT	1904 Oct 30
 
 # Macao
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Macao	1912	only	-	Jan	1	0:00	0	S
 Rule	Macao	1961	1962	-	Mar	Sun>=16	3:30	1:00	D
 Rule	Macao	1961	1964	-	Nov	Sun>=1	3:30	0	S
 Rule	Macao	1963	only	-	Mar	Sun>=16	0:00	1:00	D
@@ -278,7 +290,6 @@ Zone	Asia/Macao	7:34:20 -	LMT	1912
 
 # Cyprus
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Cyprus	1921	only	-	Nov	14	0:00	0	-
 Rule	Cyprus	1975	only	-	Apr	13	0:00	1:00	" DST"
 Rule	Cyprus	1975	only	-	Oct	12	0:00	0	-
 Rule	Cyprus	1976	only	-	May	15	0:00	1:00	" DST"
@@ -307,9 +318,9 @@ Zone	Asia/Nicosia	2:13:28 -	LMT	1921 Nov 14
 Zone	Asia/Tbilisi	2:59:16 -	LMT	1880
 			2:59	-	LST	1924 May  2
 			3:00	-	TBSK	1957 Mar
-			4:00	Russia	TBS%s	1991 Mar 31 2:00s
+			4:00 RussiaAsia TBS%s	1991 Mar 31 2:00s
 			3:00	1:00	TBSD	1991 Sep 29 2:00s
-			3:00	Russia	TBS%s	1994 Sep 25 2:00s
+			3:00 RussiaAsia TBS%s	1994 Sep 25 2:00s
 			4:00	-	TBSK
 
 # India
@@ -348,7 +359,6 @@ Zone Asia/Jayapura	9:22:48 -	LMT	1932 Nov
 
 # Iran
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Iran	1977	only	-	Nov	1	0:00	0	S
 Rule	Iran	1978	1980	-	Mar	21	0:00	1:00	D
 Rule	Iran	1978	only	-	Oct	21	0:00	0	S
 Rule	Iran	1979	only	-	Sep	19	0:00	0	S
@@ -390,7 +400,6 @@ Zone	Asia/Baghdad	2:57:40	-	LMT	1890
 
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Zion	1918	only	-	Jan	 1	0:00	0	S
 Rule	Zion	1940	only	-	Jun	 1	0:00	1:00	D
 Rule	Zion	1942	1944	-	Nov	 1	0:00	0	S
 Rule	Zion	1943	only	-	Apr	 1	2:00	1:00	D
@@ -553,7 +562,6 @@ Zone	Asia/Tokyo	9:19:04	-	LMT	1896
 # Most likely Shanks is merely guessing dates from 1992 on.
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule    Jordan	1931	only	-	Jan	1	0:00	0	-
 Rule    Jordan	1973	only	-	Jun	6	0:00	1:00	" DST"
 Rule    Jordan	1973	1975	-	Oct	1	0:00	0	-
 Rule    Jordan	1974	1977	-	May	1	0:00	1:00	" DST"
@@ -576,21 +584,31 @@ Zone	Asia/Amman	2:23:44 -	LMT	1931
 			2:00	Jordan	EET%s
 
 # Kazakhstan
-# From Shanks (1991):
+# From Paul Eggert (1996-04-19):
+# Andrew Evtichov <evti@chevron.com> (1996-04-13) writes that Kazakhstan
+# stayed in sync with Moscow after 1990, and that Aktau is the biggest city
+# in western Kazakhstan.  Follow Shanks before 1991, Evtichov afterwards.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Alma-Ata	5:07:48 -	LMT	1924 May  2
+Zone	Asia/Alma-Ata	5:07:48 -	LMT	1924 May  2 # or Almaty
 			5:00	-	AASK	1957 Mar
-			6:00	Russia	AAS%s
-# Shanks has Alma-Ata switching to 5:00 in 1991,
-# but usno1995 has Kazakhstan at 6:00.  Ignore the 1991 switch for now.
+			6:00 RussiaAsia AAS%s	1991 Mar 31 2:00s
+			5:00	1:00	AASD	1991 Sep 29 2:00s
+			5:00	-	AASK	1992 Jan 19 2:00s
+			6:00 RussiaAsia AAS%s
+Zone	Asia/Aktau	3:21:04	-	LMT	1924 May  2 # or Aqtau
+			4:00	-	SHSK	1957 Mar # Fort Shevchenko
+			5:00 RussiaAsia SHS%s	1991 Mar 31 2:00s
+			4:00	1:00	ASD	1991 Sep 29 2:00s
+			4:00	-	ASK	1992 Jan 19 2:00s
+			5:00 RussiaAsia AS%s
 
 # Kirgizstan
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Bishkek	4:58:24 -	LMT	1924 May  2
 			5:00	-	FSK	1957 Mar	# Frunze
-			6:00	Russia	FS%s	1991 Mar 31 2:00s
+			6:00 RussiaAsia FS%s	1991 Mar 31 2:00s
 			5:00	1:00	FSD	1991 Sep 29 2:00s
-			5:00	Russia	BS%s
+			5:00 RussiaAsia BS%s
 
 ###############################################################################
 
@@ -642,7 +660,6 @@ Zone	Asia/Vientiane	6:50:24 -	LMT	1906 Jun  9
 
 # Lebanon
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Lebanon	1880	only	-	Jan	1	0:00	0	-
 Rule	Lebanon	1920	only	-	Mar	28	0:00	1:00	" DST"
 Rule	Lebanon	1920	only	-	Oct	25	0:00	0	-
 Rule	Lebanon	1921	only	-	Apr	3	0:00	1:00	" DST"
@@ -685,10 +702,12 @@ Zone	Indian/Maldives	4:54:00 -	LMT	1880			# Male
 			5:00	-	PKT
 
 # Mongolia
+# Shanks says that Mongolia has three time zones,
+# but usno1995 and http://www.odci.gov/cia/publications/95fact/802389h.gif
+# both say that it has just one.
 # Let's comment out the western and eastern Mongolian time zones
 # till we know what their principal towns are.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Mongol	1978	only	-	Jan	1	0:00	0	S
 Rule	Mongol	1981	1984	-	Apr	1	0:00	1:00	T
 Rule	Mongol	1981	1984	-	Oct	1	0:00	0	S
 Rule	Mongol	1985	max	-	Mar	lastSun	2:00	1:00	T
@@ -726,16 +745,16 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
 # Palestine
 # These rules for Egypt are stolen from the `africa' file.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Egypt	1957	only	-	May	10	0:00	1:00	" DST"
-Rule	Egypt	1957	1958	-	Oct	 1	0:00	0	-
-Rule	Egypt	1958	only	-	May	 1	0:00	1:00	" DST"
-Rule	Egypt	1959	1981	-	May	 1	1:00	1:00	" DST"
-Rule	Egypt	1959	1965	-	Sep	30	3:00	0	-
-Rule	Egypt	1966	max	-	Oct	 1	3:00	0	-
+Rule EgyptAsia	1957	only	-	May	10	0:00	1:00	" DST"
+Rule EgyptAsia	1957	1958	-	Oct	 1	0:00	0	-
+Rule EgyptAsia	1958	only	-	May	 1	0:00	1:00	" DST"
+Rule EgyptAsia	1959	1981	-	May	 1	1:00	1:00	" DST"
+Rule EgyptAsia	1959	1965	-	Sep	30	3:00	0	-
+Rule EgyptAsia	1966	max	-	Oct	 1	3:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
 			2:00	-	EET	1957 May 10
-			2:00	Egypt	EET%s	1967 Jun 30
+			2:00 EgyptAsia	EET%s	1967 Jun 30
 			2:00	Zion	I%sT
 # This will undoubtedly change soon.
 
@@ -746,7 +765,6 @@ Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
 # Howse writes (p 162) that until 1844 the Philippines kept American date.
 # The rest of this data is from Shanks.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Phil	1899	only	-	May	11	0:00	0	S
 Rule	Phil	1936	only	-	Nov	1	0:00	1:00	D
 Rule	Phil	1937	only	-	Feb	1	0:00	0	S
 Rule	Phil	1954	only	-	Apr	12	0:00	1:00	D
@@ -796,7 +814,6 @@ Zone	Asia/Colombo	5:19:24 -	LMT	1880
 
 # Syria
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Syria	1920	only	-	Jan	1	0:00	0	-
 Rule	Syria	1920	1923	-	Apr	Sun>=15	2:00	1:00	" DST"
 Rule	Syria	1920	1923	-	Oct	Sun>=1	2:00	0	-
 Rule	Syria	1962	only	-	Apr	29	2:00	1:00	" DST"
@@ -828,7 +845,7 @@ Zone	Asia/Damascus	2:25:12 -	LMT	1920
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Dushanbe	4:35:12 -	LMT	1924 May  2
 			5:00	-	DSK	1957 Mar
-			6:00	Russia	DS%s	1991
+			6:00 RussiaAsia DS%s	1991
 			6:00	-	DSK
 # Shanks has Dushanbe at 5:00 (6:00 summer) after 1991 Sep 29 3:00,
 # but usno1995 has it at 6:00.  Go with usno1995.
@@ -843,7 +860,7 @@ Zone	Asia/Bangkok	6:42:04	-	LMT	1880
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Ashkhabad	3:53:32 -	LMT	1924 May  2
 			4:00	-	ASK	1957 Mar
-			5:00	Russia	AS%s	1991
+			5:00 RussiaAsia AS%s	1991
 			5:00	-	ASK
 # Shanks has Ashkhabad at 4:00 (5:00 summer) after 1991 Sep 20 3:00,
 # but usno has it at 5:00.  Go with usno1995.
@@ -857,11 +874,13 @@ Zone	Asia/Dubai	3:41:12 -	LMT	1920
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Tashkent	4:37:12 -	LMT	1924 May  2
 			5:00	-	TSK	1957 Mar
-			6:00	Russia	TS%s	1991 Mar 31 2:00s
+			6:00 RussiaAsia TS%s	1991 Mar 31 2:00s
 			5:00	1:00	TSD	1991 Sep 29 2:00s
 			5:00	-	TSK
 # Shanks has Tashkent using DST after 1991, but usno1995 says they don't.
 # Go with usno1995.
+# http://www.odci.gov/cia/publications/95fact/802389h.gif claims that
+# Uzbekistan has two time zones, but we lack data about this.
 
 # Vietnam
 # From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
diff --git a/time/australasia b/time/australasia
index 8c92a5b27a..960f9e3f55 100644
--- a/time/australasia
+++ b/time/australasia
@@ -1,4 +1,4 @@
-# @(#)australasia	7.25
+# @(#)australasia	7.27
 # This file also includes Pacific islands.
 
 # Notes are at the end of this file
@@ -8,7 +8,6 @@
 # Australia
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Aus	1895	only	-	Jan	 1	0:00	0	-
 # Shanks gives 1917 Jan 1 0:01; go with Whitman (and guess 2:00).
 Rule	Aus	1916	only	-	Oct	 1	2:00	1:00	-
 Rule	Aus	1917	only	-	Mar	25	2:00	0	-
@@ -208,10 +207,6 @@ Zone Pacific/Johnston	-10:00	-	HST
 # uninhabited
 
 # Kiribati
-# From Paul Eggert (1996-01-22):
-# Today's _Wall Street Journal_ (page 1) reports that Kiribati
-# ``declared it the same day throught the country as of Jan. 1, 1995''
-# as part of the competition to be first into the 21st century.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Tarawa	 11:32:04 -	LMT	1901		# Bairiki
 			 12:00	-	NZST
@@ -246,8 +241,7 @@ Zone Pacific/Yap	9:12:32	-	LMT	1901		# Colonia
 			9:00	-	PLT	1969 Oct
 			10:00	-	GST
 Zone Pacific/Truk	10:07:08 -	LMT	1901
-			10:00	-	GST	1978 Oct
-			11:00	-	NCST
+			10:00	-	GST
 Zone Pacific/Ponape	10:32:52 -	LMT	1901		# Kolonia
 			11:00	-	NCST
 Zone Pacific/Kosrae	10:51:56 -	LMT	1901
@@ -264,7 +258,6 @@ Zone	Pacific/Nauru	11:07:40 -	LMT	1921 Jan 15	# Uaobe
 
 # New Caledonia
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	NC	1912	only	-	Jan	13	0:00	0	S
 Rule	NC	1977	1978	-	Dec	Sun>=1	0:00	1:00	D
 Rule	NC	1978	1979	-	Feb	27	0:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -277,7 +270,6 @@ Zone	Pacific/Noumea	11:05:48 -	LMT	1912 Jan 13
 # New Zealand
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	NZ	1868	only	-	Jan	1	0:00	0	S
 # Shanks gives 1927 Nov 6 - 1928 Mar 4, 1928 Oct 14 - 1929 Mar 17,
 # 1929 Oct 13 - 1930 Mar 16; go with Whitman.
 Rule	NZ	1927	only	-	Nov	26	2:00	0:30	HD
@@ -368,10 +360,6 @@ Zone	Pacific/Fakaofo	-11:24:56 -	LMT	1901
 			-10:00	-	THT
 
 # Tonga
-# From Paul Eggert (1996-01-22):
-# Today's _Wall Street Journal_ (page 1) reports that ``Tonga has been plotting
-# to sneak ahead of [New Zealanders] by introducing daylight-saving time.''
-# But since Kiribati has moved the Date Line it's not clear what Tonga will do.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Tongatapu	12:19:20 -	LMT	1901
 			12:20	-	TMT	1968 Oct
@@ -384,7 +372,6 @@ Zone Pacific/Funafuti	11:56:52 -	LMT	1901
 
 # Vanuatu
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Vanuatu	1912	only	-	Jan	13	0:00	0	S
 Rule	Vanuatu	1983	only	-	Sep	25	0:00	1:00	D
 Rule	Vanuatu	1984	1991	-	Mar	Sun>=23	0:00	0	S
 Rule	Vanuatu	1984	only	-	Oct	23	0:00	1:00	D
@@ -840,6 +827,13 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 
 # Johnston data is from usno1995.
 
+# Kiribati
+
+# From Paul Eggert (1996-01-22):
+# Today's _Wall Street Journal_ (page 1) reports that Kiribati
+# ``declared it the same day throught the country as of Jan. 1, 1995''
+# as part of the competition to be first into the 21st century.
+
 # Kwajalein
 
 # In comp.risks 14.87 (26 August 1993), Peter Neumann writes:
@@ -855,9 +849,25 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # (now called the Marianas) kept American date for quite some time.
 # Ignore this for now, as we have no hard data.  See also Asia/Manila.
 
+# Micronesia
+
+# Alan Eugene Davis <adavis@kuentos.guam.net> writes (1996-03-16),
+# ``I am certain, having lived there for the past decade, that "Truk"
+# (now properly known as Chuuk) ... is in the time zone GMT+10.''
+#
+# Shanks writes that Truk switched from GMT+10 to GMT+11 on 1978-10-01;
+# ignore this for now.
+
 # Samoa
 
 # Howse writes that in 1879 the King of Samoa decided to change
 # ``the date in his kingdom from the Antipodean to the American system,
 # ordaining -- by a masterpiece of diplomatic flattery -- that
 # the Fourth of July should be celebrated twice in that year.''
+
+# Tonga
+
+# From Paul Eggert (1996-01-22):
+# Today's _Wall Street Journal_ (p 1) reports that ``Tonga has been plotting
+# to sneak ahead of [New Zealanders] by introducing daylight-saving time.''
+# Since Kiribati has moved the Date Line it's not clear what Tonga will do.
diff --git a/time/europe b/time/europe
index 04273d277c..b96f23556d 100644
--- a/time/europe
+++ b/time/europe
@@ -1,4 +1,4 @@
-# @(#)europe	7.33
+# @(#)europe	7.37
 
 # 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
@@ -36,7 +36,7 @@
 #	 5:00	ESK ESD	Yekaterinburg (was 4:00) (was SSK, SSD)*
 #	 6:00	OSK OSD	Omsk (was 5:00)*
 #	 6:00	NSK NSD	Novosibirsk (was 7:00)
-#	 7:00	TSK TSD	Tomsk (was 6:00)*
+#	 7:00	KRSK KRSD Krasnoyarsk (was 6:00)
 #	 8:00	ISK ISD	Irkutsk (was 7:00)*
 #	 9:00	YSK YSD	Yakutsk (was 8:00)*
 #	10:00	VSK VSD	Vladivostok (was 9:00)*
@@ -600,6 +600,11 @@
 # 1995-97 is now in place.  The Summer Time Order 1994 (SI 1994/2798)
 # came into force on 16 November.  It restates the dates from the EC
 # seventh Summer Time Directive....
+#
+# From Peter Ilieve <peter@aldie.co.uk> (1996-04-20):
+# Proposals for the eighth directive were supposed to have been produced
+# by the Commission by 1 Jan 96. They have not yet appeared (I asked just
+# before Easter).
 
 # From Peter Ilieve <peter@memex.co.uk> (March 28, 1994):
 # The [GB-Eire] end date of 22 October [1995] conflicts with your current rule
@@ -642,7 +647,6 @@
 # Whitman says Dublin Mean Time was -0:25:21, which is more precise than Shanks.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	GB-Eire 1847	only	-	Sep	22	0:00	0	GMT
 # 1916 to 1925--irregular
 Rule	GB-Eire	1916	only	-	May	21	2:00s	1:00	BST
 Rule	GB-Eire	1916	only	-	Oct	 1	2:00s	0	GMT
@@ -716,21 +720,21 @@ Rule	GB-Eire	1972	1980	-	Oct	Sun>=23	2:00s	0	GMT
 Rule	GB-Eire	1981	1995	-	Mar	lastSun	1:00u	1:00	BST
 Rule	GB-Eire 1981	1989	-	Oct	Sun>=23	1:00u	0	GMT
 Rule	GB-Eire 1990	1995	-	Oct	Sun>=22	1:00u	0	GMT
-# See EC for rules starting in 1996.
+# See EU for rules starting in 1996.
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/London	-0:01:15 -	LMT	1847 Sep 22
 			 0:00	GB-Eire	%s	1968 Feb 18 2:00
 			 1:00	-	BST	1971 Oct 31 2:00
 			 0:00	GB-Eire	%s	1996
-			 0:00	EC	GMT/BST
+			 0:00	EU	GMT/BST
 Zone	Europe/Belfast	-0:23:40 -	LMT	1880 Aug  2
 			-0:25:21 -	DMT	1916 May 21 2:00    # Dublin MT
 			-0:25:21 1:00	DST	1916 Oct  1 3:00
 			 0:00	GB-Eire	%s	1968 Feb 18 2:00
 			 1:00	-	BST	1971 Oct 31 3:00
 			 0:00	GB-Eire	%s	1996
-			 0:00	EC	GMT/BST
+			 0:00	EU	GMT/BST
 Zone	Europe/Dublin	-0:25:21 -	LMT	1880 Aug  2
 			-0:25:21 -	DMT	1916 May 21 2:00    # Dublin MT
 			-0:25:21 1:00	DST	1916 Oct  1 3:00
@@ -742,25 +746,24 @@ Zone	Europe/Dublin	-0:25:21 -	LMT	1880 Aug  2
 			 0:00	GB-Eire	%s	1968 Feb 18 2:00
 			 1:00	-	BST	1971 Oct 31 3:00
 			 0:00	GB-Eire	%s	1996
-			 0:00	EC	GMT/BST
+			 0:00	EU	GMT/BST
 
 ###############################################################################
 
 # Continental Europe
 
-# EC rules are for the European Community.
+# EU rules are for the European Union, previously known as the EC, EEC,
+# Common Market, etc.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	EC	1800	only	-	Jan	 1	 0:00	0	-
-Rule	EC	1977	1980	-	Apr	Sun>=1	 1:00u	1:00	" DST"
-Rule	EC	1977	only	-	Sep	lastSun	 1:00u	0	-
-Rule	EC	1978	only	-	Oct	 1	 1:00u	0	-
-Rule	EC	1979	1995	-	Sep	lastSun	 1:00u	0	-
-Rule	EC	1981	max	-	Mar	lastSun	 1:00u	1:00	" DST"
-Rule	EC	1996	max	-	Oct	lastSun	 1:00u	0	-
-
-# W-Eur differs from EC only in that W-Eur uses standard time.
-Rule	W-Eur	1800	only	-	Jan	 1	 0:00	0	-
+Rule	EU	1977	1980	-	Apr	Sun>=1	 1:00u	1:00	" DST"
+Rule	EU	1977	only	-	Sep	lastSun	 1:00u	0	-
+Rule	EU	1978	only	-	Oct	 1	 1:00u	0	-
+Rule	EU	1979	1995	-	Sep	lastSun	 1:00u	0	-
+Rule	EU	1981	max	-	Mar	lastSun	 1:00u	1:00	" DST"
+Rule	EU	1996	max	-	Oct	lastSun	 1:00u	0	-
+
+# W-Eur differs from EU only in that W-Eur uses standard time.
 Rule	W-Eur	1977	1980	-	Apr	Sun>=1	 1:00s	1:00	" DST"
 Rule	W-Eur	1977	only	-	Sep	lastSun	 1:00s	0	-
 Rule	W-Eur	1978	only	-	Oct	 1	 1:00s	0	-
@@ -769,18 +772,13 @@ Rule	W-Eur	1981	max	-	Mar	lastSun	 1:00s	1:00	" DST"
 Rule	W-Eur	1996	max	-	Oct	lastSun	 1:00s	0	-
 
 # Older M-Eur rules are for convenience in the tables.
-# From 1977 on, M-Eur differs from EC only in that M-Eur uses standard time.
-Rule	M-Eur	1800	only	-	Jan	 1	 0:00	0	-
+# From 1977 on, M-Eur differs from EU only in that M-Eur uses standard time.
 Rule	M-Eur	1916	only	-	Apr	30	23:00	1:00	" DST"
 Rule	M-Eur	1916	only	-	Oct	 1	 1:00	0	-
 Rule	M-Eur	1917	1918	-	Apr	Mon>=15	 2:00s	1:00	" DST"
 Rule	M-Eur	1917	1918	-	Sep	Mon>=15	 2:00s	0	-
 Rule	M-Eur	1940	only	-	Apr	 1	 2:00s	1:00	" DST"
-# Shanks says DST was continuous from 1940 Apr 1 to 1942 Nov 2; go with Whitman.
-Rule	M-Eur	1940	only	-	Dec	31	 2:00s	0	-
-Rule	M-Eur	1941	only	-	Feb	25	 2:00s	1:00	" DST"
-Rule	M-Eur	1941	only	-	Oct	 5	 2:00s	0	-
-Rule	M-Eur	1942	only	-	Jan	 1	 2:00s	1:00	" DST"
+# Whitman says 1941 DST was only from Feb 25 to Oct 5; go with Shanks.
 Rule	M-Eur	1942	only	-	Nov	 2	 2:00s	0	-
 Rule	M-Eur	1943	only	-	Mar	29	 2:00s	1:00	" DST"
 Rule	M-Eur	1943	only	-	Oct	 4	 2:00s	0	-
@@ -795,7 +793,6 @@ Rule	M-Eur	1981	max	-	Mar	lastSun	 2:00s	1:00	" DST"
 Rule	M-Eur	1996	max	-	Oct	lastSun	 2:00s	0	-
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Russia	1880	only	-	Jan	 1	 0:00	0	-
 Rule	Russia	1917	only	-	Jul	 1	23:00	1:00	" DST"
 Rule	Russia	1917	only	-	Dec	28	 0:00	0	-
 Rule	Russia	1918	only	-	May	31	22:00	2:00	" DDST"
@@ -818,9 +815,9 @@ Rule	Russia	1985	max	-	Mar	lastSun	 2:00s	1:00	D
 # These are for backward compatibility with older versions.
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	WET		0:00	EC	WET%s
+Zone	WET		0:00	EU	WET%s
 Zone	MET		1:00	M-Eur	MET%s
-Zone	EET		2:00	EC	EET%s
+Zone	EET		2:00	EU	EET%s
 
 # Tom Hoffman says that MET is also known as Central European Time
 
@@ -859,18 +856,17 @@ Zone	Europe/Tirane	1:19:20 -	LMT	1914
 			1:00	-	MET	1940 Jun 16
 			1:00	Albania	MET%s	1985 Mar 31 1:00
 			1:00	W-Eur	MET%s
-#			This may change to `EC' soon.
+#			This may change to `EU' soon.
 
 # Andorra
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Andorra	0:06:04 -	LMT	1901
 			0:00	-	WET	1946 Sep 30
 			1:00	-	MET	1985 Mar 31 2:00
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Austria
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Austria	1918	only	-	Jun	16	3:00	0	-
 Rule	Austria	1920	only	-	Apr	 5	2:00s	1:00	" DST"
 Rule	Austria	1920	only	-	Sep	13	2:00s	0	-
 Rule	Austria	1945	only	-	Apr	 2	2:00s	1:00	" DST"
@@ -885,7 +881,7 @@ Zone	Europe/Vienna	1:05:20 -	LMT	1893 Apr
 			1:00	Austria	MET%s	1940 Apr  1 2:00
 			1:00	M-Eur	MET%s	1945 Apr  2 2:00
 			1:00	Austria	MET%s	1981
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Belarus
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -896,7 +892,7 @@ Zone	Europe/Minsk	1:50:16 -	LMT	1880
 			3:00	Russia	MS%s	1991 Mar 31 2:00s
 			2:00	1:00  "EET DST"	1991 Sep 29 2:00s
 			2:00	M-Eur	EET%s
-#			This may change to `EC' soon.
+#			This may change to `EU' soon.
 
 # Belgium
 # Whitman and Shanks disagree; go with Shanks, usually.
@@ -944,7 +940,7 @@ Zone	Europe/Brussels	0:17:20 -	LMT	1880
 			0:00	Belgium	WET%s	1940 Feb 24 23:00
 			1:00	M-Eur	MET%s	1945 Apr  2  2:00
 			1:00	Belgium	MET%s	1977
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Bosnia and Herzegovina
 # They switched from the Julian to the Gregorian calendar on 1918 Mar 18.
@@ -954,7 +950,7 @@ Zone	Europe/Sarajevo	1:13:40	-	LMT	1884
 			1:00	M-Eur	MET%s	1945 May  8  2:00s
 			1:00	1:00  "MET DST"	1945 Sep 16  2:00s
 			1:00	-	MET	1983
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Bulgaria
 # Part switched from the Julian to the Gregorian calendar on 1915 Nov 14;
@@ -973,7 +969,7 @@ Zone	Europe/Sofia	1:33:16 -	LMT	1880
 			2:00	-	EET	1979 Mar 31 23:00
 			2:00	Bulg	EET%s	1982 Sep 26  2:00
 			2:00	M-Eur	EET%s
-#			This may change to `EC' soon.
+#			This may change to `EU' soon.
 
 # Croatia
 # They switched from the Julian to the Gregorian calendar on 1918 Mar 18.
@@ -983,11 +979,10 @@ Zone	Europe/Zagreb	1:03:52	-	LMT	1884
 			1:00	M-Eur	MET%s	1945 May  8  2:00s
 			1:00	1:00  "MET DST"	1945 Sep 16  2:00s
 			1:00	-	MET	1983
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Czech Republic
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Czech	1944	only	-	Sep	17	2:00s	0	-
 Rule	Czech	1945	only	-	Apr	 8	2:00s	1:00	" DST"
 Rule	Czech	1945	only	-	Nov	18	2:00s	0	-
 Rule	Czech	1946	only	-	May	 6	2:00s	1:00	" DST"
@@ -1000,7 +995,7 @@ Zone	Europe/Prague	0:57:44 -	LMT	1850
 			0:58	-	PMT	1891 Oct     # Prague Mean Time
 			1:00	M-Eur	MET%s	1944 Sep 17 2:00s
 			1:00	Czech	MET%s	1979
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Denmark
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -1025,10 +1020,10 @@ Zone Europe/Copenhagen	 0:50:20 -	LMT	1890
 			 1:00	Denmark	MET%s	1942 Nov  2 2:00s
 			 1:00	M-Eur	MET%s	1945 Apr  2 2:00
 			 1:00	Denmark	MET%s	1980
-			 1:00	EC	MET%s
+			 1:00	EU	MET%s
 Zone Atlantic/Faeroe	-0:27:04 -	LMT	1908 Jan 11	# Torshavn
 			 0:00	-	WET	1981
-			 0:00	EC	WET%s
+			 0:00	EU	WET%s
 Zone America/Scoresbysund -1:29:00 -	LMT	1916 Jul 28
 			-2:00	-	MGT	1980 Apr  6 2:00
 			-2:00	M-Eur	MGT%s	1981 Mar 29
@@ -1057,7 +1052,7 @@ Zone	Europe/Tallinn	1:39:00	-	LMT	1880
 			3:00	Russia	MS%s	1989 Mar 26 2:00s
 			2:00	1:00  "EET DST"	1989 Sep 24 2:00s
 			2:00	M-Eur	EET%s
-#			This may change to `EC' soon.
+#			This may change to `EU' soon.
 
 # Finland
 #
@@ -1070,20 +1065,18 @@ Zone	Europe/Tallinn	1:39:00	-	LMT	1880
 # Go with Strang instead.
 #
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Finland	1921	only	-	May	1	0:00	0	-
 Rule	Finland	1942	only	-	Apr	3	0:00	1:00	" DST"
 Rule	Finland	1942	only	-	Oct	3	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Helsinki	1:39:52 -	LMT	1878 May 31
 			1:40	-	HMT	1921 May    # Helsinki Mean Time
 			2:00	Finland	EET%s	1981 Mar 29 2:00
-			2:00	EC	EET%s
+			2:00	EU	EET%s
 
 # France
 # Shanks seems to use `24:00' ambiguously; we resolve it with Whitman.
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	France	1911	only	-	Jan	 1	 0:00	0	-
 Rule	France	1916	only	-	Jun	14	23:00s	1:00	" DST"
 Rule	France	1916	1919	-	Oct	Sun>=1	 0:00	0	-
 Rule	France	1917	only	-	Mar	24	23:00s	1:00	" DST"
@@ -1139,7 +1132,7 @@ Zone	Europe/Paris	0:09:21 -	LMT	1891 Mar 15 0:01
 			1:00	M-Eur	MET%s	1944 Aug 25
 			0:00	France	WET%s	1945 Sep 16 3:00
 			1:00	France	MET%s	1977
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Germany
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -1159,21 +1152,20 @@ Rule	Germany	1949	only	-	Apr	10	2:00s	1:00	" DST"
 Zone	Europe/Berlin	0:53:28 -	LMT	1893 Apr
 			1:00	M-Eur	MET%s	1945 Apr 2 2:00
 			1:00	Germany	MET%s	1980
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Gibraltar
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Gibraltar	-0:21:24 -	LMT	1880 Aug  2
 			0:00	GB-Eire	%s	1957 Apr 14 2:00
 			1:00	-	MET	1982
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Greece
 # They adopted the Julian calendar in 1846.
 # Part switched to the Gregorian calendar on 1916 Jul 28.
 # The rest switched on 1920 Mar 18.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Greece	1916	only	-	July	28	0:01	0	-
 # Whitman gives 1932 Jul 5 - Nov 1; go with Shanks.
 Rule	Greece	1932	only	-	Jul	 7	0:00	1:00	" DST"
 Rule	Greece	1932	only	-	Sep	 1	0:00	0	-
@@ -1204,12 +1196,13 @@ Zone	Europe/Athens	1:34:52 -	LMT	1895 Sep 14
 			1:00	Greece	MET%s	1944 Apr  4
 			2:00	Greece	EET%s	1981
 			# Shanks says they switched to M-Eur in 1981;
-			# go with EC intead, since Greece joined it on Jan 1.
-			2:00	EC	EET%s
+			# go with EU intead, since Greece joined it on Jan 1.
+			2:00	EU	EET%s
 
 # Hungary
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Hungary	1918	only	-	Sep	29	 2:00s	0	-
+Rule	Hungary	1918	only	-	Apr	 1	 3:00	1:00	" DST"
+Rule	Hungary	1918	only	-	Sep	29	 3:00	0	-
 Rule	Hungary	1919	only	-	Apr	15	 3:00	1:00	" DST"
 Rule	Hungary	1919	only	-	Sep	15	 3:00	0	-
 Rule	Hungary	1920	only	-	Apr	 5	 3:00	1:00	" DST"
@@ -1230,11 +1223,11 @@ Rule	Hungary	1957	only	-	Sep	lastSun	 3:00	0	-
 Rule	Hungary	1980	only	-	Apr	 6	 1:00	1:00	" DST"
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Budapest	1:16:20 -	LMT	1890 Oct
-			1:00	M-Eur	MET%s	1918 Jul
+			1:00	M-Eur	MET%s	1918
 			1:00	Hungary	MET%s	1941 Apr  6  2:00
 			1:00	M-Eur	MET%s	1945 May  1 23:00
 			1:00	Hungary	MET%s	1980 Sep 28  2:00s
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Iceland
 #
@@ -1272,7 +1265,6 @@ Zone	Europe/Budapest	1:16:20 -	LMT	1890 Oct
 # Reykavik was -1:28 from 1837 to 1908, local mean time before that.
 #
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Iceland	1908	only	-	Jan	 1	 0:00	0	S
 Rule	Iceland	1917	1918	-	Feb	19	23:00	1:00	D
 Rule	Iceland	1917	only	-	Oct	21	 1:00	0	S
 Rule	Iceland	1918	only	-	Nov	16	 1:00	0	S
@@ -1300,22 +1292,43 @@ Zone Atlantic/Reykjavik	-1:27:24 -	LMT	1837
 			 0:00	-	GMT
 
 # Italy
+# From Paul Eggert (1996-05-06):
+# For Italian DST we have three sources: Shanks, Whitman, and F. Pollastri
+# <http://pisolo.cstv.to.cnr.it/toi/it/ienitlt.html> (see `FP' below),
+# taken from a publication of the Italian National Electrotechnical Institute.
+# When the three sources disagree, guess who's right, as follows:
+#
+# year 	FP	Shanks (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
+#	09-30	09-29 24:00	09-30 01:00	FP & W
+# 1918	03-09	03-09 24:00	03-09 00:00	FP & S
+#	10-06	10-05 24:00	10-06 01:00	FP & W
+# 1919	03-01	03-01 24:00	03-01 00:00	FP & S
+#	10-04	10-04 24:00	10-04 01:00	FP; guess 24:00s
+# 1920	03-20	03-20 24:00	03-20 00:00	FP & S
+#	09-18	09-18 24:00	10-01 01:00	FP; guess 24:00s
+# 1944	04-02	04-03 02:00			S (see M-Eur)
+#	09-16	10-02 03:00			FP; guess 24:00s
+# 1945	09-14	09-16 24:00			FP; guess 24:00s
+# 1970	05-21	05-31 00:00			S
+#	09-20	09-27 00:00			S
+#
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Italy	1893	only	-	Nov	 1	0:00s	0	S
-# Shanks gives transition times of 1916-1920 as 24:00; go with Whitman.
 Rule	Italy	1916	only	-	Jun	 3	0:00s	1:00	" DST"
-Rule	Italy	1916	only	-	Sep	30	0:00s	0	-
-Rule	Italy	1917	only	-	Mar	31	0:00s	1:00	" DST"
+Rule	Italy	1916	only	-	Oct	 1	0:00s	0	-
+Rule	Italy	1917	only	-	Apr	 1	0:00s	1:00	" DST"
 Rule	Italy	1917	only	-	Sep	30	0:00s	0	-
-Rule	Italy	1918	only	-	Mar	 9	0:00s	1:00	" DST"
+Rule	Italy	1918	only	-	Mar	10	0:00s	1:00	" DST"
 Rule	Italy	1918	1919	-	Oct	Sun>=1	0:00s	0	-
-Rule	Italy	1919	only	-	Mar	 1	0:00s	1:00	" DST"
-Rule	Italy	1920	only	-	Mar	20	0:00s	1:00	" DST"
-# Shanks gives 1920 Sep 18; go with Whitman.
-Rule	Italy	1920	only	-	Oct	 1	0:00s	0	-
-Rule	Italy	1940	only	-	Jun	15	0:00	1:00	" DST"
+Rule	Italy	1919	only	-	Mar	 2	0:00s	1:00	" DST"
+Rule	Italy	1920	only	-	Mar	21	0:00s	1:00	" DST"
+Rule	Italy	1920	only	-	Sep	19	0:00s	0	-
+Rule	Italy	1940	only	-	Jun	15	0:00s	1:00	" DST"
+Rule	Italy	1944	only	-	Sep	17	0:00s	0	-
 Rule	Italy	1945	only	-	Apr	 2	2:00	1:00	" DST"
-Rule	Italy	1945	only	-	Sep	17	0:00	0	-
+Rule	Italy	1945	only	-	Sep	15	0:00s	0	-
 Rule	Italy	1946	only	-	Mar	17	2:00s	1:00	" DST"
 Rule	Italy	1946	only	-	Oct	 6	2:00s	0	-
 Rule	Italy	1947	only	-	Mar	16	0:00s	1:00	" DST"
@@ -1343,9 +1356,9 @@ Rule	Italy	1979	only	-	Sep	30	0:00s	0	-
 Zone	Europe/Rome	0:49:56 -	LMT	1866 Sep 22
 			0:50	-	RMT	1893 Nov	# Rome Mean Time
 			1:00	Italy	MET%s	1942 Nov  2 2:00s
-			1:00	M-Eur	MET%s	1945 Apr  2 2:00s
+			1:00	M-Eur	MET%s	1944 Jul
 			1:00	Italy	MET%s	1980
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 Link	Europe/Rome	Europe/Vatican
 Link	Europe/Rome	Europe/San_Marino
@@ -1364,13 +1377,13 @@ Zone	Europe/Riga	1:36:24	-	LMT	1880
 			3:00	Russia	MS%s	1991 Mar 31 2:00s
 			2:00	1:00  "EET DST"	1991 Sep 29 2:00s
 			2:00	M-Eur	EET%s
-#			This may change to `EC' soon.
+#			This may change to `EU' soon.
 
 # Liechtenstein
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Vaduz	0:38:04 -	LMT	1894 Jun
 			1:00	-	MET	1981
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Lithuania
 # They switched from the Julian to the Gregorian calendar on 1918 Feb 15.
@@ -1386,12 +1399,11 @@ Zone	Europe/Vilnius	1:41:16	-	LMT	1880
 			3:00	Russia	MS%s	1991 Mar 31 2:00s
 			2:00	1:00  "EET DST"	1991 Sep 29 2:00s
 			2:00	M-Eur	EET%s
-#			This may change to `EC' soon.
+#			This may change to `EU' soon.
 
 # Luxembourg
 # Whitman disagrees with most of these dates in minor ways; go with Shanks.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Lux	1904	only	-	Jun	 1	 0:00	0	-
 Rule	Lux	1916	only	-	May	14	23:00	1:00	" DST"
 Rule	Lux	1916	only	-	Oct	 1	 1:00	0	-
 Rule	Lux	1917	only	-	Apr	28	23:00	1:00	" DST"
@@ -1422,7 +1434,7 @@ Zone Europe/Luxembourg	0:24:36 -	LMT	1904 Jun
 			0:00	Belgium	WET%s	1940 May 14 3:00
 			1:00	M-Eur	WET%s	1944 Sep 18 3:00
 			1:00	Belgium	MET%s	1977
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Macedonia
 # They switched from the Julian to the Gregorian calendar on 1918 Mar 18.
@@ -1432,7 +1444,7 @@ Zone	Europe/Skopje	1:25:44	-	LMT	1884
 			1:00	M-Eur	MET%s	1945 May  8  2:00s
 			1:00	1:00  "MET DST"	1945 Sep 16  2:00s
 			1:00	-	MET	1983
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Malta
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -1449,7 +1461,7 @@ Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2	# Valletta
 			1:00	M-Eur	MET%s	1945 Apr  2 2:00s
 			1:00	Italy	MET%s	1973 Mar 31
 			1:00	Malta	MET%s	1981
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Moldova
 # They switched from the Julian to the Gregorian calendar on 1919 Mar 18.
@@ -1459,7 +1471,7 @@ Zone	Europe/Chisinau	1:55:20 -	LMT	1924 May  2
 			3:00	Russia	MS%s	1991 Mar 31 2:00s
 			2:00	1:00  "EET DST"	1991 Sep 29 2:00s
 			2:00	M-Eur	EET%s
-#			This may change to `EC' soon.
+#			This may change to `EU' soon.
 
 # Monaco
 # Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21.
@@ -1468,13 +1480,12 @@ Zone	Europe/Monaco	0:29:32 -	LMT	1891 Mar 15
 			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
 			0:00	France	WET%s	1945 Sep 16 3:00
 			1:00	France	MET%s	1977
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Netherlands
 # Howse writes that the Netherlands' railways used GMT between 1892 and 1940,
 # but for other purposes the Netherlands used Amsterdam mean time.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Neth	1892	only	-	May	 1	0:00	0	AMT
 # Shanks gives 1916 May 1 0:00 and 1916 Oct 1 0:00; go with Whitman.
 Rule	Neth	1916	only	-	May	 1	2:00s	1:00	NST
 Rule	Neth	1916	only	-	Oct	 2	2:00s	0	AMT
@@ -1506,11 +1517,10 @@ Zone Europe/Amsterdam	0:19:28 -	LMT	1892 May
 			0:20	Neth	%s	1940 May 16 0:40
 			1:00	M-Eur	MET%s	1945 Apr  2 2:00
 			1:00	Neth	MET%s	1977
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Norway
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Norway	1892	only	-	May	 1	0:00	0	-
 # Whitman gives 1916 May 21 - 1916 Oct 21; go with Shanks.
 Rule	Norway	1916	only	-	May	22	1:00	1:00	" DST"
 Rule	Norway	1916	only	-	Sep	30	0:00	0	-
@@ -1528,7 +1538,7 @@ Zone	Europe/Oslo	0:43:00 -	LMT	1895
 			1:00	Norway	MET%s	1940 Aug 10 23:00
 			1:00	M-Eur	MET%s	1945 Apr  2  2:00
 			1:00	Norway	MET%s	1980
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 # Svalbard is like Europe/Oslo.
 #
 # From Whitman:
@@ -1569,11 +1579,10 @@ Zone	Europe/Warsaw	1:24:00 -	LMT	1880
 			1:00	M-Eur	MET%s	1944 Oct
 			1:00	Poland	MET%s	1977 Apr  3 1:00
 			1:00	W-Eur	MET%s
-#			This may change to `EC' soon.
+#			This may change to `EU' soon.
 
 # Portugal
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Port	1911	only	-	May	24	 0:00	0	-
 Rule	Port	1916	only	-	Jun	17	23:00	1:00	" DST"
 # Whitman gives 1916 Oct 31; go with Shanks.
 Rule	Port	1916	only	-	Nov	 1	 1:00	0	-
@@ -1640,16 +1649,16 @@ Zone	Europe/Lisbon	-0:36:32 -	LMT	1884
 			 0:00	Port	WET%s	1966 Apr  3 2:00
 			 1:00	-	MET	1976 Sep 26 1:00
 			 0:00	Port	WET%s	1983 Sep 25 1:00s
-			 0:00	EC	WET%s	1992 Sep 27 1:00s
+			 0:00	EU	WET%s	1992 Sep 27 1:00s
 # From Rui Pedro Salgueiro <rps@inescca.inescc.pt> (November 12, 1992):
 # Portugal has recently (September, 27) changed timezone
 # (from WET to MET or CET) to harmonize with EEC.
-			 1:00	EC	MET%s	1996 Mar 31 1:00u
+			 1:00	EU	MET%s	1996 Mar 31 1:00u
 # Martin Bruckmann <martin@ua.pt> (1996-02-29) reports via Peter Ilieve
 # that Portugal is reverting to 0:00 by not moving its clocks this spring.
 # The new Prime Minister was fed up with getting up in the dark in the winter.
 			 0:00	1:00  "WET DST"	1996 Oct 27 1:00u
-			 0:00	EC	WET%s
+			 0:00	EU	WET%s
 # We don't know what happened to Madeira or the Azores,
 # so we'll just use Shanks for now.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -1664,13 +1673,12 @@ Zone Atlantic/Madeira	-1:07:36 -	LMT	1884		# Funchal
 			-1:00	Port	ACT%s	1966 Apr  3 2:00
 			 0:00	-	WET	1977 Mar 27
 			 0:00	Port	WET%s	1983 Sep 25 1:00s
-			 0:00	EC	WET%s
+			 0:00	EU	WET%s
 
 # Romania
 # Catholic Romania switched from the Julian to the Gregorian calendar on
 # on 1919 Mar 18.  Greek Orthodox Romania switched on 1920 Mar 18.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Romania	1931	only	-	Jul	24	 0:00	0	-
 Rule	Romania	1932	only	-	May	21	 0:00s	1:00	" DST"
 Rule	Romania	1932	1939	-	Oct	Sun>=1	 0:00s	0	-
 Rule	Romania	1933	1939	-	Apr	Sun>=2	 0:00s	1:00	" DST"
@@ -1683,7 +1691,7 @@ Zone Europe/Bucharest	1:44:24 -	LMT	1891 Oct
 			1:44	-	BMT	1931 Jul 24	# Bucharest MT
 			2:00	Romania	EET%s	1981 Mar 29 2:00s
 			2:00	M-Eur	EET%s
-#			This may change to `EC' soon.
+#			This may change to `EU' soon.
 
 # Russia
 # From Paul Eggert <eggert@twinsun.com> (May 28, 1994):
@@ -1730,7 +1738,6 @@ Zone Asia/Omsk		 4:53:36 -	LMT	1924 May  2
 # I do not know why they have decided to make this change;
 # as far as I remember it was done exactly during winter->summer switching
 # so we (Novosibirsk) simply did not switch.
-# Tomsk is still 4 hours ahead of Moscow.
 Zone Asia/Novosibirsk	 5:31:40 -	LMT	1924 May  2
 			 6:00	-	NSK	1957 Mar
 			 7:00	Russia	NS%s	1991 Mar 31 2:00s
@@ -1739,12 +1746,12 @@ Zone Asia/Novosibirsk	 5:31:40 -	LMT	1924 May  2
 			 7:00	Russia	NS%s	1994 Mar 27 2:00s
 			 6:00	1:00	NSD	1994 Sep 25 2:00s
 			 6:00	Russia	NS%s
-Zone Asia/Tomsk		 5:39:52 -	LMT	1924 May  2
-			 6:00	-	TSK	1957 Mar
-			 7:00	Russia	TS%s	1991 Mar 31 2:00s
-			 6:00	1:00	TSD	1991 Sep 29 2:00s
-			 6:00	-	TSK	1992 Jan 19 2:00s
-			 7:00	Russia	TS%s
+Zone Asia/Krasnoyarsk	 6:11:20 -	LMT	1924 May  2
+			 6:00	-	KRSK	1957 Mar
+			 7:00	Russia	KRS%s	1991 Mar 31 2:00s
+			 6:00	1:00	KRSD	1991 Sep 29 2:00s
+			 6:00	-	KRSK	1992 Jan 19 2:00s
+			 7:00	Russia	KRS%s
 Zone Asia/Irkutsk	 6:57:20 -	LMT	1880
 			 6:57	-	LST	1924 May  2
 			 7:00	-	ISK	1957 Mar
@@ -1796,11 +1803,10 @@ Zone Europe/Ljubljana	0:58:04	-	LMT	1884
 			1:00	M-Eur	MET%s	1945 May  8  2:00s
 			1:00	1:00  "MET DST"	1945 Sep 16  2:00s
 			1:00	-	MET	1983
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Spain
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Spain	1901	only	-	Jan	 1	 0:00	0	-
 # For 1917-1919 Whitman gives Apr Sat>=1 - Oct Sat>=1; go with Shanks.
 Rule	Spain	1917	only	-	May	 5	23:00s	1:00	" DST"
 Rule	Spain	1917	1919	-	Oct	 6	23:00s	0	-
@@ -1842,12 +1848,12 @@ Rule	Spain	1978	only	-	Oct	 1	 1:00	0	-
 Zone	Europe/Madrid	-0:14:44 -	LMT	1901
 			 0:00	Spain	WET%s	1946 Sep 30
 			 1:00	Spain	MET%s	1979
-			 1:00	EC	MET%s
+			 1:00	EU	MET%s
 Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
 			-1:00	-	ACT	1946 Sep 30 1:00
 			 0:00	-	WET	1980 Apr  6 0:00s
 			 0:00	1:00  "WET DST"	1980 Sep 28 0:00s
-			 0:00	EC	WET%s
+			 0:00	EU	WET%s
 
 # Sweden
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -1856,7 +1862,7 @@ Zone Europe/Stockholm	1:12:12 -	LMT	1878 May 31
 			1:00	-	MET	1916 Apr 14 23:00s
 			1:00	1:00  "MET DST"	1916 Sep 30 23:00s
 			1:00	-	MET	1980
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Switzerland
 # From Howse (1988), p 82:
@@ -1864,7 +1870,6 @@ Zone Europe/Stockholm	1:12:12 -	LMT	1878 May 31
 # and their performance improved enormously.  Communities began to keep
 # mean time in preference to apparent time -- Geneva from 1780 ....
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Swiss	1894	only	-	Jun	1	0:00	0	-
 # From Whitman (who writes ``Midnight?''):
 Rule	Swiss	1940	only	-	Nov	 2	0:00	1:00	" DST"
 Rule	Swiss	1940	only	-	Dec	31	0:00	0	-
@@ -1875,13 +1880,12 @@ Rule	Swiss	1941	1942	-	Oct	Sun>=1	0:00	0	-
 Zone	Europe/Zurich	0:34:08 -	LMT	1848 Sep 12
 			0:30	-	SST	1894 Jun   # Swiss Standard Time
 			1:00	Swiss	MET%s	1981
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 # Turkey
 # European Turkey switched to the Gregorian calendar in 1908.
 # Asian Turkey switched in 1914.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Turkey	1910	only	-	Oct	 1	0:00	0	-
 Rule	Turkey	1916	only	-	May	 1	0:00	1:00	" DST"
 Rule	Turkey	1916	only	-	Oct	 1	0:00	0	-
 Rule	Turkey	1920	only	-	Mar	28	0:00	1:00	" DST"
@@ -1941,7 +1945,7 @@ Zone	Europe/Istanbul	1:55:52 -	LMT	1880
 			3:00	Turkey	TUR%s	1985 Apr 20
 			2:00	Turkey	EET%s	1986
 			2:00	M-Eur	EET%s
-#			This may change to `EC' soon.
+#			This may change to `EU' soon.
 Link	Europe/Istanbul	Asia/Istanbul	# Istanbul is in both continents.
 
 # Ukraine
@@ -1959,7 +1963,7 @@ Zone Europe/Kiev	2:02:04 -	LMT	1880
 			2:00	-	EET	1930 Jun 21
 			3:00	Russia	MS%s	1990 Jul 17
 			2:00	M-Eur	EET%s
-#			This may change to `EC' soon.
+#			This may change to `EU' soon.
 Zone Europe/Simferopol	2:16:24 -	LMT	1880
 			2:08	Russia	LST%s	1919 Jul  1 2:00
 			2:08	Ukraine	LST%s	1924 May  2
@@ -1981,7 +1985,7 @@ Zone	Europe/Belgrade	1:22:00	-	LMT	1884
 			1:00	M-Eur	MET%s	1945 May  8  2:00s
 			1:00	1:00  "MET DST"	1945 Sep 16  2:00s
 			1:00	-	MET	1983
-			1:00	EC	MET%s
+			1:00	EU	MET%s
 
 ###############################################################################
 
diff --git a/time/northamerica b/time/northamerica
index d1427900dd..1d0342a568 100644
--- a/time/northamerica
+++ b/time/northamerica
@@ -1,4 +1,4 @@
-# @(#)northamerica	7.22
+# @(#)northamerica	7.25
 # also includes Central America and the Caribbean
 
 # This data is by no means authoritative; if you think you know better,
@@ -160,11 +160,11 @@ Rule	Denver	1965	1966	-	Apr	lastSun	2:00	1:00	D
 Rule	Denver	1965	1966	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Denver	-6:59:56 -	LMT	1883 Nov 18 12:00
-			-7:00	US	E%sT	1920
-			-7:00	Denver	E%sT	1942
-			-7:00	US	E%sT	1946
-			-7:00	Denver	E%sT	1967
-			-7:00	US	E%sT
+			-7:00	US	M%sT	1920
+			-7:00	Denver	M%sT	1942
+			-7:00	US	M%sT	1946
+			-7:00	Denver	M%sT	1967
+			-7:00	US	M%sT
 
 # US Pacific time, represented by Los Angeles
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
@@ -461,8 +461,6 @@ Link	Pacific/Honolulu	HST
 #
 # See the `africa' file for Zone naming conventions.
 
-
-
 # Canada
 
 # Canada is reportedly lots easier than the US--leastways since 1951.
@@ -569,11 +567,8 @@ Link	Pacific/Honolulu	HST
 # From Paul Eggert <eggert@twinsun.com> (1994-11-22):
 # Alas, this sort of thing must be handled by localization software.
 
-
-
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	StJohns	1884	only	-	Jan	 1	0:00	0	S
 Rule	StJohns	1917	1918	-	Apr	Sun>=8	2:00	1:00	D
 Rule	StJohns	1917	only	-	Sep	17	2:00	0	S
 Rule	StJohns	1918	only	-	Oct	31	2:00	0	S
@@ -612,7 +607,6 @@ Zone America/St_Johns	-3:30:52 -	LMT	1884
 			-3:30	StJohns	N%sT
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule Halifax	1902	only	-	Jun	15	0: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	1918	only	-	Apr	14	2:00	1:00	D
@@ -658,7 +652,6 @@ Zone America/Halifax	-4:14:24 -	LMT	1902 Jun 15
 			-4:00	Halifax	A%sT
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Mont	1884	only	-	Jan	 1	0:00	0	S
 Rule	Mont	1917	only	-	Mar	25	2:00	1:00	D
 Rule	Mont	1917	only	-	Apr	24	0:00	0	S
 Rule	Mont	1918	only	-	Apr	14	2:00	1:00	D
@@ -692,7 +685,6 @@ Zone America/Montreal	-4:54:16 -	LMT	1884
 			-5:00	Mont	E%sT
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Winn	1887	only	-	Jul	16	0:00	0	S
 Rule	Winn	1916	only	-	Apr	23	0:00	1:00	D
 Rule	Winn	1916	only	-	Sep	17	0:00	0	S
 Rule	Winn	1918	only	-	Apr	14	2:00	1:00	D
@@ -721,7 +713,6 @@ Zone America/Winnipeg	-6:28:36 -	LMT	1887 Jul 16
 			-6:00	Winn	C%sT
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Regina	1905	only	-	Sep	 1	0:00	0	S
 Rule	Regina	1918	only	-	Apr	14	2:00	1:00	D
 Rule	Regina	1918	only	-	Oct	31	2:00	0	S
 Rule	Regina	1930	1934	-	May	Sun>=1	0:00	1:00	D
@@ -742,7 +733,6 @@ Zone	America/Regina	-6:58:36 -	LMT	1905 Sep
 			-6:00	-	CST
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Edm	1906	only	-	Sep	 1	0:00	0	S
 Rule	Edm	1918	1919	-	Apr	Sun>=8	2:00	1:00	D
 Rule	Edm	1918	only	-	Oct	31	2:00	0	S
 Rule	Edm	1919	only	-	May	27	2:00	0	S
@@ -765,7 +755,6 @@ Zone America/Edmonton	-7:33:52 -	LMT	1906 Sep
 			-7:00	Edm	M%sT
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Vanc	1884	only	-	Jan	 1	0:00	0	S
 Rule	Vanc	1918	only	-	Apr	14	2:00	1:00	D
 Rule	Vanc	1918	only	-	Oct	31	2:00	0	S
 Rule	Vanc	1942	only	-	Feb	 9	2:00	1:00	D
@@ -780,7 +769,6 @@ Zone America/Vancouver	-8:12:28 -	LMT	1884
 			-8:00	Vanc	P%sT
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Yukon	1900	only	-	Jan	 1	0:00	0	S
 Rule	Yukon	1918	only	-	Apr	14	2:00	1:00	D
 Rule	Yukon	1918	only	-	Oct	27	2:00	0	S
 Rule	Yukon	1919	only	-	May	25	2:00	1:00	D
@@ -848,22 +836,41 @@ Zone America/Whitehorse	-9:00:12 -	LMT	1900 Aug 20
 # a zone that's GMT-8 with DST; a zone that's always GMT-7;
 # a zone that's GMT-6 with DST; and a zone that's always GMT-6.
 
-# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# From Paul Eggert <eggert@twinsun.com> (1993-11-18):
 # Shanks also says there are four zones, but disagrees about the fourth.
 # Instead of GMT-6 with DST, he says there's GMT-8 without DST.
 
-# From Paul Eggert (1996-02-07):
-# Today in news:4f90v4$g6g@news.internet.com.mx, Kevin Pitts
-# <bravo2@internet.com.mx> wrote that Mexico will use Horario de Verano (DST)
-# starting this year with the same rules as the US, and gave FIDE as a source.
-# (FIDE is a private organization that promotes efficient electrical use.)
-# On 1996-02-02 Mario Camou wrote that the transition times are Apr Sun>=1
-# 0:00 and Nov 1 0:00 but also wrote ``The DST-out date looks a bit fishy''.
-# Go with Pitts after 1996, and with Shanks before that.
+# From Alan Perry <alan.perry@eng.sun.com> (1996-02-15):
+# A guy from our Mexico subsidiary finally found the Presidential Decree
+# outlining the timezone changes in Mexico.
+# 
+# ------------- Begin Forwarded Message -------------
+# 
+# I finally got my hands on the Official Presidential Decree that sets up the
+# rules for the DST changes. The rules are:
+# 
+# 1. The country is divided in 3 timezones:
+#    - Baja California Norte (the Mexico/BajaNorte TZ)
+#    - Baja California Sur, Nayarit, Sinaloa and Sonora (the Mexico/BajaSur TZ)
+#    - The rest of the country (the Mexico/General TZ)
+#    
+# 2. From the first Sunday in April at 2:00 AM to the last Sunday in October
+#    at 2:00 AM, the times in each zone are as follows:
+#    BajaNorte: GMT+7
+#    BajaSur:   GMT+6
+#    General:   GMT+5
+#    
+# 3. The rest of the year, the times are as follows:
+#    BajaNorte: GMT+8
+#    BajaSur:   GMT+7
+#    General:   GMT+6
+#    
+# The Decree was published in Mexico's Official Newspaper on January 4th.
+# 
+# -------------- End Forwarded Message --------------
 
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Mexico	1922	only	-	Jan	1	0:00	0	S
 Rule	Mexico	1939	only	-	Feb	5	0:00	1:00	D
 Rule	Mexico	1939	only	-	Jun	25	0:00	0	S
 Rule	Mexico	1940	only	-	Dec	9	0:00	1:00	D
@@ -930,7 +937,6 @@ Zone	America/Antigua	-4:07:12 -	LMT	1912 Mar 2
 
 # Bahamas
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Bahamas	1912	only	-	Mar	2	0:00	0	S
 Rule	Bahamas	1964	max	-	Oct	lastSun	2:00	0	S
 Rule	Bahamas	1964	1986	-	Apr	lastSun	2:00	1:00	D
 Rule	Bahamas	1987	max	-	Apr	Sun>=1	2:00	1:00	D
@@ -940,7 +946,6 @@ Zone	America/Nassau	-5:09:24 -	LMT	1912 Mar 2
 
 # Barbados
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Barb	1932	only	-	Jan	1	0:00	0	S
 Rule	Barb	1977	only	-	Jun	12	2:00	1:00	D
 Rule	Barb	1977	1978	-	Oct	Sun>=1	2:00	0	S
 Rule	Barb	1978	1980	-	Apr	Sun>=15	2:00	1:00	D
@@ -954,7 +959,6 @@ Zone America/Barbados	-3:58:28 -	LMT	1924		# Bridgetown
 # Belize
 # Whitman entirely disagrees with Shanks; go with Shanks.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Belize	1912	only	-	Apr	 1	0:00	0	S
 Rule	Belize	1918	1942	-	Oct	Sun>=2	0:00	0:30	HD
 Rule	Belize	1919	1943	-	Feb	Sun>=9	0:00	0	S
 Rule	Belize	1973	only	-	Dec	 5	0:00	1:00	D
@@ -984,7 +988,6 @@ Zone	America/Cayman	-5:25:32 -	LMT	1890		# Georgetown
 # Shanks gives some very odd dates for 1991, and stops there.
 # For now, we won't guess further.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	CR	1921	only	-	Jan	15	0:00	0	S
 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	only	-	Jan	19	0:00	1:00	D
@@ -1010,7 +1013,6 @@ Zone America/Costa_Rica	-5:36:20 -	LMT	1890		# San Jose
 
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Cuba	1925	only	-	Jul	19	12:00	0	S
 Rule	Cuba	1928	only	-	Jun	10	0:00	1:00	D
 Rule	Cuba	1928	only	-	Oct	10	0:00	0	S
 Rule	Cuba	1940	1942	-	Jun	Sun>=1	0:00	1:00	D
@@ -1049,7 +1051,6 @@ Zone America/Dominica	-4:05:36 -	LMT	1911 Jul 1 0:01		# Roseau
 
 # Dominican Republic
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	DR	1933	only	-	Apr	1	12:00	0	S
 Rule	DR	1966	only	-	Oct	30	0:00	1:00	D
 Rule	DR	1967	only	-	Feb	28	0:00	0	S
 Rule	DR	1969	1973	-	Oct	lastSun	0:00	0:30	HD
@@ -1064,7 +1065,6 @@ Zone America/Santo_Domingo -4:39:36 -	LMT	1890
 
 # El Salvador
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Salv	1921	only	-	Jan	1	0:00	0	S
 Rule	Salv	1987	1988	-	May	Sun>=1	0:00	1:00	D
 Rule	Salv	1987	1988	-	Sep	lastSun	0:00	0	S
 # There are too many San Salvadors elsewhere, so we'll use `El Salvador'.
@@ -1084,7 +1084,6 @@ Zone America/Guadeloupe	-4:06:08 -	LMT	1911 Jun 8	# Pointe a Pitre
 
 # Guatemala
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Guat	1918	only	-	Oct	5	0:00	0	S
 Rule	Guat	1973	only	-	Nov	25	0:00	1:00	D
 Rule	Guat	1974	only	-	Feb	24	0:00	0	S
 Rule	Guat	1983	only	-	May	21	0:00	1:00	D
@@ -1095,7 +1094,6 @@ Zone America/Guatemala	-6:02:04 -	LMT	1918 Oct 5
 
 # Haiti
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Haiti	1917	only	-	Jan	24	12:00	0	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
@@ -1142,7 +1140,6 @@ Zone America/Montserrat	-4:08:52 -	LMT	1911 Jul 1 0:01   # Plymouth
 
 # Nicaragua
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Nic	1975	only	-	Feb	16	0:00	0	S
 Rule	Nic	1979	1980	-	Mar	Sun>=16	0:00	1:00	D
 Rule	Nic	1979	1980	-	Jun	Mon>=23	0:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
diff --git a/time/private.h b/time/private.h
index 69fcca3822..f81bf4867b 100644
--- a/time/private.h
+++ b/time/private.h
@@ -3,6 +3,11 @@
 #define PRIVATE_H
 
 /*
+** This file is in the public domain, so clarified as of
+** June 5, 1996 by Arthur David Olson (arthur_david_olson@nih.gov).
+*/
+
+/*
 ** This header is for use ONLY with the time conversion code.
 ** There is no guarantee that it will remain unchanged,
 ** or that it will remain at all.
@@ -16,7 +21,7 @@
 
 #ifndef lint
 #ifndef NOID
-static char	privatehid[] = "@(#)private.h	7.42";
+static char	privatehid[] = "@(#)private.h	7.43";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
diff --git a/time/southamerica b/time/southamerica
index 893d038908..c3c5c99fbe 100644
--- a/time/southamerica
+++ b/time/southamerica
@@ -1,4 +1,4 @@
-# @(#)southamerica	7.11
+# @(#)southamerica	7.12
 
 # 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
@@ -164,7 +164,6 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
 # about time zone changes after 1990 Feb 11.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Brazil	1914	only	-	Jan	 1	 0:00	0	S
 Rule	Brazil	1931	only	-	Oct	 3	11:00	1	D
 Rule	Brazil	1932	1933	-	Apr	 1	 0:00	0	S
 Rule	Brazil	1932	only	-	Oct	 3	 0:00	1	D
@@ -256,7 +255,6 @@ Zone Pacific/Galapagos	-5:58:24 -	LMT	1931 # Puerto Baquerizo Moreno
 
 # Falklands
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Falk	1912	only	-	Mar	12	0:00	0	S
 Rule	Falk	1937	1938	-	Sep	lastSun	0:00	1:00	D
 Rule	Falk	1938	1942	-	Mar	Sun>=19	0:00	0	S
 Rule	Falk	1939	only	-	Oct	1	0:00	1:00	D
@@ -299,7 +297,6 @@ Zone	America/Guyana	-3:52:40 -	LMT	1915 Mar	# Georgetown
 
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Para	1974	only	-	Apr	 1	0:00	0	S
 Rule	Para	1975	1978	-	Oct	 1	0:00	1:00	D
 Rule	Para	1975	1978	-	Mar	 1	0:00	0	S
 # Shanks says 1979 was all DST.
@@ -316,7 +313,6 @@ Zone America/Asuncion	-3:50:40 -	LMT	1890
 
 # Peru
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Peru	1908	only	-	Jul	28	0:00	0	S
 Rule	Peru	1938	only	-	Jan	 1	0:00	1:00	D
 Rule	Peru	1938	only	-	Apr	 1	0:00	0	S
 Rule	Peru	1938	1939	-	Sep	lastSun	0:00	1:00	D
@@ -356,7 +352,6 @@ Zone America/Port_of_Spain -4:06:04 -	LMT	1912 Mar 2
 # Uruguay wins the prize for the strangest peacetime manipulation of the rules.
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Uruguay	1920	only	-	May	 1	 0:00	0	S
 # Whitman gives 1923 Oct 1; go with Shanks.
 Rule	Uruguay	1923	only	-	Oct	 2	 0:00	0:30	HD
 Rule	Uruguay	1924	1926	-	Apr	 1	 0:00	0	S
diff --git a/time/tzfile.h b/time/tzfile.h
index f08134c815..cb9b6a1a11 100644
--- a/time/tzfile.h
+++ b/time/tzfile.h
@@ -3,6 +3,11 @@
 #define TZFILE_H
 
 /*
+** This file is in the public domain, so clarified as of
+** June 5, 1996 by Arthur David Olson (arthur_david_olson@nih.gov).
+*/
+
+/*
 ** This header is for use ONLY with the time conversion code.
 ** There is no guarantee that it will remain unchanged,
 ** or that it will remain at all.
@@ -16,7 +21,7 @@
 
 #ifndef lint
 #ifndef NOID
-static char	tzfilehid[] = "@(#)tzfile.h	7.7";
+static char	tzfilehid[] = "@(#)tzfile.h	7.8";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
diff --git a/time/zdump.c b/time/zdump.c
index f56e09d007..1058a840ef 100644
--- a/time/zdump.c
+++ b/time/zdump.c
@@ -1,6 +1,6 @@
 #ifndef lint
 #ifndef NOID
-static char	elsieid[] = "@(#)zdump.c	7.23";
+static char	elsieid[] = "@(#)zdump.c	7.24";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
@@ -208,9 +208,10 @@ _("%s: usage is %s [ -v ] [ -c cutoff ] zonename ...\n"),
 		static char	buf[MAX_STRING_LENGTH];
 
 		(void) strcpy(&fakeenv[0][3], argv[i]);
-		show(argv[i], now, FALSE);
-		if (!vflag)
+		if (!vflag) {
+			show(argv[i], now, FALSE);
 			continue;
+		}
 		/*
 		** Get lowest value of t.
 		*/
diff --git a/time/zic.c b/time/zic.c
index 756b7eb84a..0cec89369c 100644
--- a/time/zic.c
+++ b/time/zic.c
@@ -1,6 +1,6 @@
 #ifndef lint
 #ifndef NOID
-static char	elsieid[] = "@(#)zic.c	7.62";
+static char	elsieid[] = "@(#)zic.c	7.77";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
@@ -335,8 +335,10 @@ static const int	len_years[2] = {
 	DAYSPERNYEAR, DAYSPERLYEAR
 };
 
-static time_t		ats[TZ_MAX_TIMES];
-static unsigned char	types[TZ_MAX_TIMES];
+static struct attype {
+	time_t		at;
+	unsigned char	type;
+}			attypes[TZ_MAX_TIMES];
 static long		gmtoffs[TZ_MAX_TYPES];
 static char		isdsts[TZ_MAX_TYPES];
 static unsigned char	abbrinds[TZ_MAX_TYPES];
@@ -427,11 +429,22 @@ const char * const	string;
 }
 
 static void
+warning(string)
+const char * const	string;
+{
+	char *	cp;
+
+	cp = ecpyalloc("warning: ");
+	cp = ecatalloc(cp, string);
+	error(string);
+	ifree(cp);
+	--errors;
+}
+
+static void
 usage P((void))
 {
-	(void) fprintf(stderr, _("%s: usage is %s \
-[ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d directory ]\n\
-\t[ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"),
+	(void) fprintf(stderr, _("%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d directory ]\n\t[ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"),
 		progname, progname);
 	(void) exit(EXIT_FAILURE);
 }
@@ -622,8 +635,7 @@ const char * const	tofile;
 */
 
 #define MAX_BITS_IN_FILE	32
-#define TIME_T_BITS_IN_FILE	((TYPE_BIT(time_t) < MAX_BITS_IN_FILE) ? \
-					TYPE_BIT(time_t) : MAX_BITS_IN_FILE)
+#define TIME_T_BITS_IN_FILE	((TYPE_BIT(time_t) < MAX_BITS_IN_FILE) ? TYPE_BIT(time_t) : MAX_BITS_IN_FILE)
 
 static void
 setboundaries P((void))
@@ -681,11 +693,37 @@ associate P((void))
 	register struct zone *	zp;
 	register struct rule *	rp;
 	register int		base, out;
-	register int		i;
+	register int		i, j;
 
-	if (nrules != 0)
+	if (nrules != 0) {
 		(void) qsort((void *) rules, (size_t) nrules,
 			(size_t) sizeof *rules, rcomp);
+		for (i = 0; i < nrules - 1; ++i) {
+			if (strcmp(rules[i].r_name,
+				rules[i + 1].r_name) != 0)
+					continue;
+			if (strcmp(rules[i].r_filename,
+				rules[i + 1].r_filename) == 0)
+					continue;
+			eat(rules[i].r_filename, rules[i].r_linenum);
+			warning(_("same rule name in multiple files"));
+			eat(rules[i + 1].r_filename, rules[i + 1].r_linenum);
+			warning(_("same rule name in multiple files"));
+			for (j = i + 2; j < nrules; ++j) {
+				if (strcmp(rules[i].r_name,
+					rules[j].r_name) != 0)
+						break;
+				if (strcmp(rules[i].r_filename,
+					rules[j].r_filename) == 0)
+						continue;
+				if (strcmp(rules[i + 1].r_filename,
+					rules[j].r_filename) == 0)
+						continue;
+				break;
+			}
+			i = j - 1;
+		}
+	}
 	for (i = 0; i < nzones; ++i) {
 		zp = &zones[i];
 		zp->z_rules = NULL;
@@ -1010,8 +1048,7 @@ const int		iscont;
 			zones[nzones - 1].z_untiltime > min_time &&
 			zones[nzones - 1].z_untiltime < max_time &&
 			zones[nzones - 1].z_untiltime >= z.z_untiltime) {
-				error(_("Zone continuation line end time is \
-not after end time of previous line"));
+				error(_("Zone continuation line end time is not after end time of previous line"));
 				return FALSE;
 		}
 	}
@@ -1319,6 +1356,18 @@ FILE * const	fp;
 	(void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
 }
 
+static int
+atcomp(avp, bvp)
+void *	avp;
+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;
+}
+
 static void
 writezone(name)
 const char * const	name;
@@ -1327,7 +1376,50 @@ const char * const	name;
 	register int		i, j;
 	static char *		fullname;
 	static struct tzhead	tzh;
+	time_t			ats[TZ_MAX_TIMES];
+	unsigned char		types[TZ_MAX_TIMES];
 
+	/*
+	** Sort.
+	*/
+	if (timecnt > 1)
+		(void) qsort((void *) attypes, (size_t) timecnt,
+			(size_t) sizeof *attypes, atcomp);
+	/*
+	** Optimize.
+	*/
+	{
+		int	fromi;
+		int	toi;
+
+		toi = 0;
+		fromi = 0;
+		if (isdsts[0] == 0)
+			while (attypes[fromi].type == 0)
+				++fromi;	/* handled by default rule */
+		for ( ; fromi < timecnt; ++fromi) {
+			if (toi != 0
+			    && ((attypes[fromi].at
+				 + gmtoffs[attypes[toi - 1].type])
+				<= (attypes[toi - 1].at
+				    + gmtoffs[toi == 1 ? 0
+					      : attypes[toi - 2].type]))) {
+				attypes[toi - 1].type = attypes[fromi].type;
+				continue;
+			}
+			if (toi == 0 ||
+				attypes[toi - 1].type != attypes[fromi].type)
+					attypes[toi++] = attypes[fromi];
+		}
+		timecnt = toi;
+	}
+	/*
+	** Transfer.
+	*/
+	for (i = 0; i < timecnt; ++i) {
+		ats[i] = attypes[i].at;
+		types[i] = attypes[i].type;
+	}
 	fullname = erealloc(fullname,
 		(int) (strlen(directory) + 1 + strlen(name) + 1));
 	(void) sprintf(fullname, "%s/%s", directory, name);
@@ -1347,8 +1439,7 @@ const char * const	name;
 	convert(eitol(timecnt), tzh.tzh_timecnt);
 	convert(eitol(typecnt), tzh.tzh_typecnt);
 	convert(eitol(charcnt), tzh.tzh_charcnt);
-#define DO(field)	(void) fwrite((void *) tzh.field, \
-		(size_t) sizeof tzh.field, (size_t) 1, fp)
+#define DO(field)	(void) fwrite((void *) tzh.field, (size_t) sizeof tzh.field, (size_t) 1, fp)
 	DO(tzh_reserved);
 	DO(tzh_ttisgmtcnt);
 	DO(tzh_ttisstdcnt);
@@ -1440,7 +1531,6 @@ const int			zonecount;
 	register long			stdoff;
 	register int			year;
 	register long			startoff;
-	register int			startisdst;
 	register int			startttisstd;
 	register int			startttisgmt;
 	register int			type;
@@ -1448,7 +1538,6 @@ const int			zonecount;
 
 	INITIALIZE(untiltime);
 	INITIALIZE(starttime);
-	INITIALIZE(startoff);
 	/*
 	** Now. . .finally. . .generate some useful data!
 	*/
@@ -1473,7 +1562,8 @@ const int			zonecount;
 			continue;
 		gmtoff = zp->z_gmtoff;
 		eat(zp->z_filename, zp->z_linenum);
-		startisdst = -1;
+		*startbuf = '\0';
+		startoff = zp->z_gmtoff;
 		if (zp->z_nrules == 0) {
 			stdoff = zp->z_stdoff;
 			doabbr(startbuf, zp->z_format,
@@ -1481,8 +1571,10 @@ const int			zonecount;
 			type = addtype(oadd(zp->z_gmtoff, stdoff),
 				startbuf, stdoff != 0, startttisstd,
 				startttisgmt);
-			if (usestart)
+			if (usestart) {
 				addtt(starttime, type);
+				usestart = FALSE;
+			}
 			else if (stdoff != 0)
 				addtt(min_time, type);
 		} else for (year = min_year; year <= max_year; ++year) {
@@ -1553,36 +1645,25 @@ const int			zonecount;
 				rp->r_todo = FALSE;
 				if (useuntil && ktime >= untiltime)
 					break;
+				stdoff = rp->r_stdoff;
+				if (usestart && ktime == starttime)
+					usestart = FALSE;
 				if (usestart) {
-				    if (ktime < starttime) {
-					stdoff = rp->r_stdoff;
-					startoff = oadd(zp->z_gmtoff,
-						rp->r_stdoff);
-					doabbr(startbuf, zp->z_format,
-						rp->r_abbrvar,
-						rp->r_stdoff != 0);
-					startisdst = rp->r_stdoff != 0;
-					continue;
-				    }
-				    usestart = FALSE;
-				    if (ktime != starttime) {
-					if (startisdst < 0 &&
-					    zp->z_gmtoff !=
-					    (zp - 1)->z_gmtoff) {
-						type = (timecnt == 0) ? 0 :
-							types[timecnt - 1];
-						startoff = oadd(gmtoffs[type],
-							-(zp - 1)->z_gmtoff);
-						startisdst = startoff != 0;
-						startoff = oadd(startoff,
-							zp->z_gmtoff);
-						(void) strcpy(startbuf,
-						    &chars[abbrinds[type]]);
+					if (ktime < starttime) {
+						startoff = oadd(zp->z_gmtoff,
+							stdoff);
+						doabbr(startbuf, zp->z_format,
+							rp->r_abbrvar,
+							rp->r_stdoff != 0);
+						continue;
+					}
+					if (*startbuf == '\0' &&
+					    startoff == oadd(zp->z_gmtoff,
+					    stdoff)) {
+						doabbr(startbuf, zp->z_format,
+							rp->r_abbrvar,
+							rp->r_stdoff != 0);
 					}
-					if (startisdst >= 0)
-addtt(starttime, addtype(startoff, startbuf, startisdst, startttisstd,
-	startttisgmt));
-				    }
 				}
 				eats(zp->z_filename, zp->z_linenum,
 					rp->r_filename, rp->r_linenum);
@@ -1592,18 +1673,34 @@ addtt(starttime, addtype(startoff, startbuf, startisdst, startttisstd,
 				type = addtype(offset, buf, rp->r_stdoff != 0,
 					rp->r_todisstd, rp->r_todisgmt);
 				addtt(ktime, type);
-				stdoff = rp->r_stdoff;
 			}
 		}
+		if (usestart) {
+			if (*startbuf == '\0' &&
+				zp->z_format != NULL &&
+				strchr(zp->z_format, '%') == NULL &&
+				strchr(zp->z_format, '/') == NULL)
+					(void) strcpy(startbuf, zp->z_format);
+			eat(zp->z_filename, zp->z_linenum);
+			if (*startbuf == '\0')
+error(_("can't determine time zone abbrevation to use just after until time"));
+			else	addtt(starttime,
+					addtype(startoff, startbuf,
+						startoff != zp->z_gmtoff,
+						startttisstd,
+						startttisgmt));
+		}
 		/*
 		** Now we may get to set starttime for the next zone line.
 		*/
 		if (useuntil) {
-			starttime = tadd(zp->z_untiltime, -gmtoff);
 			startttisstd = zp->z_untilrule.r_todisstd;
 			startttisgmt = zp->z_untilrule.r_todisgmt;
+			starttime = zp->z_untiltime;
 			if (!startttisstd)
 				starttime = tadd(starttime, -stdoff);
+			if (!startttisgmt)
+				starttime = tadd(starttime, -gmtoff);
 		}
 	}
 	writezone(zpfirst->z_name);
@@ -1614,16 +1711,12 @@ addtt(starttime, type)
 const time_t	starttime;
 const int	type;
 {
-	if (timecnt != 0 && type == types[timecnt - 1])
-		return;	/* easy enough! */
-	if (timecnt == 0 && type == 0 && isdsts[0] == 0)
-		return; /* handled by default rule */
 	if (timecnt >= TZ_MAX_TIMES) {
 		error(_("too many transitions?!"));
 		(void) exit(EXIT_FAILURE);
 	}
-	ats[timecnt] = starttime;
-	types[timecnt] = type;
+	attypes[timecnt].at = starttime;
+	attypes[timecnt].type = type;
 	++timecnt;
 }
 
@@ -1637,6 +1730,18 @@ const int		ttisgmt;
 {
 	register int	i, j;
 
+	if (isdst != TRUE && isdst != FALSE) {
+		error(_("internal error - addtype called with bad isdst"));
+		(void) exit(EXIT_FAILURE);
+	}
+	if (ttisstd != TRUE && ttisstd != FALSE) {
+		error(_("internal error - addtype called with bad ttisstd"));
+		(void) exit(EXIT_FAILURE);
+	}
+	if (ttisgmt != TRUE && ttisgmt != FALSE) {
+		error(_("internal error - addtype called with bad ttisgmt"));
+		(void) exit(EXIT_FAILURE);
+	}
 	/*
 	** See if there's already an entry for this zone type.
 	** If so, just return its index.