#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#  
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Sun designates this
# particular file as subject to the "Classpath" exception as provided
# by Sun in the LICENSE file that accompanied this code.
#  
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#  
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#  
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#
# <pre>

# This file also includes Pacific islands.

# Notes are at the end of this file

###############################################################################

# Australia

# Please see the notes below for the controversy about "EST" versus "AEST" etc.

# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	Aus	1917	only	-	Jan	 1	0:01	1:00	-
Rule	Aus	1917	only	-	Mar	25	2:00	0	-
Rule	Aus	1942	only	-	Jan	 1	2:00	1:00	-
Rule	Aus	1942	only	-	Mar	29	2:00	0	-
Rule	Aus	1942	only	-	Sep	27	2:00	1:00	-
Rule	Aus	1943	1944	-	Mar	lastSun	2:00	0	-
Rule	Aus	1943	only	-	Oct	 3	2:00	1:00	-
# Go with Whitman and the Australian National Standards Commission, which
# says W Australia didn't use DST in 1943/1944.  Ignore Whitman's claim that
# 1944/1945 was just like 1943/1944.

# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
# Northern Territory
Zone Australia/Darwin	 8:43:20 -	LMT	1895 Feb
			 9:00	-	CST	1899 May
			 9:30	Aus	CST
# Western Australia
#
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	AW	1974	only	-	Oct	lastSun	2:00s	1:00	-
Rule	AW	1975	only	-	Mar	Sun>=1	2:00s	0	-
Rule	AW	1983	only	-	Oct	lastSun	2:00s	1:00	-
Rule	AW	1984	only	-	Mar	Sun>=1	2:00s	0	-
Rule	AW	1991	only	-	Nov	17	2:00s	1:00	-
Rule	AW	1992	only	-	Mar	Sun>=1	2:00s	0	-
Rule	AW	2006	only	-	Dec	 3	2:00s	1:00	-
Rule	AW	2007	2009	-	Mar	lastSun	2:00s	0	-
Rule	AW	2007	2008	-	Oct	lastSun	2:00s	1:00	-
Zone Australia/Perth	 7:43:24 -	LMT	1895 Dec
			 8:00	Aus	WST	1943 Jul
			 8:00	AW	WST
Zone Australia/Eucla	 8:35:28 -	LMT	1895 Dec
			 8:45	Aus	CWST	1943 Jul
			 8:45	AW	CWST

# Queensland
#
# From Alex Livingston (1996-11-01):
# I have heard or read more than once that some resort islands off the coast
# of Queensland chose to keep observing daylight-saving time even after
# Queensland ceased to.
#
# From Paul Eggert (1996-11-22):
# IATA SSIM (1993-02/1994-09) say that the Holiday Islands (Hayman, Lindeman,
# Hamilton) observed DST for two years after the rest of Queensland stopped.
# Hamilton is the largest, but there is also a Hamilton in Victoria,
# so use Lindeman.
#
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	AQ	1971	only	-	Oct	lastSun	2:00s	1:00	-
Rule	AQ	1972	only	-	Feb	lastSun	2:00s	0	-
Rule	AQ	1989	1991	-	Oct	lastSun	2:00s	1:00	-
Rule	AQ	1990	1992	-	Mar	Sun>=1	2:00s	0	-
Rule	Holiday	1992	1993	-	Oct	lastSun	2:00s	1:00	-
Rule	Holiday	1993	1994	-	Mar	Sun>=1	2:00s	0	-
Zone Australia/Brisbane	10:12:08 -	LMT	1895
			10:00	Aus	EST	1971
			10:00	AQ	EST
Zone Australia/Lindeman  9:55:56 -	LMT	1895
			10:00	Aus	EST	1971
			10:00	AQ	EST	1992 Jul
			10:00	Holiday	EST

# South Australia
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	AS	1971	1985	-	Oct	lastSun	2:00s	1:00	-
Rule	AS	1986	only	-	Oct	19	2:00s	1:00	-
Rule	AS	1987	2007	-	Oct	lastSun	2:00s	1:00	-
Rule	AS	1972	only	-	Feb	27	2:00s	0	-
Rule	AS	1973	1985	-	Mar	Sun>=1	2:00s	0	-
Rule	AS	1986	1989	-	Mar	Sun>=15	2:00s	0	-
Rule	AS	1990	only	-	Mar	Sun>=18	2:00s	0	-
Rule	AS	1991	only	-	Mar	Sun>=1	2:00s	0	-
Rule	AS	1992	only	-	Mar	Sun>=18	2:00s	0	-
Rule	AS	1993	only	-	Mar	Sun>=1	2:00s	0	-
Rule	AS	1994	only	-	Mar	Sun>=18	2:00s	0	-
Rule	AS	1995	2005	-	Mar	lastSun	2:00s	0	-
Rule	AS	2006	only	-	Apr	Sun>=1	2:00s	0	-
Rule	AS	2007	only	-	Mar	lastSun	2:00s	0	-
Rule	AS	2008	max	-	Apr	Sun>=1	2:00s	0	-
Rule	AS	2008	max	-	Oct	Sun>=1	2:00s	1:00	-
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Australia/Adelaide	9:14:20 -	LMT	1895 Feb
			9:00	-	CST	1899 May
			9:30	Aus	CST	1971
			9:30	AS	CST

# Tasmania
#
# From Paul Eggert (2005-08-16):
# <http://www.bom.gov.au/climate/averages/tables/dst_times.shtml>
# says King Island didn't observe DST from WWII until late 1971.
#
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	AT	1967	only	-	Oct	Sun>=1	2:00s	1:00	-
Rule	AT	1968	only	-	Mar	lastSun	2:00s	0	-
Rule	AT	1968	1985	-	Oct	lastSun	2:00s	1:00	-
Rule	AT	1969	1971	-	Mar	Sun>=8	2:00s	0	-
Rule	AT	1972	only	-	Feb	lastSun	2:00s	0	-
Rule	AT	1973	1981	-	Mar	Sun>=1	2:00s	0	-
Rule	AT	1982	1983	-	Mar	lastSun	2:00s	0	-
Rule	AT	1984	1986	-	Mar	Sun>=1	2:00s	0	-
Rule	AT	1986	only	-	Oct	Sun>=15	2:00s	1:00	-
Rule	AT	1987	1990	-	Mar	Sun>=15	2:00s	0	-
Rule	AT	1987	only	-	Oct	Sun>=22	2:00s	1:00	-
Rule	AT	1988	1990	-	Oct	lastSun	2:00s	1:00	-
Rule	AT	1991	1999	-	Oct	Sun>=1	2:00s	1:00	-
Rule	AT	1991	2005	-	Mar	lastSun	2:00s	0	-
Rule	AT	2000	only	-	Aug	lastSun	2:00s	1:00	-
Rule	AT	2001	max	-	Oct	Sun>=1	2:00s	1:00	-
Rule	AT	2006	only	-	Apr	Sun>=1	2:00s	0	-
Rule	AT	2007	only	-	Mar	lastSun	2:00s	0	-
Rule	AT	2008	max	-	Apr	Sun>=1	2:00s	0	-
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Australia/Hobart	9:49:16	-	LMT	1895 Sep
			10:00	-	EST	1916 Oct 1 2:00
			10:00	1:00	EST	1917 Feb
			10:00	Aus	EST	1967
			10:00	AT	EST
Zone Australia/Currie	9:35:28	-	LMT	1895 Sep
			10:00	-	EST	1916 Oct 1 2:00
			10:00	1:00	EST	1917 Feb
			10:00	Aus	EST	1971 Jul
			10:00	AT	EST

# Victoria
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	AV	1971	1985	-	Oct	lastSun	2:00s	1:00	-
Rule	AV	1972	only	-	Feb	lastSun	2:00s	0	-
Rule	AV	1973	1985	-	Mar	Sun>=1	2:00s	0	-
Rule	AV	1986	1990	-	Mar	Sun>=15	2:00s	0	-
Rule	AV	1986	1987	-	Oct	Sun>=15	2:00s	1:00	-
Rule	AV	1988	1999	-	Oct	lastSun	2:00s	1:00	-
Rule	AV	1991	1994	-	Mar	Sun>=1	2:00s	0	-
Rule	AV	1995	2005	-	Mar	lastSun	2:00s	0	-
Rule	AV	2000	only	-	Aug	lastSun	2:00s	1:00	-
Rule	AV	2001	2007	-	Oct	lastSun	2:00s	1:00	-
Rule	AV	2006	only	-	Apr	Sun>=1	2:00s	0	-
Rule	AV	2007	only	-	Mar	lastSun	2:00s	0	-
Rule	AV	2008	max	-	Apr	Sun>=1	2:00s	0	-
Rule	AV	2008	max	-	Oct	Sun>=1	2:00s	1:00	-
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Australia/Melbourne 9:39:52 -	LMT	1895 Feb
			10:00	Aus	EST	1971
			10:00	AV	EST

# New South Wales
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	AN	1971	1985	-	Oct	lastSun	2:00s	1:00	-
Rule	AN	1972	only	-	Feb	27	2:00s	0	-
Rule	AN	1973	1981	-	Mar	Sun>=1	2:00s	0	-
Rule	AN	1982	only	-	Apr	Sun>=1	2:00s	0	-
Rule	AN	1983	1985	-	Mar	Sun>=1	2:00s	0	-
Rule	AN	1986	1989	-	Mar	Sun>=15	2:00s	0	-
Rule	AN	1986	only	-	Oct	19	2:00s	1:00	-
Rule	AN	1987	1999	-	Oct	lastSun	2:00s	1:00	-
Rule	AN	1990	1995	-	Mar	Sun>=1	2:00s	0	-
Rule	AN	1996	2005	-	Mar	lastSun	2:00s	0	-
Rule	AN	2000	only	-	Aug	lastSun	2:00s	1:00	-
Rule	AN	2001	2007	-	Oct	lastSun	2:00s	1:00	-
Rule	AN	2006	only	-	Apr	Sun>=1	2:00s	0	-
Rule	AN	2007	only	-	Mar	lastSun	2:00s	0	-
Rule	AN	2008	max	-	Apr	Sun>=1	2:00s	0	-
Rule	AN	2008	max	-	Oct	Sun>=1	2:00s	1:00	-
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Australia/Sydney	10:04:52 -	LMT	1895 Feb
			10:00	Aus	EST	1971
			10:00	AN	EST
Zone Australia/Broken_Hill 9:25:48 -	LMT	1895 Feb
			10:00	-	EST	1896 Aug 23
			9:00	-	CST	1899 May
			9:30	Aus	CST	1971
			9:30	AN	CST	2000
			9:30	AS	CST

# Lord Howe Island
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	LH	1981	1984	-	Oct	lastSun	2:00	1:00	-
Rule	LH	1982	1985	-	Mar	Sun>=1	2:00	0	-
Rule	LH	1985	only	-	Oct	lastSun	2:00	0:30	-
Rule	LH	1986	1989	-	Mar	Sun>=15	2:00	0	-
Rule	LH	1986	only	-	Oct	19	2:00	0:30	-
Rule	LH	1987	1999	-	Oct	lastSun	2:00	0:30	-
Rule	LH	1990	1995	-	Mar	Sun>=1	2:00	0	-
Rule	LH	1996	2005	-	Mar	lastSun	2:00	0	-
Rule	LH	2000	only	-	Aug	lastSun	2:00	0:30	-
Rule	LH	2001	2007	-	Oct	lastSun	2:00	0:30	-
Rule	LH	2006	only	-	Apr	Sun>=1	2:00	0	-
Rule	LH	2007	only	-	Mar	lastSun	2:00	0	-
Rule	LH	2008	max	-	Apr	Sun>=1	2:00	0	-
Rule	LH	2008	max	-	Oct	Sun>=1	2:00	0:30	-
Zone Australia/Lord_Howe 10:36:20 -	LMT	1895 Feb
			10:00	-	EST	1981 Mar
			10:30	LH	LHST

# Australian miscellany
#
# Ashmore Is, Cartier
# no indigenous inhabitants; only seasonal caretakers
# no times are set
#
# Coral Sea Is
# no indigenous inhabitants; only meteorologists
# no times are set
#
# Macquarie
# permanent occupation (scientific station) since 1948;
# sealing and penguin oil station operated 1888/1917
# like Australia/Hobart

# Christmas
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Indian/Christmas	7:02:52 -	LMT	1895 Feb
			7:00	-	CXT	# Christmas Island Time

# Cook Is
# From Shanks & Pottenger:
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	Cook	1978	only	-	Nov	12	0:00	0:30	HS
Rule	Cook	1979	1991	-	Mar	Sun>=1	0:00	0	-
Rule	Cook	1979	1990	-	Oct	lastSun	0:00	0:30	HS
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Pacific/Rarotonga	-10:39:04 -	LMT	1901		# Avarua
			-10:30	-	CKT	1978 Nov 12	# Cook Is Time
			-10:00	Cook	CK%sT

# Cocos
# These islands were ruled by the Ross family from about 1830 to 1978.
# We don't know when standard time was introduced; for now, we guess 1900.
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Indian/Cocos	6:27:40	-	LMT	1900
			6:30	-	CCT	# Cocos Islands Time

# Fiji
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	Fiji	1998	1999	-	Nov	Sun>=1	2:00	1:00	S
Rule	Fiji	1999	2000	-	Feb	lastSun	3:00	0	-
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Pacific/Fiji	11:53:40 -	LMT	1915 Oct 26	# Suva
			12:00	Fiji	FJ%sT	# Fiji Time

# French Polynesia
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Pacific/Gambier	 -8:59:48 -	LMT	1912 Oct	# Rikitea
			 -9:00	-	GAMT	# Gambier Time
Zone	Pacific/Marquesas -9:18:00 -	LMT	1912 Oct
			 -9:30	-	MART	# Marquesas Time
Zone	Pacific/Tahiti	 -9:58:16 -	LMT	1912 Oct	# Papeete
			-10:00	-	TAHT	# Tahiti Time
# Clipperton (near North America) is administered from French Polynesia;
# it is uninhabited.

# Guam
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Pacific/Guam	-14:21:00 -	LMT	1844 Dec 31
			 9:39:00 -	LMT	1901		# Agana
			10:00	-	GST	2000 Dec 23	# Guam
			10:00	-	ChST	# Chamorro Standard Time

# Kiribati
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Pacific/Tarawa	 11:32:04 -	LMT	1901		# Bairiki
			 12:00	-	GILT		 # Gilbert Is Time
Zone Pacific/Enderbury	-11:24:20 -	LMT	1901
			-12:00	-	PHOT	1979 Oct # Phoenix Is Time
			-11:00	-	PHOT	1995
			 13:00	-	PHOT
Zone Pacific/Kiritimati	-10:29:20 -	LMT	1901
			-10:40	-	LINT	1979 Oct # Line Is Time
			-10:00	-	LINT	1995
			 14:00	-	LINT

# N Mariana Is
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Pacific/Saipan	-14:17:00 -	LMT	1844 Dec 31
			 9:43:00 -	LMT	1901
			 9:00	-	MPT	1969 Oct # N Mariana Is Time
			10:00	-	MPT	2000 Dec 23
			10:00	-	ChST	# Chamorro Standard Time

# Marshall Is
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Pacific/Majuro	11:24:48 -	LMT	1901
			11:00	-	MHT	1969 Oct # Marshall Islands Time
			12:00	-	MHT
Zone Pacific/Kwajalein	11:09:20 -	LMT	1901
			11:00	-	MHT	1969 Oct
			-12:00	-	KWAT	1993 Aug 20	# Kwajalein Time
			12:00	-	MHT

# Micronesia
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Pacific/Truk	10:07:08 -	LMT	1901
			10:00	-	TRUT			# Truk Time
Zone Pacific/Ponape	10:32:52 -	LMT	1901		# Kolonia
			11:00	-	PONT			# Ponape Time
Zone Pacific/Kosrae	10:51:56 -	LMT	1901
			11:00	-	KOST	1969 Oct	# Kosrae Time
			12:00	-	KOST	1999
			11:00	-	KOST

# Nauru
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Pacific/Nauru	11:07:40 -	LMT	1921 Jan 15	# Uaobe
			11:30	-	NRT	1942 Mar 15	# Nauru Time
			9:00	-	JST	1944 Aug 15
			11:30	-	NRT	1979 May
			12:00	-	NRT

# New Caledonia
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
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 & 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
			11:00	NC	NC%sT


###############################################################################

# New Zealand

# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	NZ	1927	only	-	Nov	 6	2:00	1:00	S
Rule	NZ	1928	only	-	Mar	 4	2:00	0	M
Rule	NZ	1928	1933	-	Oct	Sun>=8	2:00	0:30	S
Rule	NZ	1929	1933	-	Mar	Sun>=15	2:00	0	M
Rule	NZ	1934	1940	-	Apr	lastSun	2:00	0	M
Rule	NZ	1934	1940	-	Sep	lastSun	2:00	0:30	S
Rule	NZ	1946	only	-	Jan	 1	0:00	0	S
# Since 1957 Chatham has been 45 minutes ahead of NZ, but there's no
# convenient notation for this so we must duplicate the Rule lines.
Rule	NZ	1974	only	-	Nov	Sun>=1	2:00s	1:00	D
Rule	Chatham	1974	only	-	Nov	Sun>=1	2:45s	1:00	D
Rule	NZ	1975	only	-	Feb	lastSun	2:00s	0	S
Rule	Chatham	1975	only	-	Feb	lastSun	2:45s	0	S
Rule	NZ	1975	1988	-	Oct	lastSun	2:00s	1:00	D
Rule	Chatham	1975	1988	-	Oct	lastSun	2:45s	1:00	D
Rule	NZ	1976	1989	-	Mar	Sun>=1	2:00s	0	S
Rule	Chatham	1976	1989	-	Mar	Sun>=1	2:45s	0	S
Rule	NZ	1989	only	-	Oct	Sun>=8	2:00s	1:00	D
Rule	Chatham	1989	only	-	Oct	Sun>=8	2:45s	1:00	D
Rule	NZ	1990	2006	-	Oct	Sun>=1	2:00s	1:00	D
Rule	Chatham	1990	2006	-	Oct	Sun>=1	2:45s	1:00	D
Rule	NZ	1990	2007	-	Mar	Sun>=15	2:00s	0	S
Rule	Chatham	1990	2007	-	Mar	Sun>=15	2:45s	0	S
Rule	NZ	2007	max	-	Sep	lastSun	2:00s	1:00	D
Rule	Chatham	2007	max	-	Sep	lastSun	2:45s	1:00	D
Rule	NZ	2008	max	-	Apr	Sun>=1	2:00s	0	S
Rule	Chatham	2008	max	-	Apr	Sun>=1	2:45s	0	S
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Pacific/Auckland	11:39:04 -	LMT	1868 Nov  2
			11:30	NZ	NZ%sT	1946 Jan  1
			12:00	NZ	NZ%sT
Zone Pacific/Chatham	12:13:48 -	LMT	1957 Jan  1
			12:45	Chatham	CHA%sT


# Auckland Is
# uninhabited; Maori and Moriori, colonial settlers, pastoralists, sealers,
# and scientific personnel have wintered

# Campbell I
# minor whaling stations operated 1909/1914
# scientific station operated 1941/1995;
# previously whalers, sealers, pastoralists, and scientific personnel wintered
# was probably like Pacific/Auckland

###############################################################################


# Niue
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Pacific/Niue	-11:19:40 -	LMT	1901		# Alofi
			-11:20	-	NUT	1951	# Niue Time
			-11:30	-	NUT	1978 Oct 1
			-11:00	-	NUT

# Norfolk
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Pacific/Norfolk	11:11:52 -	LMT	1901		# Kingston
			11:12	-	NMT	1951	# Norfolk Mean Time
			11:30	-	NFT		# Norfolk Time

# Palau (Belau)
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Pacific/Palau	8:57:56 -	LMT	1901		# Koror
			9:00	-	PWT	# Palau Time

# Papua New Guinea
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Pacific/Port_Moresby 9:48:40 -	LMT	1880
			9:48:32	-	PMMT	1895	# Port Moresby Mean Time
			10:00	-	PGT		# Papua New Guinea Time

# Pitcairn
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Pacific/Pitcairn	-8:40:20 -	LMT	1901		# Adamstown
			-8:30	-	PNT	1998 Apr 27 00:00
			-8:00	-	PST	# Pitcairn Standard Time

# American Samoa
Zone Pacific/Pago_Pago	 12:37:12 -	LMT	1879 Jul  5
			-11:22:48 -	LMT	1911
			-11:30	-	SAMT	1950		# Samoa Time
			-11:00	-	NST	1967 Apr	# N=Nome
			-11:00	-	BST	1983 Nov 30	# B=Bering
			-11:00	-	SST			# S=Samoa

# Samoa
Zone Pacific/Apia	 12:33:04 -	LMT	1879 Jul  5
			-11:26:56 -	LMT	1911
			-11:30	-	SAMT	1950		# Samoa Time
			-11:00	-	WST			# Samoa Time

# Solomon Is
# excludes Bougainville, for which see Papua New Guinea
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Pacific/Guadalcanal 10:39:48 -	LMT	1912 Oct	# Honiara
			11:00	-	SBT	# Solomon Is Time

# Tokelau Is
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Pacific/Fakaofo	-11:24:56 -	LMT	1901
			-10:00	-	TKT	# Tokelau Time

# Tonga
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	Tonga	1999	only	-	Oct	 7	2:00s	1:00	S
Rule	Tonga	2000	only	-	Mar	19	2:00s	0	-
Rule	Tonga	2000	2001	-	Nov	Sun>=1	2:00	1:00	S
Rule	Tonga	2001	2002	-	Jan	lastSun	2:00	0	-
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Pacific/Tongatapu	12:19:20 -	LMT	1901
			12:20	-	TOT	1941 # Tonga Time
			13:00	-	TOT	1999
			13:00	Tonga	TO%sT

# Tuvalu
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Pacific/Funafuti	11:56:52 -	LMT	1901
			12:00	-	TVT	# Tuvalu Time


# US minor outlying islands

# Howland, Baker
# Howland was mined for guano by American companies 1857-1878 and British
# 1886-1891; Baker was similar but exact dates are not known.
# Inhabited by civilians 1935-1942; U.S. military bases 1943-1944;
# uninhabited thereafter.
# Howland observed Hawaii Standard Time (UTC-10:30) in 1937;
# see page 206 of Elgen M. Long and Marie K. Long,
# Amelia Earhart: the Mystery Solved, Simon & Schuster (2000).
# So most likely Howland and Baker observed Hawaii Time from 1935
# until they were abandoned after the war.

# Jarvis
# Mined for guano by American companies 1857-1879 and British 1883?-1891?.
# Inhabited by civilians 1935-1942; IGY scientific base 1957-1958;
# uninhabited thereafter.
# no information; was probably like Pacific/Kiritimati

# Johnston
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone Pacific/Johnston	-10:00	-	HST

# Kingman
# uninhabited

# Midway
#
# From Mark Brader (2005-01-23):
# [Fallacies and Fantasies of Air Transport History, by R.E.G. Davies,
# published 1994 by Paladwr Press, McLean, VA, USA; ISBN 0-9626483-5-3]
# reproduced a Pan American Airways timeables from 1936, for their weekly
# "Orient Express" flights between San Francisco and Manila, and connecting
# flights to Chicago and the US East Coast.  As it uses some time zone
# designations that I've never seen before:....
# Fri. 6:30A Lv. HONOLOLU (Pearl Harbor), H.I.   H.L.T. Ar. 5:30P Sun.
#  "   3:00P Ar. MIDWAY ISLAND . . . . . . . . . M.L.T. Lv. 6:00A  "
#
Zone Pacific/Midway	-11:49:28 -	LMT	1901
			-11:00	-	NST	1956 Jun  3
			-11:00	1:00	NDT	1956 Sep  2
			-11:00	-	NST	1967 Apr	# N=Nome
			-11:00	-	BST	1983 Nov 30	# B=Bering
			-11:00	-	SST			# S=Samoa

# Palmyra
# uninhabited since World War II; was probably like Pacific/Kiritimati

# Wake
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Pacific/Wake	11:06:28 -	LMT	1901
			12:00	-	WAKT	# Wake Time


# Vanuatu
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	Vanuatu	1983	only	-	Sep	25	0:00	1:00	S
Rule	Vanuatu	1984	1991	-	Mar	Sun>=23	0:00	0	-
Rule	Vanuatu	1984	only	-	Oct	23	0:00	1:00	S
Rule	Vanuatu	1985	1991	-	Sep	Sun>=23	0:00	1:00	S
Rule	Vanuatu	1992	1993	-	Jan	Sun>=23	0:00	0	-
Rule	Vanuatu	1992	only	-	Oct	Sun>=23	0:00	1:00	S
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Pacific/Efate	11:13:16 -	LMT	1912 Jan 13		# Vila
			11:00	Vanuatu	VU%sT	# Vanuatu Time

# Wallis and Futuna
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Pacific/Wallis	12:15:20 -	LMT	1901
			12:00	-	WFT	# Wallis & Futuna Time

###############################################################################

# NOTES

# 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 (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
# Association's Standard Schedules Information Manual (IATA SSIM),
# published semiannually.  Law sent in several helpful summaries
# of the IATA's data 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
# I found in the UCLA library.
#
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
# I invented the abbreviations marked `*' in the following table;
# the rest are from earlier versions of this file, or from other sources.
# Corrections are welcome!
#		std dst
#		LMT	Local Mean Time
#	  8:00	WST WST	Western Australia
#	  8:45	CWST CWST Central Western Australia*
#	  9:00	JST	Japan
#	  9:30	CST CST	Central Australia
#	 10:00	EST EST	Eastern Australia
#	 10:00	ChST	Chamorro
#	 10:30	LHST LHST Lord Howe*
#	 11:30	NZMT NZST New Zealand through 1945
#	 12:00	NZST NZDT New Zealand 1946-present
#	 12:45	CHAST CHADT Chatham*
#	-11:00	SST	Samoa
#	-10:00	HST	Hawaii
#	- 8:00	PST	Pitcairn*
#
# See the `northamerica' file for Hawaii.
# See the `southamerica' file for Easter I and the Galapagos Is.

###############################################################################

# Australia

# From Paul Eggert (2005-12-08):
# <a href="http://www.bom.gov.au/climate/averages/tables/dst_times.shtml">
# Implementation Dates of Daylight Saving Time within Australia
# </a> summarizes daylight saving issues in Australia.

# From Arthur David Olson (2005-12-12):
# <a href="http://www.lawlink.nsw.gov.au/lawlink/Corporate/ll_agdinfo.nsf/pages/community_relations_daylight_saving">
# Lawlink NSW:Daylight Saving in New South Wales
# </a> covers New South Wales in particular.

# From John Mackin (1991-03-06):
# We in Australia have _never_ referred to DST as `daylight' time.
# It is called `summer' time.  Now by a happy coincidence, `summer'
# and `standard' happen to start with the same letter; hence, the
# abbreviation does _not_ change...
# The legislation does not actually define abbreviations, at least
# in this State, but the abbreviation is just commonly taken to be the
# initials of the phrase, and the legislation here uniformly uses
# the phrase `summer time' and does not use the phrase `daylight
# time'.
# Announcers on the Commonwealth radio network, the ABC (for Australian
# Broadcasting Commission), use the phrases `Eastern Standard Time'
# or `Eastern Summer Time'.  (Note, though, that as I say in the
# current australasia file, there is really no such thing.)  Announcers
# on its overseas service, Radio Australia, use the same phrases
# prefixed by the word `Australian' when referring to local times;
# time announcements on that service, naturally enough, are made in UTC.

# From Arthur David Olson (1992-03-08):
# Given the above, what's chosen for year-round use is:
#	CST	for any place operating at a GMTOFF of 9:30
#	WST	for any place operating at a GMTOFF of 8:00
#	EST	for any place operating at a GMTOFF of 10:00

# From Chuck Soper (2006-06-01):
# I recently found this Australian government web page on time zones:
# <http://www.australia.gov.au/about-australia-13time>
# And this government web page lists time zone names and abbreviations:
# <http://www.bom.gov.au/climate/averages/tables/daysavtm.shtml>

# From Paul Eggert (2001-04-05), summarizing a long discussion about "EST"
# versus "AEST" etc.:
#
# I see the following points of dispute:
#
# * How important are unique time zone abbreviations?
#
#   Here I tend to agree with the point (most recently made by Chris
#   Newman) that unique abbreviations should not be essential for proper
#   operation of software.  We have other instances of ambiguity
#   (e.g. "IST" denoting both "Israel Standard Time" and "Indian
#   Standard Time"), and they are not likely to go away any time soon.
#   In the old days, some software mistakenly relied on unique
#   abbreviations, but this is becoming less true with time, and I don't
#   think it's that important to cater to such software these days.
#
#   On the other hand, there is another motivation for unambiguous
#   abbreviations: it cuts down on human confusion.  This is
#   particularly true for Australia, where "EST" can mean one thing for
#   time T and a different thing for time T plus 1 second.
#
# * Does the relevant legislation indicate which abbreviations should be used?
#
#   Here I tend to think that things are a mess, just as they are in
#   many other countries.  We Americans are currently disagreeing about
#   which abbreviation to use for the newly legislated Chamorro Standard
#   Time, for example.
#
#   Personally, I would prefer to use common practice; I would like to
#   refer to legislation only for examples of common practice, or as a
#   tiebreaker.
#
# * Do Australians more often use "Eastern Daylight Time" or "Eastern
#   Summer Time"?  Do they typically prefix the time zone names with
#   the word "Australian"?
#
#   My own impression is that both "Daylight Time" and "Summer Time" are
#   common and are widely understood, but that "Summer Time" is more
#   popular; and that the leading "A" is also common but is omitted more
#   often than not.  I just used AltaVista advanced search and got the
#   following count of page hits:
#
#     1,103 "Eastern Summer Time" AND domain:au
#       971 "Australian Eastern Summer Time" AND domain:au
#       613 "Eastern Daylight Time" AND domain:au
#       127 "Australian Eastern Daylight Time" AND domain:au
#
#   Here "Summer" seems quite a bit more popular than "Daylight",
#   particularly when we know the time zone is Australian and not US,
#   say.  The "Australian" prefix seems to be popular for Eastern Summer
#   Time, but unpopular for Eastern Daylight Time.
#
#   For abbreviations, tools like AltaVista are less useful because of
#   ambiguity.  Many hits are not really time zones, unfortunately, and
#   many hits denote US time zones and not Australian ones.  But here
#   are the hit counts anyway:
#
#     161,304 "EST" and domain:au
#      25,156 "EDT" and domain:au
#      18,263 "AEST" and domain:au
#      10,416 "AEDT" and domain:au
#
#      14,538 "CST" and domain:au
#       5,728 "CDT" and domain:au
#         176 "ACST" and domain:au
#          29 "ACDT" and domain:au
#
#       7,539 "WST" and domain:au
#          68 "AWST" and domain:au
#
#   This data suggest that Australians tend to omit the "A" prefix in
#   practice.  The situation for "ST" versus "DT" is less clear, given
#   the ambiguities involved.
#
# * How do Australians feel about the abbreviations in the tz database?
#
#   If you just count Australians on this list, I count 2 in favor and 3
#   against.  One of the "against" votes (David Keegel) counseled delay,
#   saying that both AEST/AEDT and EST/EST are widely used and
#   understood in Australia.

# From Paul Eggert (1995-12-19):
# Shanks & Pottenger report 2:00 for all autumn changes in Australia and NZ.
# Mark Prior writes that his newspaper
# reports that NSW's fall 1995 change will occur at 2:00,
# but Robert Elz says it's been 3:00 in Victoria since 1970
# and perhaps the newspaper's `2:00' is referring to standard time.
# For now we'll continue to assume 2:00s for changes since 1960.

# From Eric Ulevik (1998-01-05):
#
# Here are some URLs to Australian time legislation. These URLs are stable,
# and should probably be included in the data file. There are probably more
# relevant entries in this database.
#
# NSW (including LHI and Broken Hill):
# <a href="http://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html">
# Standard Time Act 1987 (updated 1995-04-04)
# </a>
# ACT
# <a href="http://www.austlii.edu.au/au/legis/act/consol_act/stasta1972279/index.html">
# Standard Time and Summer Time Act 1972
# </a>
# SA
# <a href="http://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html">
# Standard Time Act, 1898
# </a>

# From David Grosz (2005-06-13):
# It was announced last week that Daylight Saving would be extended by
# one week next year to allow for the 2006 Commonwealth Games.
# Daylight Saving is now to end for next year only on the first Sunday
# in April instead of the last Sunday in March.
#
# From Gwillim Law (2005-06-14):
# I did some Googling and found that all of those states (and territory) plan
# to extend DST together in 2006.
# ACT: http://www.cmd.act.gov.au/mediareleases/fileread.cfm?file=86.txt
# New South Wales: http://www.thecouriermail.news.com.au/common/story_page/0,5936,15538869%255E1702,00.html
# South Australia: http://www.news.com.au/story/0,10117,15555031-1246,00.html
# Tasmania: http://www.media.tas.gov.au/release.php?id=14772
# Victoria: I wasn't able to find anything separate, but the other articles
# allude to it.
# But not Queensland
# http://www.news.com.au/story/0,10117,15564030-1248,00.html.

# Northern Territory

# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
# # The NORTHERN TERRITORY..  [ Courtesy N.T. Dept of the Chief Minister ]
# #					[ Nov 1990 ]
# #	N.T. have never utilised any DST due to sub-tropical/tropical location.
# ...
# Zone        Australia/North         9:30    -       CST

# From Bradley White (1991-03-04):
# A recent excerpt from an Australian newspaper...
# the Northern Territory do[es] not have daylight saving.

# Western Australia

# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
# #  The state of WESTERN AUSTRALIA..  [ Courtesy W.A. dept Premier+Cabinet ]
# #						[ Nov 1990 ]
# #	W.A. suffers from a great deal of public and political opposition to
# #	DST in principle. A bill is brought before parliament in most years, but
# #	usually defeated either in the upper house, or in party caucus
# #	before reaching parliament.
# ...
# Zone	Australia/West		8:00	AW	%sST
# ...
# Rule	AW	1974	only	-	Oct	lastSun	2:00	1:00	D
# Rule	AW	1975	only	-	Mar	Sun>=1	3:00	0	W
# Rule	AW	1983	only	-	Oct	lastSun	2:00	1:00	D
# Rule	AW	1984	only	-	Mar	Sun>=1	3:00	0	W

# From Bradley White (1991-03-04):
# A recent excerpt from an Australian newspaper...
# Western Australia...do[es] not have daylight saving.

# From John D. Newman via Bradley White (1991-11-02):
# Western Australia is still on "winter time". Some DH in Sydney
# rang me at home a few days ago at 6.00am. (He had just arrived at
# work at 9.00am.)
# W.A. is switching to Summer Time on Nov 17th just to confuse
# everybody again.

# From Arthur David Olson (1992-03-08):
# The 1992 ending date used in the rules is a best guess;
# it matches what was used in the past.

# <a href="http://www.bom.gov.au/faq/faqgen.htm">
# The Australian Bureau of Meteorology FAQ
# </a> (1999-09-27) writes that Giles Meteorological Station uses
# South Australian time even though it's located in Western Australia.

# Queensland
# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
# #   The state of QUEENSLAND.. [ Courtesy Qld. Dept Premier Econ&Trade Devel ]
# #						[ Dec 1990 ]
# ...
# Zone	Australia/Queensland	10:00	AQ	%sST
# ...
# Rule	AQ	1971	only	-	Oct	lastSun	2:00	1:00	D
# Rule	AQ	1972	only	-	Feb	lastSun	3:00	0	E
# Rule	AQ	1989	max	-	Oct	lastSun	2:00	1:00	D
# Rule	AQ	1990	max	-	Mar	Sun>=1	3:00	0	E

# From Bradley White (1989-12-24):
# "Australia/Queensland" now observes daylight time (i.e. from
# October 1989).

# From Bradley White (1991-03-04):
# A recent excerpt from an Australian newspaper...
# ...Queensland...[has] agreed to end daylight saving
# at 3am tomorrow (March 3)...

# From John Mackin (1991-03-06):
# I can certainly confirm for my part that Daylight Saving in NSW did in fact
# end on Sunday, 3 March.  I don't know at what hour, though.  (It surprised
# me.)

# From Bradley White (1992-03-08):
# ...there was recently a referendum in Queensland which resulted
# in the experimental daylight saving system being abandoned. So, ...
# ...
# Rule	QLD	1989	1991	-	Oct	lastSun	2:00	1:00	D
# Rule	QLD	1990	1992	-	Mar	Sun>=1	3:00	0	S
# ...

# From Arthur David Olson (1992-03-08):
# The chosen rules the union of the 1971/1972 change and the 1989-1992 changes.

# From Christopher Hunt (2006-11-21), after an advance warning
# from Jesper Norgaard Welen (2006-11-01):
# WA are trialing DST for three years.
# <http://www.parliament.wa.gov.au/parliament/bills.nsf/9A1B183144403DA54825721200088DF1/$File/Bill175-1B.pdf>

# From Rives McDow (2002-04-09):
# The most interesting region I have found consists of three towns on the
# southern coast....  South Australia observes daylight saving time; Western
# Australia does not.  The two states are one and a half hours apart.  The
# residents decided to forget about this nonsense of changing the clock so
# much and set the local time 20 hours and 45 minutes from the
# international date line, or right in the middle of the time of South
# Australia and Western Australia....
#
# From Paul Eggert (2002-04-09):
# This is confirmed by the section entitled
# "What's the deal with time zones???" in
# <http://www.earthsci.unimelb.edu.au/~awatkins/null.html>.
#
# From Alex Livingston (2006-12-07):
# ... it was just on four years ago that I drove along the Eyre Highway,
# which passes through eastern Western Australia close to the southern
# coast of the continent.
#
# I paid particular attention to the time kept there. There can be no
# dispute that UTC+08:45 was considered "the time" from the border
# village just inside the border with South Australia to as far west
# as just east of Caiguna. There can also be no dispute that Eucla is
# the largest population centre in this zone....
#
# Now that Western Australia is observing daylight saving, the
# question arose whether this part of the state would follow suit. I
# just called the border village and confirmed that indeed they have,
# meaning that they are now observing UTC+09:45.
#
# (2006-12-09):
# I personally doubt that either experimentation with daylight saving
# in WA or its introduction in SA had anything to do with the genesis
# of this time zone.  My hunch is that it's been around since well
# before 1975.  I remember seeing it noted on road maps decades ago.

# From Paul Eggert (2006-12-15):
# For lack of better info, assume the tradition dates back to the
# introduction of standard time in 1895.


# southeast Australia
#
# From Paul Eggert (2007-07-23):
# Starting autumn 2008 Victoria, NSW, South Australia, Tasmania and the ACT
# end DST the first Sunday in April and start DST the first Sunday in October.
# http://www.theage.com.au/news/national/daylight-savings-to-span-six-months/2007/06/27/1182623966703.html


# South Australia

# From Bradley White (1991-03-04):
# A recent excerpt from an Australian newspaper...
# ...South Australia...[has] agreed to end daylight saving
# at 3am tomorrow (March 3)...

# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
# #   The state of SOUTH AUSTRALIA....[ Courtesy of S.A. Dept of Labour ]
# #						[ Nov 1990 ]
# ...
# Zone	Australia/South		9:30	AS	%sST
# ...
# 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>=15	3:00	0	C
# Rule	 AS	1991	max	-	Mar	Sun>=1	3:00	0	C

# From Bradley White (1992-03-11):
# Recent correspondence with a friend in Adelaide
# contained the following exchange:  "Due to the Adelaide Festival,
# South Australia delays setting back our clocks for a few weeks."

# From Robert Elz (1992-03-13):
# I heard that apparently (or at least, it appears that)
# South Aus will have an extra 3 weeks daylight saving every even
# numbered year (from 1990).  That's when the Adelaide Festival
# is on...

# From Robert Elz (1992-03-16, 00:57:07 +1000):
# DST didn't end in Adelaide today (yesterday)....
# But whether it's "4th Sunday" or "2nd last Sunday" I have no idea whatever...
# (it's just as likely to be "the Sunday we pick for this year"...).

# From Bradley White (1994-04-11):
# If Sun, 15 March, 1992 was at +1030 as kre asserts, but yet Sun, 20 March,
# 1994 was at +0930 as John Connolly's customer seems to assert, then I can
# only conclude that the actual rule is more complicated....

# From John Warburton (1994-10-07):
# The new Daylight Savings dates for South Australia ...
# was gazetted in the Government Hansard on Sep 26 1994....
# start on last Sunday in October and end in last sunday in March.

# From Paul Eggert (2007-07-23):
# See "southeast Australia" above for 2008 and later.

# Tasmania

# The rules for 1967 through 1991 were reported by George Shepherd
# via Simon Woodhead via Robert Elz (1991-03-06):
# #  The state of TASMANIA.. [Courtesy Tasmanian Dept of Premier + Cabinet ]
# #					[ Nov 1990 ]

# From Bill Hart via Guy Harris (1991-10-10):
# Oh yes, the new daylight savings rules are uniquely tasmanian, we have
# 6 weeks a year now when we are out of sync with the rest of Australia
# (but nothing new about that).

# From Alex Livingston (1999-10-04):
# I heard on the ABC (Australian Broadcasting Corporation) radio news on the
# (long) weekend that Tasmania, which usually goes its own way in this regard,
# has decided to join with most of NSW, the ACT, and most of Victoria
# (Australia) and start daylight saving on the last Sunday in August in 2000
# instead of the first Sunday in October.

# Sim Alam (2000-07-03) reported a legal citation for the 2000/2001 rules:
# http://www.thelaw.tas.gov.au/fragview/42++1968+GS3A@EN+2000070300

# From Paul Eggert (2007-07-23):
# See "southeast Australia" above for 2008 and later.

# Victoria

# The rules for 1971 through 1991 were reported by George Shepherd
# via Simon Woodhead via Robert Elz (1991-03-06):
# #   The state of VICTORIA.. [ Courtesy of Vic. Dept of Premier + Cabinet ]
# #						[ Nov 1990 ]

# From Scott Harrington (2001-08-29):
# On KQED's "City Arts and Lectures" program last night I heard an
# interesting story about daylight savings time.  Dr. John Heilbron was
# discussing his book "The Sun in the Church: Cathedrals as Solar
# Observatories"[1], and in particular the Shrine of Remembrance[2] located
# in Melbourne, Australia.
#
# Apparently the shrine's main purpose is a beam of sunlight which
# illuminates a special spot on the floor at the 11th hour of the 11th day
# of the 11th month (Remembrance Day) every year in memory of Australia's
# fallen WWI soldiers.  And if you go there on Nov. 11, at 11am local time,
# you will indeed see the sunbeam illuminate the special spot at the
# expected time.
#
# However, that is only because of some special mirror contraption that had
# to be employed, since due to daylight savings time, the true solar time of
# the remembrance moment occurs one hour later (or earlier?).  Perhaps
# someone with more information on this jury-rig can tell us more.
#
# [1] http://www.hup.harvard.edu/catalog/HEISUN.html
# [2] http://www.shrine.org.au

# From Paul Eggert (2007-07-23):
# See "southeast Australia" above for 2008 and later.

# New South Wales

# From Arthur David Olson:
# New South Wales and subjurisdictions have their own ideas of a fun time.
# Based on law library research by John Mackin,
# who notes:
#	In Australia, time is not legislated federally, but rather by the
#	individual states.  Thus, while such terms as ``Eastern Standard Time''
#	[I mean, of course, Australian EST, not any other kind] are in common
#	use, _they have NO REAL MEANING_, as they are not defined in the
#	legislation.  This is very important to understand.
#	I have researched New South Wales time only...

# From Eric Ulevik (1999-05-26):
# DST will start in NSW on the last Sunday of August, rather than the usual
# October in 2000.  [See: Matthew Moore,
# <a href="http://www.smh.com.au/news/9905/26/pageone/pageone4.html">
# Two months more daylight saving
# </a>
# Sydney Morning Herald (1999-05-26).]

# From Paul Eggert (1999-09-27):
# See the following official NSW source:
# <a href="http://dir.gis.nsw.gov.au/cgi-bin/genobject/document/other/daylightsaving/tigGmZ">
# Daylight Saving in New South Wales.
# </a>
#
# Narrabri Shire (NSW) council has announced it will ignore the extension of
# daylight saving next year.  See:
# <a href="http://abc.net.au/news/regionals/neweng/monthly/regeng-22jul1999-1.htm">
# Narrabri Council to ignore daylight saving
# </a> (1999-07-22).  For now, we'll wait to see if this really happens.
#
# Victoria will following NSW.  See:
# <a href="http://abc.net.au/local/news/olympics/1999/07/item19990728112314_1.htm">
# Vic to extend daylight saving
# </a> (1999-07-28).
#
# However, South Australia rejected the DST request.  See:
# <a href="http://abc.net.au/news/olympics/1999/07/item19990719151754_1.htm">
# South Australia rejects Olympics daylight savings request
# </a> (1999-07-19).
#
# Queensland also will not observe DST for the Olympics.  See:
# <a href="http://abc.net.au/news/olympics/1999/06/item19990601114608_1.htm">
# Qld says no to daylight savings for Olympics
# </a> (1999-06-01), which quotes Queensland Premier Peter Beattie as saying
# ``Look you've got to remember in my family when this came up last time
# I voted for it, my wife voted against it and she said to me it's all very
# well for you, you don't have to worry about getting the children out of
# bed, getting them to school, getting them to sleep at night.
# I've been through all this argument domestically...my wife rules.''
#
# Broken Hill will stick with South Australian time in 2000.  See:
# <a href="http://abc.net.au/news/regionals/brokenh/monthly/regbrok-21jul1999-6.htm">
# Broken Hill to be behind the times
# </a> (1999-07-21).

# IATA SSIM (1998-09) says that the spring 2000 change for Australian
# Capital Territory, New South Wales except Lord Howe Island and Broken
# Hill, and Victoria will be August 27, presumably due to the Sydney Olympics.

# From Eric Ulevik, referring to Sydney's Sun Herald (2000-08-13), page 29:
# The Queensland Premier Peter Beattie is encouraging northern NSW
# towns to use Queensland time.

# From Paul Eggert (2007-07-23):
# See "southeast Australia" above for 2008 and later.

# Yancowinna

# From John Mackin (1989-01-04):
# `Broken Hill' means the County of Yancowinna.

# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
# # YANCOWINNA..  [ Confirmation courtesy of Broken Hill Postmaster ]
# #					[ Dec 1990 ]
# ...
# # Yancowinna uses Central Standard Time, despite [its] location on the
# # New South Wales side of the S.A. border. Most business and social dealings
# # are with CST zones, therefore CST is legislated by local government
# # although the switch to Summer Time occurs in line with N.S.W. There have
# # been years when this did not apply, but the historical data is not
# # presently available.
# Zone	Australia/Yancowinna	9:30	 AY	%sST
# ...
# Rule	 AY	1971	1985	-	Oct	lastSun	2:00	1:00	D
# Rule	 AY	1972	only	-	Feb	lastSun	3:00	0	C
# [followed by other Rules]

# Lord Howe Island

# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
# LHI...		[ Courtesy of Pauline Van Winsen ]
#					[ Dec 1990 ]
# Lord Howe Island is located off the New South Wales coast, and is half an
# hour ahead of NSW time.

# From James Lonergan, Secretary, Lord Howe Island Board (2000-01-27):
# Lord Howe Island summer time in 2000/2001 will commence on the same
# date as the rest of NSW (i.e. 2000-08-27).  For your information the
# Lord Howe Island Board (controlling authority for the Island) is
# seeking the community's views on various options for summer time
# arrangements on the Island, e.g. advance clocks by 1 full hour
# instead of only 30 minutes.  Dependant on the wishes of residents
# the Board may approach the NSW government to change the existing
# arrangements.  The starting date for summer time on the Island will
# however always coincide with the rest of NSW.

# From James Lonergan, Secretary, Lord Howe Island Board (2000-10-25):
# Lord Howe Island advances clocks by 30 minutes during DST in NSW and retards
# clocks by 30 minutes when DST finishes. Since DST was most recently
# introduced in NSW, the "changeover" time on the Island has been 02:00 as
# 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 (2006-03-22):
# For Lord Howe dates we use Shanks & Pottenger through 1989, and
# Lonergan thereafter.  For times we use Lonergan.

# From Paul Eggert (2007-07-23):
# See "southeast Australia" above for 2008 and later.

###############################################################################

# New Zealand

# From Mark Davies (1990-10-03):
# the 1989/90 year was a trial of an extended "daylight saving" period.
# This trial was deemed successful and the extended period adopted for
# subsequent years (with the addition of a further week at the start).
# source -- phone call to Ministry of Internal Affairs Head Office.

# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
# # The Country of New Zealand   (Australia's east island -) Gee they hate that!
# #				   or is Australia the west island of N.Z.
# #	[ courtesy of Geoff Tribble.. Auckland N.Z. ]
# #				[ Nov 1990 ]
# ...
# Rule	NZ      1974    1988	-	Oct	lastSun	2:00	1:00	D
# Rule	NZ	1989	max	-	Oct	Sun>=1	2:00	1:00	D
# Rule	NZ      1975    1989	-	Mar	Sun>=1	3:00	0	S
# Rule	NZ	1990	max	-	Mar	lastSun	3:00	0	S
# ...
# Zone	NZ			12:00	NZ		NZ%sT	# New Zealand
# Zone	NZ-CHAT			12:45	-		NZ-CHAT # Chatham Island

# From Arthur David Olson (1992-03-08):
# The chosen rules use the Davies October 8 values for the start of DST in 1989
# rather than the October 1 value.

# From Paul Eggert (1995-12-19);
# 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 (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 & Pottenger.
#
# For Chatham, IATA SSIM (1991/1999) gives the NZ rules but with
# transitions at 2:45 local standard time; this confirms that Chatham
# is always exactly 45 minutes ahead of Auckland.

# From Colin Sharples (2007-04-30):
# DST will now start on the last Sunday in September, and end on the
# first Sunday in April.  The changes take effect this year, meaning
# that DST will begin on 2007-09-30 2008-04-06.
# http://www.dia.govt.nz/diawebsite.nsf/wpg_URL/Services-Daylight-Saving-Daylight-saving-to-be-extended

###############################################################################


# Fiji

# Howse writes (p 153) that in 1879 the British governor of Fiji
# enacted an ordinance standardizing the islands on Antipodean Time
# instead of the American system (which was one day behind).

# From Rives McDow (1998-10-08):
# Fiji will introduce DST effective 0200 local time, 1998-11-01
# until 0300 local time 1999-02-28.  Each year the DST period will
# be from the first Sunday in November until the last Sunday in February.

# From Paul Eggert (2000-01-08):
# IATA SSIM (1999-09) says DST ends 0100 local time.  Go with McDow.

# From the BBC World Service (1998-10-31 11:32 UTC):
# The Fijiian government says the main reasons for the time change is to
# improve productivity and reduce road accidents.  But correspondents say it
# also hopes the move will boost Fiji's ability to compete with other pacific
# islands in the effort to attract tourists to witness the dawning of the new
# millenium.

# http://www.fiji.gov.fj/press/2000_09/2000_09_13-05.shtml (2000-09-13)
# reports that Fiji has discontinued DST.

# Johnston

# Johnston data is from usno1995.


# Kiribati

# From Paul Eggert (1996-01-22):
# Today's _Wall Street Journal_ (page 1) reports that Kiribati
# ``declared it the same day 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:
# I wonder what happened in Kwajalein, where there was NO Friday,
# 1993-08-20.  Thursday night at midnight Kwajalein switched sides with
# respect to the International Date Line, to rejoin its fellow islands,
# going from 11:59 p.m. Thursday to 12:00 m. Saturday in a blink.


# N Mariana Is, Guam

# Howse writes (p 153) ``The Spaniards, on the other hand, reached the
# Philippines and the Ladrones from America,'' and implies that the Ladrones
# (now called the Marianas) kept American date for quite some time.
# For now, we assume the Ladrones switched at the same time as the Philippines;
# see Asia/Manila.

# US Public Law 106-564 (2000-12-23) made UTC+10 the official standard time,
# under the name "Chamorro Standard Time".  There is no official abbreviation,
# but Congressman Robert A. Underwood, author of the bill that became law,
# wrote in a press release (2000-12-27) that he will seek the use of "ChST".


# Micronesia

# Alan Eugene Davis writes (1996-03-16),
# ``I am certain, having lived there for the past decade, that "Truk"
# (now properly known as Chuuk) ... is in the time zone GMT+10.''
#
# Shanks & Pottenger write that Truk switched from UTC+10 to UTC+11
# on 1978-10-01; ignore this for now.

# From Paul Eggert (1999-10-29):
# The Federated States of Micronesia Visitors Board writes in
# <a href="http://www.fsmgov.org/info/clocks.html">
# The Federated States of Micronesia - Visitor Information
# </a> (1999-01-26)
# that Truk and Yap are UTC+10, and Ponape and Kosrae are UTC+11.
# We don't know when Kosrae switched from UTC+12; assume January 1 for now.


# Midway

# From Charles T O'Connor, KMTH DJ (1956),
# quoted in the KTMH section of the Radio Heritage Collection
# <http://radiodx.com/spdxr/KMTH.htm> (2002-12-31):
# For the past two months we've been on what is known as Daylight
# Saving Time.  This time has put us on air at 5am in the morning,
# your time down there in New Zealand.  Starting September 2, 1956
# we'll again go back to Standard Time.  This'll mean that we'll go to
# air at 6am your time.
#
# From Paul Eggert (2003-03-23):
# We don't know the date of that quote, but we'll guess they
# started DST on June 3.  Possibly DST was observed other years
# in Midway, but we have no record of it.


# Pitcairn

# From Rives McDow (1999-11-08):
# A Proclamation was signed by the Governor of Pitcairn on the 27th March 1998
# with regard to Pitcairn Standard Time.  The Proclamation is as follows.
#
#	The local time for general purposes in the Islands shall be
#	Co-ordinated Universal time minus 8 hours and shall be known
#	as Pitcairn Standard Time.
#
# ... I have also seen Pitcairn listed as UTC minus 9 hours in several
# references, and can only assume that this was an error in interpretation
# somehow in light of this proclamation.

# From Rives McDow (1999-11-09):
# The Proclamation regarding Pitcairn time came into effect on 27 April 1998
# ... at midnight.

# From Howie Phelps (1999-11-10), who talked to a Pitcairner via shortwave:
# Betty Christian told me yesterday that their local time is the same as
# Pacific Standard Time. They used to be 1/2 hour different from us here in
# Sacramento but it was changed a couple of years ago.


# Samoa

# Howse writes (p 153, citing p 10 of the 1883-11-18 New York Herald)
# that in 1879 the King of Samoa decided to change
# ``the date in his kingdom from the Antipodean to the American system,
# ordaining -- by a masterpiece of diplomatic flattery -- that
# the Fourth of July should be celebrated twice in that year.''


# 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.

# Don Mundell writes in the 1997-02-20 Tonga Chronicle
# <a href="http://www.tongatapu.net.to/tonga/homeland/timebegins.htm">
# How Tonga became `The Land where Time Begins'
# </a>:

# Until 1941 Tonga maintained a standard time 50 minutes ahead of NZST
# 12 hours and 20 minutes ahead of GMT.  When New Zealand adjusted its
# standard time in 1940s, Tonga had the choice of subtracting from its
# local time to come on the same standard time as New Zealand or of
# advancing its time to maintain the differential of 13 degrees
# (approximately 50 minutes ahead of New Zealand time).
#
# Because His Majesty King Taufa'ahau Tupou IV, then Crown Prince
# Tungi, preferred to ensure Tonga's title as the land where time
# begins, the Legislative Assembly approved the latter change.
#
# But some of the older, more conservative members from the outer
# islands objected. "If at midnight on Dec. 31, we move ahead 40
# minutes, as your Royal Highness wishes, what becomes of the 40
# minutes we have lost?"
#
# The Crown Prince, presented an unanswerable argument: "Remember that
# on the World Day of Prayer, you would be the first people on Earth
# to say your prayers in the morning."

# 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
# Committee, has a plan to get Tonga back in front.
# He has proposed a one-off move to tropical daylight saving for Tonga from
# October to March, which has won approval in principle from the Tongan
# Government.

# From Steffen Thorsen (1999-09-09):
# * Tonga will introduce DST in November
#
# I was given this link by John Letts:
# <a hef="http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm">
# http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm
# </a>
#
# I have not been able to find exact dates for the transition in November
# yet. By reading this article it seems like Fiji will be 14 hours ahead
# of UTC as well, but as far as I know Fiji will only be 13 hours ahead
# (12 + 1 hour DST).

# From Arthur David Olson (1999-09-20):
# According to <a href="http://www.tongaonline.com/news/sept1799.html>
# http://www.tongaonline.com/news/sept1799.html
# </a>:
# "Daylight Savings Time will take effect on Oct. 2 through April 15, 2000
# and annually thereafter from the first Saturday in October through the
# third Saturday of April.  Under the system approved by Privy Council on
# Sept. 10, clocks must be turned ahead one hour on the opening day and
# set back an hour on the closing date."
# Alas, no indication of the time of day.

# From Rives McDow (1999-10-06):
# Tonga started its Daylight Saving on Saturday morning October 2nd at 0200am.
# Daylight Saving ends on April 16 at 0300am which is Sunday morning.

# From Steffen Thorsen (2000-10-31):
# Back in March I found a notice on the website http://www.tongaonline.com
# that Tonga changed back to standard time one month early, on March 19
# instead of the original reported date April 16. Unfortunately, the article
# is no longer available on the site, and I did not make a copy of the
# text, and I have forgotten to report it here.
# (Original URL was: http://www.tongaonline.com/news/march162000.htm )

# From Rives McDow (2000-12-01):
# Tonga is observing DST as of 2000-11-04 and will stop on 2001-01-27.

# From Sione Moala-Mafi (2001-09-20) via Rives McDow:
# At 2:00am on the first Sunday of November, the standard time in the Kingdom
# shall be moved forward by one hour to 3:00am.  At 2:00am on the last Sunday
# of January the standard time in the Kingdom shall be moved backward by one
# hour to 1:00am.

# From Pulu 'Anau (2002-11-05):
# The law was for 3 years, supposedly to get renewed.  It wasn't.


# Wake

# From Vernice Anderson, Personal Secretary to Philip Jessup,
# US Ambassador At Large (oral history interview, 1971-02-02):
#
# Saturday, the 14th [of October, 1950] -- ...  The time was all the
# more confusing at that point, because we had crossed the
# International Date Line, thus getting two Sundays.  Furthermore, we
# discovered that Wake Island had two hours of daylight saving time
# making calculation of time in Washington difficult if not almost
# impossible.
#
# http://www.trumanlibrary.org/wake/meeting.htm

# From Paul Eggert (2003-03-23):
# We have no other report of DST in Wake Island, so omit this info for now.

###############################################################################

# The International Date Line

# From Gwillim Law (2000-01-03):
#
# The International Date Line is not defined by any international standard,
# convention, or treaty.  Mapmakers are free to draw it as they please.
# Reputable mapmakers will simply ensure that every point of land appears on
# the correct side of the IDL, according to the date legally observed there.
#
# When Kiribati adopted a uniform date in 1995, thereby moving the Phoenix and
# Line Islands to the west side of the IDL (or, if you prefer, moving the IDL
# to the east side of the Phoenix and Line Islands), I suppose that most
# mapmakers redrew the IDL following the boundary of Kiribati.  Even that line
# has a rather arbitrary nature.  The straight-line boundaries between Pacific
# island nations that are shown on many maps are based on an international
# convention, but are not legally binding national borders.... The date is
# governed by the IDL; therefore, even on the high seas, there may be some
# places as late as fourteen hours later than UTC.  And, since the IDL is not
# an international standard, there are some places on the high seas where the
# correct date is ambiguous.

# From Wikipedia <http://en.wikipedia.org/wiki/Time_zone> (2005-08-31):
# Before 1920, all ships kept local apparent time on the high seas by setting
# their clocks at night or at the morning sight so that, given the ship's
# speed and direction, it would be 12 o'clock when the Sun crossed the ship's
# meridian (12 o'clock = local apparent noon).  During 1917, at the
# Anglo-French Conference on Time-keeping at Sea, it was recommended that all
# ships, both military and civilian, should adopt hourly standard time zones
# on the high seas.  Whenever a ship was within the territorial waters of any
# nation it would use that nation's standard time.  The captain was permitted
# to change his ship's clocks at a time of his choice following his ship's
# entry into another zone time--he often chose midnight.  These zones were
# adopted by all major fleets between 1920 and 1925 but not by many
# independent merchant ships until World War II.

# From Paul Eggert, using references suggested by Oscar van Vlijmen
# (2005-03-20):
#
# The American Practical Navigator (2002)
# <http://pollux.nss.nima.mil/pubs/pubs_j_apn_sections.html?rid=187>
# talks only about the 180-degree meridian with respect to ships in
# international waters; it ignores the international date line.
