diff --git a/jdk/make/CreateJars.gmk b/jdk/make/CreateJars.gmk index d65fb7ea737..aca0f42904a 100644 --- a/jdk/make/CreateJars.gmk +++ b/jdk/make/CreateJars.gmk @@ -76,13 +76,24 @@ LOCALEDATA_INCLUDE_LOCALES := ar be bg ca cs da de el es et fi fr ga hi hr hu in iw ja ko lt lv mk ms mt nl no pl pt ro ru sk sl sq sr sv \ th tr uk vi zh -LOCALEDATA_INCLUDES := $(addprefix sun/text/resources/, $(LOCALEDATA_INCLUDE_LOCALES)) \ +LOCALEDATA_INCLUDES := sun/util/resources/provider/NonEnLocaleDataMetaInfo.class +LOCALEDATA_INCLUDES += $(addprefix sun/text/resources/, $(LOCALEDATA_INCLUDE_LOCALES)) \ $(addprefix sun/util/resources/, $(LOCALEDATA_INCLUDE_LOCALES)) -$(eval $(call SetupArchive,BUILD_LOCALEDATA_JAR, , \ - SRCS := $(JDK_OUTPUTDIR)/modules/jdk.localedata, \ +LOCALEDATA_SERVICES_DIR := $(IMAGES_OUTPUTDIR)/localemetainfo + +LOCALEDATA_METAINF_SERVICES := $(LOCALEDATA_SERVICES_DIR)/META-INF/services/sun.util.locale.provider.LocaleDataMetaInfo + +$(LOCALEDATA_METAINF_SERVICES): $(JDK_TOPDIR)/src/jdk.localedata/META-INF/localedata-services/sun.util.locale.provider.LocaleDataMetaInfo + $(install-file) + +$(eval $(call SetupArchive,BUILD_LOCALEDATA_JAR, \ + $(LOCALEDATA_METAINF_SERVICES), \ + SRCS := $(JDK_OUTPUTDIR)/modules/jdk.localedata \ + $(LOCALEDATA_SERVICES_DIR), \ SUFFIXES := .class _dict _th, \ INCLUDES := $(LOCALEDATA_INCLUDES), \ + EXTRA_FILES := META-INF/services/sun.util.locale.provider.LocaleDataMetaInfo, \ JAR := $(IMAGES_OUTPUTDIR)/lib/ext/localedata.jar, \ SKIP_METAINF := true)) @@ -210,6 +221,8 @@ RT_JAR_EXCLUDES += \ sun/tools/tree \ sun/tools/util \ sun/util/cldr/CLDRLocaleDataMetaInfo.class \ + sun/util/resources/provider/NonEnLocaleDataMetaInfo.class \ + META-INF/services/sun.util.locale.provider.LocaleDataMetaInfo \ sun/util/resources/cldr \ $(LOCALEDATA_INCLUDES) \ com/oracle/jrockit/jfr \ @@ -429,13 +442,23 @@ include gensrc/GensrcCLDR.gmk CLDRDATA_JAR_DST := $(IMAGES_OUTPUTDIR)/lib/ext/cldrdata.jar -$(eval $(call SetupArchive,BUILD_CLDRDATA_JAR, , \ +CLDR_SERVICES_DIR := $(IMAGES_OUTPUTDIR)/cldrmetainfo + +CLDR_METAINF_SERVICES := $(CLDR_SERVICES_DIR)/META-INF/services/sun.util.locale.provider.LocaleDataMetaInfo + +$(CLDR_METAINF_SERVICES): $(JDK_TOPDIR)/src/jdk.localedata/META-INF/cldrdata-services/sun.util.locale.provider.LocaleDataMetaInfo + $(install-file) + +$(eval $(call SetupArchive,BUILD_CLDRDATA_JAR, \ + $(CLDR_METAINF_SERVICES), \ SRCS := $(JDK_OUTPUTDIR)/modules/jdk.localedata \ - $(JDK_OUTPUTDIR)/modules/java.base, \ + $(JDK_OUTPUTDIR)/modules/java.base \ + $(CLDR_SERVICES_DIR), \ SUFFIXES := .class, \ INCLUDES := sun/text/resources/cldr \ sun/util/cldr/CLDRLocaleDataMetaInfo.class \ sun/util/resources/cldr, \ + EXTRA_FILES := META-INF/services/sun.util.locale.provider.LocaleDataMetaInfo, \ JAR := $(CLDRDATA_JAR_DST), \ EXTRA_MANIFEST_ATTR := CLDR-Version: $(CLDRVERSION), \ SKIP_METAINF := true)) diff --git a/jdk/make/data/currency/CurrencyData.properties b/jdk/make/data/currency/CurrencyData.properties index a22ddd4b3b6..2b5a5704959 100644 --- a/jdk/make/data/currency/CurrencyData.properties +++ b/jdk/make/data/currency/CurrencyData.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,7 @@ formatVersion=1 # Version of the currency code information in this class. # It is a serial number that accompanies with each amendment. -dataVersion=156 +dataVersion=159 # List of all valid ISO 4217 currency codes. # To ensure compatibility, do not remove codes. @@ -332,7 +332,7 @@ LY=LYD # LIECHTENSTEIN LI=CHF # LITHUANIA -LT=LTL +LT=LTL;2014-12-31-22-00-00;EUR # LUXEMBOURG LU=EUR # MACAU diff --git a/jdk/make/data/tzdata/VERSION b/jdk/make/data/tzdata/VERSION index c735be51ca1..5e925ada8df 100644 --- a/jdk/make/data/tzdata/VERSION +++ b/jdk/make/data/tzdata/VERSION @@ -1,24 +1,24 @@ # # 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. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2014c +tzdata2014g diff --git a/jdk/make/data/tzdata/africa b/jdk/make/data/tzdata/africa index 6f1a1471e0c..aa91f365ce1 100644 --- a/jdk/make/data/tzdata/africa +++ b/jdk/make/data/tzdata/africa @@ -21,13 +21,13 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -#
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future).  For more, please see
+# the file CONTRIBUTING in the tz distribution.
 
 # From Paul Eggert (2013-02-21):
 #
@@ -49,8 +49,8 @@
 # I found in the UCLA library.
 #
 # For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
-# .
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
+# http://www.jstor.org/stable/1774359
 #
 # A reliable and entertaining source about time zones is
 # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
@@ -58,13 +58,13 @@
 # Previous editions of this database used WAT, CAT, SAT, and EAT
 # for +0:00 through +3:00, respectively,
 # but Mark R V Murray reports that
-# `SAST' is the official abbreviation for +2:00 in the country of South Africa,
-# `CAT' is commonly used for +2:00 in countries north of South Africa, and
-# `WAT' is probably the best name for +1:00, as the common phrase for
-# the area that includes Nigeria is ``West Africa''.
-# He has heard of ``Western Sahara Time'' for +0:00 but can find no reference.
+# 'SAST' is the official abbreviation for +2:00 in the country of South Africa,
+# 'CAT' is commonly used for +2:00 in countries north of South Africa, and
+# 'WAT' is probably the best name for +1:00, as the common phrase for
+# the area that includes Nigeria is "West Africa".
+# He has heard of "Western Sahara Time" for +0:00 but can find no reference.
 #
-# To make things confusing, `WAT' seems to have been used for -1:00 long ago;
+# To make things confusing, 'WAT' seems to have been used for -1:00 long ago;
 # I'd guess that this was because people needed _some_ name for -1:00,
 # and at the time, far west Africa was the only major land area in -1:00.
 # This usage is now obsolete, as the last use of -1:00 on the African
@@ -77,7 +77,7 @@
 #	 2:00	SAST	South Africa Standard Time
 # and Murray suggests the following abbreviation:
 #	 1:00	WAT	West Africa Time
-# I realize that this leads to `WAT' being used for both -1:00 and 1:00
+# I realize that this leads to 'WAT' being used for both -1:00 and 1:00
 # for times before 1976, but this is the best I can think of
 # until we get more information.
 #
@@ -117,9 +117,9 @@ Rule	Algeria	1980	only	-	Oct	31	 2:00	0	-
 # Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
 # more precise 0:09:21.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Algiers	0:12:12 -	LMT	1891 Mar 15 0:01
-			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
-			0:00	Algeria	WE%sT	1940 Feb 25 2:00
+Zone	Africa/Algiers	0:12:12 -	LMT	1891 Mar 15  0:01
+			0:09:21	-	PMT	1911 Mar 11 # Paris Mean Time
+			0:00	Algeria	WE%sT	1940 Feb 25  2:00
 			1:00	Algeria	CE%sT	1946 Oct  7
 			0:00	-	WET	1956 Jan 29
 			1:00	-	CET	1963 Apr 14
@@ -129,18 +129,8 @@ Zone	Africa/Algiers	0:12:12 -	LMT	1891 Mar 15 0:01
 			1:00	-	CET
 
 # Angola
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Luanda	0:52:56	-	LMT	1892
-			0:52:04	-	AOT	1911 May 26 # Angola Time
-			1:00	-	WAT
-
 # Benin
-# Whitman says they switched to 1:00 in 1946, not 1934;
-# go with Shanks & Pottenger.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Porto-Novo	0:10:28	-	LMT	1912
-			0:00	-	GMT	1934 Feb 26
-			1:00	-	WAT
+# See Africa/Lagos.
 
 # Botswana
 # From Paul Eggert (2013-02-21):
@@ -149,14 +139,12 @@ Zone Africa/Porto-Novo	0:10:28	-	LMT	1912
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Gaborone	1:43:40 -	LMT	1885
 			1:30	-	SAST	1903 Mar
-			2:00	-	CAT	1943 Sep 19 2:00
-			2:00	1:00	CAST	1944 Mar 19 2:00
+			2:00	-	CAT	1943 Sep 19  2:00
+			2:00	1:00	CAST	1944 Mar 19  2:00
 			2:00	-	CAT
 
 # Burkina Faso
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Ouagadougou	-0:06:04 -	LMT	1912
-			 0:00	-	GMT
+# See Africa/Abidjan.
 
 # Burundi
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -164,52 +152,60 @@ Zone Africa/Bujumbura	1:57:28	-	LMT	1890
 			2:00	-	CAT
 
 # Cameroon
-# Whitman says they switched to 1:00 in 1920; go with Shanks & Pottenger.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Douala	0:38:48	-	LMT	1912
-			1:00	-	WAT
+# See Africa/Lagos.
 
 # Cape Verde
+#
+# Shanks gives 1907 for the transition to CVT.
+# Perhaps the 1911-05-26 Portuguese decree
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# merely made it official?
+#
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Atlantic/Cape_Verde -1:34:04 -	LMT	1907			# Praia
+Zone Atlantic/Cape_Verde -1:34:04 -	LMT	1907        # Praia
 			-2:00	-	CVT	1942 Sep
 			-2:00	1:00	CVST	1945 Oct 15
-			-2:00	-	CVT	1975 Nov 25 2:00
+			-2:00	-	CVT	1975 Nov 25  2:00
 			-1:00	-	CVT
 
 # Central African Republic
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Bangui	1:14:20	-	LMT	1912
-			1:00	-	WAT
+# See Africa/Lagos.
 
 # Chad
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Ndjamena	1:00:12 -	LMT	1912
+Zone	Africa/Ndjamena	1:00:12 -	LMT	1912        # N'Djamena
 			1:00	-	WAT	1979 Oct 14
 			1:00	1:00	WAST	1980 Mar  8
 			1:00	-	WAT
 
 # Comoros
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Comoro	2:53:04 -	LMT	1911 Jul   # Moroni, Gran Comoro
+Zone	Indian/Comoro	2:53:04 -	LMT	1911 Jul # Moroni, Gran Comoro
 			3:00	-	EAT
 
-# Democratic Republic of Congo
+# Democratic Republic of the Congo
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Kinshasa	1:01:12 -	LMT	1897 Nov 9
-			1:00	-	WAT
 Zone Africa/Lubumbashi	1:49:52 -	LMT	1897 Nov 9
 			2:00	-	CAT
+# The above is for the eastern part; see Africa/Lagos for the western part.
 
 # Republic of the Congo
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Brazzaville	1:01:08 -	LMT	1912
-			1:00	-	WAT
+# See Africa/Lagos.
 
-# Cote D'Ivoire
+# Côte d'Ivoire / Ivory Coast
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Abidjan	-0:16:08 -	LMT	1912
 			 0:00	-	GMT
+Link Africa/Abidjan Africa/Bamako	# Mali
+Link Africa/Abidjan Africa/Banjul	# Gambia
+Link Africa/Abidjan Africa/Conakry	# Guinea
+Link Africa/Abidjan Africa/Dakar	# Senegal
+Link Africa/Abidjan Africa/Freetown	# Sierra Leone
+Link Africa/Abidjan Africa/Lome		# Togo
+Link Africa/Abidjan Africa/Nouakchott	# Mauritania
+Link Africa/Abidjan Africa/Ouagadougou	# Burkina Faso
+Link Africa/Abidjan Africa/Sao_Tome	# São Tomé and Príncipe
+Link Africa/Abidjan Atlantic/St_Helena	# St Helena
 
 # Djibouti
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -254,30 +250,26 @@ Rule	Egypt	1990	1994	-	May	 1	1:00	1:00	S
 # Egyptians would approve the cancellation."
 #
 # Egypt to cancel daylight saving time
-# 
 # http://www.almasryalyoum.com/en/node/407168
-# 
 # or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_egypt04.html
-# 
 Rule	Egypt	1995	2010	-	Apr	lastFri	 0:00s	1:00	S
-Rule	Egypt	1995	2005	-	Sep	lastThu	23:00s	0	-
+Rule	Egypt	1995	2005	-	Sep	lastThu	24:00	0	-
 # From Steffen Thorsen (2006-09-19):
 # The Egyptian Gazette, issue 41,090 (2006-09-18), page 1, reports:
 # Egypt will turn back clocks by one hour at the midnight of Thursday
 # after observing the daylight saving time since May.
 # http://news.gom.com.eg/gazette/pdf/2006/09/18/01.pdf
-Rule	Egypt	2006	only	-	Sep	21	23:00s	0	-
+Rule	Egypt	2006	only	-	Sep	21	24:00	0	-
 # From Dirk Losch (2007-08-14):
 # I received a mail from an airline which says that the daylight
 # saving time in Egypt will end in the night of 2007-09-06 to 2007-09-07.
-# From Jesper Norgaard Welen (2007-08-15): [The following agree:]
+# From Jesper Nørgaard Welen (2007-08-15): [The following agree:]
 # http://www.nentjes.info/Bill/bill5.htm
 # http://www.timeanddate.com/worldclock/city.html?n=53
 # From Steffen Thorsen (2007-09-04): The official information...:
 # http://www.sis.gov.eg/En/EgyptOnline/Miscellaneous/000002/0207000000000000001580.htm
-Rule	Egypt	2007	only	-	Sep	Thu>=1	23:00s	0	-
+Rule	Egypt	2007	only	-	Sep	Thu>=1	24:00	0	-
 # From Abdelrahman Hassan (2007-09-06):
 # Due to the Hijri (lunar Islamic calendar) year being 11 days shorter
 # than the year of the Gregorian calendar, Ramadan shifts earlier each
@@ -311,15 +303,9 @@ Rule	Egypt	2007	only	-	Sep	Thu>=1	23:00s	0	-
 #
 # timeanddate[2] and another site I've found[3] also support that.
 #
-# [1] 
-# https://bugzilla.redhat.com/show_bug.cgi?id=492263
-# 
-# [2] 
-# http://www.timeanddate.com/worldclock/clockchange.html?n=53
-# 
-# [3] 
-# http://wwp.greenwichmeantime.com/time-zone/africa/egypt/
-# 
+# [1] https://bugzilla.redhat.com/show_bug.cgi?id=492263
+# [2] http://www.timeanddate.com/worldclock/clockchange.html?n=53
+# [3] http://wwp.greenwichmeantime.com/time-zone/africa/egypt/
 
 # From Arthur David Olson (2009-04-20):
 # In 2009 (and for the next several years), Ramadan ends before the fourth
@@ -329,14 +315,10 @@ Rule	Egypt	2007	only	-	Sep	Thu>=1	23:00s	0	-
 # From Steffen Thorsen (2009-08-11):
 # We have been able to confirm the August change with the Egyptian Cabinet
 # Information and Decision Support Center:
-# 
 # http://www.timeanddate.com/news/time/egypt-dst-ends-2009.html
-# 
 #
 # The Middle East News Agency
-# 
 # http://www.mena.org.eg/index.aspx
-# 
 # also reports "Egypt starts winter time on August 21"
 # today in article numbered "71, 11/08/2009 12:25 GMT."
 # Only the title above is available without a subscription to their service,
@@ -344,19 +326,14 @@ Rule	Egypt	2007	only	-	Sep	Thu>=1	23:00s	0	-
 # (at least today).
 
 # From Alexander Krivenyshev (2010-07-20):
-# According to News from Egypt -  Al-Masry Al-Youm Egypt's cabinet has
+# According to News from Egypt - Al-Masry Al-Youm Egypt's cabinet has
 # decided that Daylight Saving Time will not be used in Egypt during
 # Ramadan.
 #
 # Arabic translation:
-# "Clocks to go back during Ramadan--and then forward again"
-# 
+# "Clocks to go back during Ramadan - and then forward again"
 # http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again
-# 
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_egypt02.html
-# 
 
 # From Ahmad El-Dardiry (2014-05-07):
 # Egypt is to change back to Daylight system on May 15
@@ -365,46 +342,77 @@ Rule	Egypt	2007	only	-	Sep	Thu>=1	23:00s	0	-
 # From Gunther Vermier (2015-05-13):
 # our Egypt office confirms that the change will be at 15 May "midnight" (24:00)
 
-# From Paul Eggert (2014-05-13):
+# From Imed Chihi (2014-06-04):
+# We have finally "located" a precise official reference about the DST changes
+# in Egypt.  The Ministers Cabinet decision is explained at
+# http://www.cabinet.gov.eg/Media/CabinetMeetingsDetails.aspx?id=347 ...
+# [T]his (Arabic) site is not accessible outside Egypt, but the page ...
+# translates into: "With regard to daylight saving time, it is scheduled to
+# take effect at exactly twelve o'clock this evening, Thursday, 15 MAY 2014,
+# to be suspended by twelve o'clock on the evening of Thursday, 26 JUN 2014,
+# and re-established again at the end of the month of Ramadan, at twelve
+# o'clock on the evening of Thursday, 31 JUL 2014."  This statement has been
+# reproduced by other (more accessible) sites[, e.g.,]...
+# http://elgornal.net/news/news.aspx?id=4699258
+
+# From Paul Eggert (2014-06-04):
 # Sarah El Deeb and Lee Keath of AP report that the Egyptian government says
 # the change is because of blackouts in Cairo, even though Ahram Online (cited
-# above) says DST had no affect on electricity consumption.  The AP story says
-# DST will not be observed during Ramadan.  There is no information about when
-# DST will end.  See:
+# above) says DST had no affect on electricity consumption.  There is
+# no information about when DST will end this fall.  See:
 # http://abcnews.go.com/International/wireStory/el-sissi-pushes-egyptians-line-23614833
 #
-# For now, guess that later transitions will use 2010's rules, and that
-# Egypt will agree with Morocco (see below) about the date Ramadan starts and
-# ends, though (unlike Morocco) it will switch at 00:00 standard time.  In
-# Egypt the spring-forward transitions are removed for 2020-2022, when the
-# guessed spring-forward date falls during the estimated Ramadan, and all
-# transitions removed for 2023-2038, where the estimated Ramadan falls entirely
-# outside the guessed daylight-saving time.  Ramadan intrudes on the guessed
-# DST starting in 2039, but that's beyond our somewhat-arbitrary cutoff.
-
-Rule	Egypt	2008	only	-	Aug	lastThu	23:00s	0	-
-Rule	Egypt	2009	only	-	Aug	20	23:00s	0	-
-Rule	Egypt	2010	only	-	Aug	11	0:00	0	-
-Rule	Egypt	2010	only	-	Sep	10	0:00	1:00	S
-Rule	Egypt	2010	only	-	Sep	lastThu	23:00s	0	-
+# For now, guess that later spring and fall transitions will use
+# 2010's rules, and guess that Egypt will switch to standard time at
+# 24:00 the last Thursday before Ramadan, and back to DST at 00:00 the
+# first Friday after Ramadan.  To implement this,
+# transition dates for 2015 through 2037 were determined by running
+# the following program under GNU Emacs 24.3, with the results integrated
+# by hand into the table below.  Ramadan again intrudes on the guessed
+# DST starting in 2038, but that's beyond our somewhat-arbitrary cutoff.
+# (let ((islamic-year 1436))
+#   (while (< islamic-year 1460)
+#     (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
+#           (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
+#           (friday 5))
+#       (while (/= friday (mod a 7))
+#         (setq a (1- a)))
+#       (while (/= friday (mod b 7))
+#         (setq b (1+ b)))
+#       (setq a (1- a))
+#       (setq b (1- b))
+#       (setq a (calendar-gregorian-from-absolute a))
+#       (setq b (calendar-gregorian-from-absolute b))
+#       (insert
+#        (format
+#         (concat "Rule\tEgypt\t%d\tonly\t-\t%s\t%2d\t24:00\t0\t-\n"
+#                 "Rule\tEgypt\t%d\tonly\t-\t%s\t%2d\t24:00\t1:00\tS\n")
+#         (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
+#         (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
+#     (setq islamic-year (+ 1 islamic-year))))
+Rule	Egypt	2008	only	-	Aug	lastThu	24:00	0	-
+Rule	Egypt	2009	only	-	Aug	20	24:00	0	-
+Rule	Egypt	2010	only	-	Aug	10	24:00	0	-
+Rule	Egypt	2010	only	-	Sep	 9	24:00	1:00	S
+Rule	Egypt	2010	only	-	Sep	lastThu	24:00	0	-
 Rule	Egypt	2014	only	-	May	15	24:00	1:00	S
-Rule	Egypt	2014	only	-	Jun	29	 0:00s	0	-
-Rule	Egypt	2014	only	-	Jul	29	 0:00s	1:00	S
-Rule	Egypt	2014	max	-	Sep	lastThu	23:00s	0	-
+Rule	Egypt	2014	only	-	Jun	26	24:00	0	-
+Rule	Egypt	2014	only	-	Jul	31	24:00	1:00	S
+Rule	Egypt	2014	max	-	Sep	lastThu	24:00	0	-
 Rule	Egypt	2015	2019	-	Apr	lastFri	 0:00s	1:00	S
-Rule	Egypt	2015	only	-	Jun	18	 0:00s	0	-
-Rule	Egypt	2015	only	-	Jul	18	 0:00s	1:00	S
-Rule	Egypt	2016	only	-	Jun	 7	 0:00s	0	-
-Rule	Egypt	2016	only	-	Jul	 7	 0:00s	1:00	S
-Rule	Egypt	2017	only	-	May	27	 0:00s	0	-
-Rule	Egypt	2017	only	-	Jun	26	 0:00s	1:00	S
-Rule	Egypt	2018	only	-	May	16	 0:00s	0	-
-Rule	Egypt	2018	only	-	Jun	15	 0:00s	1:00	S
-Rule	Egypt	2019	only	-	May	 6	 0:00s	0	-
-Rule	Egypt	2019	only	-	Jun	 5	 0:00s	1:00	S
-Rule	Egypt	2020	only	-	May	24	 0:00s	1:00	S
-Rule	Egypt	2021	only	-	May	13	 0:00s	1:00	S
-Rule	Egypt	2022	only	-	May	 3	 0:00s	1:00	S
+Rule	Egypt	2015	only	-	Jun	11	24:00	0	-
+Rule	Egypt	2015	only	-	Jul	23	24:00	1:00	S
+Rule	Egypt	2016	only	-	Jun	 2	24:00	0	-
+Rule	Egypt	2016	only	-	Jul	 7	24:00	1:00	S
+Rule	Egypt	2017	only	-	May	25	24:00	0	-
+Rule	Egypt	2017	only	-	Jun	29	24:00	1:00	S
+Rule	Egypt	2018	only	-	May	10	24:00	0	-
+Rule	Egypt	2018	only	-	Jun	14	24:00	1:00	S
+Rule	Egypt	2019	only	-	May	 2	24:00	0	-
+Rule	Egypt	2019	only	-	Jun	 6	24:00	1:00	S
+Rule	Egypt	2020	only	-	May	28	24:00	1:00	S
+Rule	Egypt	2021	only	-	May	13	24:00	1:00	S
+Rule	Egypt	2022	only	-	May	 5	24:00	1:00	S
 Rule	Egypt	2023	max	-	Apr	lastFri	 0:00s	1:00	S
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -412,60 +420,63 @@ Zone	Africa/Cairo	2:05:09 -	LMT	1900 Oct
 			2:00	Egypt	EE%sT
 
 # Equatorial Guinea
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Malabo	0:35:08 -	LMT	1912
-			0:00	-	GMT	1963 Dec 15
-			1:00	-	WAT
+# See Africa/Lagos.
 
 # Eritrea
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Asmara	2:35:32 -	LMT	1870
-			2:35:32	-	AMT	1890	      # Asmara Mean Time
-			2:35:20	-	ADMT	1936 May 5    # Adis Dera MT
+			2:35:32	-	AMT	1890        # Asmara Mean Time
+			2:35:20	-	ADMT	1936 May  5 # Adis Dera MT
 			3:00	-	EAT
 
 # Ethiopia
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time zones
-# between 1870 and 1890, and that they merged to 38E50 (2:35:20) in 1890.
-# We'll guess that 38E50 is for Adis Dera.
+# From Paul Eggert (2014-07-31):
+# Like the Swahili of Kenya and Tanzania, many Ethiopians keep a
+# 12-hour clock starting at our 06:00, so their "8 o'clock" is our
+# 02:00 or 14:00.  Keep this in mind when you ask the time in Amharic.
+#
+# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time
+# zones between 1870 and 1890, that they merged to 38E50 (2:35:20) in
+# 1890, and that they switched to 3:00 on 1936-05-05.  Perhaps 38E50
+# was for Adis Dera.  Quite likely the Shanks data entries are wrong
+# anyway.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Africa/Addis_Ababa	2:34:48 -	LMT	1870
-			2:35:20	-	ADMT	1936 May 5    # Adis Dera MT
+			2:35:20	-	ADMT	1936 May  5 # Adis Dera MT
 			3:00	-	EAT
 
 # Gabon
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Libreville	0:37:48 -	LMT	1912
-			1:00	-	WAT
+# See Africa/Lagos.
 
 # Gambia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Banjul	-1:06:36 -	LMT	1912
-			-1:06:36 -	BMT	1935	# Banjul Mean Time
-			-1:00	-	WAT	1964
-			 0:00	-	GMT
+# See Africa/Abidjan.
 
 # Ghana
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-# Whitman says DST was observed from 1931 to ``the present'';
-# go with Shanks & Pottenger.
-Rule	Ghana	1936	1942	-	Sep	 1	0:00	0:20	GHST
-Rule	Ghana	1936	1942	-	Dec	31	0:00	0	GMT
+# Whitman says DST was observed from 1931 to "the present";
+# Shanks & Pottenger say 1936 to 1942;
+# and September 1 to January 1 is given by:
+# Scott Keltie J, Epstein M (eds), The Statesman's Year-Book,
+# 57th ed. Macmillan, London (1920), OCLC 609408015, pp xxviii.
+# For lack of better info, assume DST was observed from 1920 to 1942.
+Rule	Ghana	1920	1942	-	Sep	 1	0:00	0:20	GHST
+Rule	Ghana	1920	1942	-	Dec	31	0:00	0	GMT
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Accra	-0:00:52 -	LMT	1918
 			 0:00	Ghana	%s
 
 # Guinea
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Conakry	-0:54:52 -	LMT	1912
-			 0:00	-	GMT	1934 Feb 26
-			-1:00	-	WAT	1960
-			 0:00	-	GMT
+# See Africa/Abidjan.
 
 # Guinea-Bissau
+#
+# Shanks gives 1911-05-26 for the transition to WAT,
+# evidently confusing the date of the Portuguese decree
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# with the date that it took effect, namely 1912-01-01.
+#
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Bissau	-1:02:20 -	LMT	1911 May 26
+Zone	Africa/Bissau	-1:02:20 -	LMT	1912 Jan  1
 			-1:00	-	WAT	1975
 			 0:00	-	GMT
 
@@ -480,8 +491,8 @@ Zone	Africa/Nairobi	2:27:16	-	LMT	1928 Jul
 # Lesotho
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Maseru	1:50:00 -	LMT	1903 Mar
-			2:00	-	SAST	1943 Sep 19 2:00
-			2:00	1:00	SAST	1944 Mar 19 2:00
+			2:00	-	SAST	1943 Sep 19  2:00
+			2:00	1:00	SAST	1944 Mar 19  2:00
 			2:00	-	SAST
 
 # Liberia
@@ -549,11 +560,11 @@ Zone	Africa/Tripoli	0:52:44 -	LMT	1920
 			2:00	-	EET	1982
 			1:00	Libya	CE%sT	1990 May  4
 # The 1996 and 1997 entries are from Shanks & Pottenger;
-# the IATA SSIM data contain some obvious errors.
+# the IATA SSIM data entries contain some obvious errors.
 			2:00	-	EET	1996 Sep 30
 			1:00	Libya	CE%sT	1997 Oct  4
-			2:00	-	EET	2012 Nov 10 2:00
-			1:00	Libya	CE%sT	2013 Oct 25 2:00
+			2:00	-	EET	2012 Nov 10  2:00
+			1:00	Libya	CE%sT	2013 Oct 25  2:00
 			2:00	-	EET
 
 # Madagascar
@@ -569,18 +580,8 @@ Zone	Africa/Blantyre	2:20:00 -	LMT	1903 Mar
 			2:00	-	CAT
 
 # Mali
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Bamako	-0:32:00 -	LMT	1912
-			 0:00	-	GMT	1934 Feb 26
-			-1:00	-	WAT	1960 Jun 20
-			 0:00	-	GMT
-
 # Mauritania
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Africa/Nouakchott	-1:03:48 -	LMT	1912
-			 0:00	-	GMT	1934 Feb 26
-			-1:00	-	WAT	1960 Nov 28
-			 0:00	-	GMT
+# See Africa/Abidjan.
 
 # Mauritius
 
@@ -604,9 +605,7 @@ Zone Africa/Nouakchott	-1:03:48 -	LMT	1912
 
 # From Steffen Thorsen (2008-07-10):
 # According to
-# 
 # http://www.lexpress.mu/display_article.php?news_id=111216
-# 
 # (in French), Mauritius will start and end their DST a few days earlier
 # than previously announced (2008-11-01 to 2009-03-31).  The new start
 # date is 2008-10-26 at 02:00 and the new end date is 2009-03-27 (no time
@@ -621,22 +620,17 @@ Zone Africa/Nouakchott	-1:03:48 -	LMT	1912
 
 # From Alex Krivenyshev (2008-07-11):
 # Seems that English language article "The revival of daylight saving
-# time:  Energy conservation?"-# No. 16578 (07/11/2008) was originally
+# time: Energy conservation?"-# No. 16578 (07/11/2008) was originally
 # published on Monday, June 30, 2008...
 #
 # I guess that article in French "Le gouvernement avance l'introduction
-# de l'heure d'ete" stating that DST in Mauritius starting on October 26
-# and ending on March 27, 2009 is the most recent one.
-# ...
-# 
+# de l'heure d'été" stating that DST in Mauritius starting on October 26
+# and ending on March 27, 2009 is the most recent one....
 # http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html
-# 
 
 # From Riad M. Hossen Ally (2008-08-03):
 # The Government of Mauritius weblink
-# 
 # http://www.gov.mu/portal/site/pmosite/menuitem.4ca0efdee47462e7440a600248a521ca/?content_id=4728ca68b2a5b110VgnVCM1000000a04a8c0RCRD
-# 
 # Cabinet Decision of July 18th, 2008 states as follows:
 #
 # 4. ...Cabinet has agreed to the introduction into the National Assembly
@@ -646,33 +640,25 @@ Zone Africa/Nouakchott	-1:03:48 -	LMT	1912
 # States of America. It will start at two o'clock in the morning on the
 # last Sunday of October and will end at two o'clock in the morning on
 # the last Sunday of March the following year. The summer time for the
-# year 2008 - 2009 will, therefore, be effective as from 26 October 2008
+# year 2008-2009 will, therefore, be effective as from 26 October 2008
 # and end on 29 March 2009.
 
 # From Ed Maste (2008-10-07):
 # THE TIME BILL (No. XXVII of 2008) Explanatory Memorandum states the
 # beginning / ending of summer time is 2 o'clock standard time in the
 # morning of the last Sunday of October / last Sunday of March.
-# 
 # http://www.gov.mu/portal/goc/assemblysite/file/bill2708.pdf
-# 
 
 # From Steffen Thorsen (2009-06-05):
 # According to several sources, Mauritius will not continue to observe
 # DST the coming summer...
 #
 # Some sources, in French:
-# 
 # http://www.defimedia.info/news/946/Rashid-Beebeejaun-:-%C2%AB-L%E2%80%99heure-d%E2%80%99%C3%A9t%C3%A9-ne-sera-pas-appliqu%C3%A9e-cette-ann%C3%A9e-%C2%BB
-# 
-# 
 # http://lexpress.mu/Story/3398~Beebeejaun---Les-objectifs-d-%C3%A9conomie-d-%C3%A9nergie-de-l-heure-d-%C3%A9t%C3%A9-ont-%C3%A9t%C3%A9-atteints-
-# 
 #
 # Our wrap-up:
-# 
 # http://www.timeanddate.com/news/time/mauritius-dst-will-not-repeat.html
-# 
 
 # From Arthur David Olson (2009-07-11):
 # The "mauritius-dst-will-not-repeat" wrapup includes this:
@@ -685,18 +671,18 @@ Rule Mauritius	1983	only	-	Mar	21	0:00	0	-
 Rule Mauritius	2008	only	-	Oct	lastSun	2:00	1:00	S
 Rule Mauritius	2009	only	-	Mar	lastSun	2:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Indian/Mauritius	3:50:00 -	LMT	1907		# Port Louis
+Zone Indian/Mauritius	3:50:00 -	LMT	1907 # Port Louis
 			4:00 Mauritius	MU%sT	# Mauritius Time
 # Agalega Is, Rodriguez
 # no information; probably like Indian/Mauritius
 
 # Mayotte
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
+Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul # Mamoutzou
 			3:00	-	EAT
 
 # Morocco
-# See the `europe' file for Spanish Morocco (Africa/Ceuta).
+# See the 'europe' file for Spanish Morocco (Africa/Ceuta).
 
 # From Alex Krivenyshev (2008-05-09):
 # Here is an article that Morocco plan to introduce Daylight Saving Time between
@@ -704,60 +690,44 @@ Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
 #
 # "... Morocco is to save energy by adjusting its clock during summer so it will
 # be one hour ahead of GMT between 1 June and 27 September, according to
-# Communication Minister and Gov ernment Spokesman, Khalid Naciri...."
+# Communication Minister and Government Spokesman, Khalid Naciri...."
 #
-# 
 # http://www.worldtimezone.net/dst_news/dst_news_morocco01.html
-# 
-# OR
-# 
 # http://en.afrik.com/news11892.html
-# 
 
 # From Alex Krivenyshev (2008-05-09):
-# The Morocco time change can be confirmed on Morocco web site Maghreb Arabe Presse:
-# 
+# The Morocco time change can be confirmed on Morocco web site Maghreb Arabe
+# Presse:
 # http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view
-# 
 #
 # Morocco shifts to daylight time on June 1st through September 27, Govt.
 # spokesman.
 
 # From Patrice Scattolin (2008-05-09):
 # According to this article:
-# 
 # http://www.avmaroc.com/actualite/heure-dete-comment-a127896.html
-# 
-# (and republished here:
-# 
-# http://www.actu.ma/heure-dete-comment_i127896_0.html
-# 
-# )
-# the changes occurs at midnight:
+# (and republished here: )
+# the changes occur at midnight:
 #
-# saturday night may 31st at midnight (which in french is to be
-# intrepreted as the night between saturday and sunday)
-# sunday night the 28th  at midnight
+# Saturday night May 31st at midnight (which in French is to be
+# interpreted as the night between Saturday and Sunday)
+# Sunday night the 28th at midnight
 #
-# Seeing that the 28th is monday, I am guessing that she intends to say
-# the midnight of the 28th which is the midnight between sunday and
-# monday, which jives with other sources that say that it's inclusive
-# june1st to sept 27th.
+# Seeing that the 28th is Monday, I am guessing that she intends to say
+# the midnight of the 28th which is the midnight between Sunday and
+# Monday, which jives with other sources that say that it's inclusive
+# June 1st to Sept 27th.
 #
 # The decision was taken by decree *2-08-224 *but I can't find the decree
 # published on the web.
 #
 # It's also confirmed here:
-# 
 # http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm
-# 
-# on a government portal as being  between june 1st and sept 27th (not yet
-# posted in english).
+# on a government portal as being between June 1st and Sept 27th (not yet
+# posted in English).
 #
-# The following google query will generate many relevant hits:
-# 
+# The following Google query will generate many relevant hits:
 # http://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search
-# 
 
 # From Steffen Thorsen (2008-08-27):
 # Morocco will change the clocks back on the midnight between August 31
@@ -765,47 +735,32 @@ Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
 # of September:
 #
 # One article about it (in French):
-# 
 # http://www.menara.ma/fr/Actualites/Maroc/Societe/ci.retour_a_l_heure_gmt_a_partir_du_dimanche_31_aout_a_minuit_officiel_.default
-# 
 #
 # We have some further details posted here:
-# 
 # http://www.timeanddate.com/news/time/morocco-ends-dst-early-2008.html
-# 
 
 # From Steffen Thorsen (2009-03-17):
 # Morocco will observe DST from 2009-06-01 00:00 to 2009-08-21 00:00 according
 # to many sources, such as
-# 
 # http://news.marweb.com/morocco/entertainment/morocco-daylight-saving.html
-# 
-# 
 # http://www.medi1sat.ma/fr/depeche.aspx?idp=2312
-# 
 # (French)
 #
 # Our summary:
-# 
 # http://www.timeanddate.com/news/time/morocco-starts-dst-2009.html
-# 
 
 # From Alexander Krivenyshev (2009-03-17):
 # Here is a link to official document from Royaume du Maroc Premier Ministre,
-# Ministere de la Modernisation des Secteurs Publics
+# Ministère de la Modernisation des Secteurs Publics
 #
 # Under Article 1 of Royal Decree No. 455-67 of Act 23 safar 1387 (2 june 1967)
 # concerning the amendment of the legal time, the Ministry of Modernization of
 # Public Sectors announced that the official time in the Kingdom will be
 # advanced 60 minutes from Sunday 31 May 2009 at midnight.
 #
-# 
 # http://www.mmsp.gov.ma/francais/Actualites_fr/PDF_Actualites_Fr/HeureEte_FR.pdf
-# 
-#
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_morocco03.html
-# 
 
 # From Steffen Thorsen (2010-04-13):
 # Several news media in Morocco report that the Ministry of Modernization
@@ -813,51 +768,33 @@ Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
 # 2010-05-02 to 2010-08-08.
 #
 # Example:
-# 
 # http://www.lavieeco.com/actualites/4099-le-maroc-passera-a-l-heure-d-ete-gmt1-le-2-mai.html
-# 
 # (French)
 # Our page:
-# 
 # http://www.timeanddate.com/news/time/morocco-starts-dst-2010.html
-# 
 
 # From Dan Abitol (2011-03-30):
 # ...Rules for Africa/Casablanca are the following (24h format)
-# The 3rd april 2011 at 00:00:00, [it] will be 3rd april 1:00:00
-# The 31th july 2011 at 00:59:59,  [it] will be 31th July 00:00:00
+# The 3rd April 2011 at 00:00:00, [it] will be 3rd April 01:00:00
+# The 31st July 2011 at 00:59:59, [it] will be 31st July 00:00:00
 # ...Official links of change in morocco
 # The change was broadcast on the FM Radio
 # I ve called ANRT (telecom regulations in Morocco) at
 # +212.537.71.84.00
-# 
 # http://www.anrt.net.ma/fr/
-# 
 # They said that
-# 
 # http://www.map.ma/fr/sections/accueil/l_heure_legale_au_ma/view
-# 
 # is the official publication to look at.
 # They said that the decision was already taken.
 #
 # More articles in the press
-# 
-# http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-lev
-# 
-# e.html
-# 
+# http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-leve.html
 # http://www.lematin.ma/Actualite/Express/Article.asp?id=148923
-# 
-# 
 # http://www.lavieeco.com/actualite/Le-Maroc-passe-sur-GMT%2B1-a-partir-de-dim
-# anche-prochain-5538.html
-# 
 
 # From Petr Machata (2011-03-30):
 # They have it written in English here:
-# 
 # http://www.map.ma/eng/sections/home/morocco_to_spring_fo/view
-# 
 #
 # It says there that "Morocco will resume its standard time on July 31,
 # 2011 at midnight." Now they don't say whether they mean midnight of
@@ -865,20 +802,16 @@ Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
 # also been like that in the past.
 
 # From Alexander Krivenyshev (2012-03-09):
-# According to Infomédiaire web site from Morocco (infomediaire.ma),
-# on March 9, 2012, (in French) Heure légale:
-# Le Maroc adopte officiellement l'heure d'été
-# 
+# According to Infomédiaire web site from Morocco (infomediaire.ma),
+# on March 9, 2012, (in French) Heure légale:
+# Le Maroc adopte officiellement l'heure d'été
 # http://www.infomediaire.ma/news/maroc/heure-l%C3%A9gale-le-maroc-adopte-officiellement-lheure-d%C3%A9t%C3%A9
-# 
 # Governing Council adopted draft decree, that Morocco DST starts on
 # the last Sunday of March (March 25, 2012) and ends on
 # last Sunday of September (September 30, 2012)
 # except the month of Ramadan.
 # or (brief)
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_morocco06.html
-# 
 
 # From Arthur David Olson (2012-03-10):
 # The infomediaire.ma source indicates that the system is to be in
@@ -889,17 +822,13 @@ Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
 
 # From Christophe Tropamer (2012-03-16):
 # Seen Morocco change again:
-# 
 # http://www.le2uminutes.com/actualite.php
-# 
-# "...à partir du dernier dimance d'avril et non fins mars,
-# comme annoncé précédemment."
+# "...à partir du dernier dimanche d'avril et non fins mars,
+# comme annoncé précédemment."
 
 # From Milamber Space Network (2012-07-17):
 # The official return to GMT is announced by the Moroccan government:
-# 
 # http://www.mmsp.gov.ma/fr/actualites.aspx?id=288 [in French]
-# 
 #
 # Google translation, lightly edited:
 # Back to the standard time of the Kingdom (GMT)
@@ -917,7 +846,7 @@ Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
 # announced a bit in advance.  On 2012-07-11 the Moroccan government
 # announced that year's Ramadan daylight-saving transitions would be
 # 2012-07-20 and 2012-08-20; see
-# .
+# http://www.mmsp.gov.ma/fr/actualites.aspx?id=288
 
 # From Andrew Paprocki (2013-07-02):
 # Morocco announced that the year's Ramadan daylight-savings
@@ -937,39 +866,36 @@ Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
 # From Sebastien Willemijns (2014-03-18):
 # http://www.afriquinfos.com/articles/2014/3/18/maroc-heure-dete-avancez-tous-horloges-247891.asp
 
-# From Paul Eggert (2014-03-19):
-# To estimate what the Moroccan government will do in future years,
-# transition dates for 2014 through 2038 were determined by running
-# the following program under GNU Emacs 24.3:
-#
-# (let ((islamic-year 1435))
-#   (while (< islamic-year 1461)
-#     (let ((a
-#	     (calendar-gregorian-from-absolute
-#	      (calendar-islamic-to-absolute (list 9 1 islamic-year))))
-#	    (b
-#	     (calendar-gregorian-from-absolute
-#	      (calendar-islamic-to-absolute (list 10 1 islamic-year)))))
-#	(insert
-#	 (format
-#	  (concat "Rule\tMorocco\t%d\tonly\t-\t%s\t %2d\t 3:00\t0\t-\n"
-#		  "Rule\tMorocco\t%d\tonly\t-\t%s\t %2d\t 2:00\t1:00\tS\n")
-#	  (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
-#	  (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
+# From Milamber Space Network (2014-06-05):
+# The Moroccan government has recently announced that the country will return
+# to standard time at 03:00 on Saturday, June 28, 2014 local time....  DST
+# will resume again at 02:00 on Saturday, August 2, 2014....
+# http://www.mmsp.gov.ma/fr/actualites.aspx?id=586
+
+# From Paul Eggert (2014-06-05):
+# For now, guess that later spring and fall transitions will use 2014's rules,
+# and guess that Morocco will switch to standard time at 03:00 the last
+# Saturday before Ramadan, and back to DST at 02:00 the first Saturday after
+# Ramadan.  To implement this, transition dates for 2015 through 2037 were
+# determined by running the following program under GNU Emacs 24.3, with the
+# results integrated by hand into the table below.
+# (let ((islamic-year 1436))
+#   (while (< islamic-year 1460)
+#     (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
+#           (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
+#           (saturday 6))
+#       (while (/= saturday (mod (setq a (1- a)) 7)))
+#       (while (/= saturday (mod b 7))
+#         (setq b (1+ b)))
+#       (setq a (calendar-gregorian-from-absolute a))
+#       (setq b (calendar-gregorian-from-absolute b))
+#       (insert
+#        (format
+#         (concat "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 3:00\t0\t-\n"
+#                 "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 2:00\t1:00\tS\n")
+#         (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
+#         (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
 #     (setq islamic-year (+ 1 islamic-year))))
-#
-# with spring-forward transitions removed for 2023-2025, when the
-# normal spring-forward date falls during the estimated Ramadan; with
-# all transitions removed for 2026-2035, where the estimated Ramadan
-# falls entirely outside daylight-saving time; and with fall-back
-# transitions removed for 2036-2037, where the normal fall-back
-# date falls during the estimated Ramadan.  Normally, the table would
-# stop after 2037 because 32-bit time_t values roll around early in 2038,
-# but that would imply a prediction of perpetual DST after March 2038
-# due to the year-2037 glitches.  So, this table instead stops after
-# 2038, the first non-glitchy year after the 32-bit rollover.
-# An advantage of stopping after 2038 is that it lets zic guess
-# TZ='WET0WEST,M3.5.0,M10.5.0/3' for time stamps far in the future.
 
 # RULE	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 
@@ -991,46 +917,44 @@ Rule	Morocco	1978	only	-	Aug	 4	 0:00	0	-
 Rule	Morocco	2008	only	-	Jun	 1	 0:00	1:00	S
 Rule	Morocco	2008	only	-	Sep	 1	 0:00	0	-
 Rule	Morocco	2009	only	-	Jun	 1	 0:00	1:00	S
-Rule	Morocco	2009	only	-	Aug	 21	 0:00	0	-
+Rule	Morocco	2009	only	-	Aug	21	 0:00	0	-
 Rule	Morocco	2010	only	-	May	 2	 0:00	1:00	S
 Rule	Morocco	2010	only	-	Aug	 8	 0:00	0	-
 Rule	Morocco	2011	only	-	Apr	 3	 0:00	1:00	S
-Rule	Morocco	2011	only	-	Jul	 31	 0	0	-
-Rule	Morocco	2012	2013	-	Apr	 lastSun 2:00	1:00	S
-Rule	Morocco	2012	only	-	Sep	 30	 3:00	0	-
-Rule	Morocco	2012	only	-	Jul	 20	 3:00	0	-
-Rule	Morocco	2012	only	-	Aug	 20	 2:00	1:00	S
-Rule	Morocco	2013	only	-	Jul	  7	 3:00	0	-
-Rule	Morocco	2013	only	-	Aug	 10	 2:00	1:00	S
-Rule	Morocco	2013	2035	-	Oct	 lastSun 3:00	0	-
-Rule	Morocco	2014	2022	-	Mar	 lastSun 2:00	1:00	S
-Rule	Morocco	2014	only	-	Jun	 29	 3:00	0	-
-Rule	Morocco	2014	only	-	Jul	 29	 2:00	1:00	S
-Rule	Morocco	2015	only	-	Jun	 18	 3:00	0	-
-Rule	Morocco	2015	only	-	Jul	 18	 2:00	1:00	S
-Rule	Morocco	2016	only	-	Jun	  7	 3:00	0	-
-Rule	Morocco	2016	only	-	Jul	  7	 2:00	1:00	S
-Rule	Morocco	2017	only	-	May	 27	 3:00	0	-
-Rule	Morocco	2017	only	-	Jun	 26	 2:00	1:00	S
-Rule	Morocco	2018	only	-	May	 16	 3:00	0	-
-Rule	Morocco	2018	only	-	Jun	 15	 2:00	1:00	S
-Rule	Morocco	2019	only	-	May	  6	 3:00	0	-
-Rule	Morocco	2019	only	-	Jun	  5	 2:00	1:00	S
-Rule	Morocco	2020	only	-	Apr	 24	 3:00	0	-
-Rule	Morocco	2020	only	-	May	 24	 2:00	1:00	S
-Rule	Morocco	2021	only	-	Apr	 13	 3:00	0	-
-Rule	Morocco	2021	only	-	May	 13	 2:00	1:00	S
-Rule	Morocco	2022	only	-	Apr	  3	 3:00	0	-
-Rule	Morocco	2022	only	-	May	  3	 2:00	1:00	S
-Rule	Morocco	2023	only	-	Apr	 22	 2:00	1:00	S
-Rule	Morocco	2024	only	-	Apr	 10	 2:00	1:00	S
-Rule	Morocco	2025	only	-	Mar	 31	 2:00	1:00	S
-Rule	Morocco	2026	max	-	Mar	 lastSun 2:00	1:00	S
-Rule	Morocco	2036	only	-	Oct	 21	 3:00	0	-
-Rule	Morocco	2037	only	-	Oct	 11	 3:00	0	-
-Rule	Morocco	2038	only	-	Sep	 30	 3:00	0	-
-Rule	Morocco	2038	only	-	Oct	 30	 2:00	1:00	S
-Rule	Morocco	2038	max	-	Oct	 lastSun 3:00	0	-
+Rule	Morocco	2011	only	-	Jul	31	 0	0	-
+Rule	Morocco	2012	2013	-	Apr	lastSun	 2:00	1:00	S
+Rule	Morocco	2012	only	-	Sep	30	 3:00	0	-
+Rule	Morocco	2012	only	-	Jul	20	 3:00	0	-
+Rule	Morocco	2012	only	-	Aug	20	 2:00	1:00	S
+Rule	Morocco	2013	only	-	Jul	 7	 3:00	0	-
+Rule	Morocco	2013	only	-	Aug	10	 2:00	1:00	S
+Rule	Morocco	2013	max	-	Oct	lastSun	 3:00	0	-
+Rule	Morocco	2014	2022	-	Mar	lastSun	 2:00	1:00	S
+Rule	Morocco	2014	only	-	Jun	28	 3:00	0	-
+Rule	Morocco	2014	only	-	Aug	 2	 2:00	1:00	S
+Rule	Morocco	2015	only	-	Jun	13	 3:00	0	-
+Rule	Morocco	2015	only	-	Jul	18	 2:00	1:00	S
+Rule	Morocco	2016	only	-	Jun	 4	 3:00	0	-
+Rule	Morocco	2016	only	-	Jul	 9	 2:00	1:00	S
+Rule	Morocco	2017	only	-	May	20	 3:00	0	-
+Rule	Morocco	2017	only	-	Jul	 1	 2:00	1:00	S
+Rule	Morocco	2018	only	-	May	12	 3:00	0	-
+Rule	Morocco	2018	only	-	Jun	16	 2:00	1:00	S
+Rule	Morocco	2019	only	-	May	 4	 3:00	0	-
+Rule	Morocco	2019	only	-	Jun	 8	 2:00	1:00	S
+Rule	Morocco	2020	only	-	Apr	18	 3:00	0	-
+Rule	Morocco	2020	only	-	May	30	 2:00	1:00	S
+Rule	Morocco	2021	only	-	Apr	10	 3:00	0	-
+Rule	Morocco	2021	only	-	May	15	 2:00	1:00	S
+Rule	Morocco	2022	only	-	Apr	 2	 3:00	0	-
+Rule	Morocco	2022	only	-	May	 7	 2:00	1:00	S
+Rule	Morocco	2023	only	-	Apr	22	 2:00	1:00	S
+Rule	Morocco	2024	only	-	Apr	13	 2:00	1:00	S
+Rule	Morocco	2025	only	-	Apr	 5	 2:00	1:00	S
+Rule	Morocco	2026	max	-	Mar	lastSun	 2:00	1:00	S
+Rule	Morocco	2035	only	-	Oct	27	 3:00	0	-
+Rule	Morocco	2036	only	-	Oct	18	 3:00	0	-
+Rule	Morocco	2037	only	-	Oct	10	 3:00	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
@@ -1049,11 +973,17 @@ Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
 # Assume that this has been true since Western Sahara switched to GMT,
 # since most of it was then controlled by Morocco.
 
-Zone Africa/El_Aaiun	-0:52:48 -	LMT	1934 Jan
+Zone Africa/El_Aaiun	-0:52:48 -	LMT	1934 Jan # El Aaiún
 			-1:00	-	WAT	1976 Apr 14
 			 0:00	Morocco	WE%sT
 
 # Mozambique
+#
+# Shanks gives 1903-03-01 for the transition to CAT.
+# Perhaps the 1911-05-26 Portuguese decree
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# merely made it official?
+#
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Maputo	2:10:20 -	LMT	1903 Mar
 			2:00	-	CAT
@@ -1062,8 +992,8 @@ Zone	Africa/Maputo	2:10:20 -	LMT	1903 Mar
 # The 1994-04-03 transition is from Shanks & Pottenger.
 # Shanks & Pottenger report no DST after 1998-04; go with IATA.
 
-# From Petronella Sibeene (2007-03-30) in
-# :
+# From Petronella Sibeene (2007-03-30):
+# http://allafrica.com/stories/200703300178.html
 # While the entire country changes its time, Katima Mulilo and other
 # settlements in Caprivi unofficially will not because the sun there
 # rises and sets earlier compared to other regions.  Chief of
@@ -1080,34 +1010,41 @@ Rule	Namibia	1994	max	-	Sep	Sun>=1	2:00	1:00	S
 Rule	Namibia	1995	max	-	Apr	Sun>=1	2:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Windhoek	1:08:24 -	LMT	1892 Feb 8
-			1:30	-	SWAT	1903 Mar	# SW Africa Time
-			2:00	-	SAST	1942 Sep 20 2:00
-			2:00	1:00	SAST	1943 Mar 21 2:00
+			1:30	-	SWAT	1903 Mar    # SW Africa Time
+			2:00	-	SAST	1942 Sep 20  2:00
+			2:00	1:00	SAST	1943 Mar 21  2:00
 			2:00	-	SAST	1990 Mar 21 # independence
 			2:00	-	CAT	1994 Apr  3
 			1:00	Namibia	WA%sT
 
 # Niger
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Niamey	 0:08:28 -	LMT	1912
-			-1:00	-	WAT	1934 Feb 26
-			 0:00	-	GMT	1960
-			 1:00	-	WAT
+# See Africa/Lagos.
 
 # Nigeria
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Lagos	0:13:36 -	LMT	1919 Sep
 			1:00	-	WAT
+Link Africa/Lagos Africa/Bangui	     # Central African Republic
+Link Africa/Lagos Africa/Brazzaville # Rep. of the Congo
+Link Africa/Lagos Africa/Douala	     # Cameroon
+Link Africa/Lagos Africa/Kinshasa    # Dem. Rep. of the Congo (west)
+Link Africa/Lagos Africa/Libreville  # Gabon
+Link Africa/Lagos Africa/Luanda	     # Angola
+Link Africa/Lagos Africa/Malabo	     # Equatorial Guinea
+Link Africa/Lagos Africa/Niamey	     # Niger
+Link Africa/Lagos Africa/Porto-Novo  # Benin
 
-# Reunion
+# Réunion
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Reunion	3:41:52 -	LMT	1911 Jun	# Saint-Denis
-			4:00	-	RET	# Reunion Time
+Zone	Indian/Reunion	3:41:52 -	LMT	1911 Jun # Saint-Denis
+			4:00	-	RET	# Réunion Time
 #
-# Scattered Islands (Iles Eparses) administered from Reunion are as follows.
+# Crozet Islands also observes Réunion time; see the 'antarctica' file.
+#
+# Scattered Islands (Îles Éparses) administered from Réunion are as follows.
 # The following information about them is taken from
-# Iles Eparses (www.outre-mer.gouv.fr/domtom/ile.htm, 1997-07-22, in French;
-# no longer available as of 1999-08-17).
+# Îles Éparses (, 1997-07-22,
+# in French; no longer available as of 1999-08-17).
 # We have no info about their time zone histories.
 #
 # Bassas da India - uninhabited
@@ -1122,32 +1059,21 @@ Zone	Africa/Kigali	2:00:16 -	LMT	1935 Jun
 			2:00	-	CAT
 
 # St Helena
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Atlantic/St_Helena	-0:22:48 -	LMT	1890		# Jamestown
-			-0:22:48 -	JMT	1951	# Jamestown Mean Time
-			 0:00	-	GMT
+# See Africa/Abidjan.
 # The other parts of the St Helena territory are similar:
 #	Tristan da Cunha: on GMT, say Whitman and the CIA
-#	Ascension: on GMT, says usno1995 and the CIA
+#	Ascension: on GMT, say the USNO (1995-12-21) and the CIA
 #	Gough (scientific station since 1955; sealers wintered previously):
 #		on GMT, says the CIA
-#	Inaccessible, Nightingale: no information, but probably GMT
-
-# Sao Tome and Principe
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Sao_Tome	 0:26:56 -	LMT	1884
-			-0:36:32 -	LMT	1912	# Lisbon Mean Time
-			 0:00	-	GMT
+#	Inaccessible, Nightingale: uninhabited
 
+# São Tomé and Príncipe
 # Senegal
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Dakar	-1:09:44 -	LMT	1912
-			-1:00	-	WAT	1941 Jun
-			 0:00	-	GMT
+# See Africa/Abidjan.
 
 # Seychelles
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Mahe	3:41:48 -	LMT	1906 Jun	# Victoria
+Zone	Indian/Mahe	3:41:48 -	LMT	1906 Jun # Victoria
 			4:00	-	SCT	# Seychelles Time
 # From Paul Eggert (2001-05-30):
 # Aldabra, Farquhar, and Desroches, originally dependencies of the
@@ -1157,17 +1083,7 @@ Zone	Indian/Mahe	3:41:48 -	LMT	1906 Jun	# Victoria
 # Possibly the islands were uninhabited.
 
 # Sierra Leone
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-# Whitman gives Mar 31 - Aug 31 for 1931 on; go with Shanks & Pottenger.
-Rule	SL	1935	1942	-	Jun	 1	0:00	0:40	SLST
-Rule	SL	1935	1942	-	Oct	 1	0:00	0	WAT
-Rule	SL	1957	1962	-	Jun	 1	0:00	1:00	SLST
-Rule	SL	1957	1962	-	Sep	 1	0:00	0	GMT
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Freetown	-0:53:00 -	LMT	1882
-			-0:53:00 -	FMT	1913 Jun # Freetown Mean Time
-			-1:00	SL	%s	1957
-			 0:00	SL	%s
+# See Africa/Abidjan.
 
 # Somalia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -1190,9 +1106,9 @@ Zone Africa/Johannesburg 1:52:00 -	LMT	1892 Feb 8
 
 # Sudan
 #
-# From 
-# Sudan News Agency (2000-01-13)
-# , also reported by Michael De Beukelaer-Dossche via Steffen Thorsen:
+# From 
+# Sudan News Agency (2000-01-13),
+# also reported by Michaël De Beukelaer-Dossche via Steffen Thorsen:
 # Clocks will be moved ahead for 60 minutes all over the Sudan as of noon
 # Saturday....  This was announced Thursday by Caretaker State Minister for
 # Manpower Abdul-Rahman Nur-Eddin.
@@ -1223,14 +1139,12 @@ Zone Africa/Dar_es_Salaam 2:37:08 -	LMT	1931
 			3:00	-	EAT
 
 # Togo
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Lome	0:04:52 -	LMT	1893
-			0:00	-	GMT
+# See Africa/Abidjan.
 
 # Tunisia
 
 # From Gwillim Law (2005-04-30):
-# My correspondent, Risto Nykanen, has alerted me to another adoption of DST,
+# My correspondent, Risto Nykänen, has alerted me to another adoption of DST,
 # this time in Tunisia.  According to Yahoo France News
 # , in a story attributed to AP
 # and dated 2005-04-26, "Tunisia has decided to advance its official time by
@@ -1239,8 +1153,8 @@ Zone	Africa/Lome	0:04:52 -	LMT	1893
 # Saturday."  (My translation)
 #
 # From Oscar van Vlijmen (2005-05-02):
-# LaPresse, the first national daily newspaper ...
-# 
+# La Presse, the first national daily newspaper ...
+# http://www.lapresse.tn/archives/archives280405/actualites/lheure.html
 # ... DST for 2005: on: Sun May 1 0h standard time, off: Fri Sept. 30,
 # 1h standard time.
 #
@@ -1253,18 +1167,12 @@ Zone	Africa/Lome	0:04:52 -	LMT	1893
 # From Steffen Thorsen (2009-03-16):
 # According to several news sources, Tunisia will not observe DST this year.
 # (Arabic)
-# 
 # http://www.elbashayer.com/?page=viewn&nid=42546
-# 
-# 
 # http://www.babnet.net/kiwidetail-15295.asp
-# 
 #
 # We have also confirmed this with the US embassy in Tunisia.
 # We have a wrap-up about this on the following page:
-# 
 # http://www.timeanddate.com/news/time/tunisia-cancels-dst-2009.html
-# 
 
 # From Alexander Krivenyshev (2009-03-17):
 # Here is a link to Tunis Afrique Presse News Agency
@@ -1272,20 +1180,17 @@ Zone	Africa/Lome	0:04:52 -	LMT	1893
 # Standard time to be kept the whole year long (tap.info.tn):
 #
 # (in English)
-# 
 # http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=26813&Itemid=157
-# 
 #
 # (in Arabic)
-# 
 # http://www.tap.info.tn/ar/index.php?option=com_content&task=view&id=61240&Itemid=1
-# 
 
-# From Arthur David Olson (2009--3-18):
-# The Tunis Afrique Presse News Agency notice contains this: "This measure is due to the fact
-# that the fasting month of ramadan coincides with the period concerned by summer time.
-# Therefore, the standard time will be kept unchanged the whole year long."
-# So foregoing DST seems to be an exception (albeit one that may be repeated in the  future).
+# From Arthur David Olson (2009-03-18):
+# The Tunis Afrique Presse News Agency notice contains this: "This measure is
+# due to the fact that the fasting month of Ramadan coincides with the period
+# concerned by summer time.  Therefore, the standard time will be kept
+# unchanged the whole year long."  So foregoing DST seems to be an exception
+# (albeit one that may be repeated in the future).
 
 # From Alexander Krivenyshev (2010-03-27):
 # According to some news reports Tunis confirmed not to use DST in 2010
@@ -1297,12 +1202,8 @@ Zone	Africa/Lome	0:04:52 -	LMT	1893
 # coincided with the month of Ramadan..."
 #
 # (in Arabic)
-# 
 # http://www.moheet.com/show_news.aspx?nid=358861&pg=1
-# 
 # http://www.almadenahnews.com/newss/news.php?c=118&id=38036
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_tunis02.html
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -1337,7 +1238,7 @@ Rule	Tunisia	2006	2008	-	Oct	lastSun	 2:00s	0	-
 # Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Tunis	0:40:44 -	LMT	1881 May 12
-			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
+			0:09:21	-	PMT	1911 Mar 11 # Paris Mean Time
 			1:00	Tunisia	CE%sT
 
 # Uganda
diff --git a/jdk/make/data/tzdata/antarctica b/jdk/make/data/tzdata/antarctica
index e31bada94fb..0cdac270861 100644
--- a/jdk/make/data/tzdata/antarctica
+++ b/jdk/make/data/tzdata/antarctica
@@ -21,19 +21,16 @@
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
 # From Paul Eggert (1999-11-15):
 # To keep things manageable, we list only locations occupied year-round; see
-# 
 # COMNAP - Stations and Bases
-# 
+# http://www.comnap.aq/comnap/comnap.nsf/P/Stations/
 # and
-# 
 # Summary of the Peri-Antarctic Islands (1998-07-23)
-# 
+# http://www.spri.cam.ac.uk/bob/periant.htm
 # for information.
 # Unless otherwise specified, we have no time zone information.
 #
@@ -78,19 +75,19 @@ Rule	ChileAQ	2012	max	-	Sep	Sun>=2	4:00u	1:00	S
 
 # Argentina - year-round bases
 # Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
-# Esperanza, San Martin Land, -6323-05659, since 1952-12-17
-# Jubany, Potter Peninsula, King George Island, -6414-0602320, since 1982-01
-# Marambio, Seymour I, -6414-05637, since 1969-10-29
+# Carlini, Potter Cove, King George Island, -6414-0602320, since 1982-01
+# Esperanza, Hope Bay, -6323-05659, since 1952-12-17
+# Marambio, -6414-05637, since 1969-10-29
 # Orcadas, Laurie I, -6016-04444, since 1904-02-22
-# San Martin, Debenham I, -6807-06708, since 1951-03-21
+# San Martín, Barry I, -6808-06706, since 1951-03-21
 #	(except 1960-03 / 1976-03-21)
 
 # Australia - territories
 # Heard Island, McDonald Islands (uninhabited)
 #	previously sealers and scientific personnel wintered
-#	
 #	Margaret Turner reports
-#	 (1999-09-30) that they're UTC+5, with no DST;
+#	http://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html
+#	(1999-09-30) that they're UTC+5, with no DST;
 #	presumably this is when they have visitors.
 #
 # year-round bases
@@ -107,14 +104,10 @@ Rule	ChileAQ	2012	max	-	Sep	Sun>=2	4:00u	1:00	S
 # The changes occurred on 2009-10-18 at 02:00 (local times).
 #
 # Government source: (Australian Antarctic Division)
-# 
 # http://www.aad.gov.au/default.asp?casid=37079
-# 
 #
 # We have more background information here:
-# 
 # http://www.timeanddate.com/news/time/antarctica-new-times.html
-# 
 
 # From Steffen Thorsen (2010-03-10):
 # We got these changes from the Australian Antarctic Division: ...
@@ -129,50 +122,49 @@ Rule	ChileAQ	2012	max	-	Sep	Sun>=2	4:00u	1:00	S
 # - Mawson station stays on UTC+5.
 #
 # Background:
-# 
 # http://www.timeanddate.com/news/time/antartica-time-changes-2010.html
-# 
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Antarctica/Casey	0	-	zzz	1969
-			8:00	-	WST	2009 Oct 18 2:00
-						# Western (Aus) Standard Time
-			11:00	-	CAST	2010 Mar 5 2:00
-						# Casey Time
-			8:00	-	WST	2011 Oct 28 2:00
+			8:00	-	AWST	2009 Oct 18  2:00
+						# Australian Western Std Time
+			11:00	-	CAST	2010 Mar  5  2:00  # Casey Time
+			8:00	-	AWST	2011 Oct 28  2:00
 			11:00	-	CAST	2012 Feb 21 17:00u
-			8:00	-	WST
+			8:00	-	AWST
 Zone Antarctica/Davis	0	-	zzz	1957 Jan 13
-			7:00	-	DAVT	1964 Nov # Davis Time
+			7:00	-	DAVT	1964 Nov    # Davis Time
 			0	-	zzz	1969 Feb
-			7:00	-	DAVT	2009 Oct 18 2:00
+			7:00	-	DAVT	2009 Oct 18  2:00
 			5:00	-	DAVT	2010 Mar 10 20:00u
-			7:00	-	DAVT	2011 Oct 28 2:00
+			7:00	-	DAVT	2011 Oct 28  2:00
 			5:00	-	DAVT	2012 Feb 21 20:00u
 			7:00	-	DAVT
 Zone Antarctica/Mawson	0	-	zzz	1954 Feb 13
-			6:00	-	MAWT	2009 Oct 18 2:00
-						# Mawson Time
+			6:00	-	MAWT	2009 Oct 18  2:00 # Mawson Time
 			5:00	-	MAWT
 # References:
-# 
 # Casey Weather (1998-02-26)
-# 
-# 
+# http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html
 # Davis Station, Antarctica (1998-02-26)
-# 
-# 
+# http://www.antdiv.gov.au/aad/exop/sfo/davis/video.html
 # Mawson Station, Antarctica (1998-02-25)
-# 
+# http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html
+
+# Belgium - year-round base
+# Princess Elisabeth, Queen Maud Land, -713412+0231200, since 2007
 
 # Brazil - year-round base
-# Comandante Ferraz, King George Island, -6205+05824, since 1983/4
+# Ferraz, King George Island, -6205+05824, since 1983/4
+
+# Bulgaria - year-round base
+# St. Kliment Ohridski, Livingston Island, -623829-0602153, since 1988
 
 # Chile - year-round bases and towns
 # Escudero, South Shetland Is, -621157-0585735, since 1994
-# Presidente Eduadro Frei, King George Island, -6214-05848, since 1969-03-07
-# General Bernardo O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
-# Capitan Arturo Prat, -6230-05941
+# Frei Montalva, King George Island, -6214-05848, since 1969-03-07
+# O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
+# Prat, -6230-05941
 # Villa Las Estrellas (a town), around the Frei base, since 1984-04-09
 # These locations have always used Santiago time; use TZ='America/Santiago'.
 
@@ -180,31 +172,35 @@ Zone Antarctica/Mawson	0	-	zzz	1954 Feb 13
 # Great Wall, King George Island, -6213-05858, since 1985-02-20
 # Zhongshan, Larsemann Hills, Prydz Bay, -6922+07623, since 1989-02-26
 
-# France - year-round bases
+# France - year-round bases (also see "France & Italy")
 #
 # From Antoine Leca (1997-01-20):
-# Time data are from Nicole Pailleau at the IFRTP
+# Time data entries are from Nicole Pailleau at the IFRTP
 # (French Institute for Polar Research and Technology).
-# She confirms that French Southern Territories and Terre Adelie bases
-# don't observe daylight saving time, even if Terre Adelie supplies came
+# She confirms that French Southern Territories and Terre Adélie bases
+# don't observe daylight saving time, even if Terre Adélie supplies came
 # from Tasmania.
 #
 # French Southern Territories with year-round inhabitants
 #
-# Martin-de-Vivies Base, Amsterdam Island, -374105+0773155, since 1950
-# Alfred-Faure Base, Crozet Islands, -462551+0515152, since 1964
-# Port-aux-Francais, Kerguelen Islands, -492110+0701303, since 1951;
+# Alfred Faure, Possession Island, Crozet Islands, -462551+0515152, since 1964;
+#	sealing & whaling stations operated variously 1802/1911+;
+#	see Indian/Reunion.
+#
+# Martin-de-Viviès, Amsterdam Island, -374105+0773155, since 1950
+# Port-aux-Français, Kerguelen Islands, -492110+0701303, since 1951;
 #	whaling & sealing station operated 1908/1914, 1920/1929, and 1951/1956
 #
 # St Paul Island - near Amsterdam, uninhabited
 #	fishing stations operated variously 1819/1931
 #
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Indian/Kerguelen	0	-	zzz	1950	# Port-aux-Francais
+Zone Indian/Kerguelen	0	-	zzz	1950 # Port-aux-Français
 			5:00	-	TFT	# ISO code TF Time
 #
 # year-round base in the main continent
-# Dumont-d'Urville, Ile des Petrels, -6640+14001, since 1956-11
+# Dumont d'Urville, Île des Pétrels, -6640+14001, since 1956-11
+#  (2005-12-05)
 #
 # Another base at Port-Martin, 50km east, began operation in 1947.
 # It was destroyed by fire on 1952-01-14.
@@ -214,20 +210,22 @@ Zone Antarctica/DumontDUrville 0 -	zzz	1947
 			10:00	-	PMT	1952 Jan 14 # Port-Martin Time
 			0	-	zzz	1956 Nov
 			10:00	-	DDUT	# Dumont-d'Urville Time
-# Reference:
-# 
-# Dumont d'Urville Station (2005-12-05)
-# 
+
+# France & Italy - year-round base
+# Concordia, -750600+1232000, since 2005
 
 # Germany - year-round base
-# Georg von Neumayer, -7039-00815
+# Neumayer III, -704080-0081602, since 2009
 
-# India - year-round base
-# Dakshin Gangotri, -7005+01200
+# India - year-round bases
+# Bharati, -692428+0761114, since 2012
+# Maitri, -704558+0114356, since 1989
+
+# Italy - year-round base (also see "France & Italy")
+# Zuchelli, Terra Nova Bay, -744140+1640647, since 1986
 
 # Japan - year-round bases
-# Dome Fuji, -7719+03942
-# Syowa, -690022+0393524
+# Syowa (also known as Showa), -690022+0393524, since 1957
 #
 # From Hideyuki Suzuki (1999-02-06):
 # In all Japanese stations, +0300 is used as the standard time.
@@ -239,11 +237,11 @@ Zone Antarctica/DumontDUrville 0 -	zzz	1947
 Zone Antarctica/Syowa	0	-	zzz	1957 Jan 29
 			3:00	-	SYOT	# Syowa Time
 # See:
-# 
 # NIPR Antarctic Research Activities (1999-08-17)
-# 
+# http://www.nipr.ac.jp/english/ara01.html
 
 # S Korea - year-round base
+# Jang Bogo, Terra Nova Bay, -743700+1641205 since 2014
 # King Sejong, King George Island, -6213-05847, since 1988
 
 # New Zealand - claims
@@ -287,11 +285,14 @@ Rule	Troll	2005	max	-	Mar	lastSun	1:00u	2:00	CEST
 Rule	Troll	2004	max	-	Oct	lastSun	1:00u	0:00	UTC
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Antarctica/Troll	0	-	zzz	2005 Feb 12
-     			0:00	Troll	%s
+			0:00	Troll	%s
 
 # Poland - year-round base
 # Arctowski, King George Island, -620945-0582745, since 1977
 
+# Romania - year-bound base
+# Law-Racoviță, Larsemann Hills, -692319+0762251, since 1986
+
 # Russia - year-round bases
 # Bellingshausen, King George Island, -621159-0585337, since 1968-02-22
 # Mirny, Davis coast, -6633+09301, since 1956-02
@@ -301,8 +302,8 @@ Zone Antarctica/Troll	0	-	zzz	2005 Feb 12
 #	year-round from 1960/61 to 1992
 
 # Vostok, since 1957-12-16, temporarily closed 1994-02/1994-11
-# 
-# From Craig Mundell (1994-12-15):
+# From Craig Mundell (1994-12-15):
+# http://quest.arc.nasa.gov/antarctica/QA/computers/Directions,Time,ZIP
 # Vostok, which is one of the Russian stations, is set on the same
 # time as Moscow, Russia.
 #
@@ -317,7 +318,7 @@ Zone Antarctica/Troll	0	-	zzz	2005 Feb 12
 #
 # From Paul Eggert (2001-05-04):
 # This seems to be hopelessly confusing, so I asked Lee Hotz about it
-# in person.  He said that some Antartic locations set their local
+# in person.  He said that some Antarctic locations set their local
 # time so that noon is the warmest part of the day, and that this
 # changes during the year and does not necessarily correspond to mean
 # solar noon.  So the Vostok time might have been whatever the clocks
@@ -329,9 +330,12 @@ Zone Antarctica/Vostok	0	-	zzz	1957 Dec 16
 
 # S Africa - year-round bases
 # Marion Island, -4653+03752
-# Sanae, -7141-00250
+# SANAE IV, Vesleskarvet, Queen Maud Land, -714022-0025026, since 1997
 
-# UK
+# Ukraine - year-round base
+# Vernadsky (formerly Faraday), Galindez Island, -651445-0641526, since 1954
+
+# United Kingdom
 #
 # British Antarctic Territories (BAT) claims
 # South Orkney Islands
@@ -387,7 +391,7 @@ Zone Antarctica/Palmer	0	-	zzz	1965
 # but that he found it more convenient to keep GMT+12
 # as supplies for the station were coming from McMurdo Sound,
 # which was on GMT+12 because New Zealand was on GMT+12 all year
-# at that time (1957).  (Source: Siple's book 90 degrees SOUTH.)
+# at that time (1957).  (Source: Siple's book 90 Degrees South.)
 #
 # From Susan Smith
 # http://www.cybertours.com/whs/pole10.html
diff --git a/jdk/make/data/tzdata/asia b/jdk/make/data/tzdata/asia
index 595c8ed7245..906c0a97cda 100644
--- a/jdk/make/data/tzdata/asia
+++ b/jdk/make/data/tzdata/asia
@@ -21,13 +21,13 @@
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future).  For more, please see
+# the file CONTRIBUTING in the tz distribution.
 
 # From Paul Eggert (2013-08-11):
 #
@@ -49,13 +49,17 @@
 # I found in the UCLA library.
 #
 # For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
-# .
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
+# http://www.jstor.org/stable/1774359
+#
+# For Russian data circa 1919, a source is:
+# Byalokoz EL. New Counting of Time in Russia since July 1, 1919.
+# (See the 'europe' file for a fuller citation.)
 #
 # A reliable and entertaining source about time zones is
 # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
 #
-# I invented the abbreviations marked `*' in the following table;
+# I invented the abbreviations marked '*' in the following table;
 # the rest are from earlier versions of this file, or from other sources.
 # Corrections are welcome!
 #	     std  dst
@@ -70,13 +74,14 @@
 #	7:00 WIB	west Indonesia (Waktu Indonesia Barat)
 #	8:00 WITA	central Indonesia (Waktu Indonesia Tengah)
 #	8:00 CST	China
-#	9:00 CJT	Central Japanese Time (1896/1937)*
+#	8:00 JWST	Western Standard Time (Japan, 1896/1937)*
+#	9:00 JCST	Central Standard Time (Japan, 1896/1937)
 #	9:00 WIT	east Indonesia (Waktu Indonesia Timur)
 #	9:00 JST  JDT	Japan
 #	9:00 KST  KDT	Korea
-#	9:30 CST	(Australian) Central Standard Time
+#	9:30 ACST	Australian Central Standard Time
 #
-# See the `europe' file for Russia and Turkey in Asia.
+# See the 'europe' file for Russia and Turkey in Asia.
 
 # From Guy Harris:
 # Incorporates data for Singapore from Robert Elz' asia 1.1, as well as
@@ -86,7 +91,7 @@
 
 ###############################################################################
 
-# These rules are stolen from the `europe' file.
+# These rules are stolen from the 'europe' file.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	EUAsia	1981	max	-	Mar	lastSun	 1:00u	1:00	S
 Rule	EUAsia	1979	1995	-	Sep	lastSun	 1:00u	0	-
@@ -138,11 +143,11 @@ Zone	Asia/Kabul	4:36:48 -	LMT	1890
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Yerevan	2:58:00 -	LMT	1924 May  2
 			3:00	-	YERT	1957 Mar    # Yerevan Time
-			4:00 RussiaAsia YER%sT	1991 Mar 31 2:00s
+			4:00 RussiaAsia YER%sT	1991 Mar 31  2:00s
 			3:00	1:00	YERST	1991 Sep 23 # independence
-			3:00 RussiaAsia	AM%sT	1995 Sep 24 2:00s
+			3:00 RussiaAsia	AM%sT	1995 Sep 24  2:00s
 			4:00	-	AMT	1997
-			4:00 RussiaAsia	AM%sT	2012 Mar 25 2:00s
+			4:00 RussiaAsia	AM%sT	2012 Mar 25  2:00s
 			4:00	-	AMT
 
 # Azerbaijan
@@ -155,16 +160,16 @@ Rule	Azer	1997	max	-	Oct	lastSun	 5:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Baku	3:19:24 -	LMT	1924 May  2
 			3:00	-	BAKT	1957 Mar    # Baku Time
-			4:00 RussiaAsia BAK%sT	1991 Mar 31 2:00s
+			4:00 RussiaAsia BAK%sT	1991 Mar 31  2:00s
 			3:00	1:00	BAKST	1991 Aug 30 # independence
 			3:00 RussiaAsia	AZ%sT	1992 Sep lastSat 23:00
-			4:00	-	AZT	1996 # Azerbaijan time
+			4:00	-	AZT	1996     # Azerbaijan Time
 			4:00	EUAsia	AZ%sT	1997
 			4:00	Azer	AZ%sT
 
 # Bahrain
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Bahrain	3:22:20 -	LMT	1920		# Al Manamah
+Zone	Asia/Bahrain	3:22:20 -	LMT	1920     # Manamah
 			4:00	-	GST	1972 Jun
 			3:00	-	AST
 
@@ -174,13 +179,8 @@ Zone	Asia/Bahrain	3:22:20 -	LMT	1920		# Al Manamah
 # Daylight Saving Time from June 16 to Sept 30
 #
 # Bangladesh to introduce daylight saving time likely from June 16
-# 
 # http://www.asiantribune.com/?q=node/17288
-# 
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_bangladesh02.html
-# 
 #
 # "... Bangladesh government has decided to switch daylight saving time from
 # June
@@ -195,17 +195,11 @@ Zone	Asia/Bahrain	3:22:20 -	LMT	1920		# Al Manamah
 # the 19th and 20th, and they have not set the end date yet.
 #
 # Some sources:
-# 
 # http://in.reuters.com/article/southAsiaNews/idINIndia-40017620090601
-# 
-# 
 # http://bdnews24.com/details.php?id=85889&cid=2
-# 
 #
 # Our wrap-up:
-# 
 # http://www.timeanddate.com/news/time/bangladesh-daylight-saving-2009.html
-# 
 
 # From A. N. M. Kamrus Saadat (2009-06-15):
 # Finally we've got the official mail regarding DST start time where DST start
@@ -220,13 +214,8 @@ Zone	Asia/Bahrain	3:22:20 -	LMT	1920		# Al Manamah
 #
 # Following report by same newspaper-"The Daily Star Friday":
 # "DST change awaits cabinet decision-Clock won't go back by 1-hr from Oct 1"
-# 
 # http://www.thedailystar.net/newDesign/news-details.php?nid=107021
-# 
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_bangladesh04.html
-# 
 
 # From Steffen Thorsen (2009-10-13):
 # IANS (Indo-Asian News Service) now reports:
@@ -235,22 +224,15 @@ Zone	Asia/Bahrain	3:22:20 -	LMT	1920		# Al Manamah
 # "continue for an indefinite period."
 #
 # One of many places where it is published:
-# 
 # http://www.thaindian.com/newsportal/business/bangladesh-to-continue-indefinitely-with-advanced-time_100259987.html
-# 
 
 # From Alexander Krivenyshev (2009-12-24):
 # According to Bangladesh newspaper "The Daily Star,"
 # Bangladesh will change its clock back to Standard Time on Dec 31, 2009.
 #
 # Clock goes back 1-hr on Dec 31 night.
-# 
 # http://www.thedailystar.net/newDesign/news-details.php?nid=119228
-# 
-# and
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_bangladesh05.html
-# 
 #
 # "...The government yesterday decided to put the clock back by one hour
 # on December 31 midnight and the new time will continue until March 31,
@@ -260,17 +242,12 @@ Zone	Asia/Bahrain	3:22:20 -	LMT	1920		# Al Manamah
 # From Alexander Krivenyshev (2010-03-22):
 # According to Bangladesh newspaper "The Daily Star,"
 # Cabinet cancels Daylight Saving Time
-# 
 # http://www.thedailystar.net/newDesign/latest_news.php?nid=22817
-# 
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html
-# 
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Dhaka	2009	only	-	Jun	19	23:00	1:00	S
-Rule	Dhaka	2009	only	-	Dec	31	23:59	0	-
+Rule	Dhaka	2009	only	-	Dec	31	24:00	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Dhaka	6:01:40 -	LMT	1890
@@ -301,7 +278,7 @@ Zone	Indian/Chagos	4:49:40	-	LMT	1907
 
 # Brunei
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Brunei	7:39:40 -	LMT	1926 Mar   # Bandar Seri Begawan
+Zone	Asia/Brunei	7:39:40 -	LMT	1926 Mar # Bandar Seri Begawan
 			7:30	-	BNT	1933
 			8:00	-	BNT
 
@@ -310,16 +287,16 @@ Zone	Asia/Brunei	7:39:40 -	LMT	1926 Mar   # Bandar Seri Begawan
 # Milne says 6:24:40 was the meridian of the time ball observatory at Rangoon.
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Rangoon	6:24:40 -	LMT	1880		# or Yangon
-			6:24:40	-	RMT	1920	   # Rangoon Mean Time?
-			6:30	-	BURT	1942 May   # Burma Time
-			9:00	-	JST	1945 May 3
-			6:30	-	MMT		   # Myanmar Time
+Zone	Asia/Rangoon	6:24:40 -	LMT	1880        # or Yangon
+			6:24:40	-	RMT	1920        # Rangoon Mean Time?
+			6:30	-	BURT	1942 May    # Burma Time
+			9:00	-	JST	1945 May  3
+			6:30	-	MMT	# Myanmar Time
 
 # Cambodia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Phnom_Penh	6:59:40 -	LMT	1906 Jun  9
-			7:06:20	-	SMT	1911 Mar 11 0:01 # Saigon MT?
+			7:06:20	-	SMT	1911 Mar 11  0:01 # Saigon MT?
 			7:00	-	ICT	1912 May
 			8:00	-	ICT	1931 May
 			7:00	-	ICT
@@ -332,12 +309,12 @@ Zone	Asia/Phnom_Penh	6:59:40 -	LMT	1906 Jun  9
 # From Bob Devine (1988-01-28):
 # No they don't.  See TIME mag, 1986-02-17 p.52.  Even though
 # China is across 4 physical time zones, before Feb 1, 1986 only the
-# Peking (Bejing) time zone was recognized.  Since that date, China
-# has two of 'em -- Peking's and Urumqi (named after the capital of
+# Peking (Beijing) time zone was recognized.  Since that date, China
+# has two of 'em - Peking's and Ürümqi (named after the capital of
 # the Xinjiang Uyghur Autonomous Region).  I don't know about DST for it.
 #
 # . . .I just deleted the DST table and this editor makes it too
-# painful to suck in another copy..  So, here is what I have for
+# painful to suck in another copy.  So, here is what I have for
 # DST start/end dates for Peking's time zone (info from AP):
 #
 #     1986 May 4 - Sept 14
@@ -347,15 +324,16 @@ Zone	Asia/Phnom_Penh	6:59:40 -	LMT	1906 Jun  9
 # CHINA               8 H  AHEAD OF UTC  ALL OF CHINA, INCL TAIWAN
 # CHINA               9 H  AHEAD OF UTC  APR 17 - SEP 10
 
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that China (except for Hong Kong and Macau)
-# has had a single time zone since 1980 May 1, observing summer DST
-# from 1986 through 1991; this contradicts Devine's
-# note about Time magazine, though apparently _something_ happened in 1986.
-# Go with Shanks & Pottenger for now.  I made up names for the other
-# pre-1980 time zones.
+# From Paul Eggert (2008-02-11):
+# Jim Mann, "A clumsy embrace for another western custom: China on daylight
+# time - sort of", Los Angeles Times, 1986-05-05 ... [says] that China began
+# observing daylight saving time in 1986.
 
-# From Shanks & Pottenger:
+# From Paul Eggert (2014-06-30):
+# Shanks & Pottenger have China switching to a single time zone in 1980, but
+# this doesn't seem to be correct.  They also write that China observed summer
+# DST from 1986 through 1991, which seems to match the above commentary, so
+# go with them for DST rules as follows:
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Shang	1940	only	-	Jun	 3	0:00	1:00	D
 Rule	Shang	1940	1941	-	Oct	 1	0:00	0	S
@@ -369,7 +347,7 @@ Rule	PRC	1987	1991	-	Apr	Sun>=10	0:00	1:00	D
 # historic timezones from some Taiwan websites.  And yes, there are official
 # Chinese names for these locales (before 1949).
 #
-# From Jesper Norgaard Welen (2006-07-14):
+# From Jesper Nørgaard Welen (2006-07-14):
 # I have investigated the timezones around 1970 on the
 # http://www.astro.com/atlas site [with provinces and county
 # boundaries summarized below]....  A few other exceptions were two
@@ -380,65 +358,97 @@ Rule	PRC	1987	1991	-	Apr	Sun>=10	0:00	1:00	D
 # (could be true), for the moment I am assuming that those two
 # counties are mistakes in the astro.com data.
 
-# From Paul Eggert (2008-02-11):
-# I just now checked Google News for western news sources that talk
-# about China's single time zone, and couldn't find anything before 1986
-# talking about China being in one time zone.  (That article was: Jim
-# Mann, "A clumsy embrace for another western custom: China on daylight
-# time--sort of", Los Angeles Times, 1986-05-05.  By the way, this
-# article confirms the tz database's data claiming that China began
-# observing daylight saving time in 1986.
+# From Paul Eggert (2014-06-30):
+# Alois Treindl kindly sent me translations of the following two sources:
 #
-# From Thomas S. Mullaney (2008-02-11):
-# I think you're combining two subjects that need to treated
-# separately: daylight savings (which, you're correct, wasn't
-# implemented until the 1980s) and the unified time zone centered near
-# Beijing (which was implemented in 1949). Briefly, there was also a
-# "Lhasa Time" in Tibet and "Urumqi Time" in Xinjiang. The first was
-# ceased, and the second eventually recognized (again, in the 1980s).
+# (1)
+# Guo Qingsheng (National Time-Service Center, CAS, Xi'an 710600, China)
+# Beijing Time at the Beginning of the PRC
+# China Historical Materials of Science and Technology
+# (Zhongguo ke ji shi liao, 中国科技史料), Vol. 24, No. 1 (2003)
+# It gives evidence that at the beginning of the PRC, Beijing time was
+# officially apparent solar time!  However, Guo also says that the
+# evidence is dubious, as the relevant institute of astronomy had not
+# been taken over by the PRC yet.  It's plausible that apparent solar
+# time was announced but never implemented, and that people continued
+# to use UT+8.  As the Shanghai radio station (and I presume the
+# observatory) was still under control of French missionaries, it
+# could well have ignored any such mandate.
 #
-# From Paul Eggert (2008-06-30):
-# There seems to be a good chance China switched to a single time zone in 1949
-# rather than in 1980 as Shanks & Pottenger have it, but we don't have a
-# reliable documentary source saying so yet, so for now we still go with
-# Shanks & Pottenger.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-# Changbai Time ("Long-white Time", Long-white = Heilongjiang area)
+# (2)
+# Guo Qing-sheng (Shaanxi Astronomical Observatory, CAS, Xi'an 710600, China)
+# A Study on the Standard Time Changes for the Past 100 Years in China
+# [undated and unknown publication location]
+# It says several things:
+#   * The Qing dynasty used local apparent solar time throughout China.
+#   * The Republic of China instituted Beijing mean solar time effective
+#     the official calendar book of 1914.
+#   * The French Concession in Shanghai set up signal stations in
+#     French docks in the 1890s, controlled by Xujiahui (Zikawei)
+#     Observatory and set to local mean time.
+#   * "From the end of the 19th century" it changed to UT+8.
+#   * Chinese Customs (by then reduced to a tool of foreign powers)
+#     eventually standardized on this time for all ports, and it
+#     became used by railways as well.
+#   * In 1918 the Central Observatory proposed dividing China into
+#     five time zones (see below for details).  This caught on
+#     at first only in coastal areas observing UT+8.
+#   * During WWII all of China was in theory was at UT+7.  In practice
+#     this was ignored in the west, and I presume was ignored in
+#     Japanese-occupied territory.
+#   * Japanese-occupied Manchuria was at UT+9, i.e., Japan time.
+#   * The five-zone plan was resurrected after WWII and officially put into
+#     place (with some modifications) in March 1948.  It's not clear
+#     how well it was observed in areas under Nationalist control.
+#   * The People's Liberation Army used UT+8 during the civil war.
+#
+# An AP article "Shanghai Internat'l Area Little Changed" in the
+# Lewiston (ME) Daily Sun (1939-05-29), p 17, said "Even the time is
+# different - the occupied districts going by Tokyo time, an hour
+# ahead of that prevailing in the rest of Shanghai."  Guess that the
+# Xujiahui Observatory was under French control and stuck with UT+8.
+#
+# In earlier versions of this file, China had many separate Zone entries, but
+# this was based on what were apparently incorrect data in Shanks & Pottenger.
+# This has now been simplified to the two entries Asia/Shanghai and
+# Asia/Urumqi, with the others being links for backward compatibility.
+# Proposed in 1918 and theoretically in effect until 1949 (although in practice
+# mainly observed in coastal areas), the five zones were:
+#
+# Changbai Time ("Long-white Time", Long-white = Heilongjiang area) UT+8.5
+# Asia/Harbin (currently a link to Asia/Shanghai)
 # Heilongjiang (except Mohe county), Jilin
-Zone	Asia/Harbin	8:26:44	-	LMT	1928 # or Haerbin
-			8:30	-	CHAT	1932 Mar # Changbai Time
-			8:00	-	CST	1940
-			9:00	-	CHAT	1966 May
-			8:30	-	CHAT	1980 May
-			8:00	PRC	C%sT
-# Zhongyuan Time ("Central plain Time")
+#
+# Zhongyuan Time ("Central plain Time") UT+8
+# Asia/Shanghai
 # most of China
-# Milne gives 8:05:56.7; round to nearest.
-Zone	Asia/Shanghai	8:05:57	-	LMT	1928
-			8:00	Shang	C%sT	1949
-			8:00	PRC	C%sT
-# Long-shu Time (probably due to Long and Shu being two names of that area)
+# This currently represents most other zones as well,
+# as apparently these regions have been the same since 1970.
+# Milne gives 8:05:43.2 for Xujiahui Observatory time; round to nearest.
+# Guo says Shanghai switched to UT+8 "from the end of the 19th century".
+#
+# Long-shu Time (probably due to Long and Shu being two names of that area) UT+7
+# Asia/Chongqing (currently a link to Asia/Shanghai)
 # Guangxi, Guizhou, Hainan, Ningxia, Sichuan, Shaanxi, and Yunnan;
 # most of Gansu; west Inner Mongolia; west Qinghai; and the Guangdong
 # counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing,
 # Yangchun, Yangjiang, Yu'nan, and Yunfu.
-Zone	Asia/Chongqing	7:06:20	-	LMT	1928 # or Chungking
-			7:00	-	LONT	1980 May # Long-shu Time
-			8:00	PRC	C%sT
-# Xin-zang Time ("Xinjiang-Tibet Time")
+#
+# Xin-zang Time ("Xinjiang-Tibet Time") UT+6
+# Asia/Urumqi
+# This currently represents Kunlun Time as well,
+# as apparently the two regions have been the same since 1970.
 # The Gansu counties Aksay, Anxi, Dunhuang, Subei; west Qinghai;
 # the Guangdong counties  Xuwen, Haikang, Suixi, Lianjiang,
 # Zhanjiang, Wuchuan, Huazhou, Gaozhou, Maoming, Dianbai, and Xinyi;
 # east Tibet, including Lhasa, Chamdo, Shigaise, Jimsar, Shawan and Hutubi;
-# east Xinjiang, including Urumqi, Turpan, Karamay, Korla, Minfeng, Jinghe,
+# east Xinjiang, including Ürümqi, Turpan, Karamay, Korla, Minfeng, Jinghe,
 # Wusu, Qiemo, Xinyan, Wulanwusu, Jinghe, Yumin, Tacheng, Tuoli, Emin,
 # Shihezi, Changji, Yanqi, Heshuo, Tuokexun, Tulufan, Shanshan, Hami,
 # Fukang, Kuitun, Kumukuli, Miquan, Qitai, and Turfan.
-Zone	Asia/Urumqi	5:50:20	-	LMT	1928 # or Urumchi
-			6:00	-	URUT	1980 May # Urumqi Time
-			8:00	PRC	C%sT
-# Kunlun Time
+#
+# Kunlun Time UT+5.5
+# Asia/Kashgar (currently a link to Asia/Urumqi)
 # West Tibet, including Pulan, Aheqi, Shufu, Shule;
 # West Xinjiang, including Aksu, Atushi, Yining, Hetian, Cele, Luopu, Nileke,
 # Zhaosu, Tekesi, Gongliu, Chabuchaer, Huocheng, Bole, Pishan, Suiding,
@@ -455,9 +465,9 @@ Zone	Asia/Urumqi	5:50:20	-	LMT	1928 # or Urumchi
 # population of Xinjiang, typically use "Xinjiang time" which is two
 # hours behind Beijing time, or UTC +0600. The government of the Xinjiang
 # Uyghur Autonomous Region, (XAUR, or just Xinjiang for short) as well as
-# local governments such as the Urumqi city government use both times in
+# local governments such as the Ürümqi city government use both times in
 # publications, referring to what is popularly called Xinjiang time as
-# "Urumqi time." When Uyghurs make an appointment in the Uyghur language
+# "Ürümqi time." When Uyghurs make an appointment in the Uyghur language
 # they almost invariably use Xinjiang time.
 #
 # (Their ethnic Han compatriots would typically have no clue of its
@@ -469,21 +479,6 @@ Zone	Asia/Urumqi	5:50:20	-	LMT	1928 # or Urumchi
 # the province not having dual times but four times in use at the same
 # time. Some areas remained on standard Xinjiang time or Beijing time and
 # others moving their clocks ahead.)
-#
-# ...an example of an official website using of Urumqi time.
-#
-# The first few lines of the Google translation of
-# 
-# http://www.fjysgl.gov.cn/show.aspx?id=2379&cid=39
-# 
-# (retrieved 2009-10-13)
-# > Urumqi fire seven people are missing the alleged losses of at least
-# > 500 million yuan
-# >
-# > (Reporter Dong Liu) the day before 20:20 or so (Urumqi Time 18:20),
-# > Urumqi City Department of International Plaza Luther Qiantang River
-# > burst fire. As of yesterday, 18:30, Urumqi City Fire officers and men
-# > have worked continuously for 22 hours...
 
 # From Luther Ma (2009-11-19):
 # With the risk of being redundant to previous answers these are the most common
@@ -494,7 +489,7 @@ Zone	Asia/Urumqi	5:50:20	-	LMT	1928 # or Urumchi
 # 3. Urumqi...
 # 4. Kashgar...
 # ...
-# 5. It seems that Uyghurs in Urumqi has been using Xinjiang since at least the
+# 5. It seems that Uyghurs in Ürümqi has been using Xinjiang since at least the
 # 1960's. I know of one Han, now over 50, who grew up in the surrounding
 # countryside and used Xinjiang time as a child.
 #
@@ -506,10 +501,55 @@ Zone	Asia/Urumqi	5:50:20	-	LMT	1928 # or Urumchi
 # Autonomous Region under the PRC. (Before that Uyghurs, of course, would also
 # not be using Beijing time, but some local time.)
 
-Zone	Asia/Kashgar	5:03:56	-	LMT	1928 # or Kashi or Kaxgar
-			5:30	-	KAST	1940	 # Kashgar Time
-			5:00	-	KAST	1980 May
+# From David Cochrane (2014-03-26):
+# Just a confirmation that Ürümqi time was implemented in Ürümqi on 1 Feb 1986:
+# http://content.time.com/time/magazine/article/0,9171,960684,00.html
+
+# From Luther Ma (2014-04-22):
+# I have interviewed numerous people of various nationalities and from
+# different localities in Xinjiang and can confirm the information in Guo's
+# report regarding Xinjiang, as well as the Time article reference by David
+# Cochrane.  Whether officially recognized or not (and both are officially
+# recognized), two separate times have been in use in Xinjiang since at least
+# the Cultural Revolution: Xinjiang Time (XJT), aka Ürümqi Time or local time;
+# and Beijing Time.  There is no confusion in Xinjiang as to which name refers
+# to which time. Both are widely used in the province, although in some
+# population groups might be use one to the exclusion of the other.  The only
+# problem is that computers and smart phones list Ürümqi (or Kashgar) as
+# having the same time as Beijing.
+
+# From Paul Eggert (2014-06-30):
+# In the early days of the PRC, Tibet was given its own time zone (UT+6) but
+# this was withdrawn in 1959 and never reinstated; see Tubten Khétsun,
+# Memories of life in Lhasa under Chinese Rule, Columbia U Press, ISBN
+# 978-0231142861 (2008), translator's introduction by Matthew Akester, p x.
+# As this is before our 1970 cutoff, Tibet doesn't need a separate zone.
+#
+# Xinjiang Time is well-documented as being officially recognized.  E.g., see
+# "The Working-Calendar for The Xinjiang Uygur Autonomous Region Government"
+#  (2014-04-22).
+# Unfortunately, we have no good records of time in Xinjiang before 1986.
+# During the 20th century parts of Xinjiang were ruled by the Qing dynasty,
+# the Republic of China, various warlords, the First and Second East Turkestan
+# Republics, the Soviet Union, the Kuomintang, and the People's Republic of
+# China, and tracking down all these organizations' timekeeping rules would be
+# quite a trick.  Approximate this lost history by a transition from LMT to
+# XJT at the start of 1928, the year of accession of the warlord Jin Shuren,
+# which happens to be the date given by Shanks & Pottenger (no doubt as a
+# guess) as the transition from LMT.  Ignore the usage of UT+8 before
+# 1986-02-01 under the theory that the transition date to UT+8 is unknown and
+# that the sort of users who prefer Asia/Urumqi now typically ignored the
+# UT+8 mandate back then.
+
+# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Beijing time, used throughout China; represented by Shanghai.
+Zone	Asia/Shanghai	8:05:43	-	LMT	1901
+			8:00	Shang	C%sT	1949
 			8:00	PRC	C%sT
+# Xinjiang time, used by many in western China; represented by Ürümqi / Ürümchi
+# / Wulumuqi.  (Please use Asia/Shanghai if you prefer Beijing time.)
+Zone	Asia/Urumqi	5:50:20	-	LMT	1928
+			6:00	-	XJT
 
 
 # Hong Kong (Xianggang)
@@ -524,15 +564,11 @@ Zone	Asia/Kashgar	5:03:56	-	LMT	1928 # or Kashi or Kaxgar
 # and incorrect rules. Although the exact switch over time is missing, I
 # think 3:30 is correct. The official DST record for Hong Kong can be
 # obtained from
-# 
 # http://www.hko.gov.hk/gts/time/Summertime.htm
-# .
 
 # From Arthur David Olson (2009-10-28):
 # Here are the dates given at
-# 
 # http://www.hko.gov.hk/gts/time/Summertime.htm
-# 
 # as of 2009-10-28:
 # Year        Period
 # 1941        1 Apr to 30 Sep
@@ -612,35 +648,113 @@ Zone	Asia/Hong_Kong	7:36:42 -	LMT	1904 Oct 30
 
 # Taiwan
 
-# Shanks & Pottenger write that Taiwan observed DST during 1945, when it
-# was still controlled by Japan.  This is hard to believe, but we don't
-# have any other information.
-
 # From smallufo (2010-04-03):
-# According to Taiwan's CWB,
-# 
+# According to Taiwan's CWB [Central Weather Bureau],
 # http://www.cwb.gov.tw/V6/astronomy/cdata/summert.htm
-# 
 # Taipei has DST in 1979 between July 1st and Sep 30.
 
-# From Arthur David Olson (2010-04-07):
-# Here's Google's translation of the table at the bottom of the "summert.htm" page:
-# Decade 	                                                    Name                      Start and end date
-# Republic of China 34 years to 40 years (AD 1945-1951 years) Summer Time               May 1 to September 30
-# 41 years of the Republic of China (AD 1952)                 Daylight Saving Time      March 1 to October 31
-# Republic of China 42 years to 43 years (AD 1953-1954 years) Daylight Saving Time      April 1 to October 31
-# In the 44 years to 45 years (AD 1955-1956 years)            Daylight Saving Time      April 1 to September 30
-# Republic of China 46 years to 48 years (AD 1957-1959)       Summer Time               April 1 to September 30
-# Republic of China 49 years to 50 years (AD 1960-1961)       Summer Time               June 1 to September 30
-# Republic of China 51 years to 62 years (AD 1962-1973 years) Stop Summer Time
-# Republic of China 63 years to 64 years (1974-1975 AD)       Daylight Saving Time      April 1 to September 30
-# Republic of China 65 years to 67 years (1976-1978 AD)       Stop Daylight Saving Time
-# Republic of China 68 years (AD 1979)                        Daylight Saving Time      July 1 to September 30
-# Republic of China since 69 years (AD 1980)                  Stop Daylight Saving Time
+# From Yu-Cheng Chuang (2013-07-12):
+# On Dec 28, 1895, the Meiji Emperor announced Ordinance No. 167 of
+# Meiji Year 28 "The clause about standard time", mentioned that
+# Taiwan and Penghu Islands, as well as Yaeyama and Miyako Islands
+# (both in Okinawa) adopt the Western Standard Time which is based on
+# 120E. The adoption began from Jan 1, 1896. The original text can be
+# found on Wikisource:
+# http://ja.wikisource.org/wiki/標準時ニ關スル件_(公布時)
+# ... This could be the first adoption of time zone in Taiwan, because
+# during the Qing Dynasty, it seems that there was no time zone
+# declared officially.
+#
+# Later, in the beginning of World War II, on Sep 25, 1937, the Showa
+# Emperor announced Ordinance No. 529 of Showa Year 12 "The clause of
+# revision in the ordinance No. 167 of Meiji year 28 about standard
+# time", in which abolished the adoption of Western Standard Time in
+# western islands (listed above), which means the whole Japan
+# territory, including later occupations, adopt Japan Central Time
+# (UTC+9). The adoption began on Oct 1, 1937. The original text can
+# be found on Wikisource:
+# http://ja.wikisource.org/wiki/明治二十八年勅令第百六十七號標準時ニ關スル件中改正ノ件
+#
+# That is, the time zone of Taipei switched to UTC+9 on Oct 1, 1937.
+
+# From Yu-Cheng Chuang (2014-07-02):
+# I've found more evidence about when the time zone was switched from UTC+9
+# back to UTC+8 after WW2.  I believe it was on Sep 21, 1945.  In a document
+# during Japanese era [1] in which the officer told the staff to change time
+# zone back to Western Standard Time (UTC+8) on Sep 21.  And in another
+# history page of National Cheng Kung University [2], on Sep 21 there is a
+# note "from today, switch back to Western Standard Time".  From these two
+# materials, I believe that the time zone change happened on Sep 21.  And
+# today I have found another monthly journal called "The Astronomical Herald"
+# from The Astronomical Society of Japan [3] in which it mentioned the fact
+# that:
+#
+# 1. Standard Time of the Country (Japan) was adopted on Jan 1, 1888, using
+# the time at 135E (GMT+9)
+#
+# 2. Standard Time of the Country was renamed to Central Standard Time, on Jan
+# 1, 1898, and on the same day, the new territories Taiwan and Penghu islands,
+# as well as Yaeyama and Miyako islands, adopted a new time zone called
+# Western Standard Time, which is in GMT+8.
+#
+# 3. Western Standard Time was deprecated on Sep 30, 1937. From then all the
+# territories of Japan adopted the same time zone, which is Central Standard
+# Time.
+#
+# [1] Academica Historica, Taiwan:
+# http://163.29.208.22:8080/govsaleShowImage/connect_img.php?s=00101738900090036&e=00101738900090037
+# [2] Nat'l Cheng Kung University 70th Anniversary Special Site:
+# http://www.ncku.edu.tw/~ncku70/menu/001/01_01.htm
+# [3] Yukio Niimi, The Standard Time in Japan (1997), p.475:
+# http://www.asj.or.jp/geppou/archive_open/1997/pdf/19971001c.pdf
+
+# Yu-Cheng Chuang (2014-07-03):
+# I finally have found the real official gazette about changing back to
+# Western Standard Time on Sep 21 in Taiwan.  It's Taiwan Governor-General
+# Bulletin No. 386 in Showa 20 years (1945), published on Sep 19, 1945. [1] ...
+# [It] abolishes Bulletin No. 207 in Showa 12 years (1937), which is a local
+# bulletin in Taiwan for that Ordinance No. 529. It also mentioned that 1am on
+# Sep 21, 1945 will be 12am on Sep 21.  I think this bulletin is much more
+# official than the one I mentioned in my first mail, because it's from the
+# top-level government in Taiwan. If you're going to quote any resource, this
+# would be a good one.
+# [1] Taiwan Governor-General Gazette, No. 1018, Sep 19, 1945:
+# http://db2.th.gov.tw/db2/view/viewImg.php?imgcode=0072031018a&num=19&bgn=019&end=019&otherImg=&type=gener
+
+# From Yu-Cheng Chuang (2014-07-02):
+# In 1946, DST in Taiwan was from May 15 and ended on Sep 30. The info from
+# Central Weather Bureau website was not correct.
+#
+# Original Bulletin:
+# http://subtpg.tpg.gov.tw/og/image2.asp?f=03502F0AKM1AF
+# http://subtpg.tpg.gov.tw/og/image2.asp?f=0350300AKM1B0 (cont.)
+#
+# In 1947, DST in Taiwan was expanded to Oct 31. There is a backup of that
+# telegram announcement from Taiwan Province Government:
+#
+# http://subtpg.tpg.gov.tw/og/image2.asp?f=0360310AKZ431
+#
+# Here is a brief translation:
+#
+#   The Summer Time this year is adopted from midnight Apr 15 until Sep 20
+#   midnight. To save (energy?) consumption, we're expanding Summer Time
+#   adoption till Oct 31 midnight.
+#
+# The Central Weather Bureau website didn't mention that, however it can
+# be found from historical government announcement database.
+
+# From Paul Eggert (2014-07-03):
+# As per Yu-Cheng Chuang, say that Taiwan was at UT+9 from 1937-10-01
+# until 1945-09-21 at 01:00, overriding Shanks & Pottenger.
+# Likewise, use Yu-Cheng Chuang's data for DST in Taiwan.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Taiwan	1945	1951	-	May	1	0:00	1:00	D
-Rule	Taiwan	1945	1951	-	Oct	1	0:00	0	S
+Rule	Taiwan	1946	only	-	May	15	0:00	1:00	D
+Rule	Taiwan	1946	only	-	Oct	1	0:00	0	S
+Rule	Taiwan	1947	only	-	Apr	15	0:00	1:00	D
+Rule	Taiwan	1947	only	-	Nov	1	0:00	0	S
+Rule	Taiwan	1948	1951	-	May	1	0:00	1:00	D
+Rule	Taiwan	1948	1951	-	Oct	1	0:00	0	S
 Rule	Taiwan	1952	only	-	Mar	1	0:00	1:00	D
 Rule	Taiwan	1952	1954	-	Nov	1	0:00	0	S
 Rule	Taiwan	1953	1959	-	Apr	1	0:00	1:00	D
@@ -648,11 +762,14 @@ Rule	Taiwan	1955	1961	-	Oct	1	0:00	0	S
 Rule	Taiwan	1960	1961	-	Jun	1	0:00	1:00	D
 Rule	Taiwan	1974	1975	-	Apr	1	0:00	1:00	D
 Rule	Taiwan	1974	1975	-	Oct	1	0:00	0	S
-Rule	Taiwan	1979	only	-	Jun	30	0:00	1:00	D
-Rule	Taiwan	1979	only	-	Sep	30	0:00	0	S
+Rule	Taiwan	1979	only	-	Jul	1	0:00	1:00	D
+Rule	Taiwan	1979	only	-	Oct	1	0:00	0	S
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Taipei	8:06:00 -	LMT	1896 # or Taibei or T'ai-pei
+# Taipei or Taibei or T'ai-pei
+Zone	Asia/Taipei	8:06:00 -	LMT	1896 Jan  1
+			8:00	-	JWST	1937 Oct  1
+			9:00	-	JST	1945 Sep 21  1:00
 			8:00	Taiwan	C%sT
 
 # Macau (Macao, Aomen)
@@ -672,7 +789,7 @@ Rule	Macau	1975	1977	-	Apr	Sun>=15	3:30	1:00	S
 Rule	Macau	1978	1980	-	Apr	Sun>=15	0:00	1:00	S
 Rule	Macau	1978	1980	-	Oct	Sun>=15	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Macau	7:34:20 -	LMT	1912
+Zone	Asia/Macau	7:34:20 -	LMT	1912 Jan  1
 			8:00	Macau	MO%sT	1999 Dec 20 # return to China
 			8:00	PRC	C%sT
 
@@ -721,7 +838,7 @@ Link	Asia/Nicosia	Europe/Nicosia
 # republic has changed its time zone back to that of Moscow.  As a result it
 # is now just four hours ahead of Greenwich Mean Time, rather than five hours
 # ahead.  The switch was decreed by the pro-Western president of Georgia,
-# Mikhail Saakashvili, who said the change was partly prompted by the process
+# Mikheil Saakashvili, who said the change was partly prompted by the process
 # of integration into Europe.
 
 # From Teimuraz Abashidze (2005-11-07):
@@ -734,29 +851,31 @@ Link	Asia/Nicosia	Europe/Nicosia
 # I don't know what can be done, especially knowing that some years ago our
 # DST rules where changed THREE TIMES during one month.
 
+# Milne 1899 says Tbilisi (Tiflis) time was 2:59:05.7.
+# Byalokoz 1919 says Georgia was 2:59:11.
+# Go with Byalokoz.
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Tbilisi	2:59:16 -	LMT	1880
-			2:59:16	-	TBMT	1924 May  2 # Tbilisi Mean Time
+Zone	Asia/Tbilisi	2:59:11 -	LMT	1880
+			2:59:11	-	TBMT	1924 May  2 # Tbilisi Mean Time
 			3:00	-	TBIT	1957 Mar    # Tbilisi Time
-			4:00 RussiaAsia TBI%sT	1991 Mar 31 2:00s
+			4:00 RussiaAsia TBI%sT	1991 Mar 31  2:00s
 			3:00	1:00	TBIST	1991 Apr  9 # independence
-			3:00 RussiaAsia GE%sT	1992 # Georgia Time
+			3:00 RussiaAsia GE%sT	1992        # Georgia Time
 			3:00 E-EurAsia	GE%sT	1994 Sep lastSun
 			4:00 E-EurAsia	GE%sT	1996 Oct lastSun
 			4:00	1:00	GEST	1997 Mar lastSun
 			4:00 E-EurAsia	GE%sT	2004 Jun 27
-			3:00 RussiaAsia	GE%sT	2005 Mar lastSun 2:00
+			3:00 RussiaAsia	GE%sT	2005 Mar lastSun  2:00
 			4:00	-	GET
 
 # East Timor
 
 # See Indonesia for the 1945 transition.
 
-# From Joao Carrascalao, brother of the former governor of East Timor, in
-# 
+# From João Carrascalão, brother of the former governor of East Timor, in
 # East Timor may be late for its millennium
-#  (1999-12-26/31):
+#  (1999-12-26/31):
 # Portugal tried to change the time forward in 1974 because the sun
 # rises too early but the suggestion raised a lot of problems with the
 # Timorese and I still don't think it would work today because it
@@ -766,25 +885,25 @@ Zone	Asia/Tbilisi	2:59:16 -	LMT	1880
 # We don't have any record of the above attempt.
 # Most likely our records are incomplete, but we have no better data.
 
-# 
 # From Manoel de Almeida e Silva, Deputy Spokesman for the UN Secretary-General
-# (2000-08-16):
+# http://www.hri.org/news/world/undh/2000/00-08-16.undh.html
+# (2000-08-16):
 # The Cabinet of the East Timor Transition Administration decided
 # today to advance East Timor's time by one hour.  The time change,
 # which will be permanent, with no seasonal adjustment, will happen at
 # midnight on Saturday, September 16.
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Dili	8:22:20 -	LMT	1912
+Zone	Asia/Dili	8:22:20 -	LMT	1912 Jan  1
 			8:00	-	TLT	1942 Feb 21 23:00 # E Timor Time
 			9:00	-	JST	1945 Sep 23
 			9:00	-	TLT	1976 May  3
-			8:00	-	WITA	2000 Sep 17 00:00
+			8:00	-	WITA	2000 Sep 17  0:00
 			9:00	-	TLT
 
 # India
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Kolkata	5:53:28 -	LMT	1880	# Kolkata
+Zone	Asia/Kolkata	5:53:28 -	LMT	1880        # Kolkata
 			5:53:20	-	HMT	1941 Oct    # Howrah Mean Time?
 			6:30	-	BURT	1942 May 15 # Burma Time
 			5:30	-	IST	1942 Sep
@@ -798,7 +917,7 @@ Zone	Asia/Kolkata	5:53:28 -	LMT	1880	# Kolkata
 # Indonesia
 #
 # From Gwillim Law (2001-05-28), overriding Shanks & Pottenger:
-# 
+# http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime
 # says that Indonesia's time zones changed on 1988-01-01.  Looking at some
 # time zone maps, I think that must refer to Western Borneo (Kalimantan Barat
 # and Kalimantan Tengah) switching from UTC+8 to UTC+7.
@@ -810,7 +929,7 @@ Zone	Asia/Kolkata	5:53:28 -	LMT	1880	# Kolkata
 # other formal surrender ceremonies were September 9, 11, and 13, plus
 # September 12 for the regional surrender to Mountbatten in Singapore.
 # These would be the earliest possible times for a change.
-# Regimes horaires pour le monde entier, by Henri Le Corre, (Editions
+# Régimes horaires pour le monde entier, by Henri Le Corre, (Éditions
 # Traditionnelles, 1987, Paris) says that Java and Madura switched
 # from JST to UTC+07:30 on 1945-09-23, and gives 1944-09-01 for Jayapura
 # (Hollandia).  For now, assume all Indonesian locations other than Jayapura
@@ -835,7 +954,7 @@ Zone Asia/Jakarta	7:07:12 -	LMT	1867 Aug 10
 # Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
 # but this must be a typo.
 			7:07:12	-	BMT	1923 Dec 31 23:47:12 # Batavia
-			7:20	-	JAVT	1932 Nov	 # Java Time
+			7:20	-	JAVT	1932 Nov    # Java Time
 			7:30	-	WIB	1942 Mar 23
 			9:00	-	JST	1945 Sep 23
 			7:30	-	WIB	1948 May
@@ -861,7 +980,7 @@ Zone Asia/Makassar	7:57:36 -	LMT	1920
 # Maluku Islands, West Papua, Papua
 Zone Asia/Jayapura	9:22:48 -	LMT	1932 Nov
 			9:00	-	WIT	1944 Sep  1
-			9:30	-	CST	1964
+			9:30	-	ACST	1964
 			9:00	-	WIT
 
 # Iran
@@ -927,7 +1046,7 @@ Zone Asia/Jayapura	9:22:48 -	LMT	1932 Nov
 # Several of my users have reported that Iran will not observe DST anymore:
 # http://www.irna.ir/en/news/view/line-17/0603193812164948.htm
 #
-# From Reuters (2007-09-16), with a heads-up from Jesper Norgaard Welen:
+# From Reuters (2007-09-16), with a heads-up from Jesper Nørgaard Welen:
 # ... the Guardian Council ... approved a law on Sunday to re-introduce
 # daylight saving time ...
 # http://uk.reuters.com/article/oilRpt/idUKBLA65048420070916
@@ -993,7 +1112,7 @@ Rule	Iran	2036	2037	-	Mar	21	0:00	1:00	D
 Rule	Iran	2036	2037	-	Sep	21	0:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Tehran	3:25:44	-	LMT	1916
-			3:25:44	-	TMT	1946	# Tehran Mean Time
+			3:25:44	-	TMT	1946     # Tehran Mean Time
 			3:30	-	IRST	1977 Nov
 			4:00	Iran	IR%sT	1979
 			3:30	Iran	IR%sT
@@ -1018,17 +1137,11 @@ Zone	Asia/Tehran	3:25:44	-	LMT	1916
 # From Steffen Thorsen (2008-03-10):
 # The cabinet in Iraq abolished DST last week, according to the following
 # news sources (in Arabic):
-# 
 # http://www.aljeeran.net/wesima_articles/news-20080305-98602.html
-# 
-# 
 # http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10
-# 
 #
 # We have published a short article in English about the change:
-# 
 # http://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html
-# 
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Iraq	1982	only	-	May	1	0:00	1:00	D
@@ -1037,14 +1150,14 @@ Rule	Iraq	1983	only	-	Mar	31	0:00	1:00	D
 Rule	Iraq	1984	1985	-	Apr	1	0:00	1:00	D
 Rule	Iraq	1985	1990	-	Sep	lastSun	1:00s	0	S
 Rule	Iraq	1986	1990	-	Mar	lastSun	1:00s	1:00	D
-# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the `:01' is a typo.
+# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the ':01' is a typo.
 # Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this.
 #
 Rule	Iraq	1991	2007	-	Apr	 1	3:00s	1:00	D
 Rule	Iraq	1991	2007	-	Oct	 1	3:00s	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Baghdad	2:57:40	-	LMT	1890
-			2:57:36	-	BMT	1918	    # Baghdad Mean Time?
+			2:57:36	-	BMT	1918     # Baghdad Mean Time?
 			3:00	-	AST	1982 May
 			3:00	Iraq	A%sT
 
@@ -1272,7 +1385,7 @@ Rule	Zion	2013	max	-	Oct	lastSun	2:00	0	S
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Jerusalem	2:20:54 -	LMT	1880
-			2:20:40	-	JMT	1918	# Jerusalem Mean Time?
+			2:20:40	-	JMT	1918 # Jerusalem Mean Time?
 			2:00	Zion	I%sT
 
 
@@ -1281,15 +1394,15 @@ Zone	Asia/Jerusalem	2:20:54 -	LMT	1880
 
 # Japan
 
-# `9:00' and `JST' is from Guy Harris.
+# '9:00' and 'JST' is from Guy Harris.
 
 # From Paul Eggert (1995-03-06):
 # Today's _Asahi Evening News_ (page 4) reports that Japan had
-# daylight saving between 1948 and 1951, but ``the system was discontinued
-# because the public believed it would lead to longer working hours.''
+# daylight saving between 1948 and 1951, but "the system was discontinued
+# because the public believed it would lead to longer working hours."
 
-# From Mayumi Negishi in the 2005-08-10 Japan Times
-# :
+# From Mayumi Negishi in the 2005-08-10 Japan Times:
+# http://www.japantimes.co.jp/cgi-bin/getarticle.pl5?nn20050810f2.htm
 # Occupation authorities imposed daylight-saving time on Japan on
 # [1948-05-01]....  But lack of prior debate and the execution of
 # daylight-saving time just three days after the bill was passed generated
@@ -1313,7 +1426,8 @@ Rule	Japan	1950	1951	-	May	Sun>=1	2:00	1:00	D
 
 # From Hideyuki Suzuki (1998-11-09):
 # 'Tokyo' usually stands for the former location of Tokyo Astronomical
-# Observatory: E 139 44' 40".90 (9h 18m 58s.727), N 35 39' 16".0.
+# Observatory: 139 degrees 44' 40.90" E (9h 18m 58.727s),
+# 35 degrees 39' 16.0" N.
 # This data is from 'Rika Nenpyou (Chronological Scientific Tables) 1996'
 # edited by National Astronomical Observatory of Japan....
 # JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST).
@@ -1321,10 +1435,10 @@ Rule	Japan	1950	1951	-	May	Sun>=1	2:00	1:00	D
 
 # From Hideyuki Suzuki (1998-11-16):
 # The ordinance No. 51 (1886) established "standard time" in Japan,
-# which stands for the time on E 135 degree.
+# which stands for the time on 135 degrees E.
 # In the ordinance No. 167 (1895), "standard time" was renamed to "central
 # standard time".  And the same ordinance also established "western standard
-# time", which stands for the time on E 120 degree....  But "western standard
+# time", which stands for the time on 120 degrees E....  But "western standard
 # time" was abolished in the ordinance No. 529 (1937).  In the ordinance No.
 # 167, there is no mention regarding for what place western standard time is
 # standard....
@@ -1332,27 +1446,33 @@ Rule	Japan	1950	1951	-	May	Sun>=1	2:00	1:00	D
 # I wrote "ordinance" above, but I don't know how to translate.
 # In Japanese it's "chokurei", which means ordinance from emperor.
 
-# Shanks & Pottenger claim JST in use since 1896, and that a few
-# places (e.g. Ishigaki) use +0800; go with Suzuki.  Guess that all
-# ordinances took effect on Jan 1.
+# From Yu-Cheng Chuang (2013-07-12):
+# ...the Meiji Emperor announced Ordinance No. 167 of Meiji Year 28 "The clause
+# about standard time" ... The adoption began from Jan 1, 1896.
+# http://ja.wikisource.org/wiki/標準時ニ關スル件_(公布時)
+#
+# ...the Showa Emperor announced Ordinance No. 529 of Showa Year 12 ... which
+# means the whole Japan territory, including later occupations, adopt Japan
+# Central Time (UTC+9). The adoption began on Oct 1, 1937.
+# http://ja.wikisource.org/wiki/明治二十八年勅令第百六十七號標準時ニ關スル件中改正ノ件
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Tokyo	9:18:59	-	LMT	1887 Dec 31 15:00u
-			9:00	-	JST	1896
-			9:00	-	CJT	1938
+			9:00	-	JST	1896 Jan  1
+			9:00	-	JCST	1937 Oct  1
 			9:00	Japan	J%sT
 # Since 1938, all Japanese possessions have been like Asia/Tokyo.
 
 # Jordan
 #
-# From 
-# Jordan Week (1999-07-01)  via Steffen Thorsen (1999-09-09):
+# From 
+# Jordan Week (1999-07-01) via Steffen Thorsen (1999-09-09):
 # Clocks in Jordan were forwarded one hour on Wednesday at midnight,
 # in accordance with the government's decision to implement summer time
 # all year round.
 #
-# From 
-# Jordan Week (1999-09-30)  via Steffen Thorsen (1999-11-09):
+# From 
+# Jordan Week (1999-09-30) via Steffen Thorsen (1999-11-09):
 # Winter time starts today Thursday, 30 September. Clocks will be turned back
 # by one hour.  This is the latest government decision and it's final!
 # The decision was taken because of the increase in working hours in
@@ -1372,9 +1492,7 @@ Zone	Asia/Tokyo	9:18:59	-	LMT	1887 Dec 31 15:00u
 
 # From Steffen Thorsen (2009-04-02):
 # This single one might be good enough, (2009-03-24, Arabic):
-# 
 # http://petra.gov.jo/Artical.aspx?Lng=2&Section=8&Artical=95279
-# 
 #
 # Google's translation:
 #
@@ -1465,9 +1583,8 @@ Zone	Asia/Amman	2:23:44 -	LMT	1931
 # - Qyzylorda switched from +5:00 to +6:00 on 1992-01-19 02:00.
 # - Oral switched from +5:00 to +4:00 in spring 1989.
 
-# 
-# From Kazakhstan Embassy's News Bulletin #11 (2005-03-21):
-# 
+# From Kazakhstan Embassy's News Bulletin #11
+#  (2005-03-21):
 # The Government of Kazakhstan passed a resolution March 15 abolishing
 # daylight saving time citing lack of economic benefits and health
 # complications coupled with a decrease in productivity.
@@ -1500,10 +1617,10 @@ Zone	Asia/Qyzylorda	4:21:52 -	LMT	1924 May  2
 			6:00	-	KIZT	1982 Apr  1
 			5:00 RussiaAsia	KIZ%sT	1991
 			5:00	-	KIZT	1991 Dec 16 # independence
-			5:00	-	QYZT	1992 Jan 19 2:00
+			5:00	-	QYZT	1992 Jan 19  2:00
 			6:00 RussiaAsia	QYZ%sT	2005 Mar 15
 			6:00	-	QYZT
-# Aqtobe (aka Aktobe, formerly Akt'ubinsk)
+# Aqtobe (aka Aktobe, formerly Aktyubinsk)
 Zone	Asia/Aqtobe	3:48:40	-	LMT	1924 May  2
 			4:00	-	AKTT	1930 Jun 21 # Aktyubinsk Time
 			5:00	-	AKTT	1981 Apr  1
@@ -1523,7 +1640,7 @@ Zone	Asia/Aqtau	3:21:04	-	LMT	1924 May  2
 			6:00	-	SHET	1982 Apr  1
 			5:00 RussiaAsia	SHE%sT	1991
 			5:00	-	SHET	1991 Dec 16 # independence
-			5:00 RussiaAsia	AQT%sT	1995 Mar lastSun 2:00 # Aqtau Time
+			5:00 RussiaAsia	AQT%sT	1995 Mar lastSun  2:00 # Aqtau Time
 			4:00 RussiaAsia	AQT%sT	2005 Mar 15
 			5:00	-	AQTT
 # West Kazakhstan
@@ -1532,7 +1649,7 @@ Zone	Asia/Oral	3:25:24	-	LMT	1924 May  2 # or Ural'sk
 			5:00	-	URAT	1981 Apr  1
 			5:00	1:00	URAST	1981 Oct  1
 			6:00	-	URAT	1982 Apr  1
-			5:00 RussiaAsia	URA%sT	1989 Mar 26 2:00
+			5:00 RussiaAsia	URA%sT	1989 Mar 26  2:00
 			4:00 RussiaAsia	URA%sT	1991
 			4:00	-	URAT	1991 Dec 16 # independence
 			4:00 RussiaAsia	ORA%sT	2005 Mar 15 # Oral Time
@@ -1543,7 +1660,7 @@ Zone	Asia/Oral	3:25:24	-	LMT	1924 May  2 # or Ural'sk
 
 # From Paul Eggert (2005-08-15):
 # According to an article dated today in the Kyrgyzstan Development Gateway
-# 
+# http://eng.gateway.kg/cgi-bin/page.pl?id=1&story_name=doc9979.shtml
 # Kyrgyzstan is canceling the daylight saving time system.  I take the article
 # to mean that they will leave their clocks at 6 hours ahead of UTC.
 # From Malik Abdugaliev (2005-09-21):
@@ -1558,17 +1675,17 @@ Rule	Kyrgyz	1997	2004	-	Oct	lastSun	2:30	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Bishkek	4:58:24 -	LMT	1924 May  2
 			5:00	-	FRUT	1930 Jun 21 # Frunze Time
-			6:00 RussiaAsia FRU%sT	1991 Mar 31 2:00s
-			5:00	1:00	FRUST	1991 Aug 31 2:00 # independence
-			5:00	Kyrgyz	KG%sT	2005 Aug 12    # Kyrgyzstan Time
+			6:00 RussiaAsia FRU%sT	1991 Mar 31  2:00s
+			5:00	1:00	FRUST	1991 Aug 31  2:00 # independence
+			5:00	Kyrgyz	KG%sT	2005 Aug 12 # Kyrgyzstan Time
 			6:00	-	KGT
 
 ###############################################################################
 
 # Korea (North and South)
 
-# From Annie I. Bang (2006-07-10) in
-# :
+# From Annie I. Bang (2006-07-10):
+# http://www.koreaherald.co.kr/SITE/data/html_dir/2006/07/10/200607100012.asp
 # The Ministry of Commerce, Industry and Energy has already
 # commissioned a research project [to reintroduce DST] and has said
 # the system may begin as early as 2008....  Korea ran a daylight
@@ -1581,19 +1698,29 @@ Rule	ROK	1960	only	-	Sep	13	0:00	0	S
 Rule	ROK	1987	1988	-	May	Sun>=8	0:00	1:00	D
 Rule	ROK	1987	1988	-	Oct	Sun>=8	0:00	0	S
 
+# From Paul Eggert (2014-07-01):
+# The following entries are from Shanks & Pottenger, except that I
+# guessed that time zone abbreviations through 1945 followed the same
+# rules as discussed under Taiwan, with nominal switches from JST to KST
+# when the respective cities were taken over by the Allies after WWII.
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Seoul	8:27:52	-	LMT	1890
 			8:30	-	KST	1904 Dec
-			9:00	-	KST	1928
+			9:00	-	JCST	1928
 			8:30	-	KST	1932
+			9:00	-	JCST	1937 Oct  1
+			9:00	-	JST	1945 Sep  8
 			9:00	-	KST	1954 Mar 21
 			8:00	ROK	K%sT	1961 Aug 10
 			8:30	-	KST	1968 Oct
 			9:00	ROK	K%sT
 Zone	Asia/Pyongyang	8:23:00 -	LMT	1890
 			8:30	-	KST	1904 Dec
-			9:00	-	KST	1928
+			9:00	-	JCST	1928
 			8:30	-	KST	1932
+			9:00	-	JCST	1937 Oct  1
+			9:00	-	JST	1945 Aug 24
 			9:00	-	KST	1954 Mar 21
 			8:00	-	KST	1961 Aug 10
 			9:00	-	KST
@@ -1602,21 +1729,13 @@ Zone	Asia/Pyongyang	8:23:00 -	LMT	1890
 
 # Kuwait
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-# From the Arab Times (2007-03-14):
-# The Civil Service Commission (CSC) has approved a proposal forwarded
-# by MP Ahmad Baqer on implementing the daylight saving time (DST) in
-# Kuwait starting from April until the end of Sept this year, reports Al-Anba.
-# .
-# From Paul Eggert (2007-03-29):
-# We don't know the details, or whether the approval means it'll happen,
-# so for now we assume no DST.
 Zone	Asia/Kuwait	3:11:56 -	LMT	1950
 			3:00	-	AST
 
 # Laos
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Vientiane	6:50:24 -	LMT	1906 Jun  9 # or Viangchan
-			7:06:20	-	SMT	1911 Mar 11 0:01 # Saigon MT?
+Zone	Asia/Vientiane	6:50:24 -	LMT	1906 Jun  9       # or Viangchan
+			7:06:20	-	SMT	1911 Mar 11  0:01 # Saigon MT?
 			7:00	-	ICT	1912 May
 			8:00	-	ICT	1931 May
 			7:00	-	ICT
@@ -1657,8 +1776,8 @@ Rule	NBorneo	1935	1941	-	Sep	14	0:00	0:20	TS # one-Third Summer
 Rule	NBorneo	1935	1941	-	Dec	14	0:00	0	-
 #
 # peninsular Malaysia
-# The data here are taken from Mok Ly Yng (2003-10-30)
-# .
+# taken from Mok Ly Yng (2003-10-30)
+# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Asia/Kuala_Lumpur	6:46:46 -	LMT	1901 Jan  1
 			6:55:25	-	SMT	1905 Jun  1 # Singapore M.T.
@@ -1670,12 +1789,12 @@ Zone Asia/Kuala_Lumpur	6:46:46 -	LMT	1901 Jan  1
 			7:30	-	MALT	1982 Jan  1
 			8:00	-	MYT	# Malaysia Time
 # Sabah & Sarawak
-# From Paul Eggert (2006-03-22):
-# The data here are mostly from Shanks & Pottenger, but the 1942, 1945 and 1982
-# transition dates are from Mok Ly Yng.
+# From Paul Eggert (2014-08-12):
+# The data entries here are mostly from Shanks & Pottenger, but the 1942, 1945
+# and 1982 transition dates are from Mok Ly Yng.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Asia/Kuching	7:21:20	-	LMT	1926 Mar
-			7:30	-	BORT	1933	# Borneo Time
+			7:30	-	BORT	1933        # Borneo Time
 			8:00	NBorneo	BOR%sT	1942 Feb 16
 			9:00	-	JST	1945 Sep 12
 			8:00	-	BORT	1982 Jan  1
@@ -1683,22 +1802,21 @@ Zone Asia/Kuching	7:21:20	-	LMT	1926 Mar
 
 # Maldives
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Maldives	4:54:00 -	LMT	1880	# Male
-			4:54:00	-	MMT	1960	# Male Mean Time
-			5:00	-	MVT		# Maldives Time
+Zone	Indian/Maldives	4:54:00 -	LMT	1880 # Male
+			4:54:00	-	MMT	1960 # Male Mean Time
+			5:00	-	MVT	# Maldives Time
 
 # Mongolia
 
 # Shanks & Pottenger say that Mongolia has three time zones, but
-# usno1995 and the CIA map Standard Time Zones of the World (2005-03)
-# both say that it has just one.
+# The USNO (1995-12-21) and the CIA map Standard Time Zones of the World
+# (2005-03) both say that it has just one.
 
 # From Oscar van Vlijmen (1999-12-11):
-# 
 # General Information Mongolia
-#  (1999-09)
+#  (1999-09)
 # "Time: Mongolia has two time zones. Three westernmost provinces of
-# Bayan-Ulgii, Uvs, and Hovd are one hour earlier than the capital city, and
+# Bayan-Ölgii, Uvs, and Hovd are one hour earlier than the capital city, and
 # the rest of the country follows the Ulaanbaatar time, which is UTC/GMT plus
 # eight hours."
 
@@ -1709,7 +1827,7 @@ Zone	Indian/Maldives	4:54:00 -	LMT	1880	# Male
 # of implementation may have been different....
 # Some maps in the past have indicated that there was an additional time
 # zone in the eastern part of Mongolia, including the provinces of Dornod,
-# Suhbaatar, and possibly Khentij.
+# Sükhbaatar, and possibly Khentii.
 
 # From Paul Eggert (1999-12-15):
 # Naming and spelling is tricky in Mongolia.
@@ -1723,10 +1841,10 @@ Zone	Indian/Maldives	4:54:00 -	LMT	1880	# Male
 # (adopted DST on 2001-04-27 02:00 local time, ending 2001-09-28),
 # there are three time zones.
 #
-# Provinces [at 7:00]: Bayan-ulgii, Uvs, Khovd, Zavkhan, Govi-Altai
-# Provinces [at 8:00]: Khovsgol, Bulgan, Arkhangai, Khentii, Tov,
-#	Bayankhongor, Ovorkhangai, Dundgovi, Dornogovi, Omnogovi
-# Provinces [at 9:00]: Dornod, Sukhbaatar
+# Provinces [at 7:00]: Bayan-Ölgii, Uvs, Khovd, Zavkhan, Govi-Altai
+# Provinces [at 8:00]: Khövsgöl, Bulgan, Arkhangai, Khentii, Töv,
+#	Bayankhongor, Övörkhangai, Dundgovi, Dornogovi, Ömnögovi
+# Provinces [at 9:00]: Dornod, Sükhbaatar
 #
 # [The province of Selenge is omitted from the above lists.]
 
@@ -1743,16 +1861,16 @@ Zone	Indian/Maldives	4:54:00 -	LMT	1880	# Male
 # We have wildly conflicting information about Mongolia's time zones.
 # Bill Bonnet (2005-05-19) reports that the US Embassy in Ulaanbaatar says
 # there is only one time zone and that DST is observed, citing Microsoft
-# Windows XP as the source.  Risto Nykanen (2005-05-16) reports that
+# Windows XP as the source.  Risto Nykänen (2005-05-16) reports that
 # travelmongolia.org says there are two time zones (UTC+7, UTC+8) with no DST.
 # Oscar van Vlijmen (2005-05-20) reports that the Mongolian Embassy in
 # Washington, DC says there are two time zones, with DST observed.
 # He also found
-# 
+# http://ubpost.mongolnews.mn/index.php?subaction=showcomments&id=1111634894&archive=&start_from=&ucat=1&
 # which also says that there is DST, and which has a comment by "Toddius"
 # (2005-03-31 06:05 +0700) saying "Mongolia actually has 3.5 time zones.
 # The West (OLGII) is +7 GMT, most of the country is ULAT is +8 GMT
-# and some Eastern provinces are +9 GMT but Sukhbaatar Aimag is SUHK +8.5 GMT.
+# and some Eastern provinces are +9 GMT but Sükhbaatar Aimag is SUHK +8.5 GMT.
 # The SUKH timezone is new this year, it is one of the few things the
 # parliament passed during the tumultuous winter session."
 # For now, let's ignore this information, until we have more confirmation.
@@ -1768,29 +1886,23 @@ Zone	Indian/Maldives	4:54:00 -	LMT	1880	# Male
 # +08:00 instead. Different sources appear to disagree with the tz
 # database on this, e.g.:
 #
-# 
 # http://www.timeanddate.com/worldclock/city.html?n=1026
-# 
-# 
 # http://www.worldtimeserver.com/current_time_in_MN.aspx
-# 
 #
 # both say GMT+08:00.
 
 # From Steffen Thorsen (2008-03-31):
 # eznis airways, which operates several domestic flights, has a flight
 # schedule here:
-# 
 # http://www.eznis.com/Container.jsp?id=112
-# 
 # (click the English flag for English)
 #
-# There it appears that flights between Choibalsan and Ulaanbatar arrive
+# There it appears that flights between Choibalsan and Ulaanbaatar arrive
 # about 1:35 - 1:50 hours later in local clock time, no matter the
-# direction, while Ulaanbaatar-Khvod takes 2 hours in the Eastern
-# direction and 3:35 back, which indicates that Ulaanbatar and Khvod are
+# direction, while Ulaanbaatar-Khovd takes 2 hours in the Eastern
+# direction and 3:35 back, which indicates that Ulaanbaatar and Khovd are
 # in different time zones (like we know about), while Choibalsan and
-# Ulaanbatar are in the same time zone (correction needed).
+# Ulaanbaatar are in the same time zone (correction needed).
 
 # From Arthur David Olson (2008-05-19):
 # Assume that Choibalsan is indeed offset by 8:00.
@@ -1806,7 +1918,7 @@ Rule	Mongol	1983	only	-	Oct	1	0:00	0	-
 # (1996-09) says 1996-10-25.  Go with Shanks & Pottenger through 1998.
 #
 # Shanks & Pottenger say that the Sept. 1984 through Sept. 1990 switches
-# in Choibalsan (more precisely, in Dornod and Sukhbaatar) took place
+# in Choibalsan (more precisely, in Dornod and Sükhbaatar) took place
 # at 02:00 standard time, not at 00:00 local time as in the rest of
 # the country.  That would be odd, and possibly is a result of their
 # correction of 02:00 (in the previous edition) not being done correctly
@@ -1822,13 +1934,13 @@ Rule	Mongol	2002	2006	-	Mar	lastSat	2:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 # Hovd, a.k.a. Chovd, Dund-Us, Dzhargalant, Khovd, Jirgalanta
 Zone	Asia/Hovd	6:06:36 -	LMT	1905 Aug
-			6:00	-	HOVT	1978	# Hovd Time
+			6:00	-	HOVT	1978     # Hovd Time
 			7:00	Mongol	HOV%sT
 # Ulaanbaatar, a.k.a. Ulan Bataar, Ulan Bator, Urga
 Zone	Asia/Ulaanbaatar 7:07:32 -	LMT	1905 Aug
-			7:00	-	ULAT	1978	# Ulaanbaatar Time
+			7:00	-	ULAT	1978     # Ulaanbaatar Time
 			8:00	Mongol	ULA%sT
-# Choibalsan, a.k.a. Bajan Tuemen, Bajan Tumen, Chojbalsan,
+# Choibalsan, a.k.a. Bajan Tümen, Bajan Tumen, Chojbalsan,
 # Choybalsan, Sanbejse, Tchoibalsan
 Zone	Asia/Choibalsan	7:38:00 -	LMT	1905 Aug
 			7:00	-	ULAT	1978
@@ -1860,7 +1972,7 @@ Zone	Asia/Muscat	3:54:24 -	LMT	1920
 # 00:01 was to make it clear which day it was on.
 
 # From Paul Eggert (2002-03-15):
-# Jesper Norgaard found this URL:
+# Jesper Nørgaard found this URL:
 # http://www.pak.gov.pk/public/news/app/app06_dec.htm
 # (dated 2001-12-06) which says that the Cabinet adopted a scheme "to
 # advance the clocks by one hour on the night between the first
@@ -1892,43 +2004,30 @@ Zone	Asia/Muscat	3:54:24 -	LMT	1920
 # Here is an article that Pakistan plan to introduce Daylight Saving Time
 # on June 1, 2008 for 3 months.
 #
-# "... The federal cabinet on Wednesday announced a new conservation plan to help
-# reduce load shedding by approving the closure of commercial centres at 9pm and
-# moving clocks forward by one hour for the next three months.
-# ...."
+# "... The federal cabinet on Wednesday announced a new conservation plan to
+# help reduce load shedding by approving the closure of commercial centres at
+# 9pm and moving clocks forward by one hour for the next three months. ...."
 #
-# 
 # http://www.worldtimezone.net/dst_news/dst_news_pakistan01.html
-# 
-# OR
-# 
 # http://www.dailytimes.com.pk/default.asp?page=2008%5C05%5C15%5Cstory_15-5-2008_pg1_4
-# 
 
 # From Arthur David Olson (2008-05-19):
 # XXX--midnight transitions is a guess; 2008 only is a guess.
 
 # From Alexander Krivenyshev (2008-08-28):
 # Pakistan government has decided to keep the watches one-hour advanced
-# for another 2 months--plan to return to Standard Time on October 31
+# for another 2 months - plan to return to Standard Time on October 31
 # instead of August 31.
 #
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_pakistan02.html
-# 
-# OR
-# 
 # http://dailymailnews.com/200808/28/news/dmbrn03.html
-# 
 
 # From Alexander Krivenyshev (2009-04-08):
 # Based on previous media reports that "... proposed plan to
 # advance clocks by one hour from May 1 will cause disturbance
 # to the working schedules rather than bringing discipline in
 # official working."
-# 
 # http://www.thenews.com.pk/daily_detail.asp?id=171280
-# 
 #
 # recent news that instead of May 2009 - Pakistan plan to
 # introduce DST from April 15, 2009
@@ -1936,15 +2035,8 @@ Zone	Asia/Muscat	3:54:24 -	LMT	1920
 # FYI: Associated Press Of Pakistan
 # April 08, 2009
 # Cabinet okays proposal to advance clocks by one hour from April 15
-# 
 # http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=73043&Itemid=1
-# 
-#
-# or
-#
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_pakistan05.html
-# 
 #
 # ....
 # The Federal Cabinet on Wednesday approved the proposal to
@@ -1957,34 +2049,20 @@ Zone	Asia/Muscat	3:54:24 -	LMT	1920
 # clocks backward by one hour from October 1. A formal announcement to
 # this effect will be made after the Prime Minister grants approval in
 # this regard."
-# 
 # http://www.thenews.com.pk/updates.asp?id=87168
-# 
 
 # From Alexander Krivenyshev (2009-09-28):
 # According to Associated Press Of Pakistan, it is confirmed that
-# Pakistan clocks across the country would be turned back by an hour from October
-# 1, 2009.
+# Pakistan clocks across the country would be turned back by an hour from
+# October 1, 2009.
 #
 # "Clocks to go back one hour from 1 Oct"
-# 
 # http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=86715&Itemid=2
-# 
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_pakistan07.htm
-# 
-
-# From Steffen Thorsen (2009-09-29):
-# Alexander Krivenyshev wrote:
-# > According to Associated Press Of Pakistan, it is confirmed that
-# > Pakistan clocks across the country would be turned back by an hour from October
-# > 1, 2009.
 #
+# From Steffen Thorsen (2009-09-29):
 # Now they seem to have changed their mind, November 1 is the new date:
-# 
 # http://www.thenews.com.pk/top_story_detail.asp?Id=24742
-# 
 # "The country's clocks will be reversed by one hour on November 1.
 # Officials of Federal Ministry for Interior told this to Geo News on
 # Monday."
@@ -1996,11 +2074,9 @@ Zone	Asia/Muscat	3:54:24 -	LMT	1920
 #
 # We have confirmed this year's end date with both with the Ministry of
 # Water and Power and the Pakistan Electric Power Company:
-# 
 # http://www.timeanddate.com/news/time/pakistan-ends-dst09.html
-# 
 
-# From Christoph Goehre (2009-10-01):
+# From Christoph Göhre (2009-10-01):
 # [T]he German Consulate General in Karachi reported me today that Pakistan
 # will go back to standard time on 1st of November.
 
@@ -2016,22 +2092,17 @@ Zone	Asia/Muscat	3:54:24 -	LMT	1920
 # Now, it seems that the decision to not observe DST in final:
 #
 # "Govt Withdraws Plan To Advance Clocks"
-# 
 # http://www.apakistannews.com/govt-withdraws-plan-to-advance-clocks-172041
-# 
 #
 # "People laud PM's announcement to end DST"
-# 
 # http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2
-# 
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule Pakistan	2002	only	-	Apr	Sun>=2	0:01	1:00	S
 Rule Pakistan	2002	only	-	Oct	Sun>=2	0:01	0	-
 Rule Pakistan	2008	only	-	Jun	1	0:00	1:00	S
-Rule Pakistan	2008	only	-	Nov	1	0:00	0	-
+Rule Pakistan	2008	2009	-	Nov	1	0:00	0	-
 Rule Pakistan	2009	only	-	Apr	15	0:00	1:00	S
-Rule Pakistan	2009	only	-	Nov	1	0:00	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Karachi	4:28:12 -	LMT	1907
@@ -2105,10 +2176,9 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
 # the PA has decided to implement DST in April.
 
 # From Paul Eggert (1999-09-20):
-# Daoud Kuttab writes in
-# 
-# Holiday havoc
-#  (Jerusalem Post, 1999-04-22) that
+# Daoud Kuttab writes in Holiday havoc
+# http://www.jpost.com/com/Archive/22.Apr.1999/Opinion/Article-2.html
+# (Jerusalem Post, 1999-04-22) that
 # the Palestinian National Authority changed to DST on 1999-04-15.
 # I vaguely recall that they switch back in October (sorry, forgot the source).
 # For now, let's assume that the spring switch was at 24:00,
@@ -2121,7 +2191,7 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
 # A user from Gaza reported that Gaza made the change early because of
 # the Ramadan.  Next year Ramadan will be even earlier, so I think
 # there is a good chance next year's end date will be around two weeks
-# earlier--the same goes for Jordan.
+# earlier - the same goes for Jordan.
 
 # From Steffen Thorsen (2006-08-17):
 # I was informed by a user in Bethlehem that in Bethlehem it started the
@@ -2140,7 +2210,7 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
 # I guess it is likely that next year's date will be moved as well,
 # because of the Ramadan.
 
-# From Jesper Norgaard Welen (2007-09-18):
+# From Jesper Nørgaard Welen (2007-09-18):
 # According to Steffen Thorsen's web site the Gaza Strip and the rest of the
 # Palestinian territories left DST early on 13.th. of September at 2:00.
 
@@ -2157,16 +2227,9 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
 # Gaza Strip (as Egypt) ended DST at midnight Thursday (Aug 28, 2008), while
 # the West Bank will end Daylight Saving Time at midnight Sunday (Aug 31, 2008).
 #
-# 
 # http://www.guardian.co.uk/world/feedarticle/7759001
-# 
-# 
 # http://www.abcnews.go.com/International/wireStory?id=5676087
-# 
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_gazastrip01.html
-# 
 
 # From Alexander Krivenyshev (2009-03-26):
 # According to the Palestine News Network (arabic.pnn.ps), Palestinian
@@ -2174,24 +2237,17 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
 # 26 and continue until the night of 27 September 2009.
 #
 # (in Arabic)
-# 
 # http://arabic.pnn.ps/index.php?option=com_content&task=view&id=50850
-# 
 #
-# or
 # (English translation)
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_westbank01.html
-# 
 
 # From Steffen Thorsen (2009-08-31):
 # Palestine's Council of Ministers announced that they will revert back to
 # winter time on Friday, 2009-09-04.
 #
 # One news source:
-# 
 # http://www.safa.ps/ara/?action=showdetail&seid=4158
-# 
 # (Palestinian press agency, Arabic),
 # Google translate: "Decided that the Palestinian government in Ramallah
 # headed by Salam Fayyad, the start of work in time for the winter of
@@ -2200,9 +2256,7 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
 #
 # We are not sure if Gaza will do the same, last year they had a different
 # end date, we will keep this page updated:
-# 
 # http://www.timeanddate.com/news/time/westbank-gaza-dst-2009.html
-# 
 
 # From Alexander Krivenyshev (2009-09-02):
 # Seems that Gaza Strip will go back to Winter Time same date as West Bank.
@@ -2212,51 +2266,35 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
 #
 # "Winter time unite the West Bank and Gaza"
 # (from Palestinian National Authority):
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_gazastrip02.html
-# 
 
 # From Alexander Krivenyshev (2010-03-19):
 # According to Voice of Palestine DST will last for 191 days, from March
 # 26, 2010 till "the last Sunday before the tenth day of Tishri
 # (October), each year" (October 03, 2010?)
 #
-# 
 # http://palvoice.org/forums/showthread.php?t=245697
-# 
 # (in Arabic)
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_westbank03.html
-# 
 
 # From Steffen Thorsen (2010-03-24):
 # ...Ma'an News Agency reports that Hamas cabinet has decided it will
 # start one day later, at 12:01am. Not sure if they really mean 12:01am or
 # noon though:
 #
-# 
 # http://www.maannews.net/eng/ViewDetails.aspx?ID=271178
-# 
 # (Ma'an News Agency)
 # "At 12:01am Friday, clocks in Israel and the West Bank will change to
 # 1:01am, while Gaza clocks will change at 12:01am Saturday morning."
 
 # From Steffen Thorsen (2010-08-11):
 # According to several sources, including
-# 
 # http://www.maannews.net/eng/ViewDetails.aspx?ID=306795
-# 
 # the clocks were set back one hour at 2010-08-11 00:00:00 local time in
 # Gaza and the West Bank.
 # Some more background info:
-# 
 # http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html
-# 
 
 # From Steffen Thorsen (2011-08-26):
 # Gaza and the West Bank did go back to standard time in the beginning of
@@ -2264,13 +2302,9 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
 # 00:00 (so two periods of DST in 2011). The pause was because of
 # Ramadan.
 #
-# 
 # http://www.maannews.net/eng/ViewDetails.aspx?ID=416217
-# 
 # Additional info:
-# 
 # http://www.timeanddate.com/news/time/palestine-dst-2011.html
-# 
 
 # From Alexander Krivenyshev (2011-08-27):
 # According to the article in The Jerusalem Post:
@@ -2280,14 +2314,9 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
 # The Hamas government said on Saturday that it won't observe summertime after
 # the Muslim feast of Id al-Fitr, which begins on Tuesday..."
 # ...
-# 
 # http://www.jpost.com/MiddleEast/Article.aspx?id=235650
-# 
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_gazastrip05.html
-# 
-# The rules for Egypt are stolen from the `africa' file.
+# The rules for Egypt are stolen from the 'africa' file.
 
 # From Steffen Thorsen (2011-09-30):
 # West Bank did end Daylight Saving Time this morning/midnight (2011-09-30
@@ -2295,26 +2324,18 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
 # So West Bank and Gaza now have the same time again.
 #
 # Many sources, including:
-# 
 # http://www.maannews.net/eng/ViewDetails.aspx?ID=424808
-# 
 
 # From Steffen Thorsen (2012-03-26):
 # Palestinian news sources tell that both Gaza and West Bank will start DST
 # on Friday (Thursday midnight, 2012-03-29 24:00).
 # Some of many sources in Arabic:
-# 
 # http://www.samanews.com/index.php?act=Show&id=122638
-# 
 #
-# 
 # http://safa.ps/details/news/74352/%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-%D8%A8%D8%A7%D9%84%D8%B6%D9%81%D8%A9-%D9%88%D8%BA%D8%B2%D8%A9-%D9%84%D9%8A%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D8%B9%D8%A9.html
-# 
 #
 # Our brief summary:
-# 
 # http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html
-# 
 
 # From Steffen Thorsen (2013-03-26):
 # The following news sources tells that Palestine will "start daylight saving
@@ -2374,10 +2395,10 @@ Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
 			2:00 EgyptAsia	EE%sT	1967 Jun  5
 			2:00	Zion	I%sT	1996
 			2:00	Jordan	EE%sT	1999
-			2:00 Palestine	EE%sT	2008 Aug 29 0:00
+			2:00 Palestine	EE%sT	2008 Aug 29  0:00
 			2:00	-	EET	2008 Sep
 			2:00 Palestine	EE%sT	2010
-			2:00	-	EET	2010 Mar 27 0:01
+			2:00	-	EET	2010 Mar 27  0:01
 			2:00 Palestine	EE%sT	2011 Aug  1
 			2:00	-	EET	2012
 			2:00 Palestine	EE%sT
@@ -2393,25 +2414,27 @@ Zone	Asia/Hebron	2:20:23	-	LMT	1900 Oct
 # no information
 
 # Philippines
-# On 1844-08-16, Narciso Claveria, governor-general of the
+# On 1844-08-16, Narciso Clavería, governor-general of the
 # Philippines, issued a proclamation announcing that 1844-12-30 was to
-# be immediately followed by 1845-01-01.  Robert H. van Gent has a
-# transcript of the decree in .
-# The rest of the data are from Shanks & Pottenger.
+# be immediately followed by 1845-01-01; see R.H. van Gent's
+# History of the International Date Line
+# http://www.staff.science.uu.nl/~gent0113/idl/idl_philippines.htm
+# The rest of the data entries are from Shanks & Pottenger.
 
-# From Paul Eggert (2006-04-25):
-# Tomorrow's Manila Standard reports that the Philippines Department of
-# Trade and Industry is considering adopting DST this June when the
-# rainy season begins.  See
-# .
-# For now, we'll ignore this, since it's not definite and we lack details.
-#
-# From Jesper Norgaard Welen (2006-04-26):
+# From Jesper Nørgaard Welen (2006-04-26):
 # ... claims that Philippines had DST last time in 1990:
 # http://story.philippinetimes.com/p.x/ct/9/id/145be20cc6b121c0/cid/3e5bbccc730d258c/
 # [a story dated 2006-04-25 by Cris Larano of Dow Jones Newswires,
 # but no details]
 
+# From Paul Eggert (2014-08-14):
+# The following source says DST may be instituted November-January and again
+# March-June, but this is not definite.  It also says DST was last proclaimed
+# during the Ramos administration (1992-1998); but again, no details.
+# Carcamo D. PNoy urged to declare use of daylight saving time.
+# Philippine Star 2014-08-05
+# http://www.philstar.com/headlines/2014/08/05/1354152/pnoy-urged-declare-use-daylight-saving-time
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Phil	1936	only	-	Nov	1	0:00	1:00	S
 Rule	Phil	1937	only	-	Feb	1	0:00	0	-
@@ -2428,18 +2451,39 @@ Zone	Asia/Manila	-15:56:00 -	LMT	1844 Dec 31
 
 # Qatar
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Qatar	3:26:08 -	LMT	1920	# Al Dawhah / Doha
+Zone	Asia/Qatar	3:26:08 -	LMT	1920     # Al Dawhah / Doha
 			4:00	-	GST	1972 Jun
 			3:00	-	AST
 
 # Saudi Arabia
+#
+# From Paul Eggert (2014-07-15):
+# Time in Saudi Arabia and other countries in the Arabian peninsula was not
+# standardized until relatively recently; we don't know when, and possibly it
+# has never been made official.  Richard P Hunt, in "Islam city yielding to
+# modern times", New York Times (1961-04-09), p 20, wrote that only airlines
+# observed standard time, and that people in Jeddah mostly observed quasi-solar
+# time, doing so by setting their watches at sunrise to 6 o'clock (or to 12
+# o'clock for "Arab" time).
+#
+# The TZ database cannot represent quasi-solar time; airline time is the best
+# we can do.  The 1946 foreign air news digest of the U.S. Civil Aeronautics
+# Board (OCLC 42299995) reported that the "... Arabian Government, inaugurated
+# a weekly Dhahran-Cairo service, via the Saudi Arabian cities of Riyadh and
+# Jidda, on March 14, 1947".  Shanks & Pottenger guessed 1950; go with the
+# earlier date.
+#
+# Shanks & Pottenger also state that until 1968-05-01 Saudi Arabia had two
+# time zones; the other zone, at UTC+4, was in the far eastern part of
+# the country.  Ignore this, as it's before our 1970 cutoff.
+#
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Riyadh	3:06:52 -	LMT	1950
+Zone	Asia/Riyadh	3:06:52 -	LMT	1947 Mar 14
 			3:00	-	AST
 
 # Singapore
-# The data here are taken from Mok Ly Yng (2003-10-30)
-# .
+# taken from Mok Ly Yng (2003-10-30)
+# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Singapore	6:55:25 -	LMT	1901 Jan  1
 			6:55:25	-	SMT	1905 Jun  1 # Singapore M.T.
@@ -2465,26 +2509,24 @@ Zone	Asia/Singapore	6:55:25 -	LMT	1901 Jan  1
 
 # From Paul Eggert (1996-09-03):
 # "Sri Lanka advances clock by an hour to avoid blackout"
-# (www.virtual-pc.com/lankaweb/news/items/240596-2.html, 1996-05-24,
+# (, 1996-05-24,
 # no longer available as of 1999-08-17)
-# reported ``the country's standard time will be put forward by one hour at
-# midnight Friday (1830 GMT) `in the light of the present power crisis'.''
+# reported "the country's standard time will be put forward by one hour at
+# midnight Friday (1830 GMT) 'in the light of the present power crisis'."
 #
 # From Dharmasiri Senanayake, Sri Lanka Media Minister (1996-10-24), as quoted
-# by Shamindra in
-# 
-# Daily News - Hot News Section (1996-10-26)
-# :
+# by Shamindra in Daily News - Hot News Section
+#  (1996-10-26):
 # With effect from 12.30 a.m. on 26th October 1996
 # Sri Lanka will be six (06) hours ahead of GMT.
 
-# From Jesper Norgaard Welen (2006-04-14), quoting Sri Lanka News Online
+# From Jesper Nørgaard Welen (2006-04-14), quoting Sri Lanka News Online
 #  (2006-04-13):
 # 0030 hrs on April 15, 2006 (midnight of April 14, 2006 +30 minutes)
 # at present, become 2400 hours of April 14, 2006 (midnight of April 14, 2006).
 
 # From Peter Apps and Ranga Sirila of Reuters (2006-04-12) in:
-# 
+# http://today.reuters.co.uk/news/newsArticle.aspx?type=scienceNews&storyID=2006-04-12T172228Z_01_COL295762_RTRIDST_0_SCIENCE-SRILANKA-TIME-DC.XML
 # [The Tamil Tigers] never accepted the original 1996 time change and simply
 # kept their clocks set five and a half hours ahead of Greenwich Mean
 # Time (GMT), in line with neighbor India.
@@ -2498,7 +2540,7 @@ Zone	Asia/Singapore	6:55:25 -	LMT	1901 Jan  1
 # twice in 1996 and probably SL Government or its standardization
 # agencies never declared an abbreviation as a national standard.
 #
-# I recollect before the recent change the government annoucemments
+# I recollect before the recent change the government announcements
 # mentioning it as simply changing Sri Lanka Standard Time or Sri Lanka
 # Time and no mention was made about the abbreviation.
 #
@@ -2508,7 +2550,7 @@ Zone	Asia/Singapore	6:55:25 -	LMT	1901 Jan  1
 # item....
 #
 # Within Sri Lanka I think LKT is well known among computer users and
-# adminsitrators.  In my opinion SLT may not be a good choice because the
+# administrators.  In my opinion SLT may not be a good choice because the
 # nation's largest telcom / internet operator Sri Lanka Telcom is well
 # known by that abbreviation - simply as SLT (there IP domains are
 # slt.lk and sltnet.lk).
@@ -2523,13 +2565,13 @@ Zone	Asia/Singapore	6:55:25 -	LMT	1901 Jan  1
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Colombo	5:19:24 -	LMT	1880
-			5:19:32	-	MMT	1906	# Moratuwa Mean Time
+			5:19:32	-	MMT	1906        # Moratuwa Mean Time
 			5:30	-	IST	1942 Jan  5
 			5:30	0:30	IHST	1942 Sep
-			5:30	1:00	IST	1945 Oct 16 2:00
-			5:30	-	IST	1996 May 25 0:00
-			6:30	-	LKT	1996 Oct 26 0:30
-			6:00	-	LKT	2006 Apr 15 0:30
+			5:30	1:00	IST	1945 Oct 16  2:00
+			5:30	-	IST	1996 May 25  0:00
+			6:30	-	LKT	1996 Oct 26  0:30
+			6:00	-	LKT	2006 Apr 15  0:30
 			5:30	-	IST
 
 # Syria
@@ -2580,7 +2622,7 @@ Rule	Syria	2006	only	-	Sep	22	0:00	0	-
 # Today the AP reported "Syria will switch to summertime at midnight Thursday."
 # http://www.iht.com/articles/ap/2007/03/29/africa/ME-GEN-Syria-Time-Change.php
 Rule	Syria	2007	only	-	Mar	lastFri	0:00	1:00	S
-# From Jesper Norgard (2007-10-27):
+# From Jesper Nørgaard (2007-10-27):
 # The sister center ICARDA of my work CIMMYT is confirming that Syria DST will
 # not take place 1st November at 0:00 o'clock but 1st November at 24:00 or
 # rather Midnight between Thursday and Friday. This does make more sense than
@@ -2589,7 +2631,7 @@ Rule	Syria	2007	only	-	Mar	lastFri	0:00	1:00	S
 # it is implemented at midnight of the last workday before weekend...
 #
 # From Steffen Thorsen (2007-10-27):
-# Jesper Norgaard Welen wrote:
+# Jesper Nørgaard Welen wrote:
 #
 # > "Winter local time in Syria will be observed at midnight of Thursday 1
 # > November 2007, and the clock will be put back 1 hour."
@@ -2605,8 +2647,7 @@ Rule	Syria	2007	only	-	Nov	 Fri>=1	0:00	0	-
 
 # From Stephen Colebourne (2008-03-17):
 # For everyone's info, I saw an IATA time zone change for [Syria] for
-# this month (March 2008) in the last day or so...This is the data IATA
-# are now using:
+# this month (March 2008) in the last day or so....
 # Country     Time Standard   --- DST Start ---   --- DST End ---  DST
 # Name        Zone Variation   Time    Date        Time    Date
 # Variation
@@ -2618,16 +2659,15 @@ Rule	Syria	2007	only	-	Nov	 Fri>=1	0:00	0	-
 # From Arthur David Olson (2008-03-17):
 # Here's a link to English-language coverage by the Syrian Arab News
 # Agency (SANA)...
-# 
 # http://www.sana.sy/eng/21/2008/03/11/165173.htm
-# ...which reads (in part) "The Cabinet approved the suggestion of the
+# ...which reads (in part) "The Cabinet approved the suggestion of the
 # Ministry of Electricity to begin daylight savings time on Friday April
 # 4th, advancing clocks one hour ahead on midnight of Thursday April 3rd."
 # Since Syria is two hours east of UTC, the 2200 and 2100 transition times
 # shown above match up with midnight in Syria.
 
 # From Arthur David Olson (2008-03-18):
-# My buest guess at a Syrian rule is "the Friday nearest April 1";
+# My best guess at a Syrian rule is "the Friday nearest April 1";
 # coding that involves either using a "Mar Fri>=29" construct that old time zone
 # compilers can't handle  or having multiple Rules (a la Israel).
 # For now, use "Apr Fri>=1", and go with IATA on a uniform Sep 30 end.
@@ -2640,37 +2680,27 @@ Rule	Syria	2007	only	-	Nov	 Fri>=1	0:00	0	-
 # winter time on 2008-11-01 at 00:00 local daylight time (delaying/setting
 # clocks back 60 minutes).
 #
-# 
 # http://sana.sy/ara/2/2008/10/07/195459.htm
-# 
 
 # From Steffen Thorsen (2009-03-19):
 # Syria will start DST on 2009-03-27 00:00 this year according to many sources,
 # two examples:
 #
-# 
 # http://www.sana.sy/eng/21/2009/03/17/217563.htm
-# 
 # (English, Syrian Arab News # Agency)
-# 
 # http://thawra.alwehda.gov.sy/_View_news2.asp?FileName=94459258720090318012209
-# 
 # (Arabic, gov-site)
 #
 # We have not found any sources saying anything about when DST ends this year.
 #
 # Our summary
-# 
 # http://www.timeanddate.com/news/time/syria-dst-starts-march-27-2009.html
-# 
 
 # From Steffen Thorsen (2009-10-27):
 # The Syrian Arab News Network on 2009-09-29 reported that Syria will
 # revert back to winter (standard) time on midnight between Thursday
 # 2009-10-29 and Friday 2009-10-30:
-# 
 # http://www.sana.sy/ara/2/2009/09/29/247012.htm (Arabic)
-# 
 
 # From Arthur David Olson (2009-10-28):
 # We'll see if future DST switching times turn out to be end of the last
@@ -2681,23 +2711,17 @@ Rule	Syria	2007	only	-	Nov	 Fri>=1	0:00	0	-
 # The "Syrian News Station" reported on 2010-03-16 that the Council of
 # Ministers has decided that Syria will start DST on midnight Thursday
 # 2010-04-01: (midnight between Thursday and Friday):
-# 
 # http://sns.sy/sns/?path=news/read/11421 (Arabic)
-# 
 
 # From Steffen Thorsen (2012-03-26):
 # Today, Syria's government announced that they will start DST early on Friday
 # (00:00). This is a bit earlier than the past two years.
 #
 # From Syrian Arab News Agency, in Arabic:
-# 
 # http://www.sana.sy/ara/2/2012/03/26/408215.htm
-# 
 #
 # Our brief summary:
-# 
 # http://www.timeanddate.com/news/time/syria-dst-2012.html
-# 
 
 # From Arthur David Olson (2012-03-27):
 # Assume last Friday in March going forward XXX.
@@ -2710,7 +2734,7 @@ Rule	Syria	2012	max	-	Mar	lastFri	0:00	1:00	S
 Rule	Syria	2009	max	-	Oct	lastFri	0:00	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Damascus	2:25:12 -	LMT	1920	# Dimashq
+Zone	Asia/Damascus	2:25:12 -	LMT	1920 # Dimashq
 			2:00	Syria	EE%sT
 
 # Tajikistan
@@ -2718,9 +2742,9 @@ Zone	Asia/Damascus	2:25:12 -	LMT	1920	# Dimashq
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Dushanbe	4:35:12 -	LMT	1924 May  2
 			5:00	-	DUST	1930 Jun 21 # Dushanbe Time
-			6:00 RussiaAsia DUS%sT	1991 Mar 31 2:00s
-			5:00	1:00	DUSST	1991 Sep  9 2:00s
-			5:00	-	TJT		    # Tajikistan Time
+			6:00 RussiaAsia DUS%sT	1991 Mar 31  2:00s
+			5:00	1:00	DUSST	1991 Sep  9  2:00s
+			5:00	-	TJT	# Tajikistan Time
 
 # Thailand
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -2733,9 +2757,9 @@ Zone	Asia/Bangkok	6:42:04	-	LMT	1880
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Ashgabat	3:53:32 -	LMT	1924 May  2 # or Ashkhabad
 			4:00	-	ASHT	1930 Jun 21 # Ashkhabad Time
-			5:00 RussiaAsia	ASH%sT	1991 Mar 31 2:00
+			5:00 RussiaAsia	ASH%sT	1991 Mar 31  2:00
 			4:00 RussiaAsia	ASH%sT	1991 Oct 27 # independence
-			4:00 RussiaAsia	TM%sT	1992 Jan 19 2:00
+			4:00 RussiaAsia	TM%sT	1992 Jan 19  2:00
 			5:00	-	TMT
 
 # United Arab Emirates
@@ -2744,8 +2768,9 @@ Zone	Asia/Dubai	3:41:12 -	LMT	1920
 			4:00	-	GST
 
 # Uzbekistan
+# Byalokoz 1919 says Uzbekistan was 4:27:53.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Asia/Samarkand	4:27:12 -	LMT	1924 May  2
+Zone	Asia/Samarkand	4:27:53 -	LMT	1924 May  2
 			4:00	-	SAMT	1930 Jun 21 # Samarkand Time
 			5:00	-	SAMT	1981 Apr  1
 			5:00	1:00	SAMST	1981 Oct  1
@@ -2753,9 +2778,10 @@ Zone	Asia/Samarkand	4:27:12 -	LMT	1924 May  2
 			5:00 RussiaAsia	SAM%sT	1991 Sep  1 # independence
 			5:00 RussiaAsia	UZ%sT	1992
 			5:00	-	UZT
-Zone	Asia/Tashkent	4:37:12 -	LMT	1924 May  2
+# Milne says Tashkent was 4:37:10.8; round to nearest.
+Zone	Asia/Tashkent	4:37:11 -	LMT	1924 May  2
 			5:00	-	TAST	1930 Jun 21 # Tashkent Time
-			6:00 RussiaAsia	TAS%sT	1991 Mar 31 2:00
+			6:00 RussiaAsia	TAS%sT	1991 Mar 31  2:00
 			5:00 RussiaAsia	TAS%sT	1991 Sep  1 # independence
 			5:00 RussiaAsia	UZ%sT	1992
 			5:00	-	UZT
@@ -2769,13 +2795,13 @@ Zone	Asia/Tashkent	4:37:12 -	LMT	1924 May  2
 # and Pottenger.
 
 # From Arthur David Olson (2008-03-18):
-# The English-language name of Vietnam's most populous city is "Ho Chi Min City";
-# we use Ho_Chi_Minh below to avoid a name of more than 14 characters.
+# The English-language name of Vietnam's most populous city is "Ho Chi Minh
+# City"; use Ho_Chi_Minh below to avoid a name of more than 14 characters.
 
 # From Shanks & Pottenger:
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Ho_Chi_Minh	7:06:40 -	LMT	1906 Jun  9
-			7:06:20	-	SMT	1911 Mar 11 0:01 # Saigon MT?
+			7:06:20	-	SMT	1911 Mar 11  0:01 # Saigon MT?
 			7:00	-	ICT	1912 May
 			8:00	-	ICT	1931 May
 			7:00	-	ICT
diff --git a/jdk/make/data/tzdata/australasia b/jdk/make/data/tzdata/australasia
index 94c9adb912c..52d32904178 100644
--- a/jdk/make/data/tzdata/australasia
+++ b/jdk/make/data/tzdata/australasia
@@ -21,7 +21,6 @@
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
@@ -36,13 +35,13 @@
 # Please see the notes below for the controversy about "EST" versus "AEST" etc.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Aus	1917	only	-	Jan	 1	0:01	1:00	-
-Rule	Aus	1917	only	-	Mar	25	2:00	0	-
-Rule	Aus	1942	only	-	Jan	 1	2:00	1:00	-
-Rule	Aus	1942	only	-	Mar	29	2:00	0	-
-Rule	Aus	1942	only	-	Sep	27	2:00	1:00	-
-Rule	Aus	1943	1944	-	Mar	lastSun	2:00	0	-
-Rule	Aus	1943	only	-	Oct	 3	2:00	1:00	-
+Rule	Aus	1917	only	-	Jan	 1	0:01	1:00	D
+Rule	Aus	1917	only	-	Mar	25	2:00	0	S
+Rule	Aus	1942	only	-	Jan	 1	2:00	1:00	D
+Rule	Aus	1942	only	-	Mar	29	2:00	0	S
+Rule	Aus	1942	only	-	Sep	27	2:00	1:00	D
+Rule	Aus	1943	1944	-	Mar	lastSun	2:00	0	S
+Rule	Aus	1943	only	-	Oct	 3	2:00	1:00	D
 # Go with Whitman and the Australian National Standards Commission, which
 # says W Australia didn't use DST in 1943/1944.  Ignore Whitman's claim that
 # 1944/1945 was just like 1943/1944.
@@ -50,26 +49,26 @@ Rule	Aus	1943	only	-	Oct	 3	2:00	1:00	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 # Northern Territory
 Zone Australia/Darwin	 8:43:20 -	LMT	1895 Feb
-			 9:00	-	CST	1899 May
-			 9:30	Aus	CST
+			 9:00	-	ACST	1899 May
+			 9:30	Aus	AC%sT
 # Western Australia
 #
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AW	1974	only	-	Oct	lastSun	2:00s	1:00	-
-Rule	AW	1975	only	-	Mar	Sun>=1	2:00s	0	-
-Rule	AW	1983	only	-	Oct	lastSun	2:00s	1:00	-
-Rule	AW	1984	only	-	Mar	Sun>=1	2:00s	0	-
-Rule	AW	1991	only	-	Nov	17	2:00s	1:00	-
-Rule	AW	1992	only	-	Mar	Sun>=1	2:00s	0	-
-Rule	AW	2006	only	-	Dec	 3	2:00s	1:00	-
-Rule	AW	2007	2009	-	Mar	lastSun	2:00s	0	-
-Rule	AW	2007	2008	-	Oct	lastSun	2:00s	1:00	-
+Rule	AW	1974	only	-	Oct	lastSun	2:00s	1:00	D
+Rule	AW	1975	only	-	Mar	Sun>=1	2:00s	0	S
+Rule	AW	1983	only	-	Oct	lastSun	2:00s	1:00	D
+Rule	AW	1984	only	-	Mar	Sun>=1	2:00s	0	S
+Rule	AW	1991	only	-	Nov	17	2:00s	1:00	D
+Rule	AW	1992	only	-	Mar	Sun>=1	2:00s	0	S
+Rule	AW	2006	only	-	Dec	 3	2:00s	1:00	D
+Rule	AW	2007	2009	-	Mar	lastSun	2:00s	0	S
+Rule	AW	2007	2008	-	Oct	lastSun	2:00s	1:00	D
 Zone Australia/Perth	 7:43:24 -	LMT	1895 Dec
-			 8:00	Aus	WST	1943 Jul
-			 8:00	AW	WST
+			 8:00	Aus	AW%sT	1943 Jul
+			 8:00	AW	AW%sT
 Zone Australia/Eucla	 8:35:28 -	LMT	1895 Dec
-			 8:45	Aus	CWST	1943 Jul
-			 8:45	AW	CWST
+			 8:45	Aus	ACW%sT	1943 Jul
+			 8:45	AW	ACW%sT
 
 # Queensland
 #
@@ -85,150 +84,150 @@ Zone Australia/Eucla	 8:35:28 -	LMT	1895 Dec
 # so use Lindeman.
 #
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AQ	1971	only	-	Oct	lastSun	2:00s	1:00	-
-Rule	AQ	1972	only	-	Feb	lastSun	2:00s	0	-
-Rule	AQ	1989	1991	-	Oct	lastSun	2:00s	1:00	-
-Rule	AQ	1990	1992	-	Mar	Sun>=1	2:00s	0	-
-Rule	Holiday	1992	1993	-	Oct	lastSun	2:00s	1:00	-
-Rule	Holiday	1993	1994	-	Mar	Sun>=1	2:00s	0	-
+Rule	AQ	1971	only	-	Oct	lastSun	2:00s	1:00	D
+Rule	AQ	1972	only	-	Feb	lastSun	2:00s	0	S
+Rule	AQ	1989	1991	-	Oct	lastSun	2:00s	1:00	D
+Rule	AQ	1990	1992	-	Mar	Sun>=1	2:00s	0	S
+Rule	Holiday	1992	1993	-	Oct	lastSun	2:00s	1:00	D
+Rule	Holiday	1993	1994	-	Mar	Sun>=1	2:00s	0	S
 Zone Australia/Brisbane	10:12:08 -	LMT	1895
-			10:00	Aus	EST	1971
-			10:00	AQ	EST
+			10:00	Aus	AE%sT	1971
+			10:00	AQ	AE%sT
 Zone Australia/Lindeman  9:55:56 -	LMT	1895
-			10:00	Aus	EST	1971
-			10:00	AQ	EST	1992 Jul
-			10:00	Holiday	EST
+			10:00	Aus	AE%sT	1971
+			10:00	AQ	AE%sT	1992 Jul
+			10:00	Holiday	AE%sT
 
 # South Australia
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AS	1971	1985	-	Oct	lastSun	2:00s	1:00	-
-Rule	AS	1986	only	-	Oct	19	2:00s	1:00	-
-Rule	AS	1987	2007	-	Oct	lastSun	2:00s	1:00	-
-Rule	AS	1972	only	-	Feb	27	2:00s	0	-
-Rule	AS	1973	1985	-	Mar	Sun>=1	2:00s	0	-
-Rule	AS	1986	1990	-	Mar	Sun>=15	2:00s	0	-
-Rule	AS	1991	only	-	Mar	3	2:00s	0	-
-Rule	AS	1992	only	-	Mar	22	2:00s	0	-
-Rule	AS	1993	only	-	Mar	7	2:00s	0	-
-Rule	AS	1994	only	-	Mar	20	2:00s	0	-
-Rule	AS	1995	2005	-	Mar	lastSun	2:00s	0	-
-Rule	AS	2006	only	-	Apr	2	2:00s	0	-
-Rule	AS	2007	only	-	Mar	lastSun	2:00s	0	-
-Rule	AS	2008	max	-	Apr	Sun>=1	2:00s	0	-
-Rule	AS	2008	max	-	Oct	Sun>=1	2:00s	1:00	-
+Rule	AS	1971	1985	-	Oct	lastSun	2:00s	1:00	D
+Rule	AS	1986	only	-	Oct	19	2:00s	1:00	D
+Rule	AS	1987	2007	-	Oct	lastSun	2:00s	1:00	D
+Rule	AS	1972	only	-	Feb	27	2:00s	0	S
+Rule	AS	1973	1985	-	Mar	Sun>=1	2:00s	0	S
+Rule	AS	1986	1990	-	Mar	Sun>=15	2:00s	0	S
+Rule	AS	1991	only	-	Mar	3	2:00s	0	S
+Rule	AS	1992	only	-	Mar	22	2:00s	0	S
+Rule	AS	1993	only	-	Mar	7	2:00s	0	S
+Rule	AS	1994	only	-	Mar	20	2:00s	0	S
+Rule	AS	1995	2005	-	Mar	lastSun	2:00s	0	S
+Rule	AS	2006	only	-	Apr	2	2:00s	0	S
+Rule	AS	2007	only	-	Mar	lastSun	2:00s	0	S
+Rule	AS	2008	max	-	Apr	Sun>=1	2:00s	0	S
+Rule	AS	2008	max	-	Oct	Sun>=1	2:00s	1:00	D
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Australia/Adelaide	9:14:20 -	LMT	1895 Feb
-			9:00	-	CST	1899 May
-			9:30	Aus	CST	1971
-			9:30	AS	CST
+			9:00	-	ACST	1899 May
+			9:30	Aus	AC%sT	1971
+			9:30	AS	AC%sT
 
 # Tasmania
 #
 # From Paul Eggert (2005-08-16):
-# 
+# http://www.bom.gov.au/climate/averages/tables/dst_times.shtml
 # says King Island didn't observe DST from WWII until late 1971.
 #
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AT	1967	only	-	Oct	Sun>=1	2:00s	1:00	-
-Rule	AT	1968	only	-	Mar	lastSun	2:00s	0	-
-Rule	AT	1968	1985	-	Oct	lastSun	2:00s	1:00	-
-Rule	AT	1969	1971	-	Mar	Sun>=8	2:00s	0	-
-Rule	AT	1972	only	-	Feb	lastSun	2:00s	0	-
-Rule	AT	1973	1981	-	Mar	Sun>=1	2:00s	0	-
-Rule	AT	1982	1983	-	Mar	lastSun	2:00s	0	-
-Rule	AT	1984	1986	-	Mar	Sun>=1	2:00s	0	-
-Rule	AT	1986	only	-	Oct	Sun>=15	2:00s	1:00	-
-Rule	AT	1987	1990	-	Mar	Sun>=15	2:00s	0	-
-Rule	AT	1987	only	-	Oct	Sun>=22	2:00s	1:00	-
-Rule	AT	1988	1990	-	Oct	lastSun	2:00s	1:00	-
-Rule	AT	1991	1999	-	Oct	Sun>=1	2:00s	1:00	-
-Rule	AT	1991	2005	-	Mar	lastSun	2:00s	0	-
-Rule	AT	2000	only	-	Aug	lastSun	2:00s	1:00	-
-Rule	AT	2001	max	-	Oct	Sun>=1	2:00s	1:00	-
-Rule	AT	2006	only	-	Apr	Sun>=1	2:00s	0	-
-Rule	AT	2007	only	-	Mar	lastSun	2:00s	0	-
-Rule	AT	2008	max	-	Apr	Sun>=1	2:00s	0	-
+Rule	AT	1967	only	-	Oct	Sun>=1	2:00s	1:00	D
+Rule	AT	1968	only	-	Mar	lastSun	2:00s	0	S
+Rule	AT	1968	1985	-	Oct	lastSun	2:00s	1:00	D
+Rule	AT	1969	1971	-	Mar	Sun>=8	2:00s	0	S
+Rule	AT	1972	only	-	Feb	lastSun	2:00s	0	S
+Rule	AT	1973	1981	-	Mar	Sun>=1	2:00s	0	S
+Rule	AT	1982	1983	-	Mar	lastSun	2:00s	0	S
+Rule	AT	1984	1986	-	Mar	Sun>=1	2:00s	0	S
+Rule	AT	1986	only	-	Oct	Sun>=15	2:00s	1:00	D
+Rule	AT	1987	1990	-	Mar	Sun>=15	2:00s	0	S
+Rule	AT	1987	only	-	Oct	Sun>=22	2:00s	1:00	D
+Rule	AT	1988	1990	-	Oct	lastSun	2:00s	1:00	D
+Rule	AT	1991	1999	-	Oct	Sun>=1	2:00s	1:00	D
+Rule	AT	1991	2005	-	Mar	lastSun	2:00s	0	S
+Rule	AT	2000	only	-	Aug	lastSun	2:00s	1:00	D
+Rule	AT	2001	max	-	Oct	Sun>=1	2:00s	1:00	D
+Rule	AT	2006	only	-	Apr	Sun>=1	2:00s	0	S
+Rule	AT	2007	only	-	Mar	lastSun	2:00s	0	S
+Rule	AT	2008	max	-	Apr	Sun>=1	2:00s	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Australia/Hobart	9:49:16	-	LMT	1895 Sep
-			10:00	-	EST	1916 Oct 1 2:00
-			10:00	1:00	EST	1917 Feb
-			10:00	Aus	EST	1967
-			10:00	AT	EST
+			10:00	-	AEST	1916 Oct  1  2:00
+			10:00	1:00	AEDT	1917 Feb
+			10:00	Aus	AE%sT	1967
+			10:00	AT	AE%sT
 Zone Australia/Currie	9:35:28	-	LMT	1895 Sep
-			10:00	-	EST	1916 Oct 1 2:00
-			10:00	1:00	EST	1917 Feb
-			10:00	Aus	EST	1971 Jul
-			10:00	AT	EST
+			10:00	-	AEST	1916 Oct  1  2:00
+			10:00	1:00	AEDT	1917 Feb
+			10:00	Aus	AE%sT	1971 Jul
+			10:00	AT	AE%sT
 
 # Victoria
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AV	1971	1985	-	Oct	lastSun	2:00s	1:00	-
-Rule	AV	1972	only	-	Feb	lastSun	2:00s	0	-
-Rule	AV	1973	1985	-	Mar	Sun>=1	2:00s	0	-
-Rule	AV	1986	1990	-	Mar	Sun>=15	2:00s	0	-
-Rule	AV	1986	1987	-	Oct	Sun>=15	2:00s	1:00	-
-Rule	AV	1988	1999	-	Oct	lastSun	2:00s	1:00	-
-Rule	AV	1991	1994	-	Mar	Sun>=1	2:00s	0	-
-Rule	AV	1995	2005	-	Mar	lastSun	2:00s	0	-
-Rule	AV	2000	only	-	Aug	lastSun	2:00s	1:00	-
-Rule	AV	2001	2007	-	Oct	lastSun	2:00s	1:00	-
-Rule	AV	2006	only	-	Apr	Sun>=1	2:00s	0	-
-Rule	AV	2007	only	-	Mar	lastSun	2:00s	0	-
-Rule	AV	2008	max	-	Apr	Sun>=1	2:00s	0	-
-Rule	AV	2008	max	-	Oct	Sun>=1	2:00s	1:00	-
+Rule	AV	1971	1985	-	Oct	lastSun	2:00s	1:00	D
+Rule	AV	1972	only	-	Feb	lastSun	2:00s	0	S
+Rule	AV	1973	1985	-	Mar	Sun>=1	2:00s	0	S
+Rule	AV	1986	1990	-	Mar	Sun>=15	2:00s	0	S
+Rule	AV	1986	1987	-	Oct	Sun>=15	2:00s	1:00	D
+Rule	AV	1988	1999	-	Oct	lastSun	2:00s	1:00	D
+Rule	AV	1991	1994	-	Mar	Sun>=1	2:00s	0	S
+Rule	AV	1995	2005	-	Mar	lastSun	2:00s	0	S
+Rule	AV	2000	only	-	Aug	lastSun	2:00s	1:00	D
+Rule	AV	2001	2007	-	Oct	lastSun	2:00s	1:00	D
+Rule	AV	2006	only	-	Apr	Sun>=1	2:00s	0	S
+Rule	AV	2007	only	-	Mar	lastSun	2:00s	0	S
+Rule	AV	2008	max	-	Apr	Sun>=1	2:00s	0	S
+Rule	AV	2008	max	-	Oct	Sun>=1	2:00s	1:00	D
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Australia/Melbourne 9:39:52 -	LMT	1895 Feb
-			10:00	Aus	EST	1971
-			10:00	AV	EST
+			10:00	Aus	AE%sT	1971
+			10:00	AV	AE%sT
 
 # New South Wales
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	AN	1971	1985	-	Oct	lastSun	2:00s	1:00	-
-Rule	AN	1972	only	-	Feb	27	2:00s	0	-
-Rule	AN	1973	1981	-	Mar	Sun>=1	2:00s	0	-
-Rule	AN	1982	only	-	Apr	Sun>=1	2:00s	0	-
-Rule	AN	1983	1985	-	Mar	Sun>=1	2:00s	0	-
-Rule	AN	1986	1989	-	Mar	Sun>=15	2:00s	0	-
-Rule	AN	1986	only	-	Oct	19	2:00s	1:00	-
-Rule	AN	1987	1999	-	Oct	lastSun	2:00s	1:00	-
-Rule	AN	1990	1995	-	Mar	Sun>=1	2:00s	0	-
-Rule	AN	1996	2005	-	Mar	lastSun	2:00s	0	-
-Rule	AN	2000	only	-	Aug	lastSun	2:00s	1:00	-
-Rule	AN	2001	2007	-	Oct	lastSun	2:00s	1:00	-
-Rule	AN	2006	only	-	Apr	Sun>=1	2:00s	0	-
-Rule	AN	2007	only	-	Mar	lastSun	2:00s	0	-
-Rule	AN	2008	max	-	Apr	Sun>=1	2:00s	0	-
-Rule	AN	2008	max	-	Oct	Sun>=1	2:00s	1:00	-
+Rule	AN	1971	1985	-	Oct	lastSun	2:00s	1:00	D
+Rule	AN	1972	only	-	Feb	27	2:00s	0	S
+Rule	AN	1973	1981	-	Mar	Sun>=1	2:00s	0	S
+Rule	AN	1982	only	-	Apr	Sun>=1	2:00s	0	S
+Rule	AN	1983	1985	-	Mar	Sun>=1	2:00s	0	S
+Rule	AN	1986	1989	-	Mar	Sun>=15	2:00s	0	S
+Rule	AN	1986	only	-	Oct	19	2:00s	1:00	D
+Rule	AN	1987	1999	-	Oct	lastSun	2:00s	1:00	D
+Rule	AN	1990	1995	-	Mar	Sun>=1	2:00s	0	S
+Rule	AN	1996	2005	-	Mar	lastSun	2:00s	0	S
+Rule	AN	2000	only	-	Aug	lastSun	2:00s	1:00	D
+Rule	AN	2001	2007	-	Oct	lastSun	2:00s	1:00	D
+Rule	AN	2006	only	-	Apr	Sun>=1	2:00s	0	S
+Rule	AN	2007	only	-	Mar	lastSun	2:00s	0	S
+Rule	AN	2008	max	-	Apr	Sun>=1	2:00s	0	S
+Rule	AN	2008	max	-	Oct	Sun>=1	2:00s	1:00	D
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Australia/Sydney	10:04:52 -	LMT	1895 Feb
-			10:00	Aus	EST	1971
-			10:00	AN	EST
+			10:00	Aus	AE%sT	1971
+			10:00	AN	AE%sT
 Zone Australia/Broken_Hill 9:25:48 -	LMT	1895 Feb
-			10:00	-	EST	1896 Aug 23
-			9:00	-	CST	1899 May
-			9:30	Aus	CST	1971
-			9:30	AN	CST	2000
-			9:30	AS	CST
+			10:00	-	AEST	1896 Aug 23
+			9:00	-	ACST	1899 May
+			9:30	Aus	AC%sT	1971
+			9:30	AN	AC%sT	2000
+			9:30	AS	AC%sT
 
 # Lord Howe Island
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	LH	1981	1984	-	Oct	lastSun	2:00	1:00	-
-Rule	LH	1982	1985	-	Mar	Sun>=1	2:00	0	-
-Rule	LH	1985	only	-	Oct	lastSun	2:00	0:30	-
-Rule	LH	1986	1989	-	Mar	Sun>=15	2:00	0	-
-Rule	LH	1986	only	-	Oct	19	2:00	0:30	-
-Rule	LH	1987	1999	-	Oct	lastSun	2:00	0:30	-
-Rule	LH	1990	1995	-	Mar	Sun>=1	2:00	0	-
-Rule	LH	1996	2005	-	Mar	lastSun	2:00	0	-
-Rule	LH	2000	only	-	Aug	lastSun	2:00	0:30	-
-Rule	LH	2001	2007	-	Oct	lastSun	2:00	0:30	-
-Rule	LH	2006	only	-	Apr	Sun>=1	2:00	0	-
-Rule	LH	2007	only	-	Mar	lastSun	2:00	0	-
-Rule	LH	2008	max	-	Apr	Sun>=1	2:00	0	-
-Rule	LH	2008	max	-	Oct	Sun>=1	2:00	0:30	-
+Rule	LH	1981	1984	-	Oct	lastSun	2:00	1:00	D
+Rule	LH	1982	1985	-	Mar	Sun>=1	2:00	0	S
+Rule	LH	1985	only	-	Oct	lastSun	2:00	0:30	D
+Rule	LH	1986	1989	-	Mar	Sun>=15	2:00	0	S
+Rule	LH	1986	only	-	Oct	19	2:00	0:30	D
+Rule	LH	1987	1999	-	Oct	lastSun	2:00	0:30	D
+Rule	LH	1990	1995	-	Mar	Sun>=1	2:00	0	S
+Rule	LH	1996	2005	-	Mar	lastSun	2:00	0	S
+Rule	LH	2000	only	-	Aug	lastSun	2:00	0:30	D
+Rule	LH	2001	2007	-	Oct	lastSun	2:00	0:30	D
+Rule	LH	2006	only	-	Apr	Sun>=1	2:00	0	S
+Rule	LH	2007	only	-	Mar	lastSun	2:00	0	S
+Rule	LH	2008	max	-	Apr	Sun>=1	2:00	0	S
+Rule	LH	2008	max	-	Oct	Sun>=1	2:00	0:30	D
 Zone Australia/Lord_Howe 10:36:20 -	LMT	1895 Feb
-			10:00	-	EST	1981 Mar
-			10:30	LH	LHST
+			10:00	-	AEST	1981 Mar
+			10:30	LH	LH%sT
 
 # Australian miscellany
 #
@@ -244,8 +243,8 @@ Zone Australia/Lord_Howe 10:36:20 -	LMT	1895 Feb
 # Permanent occupation (scientific station) 1911-1915 and since 25 March 1948;
 # sealing and penguin oil station operated Nov 1899 to Apr 1919.  See the
 # Tasmania Parks & Wildlife Service history of sealing at Macquarie Island
-# 
-# .
+# http://www.parks.tas.gov.au/index.aspx?base=1828
+# http://www.parks.tas.gov.au/index.aspx?base=1831
 # Guess that it was like Australia/Hobart while inhabited before 2010.
 #
 # From Steffen Thorsen (2010-03-10):
@@ -256,16 +255,16 @@ Zone Australia/Lord_Howe 10:36:20 -	LMT	1895 Feb
 #
 # From Arthur David Olson (2013-05-23):
 # The 1919 transition is overspecified below so pre-2013 zics
-# will produce a binary file with an EST-type as the first 32-bit type;
+# will produce a binary file with an [A]EST-type as the first 32-bit type;
 # this is required for correct handling of times before 1916 by
 # pre-2013 versions of localtime.
 Zone Antarctica/Macquarie 0	-	zzz	1899 Nov
-			10:00	-	EST	1916 Oct 1 2:00
-			10:00	1:00	EST	1917 Feb
-			10:00	Aus	EST	1919 Apr 1 0:00s
+			10:00	-	AEST	1916 Oct  1  2:00
+			10:00	1:00	AEDT	1917 Feb
+			10:00	Aus	AE%sT	1919 Apr  1  0:00s
 			0	-	zzz	1948 Mar 25
-			10:00	Aus	EST	1967
-			10:00	AT	EST	2010 Apr 4 3:00
+			10:00	Aus	AE%sT	1967
+			10:00	AT	AE%sT	2010 Apr  4  3:00
 			11:00	-	MIST	# Macquarie I Standard Time
 
 # Christmas
@@ -273,24 +272,14 @@ Zone Antarctica/Macquarie 0	-	zzz	1899 Nov
 Zone Indian/Christmas	7:02:52 -	LMT	1895 Feb
 			7:00	-	CXT	# Christmas Island Time
 
-# Cook Is
-# From Shanks & Pottenger:
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Cook	1978	only	-	Nov	12	0:00	0:30	HS
-Rule	Cook	1979	1991	-	Mar	Sun>=1	0:00	0	-
-Rule	Cook	1979	1990	-	Oct	lastSun	0:00	0:30	HS
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Rarotonga	-10:39:04 -	LMT	1901		# Avarua
-			-10:30	-	CKT	1978 Nov 12	# Cook Is Time
-			-10:00	Cook	CK%sT
-
-# Cocos
+# Cocos (Keeling) Is
 # These islands were ruled by the Ross family from about 1830 to 1978.
 # We don't know when standard time was introduced; for now, we guess 1900.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Indian/Cocos	6:27:40	-	LMT	1900
 			6:30	-	CCT	# Cocos Islands Time
 
+
 # Fiji
 
 # Milne gives 11:55:44 for Suva.
@@ -300,20 +289,13 @@ Zone	Indian/Cocos	6:27:40	-	LMT	1900
 # from November 29th 2009  to April 25th 2010.
 #
 # "Daylight savings to commence this month"
-# 
 # http://www.radiofiji.com.fj/fullstory.php?id=23719
-# 
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_fiji01.html
-# 
 
 # From Steffen Thorsen (2009-11-10):
 # The Fiji Government has posted some more details about the approved
 # amendments:
-# 
 # http://www.fiji.gov.fj/publish/page_16198.shtml
-# 
 
 # From Steffen Thorsen (2010-03-03):
 # The Cabinet in Fiji has decided to end DST about a month early, on
@@ -322,35 +304,24 @@ Zone	Indian/Cocos	6:27:40	-	LMT	1900
 # 2011 (last Sunday a good guess?).
 #
 # Official source:
-# 
 # http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=1096:3310-cabinet-approves-change-in-daylight-savings-dates&catid=49:cabinet-releases&Itemid=166
-# 
 #
 # A bit more background info here:
-# 
 # http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html
-# 
 
 # From Alexander Krivenyshev (2010-10-24):
 # According to Radio Fiji and Fiji Times online, Fiji will end DST 3
 # weeks earlier than expected - on March 6, 2011, not March 27, 2011...
 # Here is confirmation from Government of the Republic of the Fiji Islands,
 # Ministry of Information (fiji.gov.fj) web site:
-# 
 # http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155
-# 
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_fiji04.html
-# 
 
 # From Steffen Thorsen (2011-10-03):
 # Now the dates have been confirmed, and at least our start date
 # assumption was correct (end date was one week wrong).
 #
-# 
-# www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155
-# 
+# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155
 # which says
 # Members of the public are reminded to change their time to one hour in
 # advance at 2am to 3am on October 23, 2011 and one hour back at 3am to
@@ -360,9 +331,7 @@ Zone	Indian/Cocos	6:27:40	-	LMT	1900
 # Another change to the Fiji DST end date. In the TZ database the end date for
 # Fiji DST 2012, is currently Feb 26. This has been changed to Jan 22.
 #
-# 
 # http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=5017:amendments-to-daylight-savings&catid=71:press-releases&Itemid=155
-# 
 # states:
 #
 # The end of daylight saving scheduled initially for the 26th of February 2012
@@ -400,16 +369,16 @@ Rule	Fiji	2011	only	-	Mar	Sun>=1	3:00	0	-
 Rule	Fiji	2012	2013	-	Jan	Sun>=18	3:00	0	-
 Rule	Fiji	2014	max	-	Jan	Sun>=18	2:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Fiji	11:55:44 -	LMT	1915 Oct 26	# Suva
+Zone	Pacific/Fiji	11:55:44 -	LMT	1915 Oct 26 # Suva
 			12:00	Fiji	FJ%sT	# Fiji Time
 
 # French Polynesia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Gambier	 -8:59:48 -	LMT	1912 Oct	# Rikitea
+Zone	Pacific/Gambier	 -8:59:48 -	LMT	1912 Oct # Rikitea
 			 -9:00	-	GAMT	# Gambier Time
 Zone	Pacific/Marquesas -9:18:00 -	LMT	1912 Oct
 			 -9:30	-	MART	# Marquesas Time
-Zone	Pacific/Tahiti	 -9:58:16 -	LMT	1912 Oct	# Papeete
+Zone	Pacific/Tahiti	 -9:58:16 -	LMT	1912 Oct # Papeete
 			-10:00	-	TAHT	# Tahiti Time
 # Clipperton (near North America) is administered from French Polynesia;
 # it is uninhabited.
@@ -417,14 +386,14 @@ Zone	Pacific/Tahiti	 -9:58:16 -	LMT	1912 Oct	# Papeete
 # Guam
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Guam	-14:21:00 -	LMT	1844 Dec 31
-			 9:39:00 -	LMT	1901		# Agana
-			10:00	-	GST	2000 Dec 23	# Guam
+			 9:39:00 -	LMT	1901        # Agana
+			10:00	-	GST	2000 Dec 23 # Guam
 			10:00	-	ChST	# Chamorro Standard Time
 
 # Kiribati
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Tarawa	 11:32:04 -	LMT	1901		# Bairiki
-			 12:00	-	GILT		 # Gilbert Is Time
+Zone Pacific/Tarawa	 11:32:04 -	LMT	1901 # Bairiki
+			 12:00	-	GILT	# Gilbert Is Time
 Zone Pacific/Enderbury	-11:24:20 -	LMT	1901
 			-12:00	-	PHOT	1979 Oct # Phoenix Is Time
 			-11:00	-	PHOT	1995
@@ -438,7 +407,7 @@ Zone Pacific/Kiritimati	-10:29:20 -	LMT	1901
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Saipan	-14:17:00 -	LMT	1844 Dec 31
 			 9:43:00 -	LMT	1901
-			 9:00	-	MPT	1969 Oct # N Mariana Is Time
+			 9:00	-	MPT	1969 Oct    # N Mariana Is Time
 			10:00	-	MPT	2000 Dec 23
 			10:00	-	ChST	# Chamorro Standard Time
 
@@ -449,24 +418,24 @@ Zone Pacific/Majuro	11:24:48 -	LMT	1901
 			12:00	-	MHT
 Zone Pacific/Kwajalein	11:09:20 -	LMT	1901
 			11:00	-	MHT	1969 Oct
-			-12:00	-	KWAT	1993 Aug 20	# Kwajalein Time
+			-12:00	-	KWAT	1993 Aug 20 # Kwajalein Time
 			12:00	-	MHT
 
 # Micronesia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Chuuk	10:07:08 -	LMT	1901
-			10:00	-	CHUT			# Chuuk Time
-Zone Pacific/Pohnpei	10:32:52 -	LMT	1901		# Kolonia
-			11:00	-	PONT			# Pohnpei Time
+			10:00	-	CHUT	# Chuuk Time
+Zone Pacific/Pohnpei	10:32:52 -	LMT	1901 # Kolonia
+			11:00	-	PONT	# Pohnpei Time
 Zone Pacific/Kosrae	10:51:56 -	LMT	1901
-			11:00	-	KOST	1969 Oct	# Kosrae Time
+			11:00	-	KOST	1969 Oct # Kosrae Time
 			12:00	-	KOST	1999
 			11:00	-	KOST
 
 # Nauru
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Nauru	11:07:40 -	LMT	1921 Jan 15	# Uaobe
-			11:30	-	NRT	1942 Mar 15	# Nauru Time
+Zone	Pacific/Nauru	11:07:40 -	LMT	1921 Jan 15 # Uaobe
+			11:30	-	NRT	1942 Mar 15 # Nauru Time
 			9:00	-	JST	1944 Aug 15
 			11:30	-	NRT	1979 May
 			12:00	-	NRT
@@ -479,7 +448,7 @@ Rule	NC	1996	only	-	Dec	 1	2:00s	1:00	S
 # Shanks & Pottenger say the following was at 2:00; go with IATA.
 Rule	NC	1997	only	-	Mar	 2	2:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Noumea	11:05:48 -	LMT	1912 Jan 13
+Zone	Pacific/Noumea	11:05:48 -	LMT	1912 Jan 13 # Nouméa
 			11:00	NC	NC%sT
 
 
@@ -496,7 +465,8 @@ Rule	NZ	1934	1940	-	Apr	lastSun	2:00	0	M
 Rule	NZ	1934	1940	-	Sep	lastSun	2:00	0:30	S
 Rule	NZ	1946	only	-	Jan	 1	0:00	0	S
 # Since 1957 Chatham has been 45 minutes ahead of NZ, but there's no
-# convenient notation for this so we must duplicate the Rule lines.
+# convenient single notation for the date and time of this transition
+# so we must duplicate the Rule lines.
 Rule	NZ	1974	only	-	Nov	Sun>=1	2:00s	1:00	D
 Rule	Chatham	1974	only	-	Nov	Sun>=1	2:45s	1:00	D
 Rule	NZ	1975	only	-	Feb	lastSun	2:00s	0	S
@@ -519,13 +489,14 @@ Rule	Chatham	2008	max	-	Apr	Sun>=1	2:45s	0	S
 Zone Pacific/Auckland	11:39:04 -	LMT	1868 Nov  2
 			11:30	NZ	NZ%sT	1946 Jan  1
 			12:00	NZ	NZ%sT
-Zone Pacific/Chatham	12:13:48 -	LMT	1957 Jan  1
+Zone Pacific/Chatham	12:13:48 -	LMT	1868 Nov  2
+			12:15	-	CHAST	1946 Jan  1
 			12:45	Chatham	CHA%sT
 
 Link Pacific/Auckland Antarctica/McMurdo
 
 # Auckland Is
-# uninhabited; Maori and Moriori, colonial settlers, pastoralists, sealers,
+# uninhabited; Māori and Moriori, colonial settlers, pastoralists, sealers,
 # and scientific personnel have wintered
 
 # Campbell I
@@ -534,48 +505,58 @@ Link Pacific/Auckland Antarctica/McMurdo
 # previously whalers, sealers, pastoralists, and scientific personnel wintered
 # was probably like Pacific/Auckland
 
+# Cook Is
+# From Shanks & Pottenger:
+# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+Rule	Cook	1978	only	-	Nov	12	0:00	0:30	HS
+Rule	Cook	1979	1991	-	Mar	Sun>=1	0:00	0	-
+Rule	Cook	1979	1990	-	Oct	lastSun	0:00	0:30	HS
+# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+Zone Pacific/Rarotonga	-10:39:04 -	LMT	1901        # Avarua
+			-10:30	-	CKT	1978 Nov 12 # Cook Is Time
+			-10:00	Cook	CK%sT
+
 ###############################################################################
 
 
 # Niue
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Niue	-11:19:40 -	LMT	1901		# Alofi
-			-11:20	-	NUT	1951	# Niue Time
-			-11:30	-	NUT	1978 Oct 1
+Zone	Pacific/Niue	-11:19:40 -	LMT	1901        # Alofi
+			-11:20	-	NUT	1951        # Niue Time
+			-11:30	-	NUT	1978 Oct  1
 			-11:00	-	NUT
 
 # Norfolk
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Norfolk	11:11:52 -	LMT	1901		# Kingston
-			11:12	-	NMT	1951	# Norfolk Mean Time
-			11:30	-	NFT		# Norfolk Time
+Zone	Pacific/Norfolk	11:11:52 -	LMT	1901 # Kingston
+			11:12	-	NMT	1951 # Norfolk Mean Time
+			11:30	-	NFT	# Norfolk Time
 
 # Palau (Belau)
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Palau	8:57:56 -	LMT	1901		# Koror
+Zone Pacific/Palau	8:57:56 -	LMT	1901 # Koror
 			9:00	-	PWT	# Palau Time
 
 # Papua New Guinea
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Port_Moresby 9:48:40 -	LMT	1880
-			9:48:32	-	PMMT	1895	# Port Moresby Mean Time
-			10:00	-	PGT		# Papua New Guinea Time
+			9:48:32	-	PMMT	1895 # Port Moresby Mean Time
+			10:00	-	PGT	# Papua New Guinea Time
 
 # Pitcairn
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Pitcairn	-8:40:20 -	LMT	1901		# Adamstown
-			-8:30	-	PNT	1998 Apr 27 00:00
+Zone Pacific/Pitcairn	-8:40:20 -	LMT	1901        # Adamstown
+			-8:30	-	PNT	1998 Apr 27  0:00
 			-8:00	-	PST	# Pitcairn Standard Time
 
 # American Samoa
 Zone Pacific/Pago_Pago	 12:37:12 -	LMT	1879 Jul  5
 			-11:22:48 -	LMT	1911
-			-11:30	-	SAMT	1950		# Samoa Time
-			-11:00	-	NST	1967 Apr	# N=Nome
-			-11:00	-	BST	1983 Nov 30	# B=Bering
-			-11:00	-	SST			# S=Samoa
+			-11:00	-	NST	1967 Apr    # N=Nome
+			-11:00	-	BST	1983 Nov 30 # B=Bering
+			-11:00	-	SST	            # S=Samoa
 
-# Samoa
+# Samoa (formerly and also known as Western Samoa)
 
 # From Steffen Thorsen (2009-10-16):
 # We have been in contact with the government of Samoa again, and received
@@ -586,141 +567,80 @@ Zone Pacific/Pago_Pago	 12:37:12 -	LMT	1879 Jul  5
 # Sunday of April 2011."
 #
 # Background info:
-# 
 # http://www.timeanddate.com/news/time/samoa-dst-plan-2009.html
-# 
 #
 # Samoa's Daylight Saving Time Act 2009 is available here, but does not
 # contain any dates:
-# 
 # http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf
-# 
 
 # From Laupue Raymond Hughes (2010-10-07):
 # Please see
-# 
 # http://www.mcil.gov.ws
-# ,
 # the Ministry of Commerce, Industry and Labour (sideframe) "Last Sunday
 # September 2010 (26/09/10) - adjust clocks forward from 12:00 midnight
 # to 01:00am and First Sunday April 2011 (03/04/11) - adjust clocks
 # backwards from 1:00am to 12:00am"
 
 # From Laupue Raymond Hughes (2011-03-07):
-# I believe this will be posted shortly on the website
-# 
-# www.mcil.gov.ws
-# 
+# [http://www.mcil.gov.ws/ftcd/daylight_saving_2011.pdf]
 #
-# PUBLIC NOTICE ON DAYLIGHT SAVING TIME
-#
-# Pursuant to the Daylight Saving Act 2009 and Cabinets decision,
-# businesses and the general public are hereby advised that daylight
-# saving time is on the first Saturday of April 2011 (02/04/11).
-#
-# The public is therefore advised that when the standard time strikes
-# the hour of four oclock (4.00am or 0400 Hours) on the 2nd April 2011,
-# then all instruments used to measure standard time are to be
-# adjusted/changed to three oclock (3:00am or 0300Hrs).
-#
-# Margaret Fruean ACTING CHIEF EXECUTIVE OFFICER MINISTRY OF COMMERCE,
-# INDUSTRY AND LABOUR 28th February 2011
+# ... when the standard time strikes the hour of four o'clock (4.00am
+# or 0400 Hours) on the 2nd April 2011, then all instruments used to
+# measure standard time are to be adjusted/changed to three o'clock
+# (3:00am or 0300Hrs).
 
-# From David Zuelke (2011-05-09):
+# From David Zülke (2011-05-09):
 # Subject: Samoa to move timezone from east to west of international date line
 #
-# 
 # http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963
-# 
 
-# From Mark Sim-Smith (2011-08-17):
-# I have been in contact with Leilani Tuala Warren from the Samoa Law
-# Reform Commission, and she has sent me a copy of the Bill that she
-# confirmed has been passed...Most of the sections are about maps rather
-# than the time zone change, but I'll paste the relevant bits below. But
-# the essence is that at midnight 29 Dec (UTC-11 I suppose), Samoa
-# changes from UTC-11 to UTC+13:
-#
-# International Date Line Bill 2011
-#
-# AN ACT to provide for the change to standard time in Samoa and to make
-# consequential amendments to the position of the International Date
-# Line, and for related purposes.
-#
-# BE IT ENACTED by the Legislative Assembly of Samoa in Parliament
-# assembled as follows:
-#
-# 1. Short title and commencement-(1) This Act may be cited as the
-# International Date Line Act 2011. (2) Except for section 5(3) this Act
-# commences at 12 o'clock midnight, on Thursday 29th December 2011. (3)
-# Section 5(3) commences on the date of assent by the Head of State.
-#
-# [snip]
-#
-# 3. Interpretation - [snip] "Samoa standard time" in this Act and any
-# other statute of Samoa which refers to 'Samoa standard time' means the
-# time 13 hours in advance of Co-ordinated Universal Time.
-#
-# 4. Samoa standard time - (1) Upon the commencement of this Act, Samoa
-# standard time shall be set at 13 hours in advance of Co-ordinated
-# Universal Time for the whole of Samoa. (2) All references to Samoa's
-# time zone and to Samoa standard time in Samoa in all legislation and
-# instruments after the commencement of this Act shall be references to
-# Samoa standard time as provided for in this Act. (3) Nothing in this
-# Act affects the provisions of the Daylight Saving Act 2009, except that
-# it defines Samoa standard time....
+# From Paul Eggert (2014-06-27):
+# The International Date Line Act 2011
+# http://www.parliament.gov.ws/images/ACTS/International_Date_Line_Act__2011_-_Eng.pdf
+# changed Samoa from UTC-11 to UTC+13, effective "12 o'clock midnight, on
+# Thursday 29th December 2011".  The International Date Line was adjusted
+# accordingly.
 
 # From Laupue Raymond Hughes (2011-09-02):
-# 
 # http://www.mcil.gov.ws/mcil_publications.html
-# 
 #
 # here is the official website publication for Samoa DST and dateline change
 #
 # DST
-# Year	End	Time	Start	Time
-# 2011	- - -	- - -	24 September	3:00am to 4:00am
-# 2012	01 April	4:00am to 3:00am	- - -	- - -
+# Year  End      Time              Start        Time
+# 2011  - - -    - - -             24 September 3:00am to 4:00am
+# 2012  01 April 4:00am to 3:00am  - - -        - - -
 #
 # Dateline Change skip Friday 30th Dec 2011
 # Thursday 29th December 2011	23:59:59 Hours
 # Saturday 31st December 2011	00:00:00 Hours
 #
-# Clarification by Tim Parenti (2012-01-03):
-# Although Samoa has used Daylight Saving Time in the 2010-2011 and 2011-2012
-# seasons, there is not yet any indication that this trend will continue on
-# a regular basis. For now, we have explicitly listed the transitions below.
-#
-# From Nicky (2012-09-10):
+# From Nicholas Pereira (2012-09-10):
 # Daylight Saving Time commences on Sunday 30th September 2012 and
-# ends on Sunday 7th of April 2013.
-#
-# Please find link below for more information.
+# ends on Sunday 7th of April 2013....
 # http://www.mcil.gov.ws/mcil_publications.html
 #
-# That publication also includes dates for Summer of 2013/4 as well
-# which give the impression of a pattern in selecting dates for the
-# future, so for now, we will guess this will continue.
+# From Paul Eggert (2014-07-08):
+# That web page currently lists transitions for 2012/3 and 2013/4.
+# Assume the pattern instituted in 2012 will continue indefinitely.
 
-# Western Samoa
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+Rule	WS	2010	only	-	Sep	lastSun	0:00	1	D
+Rule	WS	2011	only	-	Apr	Sat>=1	4:00	0	S
+Rule	WS	2011	only	-	Sep	lastSat	3:00	1	D
+Rule	WS	2012	max	-	Apr	Sun>=1	4:00	0	S
 Rule	WS	2012	max	-	Sep	lastSun	3:00	1	D
-Rule	WS	2012	max	-	Apr	Sun>=1	4:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Apia	 12:33:04 -	LMT	1879 Jul  5
 			-11:26:56 -	LMT	1911
-			-11:30	-	SAMT	1950		# Samoa Time
-			-11:00	-	WST	2010 Sep 26
-			-11:00	1:00	WSDT	2011 Apr 2 4:00
-			-11:00	-	WST	2011 Sep 24 3:00
-			-11:00	1:00	WSDT	2011 Dec 30
-			 13:00	1:00	WSDT	2012 Apr Sun>=1 4:00
+			-11:30	-	WSST	1950
+			-11:00	WS	S%sT	2011 Dec 29 24:00 # S=Samoa
 			 13:00	WS	WS%sT
 
 # Solomon Is
 # excludes Bougainville, for which see Papua New Guinea
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Guadalcanal 10:39:48 -	LMT	1912 Oct	# Honiara
+Zone Pacific/Guadalcanal 10:39:48 -	LMT	1912 Oct # Honiara
 			11:00	-	SBT	# Solomon Is Time
 
 # Tokelau Is
@@ -744,7 +664,7 @@ Zone Pacific/Guadalcanal 10:39:48 -	LMT	1912 Oct	# Honiara
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Fakaofo	-11:24:56 -	LMT	1901
-			-11:00	-	TKT 2011 Dec 30	# Tokelau Time
+			-11:00	-	TKT	2011 Dec 30 # Tokelau Time
 			13:00	-	TKT
 
 # Tonga
@@ -804,8 +724,8 @@ Zone Pacific/Funafuti	11:56:52 -	LMT	1901
 # time from Operation Newsreel (Hardtack I/Teak shot, 1958-08-01) to the last
 # Operation Fishbowl shot (Tightrope, 1962-11-04).... [See] Herman Hoerlin,
 # "The United States High-Altitude Test Experience: A Review Emphasizing the
-# Impact on the Environment", Los Alamos LA-6405, Oct 1976
-# .
+# Impact on the Environment", Los Alamos LA-6405, Oct 1976.
+# http://www.fas.org/sgp/othergov/doe/lanl/docs1/00322994.pdf
 # See the table on page 4 where he lists GMT and local times for the tests; a
 # footnote for the JI tests reads that local time is "JI time = Hawaii Time
 # Minus One Hour".
@@ -820,7 +740,7 @@ Zone Pacific/Funafuti	11:56:52 -	LMT	1901
 # From Mark Brader (2005-01-23):
 # [Fallacies and Fantasies of Air Transport History, by R.E.G. Davies,
 # published 1994 by Paladwr Press, McLean, VA, USA; ISBN 0-9626483-5-3]
-# reproduced a Pan American Airways timeables from 1936, for their weekly
+# reproduced a Pan American Airways timetable from 1936, for their weekly
 # "Orient Express" flights between San Francisco and Manila, and connecting
 # flights to Chicago and the US East Coast.  As it uses some time zone
 # designations that I've never seen before:....
@@ -830,9 +750,9 @@ Zone Pacific/Funafuti	11:56:52 -	LMT	1901
 Zone Pacific/Midway	-11:49:28 -	LMT	1901
 			-11:00	-	NST	1956 Jun  3
 			-11:00	1:00	NDT	1956 Sep  2
-			-11:00	-	NST	1967 Apr	# N=Nome
-			-11:00	-	BST	1983 Nov 30	# B=Bering
-			-11:00	-	SST			# S=Samoa
+			-11:00	-	NST	1967 Apr    # N=Nome
+			-11:00	-	BST	1983 Nov 30 # B=Bering
+			-11:00	-	SST	            # S=Samoa
 
 # Palmyra
 # uninhabited since World War II; was probably like Pacific/Kiritimati
@@ -852,7 +772,7 @@ Rule	Vanuatu	1985	1991	-	Sep	Sun>=23	0:00	1:00	S
 Rule	Vanuatu	1992	1993	-	Jan	Sun>=23	0:00	0	-
 Rule	Vanuatu	1992	only	-	Oct	Sun>=23	0:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Efate	11:13:16 -	LMT	1912 Jan 13		# Vila
+Zone	Pacific/Efate	11:13:16 -	LMT	1912 Jan 13 # Vila
 			11:00	Vanuatu	VU%sT	# Vanuatu Time
 
 # Wallis and Futuna
@@ -864,9 +784,10 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 
 # NOTES
 
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future).  For more, please see
+# the file CONTRIBUTING in the tz distribution.
 
 # From Paul Eggert (2013-02-21):
 # A good source for time zone historical data outside the U.S. is
@@ -887,165 +808,188 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # I found in the UCLA library.
 #
 # For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
-# .
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
+# http://www.jstor.org/stable/1774359
 #
 # A reliable and entertaining source about time zones is
 # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
 #
-# I invented the abbreviations marked `*' in the following table;
+# I invented the abbreviations marked '*' in the following table;
 # the rest are from earlier versions of this file, or from other sources.
 # Corrections are welcome!
-#		std dst
-#		LMT	Local Mean Time
-#	  8:00	WST WST	Western Australia
-#	  8:45	CWST CWST Central Western Australia*
-#	  9:00	JST	Japan
-#	  9:30	CST CST	Central Australia
-#	 10:00	EST EST	Eastern Australia
-#	 10:00	ChST	Chamorro
-#	 10:30	LHST LHST Lord Howe*
-#	 11:30	NZMT NZST New Zealand through 1945
-#	 12:00	NZST NZDT New Zealand 1946-present
-#	 12:45	CHAST CHADT Chatham*
-#	-11:00	SST	Samoa
-#	-10:00	HST	Hawaii
-#	- 8:00	PST	Pitcairn*
+#		std	dst
+#		LMT		Local Mean Time
+#	  8:00	AWST	AWDT	Western Australia
+#	  8:45	ACWST	ACWDT	Central Western Australia*
+#	  9:00	JST		Japan
+#	  9:30	ACST	ACDT	Central Australia
+#	 10:00	AEST	AEDT	Eastern Australia
+#	 10:00	ChST		Chamorro
+#	 10:30	LHST	LHDT	Lord Howe*
+#	 11:30	NZMT	NZST	New Zealand through 1945
+#	 12:00	NZST	NZDT	New Zealand 1946-present
+#	 12:15	CHAST		Chatham through 1945*
+#	 12:45	CHAST	CHADT	Chatham 1946-present*
+#	 13:00	WSST	WSDT	(western) Samoa 2011-present*
+#	-11:30	WSST		Western Samoa through 1950*
+#	-11:00	SST		Samoa
+#	-10:00	HST		Hawaii
+#	- 8:00	PST		Pitcairn*
 #
-# See the `northamerica' file for Hawaii.
-# See the `southamerica' file for Easter I and the Galapagos Is.
+# See the 'northamerica' file for Hawaii.
+# See the 'southamerica' file for Easter I and the Galápagos Is.
 
 ###############################################################################
 
 # Australia
 
+# From Paul Eggert (2014-06-30):
+# Daylight saving time has long been controversial in Australia, pitting
+# region against region, rural against urban, and local against global.
+# For example, in her review of Graeme Davison's _The Unforgiving
+# Minute: how Australians learned to tell the time_ (1993), Perth native
+# Phillipa J Martyr wrote, "The section entitled 'Saving Daylight' was
+# very informative, but was (as can, sadly, only be expected from a
+# Melbourne-based study) replete with the usual chuckleheaded
+# Queenslanders and straw-chewing yokels from the West prattling fables
+# about fading curtains and crazed farm animals."
+# Electronic Journal of Australian and New Zealand History (1997-03-03)
+# http://www.jcu.edu.au/aff/history/reviews/davison.htm
+
 # From Paul Eggert (2005-12-08):
-# 
 # Implementation Dates of Daylight Saving Time within Australia
-#  summarizes daylight saving issues in Australia.
+# http://www.bom.gov.au/climate/averages/tables/dst_times.shtml
+# summarizes daylight saving issues in Australia.
 
 # From Arthur David Olson (2005-12-12):
-# 
 # Lawlink NSW:Daylight Saving in New South Wales
-#  covers New South Wales in particular.
+# http://www.lawlink.nsw.gov.au/lawlink/Corporate/ll_agdinfo.nsf/pages/community_relations_daylight_saving
+# covers New South Wales in particular.
 
 # From John Mackin (1991-03-06):
-# We in Australia have _never_ referred to DST as `daylight' time.
-# It is called `summer' time.  Now by a happy coincidence, `summer'
-# and `standard' happen to start with the same letter; hence, the
+# We in Australia have _never_ referred to DST as 'daylight' time.
+# It is called 'summer' time.  Now by a happy coincidence, 'summer'
+# and 'standard' happen to start with the same letter; hence, the
 # abbreviation does _not_ change...
 # The legislation does not actually define abbreviations, at least
 # in this State, but the abbreviation is just commonly taken to be the
 # initials of the phrase, and the legislation here uniformly uses
-# the phrase `summer time' and does not use the phrase `daylight
+# the phrase 'summer time' and does not use the phrase 'daylight
 # time'.
 # Announcers on the Commonwealth radio network, the ABC (for Australian
-# Broadcasting Commission), use the phrases `Eastern Standard Time'
-# or `Eastern Summer Time'.  (Note, though, that as I say in the
+# Broadcasting Commission), use the phrases 'Eastern Standard Time'
+# or 'Eastern Summer Time'.  (Note, though, that as I say in the
 # current australasia file, there is really no such thing.)  Announcers
 # on its overseas service, Radio Australia, use the same phrases
-# prefixed by the word `Australian' when referring to local times;
+# prefixed by the word 'Australian' when referring to local times;
 # time announcements on that service, naturally enough, are made in UTC.
 
-# From Arthur David Olson (1992-03-08):
-# Given the above, what's chosen for year-round use is:
-#	CST	for any place operating at a GMTOFF of 9:30
-#	WST	for any place operating at a GMTOFF of 8:00
-#	EST	for any place operating at a GMTOFF of 10:00
-
-# From Chuck Soper (2006-06-01):
-# I recently found this Australian government web page on time zones:
-# 
-# And this government web page lists time zone names and abbreviations:
-# 
-
-# From Paul Eggert (2001-04-05), summarizing a long discussion about "EST"
-# versus "AEST" etc.:
+# From Paul Eggert (2014-06-30):
 #
-# I see the following points of dispute:
+# Inspired by Mackin's remarks quoted above, earlier versions of this
+# file used "EST" for both Eastern Standard Time and Eastern Summer
+# Time in Australia, and similarly for "CST", "CWST", and "WST".
+# However, these abbreviations were confusing and were not common
+# practice among Australians, and there were justifiable complaints
+# about them, so I attempted to survey current Australian usage.
+# For the tz database, the full English phrase is not that important;
+# what matters is the abbreviation.  It's difficult to survey the web
+# directly for abbreviation usage, as there are so many false hits for
+# strings like "EST" and "EDT", so I looked for pages that defined an
+# abbreviation for eastern or central DST in Australia, and got the
+# following numbers of unique hits for the listed Google queries:
 #
-# * How important are unique time zone abbreviations?
+#   10 "Eastern Daylight Time AEST" site:au [some are false hits]
+#   10 "Eastern Summer Time AEST" site:au
+#   10 "Summer Time AEDT" site:au
+#   13 "EDST Eastern Daylight Saving Time" site:au
+#   18 "Summer Time ESST" site:au
+#   28 "Eastern Daylight Saving Time EDST" site:au
+#   39 "EDT Eastern Daylight Time" site:au [some are false hits]
+#   53 "Eastern Daylight Time EDT" site:au [some are false hits]
+#   54 "AEDT Australian Eastern Daylight Time" site:au
+#  182 "Eastern Daylight Time AEDT" site:au
 #
-#   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.
+#   17 "Central Daylight Time CDT" site:au [some are false hits]
+#   46 "Central Daylight Time ACDT" site:au
 #
-#   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.
+# I tried several other variants (e.g., "Eastern Summer Time EST") but
+# they all returned fewer than 10 unique hits.  I also looked for pages
+# mentioning both "western standard time" and an abbreviation, since
+# there is no WST in the US to generate false hits, and found:
 #
-# * Does the relevant legislation indicate which abbreviations should be used?
+#  156 "western standard time" AWST site:au
+#  226 "western standard time" WST site:au
 #
-#   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.
+# I then surveyed the top ten newspapers in Australia by circulation as
+# listed in Wikipedia, using Google queries like "AEDT site:heraldsun.com.au"
+# and obtaining estimated counts from the initial page of search results.
+# All ten papers greatly preferred "AEDT" to "EDT".  The papers
+# surveyed were the Herald Sun, The Daily Telegraph, The Courier-Mail,
+# The Sydney Morning Herald, The West Australian, The Age, The Advertiser,
+# The Australian, The Financial Review, and The Herald (Newcastle).
 #
-#   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.
+# I also searched for historical usage, to see whether abbreviations
+# like "AEDT" are new.  A Trove search 
+# found only one newspaper (The Canberra Times) with a house style
+# dating back to the 1970s, I expect because other newspapers weren't
+# fully indexed.  The Canberra Times strongly preferred abbreviations
+# like "AEDT".  The first occurrence of "AEDT" was a World Weather
+# column (1971-11-17, page 24), and of "ACDT" was a Scoreboard column
+# (1993-01-24, p 16).  The style was the typical usage but was not
+# strictly enforced; for example, "Welcome to the twilight zones ..."
+# (1994-10-29, p 1) uses the abbreviations AEST/AEDT, CST/CDT, and
+# WST, and goes on to say, "The confusion and frustration some feel
+# about the lack of uniformity among Australia's six states and two
+# territories has prompted one group to form its very own political
+# party -- the Sydney-based Daylight Saving Extension Party."
 #
-# * Do Australians more often use "Eastern Daylight Time" or "Eastern
-#   Summer Time"?  Do they typically prefix the time zone names with
-#   the word "Australian"?
+# I also surveyed federal government sources.  They did not agree:
 #
-#   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:
+#   The Australian Government (2014-03-26)
+#   http://australia.gov.au/about-australia/our-country/time
+#   (This document was produced by the Department of Finance.)
+#   AEST ACST AWST AEDT ACDT
 #
-#     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
+#   Bureau of Meteorology (2012-11-08)
+#   http://www.bom.gov.au/climate/averages/tables/daysavtm.shtml
+#   EST CST WST EDT CDT
 #
-#   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.
+#   Civil Aviation Safety Authority (undated)
+#   http://services.casa.gov.au/outnback/inc/pages/episode3/episode-3_time_zones.shtml
+#   EST CST WST (no abbreviations given for DST)
 #
-#   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:
+#   Geoscience Australia (2011-11-24)
+#   http://www.ga.gov.au/geodesy/astro/sunrise.jsp
+#   AEST ACST AWST AEDT ACDT
 #
-#     161,304 "EST" and domain:au
-#      25,156 "EDT" and domain:au
-#      18,263 "AEST" and domain:au
-#      10,416 "AEDT" and domain:au
+#   Parliamentary Library (2008-11-10)
+#   http://www.aph.gov.au/binaries/library/pubs/rp/2008-09/09rp14.pdf
+#   EST CST WST preferred for standard time; AEST AEDT ACST ACDT also used
 #
-#      14,538 "CST" and domain:au
-#       5,728 "CDT" and domain:au
-#         176 "ACST" and domain:au
-#          29 "ACDT" and domain:au
+#   The Transport Safety Bureau has an extensive series of accident reports,
+#   and investigators seem to use whatever abbreviation they like.
+#   Googling site:atsb.gov.au found the following number of unique hits:
+#   311 "ESuT", 195 "EDT", 26 "AEDT", 83 "CSuT", 46 "CDT".
+#   "_SuT" tended to appear in older reports, and "A_DT" tended to
+#   appear in reports of events with international implications.
 #
-#       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 the above it appears that there is a working consensus in
+# Australia to use trailing "DT" for daylight saving time; although
+# some sources use trailing "SST" or "ST" or "SuT" they are by far in
+# the minority.  The case for leading "A" is weaker, but since it
+# seems to be preferred in the overall web and is preferred in all
+# the leading newspaper websites and in many government departments,
+# it has a stronger case than omitting the leading "A".  The current
+# version of the database therefore uses abbreviations like "AEST" and
+# "AEDT" for Australian time zones.
 
 # From Paul Eggert (1995-12-19):
 # Shanks & Pottenger report 2:00 for all autumn changes in Australia and NZ.
 # Mark Prior writes that his newspaper
 # reports that NSW's fall 1995 change will occur at 2:00,
 # but Robert Elz says it's been 3:00 in Victoria since 1970
-# and perhaps the newspaper's `2:00' is referring to standard time.
+# and perhaps the newspaper's '2:00' is referring to standard time.
 # For now we'll continue to assume 2:00s for changes since 1960.
 
 # From Eric Ulevik (1998-01-05):
@@ -1055,17 +999,14 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # relevant entries in this database.
 #
 # NSW (including LHI and Broken Hill):
-# 
 # Standard Time Act 1987 (updated 1995-04-04)
-# 
+# http://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html
 # ACT
-# 
 # Standard Time and Summer Time Act 1972
-# 
+# http://www.austlii.edu.au/au/legis/act/consol_act/stasta1972279/index.html
 # SA
-# 
 # Standard Time Act, 1898
-# 
+# http://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html
 
 # From David Grosz (2005-06-13):
 # It was announced last week that Daylight Saving would be extended by
@@ -1083,7 +1024,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # Victoria: I wasn't able to find anything separate, but the other articles
 # allude to it.
 # But not Queensland
-# http://www.news.com.au/story/0,10117,15564030-1248,00.html.
+# http://www.news.com.au/story/0,10117,15564030-1248,00.html
 
 # Northern Territory
 
@@ -1130,9 +1071,9 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # The 1992 ending date used in the rules is a best guess;
 # it matches what was used in the past.
 
-# 
 # The Australian Bureau of Meteorology FAQ
-#  (1999-09-27) writes that Giles Meteorological Station uses
+# http://www.bom.gov.au/faq/faqgen.htm
+# (1999-09-27) writes that Giles Meteorological Station uses
 # South Australian time even though it's located in Western Australia.
 
 # Queensland
@@ -1173,9 +1114,9 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # The chosen rules the union of the 1971/1972 change and the 1989-1992 changes.
 
 # From Christopher Hunt (2006-11-21), after an advance warning
-# from Jesper Norgaard Welen (2006-11-01):
+# from Jesper Nørgaard Welen (2006-11-01):
 # WA are trialing DST for three years.
-# 
+# http://www.parliament.wa.gov.au/parliament/bills.nsf/9A1B183144403DA54825721200088DF1/$File/Bill175-1B.pdf
 
 # From Rives McDow (2002-04-09):
 # The most interesting region I have found consists of three towns on the
@@ -1189,7 +1130,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # From Paul Eggert (2002-04-09):
 # This is confirmed by the section entitled
 # "What's the deal with time zones???" in
-# .
+# http://www.earthsci.unimelb.edu.au/~awatkins/null.html
 #
 # From Alex Livingston (2006-12-07):
 # ... it was just on four years ago that I drove along the Eyre Highway,
@@ -1337,7 +1278,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # Based on law library research by John Mackin,
 # who notes:
 #	In Australia, time is not legislated federally, but rather by the
-#	individual states.  Thus, while such terms as ``Eastern Standard Time''
+#	individual states.  Thus, while such terms as "Eastern Standard Time"
 #	[I mean, of course, Australian EST, not any other kind] are in common
 #	use, _they have NO REAL MEANING_, as they are not defined in the
 #	legislation.  This is very important to understand.
@@ -1345,48 +1286,42 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 
 # From Eric Ulevik (1999-05-26):
 # DST will start in NSW on the last Sunday of August, rather than the usual
-# October in 2000.  [See: Matthew Moore,
-# 
-# Two months more daylight saving
-# 
-# Sydney Morning Herald (1999-05-26).]
+# October in 2000.  See: Matthew Moore,
+# Two months more daylight saving, Sydney Morning Herald (1999-05-26).
+# http://www.smh.com.au/news/9905/26/pageone/pageone4.html
 
 # From Paul Eggert (1999-09-27):
 # See the following official NSW source:
-# 
 # Daylight Saving in New South Wales.
-# 
+# http://dir.gis.nsw.gov.au/cgi-bin/genobject/document/other/daylightsaving/tigGmZ
 #
 # Narrabri Shire (NSW) council has announced it will ignore the extension of
 # daylight saving next year.  See:
-# 
 # Narrabri Council to ignore daylight saving
-#  (1999-07-22).  For now, we'll wait to see if this really happens.
+# http://abc.net.au/news/regionals/neweng/monthly/regeng-22jul1999-1.htm
+# (1999-07-22).  For now, we'll wait to see if this really happens.
 #
 # Victoria will following NSW.  See:
-# 
-# Vic to extend daylight saving
-#  (1999-07-28).
+# Vic to extend daylight saving (1999-07-28)
+# http://abc.net.au/local/news/olympics/1999/07/item19990728112314_1.htm
 #
 # However, South Australia rejected the DST request.  See:
-# 
-# South Australia rejects Olympics daylight savings request
-#  (1999-07-19).
+# South Australia rejects Olympics daylight savings request (1999-07-19)
+# http://abc.net.au/news/olympics/1999/07/item19990719151754_1.htm
 #
 # Queensland also will not observe DST for the Olympics.  See:
-# 
 # Qld says no to daylight savings for Olympics
-#  (1999-06-01), which quotes Queensland Premier Peter Beattie as saying
-# ``Look you've got to remember in my family when this came up last time
+# http://abc.net.au/news/olympics/1999/06/item19990601114608_1.htm
+# (1999-06-01), which quotes Queensland Premier Peter Beattie as saying
+# "Look you've got to remember in my family when this came up last time
 # I voted for it, my wife voted against it and she said to me it's all very
 # well for you, you don't have to worry about getting the children out of
 # bed, getting them to school, getting them to sleep at night.
-# I've been through all this argument domestically...my wife rules.''
+# I've been through all this argument domestically...my wife rules."
 #
 # Broken Hill will stick with South Australian time in 2000.  See:
-# 
-# Broken Hill to be behind the times
-#  (1999-07-21).
+# Broken Hill to be behind the times (1999-07-21)
+# http://abc.net.au/news/regionals/brokenh/monthly/regbrok-21jul1999-6.htm
 
 # IATA SSIM (1998-09) says that the spring 2000 change for Australian
 # Capital Territory, New South Wales except Lord Howe Island and Broken
@@ -1402,7 +1337,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # Yancowinna
 
 # From John Mackin (1989-01-04):
-# `Broken Hill' means the County of Yancowinna.
+# 'Broken Hill' means the County of Yancowinna.
 
 # From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
 # # YANCOWINNA..  [ Confirmation courtesy of Broken Hill Postmaster ]
@@ -1459,9 +1394,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # summer (southern hemisphere).
 #
 # From
-# 
 # http://www.safework.sa.gov.au/uploaded_files/DaylightDatesSet.pdf
-# 
 # The extended daylight saving period that South Australia has been trialling
 # for over the last year is now set to be ongoing.
 # Daylight saving will continue to start on the first Sunday in October each
@@ -1471,9 +1404,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # the ACT for all 52 weeks of the year...
 #
 # We have a wrap-up here:
-# 
 # http://www.timeanddate.com/news/time/south-australia-extends-dst.html
-# 
 ###############################################################################
 
 # New Zealand
@@ -1482,7 +1413,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # the 1989/90 year was a trial of an extended "daylight saving" period.
 # This trial was deemed successful and the extended period adopted for
 # subsequent years (with the addition of a further week at the start).
-# source -- phone call to Ministry of Internal Affairs Head Office.
+# source - phone call to Ministry of Internal Affairs Head Office.
 
 # From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
 # # The Country of New Zealand   (Australia's east island -) Gee they hate that!
@@ -1524,6 +1455,19 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # that DST will begin on 2007-09-30 2008-04-06.
 # http://www.dia.govt.nz/diawebsite.nsf/wpg_URL/Services-Daylight-Saving-Daylight-saving-to-be-extended
 
+# From Paul Eggert (2014-07-14):
+# Chatham Island time was formally standardized on 1957-01-01 by
+# New Zealand's Standard Time Amendment Act 1956 (1956-10-26).
+# http://www.austlii.edu.au/nz/legis/hist_act/staa19561956n100244.pdf
+# According to Google Books snippet view, a speaker in the New Zealand
+# parliamentary debates in 1956 said "Clause 78 makes provision for standard
+# time in the Chatham Islands.  The time there is 45 minutes in advance of New
+# Zealand time.  I understand that is the time they keep locally, anyhow."
+# For now, assume this practice goes back to the introduction of standard time
+# in New Zealand, as this would make Chatham Islands time almost exactly match
+# LMT back when New Zealand was at UTC+11:30; also, assume Chatham Islands did
+# not observe New Zealand's prewar DST.
+
 ###############################################################################
 
 
@@ -1543,7 +1487,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 
 # From the BBC World Service in
 # http://news.bbc.co.uk/2/hi/asia-pacific/205226.stm (1998-10-31 16:03 UTC):
-# The Fijiian government says the main reasons for the time change is to
+# The Fijian government says the main reasons for the time change is to
 # improve productivity and reduce road accidents.... [T]he move is also
 # intended to boost Fiji's ability to attract tourists to witness the dawning
 # of the new millennium.
@@ -1551,16 +1495,12 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # http://www.fiji.gov.fj/press/2000_09/2000_09_13-05.shtml (2000-09-13)
 # reports that Fiji has discontinued DST.
 
-# Johnston
-
-# Johnston data is from usno1995.
-
 
 # Kiribati
 
 # From Paul Eggert (1996-01-22):
 # Today's _Wall Street Journal_ (page 1) reports that Kiribati
-# ``declared it the same day [throughout] the country as of Jan. 1, 1995''
+# "declared it the same day [throughout] the country as of Jan. 1, 1995"
 # as part of the competition to be first into the 21st century.
 
 
@@ -1575,8 +1515,8 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 
 # N Mariana Is, Guam
 
-# Howse writes (p 153) ``The Spaniards, on the other hand, reached the
-# Philippines and the Ladrones from America,'' and implies that the Ladrones
+# Howse writes (p 153) "The Spaniards, on the other hand, reached the
+# Philippines and the Ladrones from America," and implies that the Ladrones
 # (now called the Marianas) kept American date for quite some time.
 # For now, we assume the Ladrones switched at the same time as the Philippines;
 # see Asia/Manila.
@@ -1590,17 +1530,16 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # Micronesia
 
 # Alan Eugene Davis writes (1996-03-16),
-# ``I am certain, having lived there for the past decade, that "Truk"
-# (now properly known as Chuuk) ... is in the time zone GMT+10.''
+# "I am certain, having lived there for the past decade, that 'Truk'
+# (now properly known as Chuuk) ... is in the time zone GMT+10."
 #
 # Shanks & Pottenger write that Truk switched from UTC+10 to UTC+11
 # on 1978-10-01; ignore this for now.
 
 # From Paul Eggert (1999-10-29):
 # The Federated States of Micronesia Visitors Board writes in
-# 
-# The Federated States of Micronesia - Visitor Information
-#  (1999-01-26)
+# The Federated States of Micronesia - Visitor Information (1999-01-26)
+# http://www.fsmgov.org/info/clocks.html
 # that Truk and Yap are UTC+10, and Ponape and Kosrae are UTC+11.
 # We don't know when Kosrae switched from UTC+12; assume January 1 for now.
 
@@ -1646,27 +1585,34 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # Sacramento but it was changed a couple of years ago.
 
 
-# Samoa
+# (Western) Samoa and American Samoa
 
 # Howse writes (p 153, citing p 10 of the 1883-11-18 New York Herald)
 # that in 1879 the King of Samoa decided to change
-# ``the date in his kingdom from the Antipodean to the American system,
-# ordaining -- by a masterpiece of diplomatic flattery -- that
-# the Fourth of July should be celebrated twice in that year.''
+# "the date in his kingdom from the Antipodean to the American system,
+# ordaining - by a masterpiece of diplomatic flattery - that
+# the Fourth of July should be celebrated twice in that year."
 
+# Although Shanks & Pottenger says they both switched to UTC-11:30
+# in 1911, and to UTC-11 in 1950. many earlier sources give UTC-11
+# for American Samoa, e.g., the US National Bureau of Standards
+# circular "Standard Time Throughout the World", 1932.
+# Assume American Samoa switched to UTC-11 in 1911, not 1950,
+# and that after 1950 they agreed until (western) Samoa skipped a
+# day in 2011.  Assume also that the Samoas follow the US and New
+# Zealand's "ST"/"DT" style of daylight-saving abbreviations.
 
 # Tonga
 
 # From Paul Eggert (1996-01-22):
-# Today's _Wall Street Journal_ (p 1) reports that ``Tonga has been plotting
-# to sneak ahead of [New Zealanders] by introducing daylight-saving time.''
+# Today's _Wall Street Journal_ (p 1) reports that "Tonga has been plotting
+# to sneak ahead of [New Zealanders] by introducing daylight-saving time."
 # Since Kiribati has moved the Date Line it's not clear what Tonga will do.
 
 # Don Mundell writes in the 1997-02-20 Tonga Chronicle
-# 
-# How Tonga became `The Land where Time Begins'
-# :
-
+# How Tonga became 'The Land where Time Begins':
+# http://www.tongatapu.net.to/tonga/homeland/timebegins.htm
+#
 # Until 1941 Tonga maintained a standard time 50 minutes ahead of NZST
 # 12 hours and 20 minutes ahead of GMT.  When New Zealand adjusted its
 # standard time in 1940s, Tonga had the choice of subtracting from its
@@ -1674,8 +1620,8 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # advancing its time to maintain the differential of 13 degrees
 # (approximately 50 minutes ahead of New Zealand time).
 #
-# Because His Majesty King Taufa'ahau Tupou IV, then Crown Prince
-# Tungi, preferred to ensure Tonga's title as the land where time
+# Because His Majesty King Tāufaʻāhau Tupou IV, then Crown Prince
+# Tungī, preferred to ensure Tonga's title as the land where time
 # begins, the Legislative Assembly approved the latter change.
 #
 # But some of the older, more conservative members from the outer
@@ -1701,9 +1647,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # * Tonga will introduce DST in November
 #
 # I was given this link by John Letts:
-# 
 # http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm
-# 
 #
 # 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
@@ -1711,9 +1655,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # (12 + 1 hour DST).
 
 # From Arthur David Olson (1999-09-20):
-# According to 
-# http://www.tongaonline.com/news/sept1799.html
-# :
+# According to :
 # "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
@@ -1731,7 +1673,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # instead of the original reported date April 16. Unfortunately, the article
 # is no longer available on the site, and I did not make a copy of the
 # text, and I have forgotten to report it here.
-# (Original URL was: http://www.tongaonline.com/news/march162000.htm )
+# (Original URL was )
 
 # From Rives McDow (2000-12-01):
 # Tonga is observing DST as of 2000-11-04 and will stop on 2001-01-27.
@@ -1751,7 +1693,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # From Vernice Anderson, Personal Secretary to Philip Jessup,
 # US Ambassador At Large (oral history interview, 1971-02-02):
 #
-# Saturday, the 14th [of October, 1950] -- ...  The time was all the
+# Saturday, the 14th [of October, 1950] - ...  The time was all the
 # more confusing at that point, because we had crossed the
 # International Date Line, thus getting two Sundays.  Furthermore, we
 # discovered that Wake Island had two hours of daylight saving time
@@ -1796,7 +1738,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # on the high seas.  Whenever a ship was within the territorial waters of any
 # nation it would use that nation's standard time.  The captain was permitted
 # to change his ship's clocks at a time of his choice following his ship's
-# entry into another zone time--he often chose midnight.  These zones were
+# entry into another zone time - he often chose midnight.  These zones were
 # adopted by all major fleets between 1920 and 1925 but not by many
 # independent merchant ships until World War II.
 
@@ -1804,6 +1746,6 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # (2005-03-20):
 #
 # The American Practical Navigator (2002)
-# 
+# http://pollux.nss.nima.mil/pubs/pubs_j_apn_sections.html?rid=187
 # talks only about the 180-degree meridian with respect to ships in
 # international waters; it ignores the international date line.
diff --git a/jdk/make/data/tzdata/backward b/jdk/make/data/tzdata/backward
index 5afe9a317ff..ba012f45733 100644
--- a/jdk/make/data/tzdata/backward
+++ b/jdk/make/data/tzdata/backward
@@ -21,15 +21,15 @@
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
 # This file provides links between current names for time zones
 # and their old names.  Many names changed in late 1993.
 
+# Link	TARGET			LINK-NAME
 Link	Africa/Asmara		Africa/Asmera
-Link	Africa/Bamako		Africa/Timbuktu
+Link	Africa/Abidjan		Africa/Timbuktu
 Link	America/Argentina/Catamarca	America/Argentina/ComodRivadavia
 Link	America/Adak		America/Atka
 Link	America/Argentina/Buenos_Aires	America/Buenos_Aires
@@ -50,8 +50,11 @@ Link	America/Port_of_Spain	America/Virgin
 Link	Pacific/Auckland	Antarctica/South_Pole
 Link	Asia/Ashgabat		Asia/Ashkhabad
 Link	Asia/Kolkata		Asia/Calcutta
-Link	Asia/Chongqing		Asia/Chungking
+Link	Asia/Shanghai		Asia/Chongqing
+Link	Asia/Shanghai		Asia/Chungking
 Link	Asia/Dhaka		Asia/Dacca
+Link	Asia/Shanghai		Asia/Harbin
+Link	Asia/Urumqi		Asia/Kashgar
 Link	Asia/Kathmandu		Asia/Katmandu
 Link	Asia/Macau		Asia/Macao
 Link	Asia/Ho_Chi_Minh	Asia/Saigon
diff --git a/jdk/make/data/tzdata/etcetera b/jdk/make/data/tzdata/etcetera
index ebaa5fdfc04..d2fb91c9dd6 100644
--- a/jdk/make/data/tzdata/etcetera
+++ b/jdk/make/data/tzdata/etcetera
@@ -21,7 +21,6 @@
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
@@ -37,7 +36,7 @@ Zone	Etc/UTC		0	-	UTC
 Zone	Etc/UCT		0	-	UCT
 
 # The following link uses older naming conventions,
-# but it belongs here, not in the file `backward',
+# but it belongs here, not in the file 'backward',
 # as functions like gmtime load the "GMT" file to handle leap seconds properly.
 # We want this to work even on installations that omit the other older names.
 Link	Etc/GMT				GMT
diff --git a/jdk/make/data/tzdata/europe b/jdk/make/data/tzdata/europe
index 226c393a0f2..0c5f5667da9 100644
--- a/jdk/make/data/tzdata/europe
+++ b/jdk/make/data/tzdata/europe
@@ -21,15 +21,15 @@
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future).  For more, please see
+# the file CONTRIBUTING in the tz distribution.
 
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (2014-05-31):
 # A good source for time zone historical data outside the U.S. is
 # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
 # San Diego: ACS Publications, Inc. (2003).
@@ -40,6 +40,9 @@
 # published semiannually.  Law sent in several helpful summaries
 # of the IATA's data after 1990.
 #
+# A reliable and entertaining source about time zones is
+# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
+#
 # Except where otherwise noted, Shanks & Pottenger is the source for
 # entries through 1991, and IATA SSIM is the source for entries afterwards.
 #
@@ -49,9 +52,9 @@
 #	Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated),
 #	which I found in the UCLA library.
 #
-#	
 #	William Willett, The Waste of Daylight, 19th edition
-#	 (1914-03)
+#	
+#	[PDF] (1914-03)
 #
 #	Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
 #	.  He writes:
@@ -59,10 +62,20 @@
 #	may be sent to Mr. John Milne, Royal Geographical Society,
 #	Savile Row, London."  Nowadays please email them to tz@iana.org.
 #
-#	Brazil's Departamento Servico da Hora (DSH),
-#	
+#	Byalokoz EL. New Counting of Time in Russia since July 1, 1919.
+#	This Russian-language source was consulted by Vladimir Karpinsky; see
+#	http://mm.icann.org/pipermail/tz/2014-August/021320.html
+#	The full Russian citation is:
+#	Бялокоз, Евгений Людвигович. Новый счет времени в течении суток
+#	введенный декретом Совета народных комиссаров для всей России с 1-го
+#	июля 1919 г. / Изд. 2-е Междуведомственной комиссии. - Петроград:
+#	Десятая гос. тип., 1919.
+#	http://resolver.gpntb.ru/purl?docushare/dsweb/Get/Resource-2011/Byalokoz__E.L.__Novyy__schet__vremeni__v__techenie__sutok__izd__2(1).pdf
+#
+#	Brazil's Divisão Serviço da Hora (DSHO),
 #	History of Summer Time
-#	 (1998-09-21, in Portuguese)
+#	
+#	(1998-09-21, in Portuguese)
 
 #
 # I invented the abbreviations marked '*' in the following table;
@@ -81,10 +94,8 @@
 #        1:00       CET CEST CEMT Central Europe
 #        1:00:14    SET           Swedish (1879-1899)*
 #        2:00       EET EEST      Eastern Europe
-#        3:00       MSK MSD       Moscow
-#
-# A reliable and entertaining source about time zones, especially in Britain,
-# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
+#        3:00       FET           Further-eastern Europe*
+#        3:00       MSK MSD  MSM* Moscow
 
 # From Peter Ilieve (1994-12-04),
 # The original six [EU members]: Belgium, France, (West) Germany, Italy,
@@ -128,7 +139,7 @@
 # along the towpath within a few yards of it.'
 #
 # I have a one inch to one mile map of London and my estimate of the stone's
-# position is 51 deg. 28' 30" N, 0 deg. 18' 45" W. The longitude should
+# position is 51 degrees 28' 30" N, 0 degrees 18' 45" W. The longitude should
 # be within about +-2". The Ordnance Survey grid reference is TQ172761.
 #
 # [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.]
@@ -160,8 +171,22 @@
 # transition date for London, namely 1847-12-01.  We don't know as much
 # about Dublin, so we use 1880-08-02, the legal transition time.
 
-# From Paul Eggert (2003-09-27):
-# Summer Time was first seriously proposed by William Willett (1857-1915),
+# From Paul Eggert (2014-07-19):
+# The ancients had no need for daylight saving, as they kept time
+# informally or via hours whose length depended on the time of year.
+# Daylight saving time in its modern sense was invented by the
+# New Zealand entomologist George Vernon Hudson (1867-1946),
+# whose day job as a postal clerk led him to value
+# after-hours daylight in which to pursue his research.
+# In 1895 he presented a paper to the Wellington Philosophical Society
+# that proposed a two-hour daylight-saving shift.  See:
+# Hudson GV. On seasonal time-adjustment in countries south of lat. 30 deg.
+# Transactions and Proceedings of the New Zealand Institute. 1895;28:734
+# http://rsnz.natlib.govt.nz/volume/rsnz_28/rsnz_28_00_006110.html
+# Although some interest was expressed in New Zealand, his proposal
+# did not find its way into law and eventually it was almost forgotten.
+#
+# In England, DST was independently reinvented by William Willett (1857-1915),
 # a London builder and member of the Royal Astronomical Society
 # who circulated a pamphlet "The Waste of Daylight" (1907)
 # that proposed advancing clocks 20 minutes on each of four Sundays in April,
@@ -174,7 +199,7 @@
 # A monument to Willett was unveiled on 1927-05-21, in an open space in
 # a 45-acre wood near Chislehurst, Kent that was purchased by popular
 # subscription and open to the public.  On the south face of the monolith,
-# designed by G. W. Miller, is the...William Willett Memorial Sundial,
+# designed by G. W. Miller, is the William Willett Memorial Sundial,
 # which is permanently set to Summer Time.
 
 # From Winston Churchill (1934-04-28):
@@ -183,9 +208,9 @@
 # between 160 and 170 hours more daylight leisure, to a war which
 # plunged Europe into darkness for four years, and shook the
 # foundations of civilization throughout the world.
-#	-- 
-#	"A Silent Toast to William Willett", Pictorial Weekly
-#	
+#	-- "A Silent Toast to William Willett", Pictorial Weekly;
+#	republished in Finest Hour (Spring 2002) 1(114):26
+#	http://www.winstonchurchill.org/images/finesthour/Vol.01%20No.114.pdf
 
 # From Paul Eggert (1996-09-03):
 # The OED Supplement says that the English originally said "Daylight Saving"
@@ -194,7 +219,6 @@
 # proponents (who eventually won the argument) are quoted as using "Summer".
 
 # From Arthur David Olson (1989-01-19):
-#
 # A source at the British Information Office in New York avers that it's
 # known as "British" Summer Time in all parts of the United Kingdom.
 
@@ -221,8 +245,8 @@
 # official designation; the reply of the 21st was that there wasn't
 # but he couldn't think of anything better than the "Double British
 # Summer Time" that the BBC had been using informally.
-# http://student.cusu.cam.ac.uk/~jsm28/british-time/bbc-19410418.png
-# http://student.cusu.cam.ac.uk/~jsm28/british-time/ho-19410421.png
+# http://www.polyomino.org.uk/british-time/bbc-19410418.png
+# http://www.polyomino.org.uk/british-time/ho-19410421.png
 
 # From Sir Alexander Maxwell in the above-mentioned letter (1941-04-21):
 # [N]o official designation has as far as I know been adopted for the time
@@ -239,23 +263,14 @@
 # the history of summer time legislation in the United Kingdom.
 # Since 1998 Joseph S. Myers has been updating
 # and extending this list, which can be found in
-# http://student.cusu.cam.ac.uk/~jsm28/british-time/
-# 
-# History of legal time in Britain
-# 
-# Rob Crowther (2012-01-04) reports that that URL no longer
-# exists, and the article can now be found at:
-# 
 # http://www.polyomino.org.uk/british-time/
-# 
 
 # From Joseph S. Myers (1998-01-06):
 #
 # The legal time in the UK outside of summer time is definitely GMT, not UTC;
 # see Lord Tanlaw's speech
-# 
-# (Lords Hansard 11 June 1997 columns 964 to 976)
-# .
+# http://www.publications.parliament.uk/pa/ld199798/ldhansrd/vo970611/text/70611-10.htm#70611-10_head0
+# (Lords Hansard 11 June 1997 columns 964 to 976).
 
 # From Paul Eggert (2006-03-22):
 #
@@ -295,8 +310,8 @@
 #   -- James Joyce, Ulysses
 
 # From Joseph S. Myers (2005-01-26):
-# Irish laws are available online at www.irishstatutebook.ie.  These include
-# various relating to legal time, for example:
+# Irish laws are available online at .
+# These include various relating to legal time, for example:
 #
 # ZZA13Y1923.html ZZA12Y1924.html ZZA8Y1925.html ZZSIV20PG1267.html
 #
@@ -458,25 +473,27 @@ Rule	GB-Eire 1990	1995	-	Oct	Sun>=22	1:00u	0	GMT
 # Use Europe/London for Jersey, Guernsey, and the Isle of Man.
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/London	-0:01:15 -	LMT	1847 Dec  1 0:00s
+Zone	Europe/London	-0:01:15 -	LMT	1847 Dec  1  0:00s
 			 0:00	GB-Eire	%s	1968 Oct 27
-			 1:00	-	BST	1971 Oct 31 2:00u
+			 1:00	-	BST	1971 Oct 31  2:00u
 			 0:00	GB-Eire	%s	1996
 			 0:00	EU	GMT/BST
 Link	Europe/London	Europe/Jersey
 Link	Europe/London	Europe/Guernsey
 Link	Europe/London	Europe/Isle_of_Man
+
+# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Dublin	-0:25:00 -	LMT	1880 Aug  2
-			-0:25:21 -	DMT	1916 May 21 2:00
-			-0:25:21 1:00	IST	1916 Oct  1 2:00s
+			-0:25:21 -	DMT	1916 May 21  2:00
+			-0:25:21 1:00	IST	1916 Oct  1  2:00s
 			 0:00	GB-Eire	%s	1921 Dec  6 # independence
-			 0:00	GB-Eire	GMT/IST	1940 Feb 25 2:00
-			 0:00	1:00	IST	1946 Oct  6 2:00
-			 0:00	-	GMT	1947 Mar 16 2:00
-			 0:00	1:00	IST	1947 Nov  2 2:00
-			 0:00	-	GMT	1948 Apr 18 2:00
+			 0:00	GB-Eire	GMT/IST	1940 Feb 25  2:00
+			 0:00	1:00	IST	1946 Oct  6  2:00
+			 0:00	-	GMT	1947 Mar 16  2:00
+			 0:00	1:00	IST	1947 Nov  2  2:00
+			 0:00	-	GMT	1948 Apr 18  2:00
 			 0:00	GB-Eire	GMT/IST	1968 Oct 27
-			 1:00	-	IST	1971 Oct 31 2:00u
+			 1:00	-	IST	1971 Oct 31  2:00u
 			 0:00	GB-Eire	GMT/IST	1996
 			 0:00	EU	GMT/IST
 
@@ -495,10 +512,9 @@ Rule	EU	1979	1995	-	Sep	lastSun	 1:00u	0	-
 Rule	EU	1981	max	-	Mar	lastSun	 1:00u	1:00	S
 Rule	EU	1996	max	-	Oct	lastSun	 1:00u	0	-
 # The most recent directive covers the years starting in 2002.  See:
-# 
 # Directive 2000/84/EC of the European Parliament and of the Council
 # of 19 January 2001 on summer-time arrangements.
-# 
+# http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:32000L0084:EN:NOT
 
 # W-Eur differs from EU only in that W-Eur uses standard time.
 Rule	W-Eur	1977	1980	-	Apr	Sun>=1	 1:00s	1:00	S
@@ -521,18 +537,18 @@ Rule	C-Eur	1943	only	-	Oct	 4	 2:00s	0	-
 Rule	C-Eur	1944	1945	-	Apr	Mon>=1	 2:00s	1:00	S
 # Whitman gives 1944 Oct 7; go with Shanks & Pottenger.
 Rule	C-Eur	1944	only	-	Oct	 2	 2:00s	0	-
-# From Jesper Norgaard Welen (2008-07-13):
+# From Jesper Nørgaard Welen (2008-07-13):
 #
 # I found what is probably a typo of 2:00 which should perhaps be 2:00s
 # in the C-Eur rule from tz database version 2008d (this part was
-# corrected in version 2008d). The circumstancial evidence is simply the
+# corrected in version 2008d). The circumstantial evidence is simply the
 # tz database itself, as seen below:
 #
 # Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15  0:01
 #    0:00 France WE%sT 1945 Sep 16  3:00
 #
 # Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
-#    0:00 France WE%sT 1945 Sep 16 3:00
+#    0:00 France WE%sT 1945 Sep 16  3:00
 #
 # Zone Europe/Belgrade 1:22:00 - LMT 1884
 #    1:00 1:00 CEST 1945 Sep 16  2:00s
@@ -576,16 +592,16 @@ Rule	E-Eur	1981	max	-	Mar	lastSun	 0:00	1:00	S
 Rule	E-Eur	1996	max	-	Oct	lastSun	 0:00	0	-
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Russia	1917	only	-	Jul	 1	23:00	1:00	MST	# Moscow Summer Time
-Rule	Russia	1917	only	-	Dec	28	 0:00	0	MMT	# Moscow Mean Time
-Rule	Russia	1918	only	-	May	31	22:00	2:00	MDST	# Moscow Double Summer Time
+Rule	Russia	1917	only	-	Jul	 1	23:00	1:00	MST  # Moscow Summer Time
+Rule	Russia	1917	only	-	Dec	28	 0:00	0	MMT  # Moscow Mean Time
+Rule	Russia	1918	only	-	May	31	22:00	2:00	MDST # Moscow Double Summer Time
 Rule	Russia	1918	only	-	Sep	16	 1:00	1:00	MST
 Rule	Russia	1919	only	-	May	31	23:00	2:00	MDST
-Rule	Russia	1919	only	-	Jul	 1	 2:00	1:00	S
-Rule	Russia	1919	only	-	Aug	16	 0:00	0	-
-Rule	Russia	1921	only	-	Feb	14	23:00	1:00	S
-Rule	Russia	1921	only	-	Mar	20	23:00	2:00	M # Midsummer
-Rule	Russia	1921	only	-	Sep	 1	 0:00	1:00	S
+Rule	Russia	1919	only	-	Jul	 1	 2:00	1:00	MSD
+Rule	Russia	1919	only	-	Aug	16	 0:00	0	MSK
+Rule	Russia	1921	only	-	Feb	14	23:00	1:00	MSD
+Rule	Russia	1921	only	-	Mar	20	23:00	2:00	MSM  # Midsummer
+Rule	Russia	1921	only	-	Sep	 1	 0:00	1:00	MSD
 Rule	Russia	1921	only	-	Oct	 1	 0:00	0	-
 # Act No.925 of the Council of Ministers of the USSR (1980-10-24):
 Rule	Russia	1981	1984	-	Apr	 1	 0:00	1:00	S
@@ -607,14 +623,10 @@ Rule	Russia	1996	2010	-	Oct	lastSun	 2:00s	0	-
 # According to the law Russia is abolishing daylight saving time.
 #
 # Medvedev signed a law "On the Calculation of Time" (in russian):
-# 
 # http://bmockbe.ru/events/?ID=7583
-# 
 #
 # Medvedev signed a law on the calculation of the time (in russian):
-# 
 # http://www.regnum.ru/news/polit/1413906.html
-# 
 
 # From Arthur David Olson (2011-06-15):
 # Take "abolishing daylight saving time" to mean that time is now considered
@@ -634,10 +646,10 @@ Zone	EET		2:00	EU	EE%sT
 # From Markus Kuhn (1996-07-12):
 # The official German names ... are
 #
-#	Mitteleuropaeische Zeit (MEZ)         = UTC+01:00
-#	Mitteleuropaeische Sommerzeit (MESZ)  = UTC+02:00
+#	Mitteleuropäische Zeit (MEZ)         = UTC+01:00
+#	Mitteleuropäische Sommerzeit (MESZ)  = UTC+02:00
 #
-# as defined in the German Time Act (Gesetz ueber die Zeitbestimmung (ZeitG),
+# as defined in the German Time Act (Gesetz über die Zeitbestimmung (ZeitG),
 # 1978-07-25, Bundesgesetzblatt, Jahrgang 1978, Teil I, S. 1110-1111)....
 # I wrote ... to the German Federal Physical-Technical Institution
 #
@@ -692,7 +704,7 @@ Zone	Europe/Tirane	1:19:20 -	LMT	1914
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Andorra	0:06:04 -	LMT	1901
 			0:00	-	WET	1946 Sep 30
-			1:00	-	CET	1985 Mar 31 2:00
+			1:00	-	CET	1985 Mar 31  2:00
 			1:00	EU	CE%sT
 
 # Austria
@@ -718,9 +730,9 @@ Rule	Austria	1980	only	-	Sep	28	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Vienna	1:05:21 -	LMT	1893 Apr
 			1:00	C-Eur	CE%sT	1920
-			1:00	Austria	CE%sT	1940 Apr  1 2:00s
-			1:00	C-Eur	CE%sT	1945 Apr  2 2:00s
-			1:00	1:00	CEST	1945 Apr 12 2:00s
+			1:00	Austria	CE%sT	1940 Apr  1  2:00s
+			1:00	C-Eur	CE%sT	1945 Apr  2  2:00s
+			1:00	1:00	CEST	1945 Apr 12  2:00s
 			1:00	-	CET	1946
 			1:00	Austria	CE%sT	1981
 			1:00	EU	CE%sT
@@ -731,38 +743,29 @@ Zone	Europe/Vienna	1:05:21 -	LMT	1893 Apr
 # GMT+3 without DST (was GMT+2 with DST).
 #
 # Sources (Russian language):
-# 1.
-# 
 # http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html
-# 
-# 2.
-# 
 # http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/
-# 
-# 3.
-# 
 # http://news.tut.by/society/250578.html
-# 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Minsk	1:50:16 -	LMT	1880
-			1:50	-	MMT	1924 May 2 # Minsk Mean Time
+			1:50	-	MMT	1924 May  2 # Minsk Mean Time
 			2:00	-	EET	1930 Jun 21
 			3:00	-	MSK	1941 Jun 28
 			1:00	C-Eur	CE%sT	1944 Jul  3
 			3:00	Russia	MSK/MSD	1990
-			3:00	-	MSK	1991 Mar 31 2:00s
-			2:00	1:00	EEST	1991 Sep 29 2:00s
-			2:00	-	EET	1992 Mar 29 0:00s
-			2:00	1:00	EEST	1992 Sep 27 0:00s
-			2:00	Russia	EE%sT	2011 Mar 27 2:00s
-			3:00	-	FET # Further-eastern European Time
+			3:00	-	MSK	1991 Mar 31  2:00s
+			2:00	1:00	EEST	1991 Sep 29  2:00s
+			2:00	-	EET	1992 Mar 29  0:00s
+			2:00	1:00	EEST	1992 Sep 27  0:00s
+			2:00	Russia	EE%sT	2011 Mar 27  2:00s
+			3:00	-	FET
 
 # Belgium
 #
 # From Paul Eggert (1997-07-02):
 # Entries from 1918 through 1991 are taken from:
 #	Annuaire de L'Observatoire Royal de Belgique,
-#	Avenue Circulaire, 3, B-1180 BRUXELLES, CLVIIe annee, 1991
+#	Avenue Circulaire, 3, B-1180 BRUXELLES, CLVIIe année, 1991
 #	(Imprimerie HAYEZ, s.p.r.l., Rue Fin, 4, 1080 BRUXELLES, MCMXC),
 #	pp 8-9.
 # LMT before 1892 was 0:17:30, according to the official journal of Belgium:
@@ -812,7 +815,7 @@ Rule	Belgium	1946	only	-	May	19	 2:00s	1:00	S
 Rule	Belgium	1946	only	-	Oct	 7	 2:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Brussels	0:17:30 -	LMT	1880
-			0:17:30	-	BMT	1892 May  1 12:00 # Brussels MT
+			0:17:30	-	BMT	1892 May  1 12:00  # Brussels MT
 			0:00	-	WET	1914 Nov  8
 			1:00	-	CET	1916 May  1  0:00
 			1:00	C-Eur	CE%sT	1918 Nov 11 11:00u
@@ -828,8 +831,8 @@ Zone	Europe/Brussels	0:17:30 -	LMT	1880
 #
 # From Plamen Simenov via Steffen Thorsen (1999-09-09):
 # A document of Government of Bulgaria (No.94/1997) says:
-# EET --> EETDST is in 03:00 Local time in last Sunday of March ...
-# EETDST --> EET is in 04:00 Local time in last Sunday of October
+# EET -> EETDST is in 03:00 Local time in last Sunday of March ...
+# EETDST -> EET is in 04:00 Local time in last Sunday of October
 #
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Bulg	1979	only	-	Mar	31	23:00	1:00	S
@@ -842,7 +845,7 @@ Zone	Europe/Sofia	1:33:16 -	LMT	1880
 			1:56:56	-	IMT	1894 Nov 30 # Istanbul MT?
 			2:00	-	EET	1942 Nov  2  3:00
 			1:00	C-Eur	CE%sT	1945
-			1:00	-	CET	1945 Apr 2 3:00
+			1:00	-	CET	1945 Apr  2  3:00
 			2:00	-	EET	1979 Mar 31 23:00
 			2:00	Bulg	EE%sT	1982 Sep 26  2:00
 			2:00	C-Eur	EE%sT	1991
@@ -866,15 +869,15 @@ Rule	Czech	1948	only	-	Apr	18	2:00s	1:00	S
 Rule	Czech	1949	only	-	Apr	 9	2:00s	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Prague	0:57:44 -	LMT	1850
-			0:57:44	-	PMT	1891 Oct     # Prague Mean Time
-			1:00	C-Eur	CE%sT	1944 Sep 17 2:00s
+			0:57:44	-	PMT	1891 Oct    # Prague Mean Time
+			1:00	C-Eur	CE%sT	1944 Sep 17  2:00s
 			1:00	Czech	CE%sT	1979
 			1:00	EU	CE%sT
 # Use Europe/Prague also for Slovakia.
 
 # Denmark, Faroe Islands, and Greenland
 
-# From Jesper Norgaard Welen (2005-04-26):
+# From Jesper Nørgaard Welen (2005-04-26):
 # http://www.hum.aau.dk/~poe/tid/tine/DanskTid.htm says that the law
 # [introducing standard time] was in effect from 1894-01-01....
 # The page http://www.retsinfo.dk/_GETDOCI_/ACCN/A18930008330-REGL
@@ -884,7 +887,7 @@ Zone	Europe/Prague	0:57:44 -	LMT	1850
 # http://www.retsinfo.dk/_GETDOCI_/ACCN/A19722110030-REGL
 #
 # This provoked a new law from 1974 to make possible summer time changes
-# in subsequenet decrees with the law
+# in subsequent decrees with the law
 # http://www.retsinfo.dk/_GETDOCI_/ACCN/A19740022330-REGL
 #
 # It seems however that no decree was set forward until 1980.  I have
@@ -899,7 +902,7 @@ Zone	Europe/Prague	0:57:44 -	LMT	1850
 # was suspended on that night):
 # http://www.retsinfo.dk/_GETDOCI_/ACCN/C19801120554-REGL
 
-# From Jesper Norgaard Welen (2005-06-11):
+# From Jesper Nørgaard Welen (2005-06-11):
 # The Herning Folkeblad (1980-09-26) reported that the night between
 # Saturday and Sunday the clock is set back from three to two.
 
@@ -923,11 +926,11 @@ Rule	Denmark	1948	only	-	Aug	 8	 2:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Copenhagen	 0:50:20 -	LMT	1890
 			 0:50:20 -	CMT	1894 Jan  1 # Copenhagen MT
-			 1:00	Denmark	CE%sT	1942 Nov  2 2:00s
-			 1:00	C-Eur	CE%sT	1945 Apr  2 2:00
+			 1:00	Denmark	CE%sT	1942 Nov  2  2:00s
+			 1:00	C-Eur	CE%sT	1945 Apr  2  2:00
 			 1:00	Denmark	CE%sT	1980
 			 1:00	EU	CE%sT
-Zone Atlantic/Faroe	-0:27:04 -	LMT	1908 Jan 11	# Torshavn
+Zone Atlantic/Faroe	-0:27:04 -	LMT	1908 Jan 11 # Tórshavn
 			 0:00	-	WET	1981
 			 0:00	EU	WE%sT
 #
@@ -939,11 +942,11 @@ Zone Atlantic/Faroe	-0:27:04 -	LMT	1908 Jan 11	# Torshavn
 # From Paul Eggert (2006-03-22):
 # Greenland joined the EU as part of Denmark, obtained home rule on 1979-05-01,
 # and left the EU on 1985-02-01.  It therefore should have been using EU
-# rules at least through 1984.  Shanks & Pottenger say Scoresbysund and Godthab
+# rules at least through 1984.  Shanks & Pottenger say Scoresbysund and Godthåb
 # used C-Eur rules after 1980, but IATA SSIM (1991/1996) says they use EU
 # rules since at least 1991.  Assume EU rules since 1980.
 
-# From Gwillin Law (2001-06-06), citing
+# From Gwillim Law (2001-06-06), citing
 #  (2001-03-15),
 # and with translations corrected by Steffen Thorsen:
 #
@@ -978,16 +981,16 @@ Zone Atlantic/Faroe	-0:27:04 -	LMT	1908 Jan 11	# Torshavn
 # DPC research station at Zackenberg.
 #
 # Scoresbysund and two small villages nearby keep time UTC-1 and use
-# the same daylight savings time period as in West Greenland (Godthab).
+# the same daylight savings time period as in West Greenland (Godthåb).
 #
-# The rest of Greenland, including Godthab (this area, although it
+# The rest of Greenland, including Godthåb (this area, although it
 # includes central Greenland, is known as west Greenland), keeps time
 # UTC-3, with daylight savings methods according to European rules.
 #
 # It is common procedure to use UTC 0 in the wilderness of East and
 # North Greenland, because it is mainly Icelandic aircraft operators
 # maintaining traffic in these areas.  However, the official status of
-# this area is that it sticks with Godthab time.  This area might be
+# this area is that it sticks with Godthåb time.  This area might be
 # considered a dual time zone in some respects because of this.
 
 # From Rives McDow (2001-11-19):
@@ -996,8 +999,8 @@ Zone Atlantic/Faroe	-0:27:04 -	LMT	1908 Jan 11	# Torshavn
 
 # From Paul Eggert (2006-03-22):
 # From 1997 on the CIA map shows Danmarkshavn on GMT;
-# the 1995 map as like Godthab.
-# For lack of better info, assume they were like Godthab before 1996.
+# the 1995 map as like Godthåb.
+# For lack of better info, assume they were like Godthåb before 1996.
 # startkart.no says Thule does not observe DST, but this is clearly an error,
 # so go with Shanks & Pottenger for Thule transitions until this year.
 # For 2007 on assume Thule will stay in sync with US DST rules.
@@ -1012,15 +1015,15 @@ Rule	Thule	2007	max	-	Nov	Sun>=1	2:00	0	S
 #
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Danmarkshavn -1:14:40 -	LMT	1916 Jul 28
-			-3:00	-	WGT	1980 Apr  6 2:00
+			-3:00	-	WGT	1980 Apr  6  2:00
 			-3:00	EU	WG%sT	1996
 			0:00	-	GMT
 Zone America/Scoresbysund -1:27:52 -	LMT	1916 Jul 28 # Ittoqqortoormiit
-			-2:00	-	CGT	1980 Apr  6 2:00
+			-2:00	-	CGT	1980 Apr  6  2:00
 			-2:00	C-Eur	CG%sT	1981 Mar 29
 			-1:00	EU	EG%sT
 Zone America/Godthab	-3:26:56 -	LMT	1916 Jul 28 # Nuuk
-			-3:00	-	WGT	1980 Apr  6 2:00
+			-3:00	-	WGT	1980 Apr  6  2:00
 			-3:00	EU	WG%sT
 Zone America/Thule	-4:35:08 -	LMT	1916 Jul 28 # Pituffik air base
 			-4:00	Thule	A%sT
@@ -1042,17 +1045,16 @@ Zone America/Thule	-4:35:08 -	LMT	1916 Jul 28 # Pituffik air base
 # summer time next spring."
 
 # From Peter Ilieve (1998-11-04), heavily edited:
-# 
 # The 1998-09-22 Estonian time law
-# 
+# http://trip.rk.ee/cgi-bin/thw?${BASE}=akt&${OOHTML}=rtd&TA=1998&TO=1&AN=1390
 # refers to the Eighth Directive and cites the association agreement between
-# the EU and Estonia, ratified by the Estonian law (RT II 1995, 22--27, 120).
+# the EU and Estonia, ratified by the Estonian law (RT II 1995, 22-27, 120).
 #
 # I also asked [my relative] whether they use any standard abbreviation
 # for their standard and summer times. He says no, they use "suveaeg"
 # (summer time) and "talveaeg" (winter time).
 
-# From The Baltic Times (1999-09-09)
+# From The Baltic Times  (1999-09-09)
 # via Steffen Thorsen:
 # This year will mark the last time Estonia shifts to summer time,
 # a council of the ruling coalition announced Sept. 6....
@@ -1070,19 +1072,19 @@ Zone America/Thule	-4:35:08 -	LMT	1916 Jul 28 # Pituffik air base
 # The Estonian government has changed once again timezone politics.
 # Now we are using again EU rules.
 #
-# From Urmet Jaanes (2002-03-28):
+# From Urmet Jänes (2002-03-28):
 # The legislative reference is Government decree No. 84 on 2002-02-21.
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Tallinn	1:39:00	-	LMT	1880
-			1:39:00	-	TMT	1918 Feb # Tallinn Mean Time
+			1:39:00	-	TMT	1918 Feb    # Tallinn Mean Time
 			1:00	C-Eur	CE%sT	1919 Jul
 			1:39:00	-	TMT	1921 May
 			2:00	-	EET	1940 Aug  6
 			3:00	-	MSK	1941 Sep 15
 			1:00	C-Eur	CE%sT	1944 Sep 22
-			3:00	Russia	MSK/MSD	1989 Mar 26 2:00s
-			2:00	1:00	EEST	1989 Sep 24 2:00s
+			3:00	Russia	MSK/MSD	1989 Mar 26  2:00s
+			2:00	1:00	EEST	1989 Sep 24  2:00s
 			2:00	C-Eur	EE%sT	1998 Sep 22
 			2:00	EU	EE%sT	1999 Nov  1
 			2:00	-	EET	2002 Feb 21
@@ -1104,35 +1106,45 @@ Zone	Europe/Tallinn	1:39:00	-	LMT	1880
 # This is documented in Heikki Oja: Aikakirja 2007, published by The Almanac
 # Office of University of Helsinki, ISBN 952-10-3221-9, available online (in
 # Finnish) at
-#
-# 
 # http://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf
-# 
 #
 # Page 105 (56 in PDF version) has a handy table of all past daylight savings
 # transitions. It is easy enough to interpret without Finnish skills.
 #
 # This is also confirmed by Finnish Broadcasting Company's archive at:
-#
-# 
 # http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401
-# 
 #
 # The news clip from 1981 says that "the time between 2 and 3 o'clock does not
 # exist tonight."
 
+# From Konstantin Hyppönen (2014-06-13):
+# [Heikki Oja's book Aikakirja 2013]
+# http://almanakka.helsinki.fi/images/aikakirja/Aikakirja2013kokonaan.pdf
+# pages 104-105, including a scan from a newspaper published on Apr 2 1942
+# say that ... [o]n Apr 2 1942, 24 o'clock (which means Apr 3 1942,
+# 00:00), clocks were moved one hour forward. The newspaper
+# mentions "on the night from Thursday to Friday"....
+# On Oct 4 1942, clocks were moved at 1:00 one hour backwards.
+#
+# From Paul Eggert (2014-06-14):
+# Go with Oja over Shanks.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Finland	1942	only	-	Apr	3	0:00	1:00	S
-Rule	Finland	1942	only	-	Oct	3	0:00	0	-
+Rule	Finland	1942	only	-	Apr	2	24:00	1:00	S
+Rule	Finland	1942	only	-	Oct	4	1:00	0	-
 Rule	Finland	1981	1982	-	Mar	lastSun	2:00	1:00	S
 Rule	Finland	1981	1982	-	Sep	lastSun	3:00	0	-
+
+# Milne says Helsinki (Helsingfors) time was 1:39:49.2 (official document);
+# round to nearest.
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Helsinki	1:39:52 -	LMT	1878 May 31
-			1:39:52	-	HMT	1921 May    # Helsinki Mean Time
+Zone	Europe/Helsinki	1:39:49 -	LMT	1878 May 31
+			1:39:49	-	HMT	1921 May    # Helsinki Mean Time
 			2:00	Finland	EE%sT	1983
 			2:00	EU	EE%sT
 
-# Aaland Is
+# Åland Is
 Link	Europe/Helsinki	Europe/Mariehamn
 
 
@@ -1140,14 +1152,14 @@ Link	Europe/Helsinki	Europe/Mariehamn
 
 # From Ciro Discepolo (2000-12-20):
 #
-# Henri Le Corre, Regimes Horaires pour le monde entier, Editions
+# Henri Le Corre, Régimes horaires pour le monde entier, Éditions
 # Traditionnelles - Paris 2 books, 1993
 #
-# Gabriel, Traite de l'heure dans le monde, Guy Tredaniel editeur,
+# Gabriel, Traité de l'heure dans le monde, Guy Trédaniel,
 # Paris, 1991
 #
-# Francoise Gauquelin, Problemes de l'heure resolus en astrologie,
-# Guy tredaniel, Paris 1987
+# Françoise Gauquelin, Problèmes de l'heure résolus en astrologie,
+# Guy Trédaniel, Paris 1987
 
 
 #
@@ -1188,16 +1200,16 @@ Rule	France	1939	only	-	Nov	18	23:00s	0	-
 Rule	France	1940	only	-	Feb	25	 2:00	1:00	S
 # The French rules for 1941-1944 were not used in Paris, but Shanks & Pottenger
 # write that they were used in Monaco and in many French locations.
-# Le Corre writes that the upper limit of the free zone was Arneguy, Orthez,
-# Mont-de-Marsan, Bazas, Langon, Lamotte-Montravel, Marouil, La
-# Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Descartes,
+# Le Corre writes that the upper limit of the free zone was Arnéguy, Orthez,
+# Mont-de-Marsan, Bazas, Langon, Lamothe-Montravel, Marœuil, La
+# Rochefoucauld, Champagne-Mouton, La Roche-Posay, La Haye-Descartes,
 # Loches, Montrichard, Vierzon, Bourges, Moulins, Digoin,
-# Paray-le-Monial, Montceau-les-Mines, Chalons-sur-Saone, Arbois,
+# Paray-le-Monial, Montceau-les-Mines, Chalon-sur-Saône, Arbois,
 # Dole, Morez, St-Claude, and Collonges (Haute-Savoie).
 Rule	France	1941	only	-	May	 5	 0:00	2:00	M # Midsummer
 # Shanks & Pottenger say this transition occurred at Oct 6 1:00,
 # but go with Denis Excoffier (1997-12-12),
-# who quotes the Ephemerides Astronomiques for 1998 from Bureau des Longitudes
+# who quotes the Ephémérides astronomiques for 1998 from Bureau des Longitudes
 # as saying 5/10/41 22hUT.
 Rule	France	1941	only	-	Oct	 6	 0:00	1:00	S
 Rule	France	1942	only	-	Mar	 9	 0:00	2:00	M
@@ -1218,7 +1230,7 @@ Rule	France	1976	only	-	Sep	26	 1:00	0	-
 # on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Paris	0:09:21 -	LMT	1891 Mar 15  0:01
-			0:09:21	-	PMT	1911 Mar 11  0:01  # Paris MT
+			0:09:21	-	PMT	1911 Mar 11  0:01 # Paris MT
 # Shanks & Pottenger give 1940 Jun 14 0:00; go with Excoffier and Le Corre.
 			0:00	France	WE%sT	1940 Jun 14 23:00
 # Le Corre says Paris stuck with occupied-France time after the liberation;
@@ -1235,15 +1247,13 @@ Zone	Europe/Paris	0:09:21 -	LMT	1891 Mar 15  0:01
 # Bundesanstalt contains DST information back to 1916.
 # [See tz-link.htm for the URL.]
 
-# From Joerg Schilling (2002-10-23):
+# From Jörg Schilling (2002-10-23):
 # In 1945, Berlin was switched to Moscow Summer time (GMT+4) by
-# 
-# General [Nikolai] Bersarin.
+# http://www.dhm.de/lemo/html/biografien/BersarinNikolai/
+# General [Nikolai] Bersarin.
 
 # From Paul Eggert (2003-03-08):
-# 
 # http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf
-# 
 # says that Bersarin issued an order to use Moscow time on May 20.
 # However, Moscow did not observe daylight saving in 1945, so
 # this was equivalent to CEMT (GMT+3), not GMT+4.
@@ -1268,23 +1278,23 @@ Rule SovietZone	1945	only	-	Nov	18	2:00s	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Berlin	0:53:28 -	LMT	1893 Apr
-			1:00	C-Eur	CE%sT	1945 May 24 2:00
+			1:00	C-Eur	CE%sT	1945 May 24  2:00
 			1:00 SovietZone	CE%sT	1946
 			1:00	Germany	CE%sT	1980
 			1:00	EU	CE%sT
 
 # From Tobias Conradi (2011-09-12):
-# Busingen , surrounded by the Swiss canton
+# Büsingen , surrounded by the Swiss canton
 # Schaffhausen, did not start observing DST in 1980 as the rest of DE
 # (West Germany at that time) and DD (East Germany at that time) did.
 # DD merged into DE, the area is currently covered by code DE in ISO 3166-1,
 # which in turn is covered by the zone Europe/Berlin.
 #
-# Source for the time in Busingen 1980:
+# Source for the time in Büsingen 1980:
 # http://www.srf.ch/player/video?id=c012c029-03b7-4c2b-9164-aa5902cd58d3
 
 # From Arthur David Olson (2012-03-03):
-# Busingen and Zurich have shared clocks since 1970.
+# Büsingen and Zurich have shared clocks since 1970.
 
 Link	Europe/Zurich	Europe/Busingen
 
@@ -1295,8 +1305,8 @@ Link	Europe/Zurich	Europe/Busingen
 
 # Gibraltar
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Europe/Gibraltar	-0:21:24 -	LMT	1880 Aug  2 0:00s
-			0:00	GB-Eire	%s	1957 Apr 14 2:00
+Zone Europe/Gibraltar	-0:21:24 -	LMT	1880 Aug  2  0:00s
+			0:00	GB-Eire	%s	1957 Apr 14  2:00
 			1:00	-	CET	1982
 			1:00	EU	CE%sT
 
@@ -1327,7 +1337,7 @@ Rule	Greece	1980	only	-	Apr	 1	0:00	1:00	S
 Rule	Greece	1980	only	-	Sep	28	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Athens	1:34:52 -	LMT	1895 Sep 14
-			1:34:52	-	AMT	1916 Jul 28 0:01     # Athens MT
+			1:34:52	-	AMT	1916 Jul 28  0:01 # Athens MT
 			2:00	Greece	EE%sT	1941 Apr 30
 			1:00	Greece	CE%sT	1944 Apr  4
 			2:00	Greece	EE%sT	1981
@@ -1336,15 +1346,20 @@ Zone	Europe/Athens	1:34:52 -	LMT	1895 Sep 14
 			2:00	EU	EE%sT
 
 # Hungary
+# From Paul Eggert (2014-07-15):
+# Dates for 1916-1945 are taken from:
+# Oross A. Jelen a múlt jövője: a nyári időszámítás Magyarországon 1916-1945.
+# National Archives of Hungary (2012-10-29).
+# http://mnl.gov.hu/a_het_dokumentuma/a_nyari_idoszamitas_magyarorszagon_19161945.html
+# This source does not always give times, which are taken from Shanks
+# & Pottenger (which disagree about the dates).
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Hungary	1918	only	-	Apr	 1	 3:00	1:00	S
-Rule	Hungary	1918	only	-	Sep	29	 3:00	0	-
+Rule	Hungary	1918	only	-	Sep	16	 3:00	0	-
 Rule	Hungary	1919	only	-	Apr	15	 3:00	1:00	S
-Rule	Hungary	1919	only	-	Sep	15	 3:00	0	-
-Rule	Hungary	1920	only	-	Apr	 5	 3:00	1:00	S
-Rule	Hungary	1920	only	-	Sep	30	 3:00	0	-
+Rule	Hungary	1919	only	-	Nov	24	 3:00	0	-
 Rule	Hungary	1945	only	-	May	 1	23:00	1:00	S
-Rule	Hungary	1945	only	-	Nov	 3	 0:00	0	-
+Rule	Hungary	1945	only	-	Nov	 1	 0:00	0	-
 Rule	Hungary	1946	only	-	Mar	31	 2:00s	1:00	S
 Rule	Hungary	1946	1949	-	Oct	Sun>=1	 2:00s	0	-
 Rule	Hungary	1947	1949	-	Apr	Sun>=4	 2:00s	1:00	S
@@ -1360,7 +1375,7 @@ Rule	Hungary	1980	only	-	Apr	 6	 1:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Budapest	1:16:20 -	LMT	1890 Oct
 			1:00	C-Eur	CE%sT	1918
-			1:00	Hungary	CE%sT	1941 Apr  6  2:00
+			1:00	Hungary	CE%sT	1941 Apr  8
 			1:00	C-Eur	CE%sT	1945
 			1:00	Hungary	CE%sT	1980 Sep 28  2:00s
 			1:00	EU	CE%sT
@@ -1423,7 +1438,7 @@ Rule	Iceland	1967	only	-	Oct	29	 1:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Atlantic/Reykjavik	-1:27:24 -	LMT	1837
 			-1:27:48 -	RMT	1908 # Reykjavik Mean Time?
-			-1:00	Iceland	IS%sT	1968 Apr 7 1:00s
+			-1:00	Iceland	IS%sT	1968 Apr  7  1:00s
 			 0:00	-	GMT
 
 # Italy
@@ -1438,9 +1453,8 @@ Zone Atlantic/Reykjavik	-1:27:24 -	LMT	1837
 # From Paul Eggert (2006-03-22):
 # For Italian DST we have three sources: Shanks & Pottenger, Whitman, and
 # F. Pollastri
-# 
 # Day-light Saving Time in Italy (2006-02-03)
-# 
+# http://toi.iriti.cnr.it/uk/ienitlt.html
 # ('FP' below), taken from an Italian National Electrotechnical Institute
 # publication. When the three sources disagree, guess who's right, as follows:
 #
@@ -1500,8 +1514,8 @@ Rule	Italy	1978	only	-	Oct	 1	0:00s	0	-
 Rule	Italy	1979	only	-	Sep	30	0:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Rome	0:49:56 -	LMT	1866 Sep 22
-			0:49:56	-	RMT	1893 Nov  1 0:00s # Rome Mean
-			1:00	Italy	CE%sT	1942 Nov  2 2:00s
+			0:49:56	-	RMT	1893 Nov  1  0:00s # Rome Mean
+			1:00	Italy	CE%sT	1942 Nov  2  2:00s
 			1:00	C-Eur	CE%sT	1944 Jul
 			1:00	Italy	CE%sT	1980
 			1:00	EU	CE%sT
@@ -1548,18 +1562,18 @@ Link	Europe/Rome	Europe/San_Marino
 
 # From Andrei Ivanov (2000-03-06):
 # This year Latvia will not switch to Daylight Savings Time (as specified in
-# 
 # The Regulations of the Cabinet of Ministers of the Rep. of Latvia of
-# 29-Feb-2000 (#79), in Latvian for subscribers only).
+# 29-Feb-2000 (#79) ,
+# in Latvian for subscribers only).
 
-# 
-# From RFE/RL Newsline (2001-01-03), noted after a heads-up by Rives McDow:
-# 
+# From RFE/RL Newsline
+# http://www.rferl.org/newsline/2001/01/3-CEE/cee-030101.html
+# (2001-01-03), noted after a heads-up by Rives McDow:
 # The Latvian government on 2 January decided that the country will
 # institute daylight-saving time this spring, LETA reported.
 # Last February the three Baltic states decided not to turn back their
 # clocks one hour in the spring....
-# Minister of Economy Aigars Kalvitis noted that Latvia had too few
+# Minister of Economy Aigars Kalvītis noted that Latvia had too few
 # daylight hours and thus decided to comply with a draft European
 # Commission directive that provides for instituting daylight-saving
 # time in EU countries between 2002 and 2006. The Latvian government
@@ -1569,18 +1583,23 @@ Link	Europe/Rome	Europe/San_Marino
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Latvia	1989	1996	-	Mar	lastSun	 2:00s	1:00	S
 Rule	Latvia	1989	1996	-	Sep	lastSun	 2:00s	0	-
+
+# Milne 1899 says Riga was 1:36:28 (Polytechnique House time).
+# Byalokoz 1919 says Latvia was 1:36:34.
+# Go with Byalokoz.
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Riga	1:36:24	-	LMT	1880
-			1:36:24	-	RMT	1918 Apr 15 2:00 #Riga Mean Time
-			1:36:24	1:00	LST	1918 Sep 16 3:00 #Latvian Summer
-			1:36:24	-	RMT	1919 Apr  1 2:00
-			1:36:24	1:00	LST	1919 May 22 3:00
-			1:36:24	-	RMT	1926 May 11
+Zone	Europe/Riga	1:36:34	-	LMT	1880
+			1:36:34	-	RMT	1918 Apr 15  2:00 # Riga MT
+			1:36:34	1:00	LST	1918 Sep 16  3:00 # Latvian ST
+			1:36:34	-	RMT	1919 Apr  1  2:00
+			1:36:34	1:00	LST	1919 May 22  3:00
+			1:36:34	-	RMT	1926 May 11
 			2:00	-	EET	1940 Aug  5
 			3:00	-	MSK	1941 Jul
 			1:00	C-Eur	CE%sT	1944 Oct 13
-			3:00	Russia	MSK/MSD	1989 Mar lastSun 2:00s
-			2:00	1:00	EEST	1989 Sep lastSun 2:00s
+			3:00	Russia	MSK/MSD	1989 Mar lastSun  2:00s
+			2:00	1:00	EEST	1989 Sep lastSun  2:00s
 			2:00	Latvia	EE%sT	1997 Jan 21
 			2:00	EU	EE%sT	2000 Feb 29
 			2:00	-	EET	2001 Jan  2
@@ -1614,7 +1633,7 @@ Link Europe/Zurich Europe/Vaduz
 # I would like to inform that in this year Lithuanian time zone
 # (Europe/Vilnius) was changed.
 
-# From ELTA No. 972 (2582) (1999-09-29),
+# From ELTA No. 972 (2582) (1999-09-29) ,
 # via Steffen Thorsen:
 # Lithuania has shifted back to the second time zone (GMT plus two hours)
 # to be valid here starting from October 31,
@@ -1623,9 +1642,9 @@ Link Europe/Zurich Europe/Vaduz
 # motion to give up shifting to summer time in spring, as it was
 # already done by Estonia.
 
-# From the 
-# Fact File, Lithuanian State Department of Tourism
-#  (2000-03-27): Local time is GMT+2 hours ..., no daylight saving.
+# From the Fact File, Lithuanian State Department of Tourism
+#  (2000-03-27):
+# Local time is GMT+2 hours ..., no daylight saving.
 
 # From a user via Klaus Marten (2003-02-07):
 # As a candidate for membership of the European Union, Lithuania will
@@ -1638,18 +1657,18 @@ Link Europe/Zurich Europe/Vaduz
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Vilnius	1:41:16	-	LMT	1880
-			1:24:00	-	WMT	1917	    # Warsaw Mean Time
+			1:24:00	-	WMT	1917        # Warsaw Mean Time
 			1:35:36	-	KMT	1919 Oct 10 # Kaunas Mean Time
 			1:00	-	CET	1920 Jul 12
 			2:00	-	EET	1920 Oct  9
 			1:00	-	CET	1940 Aug  3
 			3:00	-	MSK	1941 Jun 24
 			1:00	C-Eur	CE%sT	1944 Aug
-			3:00	Russia	MSK/MSD	1991 Mar 31 2:00s
-			2:00	1:00	EEST	1991 Sep 29 2:00s
+			3:00	Russia	MSK/MSD	1991 Mar 31  2:00s
+			2:00	1:00	EEST	1991 Sep 29  2:00s
 			2:00	C-Eur	EE%sT	1998
-			2:00	-	EET	1998 Mar 29 1:00u
-			1:00	EU	CE%sT	1999 Oct 31 1:00u
+			2:00	-	EET	1998 Mar 29  1:00u
+			1:00	EU	CE%sT	1999 Oct 31  1:00u
 			2:00	-	EET	2003 Jan  1
 			2:00	EU	EE%sT
 
@@ -1683,9 +1702,9 @@ Rule	Lux	1929	only	-	Apr	20	23:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Luxembourg	0:24:36 -	LMT	1904 Jun
 			1:00	Lux	CE%sT	1918 Nov 25
-			0:00	Lux	WE%sT	1929 Oct  6 2:00s
-			0:00	Belgium	WE%sT	1940 May 14 3:00
-			1:00	C-Eur	WE%sT	1944 Sep 18 3:00
+			0:00	Lux	WE%sT	1929 Oct  6  2:00s
+			0:00	Belgium	WE%sT	1940 May 14  3:00
+			1:00	C-Eur	WE%sT	1944 Sep 18  3:00
 			1:00	Belgium	CE%sT	1977
 			1:00	EU	CE%sT
 
@@ -1702,9 +1721,9 @@ Rule	Malta	1975	1979	-	Apr	Sun>=15	2:00	1:00	S
 Rule	Malta	1975	1980	-	Sep	Sun>=15	2:00	0	-
 Rule	Malta	1980	only	-	Mar	31	2:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2 0:00s # Valletta
-			1:00	Italy	CE%sT	1942 Nov  2 2:00s
-			1:00	C-Eur	CE%sT	1945 Apr  2 2:00s
+Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2  0:00s # Valletta
+			1:00	Italy	CE%sT	1942 Nov  2  2:00s
+			1:00	C-Eur	CE%sT	1945 Apr  2  2:00s
 			1:00	Italy	CE%sT	1973 Mar 31
 			1:00	Malta	CE%sT	1981
 			1:00	EU	CE%sT
@@ -1719,7 +1738,7 @@ Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2 0:00s # Valletta
 # In early 1992 there was large-scale interethnic violence in the area
 # and it's possible that some Russophones continued to observe Moscow time.
 # But [two people] separately reported via
-# Jesper Norgaard that as of 2001-01-24 Tiraspol was like Chisinau.
+# Jesper Nørgaard that as of 2001-01-24 Tiraspol was like Chisinau.
 # The Tiraspol entry has therefore been removed for now.
 #
 # From Alexander Krivenyshev (2011-10-17):
@@ -1728,13 +1747,8 @@ Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2 0:00s # Valletta
 # to the Winter Time).
 #
 # News (in Russian):
-# 
 # http://www.kyivpost.ua/russia/news/pridnestrove-otkazalos-ot-perehoda-na-zimnee-vremya-30954.html
-# 
-#
-# 
 # http://www.allmoldova.com/moldova-news/1249064116.html
-# 
 #
 # The substance of this change (reinstatement of the Tiraspol entry)
 # is from a patch from Petr Machata (2011-10-17)
@@ -1752,9 +1766,7 @@ Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2 0:00s # Valletta
 # Following Moldova and neighboring Ukraine- Transnistria (Pridnestrovie)-
 # Tiraspol will go back to winter time on October 30, 2011.
 # News from Moldova (in russian):
-# 
 # http://ru.publika.md/link_317061.html
-# 
 
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -1777,8 +1789,8 @@ Zone	Europe/Chisinau	1:55:20 -	LMT	1880
 # more precise 0:09:21.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Monaco	0:29:32 -	LMT	1891 Mar 15
-			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
-			0:00	France	WE%sT	1945 Sep 16 3:00
+			0:09:21	-	PMT	1911 Mar 11 # Paris Mean Time
+			0:00	France	WE%sT	1945 Sep 16  3:00
 			1:00	France	CE%sT	1977
 			1:00	EU	CE%sT
 
@@ -1822,8 +1834,8 @@ Zone	Europe/Monaco	0:29:32 -	LMT	1891 Mar 15
 # was not until 1866 when they were all required by law to observe
 # Amsterdam mean time.
 
-# The data before 1945 are taken from
-# .
+# The data entries before 1945 are taken from
+# http://www.phys.uu.nl/~vgent/wettijd/wettijd.htm
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Neth	1916	only	-	May	 1	0:00	1:00	NST	# Netherlands Summer Time
@@ -1854,8 +1866,8 @@ Rule	Neth	1945	only	-	Sep	16	2:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Amsterdam	0:19:32 -	LMT	1835
 			0:19:32	Neth	%s	1937 Jul  1
-			0:20	Neth	NE%sT	1940 May 16 0:00 # Dutch Time
-			1:00	C-Eur	CE%sT	1945 Apr  2 2:00
+			0:20	Neth	NE%sT	1940 May 16  0:00 # Dutch Time
+			1:00	C-Eur	CE%sT	1945 Apr  2  2:00
 			1:00	Neth	CE%sT	1977
 			1:00	EU	CE%sT
 
@@ -1885,14 +1897,14 @@ Zone	Europe/Oslo	0:43:00 -	LMT	1895 Jan  1
 # time they were declared as parts of Norway.  Svalbard was declared
 # as a part of Norway by law of 1925-07-17 no 11, section 4 and Jan
 # Mayen by law of 1930-02-27 no 2, section 2. (From
-# http://www.lovdata.no/all/nl-19250717-011.html and
-# http://www.lovdata.no/all/nl-19300227-002.html).  The law/regulation
+#  and
+# ).  The law/regulation
 # for normal/standard time in Norway is from 1894-06-29 no 1 (came
 # into operation on 1895-01-01) and Svalbard/Jan Mayen seem to be a
 # part of this law since 1925/1930. (From
-# http://www.lovdata.no/all/nl-18940629-001.html ) I have not been
+# ) I have not been
 # able to find if Jan Mayen used a different time zone (e.g. -0100)
-# before 1930. Jan Mayen has only been "inhabitated" since 1921 by
+# before 1930. Jan Mayen has only been "inhabited" since 1921 by
 # Norwegian meteorologists and maybe used the same time as Norway ever
 # since 1921.  Svalbard (Arctic/Longyearbyen) has been inhabited since
 # before 1895, and therefore probably changed the local time somewhere
@@ -1907,7 +1919,7 @@ Zone	Europe/Oslo	0:43:00 -	LMT	1895 Jan  1
 #  says that the meteorologists
 # burned down their station in 1940 and left the island, but returned in
 # 1941 with a small Norwegian garrison and continued operations despite
-# frequent air ttacks from Germans.  In 1943 the Americans established a
+# frequent air attacks from Germans.  In 1943 the Americans established a
 # radiolocating station on the island, called "Atlantic City".  Possibly
 # the UT offset changed during the war, but I think it unlikely that
 # Jan Mayen used German daylight-saving rules.
@@ -1918,7 +1930,7 @@ Zone	Europe/Oslo	0:43:00 -	LMT	1895 Jan  1
 #  says that the Germans were
 # expelled on 1942-05-14.  However, small parties of Germans did return,
 # and according to Wilhelm Dege's book "War North of 80" (1954)
-# 
+# http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html
 # the German armed forces at the Svalbard weather station code-named
 # Haudegen did not surrender to the Allies until September 1945.
 #
@@ -1927,6 +1939,10 @@ Zone	Europe/Oslo	0:43:00 -	LMT	1895 Jan  1
 Link	Europe/Oslo	Arctic/Longyearbyen
 
 # Poland
+
+# The 1919 dates and times can be found in Tygodnik Urzędowy nr 1 (1919-03-20),
+#  pp 1-2.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Poland	1918	1919	-	Sep	16	2:00s	0	-
 Rule	Poland	1919	only	-	Apr	15	2:00s	1:00	S
@@ -1937,9 +1953,9 @@ Rule	Poland	1944	only	-	Oct	 4	2:00	0	-
 Rule	Poland	1945	only	-	Apr	29	0:00	1:00	S
 Rule	Poland	1945	only	-	Nov	 1	0:00	0	-
 # For 1946 on the source is Kazimierz Borkowski,
-# Torun Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U.,
-# 
-# Thanks to Przemyslaw Augustyniak (2005-05-28) for this reference.
+# Toruń Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U.,
+# http://www.astro.uni.torun.pl/~kb/Artykuly/U-PA/Czas2.htm#tth_tAb1
+# Thanks to Przemysław Augustyniak (2005-05-28) for this reference.
 # He also gives these further references:
 # Mon Pol nr 13, poz 162 (1995) 
 # Druk nr 2180 (2003) 
@@ -1959,10 +1975,10 @@ Rule	Poland	1961	1964	-	May	lastSun	1:00s	1:00	S
 Rule	Poland	1962	1964	-	Sep	lastSun	1:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Warsaw	1:24:00 -	LMT	1880
-			1:24:00	-	WMT	1915 Aug  5   # Warsaw Mean Time
-			1:00	C-Eur	CE%sT	1918 Sep 16 3:00
+			1:24:00	-	WMT	1915 Aug  5 # Warsaw Mean Time
+			1:00	C-Eur	CE%sT	1918 Sep 16  3:00
 			2:00	Poland	EE%sT	1922 Jun
-			1:00	Poland	CE%sT	1940 Jun 23 2:00
+			1:00	Poland	CE%sT	1940 Jun 23  2:00
 			1:00	C-Eur	CE%sT	1944 Oct
 			1:00	Poland	CE%sT	1977
 			1:00	W-Eur	CE%sT	1988
@@ -1970,6 +1986,14 @@ Zone	Europe/Warsaw	1:24:00 -	LMT	1880
 
 # Portugal
 #
+# From Paul Eggert (2014-08-11), after a heads-up from Stephen Colebourne:
+# According to a Portuguese decree (1911-05-26)
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# Lisbon was at -0:36:44.68, but switched to GMT on 1912-01-01 at 00:00.
+# Round the old offset to -0:36:45.  This agrees with Willett but disagrees
+# with Shanks, who says the transition occurred on 1911-05-24 at 00:00 for
+# Europe/Lisbon, Atlantic/Azores, and Atlantic/Madeira.
+#
 # From Rui Pedro Salgueiro (1992-11-12):
 # Portugal has recently (September, 27) changed timezone
 # (from WET to MET or CET) to harmonize with EEC.
@@ -2049,35 +2073,34 @@ Rule	Port	1979	1982	-	Sep	lastSun	 1:00s	0	-
 Rule	Port	1980	only	-	Mar	lastSun	 0:00s	1:00	S
 Rule	Port	1981	1982	-	Mar	lastSun	 1:00s	1:00	S
 Rule	Port	1983	only	-	Mar	lastSun	 2:00s	1:00	S
+#
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-# Shanks & Pottenger say the transition from LMT to WET occurred 1911-05-24;
-# Willett says 1912-01-01.  Go with Willett.
-Zone	Europe/Lisbon	-0:36:32 -	LMT	1884
-			-0:36:32 -	LMT	1912 Jan  1  # Lisbon Mean Time
-			 0:00	Port	WE%sT	1966 Apr  3 2:00
-			 1:00	-	CET	1976 Sep 26 1:00
-			 0:00	Port	WE%sT	1983 Sep 25 1:00s
-			 0:00	W-Eur	WE%sT	1992 Sep 27 1:00s
-			 1:00	EU	CE%sT	1996 Mar 31 1:00u
+Zone	Europe/Lisbon	-0:36:45 -	LMT	1884
+			-0:36:45 -	LMT	1912 Jan  1 # Lisbon Mean Time
+			 0:00	Port	WE%sT	1966 Apr  3  2:00
+			 1:00	-	CET	1976 Sep 26  1:00
+			 0:00	Port	WE%sT	1983 Sep 25  1:00s
+			 0:00	W-Eur	WE%sT	1992 Sep 27  1:00s
+			 1:00	EU	CE%sT	1996 Mar 31  1:00u
 			 0:00	EU	WE%sT
-Zone Atlantic/Azores	-1:42:40 -	LMT	1884		# Ponta Delgada
-			-1:54:32 -	HMT	1911 May 24  # Horta Mean Time
-			-2:00	Port	AZO%sT	1966 Apr  3 2:00 # Azores Time
-			-1:00	Port	AZO%sT	1983 Sep 25 1:00s
-			-1:00	W-Eur	AZO%sT	1992 Sep 27 1:00s
-			 0:00	EU	WE%sT	1993 Mar 28 1:00u
+Zone Atlantic/Azores	-1:42:40 -	LMT	1884        # Ponta Delgada
+			-1:54:32 -	HMT	1912 Jan  1 # Horta Mean Time
+			-2:00	Port	AZO%sT	1966 Apr  3  2:00  # Azores Time
+			-1:00	Port	AZO%sT	1983 Sep 25  1:00s
+			-1:00	W-Eur	AZO%sT	1992 Sep 27  1:00s
+			 0:00	EU	WE%sT	1993 Mar 28  1:00u
 			-1:00	EU	AZO%sT
-Zone Atlantic/Madeira	-1:07:36 -	LMT	1884		# Funchal
-			-1:07:36 -	FMT	1911 May 24  # Funchal Mean Time
-			-1:00	Port	MAD%sT	1966 Apr  3 2:00 # Madeira Time
-			 0:00	Port	WE%sT	1983 Sep 25 1:00s
+Zone Atlantic/Madeira	-1:07:36 -	LMT	1884        # Funchal
+			-1:07:36 -	FMT	1912 Jan  1 # Funchal Mean Time
+			-1:00	Port	MAD%sT	1966 Apr  3  2:00 # Madeira Time
+			 0:00	Port	WE%sT	1983 Sep 25  1:00s
 			 0:00	EU	WE%sT
 
 # Romania
 #
 # From Paul Eggert (1999-10-07):
-# 
-# Nine O'clock (1998-10-23) reports that the switch occurred at
+# Nine O'clock 
+# (1998-10-23) reports that the switch occurred at
 # 04:00 local time in fall 1998.  For lack of better info,
 # assume that Romania and Moldova switched to EU rules in 1997,
 # the same year as Bulgaria.
@@ -2094,32 +2117,28 @@ Rule	Romania	1991	1993	-	Mar	lastSun	 0:00s	1:00	S
 Rule	Romania	1991	1993	-	Sep	lastSun	 0:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Bucharest	1:44:24 -	LMT	1891 Oct
-			1:44:24	-	BMT	1931 Jul 24	# Bucharest MT
-			2:00	Romania	EE%sT	1981 Mar 29 2:00s
+			1:44:24	-	BMT	1931 Jul 24 # Bucharest MT
+			2:00	Romania	EE%sT	1981 Mar 29  2:00s
 			2:00	C-Eur	EE%sT	1991
 			2:00	Romania	EE%sT	1994
 			2:00	E-Eur	EE%sT	1997
 			2:00	EU	EE%sT
 
+
 # Russia
 
 # From Alexander Krivenyshev (2011-09-15):
 # Based on last Russian Government Decree # 725 on August 31, 2011
 # (Government document
-# 
 # http://www.government.ru/gov/results/16355/print/
-# 
 # in Russian)
 # there are few corrections have to be made for some Russian time zones...
 # All updated Russian Time Zones were placed in table and translated to English
 # by WorldTimeZone.com at the link below:
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_russia36.htm
-# 
 
 # From Sanjeev Gupta (2011-09-27):
 # Scans of [Decree #23 of January 8, 1992] are available at:
-# 
 # http://government.consultant.ru/page.aspx?1223966
 # They are in Cyrillic letters (presumably Russian).
 
@@ -2128,16 +2147,12 @@ Zone Europe/Bucharest	1:44:24 -	LMT	1891 Oct
 # changed in September 2011:
 #
 # One source is
-# < a href="http://government.ru/gov/results/16355/>
 # http://government.ru/gov/results/16355/
-# 
 # which, according to translate.google.com, begins "Decree of August 31,
 # 2011 No 725" and contains no other dates or "effective date" information.
 #
 # Another source is
-# 
 # http://www.rg.ru/2011/09/06/chas-zona-dok.html
-# 
 # which, according to translate.google.com, begins "Resolution of the
 # Government of the Russian Federation on August 31, 2011 N 725" and also
 # contains "Date first official publication: September 6, 2011 Posted on:
@@ -2145,28 +2160,45 @@ Zone Europe/Bucharest	1:44:24 -	LMT	1891 Oct
 # does not contain any "effective date" information.
 #
 # Another source is
-# 
 # http://en.wikipedia.org/wiki/Oymyakonsky_District#cite_note-RuTime-7
-# 
 # which, in note 8, contains "Resolution #725 of August 31, 2011...
 # Effective as of after 7 days following the day of the official publication"
 # but which does not contain any reference to September 6, 2011.
 #
 # The Wikipedia article refers to
-# 
 # http://base.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=118896
-# 
 # which seems to copy the text of the government.ru page.
 #
 # Tobias Conradi combines Wikipedia's
 # "as of after 7 days following the day of the official publication"
-# with www.rg.ru's "Date of first official publication: September 6, 2011" to get
-# September 13, 2011 as the cutover date (unusually, a Tuesday, as Tobias Conradi notes).
+# with www.rg.ru's "Date of first official publication: September 6, 2011" to
+# get September 13, 2011 as the cutover date (unusually, a Tuesday, as Tobias
+# Conradi notes).
 #
 # None of the sources indicates a time of day for changing clocks.
 #
 # Go with 2011-09-13 0:00s.
 
+# From Alexander Krivenyshev (2014-07-01):
+# According to the Russian news (ITAR-TASS News Agency)
+# http://en.itar-tass.com/russia/738562
+# the State Duma has approved ... the draft bill on returning to
+# winter time standard and return Russia 11 time zones.  The new
+# regulations will come into effect on October 26, 2014 at 02:00 ...
+# http://asozd2.duma.gov.ru/main.nsf/%28Spravka%29?OpenAgent&RN=431985-6&02
+# Here is a link where we put together table (based on approved Bill N
+# 431985-6) with proposed 11 Russian time zones and corresponding
+# areas/cities/administrative centers in the Russian Federation (in English):
+# http://www.worldtimezone.com/dst_news/dst_news_russia65.html
+#
+# From Alexander Krivenyshev (2014-07-22):
+# Putin signed the Federal Law 431985-6 ... (in Russian)
+# http://itar-tass.com/obschestvo/1333711
+# http://www.pravo.gov.ru:8080/page.aspx?111660
+# http://www.kremlin.ru/acts/46279
+# From October 26, 2014 the new Russian time zone map will looks like this:
+# http://www.worldtimezone.com/dst_news/dst_news_russia-map-2014-07.html
+
 # From Paul Eggert (2006-03-22):
 # Except for Moscow after 1919-07-01, I invented the time zone abbreviations.
 # Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991,
@@ -2193,9 +2225,9 @@ Zone Europe/Bucharest	1:44:24 -	LMT	1891 Oct
 #
 # For Grozny, Chechnya, we have the following story from
 # John Daniszewski, "Scavengers in the Rubble", Los Angeles Times (2001-02-07):
-# News--often false--is spread by word of mouth.  A rumor that it was
+# News - often false - is spread by word of mouth.  A rumor that it was
 # time to move the clocks back put this whole city out of sync with
-# the rest of Russia for two weeks--even soldiers stationed here began
+# the rest of Russia for two weeks - even soldiers stationed here began
 # enforcing curfew at the wrong time.
 #
 # From Gwillim Law (2001-06-05):
@@ -2206,107 +2238,265 @@ Zone Europe/Bucharest	1:44:24 -	LMT	1891 Oct
 # since September 1997....  Although the Kuril Islands are
 # administratively part of Sakhalin oblast', they appear to have
 # remained on UTC+11 along with Magadan.
-#
+
+# From Tim Parenti (2014-07-06):
+# The comments detailing the coverage of each Russian zone are meant to assist
+# with maintenance only and represent our best guesses as to which regions
+# are covered by each zone.  They are not meant to be taken as an authoritative
+# listing.  The region codes listed come from
+# http://en.wikipedia.org/w/?title=Federal_subjects_of_Russia&oldid=611810498
+# and are used for convenience only; no guarantees are made regarding their
+# future stability.  ISO 3166-2:RU codes are also listed for first-level
+# divisions where available.
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-#
-# Kaliningradskaya oblast'.
+
+
+# From Tim Parenti (2014-07-03):
+# Europe/Kaliningrad covers...
+# 39	RU-KGD	Kaliningrad Oblast
+
 Zone Europe/Kaliningrad	 1:22:00 -	LMT	1893 Apr
 			 1:00	C-Eur	CE%sT	1945
 			 2:00	Poland	CE%sT	1946
-			 3:00	Russia	MSK/MSD	1991 Mar 31 2:00s
-			 2:00	Russia	EE%sT	2011 Mar 27 2:00s
-			 3:00	-	FET # Further-eastern European Time
+			 3:00	Russia	MSK/MSD	1991 Mar 31  2:00s
+			 2:00	Russia	EE%sT	2011 Mar 27  2:00s
+			 3:00	-	FET	2014 Oct 26  2:00s
+			 2:00	-	EET
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Europe/Moscow covers...
+# 01	RU-AD	Adygea, Republic of
+# 05	RU-DA	Dagestan, Republic of
+# 06	RU-IN	Ingushetia, Republic of
+# 07	RU-KB	Kabardino-Balkar Republic
+# 08	RU-KL	Kalmykia, Republic of
+# 09	RU-KC	Karachay-Cherkess Republic
+# 10	RU-KR	Karelia, Republic of
+# 11	RU-KO	Komi Republic
+# 12	RU-ME	Mari El Republic
+# 13	RU-MO	Mordovia, Republic of
+# 15	RU-SE	North Ossetia-Alania, Republic of
+# 16	RU-TA	Tatarstan, Republic of
+# 20	RU-CE	Chechen Republic
+# 21	RU-CU	Chuvash Republic
+# 23	RU-KDA	Krasnodar Krai
+# 26	RU-STA	Stavropol Krai
+# 29	RU-ARK	Arkhangelsk Oblast
+# 31	RU-BEL	Belgorod Oblast
+# 32	RU-BRY	Bryansk Oblast
+# 33	RU-VLA	Vladimir Oblast
+# 35	RU-VLG	Vologda Oblast
+# 36	RU-VOR	Voronezh Oblast
+# 37	RU-IVA	Ivanovo Oblast
+# 40	RU-KLU	Kaluga Oblast
+# 44	RU-KOS	Kostroma Oblast
+# 46	RU-KRS	Kursk Oblast
+# 47	RU-LEN	Leningrad Oblast
+# 48	RU-LIP	Lipetsk Oblast
+# 50	RU-MOS	Moscow Oblast
+# 51	RU-MUR	Murmansk Oblast
+# 52	RU-NIZ	Nizhny Novgorod Oblast
+# 53	RU-NGR	Novgorod Oblast
+# 57	RU-ORL	Oryol Oblast
+# 58	RU-PNZ	Penza Oblast
+# 60	RU-PSK	Pskov Oblast
+# 61	RU-ROS	Rostov Oblast
+# 62	RU-RYA	Ryazan Oblast
+# 67	RU-SMO	Smolensk Oblast
+# 68	RU-TAM	Tambov Oblast
+# 69	RU-TVE	Tver Oblast
+# 71	RU-TUL	Tula Oblast
+# 73	RU-ULY	Ulyanovsk Oblast
+# 76	RU-YAR	Yaroslavl Oblast
+# 77	RU-MOW	Moscow
+# 78	RU-SPE	Saint Petersburg
+# 83	RU-NEN	Nenets Autonomous Okrug
+
+# From Vladimir Karpinsky (2014-07-08):
+# LMT in Moscow (before Jul 3, 1916) is 2:30:17, that was defined by Moscow
+# Observatory (coordinates: 55 deg. 45'29.70", 37 deg. 34'05.30")....
+# LMT in Moscow since Jul 3, 1916 is 2:31:01 as a result of new standard.
+# (The info is from the book by Byalokoz ... p. 18.)
+# The time in St. Petersburg as capital of Russia was defined by
+# Pulkov observatory, near St. Petersburg.  In 1916 LMT Moscow
+# was synchronized with LMT St. Petersburg (+30 minutes), (Pulkov observatory
+# coordinates: 59 deg. 46'18.70", 30 deg. 19'40.70") so 30 deg. 19'40.70" >
+# 2h01m18.7s = 2:01:19.  LMT Moscow = LMT St.Petersburg + 30m 2:01:19 + 0:30 =
+# 2:31:19 ...
 #
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Adygeya, Arkhangel'skaya oblast',
-# Belgorodskaya oblast', Bryanskaya oblast', Vladimirskaya oblast',
-# Vologodskaya oblast', Voronezhskaya oblast',
-# Respublika Dagestan, Ivanovskaya oblast', Respublika Ingushetiya,
-# Kabarbino-Balkarskaya Respublika, Respublika Kalmykiya,
-# Kalyzhskaya oblast', Respublika Karachaevo-Cherkessiya,
-# Respublika Kareliya, Respublika Komi,
-# Kostromskaya oblast', Krasnodarskij kraj, Kurskaya oblast',
-# Leningradskaya oblast', Lipetskaya oblast', Respublika Marij El,
-# Respublika Mordoviya, Moskva, Moskovskaya oblast',
-# Murmanskaya oblast', Nenetskij avtonomnyj okrug,
-# Nizhegorodskaya oblast', Novgorodskaya oblast', Orlovskaya oblast',
-# Penzenskaya oblast', Pskovskaya oblast', Rostovskaya oblast',
-# Ryazanskaya oblast', Sankt-Peterburg,
-# Respublika Severnaya Osetiya, Smolenskaya oblast',
-# Stavropol'skij kraj, Tambovskaya oblast', Respublika Tatarstan,
-# Tverskaya oblast', Tyl'skaya oblast', Ul'yanovskaya oblast',
-# Chechenskaya Respublika, Chuvashskaya oblast',
-# Yaroslavskaya oblast'
-Zone Europe/Moscow	 2:30:20 -	LMT	1880
-			 2:30	-	MMT	1916 Jul  3 # Moscow Mean Time
-			 2:30:48 Russia	%s	1919 Jul  1 2:00
+# From Paul Eggert (2014-07-08):
+# Milne does not list Moscow, but suggests that its time might be listed in
+# Résumés mensuels et annuels des observations météorologiques (1895).
+# Presumably this is OCLC 85825704, a journal published with parallel text in
+# Russian and French.  This source has not been located; go with Karpinsky.
+
+Zone Europe/Moscow	 2:30:17 -	LMT	1880
+			 2:30:17 -	MMT	1916 Jul  3 # Moscow Mean Time
+			 2:31:19 Russia	%s	1919 Jul  1  2:00
+			 3:00	Russia	%s	1921 Oct
 			 3:00	Russia	MSK/MSD	1922 Oct
 			 2:00	-	EET	1930 Jun 21
-			 3:00	Russia	MSK/MSD	1991 Mar 31 2:00s
-			 2:00	Russia	EE%sT	1992 Jan 19 2:00s
-			 3:00	Russia	MSK/MSD	2011 Mar 27 2:00s
-			 4:00	-	MSK
+			 3:00	Russia	MSK/MSD	1991 Mar 31  2:00s
+			 2:00	Russia	EE%sT	1992 Jan 19  2:00s
+			 3:00	Russia	MSK/MSD	2011 Mar 27  2:00s
+			 4:00	-	MSK	2014 Oct 26  2:00s
+			 3:00	-	MSK
+
+
+# From Tim Parenti (2014-07-03):
+# Europe/Simferopol covers...
+# **	****	Crimea, Republic of
+# **	****	Sevastopol
+
+Zone Europe/Simferopol	 2:16:24 -	LMT	1880
+			 2:16	-	SMT	1924 May  2 # Simferopol Mean T
+			 2:00	-	EET	1930 Jun 21
+			 3:00	-	MSK	1941 Nov
+			 1:00	C-Eur	CE%sT	1944 Apr 13
+			 3:00	Russia	MSK/MSD	1990
+			 3:00	-	MSK	1990 Jul  1  2:00
+			 2:00	-	EET	1992
+# Central Crimea used Moscow time 1994/1997.
 #
-# Astrakhanskaya oblast', Kirovskaya oblast', Saratovskaya oblast',
-# Volgogradskaya oblast'.  Shanks & Pottenger say Kirov is still at +0400
-# but Wikipedia (2006-05-09) says +0300.  Perhaps it switched after the
-# others?  But we have no data.
+# From Paul Eggert (2006-03-22):
+# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
+# from Kiev to Moscow time sometime after the January 1994 elections.
+# Shanks (1999) says "date of change uncertain", but implies that it happened
+# sometime between the 1994 DST switches.  Shanks & Pottenger simply say
+# 1994-09-25 03:00, but that can't be right.  For now, guess it
+# changed in May.
+			 2:00	E-Eur	EE%sT	1994 May
+# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.
+			 3:00	E-Eur	MSK/MSD	1996 Mar 31  3:00s
+			 3:00	1:00	MSD	1996 Oct 27  3:00s
+# IATA SSIM (1997-09) says Crimea switched to EET/EEST.
+# Assume it happened in March by not changing the clocks.
+			 3:00	Russia	MSK/MSD	1997
+			 3:00	-	MSK	1997 Mar lastSun  1:00u
+# From Alexander Krivenyshev (2014-03-17):
+# time change at 2:00 (2am) on March 30, 2014
+# http://vz.ru/news/2014/3/17/677464.html
+# From Paul Eggert (2014-03-30):
+# Simferopol and Sevastopol reportedly changed their central town clocks
+# late the previous day, but this appears to have been ceremonial
+# and the discrepancies are small enough to not worry about.
+			 2:00	EU	EE%sT	2014 Mar 30  2:00
+			 4:00	-	MSK	2014 Oct 26  2:00s
+			 3:00	-	MSK
+
+
+# From Tim Parenti (2014-07-03):
+# Europe/Volgograd covers...
+# 30	RU-AST	Astrakhan Oblast
+# 34	RU-VGG	Volgograd Oblast
+# 43	RU-KIR	Kirov Oblast
+# 64	RU-SAR	Saratov Oblast
+
+# From Paul Eggert (2006-05-09):
+# Shanks & Pottenger say Kirov is still at +0400 but Wikipedia says +0300.
+# Perhaps it switched after the others?  But we have no data.
+
 Zone Europe/Volgograd	 2:57:40 -	LMT	1920 Jan  3
 			 3:00	-	TSAT	1925 Apr  6 # Tsaritsyn Time
 			 3:00	-	STAT	1930 Jun 21 # Stalingrad Time
 			 4:00	-	STAT	1961 Nov 11
-			 4:00	Russia	VOL%sT	1989 Mar 26 2:00s # Volgograd T
-			 3:00	Russia	VOL%sT	1991 Mar 31 2:00s
-			 4:00	-	VOLT	1992 Mar 29 2:00s
-			 3:00	Russia	VOL%sT	2011 Mar 27 2:00s
-			 4:00	-	VOLT
-#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Samarskaya oblast', Udmyrtskaya respublika
-Zone Europe/Samara	 3:20:36 -	LMT	1919 Jul  1 2:00
+			 4:00	Russia	VOL%sT	1989 Mar 26  2:00s # Volgograd T
+			 3:00	Russia	VOL%sT	1991 Mar 31  2:00s
+			 4:00	-	VOLT	1992 Mar 29  2:00s
+			 3:00	Russia	MSK	2011 Mar 27  2:00s
+			 4:00	-	MSK	2014 Oct 26  2:00s
+			 3:00	-	MSK
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Europe/Samara covers...
+# 18	RU-UD	Udmurt Republic
+# 63	RU-SAM	Samara Oblast
+
+# Byalokoz 1919 says Samara was 3:20:20.
+
+Zone Europe/Samara	 3:20:20 -	LMT	1919 Jul  1  2:00
 			 3:00	-	SAMT	1930 Jun 21
 			 4:00	-	SAMT	1935 Jan 27
-			 4:00	Russia	KUY%sT	1989 Mar 26 2:00s # Kuybyshev
-			 3:00	Russia	KUY%sT	1991 Mar 31 2:00s
-			 2:00	Russia	KUY%sT	1991 Sep 29 2:00s
-			 3:00	-	KUYT	1991 Oct 20 3:00
-			 4:00	Russia	SAM%sT	2010 Mar 28 2:00s # Samara Time
-			 3:00	Russia	SAM%sT	2011 Mar 27 2:00s
+			 4:00	Russia	KUY%sT	1989 Mar 26  2:00s # Kuybyshev
+			 3:00	Russia	MSK/MSD	1991 Mar 31  2:00s
+			 2:00	Russia	EE%sT	1991 Sep 29  2:00s
+			 3:00	-	KUYT	1991 Oct 20  3:00
+			 4:00	Russia	SAM%sT	2010 Mar 28  2:00s # Samara Time
+			 3:00	Russia	SAM%sT	2011 Mar 27  2:00s
 			 4:00	-	SAMT
 
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Yekaterinburg covers...
+# 02	RU-BA	Bashkortostan, Republic of
+# 90	RU-PER	Perm Krai
+# 45	RU-KGN	Kurgan Oblast
+# 56	RU-ORE	Orenburg Oblast
+# 66	RU-SVE	Sverdlovsk Oblast
+# 72	RU-TYU	Tyumen Oblast
+# 74	RU-CHE	Chelyabinsk Oblast
+# 86	RU-KHM	Khanty-Mansi Autonomous Okrug - Yugra
+# 89	RU-YAN	Yamalo-Nenets Autonomous Okrug
 #
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Bashkortostan, Komi-Permyatskij avtonomnyj okrug,
-# Kurganskaya oblast', Orenburgskaya oblast', Permskaya oblast',
-# Sverdlovskaya oblast', Tyumenskaya oblast',
-# Khanty-Manskijskij avtonomnyj okrug, Chelyabinskaya oblast',
-# Yamalo-Nenetskij avtonomnyj okrug.
-Zone Asia/Yekaterinburg	 4:02:24 -	LMT	1919 Jul 15 4:00
+# Note: Effective 2005-12-01, (59) Perm Oblast and (81) Komi-Permyak
+# Autonomous Okrug merged to form (90, RU-PER) Perm Krai.
+
+# Milne says Yekaterinburg was 4:02:32.9; round to nearest.
+# Byalokoz 1919 says its provincial time was based on Perm, at 3:45:05.
+# Assume it switched on 1916-07-03, the time of the new standard.
+# The 1919 and 1930 transitions are from Shanks.
+
+Zone Asia/Yekaterinburg	 4:02:33 -	LMT	1916 Jul  3
+			 3:45:05 -	PMT	1919 Jul 15  4:00
 			 4:00	-	SVET	1930 Jun 21 # Sverdlovsk Time
-			 5:00	Russia	SVE%sT	1991 Mar 31 2:00s
-			 4:00	Russia	SVE%sT	1992 Jan 19 2:00s
-			 5:00	Russia	YEK%sT	2011 Mar 27 2:00s
-			 6:00	-	YEKT	# Yekaterinburg Time
-#
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Altaj, Altajskij kraj, Omskaya oblast'.
-Zone Asia/Omsk		 4:53:36 -	LMT	1919 Nov 14
-			 5:00	-	OMST	1930 Jun 21 # Omsk TIme
-			 6:00	Russia	OMS%sT	1991 Mar 31 2:00s
-			 5:00	Russia	OMS%sT	1992 Jan 19 2:00s
-			 6:00	Russia	OMS%sT	2011 Mar 27 2:00s
-			 7:00	-	OMST
-#
+			 5:00	Russia	SVE%sT	1991 Mar 31  2:00s
+			 4:00	Russia	SVE%sT	1992 Jan 19  2:00s
+			 5:00	Russia	YEK%sT	2011 Mar 27  2:00s
+			 6:00	-	YEKT	2014 Oct 26  2:00s
+			 5:00	-	YEKT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Omsk covers...
+# 04	RU-AL	Altai Republic
+# 22	RU-ALT	Altai Krai
+# 55	RU-OMS	Omsk Oblast
+
+# Byalokoz 1919 says Omsk was 4:53:30.
+
+Zone Asia/Omsk		 4:53:30 -	LMT	1919 Nov 14
+			 5:00	-	OMST	1930 Jun 21 # Omsk Time
+			 6:00	Russia	OMS%sT	1991 Mar 31  2:00s
+			 5:00	Russia	OMS%sT	1992 Jan 19  2:00s
+			 6:00	Russia	OMS%sT	2011 Mar 27  2:00s
+			 7:00	-	OMST	2014 Oct 26  2:00s
+			 6:00	-	OMST
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Novosibirsk covers...
+# 54	RU-NVS	Novosibirsk Oblast
+# 70	RU-TOM	Tomsk Oblast
+
 # From Paul Eggert (2006-08-19): I'm guessing about Tomsk here; it's
 # not clear when it switched from +7 to +6.
-# Novosibirskaya oblast', Tomskaya oblast'.
-Zone Asia/Novosibirsk	 5:31:40 -	LMT	1919 Dec 14 6:00
+
+Zone Asia/Novosibirsk	 5:31:40 -	LMT	1919 Dec 14  6:00
 			 6:00	-	NOVT	1930 Jun 21 # Novosibirsk Time
-			 7:00	Russia	NOV%sT	1991 Mar 31 2:00s
-			 6:00	Russia	NOV%sT	1992 Jan 19 2:00s
+			 7:00	Russia	NOV%sT	1991 Mar 31  2:00s
+			 6:00	Russia	NOV%sT	1992 Jan 19  2:00s
 			 7:00	Russia	NOV%sT	1993 May 23 # say Shanks & P.
-			 6:00	Russia	NOV%sT	2011 Mar 27 2:00s
-			 7:00	-	NOVT
+			 6:00	Russia	NOV%sT	2011 Mar 27  2:00s
+			 7:00	-	NOVT	2014 Oct 26  2:00s
+			 6:00	-	NOVT
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Novokuznetsk covers...
+# 42	RU-KEM	Kemerovo Oblast
 
 # From Alexander Krivenyshev (2009-10-13):
 # Kemerovo oblast' (Kemerovo region) in Russia will change current time zone on
@@ -2319,14 +2509,10 @@ Zone Asia/Novosibirsk	 5:31:40 -	LMT	1919 Dec 14 6:00
 # time zone." ("Russia Zone 5" or old "USSR Zone 5" is GMT +0600)
 #
 # Russian Government web site (Russian language)
-# 
 # http://www.government.ru/content/governmentactivity/rfgovernmentdecisions/archive/2009/09/14/991633.htm
-# 
 # or Russian-English translation by WorldTimeZone.com with reference
 # map to local region and new Russia Time Zone map after March 28, 2010
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_russia03.html
-# 
 #
 # Thus, when Russia will switch to DST on the night of March 28, 2010
 # Kemerovo region (Kemerovo oblast') will not change the clock.
@@ -2334,152 +2520,319 @@ Zone Asia/Novosibirsk	 5:31:40 -	LMT	1919 Dec 14 6:00
 # As a result, Kemerovo oblast' will be in the same time zone as
 # Novosibirsk, Omsk, Tomsk, Barnaul and Altai Republic.
 
+# From Tim Parenti (2014-07-02), per Alexander Krivenyshev (2014-07-02):
+# The Kemerovo region will remain at UTC+7 through the 2014-10-26 change, thus
+# realigning itself with KRAT.
+
 Zone Asia/Novokuznetsk	 5:48:48 -	NMT	1920 Jan  6
 			 6:00	-	KRAT	1930 Jun 21 # Krasnoyarsk Time
-			 7:00	Russia	KRA%sT	1991 Mar 31 2:00s
-			 6:00	Russia	KRA%sT	1992 Jan 19 2:00s
-			 7:00	Russia	KRA%sT	2010 Mar 28 2:00s
-			 6:00	Russia	NOV%sT	2011 Mar 27 2:00s
-			 7:00	-	NOVT # Novosibirsk/Novokuznetsk Time
+			 7:00	Russia	KRA%sT	1991 Mar 31  2:00s
+			 6:00	Russia	KRA%sT	1992 Jan 19  2:00s
+			 7:00	Russia	KRA%sT	2010 Mar 28  2:00s
+			 6:00	Russia	NOV%sT	2011 Mar 27  2:00s # Novosibirsk
+			 7:00	-	NOVT	2014 Oct 26  2:00s
+			 7:00	-	KRAT	# Krasnoyarsk Time
 
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Krasnoyarsk covers...
+# 17	RU-TY	Tuva Republic
+# 19	RU-KK	Khakassia, Republic of
+# 24	RU-KYA	Krasnoyarsk Krai
 #
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Krasnoyarskij kraj,
-# Tajmyrskij (Dolgano-Nenetskij) avtonomnyj okrug,
-# Respublika Tuva, Respublika Khakasiya, Evenkijskij avtonomnyj okrug.
-Zone Asia/Krasnoyarsk	 6:11:20 -	LMT	1920 Jan  6
+# Note: Effective 2007-01-01, (88) Evenk Autonomous Okrug and (84) Taymyr
+# Autonomous Okrug were merged into (24, RU-KYA) Krasnoyarsk Krai.
+
+# Byalokoz 1919 says Krasnoyarsk was 6:11:26.
+
+Zone Asia/Krasnoyarsk	 6:11:26 -	LMT	1920 Jan  6
 			 6:00	-	KRAT	1930 Jun 21 # Krasnoyarsk Time
-			 7:00	Russia	KRA%sT	1991 Mar 31 2:00s
-			 6:00	Russia	KRA%sT	1992 Jan 19 2:00s
-			 7:00	Russia	KRA%sT	2011 Mar 27 2:00s
-			 8:00	-	KRAT
+			 7:00	Russia	KRA%sT	1991 Mar 31  2:00s
+			 6:00	Russia	KRA%sT	1992 Jan 19  2:00s
+			 7:00	Russia	KRA%sT	2011 Mar 27  2:00s
+			 8:00	-	KRAT	2014 Oct 26  2:00s
+			 7:00	-	KRAT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Irkutsk covers...
+# 03	RU-BU	Buryatia, Republic of
+# 38	RU-IRK	Irkutsk Oblast
 #
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Buryatiya, Irkutskaya oblast',
-# Ust'-Ordynskij Buryatskij avtonomnyj okrug.
-Zone Asia/Irkutsk	 6:57:20 -	LMT	1880
-			 6:57:20 -	IMT	1920 Jan 25 # Irkutsk Mean Time
+# Note: Effective 2008-01-01, (85) Ust-Orda Buryat Autonomous Okrug was
+# merged into (38, RU-IRK) Irkutsk Oblast.
+
+# Milne 1899 says Irkutsk was 6:57:15.
+# Byalokoz 1919 says Irkutsk was 6:57:05.
+# Go with Byalokoz.
+
+Zone Asia/Irkutsk	 6:57:05 -	LMT	1880
+			 6:57:05 -	IMT	1920 Jan 25 # Irkutsk Mean Time
 			 7:00	-	IRKT	1930 Jun 21 # Irkutsk Time
-			 8:00	Russia	IRK%sT	1991 Mar 31 2:00s
-			 7:00	Russia	IRK%sT	1992 Jan 19 2:00s
-			 8:00	Russia	IRK%sT	2011 Mar 27 2:00s
-			 9:00	-	IRKT
+			 8:00	Russia	IRK%sT	1991 Mar 31  2:00s
+			 7:00	Russia	IRK%sT	1992 Jan 19  2:00s
+			 8:00	Russia	IRK%sT	2011 Mar 27  2:00s
+			 9:00	-	IRKT	2014 Oct 26  2:00s
+			 8:00	-	IRKT
+
+
+# From Tim Parenti (2014-07-06):
+# Asia/Chita covers...
+# 92	RU-ZAB	Zabaykalsky Krai
 #
-# From Oscar van Vlijmen (2003-10-18): [This region consists of]
-# Aginskij Buryatskij avtonomnyj okrug, Amurskaya oblast',
-# [parts of] Respublika Sakha (Yakutiya), Chitinskaya oblast'.
+# Note: Effective 2008-03-01, (75) Chita Oblast and (80) Agin-Buryat
+# Autonomous Okrug merged to form (92, RU-ZAB) Zabaykalsky Krai.
 
-# From Oscar van Vlijmen (2009-11-29):
-# ...some regions of [Russia] were merged with others since 2005...
-# Some names were changed, no big deal, except for one instance: a new name.
-# YAK/YAKST: UTC+9 Zabajkal'skij kraj.
-
-# From Oscar van Vlijmen (2009-11-29):
-# The Sakha districts are: Aldanskij, Amginskij, Anabarskij,
-# Verkhnevilyujskij, Vilyujskij, Gornyj,
-# Zhiganskij, Kobyajskij, Lenskij, Megino-Kangalasskij, Mirninskij,
-# Namskij, Nyurbinskij, Olenyokskij, Olyokminskij,
-# Suntarskij, Tattinskij, Ust'-Aldanskij, Khangalasskij,
-# Churapchinskij, Eveno-Bytantajskij Natsional'nij.
-
-Zone Asia/Yakutsk	 8:38:40 -	LMT	1919 Dec 15
+Zone Asia/Chita	 7:33:52 -	LMT	1919 Dec 15
 			 8:00	-	YAKT	1930 Jun 21 # Yakutsk Time
-			 9:00	Russia	YAK%sT	1991 Mar 31 2:00s
-			 8:00	Russia	YAK%sT	1992 Jan 19 2:00s
-			 9:00	Russia	YAK%sT	2011 Mar 27 2:00s
-			 10:00	-	YAKT
-#
-# From Oscar van Vlijmen (2003-10-18): [This region consists of]
-# Evrejskaya avtonomnaya oblast', Khabarovskij kraj, Primorskij kraj,
-# [parts of] Respublika Sakha (Yakutiya).
+			 9:00	Russia	YAK%sT	1991 Mar 31  2:00s
+			 8:00	Russia	YAK%sT	1992 Jan 19  2:00s
+			 9:00	Russia	YAK%sT	2011 Mar 27  2:00s
+			10:00	-	YAKT	2014 Oct 26  2:00s
+			 8:00	-	IRKT
 
-# From Oscar van Vlijmen (2009-11-29):
-# The Sakha districts are: Bulunskij, Verkhoyanskij, ... Ust'-Yanskij.
-Zone Asia/Vladivostok	 8:47:44 -	LMT	1922 Nov 15
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
+# Asia/Yakutsk covers...
+# 28	RU-AMU	Amur Oblast
+#
+# ...and parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-02	****	Aldansky District
+# 14-04	****	Amginsky District
+# 14-05	****	Anabarsky District
+# 14-06	****	Bulunsky District
+# 14-07	****	Verkhnevilyuysky District
+# 14-10	****	Vilyuysky District
+# 14-11	****	Gorny District
+# 14-12	****	Zhigansky District
+# 14-13	****	Kobyaysky District
+# 14-14	****	Lensky District
+# 14-15	****	Megino-Kangalassky District
+# 14-16	****	Mirninsky District
+# 14-18	****	Namsky District
+# 14-19	****	Neryungrinsky District
+# 14-21	****	Nyurbinsky District
+# 14-23	****	Olenyoksky District
+# 14-24	****	Olyokminsky District
+# 14-26	****	Suntarsky District
+# 14-27	****	Tattinsky District
+# 14-29	****	Ust-Aldansky District
+# 14-32	****	Khangalassky District
+# 14-33	****	Churapchinsky District
+# 14-34	****	Eveno-Bytantaysky National District
+
+# From Tim Parenti (2014-07-03):
+# Our commentary seems to have lost mention of (14-19) Neryungrinsky District.
+# Since the surrounding districts of Sakha are all YAKT, assume this is, too.
+# Also assume its history has been the same as the rest of Asia/Yakutsk.
+
+# Byalokoz 1919 says Yakutsk was 8:38:58.
+
+Zone Asia/Yakutsk	 8:38:58 -	LMT	1919 Dec 15
+			 8:00	-	YAKT	1930 Jun 21 # Yakutsk Time
+			 9:00	Russia	YAK%sT	1991 Mar 31  2:00s
+			 8:00	Russia	YAK%sT	1992 Jan 19  2:00s
+			 9:00	Russia	YAK%sT	2011 Mar 27  2:00s
+			10:00	-	YAKT	2014 Oct 26  2:00s
+			 9:00	-	YAKT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
+# Asia/Vladivostok covers...
+# 25	RU-PRI	Primorsky Krai
+# 27	RU-KHA	Khabarovsk Krai
+# 79	RU-YEV	Jewish Autonomous Oblast
+#
+# ...and parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-09	****	Verkhoyansky District
+# 14-31	****	Ust-Yansky District
+
+# Milne 1899 says Vladivostok was 8:47:33.5.
+# Byalokoz 1919 says Vladivostok was 8:47:31.
+# Go with Byalokoz.
+
+Zone Asia/Vladivostok	 8:47:31 -	LMT	1922 Nov 15
 			 9:00	-	VLAT	1930 Jun 21 # Vladivostok Time
-			10:00	Russia	VLA%sT	1991 Mar 31 2:00s
-			 9:00	Russia	VLA%sST	1992 Jan 19 2:00s
-			10:00	Russia	VLA%sT	2011 Mar 27 2:00s
-			11:00	-	VLAT
+			10:00	Russia	VLA%sT	1991 Mar 31  2:00s
+			 9:00	Russia	VLA%sT	1992 Jan 19  2:00s
+			10:00	Russia	VLA%sT	2011 Mar 27  2:00s
+			11:00	-	VLAT	2014 Oct 26  2:00s
+			10:00	-	VLAT
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Khandyga covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-28	****	Tomponsky District
+# 14-30	****	Ust-Maysky District
 
 # From Arthur David Olson (2012-05-09):
 # Tomponskij and Ust'-Majskij switched from Vladivostok time to Yakutsk time
 # in 2011.
-#
+
 # From Paul Eggert (2012-11-25):
 # Shanks and Pottenger (2003) has Khandyga on Yakutsk time.
 # Make a wild guess that it switched to Vladivostok time in 2004.
 # This transition is no doubt wrong, but we have no better info.
-#
+
 Zone Asia/Khandyga	 9:02:13 -	LMT	1919 Dec 15
 			 8:00	-	YAKT	1930 Jun 21 # Yakutsk Time
-			 9:00	Russia	YAK%sT	1991 Mar 31 2:00s
-			 8:00	Russia	YAK%sT	1992 Jan 19 2:00s
+			 9:00	Russia	YAK%sT	1991 Mar 31  2:00s
+			 8:00	Russia	YAK%sT	1992 Jan 19  2:00s
 			 9:00	Russia	YAK%sT	2004
-			10:00	Russia	VLA%sT	2011 Mar 27 2:00s
-			11:00	-	VLAT	2011 Sep 13 0:00s # Decree 725?
-			10:00	-	YAKT
+			10:00	Russia	VLA%sT	2011 Mar 27  2:00s
+			11:00	-	VLAT	2011 Sep 13  0:00s # Decree 725?
+			10:00	-	YAKT	2014 Oct 26  2:00s
+			 9:00	-	YAKT
 
-#
-# Sakhalinskaya oblast'.
-# The Zone name should be Yuzhno-Sakhalinsk, but that's too long.
+
+# From Tim Parenti (2014-07-03):
+# Asia/Sakhalin covers...
+# 65	RU-SAK	Sakhalin Oblast
+# ...with the exception of:
+# 65-11	****	Severo-Kurilsky District (North Kuril Islands)
+
+# The Zone name should be Asia/Yuzhno-Sakhalinsk, but that's too long.
 Zone Asia/Sakhalin	 9:30:48 -	LMT	1905 Aug 23
-			 9:00	-	CJT	1938
+			 9:00	-	JCST	1937 Oct  1
 			 9:00	-	JST	1945 Aug 25
-			11:00	Russia	SAK%sT	1991 Mar 31 2:00s # Sakhalin T.
-			10:00	Russia	SAK%sT	1992 Jan 19 2:00s
-			11:00	Russia	SAK%sT	1997 Mar lastSun 2:00s
-			10:00	Russia	SAK%sT	2011 Mar 27 2:00s
-			11:00	-	SAKT
-#
-# From Oscar van Vlijmen (2003-10-18): [This region consists of]
-# Magadanskaya oblast', Respublika Sakha (Yakutiya).
-# Probably also: Kuril Islands.
+			11:00	Russia	SAK%sT	1991 Mar 31  2:00s # Sakhalin T
+			10:00	Russia	SAK%sT	1992 Jan 19  2:00s
+			11:00	Russia	SAK%sT	1997 Mar lastSun  2:00s
+			10:00	Russia	SAK%sT	2011 Mar 27  2:00s
+			11:00	-	SAKT	2014 Oct 26  2:00s
+			10:00	-	SAKT
+
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
+# Asia/Magadan covers...
+# 49	RU-MAG	Magadan Oblast
+
+# From Tim Parenti (2014-07-06), per Alexander Krivenyshev (2014-07-02):
+# Magadan Oblast is moving from UTC+12 to UTC+10 on 2014-10-26; however,
+# several districts of Sakha Republic as well as Severo-Kurilsky District of
+# the Sakhalin Oblast (also known as the North Kuril Islands), represented
+# until now by Asia/Magadan, will instead move to UTC+11.  These regions will
+# need their own zone.
 
-# From Oscar van Vlijmen (2009-11-29):
-# The Sakha districts are: Abyjskij, Allaikhovskij, Verkhhhnekolymskij, Momskij,
-# Nizhnekolymskij, ... Srednekolymskij.
 Zone Asia/Magadan	10:03:12 -	LMT	1924 May  2
 			10:00	-	MAGT	1930 Jun 21 # Magadan Time
-			11:00	Russia	MAG%sT	1991 Mar 31 2:00s
-			10:00	Russia	MAG%sT	1992 Jan 19 2:00s
-			11:00	Russia	MAG%sT	2011 Mar 27 2:00s
-			12:00	-	MAGT
+			11:00	Russia	MAG%sT	1991 Mar 31  2:00s
+			10:00	Russia	MAG%sT	1992 Jan 19  2:00s
+			11:00	Russia	MAG%sT	2011 Mar 27  2:00s
+			12:00	-	MAGT	2014 Oct 26  2:00s
+			10:00	-	MAGT
+
+
+# From Tim Parenti (2014-07-06):
+# Asia/Srednekolymsk covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-01	****	Abyysky District
+# 14-03	****	Allaikhovsky District
+# 14-08	****	Verkhnekolymsky District
+# 14-17	****	Momsky District
+# 14-20	****	Nizhnekolymsky District
+# 14-25	****	Srednekolymsky District
+#
+# ...and parts of (65, RU-SAK) Sakhalin Oblast:
+# 65-11	****	Severo-Kurilsky District (North Kuril Islands)
+
+# From Tim Parenti (2014-07-02):
+# Oymyakonsky District of Sakha Republic (represented by Ust-Nera), along with
+# most of Sakhalin Oblast (represented by Sakhalin) will be moving to UTC+10 on
+# 2014-10-26 to stay aligned with VLAT/SAKT; however, Severo-Kurilsky District
+# of the Sakhalin Oblast (also known as the North Kuril Islands, represented by
+# Severo-Kurilsk) will remain on UTC+11.
+
+# From Tim Parenti (2014-07-06):
+# Assume North Kuril Islands have history like Magadan before 2011-03-27.
+# There is a decent chance this is wrong, in which case a new zone
+# Asia/Severo-Kurilsk would become necessary.
+#
+# Srednekolymsk and Zyryanka are the most populous places amongst these
+# districts, but have very similar populations.  In fact, Wikipedia currently
+# lists them both as having 3528 people, exactly 1668 males and 1860 females
+# each!  (Yikes!)
+# http://en.wikipedia.org/w/?title=Srednekolymsky_District&oldid=603435276
+# http://en.wikipedia.org/w/?title=Verkhnekolymsky_District&oldid=594378493
+# Assume this is a mistake, albeit an amusing one.
+#
+# Looking at censuses, the populations of the two municipalities seem to have
+# fluctuated recently.  Zyryanka was more populous than Srednekolymsk in the
+# 1989 and 2002 censuses, but Srednekolymsk was more populous in the most
+# recent (2010) census, 3525 to 3170.  (See pages 195 and 197 of
+# http://www.gks.ru/free_doc/new_site/perepis2010/croc/Documents/Vol1/pub-01-05.pdf
+# in Russian.)  In addition, Srednekolymsk appears to be a much older
+# settlement and the population of Zyryanka seems to be declining.
+# Go with Srednekolymsk.
+#
+# Since Magadan Oblast moves to UTC+10 on 2014-10-26, we cannot keep using MAGT
+# as the abbreviation.  Use SRET instead.
+
+Zone Asia/Srednekolymsk	10:14:52 -	LMT	1924 May  2
+			10:00	-	MAGT	1930 Jun 21 # Magadan Time
+			11:00	Russia	MAG%sT	1991 Mar 31  2:00s
+			10:00	Russia	MAG%sT	1992 Jan 19  2:00s
+			11:00	Russia	MAG%sT	2011 Mar 27  2:00s
+			12:00	-	MAGT	2014 Oct 26  2:00s
+			11:00	-	SRET	# Srednekolymsk Time
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Ust-Nera covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
+# 14-22	****	Oymyakonsky District
 
 # From Arthur David Olson (2012-05-09):
-# Ojmyakonskij and the Kuril Islands switched from
+# Ojmyakonskij [and the Kuril Islands] switched from
 # Magadan time to Vladivostok time in 2011.
+#
+# From Tim Parenti (2014-07-06), per Alexander Krivenyshev (2014-07-02):
+# It's unlikely that any of the Kuril Islands were involved in such a switch,
+# as the South and Middle Kurils have been on UTC+11 (SAKT) with the rest of
+# Sakhalin Oblast since at least 2011-09, and the North Kurils have been on
+# UTC+12 since at least then, too.
+
 Zone Asia/Ust-Nera	 9:32:54 -	LMT	1919 Dec 15
 			 8:00	-	YAKT	1930 Jun 21 # Yakutsk Time
 			 9:00	Russia	YAKT	1981 Apr  1
-			11:00	Russia	MAG%sT	1991 Mar 31 2:00s
-			10:00	Russia	MAG%sT	1992 Jan 19 2:00s
-			11:00	Russia	MAG%sT	2011 Mar 27 2:00s
-			12:00	-	MAGT	2011 Sep 13 0:00s # Decree 725?
-			11:00	-	VLAT
+			11:00	Russia	MAG%sT	1991 Mar 31  2:00s
+			10:00	Russia	MAG%sT	1992 Jan 19  2:00s
+			11:00	Russia	MAG%sT	2011 Mar 27  2:00s
+			12:00	-	MAGT	2011 Sep 13  0:00s # Decree 725?
+			11:00	-	VLAT	2014 Oct 26  2:00s
+			10:00	-	VLAT
 
-# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Kamchatskaya oblast', Koryakskij avtonomnyj okrug.
+
+# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# Asia/Kamchatka covers...
+# 91	RU-KAM	Kamchatka Krai
 #
-# The Zone name should be Asia/Petropavlovsk-Kamchatski, but that's too long.
+# Note: Effective 2007-07-01, (41) Kamchatka Oblast and (82) Koryak
+# Autonomous Okrug merged to form (91, RU-KAM) Kamchatka Krai.
+
+# The Zone name should be Asia/Petropavlovsk-Kamchatski or perhaps
+# Asia/Petropavlovsk-Kamchatsky, but these are too long.
 Zone Asia/Kamchatka	10:34:36 -	LMT	1922 Nov 10
 			11:00	-	PETT	1930 Jun 21 # P-K Time
-			12:00	Russia	PET%sT	1991 Mar 31 2:00s
-			11:00	Russia	PET%sT	1992 Jan 19 2:00s
-			12:00	Russia	PET%sT	2010 Mar 28 2:00s
-			11:00	Russia	PET%sT	2011 Mar 27 2:00s
+			12:00	Russia	PET%sT	1991 Mar 31  2:00s
+			11:00	Russia	PET%sT	1992 Jan 19  2:00s
+			12:00	Russia	PET%sT	2010 Mar 28  2:00s
+			11:00	Russia	PET%sT	2011 Mar 27  2:00s
 			12:00	-	PETT
-#
-# Chukotskij avtonomnyj okrug
+
+
+# From Tim Parenti (2014-07-03):
+# Asia/Anadyr covers...
+# 87	RU-CHU	Chukotka Autonomous Okrug
+
 Zone Asia/Anadyr	11:49:56 -	LMT	1924 May  2
 			12:00	-	ANAT	1930 Jun 21 # Anadyr Time
-			13:00	Russia	ANA%sT	1982 Apr  1 0:00s
-			12:00	Russia	ANA%sT	1991 Mar 31 2:00s
-			11:00	Russia	ANA%sT	1992 Jan 19 2:00s
-			12:00	Russia	ANA%sT	2010 Mar 28 2:00s
-			11:00	Russia	ANA%sT	2011 Mar 27 2:00s
+			13:00	Russia	ANA%sT	1982 Apr  1  0:00s
+			12:00	Russia	ANA%sT	1991 Mar 31  2:00s
+			11:00	Russia	ANA%sT	1992 Jan 19  2:00s
+			12:00	Russia	ANA%sT	2010 Mar 28  2:00s
+			11:00	Russia	ANA%sT	2011 Mar 27  2:00s
 			12:00	-	ANAT
 
+
 # San Marino
 # See Europe/Rome.
 
@@ -2488,11 +2841,11 @@ Zone Asia/Anadyr	11:49:56 -	LMT	1924 May  2
 Zone	Europe/Belgrade	1:22:00	-	LMT	1884
 			1:00	-	CET	1941 Apr 18 23:00
 			1:00	C-Eur	CE%sT	1945
-			1:00	-	CET	1945 May 8 2:00s
+			1:00	-	CET	1945 May  8  2:00s
 			1:00	1:00	CEST	1945 Sep 16  2:00s
-# Metod Kozelj reports that the legal date of
+# Metod Koželj reports that the legal date of
 # transition to EU rules was 1982-11-27, for all of Yugoslavia at the time.
-# Shanks & Pottenger don't give as much detail, so go with Kozelj.
+# Shanks & Pottenger don't give as much detail, so go with Koželj.
 			1:00	-	CET	1982 Nov 27
 			1:00	EU	CE%sT
 Link Europe/Belgrade Europe/Ljubljana	# Slovenia
@@ -2568,13 +2921,13 @@ Zone	Africa/Ceuta	-0:21:16 -	LMT	1901
 			 0:00	1:00	WEST	1918 Oct  7 23:00
 			 0:00	-	WET	1924
 			 0:00	Spain	WE%sT	1929
-			 0:00 SpainAfrica WE%sT 1984 Mar 16
+			 0:00 SpainAfrica WE%sT	1984 Mar 16
 			 1:00	-	CET	1986
 			 1:00	EU	CE%sT
 Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
-			-1:00	-	CANT	1946 Sep 30 1:00 # Canaries Time
-			 0:00	-	WET	1980 Apr  6 0:00s
-			 0:00	1:00	WEST	1980 Sep 28 0:00s
+			-1:00	-	CANT	1946 Sep 30  1:00 # Canaries T
+			 0:00	-	WET	1980 Apr  6  0:00s
+			 0:00	1:00	WEST	1980 Sep 28  0:00s
 			 0:00	EU	WE%sT
 # IATA SSIM (1996-09) says the Canaries switch at 2:00u, not 1:00u.
 # Ignore this for now, as the Canaries are part of the EU.
@@ -2583,7 +2936,7 @@ Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
 
 # From Ivan Nilsson (2001-04-13), superseding Shanks & Pottenger:
 #
-# The law "Svensk forfattningssamling 1878, no 14" about standard time in 1879:
+# The law "Svensk författningssamling 1878, no 14" about standard time in 1879:
 # From the beginning of 1879 (that is 01-01 00:00) the time for all
 # places in the country is "the mean solar time for the meridian at
 # three degrees, or twelve minutes of time, to the west of the
@@ -2594,7 +2947,7 @@ Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
 # national standard time as 01:00:14 ahead of GMT....
 #
 # About the beginning of CET in Sweden. The lawtext ("Svensk
-# forfattningssamling 1899, no 44") states, that "from the beginning
+# författningssamling 1899, no 44") states, that "from the beginning
 # of 1900... ... the same as the mean solar time for the meridian at
 # the distance of one hour of time from the meridian of the English
 # observatory at Greenwich, or at 12 minutes 14 seconds to the west
@@ -2602,7 +2955,7 @@ Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
 # 1899-06-16.  In short: At 1900-01-01 00:00:00 the new standard time
 # in Sweden is 01:00:00 ahead of GMT.
 #
-# 1916: The lawtext ("Svensk forfattningssamling 1916, no 124") states
+# 1916: The lawtext ("Svensk författningssamling 1916, no 124") states
 # that "1916-05-15 is considered to begin one hour earlier". It is
 # pretty obvious that at 05-14 23:00 the clocks are set to 05-15 00:00....
 # Further the law says, that "1916-09-30 is considered to end one hour later".
@@ -2612,7 +2965,7 @@ Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
 # not available on the site (to my knowledge they are only available
 # in Swedish):  (type
 # "sommartid" without the quotes in the field "Fritext" and then click
-# the Sok-button).
+# the Sök-button).
 #
 # (2001-05-13):
 #
@@ -2627,9 +2980,9 @@ Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Stockholm	1:12:12 -	LMT	1879 Jan  1
-			1:00:14	-	SET	1900 Jan  1	# Swedish Time
+			1:00:14	-	SET	1900 Jan  1 # Swedish Time
 			1:00	-	CET	1916 May 14 23:00
-			1:00	1:00	CEST	1916 Oct  1 01:00
+			1:00	1:00	CEST	1916 Oct  1  1:00
 			1:00	-	CET	1980
 			1:00	EU	CE%sT
 
@@ -2637,7 +2990,7 @@ Zone Europe/Stockholm	1:12:12 -	LMT	1879 Jan  1
 # From Howse:
 # By the end of the 18th century clocks and watches became commonplace
 # and their performance improved enormously.  Communities began to keep
-# mean time in preference to apparent time -- Geneva from 1780 ....
+# mean time in preference to apparent time - Geneva from 1780 ....
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 # From Whitman (who writes "Midnight?"):
 # Rule	Swiss	1940	only	-	Nov	 2	0:00	1:00	S
@@ -2653,7 +3006,7 @@ Zone Europe/Stockholm	1:12:12 -	LMT	1879 Jan  1
 # to be wrong. This is now verified.
 #
 # I have found copies of the original ruling by the Swiss Federal
-# government, in 'Eidgen[o]ssische Gesetzessammlung 1941 and 1942' (Swiss
+# government, in 'Eidgenössische Gesetzessammlung 1941 and 1942' (Swiss
 # federal law collection)...
 #
 # DST began on Monday 5 May 1941, 1:00 am by shifting the clocks to 2:00 am
@@ -2672,7 +3025,7 @@ Zone Europe/Stockholm	1:12:12 -	LMT	1879 Jan  1
 # night as an absolute novelty, because this was the first time that such
 # a thing had happened in Switzerland.
 #
-# I have also checked 1916, because one book source (Gabriel, Traite de
+# I have also checked 1916, because one book source (Gabriel, Traité de
 # l'heure dans le monde) claims that Switzerland had DST in 1916. This is
 # false, no official document could be found. Probably Gabriel got misled
 # by references to Germany, which introduced DST in 1916 for the first time.
@@ -2686,19 +3039,19 @@ Zone Europe/Stockholm	1:12:12 -	LMT	1879 Jan  1
 # One further detail for Switzerland, which is probably out of scope for
 # most users of tzdata: The [Europe/Zurich zone] ...
 # describes all of Switzerland correctly, with the exception of
-# the Cantone Geneve (Geneva, Genf). Between 1848 and 1894 Geneve did not
+# the Canton de Genève (Geneva, Genf). Between 1848 and 1894 Geneva did not
 # follow Bern Mean Time but kept its own local mean time.
 # To represent this, an extra zone would be needed.
 #
 # From Alois Treindl (2013-09-11):
 # The Federal regulations say
 # http://www.admin.ch/opc/de/classified-compilation/20071096/index.html
-# ... the meridian for Bern mean time ... is 7 degrees 26'22.50".
+# ... the meridian for Bern mean time ... is 7 degrees 26' 22.50".
 # Expressed in time, it is 0h29m45.5s.
 
 # From Pierre-Yves Berger (2013-09-11):
-# the "Circulaire du conseil federal" (December 11 1893)
-#  ...
+# the "Circulaire du conseil fédéral" (December 11 1893)
+# http://www.amtsdruckschriften.bar.admin.ch/viewOrigDoc.do?id=10071353
 # clearly states that the [1894-06-01] change should be done at midnight
 # but if no one is present after 11 at night, could be postponed until one
 # hour before the beginning of service.
@@ -2709,14 +3062,14 @@ Zone Europe/Stockholm	1:12:12 -	LMT	1879 Jan  1
 # We can find no reliable source for Shanks's assertion that all of Switzerland
 # except Geneva switched to Bern Mean Time at 00:00 on 1848-09-12.  This book:
 #
-#	Jakob Messerli. Gleichmassig, punktlich, schnell: Zeiteinteilung und
+#	Jakob Messerli. Gleichmässig, pünktlich, schnell. Zeiteinteilung und
 #	Zeitgebrauch in der Schweiz im 19. Jahrhundert. Chronos, Zurich 1995,
 #	ISBN 3-905311-68-2, OCLC 717570797.
 #
 # suggests that the transition was more gradual, and that the Swiss did not
 # agree about civil time during the transition.  The timekeeping it gives the
 # most detail for is postal and telegraph time: here, federal legislation (the
-# "Bundesgesetz uber die Erstellung von elektrischen Telegraphen") passed on
+# "Bundesgesetz über die Erstellung von elektrischen Telegraphen") passed on
 # 1851-11-23, and an official implementation notice was published 1853-07-16
 # (Bundesblatt 1853, Bd. II, S. 859).  On p 72 Messerli writes that in
 # practice since July 1853 Bernese time was used in "all postal and telegraph
@@ -2730,7 +3083,7 @@ Rule	Swiss	1941	1942	-	May	Mon>=1	1:00	1:00	S
 Rule	Swiss	1941	1942	-	Oct	Mon>=1	2:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Zurich	0:34:08 -	LMT	1853 Jul 16 # See above comment.
-			0:29:46	-	BMT	1894 Jun # Bern Mean Time
+			0:29:46	-	BMT	1894 Jun    # Bern Mean Time
 			1:00	Swiss	CE%sT	1981
 			1:00	EU	CE%sT
 
@@ -2738,7 +3091,7 @@ Zone	Europe/Zurich	0:34:08 -	LMT	1853 Jul 16 # See above comment.
 
 # From Amar Devegowda (2007-01-03):
 # The time zone rules for Istanbul, Turkey have not been changed for years now.
-# ... The latest rules are available at -
+# ... The latest rules are available at:
 # http://www.timeanddate.com/worldclock/timezone.html?n=107
 # From Steffen Thorsen (2007-01-03):
 # I have been able to find press records back to 1996 which all say that
@@ -2763,8 +3116,7 @@ Zone	Europe/Zurich	0:34:08 -	LMT	1853 Jul 16 # See above comment.
 # (on a non-government server though) describing dates between 2002 and 2006:
 # http://www.alomaliye.com/bkk_2002_3769.htm
 
-# From Gökdeniz Karadağ (2011-03-10):
-#
+# From Gökdeniz Karadağ (2011-03-10):
 # According to the articles linked below, Turkey will change into summer
 # time zone (GMT+3) on March 28, 2011 at 3:00 a.m. instead of March 27.
 # This change is due to a nationwide exam on 27th.
@@ -2777,9 +3129,16 @@ Zone	Europe/Zurich	0:34:08 -	LMT	1853 Jul 16 # See above comment.
 # Turkish Local election....
 # http://www.sabah.com.tr/Ekonomi/2014/02/12/yaz-saatinde-onemli-degisiklik
 # ... so Turkey will move clocks forward one hour on March 31 at 3:00 a.m.
-# From Paul Eggert (2014-02-17):
-# Here is an English-language source:
-# http://www.worldbulletin.net/turkey/129016/turkey-switches-to-daylight-saving-time-march-31
+# From Randal L. Schwartz (2014-04-15):
+# Having landed on a flight from the states to Istanbul (via AMS) on March 31,
+# I can tell you that NOBODY (even the airlines) respected this timezone DST
+# change delay.  Maybe the word just didn't get out in time.
+# From Paul Eggert (2014-06-15):
+# The press reported massive confusion, as election officials obeyed the rule
+# change but cell phones (and airline baggage systems) did not.  See:
+# Kostidis M. Eventful elections in Turkey. Balkan News Agency
+# http://www.balkaneu.com/eventful-elections-turkey/ 2014-03-30.
+# I guess the best we can do is document the official time.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Turkey	1916	only	-	May	 1	0:00	1:00	S
@@ -2846,10 +3205,10 @@ Zone	Europe/Istanbul	1:55:52 -	LMT	1880
 			2:00	Turkey	EE%sT	1978 Oct 15
 			3:00	Turkey	TR%sT	1985 Apr 20 # Turkey Time
 			2:00	Turkey	EE%sT	2007
-			2:00	EU	EE%sT	2011 Mar 27 1:00u
-			2:00	-	EET	2011 Mar 28 1:00u
-			2:00	EU	EE%sT	2014 Mar 30 1:00u
-			2:00	-	EET	2014 Mar 31 1:00u
+			2:00	EU	EE%sT	2011 Mar 27  1:00u
+			2:00	-	EET	2011 Mar 28  1:00u
+			2:00	EU	EE%sT	2014 Mar 30  1:00u
+			2:00	-	EET	2014 Mar 31  1:00u
 			2:00	EU	EE%sT
 Link	Europe/Istanbul	Asia/Istanbul	# Istanbul is in both continents.
 
@@ -2870,7 +3229,7 @@ Link	Europe/Istanbul	Asia/Istanbul	# Istanbul is in both continents.
 # Bill number 8330 of MP from the Party of Regions Oleg Nadoshi got
 # approval from 266 deputies.
 #
-# Ukraine abolishes transter back to the winter time (in Russian)
+# Ukraine abolishes transfer back to the winter time (in Russian)
 # http://news.mail.ru/politics/6861560/
 #
 # The Ukrainians will no longer change the clock (in Russian)
@@ -2931,12 +3290,12 @@ Zone Europe/Kiev	2:02:04 -	LMT	1880
 			2:00	-	EET	1930 Jun 21
 			3:00	-	MSK	1941 Sep 20
 			1:00	C-Eur	CE%sT	1943 Nov  6
-			3:00	Russia	MSK/MSD	1990 Jul  1 2:00
-			2:00	1:00	EEST	1991 Sep 29 3:00
+			3:00	Russia	MSK/MSD	1990 Jul  1  2:00
+			2:00	1:00	EEST	1991 Sep 29  3:00
 			2:00	E-Eur	EE%sT	1995
 			2:00	EU	EE%sT
 # Ruthenia used CET 1990/1991.
-# "Uzhhorod" is the transliteration of the Ukrainian name, but
+# "Uzhhorod" is the transliteration of the Rusyn/Ukrainian pronunciation, but
 # "Uzhgorod" is more common in English.
 Zone Europe/Uzhgorod	1:29:12 -	LMT	1890 Oct
 			1:00	-	CET	1940
@@ -2944,8 +3303,8 @@ Zone Europe/Uzhgorod	1:29:12 -	LMT	1890 Oct
 			1:00	1:00	CEST	1944 Oct 26
 			1:00	-	CET	1945 Jun 29
 			3:00	Russia	MSK/MSD	1990
-			3:00	-	MSK	1990 Jul  1 2:00
-			1:00	-	CET	1991 Mar 31 3:00
+			3:00	-	MSK	1990 Jul  1  2:00
+			1:00	-	CET	1991 Mar 31  3:00
 			2:00	-	EET	1992
 			2:00	E-Eur	EE%sT	1995
 			2:00	EU	EE%sT
@@ -2959,42 +3318,9 @@ Zone Europe/Zaporozhye	2:20:40 -	LMT	1880
 			2:00	-	EET	1930 Jun 21
 			3:00	-	MSK	1941 Aug 25
 			1:00	C-Eur	CE%sT	1943 Oct 25
-			3:00	Russia	MSK/MSD	1991 Mar 31 2:00
+			3:00	Russia	MSK/MSD	1991 Mar 31  2:00
 			2:00	E-Eur	EE%sT	1995
 			2:00	EU	EE%sT
-# Central Crimea used Moscow time 1994/1997.
-Zone Europe/Simferopol	2:16:24 -	LMT	1880
-			2:16	-	SMT	1924 May  2 # Simferopol Mean T
-			2:00	-	EET	1930 Jun 21
-			3:00	-	MSK	1941 Nov
-			1:00	C-Eur	CE%sT	1944 Apr 13
-			3:00	Russia	MSK/MSD	1990
-			3:00	-	MSK	1990 Jul  1 2:00
-			2:00	-	EET	1992
-# From Paul Eggert (2006-03-22):
-# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
-# from Kiev to Moscow time sometime after the January 1994 elections.
-# Shanks (1999) says "date of change uncertain", but implies that it happened
-# sometime between the 1994 DST switches.  Shanks & Pottenger simply say
-# 1994-09-25 03:00, but that can't be right.  For now, guess it
-# changed in May.
-			2:00	E-Eur	EE%sT	1994 May
-# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.
-			3:00	E-Eur	MSK/MSD	1996 Mar 31 3:00s
-			3:00	1:00	MSD	1996 Oct 27 3:00s
-# IATA SSIM (1997-09) says Crimea switched to EET/EEST.
-# Assume it happened in March by not changing the clocks.
-			3:00	Russia	MSK/MSD	1997
-			3:00	-	MSK	1997 Mar lastSun 1:00u
-# From Alexander Krivenyshev (2014-03-17):
-# time change at 2:00 (2am) on March 30, 2014
-# http://vz.ru/news/2014/3/17/677464.html
-# From Paul Eggert (2014-03-30):
-# Simferopol and Sevastopol reportedly changed their central town clocks
-# late the previous day, but this appears to have been ceremonial
-# and the discrepancies are small enough to not worry about.
-			2:00	EU	EE%sT	2014 Mar 30 2:00
-			4:00	-	MSK
 
 # Vatican City
 # See Europe/Rome.
@@ -3018,7 +3344,7 @@ Zone Europe/Simferopol	2:16:24 -	LMT	1880
 # ...
 #
 # ...the European time rules are...standardized since 1981, when
-# most European coun[tr]ies started DST.  Before that year, only
+# most European countries started DST.  Before that year, only
 # a few countries (UK, France, Italy) had DST, each according
 # to own national rules.  In 1981, however, DST started on
 # 'Apr firstSun', and not on 'Mar lastSun' as in the following
@@ -3026,7 +3352,7 @@ Zone Europe/Simferopol	2:16:24 -	LMT	1880
 # But also since 1981 there are some more national exceptions
 # than listed in 'europe': Switzerland, for example, joined DST
 # one year later, Denmark ended DST on 'Oct 1' instead of 'Sep
-# lastSun' in 1981---I don't know how they handle now.
+# lastSun' in 1981 - I don't know how they handle now.
 #
 # Finally, DST ist always from 'Apr 1' to 'Oct 1' in the
 # Soviet Union (as far as I know).
diff --git a/jdk/make/data/tzdata/factory b/jdk/make/data/tzdata/factory
index 813d99a1f1f..0a6041db07e 100644
--- a/jdk/make/data/tzdata/factory
+++ b/jdk/make/data/tzdata/factory
@@ -21,7 +21,6 @@
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
diff --git a/jdk/make/data/tzdata/iso3166.tab b/jdk/make/data/tzdata/iso3166.tab
index 28fb64b647e..63eadcbd0c5 100644
--- a/jdk/make/data/tzdata/iso3166.tab
+++ b/jdk/make/data/tzdata/iso3166.tab
@@ -26,21 +26,21 @@
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 #
-# From Paul Eggert (2013-05-27):
+# From Paul Eggert (2014-07-18):
+# This file contains a table of two-letter country codes.  Columns are
+# separated by a single tab.  Lines beginning with '#' are comments.
+# Although all text currently uses ASCII encoding, this is planned to
+# change to UTF-8 soon.  The columns of the table are as follows:
 #
-# This file contains a table with the following columns:
 # 1.  ISO 3166-1 alpha-2 country code, current as of
-#     ISO 3166-1 Newsletter VI-15 (2013-05-10).  See: Updates on ISO 3166
+#     ISO 3166-1 Newsletter VI-16 (2013-07-11).  See: Updates on ISO 3166
 #   http://www.iso.org/iso/home/standards/country_codes/updates_on_iso_3166.htm
 # 2.  The usual English name for the coded region,
 #     chosen so that alphabetic sorting of subsets produces helpful lists.
 #     This is not the same as the English name in the ISO 3166 tables.
 #
-# Columns are separated by a single tab.
 # The table is sorted by country code.
 #
-# Lines beginning with `#' are comments.
-#
 # This table is intended as an aid for users, to help them select time
 # zone data appropriate for their practical needs.  It is not intended
 # to take or endorse any position on legal or territorial claims.
diff --git a/jdk/make/data/tzdata/leapseconds b/jdk/make/data/tzdata/leapseconds
index b423135b942..d38abd6a4bd 100644
--- a/jdk/make/data/tzdata/leapseconds
+++ b/jdk/make/data/tzdata/leapseconds
@@ -21,7 +21,7 @@
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# Allowance for leapseconds added to each timezone file.
+# Allowance for leap seconds added to each time zone file.
 
 # This file is in the public domain.
 
@@ -31,7 +31,7 @@
 # you should be able to pick up leap-seconds.list from a secondary NIST server.
 # For more about leap-seconds.list, please see
 # The NTP Timescale and Leap Seconds
-# .
+# http://www.eecis.udel.edu/~mills/leap.html
 
 # The International Earth Rotation Service periodically uses leap seconds
 # to keep UTC to within 0.9 s of UT1
diff --git a/jdk/make/data/tzdata/northamerica b/jdk/make/data/tzdata/northamerica
index dc0c2e92cff..0dc714aa92d 100644
--- a/jdk/make/data/tzdata/northamerica
+++ b/jdk/make/data/tzdata/northamerica
@@ -21,15 +21,15 @@
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
 # also includes Central America and the Caribbean
 
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future).  For more, please see
+# the file CONTRIBUTING in the tz distribution.
 
 # From Paul Eggert (1999-03-22):
 # A reliable and entertaining source about time zones is
@@ -78,13 +78,13 @@
 #	to push people into bed earlier, and get them up earlier, to make
 #	them healthy, wealthy and wise in spite of themselves.
 #
-#	-- Robertson Davies, The diary of Samuel Marchbanks,
+#	 -- Robertson Davies, The diary of Samuel Marchbanks,
 #	   Clarke, Irwin (1947), XIX, Sunday
 #
 # For more about the first ten years of DST in the United States, see
-# Robert Garland's 
-# Ten years of daylight saving from the Pittsburgh standpoint
-# (Carnegie Library of Pittsburgh, 1927).
+# Robert Garland, Ten years of daylight saving from the Pittsburgh standpoint
+# (Carnegie Library of Pittsburgh, 1927).
+# http://www.clpgh.org/exhibit/dst.html
 #
 # Shanks says that DST was called "War Time" in the US in 1918 and 1919.
 # However, DST was imposed by the Standard Time Act of 1918, which
@@ -103,11 +103,11 @@
 # From Arthur David Olson (2000-09-25):
 # Last night I heard part of a rebroadcast of a 1945 Arch Oboler radio drama.
 # In the introduction, Oboler spoke of "Eastern Peace Time."
-# An AltaVista search turned up
-# :
+# An AltaVista search turned up:
+# http://rowayton.org/rhs/hstaug45.html
 # "When the time is announced over the radio now, it is 'Eastern Peace
 # Time' instead of the old familiar 'Eastern War Time.'  Peace is wonderful."
-#  (August 1945) by way of confirmation.
+# (August 1945) by way of confirmation.
 
 # From Joseph Gallant citing
 # George H. Douglas, _The Early Days of Radio Broadcasting_ (1987):
@@ -205,7 +205,7 @@ Zone	PST8PDT		 -8:00	US	P%sT
 # USA  ALASKA STD    9 H  BEHIND UTC    MOST OF ALASKA     (AKST)
 # USA  ALASKA STD    8 H  BEHIND UTC    APR 3 - OCT 30 (AKDT)
 # USA  ALEUTIAN     10 H  BEHIND UTC    ISLANDS WEST OF 170W
-# USA  - " -         9 H  BEHIND UTC    APR 3 - OCT 30
+# USA    "           9 H  BEHIND UTC    APR 3 - OCT 30
 # USA  HAWAII       10 H  BEHIND UTC
 # USA  BERING       11 H  BEHIND UTC    SAMOA, MIDWAY
 
@@ -258,19 +258,19 @@ Zone	PST8PDT		 -8:00	US	P%sT
 # The following was signed into law on 2005-08-08.
 #
 # H.R. 6, Energy Policy Act of 2005, SEC. 110. DAYLIGHT SAVINGS.
-#   (a) Amendment- Section 3(a) of the Uniform Time Act of 1966 (15
+#   (a) Amendment.--Section 3(a) of the Uniform Time Act of 1966 (15
 #   U.S.C. 260a(a)) is amended--
-#     (1) by striking 'first Sunday of April' and inserting 'second
-#     Sunday of March'; and
-#     (2) by striking 'last Sunday of October' and inserting 'first
+#     (1) by striking "first Sunday of April" and inserting "second
+#     Sunday of March"; and
+#     (2) by striking "last Sunday of October" and inserting "first
 #     Sunday of November'.
-#   (b) Effective Date- Subsection (a) shall take effect 1 year after the
+#   (b) Effective Date.--Subsection (a) shall take effect 1 year after the
 #   date of enactment of this Act or March 1, 2007, whichever is later.
-#   (c) Report to Congress- Not later than 9 months after the effective
+#   (c) Report to Congress.--Not later than 9 months after the effective
 #   date stated in subsection (b), the Secretary shall report to Congress
 #   on the impact of this section on energy consumption in the United
 #   States.
-#   (d) Right to Revert- Congress retains the right to revert the
+#   (d) Right to Revert.--Congress retains the right to revert the
 #   Daylight Saving Time back to the 2005 time schedules once the
 #   Department study is complete.
 
@@ -292,7 +292,7 @@ Zone	PST8PDT		 -8:00	US	P%sT
 
 # From Paul Eggert (2005-08-26):
 # According to today's Huntsville Times
-# 
+# http://www.al.com/news/huntsvilletimes/index.ssf?/base/news/1125047783228320.xml&coll=1
 # a few towns on Alabama's "eastern border with Georgia, such as Phenix City
 # in Russell County, Lanett in Chambers County and some towns in Lee County,
 # set their watches and clocks on Eastern time."  It quotes H.H. "Bubba"
@@ -347,15 +347,15 @@ Rule	Chicago	1955	1966	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Chicago	-5:50:36 -	LMT	1883 Nov 18 12:09:24
 			-6:00	US	C%sT	1920
-			-6:00	Chicago	C%sT	1936 Mar  1 2:00
-			-5:00	-	EST	1936 Nov 15 2:00
+			-6:00	Chicago	C%sT	1936 Mar  1  2:00
+			-5:00	-	EST	1936 Nov 15  2:00
 			-6:00	Chicago	C%sT	1942
 			-6:00	US	C%sT	1946
 			-6:00	Chicago	C%sT	1967
 			-6:00	US	C%sT
 # Oliver County, ND switched from mountain to central time on 1992-10-25.
 Zone America/North_Dakota/Center -6:45:12 - LMT	1883 Nov 18 12:14:48
-			-7:00	US	M%sT	1992 Oct 25 02:00
+			-7:00	US	M%sT	1992 Oct 25  2:00
 			-6:00	US	C%sT
 # Morton County, ND, switched from mountain to central time on
 # 2003-10-26, except for the area around Mandan which was already central time.
@@ -364,29 +364,26 @@ Zone America/North_Dakota/Center -6:45:12 - LMT	1883 Nov 18 12:14:48
 # Jones, Mellette, and Todd Counties in South Dakota;
 # but in practice these other counties were already observing central time.
 # See .
-Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
-			-7:00	US	M%sT	2003 Oct 26 02:00
+Zone America/North_Dakota/New_Salem -6:45:39 - LMT	1883 Nov 18 12:14:21
+			-7:00	US	M%sT	2003 Oct 26  2:00
 			-6:00	US	C%sT
 
 # From Josh Findley (2011-01-21):
 # ...it appears that Mercer County, North Dakota, changed from the
 # mountain time zone to the central time zone at the last transition from
 # daylight-saving to standard time (on Nov. 7, 2010):
-# 
 # http://www.gpo.gov/fdsys/pkg/FR-2010-09-29/html/2010-24376.htm
-# 
-# 
 # http://www.bismarcktribune.com/news/local/article_1eb1b588-c758-11df-b472-001cc4c03286.html
-# 
 
 # From Andy Lipscomb (2011-01-24):
 # ...according to the Census Bureau, the largest city is Beulah (although
 # it's commonly referred to as Beulah-Hazen, with Hazen being the next
 # largest city in Mercer County).  Google Maps places Beulah's city hall
-# at 4715'51" north, 10146'40" west, which yields an offset of 6h47'07".
+# at 47 degrees 15' 51" N, 101 degrees 46' 40" W, which yields an offset
+# of 6h47'07".
 
-Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53
-			-7:00	US	M%sT	2010 Nov  7 2:00
+Zone America/North_Dakota/Beulah -6:47:07 - LMT	1883 Nov 18 12:12:53
+			-7:00	US	M%sT	2010 Nov  7  2:00
 			-6:00	US	C%sT
 
 # US mountain time, represented by Denver
@@ -448,15 +445,18 @@ Zone America/Los_Angeles -7:52:58 -	LMT	1883 Nov 18 12:07:02
 # was destroyed in 1805 by a Yakutat-kon war party.)  However, there
 # were nearby inhabitants in some cases and for our purposes perhaps
 # it's best to simply use the official transition.
-#
 
-# From Steve Ferguson (2011-01-31):
-# The author lives in Alaska and many of the references listed are only
-# available to Alaskan residents.
+# From Paul Eggert (2014-07-18):
+# One opinion of the early-1980s turmoil in Alaska over time zones and
+# daylight saving time appeared as graffiti on a Juneau airport wall:
+# "Welcome to Juneau.  Please turn your watch back to the 19th century."
+# See: Turner W. Alaska's four time zones now two. NY Times 1983-11-01.
+# http://www.nytimes.com/1983/11/01/us/alaska-s-four-time-zones-now-two.html
 #
-# 
-# http://www.alaskahistoricalsociety.org/index.cfm?section=discover%20alaska&page=Glimpses%20of%20the%20Past&viewpost=2&ContentId=98
-# 
+# Steve Ferguson (2011-01-31) referred to the following source:
+# Norris F. Keeping time in Alaska: national directives, local response.
+# Alaska History 2001;16(1-2).
+# http://alaskahistoricalsociety.org/discover-alaska/glimpses-of-the-past/keeping-time-in-alaska/
 
 # From Arthur David Olson (2011-02-01):
 # Here's database-relevant material from the 2001 "Alaska History" article:
@@ -482,12 +482,10 @@ Zone America/Los_Angeles -7:52:58 -	LMT	1883 Nov 18 12:07:02
 # From Arthur David Olson (2011-02-09):
 # I just spoke by phone with a staff member at the Metlakatla Indian
 # Community office (using contact information available at
-# 
 # http://www.commerce.state.ak.us/dca/commdb/CIS.cfm?Comm_Boro_name=Metlakatla
-# ).
 # It's shortly after 1:00 here on the east coast of the United States;
 # the staffer said it was shortly after 10:00 there. When I asked whether
-# that meant they were on Pacific time, they said no--they were on their
+# that meant they were on Pacific time, they said no - they were on their
 # own time. I asked about daylight saving; they said it wasn't used. I
 # did not inquire about practices in the past.
 
@@ -501,9 +499,9 @@ Zone America/Juneau	 15:02:19 -	LMT	1867 Oct 18
 			 -8:00	-	PST	1942
 			 -8:00	US	P%sT	1946
 			 -8:00	-	PST	1969
-			 -8:00	US	P%sT	1980 Apr 27 2:00
-			 -9:00	US	Y%sT	1980 Oct 26 2:00
-			 -8:00	US	P%sT	1983 Oct 30 2:00
+			 -8:00	US	P%sT	1980 Apr 27  2:00
+			 -9:00	US	Y%sT	1980 Oct 26  2:00
+			 -8:00	US	P%sT	1983 Oct 30  2:00
 			 -9:00	US	Y%sT	1983 Nov 30
 			 -9:00	US	AK%sT
 Zone America/Sitka	 14:58:47 -	LMT	1867 Oct 18
@@ -511,7 +509,7 @@ Zone America/Sitka	 14:58:47 -	LMT	1867 Oct 18
 			 -8:00	-	PST	1942
 			 -8:00	US	P%sT	1946
 			 -8:00	-	PST	1969
-			 -8:00	US	P%sT	1983 Oct 30 2:00
+			 -8:00	US	P%sT	1983 Oct 30  2:00
 			 -9:00	US	Y%sT	1983 Nov 30
 			 -9:00	US	AK%sT
 Zone America/Metlakatla	 15:13:42 -	LMT	1867 Oct 18
@@ -519,8 +517,8 @@ Zone America/Metlakatla	 15:13:42 -	LMT	1867 Oct 18
 			 -8:00	-	PST	1942
 			 -8:00	US	P%sT	1946
 			 -8:00	-	PST	1969
-			 -8:00	US	P%sT	1983 Oct 30 2:00
-			 -8:00	-	MeST
+			 -8:00	US	P%sT	1983 Oct 30  2:00
+			 -8:00	-	PST
 Zone America/Yakutat	 14:41:05 -	LMT	1867 Oct 18
 			 -9:18:55 -	LMT	1900 Aug 20 12:00
 			 -9:00	-	YST	1942
@@ -535,7 +533,7 @@ Zone America/Anchorage	 14:00:24 -	LMT	1867 Oct 18
 			-10:00	US	CAT/CAPT 1946 # Peace
 			-10:00	-	CAT	1967 Apr
 			-10:00	-	AHST	1969
-			-10:00	US	AH%sT	1983 Oct 30 2:00
+			-10:00	US	AH%sT	1983 Oct 30  2:00
 			 -9:00	US	Y%sT	1983 Nov 30
 			 -9:00	US	AK%sT
 Zone America/Nome	 12:58:21 -	LMT	1867 Oct 18
@@ -544,7 +542,7 @@ Zone America/Nome	 12:58:21 -	LMT	1867 Oct 18
 			-11:00	US	N%sT	1946
 			-11:00	-	NST	1967 Apr
 			-11:00	-	BST	1969
-			-11:00	US	B%sT	1983 Oct 30 2:00
+			-11:00	US	B%sT	1983 Oct 30  2:00
 			 -9:00	US	Y%sT	1983 Nov 30
 			 -9:00	US	AK%sT
 Zone America/Adak	 12:13:21 -	LMT	1867 Oct 18
@@ -553,7 +551,7 @@ Zone America/Adak	 12:13:21 -	LMT	1867 Oct 18
 			-11:00	US	N%sT	1946
 			-11:00	-	NST	1967 Apr
 			-11:00	-	BST	1969
-			-11:00	US	B%sT	1983 Oct 30 2:00
+			-11:00	US	B%sT	1983 Oct 30  2:00
 			-10:00	US	AH%sT	1983 Nov 30
 			-10:00	US	HA%sT
 # The following switches don't quite make our 1970 cutoff.
@@ -571,7 +569,7 @@ Zone America/Adak	 12:13:21 -	LMT	1867 Oct 18
 #  Minutes of the Unalaska City Council Meeting, January 10, 1967:
 #  "Except for St. Paul and Akutan, Unalaska is the only important
 #  location not on Alaska Standard Time.  The following resolution was
-#  made by William Robinson and seconded by Henry Swanson:  Be it
+#  made by William Robinson and seconded by Henry Swanson: Be it
 #  resolved that the City of Unalaska hereby goes to Alaska Standard
 #  Time as of midnight Friday, January 13, 1967 (1 A.M. Saturday,
 #  January 14, Alaska Standard Time.)  This resolution was passed with
@@ -583,9 +581,7 @@ Zone America/Adak	 12:13:21 -	LMT	1867 Oct 18
 # "Hawaiian Time" by Robert C. Schmitt and Doak C. Cox appears on pages 207-225
 # of volume 26 of The Hawaiian Journal of History (1992). As of 2010-12-09,
 # the article is available at
-# 
 # http://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf
-# 
 # and indicates that standard time was adopted effective noon, January
 # 13, 1896 (page 218), that in "1933, the Legislature decreed daylight
 # saving for the period between the last Sunday of each April and the
@@ -606,7 +602,7 @@ Zone America/Adak	 12:13:21 -	LMT	1867 Oct 18
 # year, the standard time of this Territory shall be advanced one
 # hour...This Act shall take effect upon its approval. Approved this 26th
 # day of April, A. D. 1933. LAWRENCE M JUDD, Governor of the Territory of
-# Hawaii." Page 172:  "Act 163...Act 90 of the Session Laws of 1933 is
+# Hawaii." Page 172: "Act 163...Act 90 of the Session Laws of 1933 is
 # hereby repealed...This Act shall take effect upon its approval, upon
 # which date the standard time of this Territory shall be restored to
 # that existing immediately prior to the taking effect of said Act 90.
@@ -616,14 +612,14 @@ Zone America/Adak	 12:13:21 -	LMT	1867 Oct 18
 # Note that 1933-05-21 was a Sunday.
 # We're left to guess the time of day when Act 163 was approved; guess noon.
 
-Zone Pacific/Honolulu	-10:31:26 -	LMT	1896 Jan 13 12:00 #Schmitt&Cox
-			-10:30	-	HST	1933 Apr 30 2:00 #Laws 1933
-			-10:30	1:00	HDT	1933 May 21 12:00 #Laws 1933+12
-			-10:30	-	HST	1942 Feb 09 2:00 #Schmitt&Cox+2
-			-10:30	1:00	HDT	1945 Sep 30 2:00 #Schmitt&Cox+2
-			-10:30	-	HST	1947 Jun  8 2:00 #Schmitt&Cox+2
+# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+Zone Pacific/Honolulu	-10:31:26 -	LMT	1896 Jan 13 12:00
+			-10:30	-	HST	1933 Apr 30  2:00
+			-10:30	1:00	HDT	1933 May 21 12:00
+			-10:30	-	HST	1942 Feb  9  2:00
+			-10:30	1:00	HDT	1945 Sep 30  2:00
+			-10:30	-	HST	1947 Jun  8  2:00
 			-10:00	-	HST
-
 Link Pacific/Honolulu Pacific/Johnston
 
 # Now we turn to US areas that have diverged from the consensus since 1970.
@@ -633,9 +629,9 @@ Link Pacific/Honolulu Pacific/Johnston
 # From Paul Eggert (2002-10-20):
 #
 # The information in the rest of this paragraph is derived from the
-# 
-# Daylight Saving Time web page (2002-01-23) maintained by the
-# Arizona State Library, Archives and Public Records.
+# Daylight Saving Time web page
+#  (2002-01-23)
+# maintained by the Arizona State Library, Archives and Public Records.
 # Between 1944-01-01 and 1944-04-01 the State of Arizona used standard
 # time, but by federal law railroads, airlines, bus lines, military
 # personnel, and some engaged in interstate commerce continued to
@@ -649,10 +645,11 @@ Link Pacific/Honolulu Pacific/Johnston
 # Shanks says the 1944 experiment came to an end on 1944-03-17.
 # Go with the Arizona State Library instead.
 
+# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Phoenix	-7:28:18 -	LMT	1883 Nov 18 11:31:42
-			-7:00	US	M%sT	1944 Jan  1 00:01
-			-7:00	-	MST	1944 Apr  1 00:01
-			-7:00	US	M%sT	1944 Oct  1 00:01
+			-7:00	US	M%sT	1944 Jan  1  0:01
+			-7:00	-	MST	1944 Apr  1  0:01
+			-7:00	US	M%sT	1944 Oct  1  0:01
 			-7:00	-	MST	1967
 			-7:00	US	M%sT	1968 Mar 21
 			-7:00	-	MST
@@ -676,24 +673,22 @@ Zone America/Phoenix	-7:28:18 -	LMT	1883 Nov 18 11:31:42
 #
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Boise	-7:44:49 -	LMT	1883 Nov 18 12:15:11
-			-8:00	US	P%sT	1923 May 13 2:00
+			-8:00	US	P%sT	1923 May 13  2:00
 			-7:00	US	M%sT	1974
-			-7:00	-	MST	1974 Feb  3 2:00
+			-7:00	-	MST	1974 Feb  3  2:00
 			-7:00	US	M%sT
 
 # Indiana
 #
 # For a map of Indiana's time zone regions, see:
-# 
-# What time is it in Indiana?
-#  (2006-03-01)
+# http://en.wikipedia.org/wiki/Time_in_Indiana
 #
 # From Paul Eggert (2007-08-17):
 # Since 1970, most of Indiana has been like America/Indiana/Indianapolis,
 # with the following exceptions:
 #
 # - Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer,
-#   Vandenburgh, and Warrick counties have been like America/Chicago.
+#   Vanderburgh, and Warrick counties have been like America/Chicago.
 #
 # - Dearborn and Ohio counties have been like America/New_York.
 #
@@ -712,22 +707,16 @@ Zone America/Boise	-7:44:49 -	LMT	1883 Nov 18 12:15:11
 # that they would be ambiguous if we left them at the 'America' level.
 # So we reluctantly put them all in a subdirectory 'America/Indiana'.
 
-# From Paul Eggert (2005-08-16):
-# http://www.mccsc.edu/time.html says that Indiana will use DST starting 2006.
-
-# From Nathan Stratton Treadway (2006-03-30):
-# http://www.dot.gov/affairs/dot0406.htm [3705 B]
-# From Deborah Goldsmith (2006-01-18):
-# http://dmses.dot.gov/docimages/pdf95/382329_web.pdf [2.9 MB]
-# From Paul Eggert (2006-01-20):
-# It says "DOT is relocating the time zone boundary in Indiana to move Starke,
+# From Paul Eggert (2014-06-26):
+# https://www.federalregister.gov/articles/2006/01/20/06-563/standard-time-zone-boundary-in-the-state-of-indiana
+# says "DOT is relocating the time zone boundary in Indiana to move Starke,
 # Pulaski, Knox, Daviess, Martin, Pike, Dubois, and Perry Counties from the
 # Eastern Time Zone to the Central Time Zone.... The effective date of
-# this rule is 2:OO a.m. EST Sunday, April 2, 2006, which is the
+# this rule is 2 a.m. EST Sunday, April 2, 2006, which is the
 # changeover date from standard time to Daylight Saving Time."
-# Strictly speaking, this means the affected counties will change their
-# clocks twice that night, but this obviously is in error.  The intent
-# is that 01:59:59 EST be followed by 02:00:00 CDT.
+# Strictly speaking, this meant the affected counties changed their
+# clocks twice that night, but this obviously was in error.  The intent
+# was that 01:59:59 EST be followed by 02:00:00 CDT.
 
 # From Gwillim Law (2007-02-10):
 # The Associated Press has been reporting that Pulaski County, Indiana is
@@ -739,13 +728,13 @@ Rule Indianapolis 1941	only	-	Jun	22	2:00	1:00	D
 Rule Indianapolis 1941	1954	-	Sep	lastSun	2:00	0	S
 Rule Indianapolis 1946	1954	-	Apr	lastSun	2:00	1:00	D
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
+Zone America/Indiana/Indianapolis -5:44:38 - LMT	1883 Nov 18 12:15:22
 			-6:00	US	C%sT	1920
 			-6:00 Indianapolis C%sT	1942
 			-6:00	US	C%sT	1946
-			-6:00 Indianapolis C%sT	1955 Apr 24 2:00
-			-5:00	-	EST	1957 Sep 29 2:00
-			-6:00	-	CST	1958 Apr 27 2:00
+			-6:00 Indianapolis C%sT	1955 Apr 24  2:00
+			-5:00	-	EST	1957 Sep 29  2:00
+			-6:00	-	CST	1958 Apr 27  2:00
 			-5:00	-	EST	1969
 			-5:00	US	E%sT	1971
 			-5:00	-	EST	2006
@@ -761,10 +750,10 @@ Rule	Marengo	1954	1960	-	Sep	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Marengo -5:45:23 -	LMT	1883 Nov 18 12:14:37
 			-6:00	US	C%sT	1951
-			-6:00	Marengo	C%sT	1961 Apr 30 2:00
+			-6:00	Marengo	C%sT	1961 Apr 30  2:00
 			-5:00	-	EST	1969
-			-5:00	US	E%sT	1974 Jan  6 2:00
-			-6:00	1:00	CDT	1974 Oct 27 2:00
+			-5:00	US	E%sT	1974 Jan  6  2:00
+			-6:00	1:00	CDT	1974 Oct 27  2:00
 			-5:00	US	E%sT	1976
 			-5:00	-	EST	2006
 			-5:00	US	E%sT
@@ -785,11 +774,11 @@ Rule Vincennes	1962	1963	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Vincennes -5:50:07 - LMT	1883 Nov 18 12:09:53
 			-6:00	US	C%sT	1946
-			-6:00 Vincennes	C%sT	1964 Apr 26 2:00
+			-6:00 Vincennes	C%sT	1964 Apr 26  2:00
 			-5:00	-	EST	1969
 			-5:00	US	E%sT	1971
-			-5:00	-	EST	2006 Apr  2 2:00
-			-6:00	US	C%sT	2007 Nov  4 2:00
+			-5:00	-	EST	2006 Apr  2  2:00
+			-6:00	US	C%sT	2007 Nov  4  2:00
 			-5:00	US	E%sT
 #
 # Perry County, Indiana, switched from eastern to central time in April 2006.
@@ -806,10 +795,10 @@ Rule Perry	1962	1963	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Tell_City -5:47:03 - LMT	1883 Nov 18 12:12:57
 			-6:00	US	C%sT	1946
-			-6:00 Perry	C%sT	1964 Apr 26 2:00
+			-6:00 Perry	C%sT	1964 Apr 26  2:00
 			-5:00	-	EST	1969
 			-5:00	US	E%sT	1971
-			-5:00	-	EST	2006 Apr  2 2:00
+			-5:00	-	EST	2006 Apr  2  2:00
 			-6:00	US	C%sT
 #
 # Pike County, Indiana moved from central to eastern time in 1977,
@@ -822,11 +811,11 @@ Rule	Pike	1961	1964	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Petersburg -5:49:07 - LMT	1883 Nov 18 12:10:53
 			-6:00	US	C%sT	1955
-			-6:00	Pike	C%sT	1965 Apr 25 2:00
-			-5:00	-	EST	1966 Oct 30 2:00
-			-6:00	US	C%sT	1977 Oct 30 2:00
-			-5:00	-	EST	2006 Apr  2 2:00
-			-6:00	US	C%sT	2007 Nov  4 2:00
+			-6:00	Pike	C%sT	1965 Apr 25  2:00
+			-5:00	-	EST	1966 Oct 30  2:00
+			-6:00	US	C%sT	1977 Oct 30  2:00
+			-5:00	-	EST	2006 Apr  2  2:00
+			-6:00	US	C%sT	2007 Nov  4  2:00
 			-5:00	US	E%sT
 #
 # Starke County, Indiana moved from central to eastern time in 1991,
@@ -844,10 +833,10 @@ Rule	Starke	1959	1961	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Knox -5:46:30 -	LMT	1883 Nov 18 12:13:30
 			-6:00	US	C%sT	1947
-			-6:00	Starke	C%sT	1962 Apr 29 2:00
-			-5:00	-	EST	1963 Oct 27 2:00
-			-6:00	US	C%sT	1991 Oct 27 2:00
-			-5:00	-	EST	2006 Apr  2 2:00
+			-6:00	Starke	C%sT	1962 Apr 29  2:00
+			-5:00	-	EST	1963 Oct 27  2:00
+			-6:00	US	C%sT	1991 Oct 27  2:00
+			-5:00	-	EST	2006 Apr  2  2:00
 			-6:00	US	C%sT
 #
 # Pulaski County, Indiana, switched from eastern to central time in
@@ -860,17 +849,17 @@ Rule	Pulaski	1957	1960	-	Sep	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Winamac -5:46:25 - LMT	1883 Nov 18 12:13:35
 			-6:00	US	C%sT	1946
-			-6:00	Pulaski	C%sT	1961 Apr 30 2:00
+			-6:00	Pulaski	C%sT	1961 Apr 30  2:00
 			-5:00	-	EST	1969
 			-5:00	US	E%sT	1971
-			-5:00	-	EST	2006 Apr  2 2:00
-			-6:00	US	C%sT	2007 Mar 11 2:00
+			-5:00	-	EST	2006 Apr  2  2:00
+			-6:00	US	C%sT	2007 Mar 11  2:00
 			-5:00	US	E%sT
 #
 # Switzerland County, Indiana, did not observe DST from 1973 through 2005.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Vevay -5:40:16 -	LMT	1883 Nov 18 12:19:44
-			-6:00	US	C%sT	1954 Apr 25 2:00
+			-6:00	US	C%sT	1954 Apr 25  2:00
 			-5:00	-	EST	1969
 			-5:00	US	E%sT	1973
 			-5:00	-	EST	2006
@@ -891,18 +880,17 @@ Zone America/Kentucky/Louisville -5:43:02 -	LMT	1883 Nov 18 12:16:58
 			-6:00	US	C%sT	1921
 			-6:00 Louisville C%sT	1942
 			-6:00	US	C%sT	1946
-			-6:00 Louisville C%sT	1961 Jul 23 2:00
+			-6:00 Louisville C%sT	1961 Jul 23  2:00
 			-5:00	-	EST	1968
-			-5:00	US	E%sT	1974 Jan  6 2:00
-			-6:00	1:00	CDT	1974 Oct 27 2:00
+			-5:00	US	E%sT	1974 Jan  6  2:00
+			-6:00	1:00	CDT	1974 Oct 27  2:00
 			-5:00	US	E%sT
 #
 # Wayne County, Kentucky
 #
-# From
-# 
-# Lake Cumberland LIFE
-#  (1999-01-29) via WKYM-101.7:
+# From Lake Cumberland LIFE
+# http://www.lake-cumberland.com/life/archive/news990129time.shtml
+# (1999-01-29) via WKYM-101.7:
 # Clinton County has joined Wayne County in asking the DoT to change from
 # the Central to the Eastern time zone....  The Wayne County government made
 # the same request in December.  And while Russell County officials have not
@@ -919,9 +907,8 @@ Zone America/Kentucky/Louisville -5:43:02 -	LMT	1883 Nov 18 12:16:58
 #
 # From Paul Eggert (2001-07-16):
 # The final rule was published in the
-# 
-# Federal Register 65, 160 (2000-08-17), page 50154-50158.
-# 
+# Federal Register 65, 160 (2000-08-17), pp 50154-50158.
+# http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=2000_register&docid=fr17au00-22
 #
 Zone America/Kentucky/Monticello -5:39:24 - LMT	1883 Nov 18 12:20:36
 			-6:00	US	C%sT	1946
@@ -946,9 +933,8 @@ Zone America/Kentucky/Monticello -5:39:24 - LMT	1883 Nov 18 12:20:36
 # See America/North_Dakota/Center for the Oliver County, ND change.
 # West Wendover, NV officially switched from Pacific to mountain time on
 # 1999-10-31.  See the
-# 
-# Federal Register 64, 203 (1999-10-21), page 56705-56707.
-# 
+# Federal Register 64, 203 (1999-10-21), pp 56705-56707.
+# http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=1999_register&docid=fr21oc99-15
 # However, the Federal Register says that West Wendover already operated
 # on mountain time, and the rule merely made this official;
 # hence a separate tz entry is not needed.
@@ -986,12 +972,12 @@ Rule	Detroit	1967	only	-	Jun	14	2:00	1:00	D
 Rule	Detroit	1967	only	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Detroit	-5:32:11 -	LMT	1905
-			-6:00	-	CST	1915 May 15 2:00
+			-6:00	-	CST	1915 May 15  2:00
 			-5:00	-	EST	1942
 			-5:00	US	E%sT	1946
 			-5:00	Detroit	E%sT	1973
 			-5:00	US	E%sT	1975
-			-5:00	-	EST	1975 Apr 27 2:00
+			-5:00	-	EST	1975 Apr 27  2:00
 			-5:00	US	E%sT
 #
 # Dickinson, Gogebic, Iron, and Menominee Counties, Michigan,
@@ -1004,8 +990,8 @@ Rule Menominee	1966	only	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
 			-6:00	US	C%sT	1946
-			-6:00 Menominee	C%sT	1969 Apr 27 2:00
-			-5:00	-	EST	1973 Apr 29 2:00
+			-6:00 Menominee	C%sT	1969 Apr 27  2:00
+			-5:00	-	EST	1973 Apr 29  2:00
 			-6:00	US	C%sT
 
 # Navassa
@@ -1042,9 +1028,9 @@ Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
 #	Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated),
 #	which I found in the UCLA library.
 #
-#	
 #	William Willett, The Waste of Daylight, 19th edition
-#	 (1914-03)
+#	
+#	[PDF] (1914-03)
 #
 #	Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
 #	.
@@ -1053,11 +1039,11 @@ Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
 
 # Canada
 
-# From Alain LaBont (1994-11-14):
+# From Alain LaBonté (1994-11-14):
 # I post here the time zone abbreviations standardized in Canada
 # for both English and French in the CAN/CSA-Z234.4-89 standard....
 #
-#	UTC	Standard time	Daylight savings time
+#	UTC	Standard time	Daylight saving time
 #	offset	French	English	French	English
 #	-2:30	-	-	HAT	NDT
 #	-3	-	-	HAA	ADT
@@ -1070,7 +1056,7 @@ Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
 #	-9	HNY	YST	-	-
 #
 #	HN: Heure Normale	ST: Standard Time
-#	HA: Heure Avance	DT: Daylight saving Time
+#	HA: Heure Avancée	DT: Daylight saving Time
 #
 #	A: de l'Atlantique	Atlantic
 #	C: du Centre		Central
@@ -1085,7 +1071,7 @@ Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
 # From Paul Eggert (1994-11-22):
 # Alas, this sort of thing must be handled by localization software.
 
-# Unless otherwise specified, the data for Canada are all from Shanks
+# Unless otherwise specified, the data entries for Canada are all from Shanks
 # & Pottenger.
 
 # From Chris Walton (2006-04-01, 2006-04-25, 2006-06-26, 2007-01-31,
@@ -1134,15 +1120,15 @@ Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
 
 # From Paul Eggert (2006-04-25):
 # H. David Matthews and Mary Vincent's map
-# 
 # "It's about TIME", _Canadian Geographic_ (September-October 1998)
-#  contains detailed boundaries for regions observing nonstandard
+# http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp
+# contains detailed boundaries for regions observing nonstandard
 # time and daylight saving time arrangements in Canada circa 1998.
 #
-# INMS, the Institute for National Measurement Standards in Ottawa, has 
+# INMS, the Institute for National Measurement Standards in Ottawa, has
 # information about standard and daylight saving time zones in Canada.
-#  (updated periodically).
+# http://inms-ienm.nrc-cnrc.gc.ca/en/time_services/daylight_saving_e.php
+# (updated periodically).
 # Its unofficial information is often taken from Matthews and Vincent.
 
 # From Paul Eggert (2006-06-27):
@@ -1151,9 +1137,7 @@ Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
 
 # From Chris Walton (2011-12-01)
 # In the first of Tammy Hardwick's articles
-# 
 # http://www.ilovecreston.com/?p=articles&t=spec&ar=260
-# 
 # she quotes the Friday November 1/1918 edition of the Creston Review.
 # The quote includes these two statements:
 # 'Sunday the CPR went back to the old system of time...'
@@ -1221,9 +1205,7 @@ Rule	StJohns	1960	1986	-	Oct	lastSun	2:00	0	S
 # Time to Standard Time and from Standard Time to Daylight Savings Time
 # now occurs at 2:00AM.
 # ...
-# 
 # http://www.assembly.nl.ca/legislation/sr/annualstatutes/2011/1106.chp.htm
-# 
 # ...
 # MICHAEL PELLEY  |  Manager of Enterprise Architecture - Solution Delivery
 # Office of the Chief Information Officer
@@ -1259,7 +1241,7 @@ Zone America/Goose_Bay	-4:01:40 -	LMT	1884 # Happy Valley-Goose Bay
 			-3:30	-	NST	1936
 			-3:30	StJohns	N%sT	1942 May 11
 			-3:30	Canada	N%sT	1946
-			-3:30	StJohns	N%sT	1966 Mar 15 2:00
+			-3:30	StJohns	N%sT	1966 Mar 15  2:00
 			-4:00	StJohns	A%sT	2011 Nov
 			-4:00	Canada	A%sT
 
@@ -1320,7 +1302,7 @@ Rule	Halifax	1962	1973	-	Oct	lastSun	2:00	0	S
 Zone America/Halifax	-4:14:24 -	LMT	1902 Jun 15
 			-4:00	Halifax	A%sT	1918
 			-4:00	Canada	A%sT	1919
-			-4:00	Halifax	A%sT	1942 Feb  9 2:00s
+			-4:00	Halifax	A%sT	1942 Feb  9  2:00s
 			-4:00	Canada	A%sT	1946
 			-4:00	Halifax	A%sT	1974
 			-4:00	Canada	A%sT
@@ -1379,7 +1361,7 @@ Zone America/Moncton	-4:19:08 -	LMT	1883 Dec  9
 # meridian is supposed to observe AST, but residents as far east as
 # Natashquan use EST/EDT, and residents east of Natashquan use AST.
 # The Quebec department of justice writes in
-# "The situation in Minganie and Basse-Cote-Nord"
+# "The situation in Minganie and Basse-Côte-Nord"
 # http://www.justice.gouv.qc.ca/english/publications/generale/temps-minganie-a.htm
 # that the coastal strip from just east of Natashquan to Blanc-Sablon
 # observes Atlantic standard time all year round.
@@ -1387,7 +1369,6 @@ Zone America/Moncton	-4:19:08 -	LMT	1883 Dec  9
 # says this common practice was codified into law as of 2007.
 # For lack of better info, guess this practice began around 1970, contra to
 # Shanks & Pottenger who have this region observing AST/ADT.
-# for post-1970 data America/Puerto_Rico.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Mont	1917	only	-	Mar	25	2:00	1:00	D
@@ -1401,18 +1382,10 @@ Rule	Mont	1922	only	-	Apr	30	2:00	1:00	D
 Rule	Mont	1924	only	-	May	17	2:00	1:00	D
 Rule	Mont	1924	1926	-	Sep	lastSun	2:30	0	S
 Rule	Mont	1925	1926	-	May	Sun>=1	2:00	1:00	D
-# The 1927-to-1937 rules can be expressed more simply as
-# Rule	Mont	1927	1937	-	Apr	lastSat	24:00	1:00	D
-# Rule	Mont	1927	1937	-	Sep	lastSat	24:00	0	S
-# The rules below avoid use of 24:00
-# (which pre-1998 versions of zic cannot handle).
-Rule	Mont	1927	only	-	May	1	0:00	1:00	D
-Rule	Mont	1927	1932	-	Sep	lastSun	0:00	0	S
-Rule	Mont	1928	1931	-	Apr	lastSun	0:00	1:00	D
-Rule	Mont	1932	only	-	May	1	0:00	1:00	D
-Rule	Mont	1933	1940	-	Apr	lastSun	0:00	1:00	D
-Rule	Mont	1933	only	-	Oct	1	0:00	0	S
-Rule	Mont	1934	1939	-	Sep	lastSun	0:00	0	S
+Rule	Mont	1927	1937	-	Apr	lastSat	24:00	1:00	D
+Rule	Mont	1927	1937	-	Sep	lastSat	24:00	0	S
+Rule	Mont	1938	1940	-	Apr	lastSun	0:00	1:00	D
+Rule	Mont	1938	1939	-	Sep	lastSun	0:00	0	S
 Rule	Mont	1946	1973	-	Apr	lastSun	2:00	1:00	D
 Rule	Mont	1945	1948	-	Sep	lastSun	2:00	0	S
 Rule	Mont	1949	1950	-	Oct	lastSun	2:00	0	S
@@ -1426,7 +1399,7 @@ Zone America/Blanc-Sablon -3:48:28 -	LMT	1884
 Zone America/Montreal	-4:54:16 -	LMT	1884
 			-5:00	Mont	E%sT	1918
 			-5:00	Canada	E%sT	1919
-			-5:00	Mont	E%sT	1942 Feb  9 2:00s
+			-5:00	Mont	E%sT	1942 Feb  9  2:00s
 			-5:00	Canada	E%sT	1946
 			-5:00	Mont	E%sT	1974
 			-5:00	Canada	E%sT
@@ -1448,7 +1421,7 @@ Zone America/Montreal	-4:54:16 -	LMT	1884
 # have already done so.  In Orillia DST was to run until Saturday,
 # 1912-08-31 (no time mentioned), but it was met with considerable
 # hostility from certain segments of the public, and was revoked after
-# only two weeks -- I copied it as Saturday, 1912-07-07, 22:00, but
+# only two weeks - I copied it as Saturday, 1912-07-07, 22:00, but
 # presumably that should be -07-06.  (1912-06-19, -07-12; also letters
 # earlier in June).
 #
@@ -1458,10 +1431,8 @@ Zone America/Montreal	-4:54:16 -	LMT	1884
 # Mark Brader writes that an article in the 1997-10-14 Toronto Star
 # says that Atikokan, Ontario currently does not observe DST,
 # but will vote on 11-10 whether to use EST/EDT.
-# He also writes that the
-# 
-# Ontario Time Act (1990, Chapter T.9)
-# 
+# He also writes that the Ontario Time Act (1990, Chapter T.9)
+# http://www.gov.on.ca/MBS/english/publications/statregs/conttext.html
 # says that Ontario east of 90W uses EST/EDT, and west of 90W uses CST/CDT.
 # Officially Atikokan is therefore on CST/CDT, and most likely this report
 # concerns a non-official time observed as a matter of local practice.
@@ -1540,9 +1511,7 @@ Zone America/Montreal	-4:54:16 -	LMT	1884
 # The Journal of The Royal Astronomical Society of Canada,
 # volume 26, number 2 (February 1932) and, as of 2010-07-17,
 # was available at
-# 
 # http://adsabs.harvard.edu/full/1932JRASC..26...49S
-# 
 #
 # It includes the text below (starting on page 57):
 #
@@ -1553,26 +1522,26 @@ Zone America/Montreal	-4:54:16 -	LMT	1884
 # ing in 1930. The information for the province of Quebec is definite,
 # for the other provinces only approximate:
 #
-# 	Province	Daylight saving time used
+#	Province	Daylight saving time used
 # Prince Edward Island	Not used.
 # Nova Scotia		In Halifax only.
 # New Brunswick		In St. John only.
 # Quebec		In the following places:
-# 			Montreal	Lachine
-# 			Quebec		Mont-Royal
-# 			Levis		Iberville
-# 			St. Lambert	Cap de la Madeleine
-# 			Verdun		Loretteville
-# 			Westmount	Richmond
-# 			Outremont	St. Jerome
-# 			Longueuil	Greenfield Park
-# 			Arvida		Waterloo
-# 			Chambly-Canton	Beaulieu
-# 			Melbourne	La Tuque
-# 			St. Theophile	Buckingham
+#			Montreal	Lachine
+#			Quebec		Mont-Royal
+#			Lévis		Iberville
+#			St. Lambert	Cap de la Madelèine
+#			Verdun		Loretteville
+#			Westmount	Richmond
+#			Outremont	St. Jérôme
+#			Longueuil	Greenfield Park
+#			Arvida		Waterloo
+#			Chambly-Canton	Beaulieu
+#			Melbourne	La Tuque
+#			St. Théophile	Buckingham
 # Ontario		Used generally in the cities and towns along
-# 			the southerly part of the province. Not
-# 			used in the northwesterlhy part.
+#			the southerly part of the province. Not
+#			used in the northwesterly part.
 # Manitoba		Not used.
 # Saskatchewan		In Regina only.
 # Alberta		Not used.
@@ -1641,7 +1610,7 @@ Rule	Toronto	1957	1973	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Toronto	-5:17:32 -	LMT	1895
 			-5:00	Canada	E%sT	1919
-			-5:00	Toronto	E%sT	1942 Feb  9 2:00s
+			-5:00	Toronto	E%sT	1942 Feb  9  2:00s
 			-5:00	Canada	E%sT	1946
 			-5:00	Toronto	E%sT	1974
 			-5:00	Canada	E%sT
@@ -1654,16 +1623,16 @@ Zone America/Thunder_Bay -5:57:00 -	LMT	1895
 			-5:00	Canada	E%sT
 Zone America/Nipigon	-5:53:04 -	LMT	1895
 			-5:00	Canada	E%sT	1940 Sep 29
-			-5:00	1:00	EDT	1942 Feb  9 2:00s
+			-5:00	1:00	EDT	1942 Feb  9  2:00s
 			-5:00	Canada	E%sT
 Zone America/Rainy_River -6:18:16 -	LMT	1895
 			-6:00	Canada	C%sT	1940 Sep 29
-			-6:00	1:00	CDT	1942 Feb  9 2:00s
+			-6:00	1:00	CDT	1942 Feb  9  2:00s
 			-6:00	Canada	C%sT
 Zone America/Atikokan	-6:06:28 -	LMT	1895
 			-6:00	Canada	C%sT	1940 Sep 29
-			-6:00	1:00	CDT	1942 Feb  9 2:00s
-			-6:00	Canada	C%sT	1945 Sep 30 2:00
+			-6:00	1:00	CDT	1942 Feb  9  2:00s
+			-6:00	Canada	C%sT	1945 Sep 30  2:00
 			-5:00	-	EST
 
 
@@ -1676,7 +1645,7 @@ Zone America/Atikokan	-6:06:28 -	LMT	1895
 # the first Sunday of April of each year and two o'clock Central
 # Standard Time in the morning of the last Sunday of October next
 # following, one hour in advance of Central Standard Time."...
-# I believe that the English legislation [of the old time act] had =
+# I believe that the English legislation [of the old time act] had
 # been assented to (March 22, 1967)....
 # Also, as far as I can tell, there was no order-in-council varying
 # the time of Daylight Saving Time for 2005 and so the provisions of
@@ -1799,12 +1768,12 @@ Rule	Swift	1959	only	-	Oct	lastSun	2:00	0	S
 Rule	Swift	1960	1961	-	Sep	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Regina	-6:58:36 -	LMT	1905 Sep
-			-7:00	Regina	M%sT	1960 Apr lastSun 2:00
+			-7:00	Regina	M%sT	1960 Apr lastSun  2:00
 			-6:00	-	CST
 Zone America/Swift_Current -7:11:20 -	LMT	1905 Sep
-			-7:00	Canada	M%sT	1946 Apr lastSun 2:00
+			-7:00	Canada	M%sT	1946 Apr lastSun  2:00
 			-7:00	Regina	M%sT	1950
-			-7:00	Swift	M%sT	1972 Apr lastSun 2:00
+			-7:00	Swift	M%sT	1972 Apr lastSun  2:00
 			-6:00	-	CST
 
 
@@ -1854,9 +1823,7 @@ Zone America/Edmonton	-7:33:52 -	LMT	1906 Sep
 # Earlier this year I stumbled across a detailed article about the time
 # keeping history of Creston; it was written by Tammy Hardwick who is the
 # manager of the Creston & District Museum. The article was written in May 2009.
-# 
 # http://www.ilovecreston.com/?p=articles&t=spec&ar=260
-# 
 # According to the article, Creston has not changed its clocks since June 1918.
 # i.e. Creston has been stuck on UTC-7 for 93 years.
 # Dawson Creek, on the other hand, changed its clocks as recently as April 1972.
@@ -1864,18 +1831,16 @@ Zone America/Edmonton	-7:33:52 -	LMT	1906 Sep
 # Unfortunately the exact date for the time change in June 1918 remains
 # unknown and will be difficult to ascertain.  I e-mailed Tammy a few months
 # ago to ask if Sunday June 2 was a reasonable guess.  She said it was just
-# as plausible as any other date (in June).  She also said that after writing the
-# article she had discovered another time change in 1916; this is the subject
-# of another article which she wrote in October 2010.
-# 
+# as plausible as any other date (in June).  She also said that after writing
+# the article she had discovered another time change in 1916; this is the
+# subject of another article which she wrote in October 2010.
 # http://www.creston.museum.bc.ca/index.php?module=comments&uop=view_comment&cm+id=56
-# 
 
 # Here is a summary of the three clock change events in Creston's history:
 # 1. 1884 or 1885: adoption of Mountain Standard Time (GMT-7)
 # Exact date unknown
 # 2. Oct 1916: switch to Pacific Standard Time (GMT-8)
-# Exact date in October unknown;  Sunday October 1 is a reasonable guess.
+# Exact date in October unknown; Sunday October 1 is a reasonable guess.
 # 3. June 1918: switch to Pacific Daylight Time (GMT-7)
 # Exact date in June unknown; Sunday June 2 is a reasonable guess.
 # note#1:
@@ -1888,9 +1853,7 @@ Zone America/Edmonton	-7:33:52 -	LMT	1906 Sep
 # There is no guarantee that Creston will remain on Mountain Standard Time
 # (UTC-7) forever.
 # The subject was debated at least once this year by the town Council.
-# 
 # http://www.bclocalnews.com/kootenay_rockies/crestonvalleyadvance/news/116760809.html
-# 
 
 # During a period WWII, summer time (Daylight saying) was mandatory in Canada.
 # In Creston, that was handled by shifting the area to PST (-8:00) then applying
@@ -1917,7 +1880,7 @@ Zone America/Vancouver	-8:12:28 -	LMT	1884
 			-8:00	Canada	P%sT
 Zone America/Dawson_Creek -8:00:56 -	LMT	1884
 			-8:00	Canada	P%sT	1947
-			-8:00	Vanc	P%sT	1972 Aug 30 2:00
+			-8:00	Vanc	P%sT	1972 Aug 30  2:00
 			-7:00	-	MST
 Zone America/Creston	-7:46:04 -	LMT	1884
 			-7:00	-	MST	1916 Oct 1
@@ -1944,18 +1907,17 @@ Zone America/Creston	-7:46:04 -	LMT	1884
 
 # From Rives McDow (1999-09-04):
 # Nunavut ... moved ... to incorporate the whole territory into one time zone.
-# 
 # Nunavut moves to single time zone Oct. 31
-# 
+# http://www.nunatsiaq.com/nunavut/nvt90903_13.html
 #
 # From Antoine Leca (1999-09-06):
 # We then need to create a new timezone for the Kitikmeot region of Nunavut
 # to differentiate it from the Yellowknife region.
 
 # From Paul Eggert (1999-09-20):
-# 
 # Basic Facts: The New Territory
-#  (1999) reports that Pangnirtung operates on eastern time,
+# http://www.nunavut.com/basicfacts/english/basicfacts_1territory.html
+# (1999) reports that Pangnirtung operates on eastern time,
 # and that Coral Harbour does not observe DST.  We don't know when
 # Pangnirtung switched to eastern time; we'll guess 1995.
 
@@ -1983,8 +1945,8 @@ Zone America/Creston	-7:46:04 -	LMT	1884
 # the current state of affairs.
 
 # From Michaela Rodrigue, writing in the
-# 
-# Nunatsiaq News (1999-11-19):
+# Nunatsiaq News (1999-11-19):
+# http://www.nunatsiaq.com/archives/nunavut991130/nvt91119_17.html
 # Clyde River, Pangnirtung and Sanikiluaq now operate with two time zones,
 # central - or Nunavut time - for government offices, and eastern time
 # for municipal offices and schools....  Igloolik [was similar but then]
@@ -2002,10 +1964,8 @@ Zone America/Creston	-7:46:04 -	LMT	1884
 # Central Time and Southampton Island [in the Central zone] is not
 # required to use daylight savings.
 
-# From
-# 
-# Nunavut now has two time zones
-#  (2000-11-10):
+# From 
+# Nunavut now has two time zones (2000-11-10):
 # The Nunavut government would allow its employees in Kugluktuk and
 # Cambridge Bay to operate on central time year-round, putting them
 # one hour behind the rest of Nunavut for six months during the winter.
@@ -2096,9 +2056,7 @@ Zone America/Creston	-7:46:04 -	LMT	1884
 # used to be the mayor of Resolute Bay and he apparently owns half the
 # businesses including "South Camp Inn." This website has some info on
 # Aziz:
-# 
 # http://www.uphere.ca/node/493
-# 
 #
 # I sent Aziz an e-mail asking when Resolute Bay had stopped using
 # Eastern Standard Time.
@@ -2136,47 +2094,47 @@ Rule	NT_YK	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 # aka Panniqtuuq
 Zone America/Pangnirtung 0	-	zzz	1921 # trading post est.
-			-4:00	NT_YK	A%sT	1995 Apr Sun>=1 2:00
-			-5:00	Canada	E%sT	1999 Oct 31 2:00
-			-6:00	Canada	C%sT	2000 Oct 29 2:00
+			-4:00	NT_YK	A%sT	1995 Apr Sun>=1  2:00
+			-5:00	Canada	E%sT	1999 Oct 31  2:00
+			-6:00	Canada	C%sT	2000 Oct 29  2:00
 			-5:00	Canada	E%sT
 # formerly Frobisher Bay
 Zone America/Iqaluit	0	-	zzz	1942 Aug # Frobisher Bay est.
-			-5:00	NT_YK	E%sT	1999 Oct 31 2:00
-			-6:00	Canada	C%sT	2000 Oct 29 2:00
+			-5:00	NT_YK	E%sT	1999 Oct 31  2:00
+			-6:00	Canada	C%sT	2000 Oct 29  2:00
 			-5:00	Canada	E%sT
 # aka Qausuittuq
 Zone America/Resolute	0	-	zzz	1947 Aug 31 # Resolute founded
-			-6:00	NT_YK	C%sT	2000 Oct 29 2:00
-			-5:00	-	EST	2001 Apr  1 3:00
-			-6:00	Canada	C%sT	2006 Oct 29 2:00
-			-5:00	-	EST	2007 Mar 11 3:00
+			-6:00	NT_YK	C%sT	2000 Oct 29  2:00
+			-5:00	-	EST	2001 Apr  1  3:00
+			-6:00	Canada	C%sT	2006 Oct 29  2:00
+			-5:00	-	EST	2007 Mar 11  3:00
 			-6:00	Canada	C%sT
 # aka Kangiqiniq
 Zone America/Rankin_Inlet 0	-	zzz	1957 # Rankin Inlet founded
-			-6:00	NT_YK	C%sT	2000 Oct 29 2:00
-			-5:00	-	EST	2001 Apr  1 3:00
+			-6:00	NT_YK	C%sT	2000 Oct 29  2:00
+			-5:00	-	EST	2001 Apr  1  3:00
 			-6:00	Canada	C%sT
 # aka Iqaluktuuttiaq
 Zone America/Cambridge_Bay 0	-	zzz	1920 # trading post est.?
-			-7:00	NT_YK	M%sT	1999 Oct 31 2:00
-			-6:00	Canada	C%sT	2000 Oct 29 2:00
-			-5:00	-	EST	2000 Nov  5 0:00
-			-6:00	-	CST	2001 Apr  1 3:00
+			-7:00	NT_YK	M%sT	1999 Oct 31  2:00
+			-6:00	Canada	C%sT	2000 Oct 29  2:00
+			-5:00	-	EST	2000 Nov  5  0:00
+			-6:00	-	CST	2001 Apr  1  3:00
 			-7:00	Canada	M%sT
 Zone America/Yellowknife 0	-	zzz	1935 # Yellowknife founded?
 			-7:00	NT_YK	M%sT	1980
 			-7:00	Canada	M%sT
 Zone America/Inuvik	0	-	zzz	1953 # Inuvik founded
-			-8:00	NT_YK	P%sT	1979 Apr lastSun 2:00
+			-8:00	NT_YK	P%sT	1979 Apr lastSun  2:00
 			-7:00	NT_YK	M%sT	1980
 			-7:00	Canada	M%sT
 Zone America/Whitehorse	-9:00:12 -	LMT	1900 Aug 20
-			-9:00	NT_YK	Y%sT	1966 Jul 1 2:00
+			-9:00	NT_YK	Y%sT	1966 Jul  1  2:00
 			-8:00	NT_YK	P%sT	1980
 			-8:00	Canada	P%sT
 Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
-			-9:00	NT_YK	Y%sT	1973 Oct 28 0:00
+			-9:00	NT_YK	Y%sT	1973 Oct 28  0:00
 			-8:00	NT_YK	P%sT	1980
 			-8:00	Canada	P%sT
 
@@ -2188,9 +2146,8 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
 # From Paul Eggert (2001-03-05):
 # The Investigation and Analysis Service of the
 # Mexican Library of Congress (MLoC) has published a
-# 
 # history of Mexican local time (in Spanish)
-# .
+# http://www.cddhcu.gob.mx/bibliot/publica/inveyana/polisoc/horver/
 #
 # Here are the discrepancies between Shanks & Pottenger (S&P) and the MLoC.
 # (In all cases we go with the MLoC.)
@@ -2235,9 +2192,8 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
 # -------------- End Forwarded Message --------------
 # From Paul Eggert (1996-06-12):
 # For an English translation of the decree, see
-# 
 # "Diario Oficial: Time Zone Changeover" (1996-01-04).
-# 
+# http://mexico-travel.com/extra/timezone_eng.html
 
 # From Rives McDow (1998-10-08):
 # The State of Quintana Roo has reverted back to central STD and DST times
@@ -2249,7 +2205,7 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
 # savings time so as to stay on the same time zone as the southern part of
 # Arizona year round.
 
-# From Jesper Norgaard, translating
+# From Jesper Nørgaard, translating
 #  (2001-01-17):
 # In Oaxaca, the 55.000 teachers from the Section 22 of the National
 # Syndicate of Education Workers, refuse to apply daylight saving each
@@ -2262,7 +2218,7 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
 # January 17, 2000 - The Energy Secretary, Ernesto Martens, announced
 # that Summer Time will be reduced from seven to five months, starting
 # this year....
-# 
+# http://www.publico.com.mx/scripts/texto3.asp?action=pagina&pag=21&pos=p&secc=naci&date=01/17/2001
 # [translated], says "summer time will ... take effect on the first Sunday
 # in May, and end on the last Sunday of September.
 
@@ -2270,23 +2226,22 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
 # The 2001-01-24 traditional Washington Post contained the page one
 # story "Timely Issue Divides Mexicans."...
 # http://www.washingtonpost.com/wp-dyn/articles/A37383-2001Jan23.html
-# ... Mexico City Mayor Lopez Obrador "...is threatening to keep
+# ... Mexico City Mayor López Obrador "...is threatening to keep
 # Mexico City and its 20 million residents on a different time than
-# the rest of the country..." In particular, Lopez Obrador would abolish
+# the rest of the country..." In particular, López Obrador would abolish
 # observation of Daylight Saving Time.
 
-# 
 # Official statute published by the Energy Department
-#  (2001-02-01) shows Baja and Chihauhua as still using US DST rules,
-# and Sonora with no DST.  This was reported by Jesper Norgaard (2001-02-03).
+# http://www.conae.gob.mx/ahorro/decretohorver2001.html#decre
+# (2001-02-01) shows Baja and Chihauhua as still using US DST rules,
+# and Sonora with no DST.  This was reported by Jesper Nørgaard (2001-02-03).
 
 # From Paul Eggert (2001-03-03):
 #
-# 
+# http://www.latimes.com/news/nation/20010303/t000018766.html
 # James F. Smith writes in today's LA Times
-# 
 # * Sonora will continue to observe standard time.
-# * Last week Mexico City's mayor Andres Manuel Lopez Obrador decreed that
+# * Last week Mexico City's mayor Andrés Manuel López Obrador decreed that
 #   the Federal District will not adopt DST.
 # * 4 of 16 district leaders announced they'll ignore the decree.
 # * The decree does not affect federal-controlled facilities including
@@ -2294,7 +2249,7 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
 #
 # For now we'll assume that the Federal District will bow to federal rules.
 
-# From Jesper Norgaard (2001-04-01):
+# From Jesper Nørgaard (2001-04-01):
 # I found some references to the Mexican application of daylight
 # saving, which modifies what I had already sent you, stating earlier
 # that a number of northern Mexican states would go on daylight
@@ -2303,7 +2258,7 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
 # saving all year) will follow the original decree of president
 # Vicente Fox, starting daylight saving May 6, 2001 and ending
 # September 30, 2001.
-# References: "Diario de Monterrey" 
+# References: "Diario de Monterrey" 
 # Palabra  (2001-03-31)
 
 # From Reuters (2001-09-04):
@@ -2315,7 +2270,7 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
 # standard time. "This is so residents of the Federal District are not
 # subject to unexpected time changes," a statement from the court said.
 
-# From Jesper Norgaard Welen (2002-03-12):
+# From Jesper Nørgaard Welen (2002-03-12):
 # ... consulting my local grocery store(!) and my coworkers, they all insisted
 # that a new decision had been made to reinstate US style DST in Mexico....
 # http://www.conae.gob.mx/ahorro/horaver2001_m1_2002.html (2002-02-20)
@@ -2329,48 +2284,36 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
 # > the United States.
 # Now this has passed both the Congress and the Senate, so starting from
 # 2010, some border regions will be the same:
-# 
 # http://www.signonsandiego.com/news/2009/dec/28/clocks-will-match-both-sides-border/
-# 
-# 
 # http://www.elmananarey.com/diario/noticia/nacional/noticias/empatan_horario_de_frontera_con_eu/621939
-# 
 # (Spanish)
 #
 # Could not find the new law text, but the proposed law text changes are here:
-# 
 # http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/20091210-V.pdf
-# 
 # (Gaceta Parlamentaria)
 #
 # There is also a list of the votes here:
-# 
 # http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/V2-101209.html
-# 
 #
 # Our page:
-# 
 # http://www.timeanddate.com/news/time/north-mexico-dst-change.html
-# 
 
 # From Arthur David Olson (2010-01-20):
 # The page
-# 
 # http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010
-# 
 # includes this text:
 # En los municipios fronterizos de Tijuana y Mexicali en Baja California;
-# Juárez y Ojinaga en Chihuahua; Acuña y Piedras Negras en Coahuila;
-# Anáhuac en Nuevo León; y Nuevo Laredo, Reynosa y Matamoros en
-# Tamaulipas, la aplicación de este horario estacional surtirá efecto
-# desde las dos horas del segundo domingo de marzo y concluirá a las dos
+# Juárez y Ojinaga en Chihuahua; Acuña y Piedras Negras en Coahuila;
+# Anáhuac en Nuevo León; y Nuevo Laredo, Reynosa y Matamoros en
+# Tamaulipas, la aplicación de este horario estacional surtirá efecto
+# desde las dos horas del segundo domingo de marzo y concluirá a las dos
 # horas del primer domingo de noviembre.
 # En los municipios fronterizos que se encuentren ubicados en la franja
-# fronteriza norte en el territorio comprendido entre la línea
-# internacional y la línea paralela ubicada a una distancia de veinte
-# kilómetros, así como la Ciudad de Ensenada, Baja California, hacia el
-# interior del país, la aplicación de este horario estacional surtirá
-# efecto desde las dos horas del segundo domingo de marzo y concluirá a
+# fronteriza norte en el territorio comprendido entre la línea
+# internacional y la línea paralela ubicada a una distancia de veinte
+# kilómetros, así como la Ciudad de Ensenada, Baja California, hacia el
+# interior del país, la aplicación de este horario estacional surtirá
+# efecto desde las dos horas del segundo domingo de marzo y concluirá a
 # las dos horas del primer domingo de noviembre.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -2389,39 +2332,39 @@ Rule	Mexico	2001	only	-	Sep	lastSun	2:00	0	S
 Rule	Mexico	2002	max	-	Apr	Sun>=1	2:00	1:00	D
 Rule	Mexico	2002	max	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-# Quintana Roo
+# Quintana Roo; represented by Cancún
 Zone America/Cancun	-5:47:04 -	LMT	1922 Jan  1  0:12:56
 			-6:00	-	CST	1981 Dec 23
 			-5:00	Mexico	E%sT	1998 Aug  2  2:00
 			-6:00	Mexico	C%sT
-# Campeche, Yucatan
+# Campeche, Yucatán; represented by Mérida
 Zone America/Merida	-5:58:28 -	LMT	1922 Jan  1  0:01:32
 			-6:00	-	CST	1981 Dec 23
 			-5:00	-	EST	1982 Dec  2
 			-6:00	Mexico	C%sT
-# Coahuila, Durango, Nuevo Leon, Tamaulipas (near US border)
+# Coahuila, Durango, Nuevo León, Tamaulipas (near US border)
 Zone America/Matamoros	-6:40:00 -	LMT	1921 Dec 31 23:20:00
 			-6:00	-	CST	1988
 			-6:00	US	C%sT	1989
 			-6:00	Mexico	C%sT	2010
 			-6:00	US	C%sT
-# Coahuila, Durango, Nuevo Leon, Tamaulipas (away from US border)
+# Coahuila, Durango, Nuevo León, Tamaulipas (away from US border)
 Zone America/Monterrey	-6:41:16 -	LMT	1921 Dec 31 23:18:44
 			-6:00	-	CST	1988
 			-6:00	US	C%sT	1989
 			-6:00	Mexico	C%sT
 # Central Mexico
-Zone America/Mexico_City -6:36:36 -	LMT	1922 Jan  1 0:23:24
+Zone America/Mexico_City -6:36:36 -	LMT	1922 Jan  1  0:23:24
 			-7:00	-	MST	1927 Jun 10 23:00
 			-6:00	-	CST	1930 Nov 15
 			-7:00	-	MST	1931 May  1 23:00
 			-6:00	-	CST	1931 Oct
 			-7:00	-	MST	1932 Apr  1
-			-6:00	Mexico	C%sT	2001 Sep 30 02:00
+			-6:00	Mexico	C%sT	2001 Sep 30  2:00
 			-6:00	-	CST	2002 Feb 20
 			-6:00	Mexico	C%sT
 # Chihuahua (near US border)
-Zone America/Ojinaga	-6:57:40 -	LMT	1922 Jan 1 0:02:20
+Zone America/Ojinaga	-6:57:40 -	LMT	1922 Jan  1  0:02:20
 			-7:00	-	MST	1927 Jun 10 23:00
 			-6:00	-	CST	1930 Nov 15
 			-7:00	-	MST	1931 May  1 23:00
@@ -2429,7 +2372,7 @@ Zone America/Ojinaga	-6:57:40 -	LMT	1922 Jan 1 0:02:20
 			-7:00	-	MST	1932 Apr  1
 			-6:00	-	CST	1996
 			-6:00	Mexico	C%sT	1998
-			-6:00	-	CST	1998 Apr Sun>=1 3:00
+			-6:00	-	CST	1998 Apr Sun>=1  3:00
 			-7:00	Mexico	M%sT	2010
 			-7:00	US	M%sT
 # Chihuahua (away from US border)
@@ -2441,7 +2384,7 @@ Zone America/Chihuahua	-7:04:20 -	LMT	1921 Dec 31 23:55:40
 			-7:00	-	MST	1932 Apr  1
 			-6:00	-	CST	1996
 			-6:00	Mexico	C%sT	1998
-			-6:00	-	CST	1998 Apr Sun>=1 3:00
+			-6:00	-	CST	1998 Apr Sun>=1  3:00
 			-7:00	Mexico	M%sT
 # Sonora
 Zone America/Hermosillo	-7:23:52 -	LMT	1921 Dec 31 23:36:08
@@ -2457,42 +2400,33 @@ Zone America/Hermosillo	-7:23:52 -	LMT	1921 Dec 31 23:36:08
 			-7:00	-	MST
 
 # From Alexander Krivenyshev (2010-04-21):
-# According to news, Bahía de Banderas (Mexican state of Nayarit)
+# According to news, Bahía de Banderas (Mexican state of Nayarit)
 # changed time zone UTC-7 to new time zone UTC-6 on April 4, 2010 (to
 # share the same time zone as nearby city Puerto Vallarta, Jalisco).
 #
 # (Spanish)
-# Bahía de Banderas homologa su horario al del centro del
-# país, a partir de este domingo
-# 
+# Bahía de Banderas homologa su horario al del centro del
+# país, a partir de este domingo
 # http://www.nayarit.gob.mx/notes.asp?id=20748
-# 
 #
-# Bahía de Banderas homologa su horario con el del Centro del
-# País
-# 
-# http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50"
-# 
+# Bahía de Banderas homologa su horario con el del Centro del
+# País
+# http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50
 #
 # (English)
-# Puerto Vallarta and Bahía de Banderas: One Time Zone
-# 
+# Puerto Vallarta and Bahía de Banderas: One Time Zone
 # http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml
-# 
-#
-# or
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_mexico08.html
-# 
 #
 # "Mexico's Senate approved the amendments to the Mexican Schedule System that
-# will allow Bahía de Banderas and Puerto Vallarta to share the same time
+# will allow Bahía de Banderas and Puerto Vallarta to share the same time
 # zone ..."
 # Baja California Sur, Nayarit, Sinaloa
 
 # From Arthur David Olson (2010-05-01):
 # Use "Bahia_Banderas" to keep the name to fourteen characters.
 
+# Mazatlán
 Zone America/Mazatlan	-7:05:40 -	LMT	1921 Dec 31 23:54:20
 			-7:00	-	MST	1927 Jun 10 23:00
 			-6:00	-	CST	1930 Nov 15
@@ -2504,6 +2438,7 @@ Zone America/Mazatlan	-7:05:40 -	LMT	1921 Dec 31 23:54:20
 			-8:00	-	PST	1970
 			-7:00	Mexico	M%sT
 
+# Bahía de Banderas
 Zone America/Bahia_Banderas	-7:01:00 -	LMT	1921 Dec 31 23:59:00
 			-7:00	-	MST	1927 Jun 10 23:00
 			-6:00	-	CST	1930 Nov 15
@@ -2513,7 +2448,7 @@ Zone America/Bahia_Banderas	-7:01:00 -	LMT	1921 Dec 31 23:59:00
 			-6:00	-	CST	1942 Apr 24
 			-7:00	-	MST	1949 Jan 14
 			-8:00	-	PST	1970
-			-7:00	Mexico	M%sT	2010 Apr 4 2:00
+			-7:00	Mexico	M%sT	2010 Apr  4  2:00
 			-6:00	Mexico	C%sT
 
 # Baja California (near US border)
@@ -2560,7 +2495,7 @@ Zone America/Santa_Isabel	-7:39:28 -	LMT	1922 Jan  1  0:20:32
 # America/Tijuana only in that it did not observe DST from 1976
 # through 1995.  This was as per Shanks (1999).  But Shanks & Pottenger say
 # Ensenada did not observe DST from 1948 through 1975.  Guy Harris reports
-# that the 1987 OAG says "Only Ensenada, Mexicale, San Felipe and
+# that the 1987 OAG says "Only Ensenada, Mexicali, San Felipe and
 # Tijuana observe DST," which agrees with Shanks & Pottenger but implies that
 # DST-observance was a town-by-town matter back then.  This concerns
 # data after 1970 so most likely there should be at least one Zone
@@ -2573,7 +2508,7 @@ Zone America/Santa_Isabel	-7:39:28 -	LMT	1922 Jan  1  0:20:32
 ###############################################################################
 
 # Anguilla
-# See 'southamerica'.
+# See America/Port_of_Spain.
 
 # Antigua and Barbuda
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -2609,8 +2544,8 @@ Rule	Barb	1978	1980	-	Apr	Sun>=15	2:00	1:00	D
 Rule	Barb	1979	only	-	Sep	30	2:00	0	S
 Rule	Barb	1980	only	-	Sep	25	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Barbados	-3:58:29 -	LMT	1924		# Bridgetown
-			-3:58:29 -	BMT	1932	  # Bridgetown Mean Time
+Zone America/Barbados	-3:58:29 -	LMT	1924 # Bridgetown
+			-3:58:29 -	BMT	1932 # Bridgetown Mean Time
 			-4:00	Barb	A%sT
 
 # Belize
@@ -2640,20 +2575,20 @@ Zone	America/Belize	-5:52:48 -	LMT	1912 Apr
 # http://www.theroyalgazette.com/apps/pbcs.dll/article?AID=/20060529/NEWS/105290135
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Atlantic/Bermuda	-4:19:18 -	LMT	1930 Jan  1 2:00    # Hamilton
-			-4:00	-	AST	1974 Apr 28 2:00
+Zone Atlantic/Bermuda	-4:19:18 -	LMT	1930 Jan  1  2:00 # Hamilton
+			-4:00	-	AST	1974 Apr 28  2:00
 			-4:00	Canada	A%sT	1976
 			-4:00	US	A%sT
 
 # Cayman Is
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Cayman	-5:25:32 -	LMT	1890		# Georgetown
-			-5:07:11 -	KMT	1912 Feb    # Kingston Mean Time
+Zone	America/Cayman	-5:25:32 -	LMT	1890     # Georgetown
+			-5:07:11 -	KMT	1912 Feb # Kingston Mean Time
 			-5:00	-	EST
 
 # Costa Rica
 
-# Milne gives -5:36:13.3 as San Jose mean time; round to nearest.
+# Milne gives -5:36:13.3 as San José mean time; round to nearest.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	CR	1979	1980	-	Feb	lastSun	0:00	1:00	D
@@ -2663,10 +2598,10 @@ Rule	CR	1991	1992	-	Jan	Sat>=15	0:00	1:00	D
 # go with Shanks & Pottenger.
 Rule	CR	1991	only	-	Jul	 1	0:00	0	S
 Rule	CR	1992	only	-	Mar	15	0:00	0	S
-# There are too many San Joses elsewhere, so we'll use 'Costa Rica'.
+# There are too many San Josés elsewhere, so we'll use 'Costa Rica'.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
-			-5:36:13 -	SJMT	1921 Jan 15 # San Jose Mean Time
+Zone America/Costa_Rica	-5:36:13 -	LMT	1890        # San José
+			-5:36:13 -	SJMT	1921 Jan 15 # San José Mean Time
 			-6:00	CR	C%sT
 # Coco
 # no information; probably like America/Costa_Rica
@@ -2685,8 +2620,8 @@ Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
 # During the game, play-by-play announcer Jim Hunter noted that
 # "We'll be losing two hours of sleep...Cuba switched to Daylight Saving
 # Time today."  (The "two hour" remark referred to losing one hour of
-# sleep on 1999-03-28--when the announcers were in Cuba as it switched
-# to DST--and one more hour on 1999-04-04--when the announcers will have
+# sleep on 1999-03-28 - when the announcers were in Cuba as it switched
+# to DST - and one more hour on 1999-04-04 - when the announcers will have
 # returned to Baltimore, which switches on that date.)
 
 # From Steffen Thorsen (2013-11-11):
@@ -2708,16 +2643,16 @@ Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
 # adjustment in Cuba.  We will stay in daylight saving time:
 # http://www.granma.cu/espanol/2005/noviembre/mier9/horario.html
 
-# From Jesper Norgaard Welen (2006-10-21):
+# From Jesper Nørgaard Welen (2006-10-21):
 # An article in GRANMA INTERNACIONAL claims that Cuba will end
 # the 3 years of permanent DST next weekend, see
 # http://www.granma.cu/ingles/2006/octubre/lun16/43horario.html
 # "On Saturday night, October 28 going into Sunday, October 29, at 01:00,
-# watches should be set back one hour -- going back to 00:00 hours -- returning
+# watches should be set back one hour - going back to 00:00 hours - returning
 # to the normal schedule....
 
 # From Paul Eggert (2007-03-02):
-# http://www.granma.cubaweb.cu/english/news/art89.html, dated yesterday,
+# , dated yesterday,
 # says Cuban clocks will advance at midnight on March 10.
 # For lack of better information, assume Cuba will use US rules,
 # except that it switches at midnight standard time as usual.
@@ -2731,10 +2666,10 @@ Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
 # http://www.prensalatina.com.mx/article.asp?ID=%7B4CC32C1B-A9F7-42FB-8A07-8631AFC923AF%7D&language=ES
 # http://actualidad.terra.es/sociedad/articulo/cuba_llama_ahorrar_energia_cambio_1957044.htm
 #
-# From Alex Kryvenishev (2007-10-25):
+# From Alex Krivenyshev (2007-10-25):
 # Here is also article from Granma (Cuba):
 #
-# [Regira] el Horario Normal desde el [proximo] domingo 28 de octubre
+# Regirá el Horario Normal desde el próximo domingo 28 de octubre
 # http://www.granma.cubaweb.cu/2007/10/24/nacional/artic07.html
 #
 # http://www.worldtimezone.com/dst_news/dst_news_cuba03.html
@@ -2742,23 +2677,18 @@ Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
 # From Arthur David Olson (2008-03-09):
 # I'm in Maryland which is now observing United States Eastern Daylight
 # Time. At 9:44 local time I used RealPlayer to listen to
-# 
 # http://media.enet.cu/radioreloj
-# , a Cuban information station, and heard
+# a Cuban information station, and heard
 # the time announced as "ocho cuarenta y cuatro" ("eight forty-four"),
 # indicating that Cuba is still on standard time.
 
 # From Steffen Thorsen (2008-03-12):
 # It seems that Cuba will start DST on Sunday, 2007-03-16...
 # It was announced yesterday, according to this source (in Spanish):
-# 
 # http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm
-# 
 #
 # Some more background information is posted here:
-# 
 # http://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html
-# 
 #
 # The article also says that Cuba has been observing DST since 1963,
 # while Shanks (and tzdata) has 1965 as the first date (except in the
@@ -2768,18 +2698,14 @@ Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
 # change some historic records as well.
 #
 # One example:
-# 
 # http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm
-# 
 
-# From Jesper Norgaard Welen (2008-03-13):
+# From Jesper Nørgaard Welen (2008-03-13):
 # The Cuban time change has just been confirmed on the most authoritative
 # web site, the Granma.  Please check out
-# 
 # http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html
-# 
 #
-# Basically as expected after Steffen Thorsens information, the change
+# Basically as expected after Steffen Thorsen's information, the change
 # will take place midnight between Saturday and Sunday.
 
 # From Arthur David Olson (2008-03-12):
@@ -2790,18 +2716,14 @@ Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
 # midnight between Saturday, March 07, 2009 and Sunday, March 08, 2009-
 # not on midnight March 14 / March 15 as previously thought.
 #
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_cuba05.html
 # (in Spanish)
-# 
 
 # From Arthur David Olson (2009-03-09)
 # I listened over the Internet to
-# 
 # http://media.enet.cu/readioreloj
-# 
 # this morning; when it was 10:05 a. m. here in Bethesda, Maryland the
-# the time was announced as "diez cinco"--the same time as here, indicating
+# the time was announced as "diez cinco" - the same time as here, indicating
 # that has indeed switched to DST. Assume second Sunday from 2009 forward.
 
 # From Steffen Thorsen (2011-03-08):
@@ -2810,42 +2732,30 @@ Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
 # changed at all).
 #
 # Source:
-# 
 # http://granma.co.cu/2011/03/08/nacional/artic01.html
-# 
 #
 # Our info:
-# 
 # http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html
-# 
 #
 # From Steffen Thorsen (2011-10-30)
 # Cuba will end DST two weeks later this year. Instead of going back
 # tonight, it has been delayed to 2011-11-13 at 01:00.
 #
 # One source (Spanish)
-# 
 # http://www.radioangulo.cu/noticias/cuba/17105-cuba-restablecera-el-horario-del-meridiano-de-greenwich.html
-# 
 #
 # Our page:
-# 
 # http://www.timeanddate.com/news/time/cuba-time-changes-2011.html
-# 
 #
 # From Steffen Thorsen (2012-03-01)
 # According to Radio Reloj, Cuba will start DST on Midnight between March
 # 31 and April 1.
 #
 # Radio Reloj has the following info (Spanish):
-# 
 # http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril
-# 
 #
 # Our info on it:
-# 
 # http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html
-# 
 
 # From Steffen Thorsen (2012-11-03):
 # Radio Reloj and many other sources report that Cuba is changing back
@@ -2901,7 +2811,7 @@ Zone	America/Havana	-5:29:28 -	LMT	1890
 			-5:00	Cuba	C%sT
 
 # Dominica
-# See 'southamerica'.
+# See America/Port_of_Spain.
 
 # Dominican Republic
 
@@ -2934,8 +2844,8 @@ Rule	DR	1972	1974	-	Jan	21	0:00	0	S
 Zone America/Santo_Domingo -4:39:36 -	LMT	1890
 			-4:40	-	SDMT	1933 Apr  1 12:00 # S. Dom. MT
 			-5:00	DR	E%sT	1974 Oct 27
-			-4:00	-	AST	2000 Oct 29 02:00
-			-5:00	US	E%sT	2000 Dec  3 01:00
+			-4:00	-	AST	2000 Oct 29  2:00
+			-5:00	US	E%sT	2000 Dec  3  1:00
 			-4:00	-	AST
 
 # El Salvador
@@ -2946,20 +2856,20 @@ Rule	Salv	1987	1988	-	Sep	lastSun	0:00	0	S
 # There are too many San Salvadors elsewhere, so use America/El_Salvador
 # instead of America/San_Salvador.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/El_Salvador -5:56:48 -	LMT	1921		# San Salvador
+Zone America/El_Salvador -5:56:48 -	LMT	1921 # San Salvador
 			-6:00	Salv	C%sT
 
 # Grenada
 # Guadeloupe
-# St Barthelemy
+# St Barthélemy
 # St Martin (French part)
-# See 'southamerica'.
+# See America/Port_of_Spain.
 
 # Guatemala
 #
 # From Gwillim Law (2006-04-22), after a heads-up from Oscar van Vlijmen:
 # Diario Co Latino, at
-# http://www.diariocolatino.com/internacionales/detalles.asp?NewsID=8079,
+# ,
 # says in an article dated 2006-04-19 that the Guatemalan government had
 # decided on that date to advance official time by 60 minutes, to lessen the
 # impact of the elevated cost of oil....  Daylight saving time will last from
@@ -2967,7 +2877,7 @@ Zone America/El_Salvador -5:56:48 -	LMT	1921		# San Salvador
 # From Paul Eggert (2006-06-22):
 # The Ministry of Energy and Mines, press release CP-15/2006
 # (2006-04-19), says DST ends at 24:00.  See
-# .
+# http://www.sieca.org.gt/Sitio_publico/Energeticos/Doc/Medidas/Cambio_Horario_Nac_190406.pdf
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Guat	1973	only	-	Nov	25	0:00	1:00	D
@@ -2984,11 +2894,10 @@ Zone America/Guatemala	-6:02:04 -	LMT	1918 Oct 5
 
 # Haiti
 # From Gwillim Law (2005-04-15):
-# Risto O. Nykanen wrote me that Haiti is now on DST.
-# I searched for confirmation, and I found a
-#  press release
+# Risto O. Nykänen wrote me that Haiti is now on DST.
+# I searched for confirmation, and I found a press release
 # on the Web page of the Haitian Consulate in Chicago (2005-03-31),
-# .  Translated from French, it says:
+# .  Translated from French, it says:
 #
 #  "The Prime Minister's Communication Office notifies the public in general
 #   and the press in particular that, following a decision of the Interior
@@ -3065,14 +2974,14 @@ Zone America/Port-au-Prince -4:49:20 -	LMT	1890
 #  that Manuel Zelaya, the president
 # of Honduras, refused to back down on this.
 
-# From Jesper Norgaard Welen (2006-08-08):
+# From Jesper Nørgaard Welen (2006-08-08):
 # It seems that Honduras has returned from DST to standard time this Monday at
 # 00:00 hours (prolonging Sunday to 25 hours duration).
 # http://www.worldtimezone.com/dst_news/dst_news_honduras04.html
 
 # From Paul Eggert (2006-08-08):
-# Also see Diario El Heraldo, The country returns to standard time (2006-08-08)
-# .
+# Also see Diario El Heraldo, The country returns to standard time (2006-08-08).
+# http://www.elheraldo.hn/nota.php?nid=54941&sec=12
 # It mentions executive decree 18-2006.
 
 # From Steffen Thorsen (2006-08-17):
@@ -3100,22 +3009,22 @@ Zone America/Tegucigalpa -5:48:52 -	LMT	1921 Apr
 # unspecified official document, and says "This time is used throughout the
 # island".  Go with Milne.  Round to the nearest second as required by zic.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Jamaica	-5:07:11 -	LMT	1890		# Kingston
+Zone	America/Jamaica	-5:07:11 -	LMT	1890        # Kingston
 			-5:07:11 -	KMT	1912 Feb    # Kingston Mean Time
-			-5:00	-	EST	1974 Apr 28 2:00
+			-5:00	-	EST	1974 Apr 28  2:00
 			-5:00	US	E%sT	1984
 			-5:00	-	EST
 
 # Martinique
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Martinique	-4:04:20 -      LMT	1890		# Fort-de-France
-			-4:04:20 -	FFMT	1911 May     # Fort-de-France MT
+Zone America/Martinique	-4:04:20 -      LMT	1890        # Fort-de-France
+			-4:04:20 -	FFMT	1911 May    # Fort-de-France MT
 			-4:00	-	AST	1980 Apr  6
 			-4:00	1:00	ADT	1980 Sep 28
 			-4:00	-	AST
 
 # Montserrat
-# See 'southamerica'.
+# See America/Port_of_Spain.
 
 # Nicaragua
 #
@@ -3138,27 +3047,27 @@ Zone America/Martinique	-4:04:20 -      LMT	1890		# Fort-de-France
 # From Gwillim Law (2005-04-21):
 # The Associated Press story on the time change, which can be found at
 # http://www.lapalmainteractivo.com/guias/content/gen/ap/America_Latina/AMC_GEN_NICARAGUA_HORA.html
-# and elsewhere, says (fifth paragraph, translated from Spanish):  "The last
+# and elsewhere, says (fifth paragraph, translated from Spanish): "The last
 # time that a change of clocks was applied to save energy was in the year 2000
-# during the Arnoldo Aleman administration."...
+# during the Arnoldo Alemán administration."...
 # The northamerica file says that Nicaragua has been on UTC-6 continuously
 # since December 1998.  I wasn't able to find any details of Nicaraguan time
 # changes in 2000.  Perhaps a note could be added to the northamerica file, to
 # the effect that we have indirect evidence that DST was observed in 2000.
 #
-# From Jesper Norgaard Welen (2005-11-02):
+# From Jesper Nørgaard Welen (2005-11-02):
 # Nicaragua left DST the 2005-10-02 at 00:00 (local time).
 # http://www.presidencia.gob.ni/presidencia/files_index/secretaria/comunicados/2005/septiembre/26septiembre-cambio-hora.htm
 # (2005-09-26)
 #
-# From Jesper Norgaard Welen (2006-05-05):
+# From Jesper Nørgaard Welen (2006-05-05):
 # http://www.elnuevodiario.com.ni/2006/05/01/nacionales/18410
 # (my informal translation)
-# By order of the president of the republic, Enrique Bolanos, Nicaragua
+# By order of the president of the republic, Enrique Bolaños, Nicaragua
 # advanced by sixty minutes their official time, yesterday at 2 in the
-# morning, and will stay that way until 30.th. of september.
+# morning, and will stay that way until 30th of September.
 #
-# From Jesper Norgaard Welen (2006-09-30):
+# From Jesper Nørgaard Welen (2006-09-30):
 # http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2006/D-063-2006P-PRN-Cambio-Hora.pdf
 # My informal translation runs:
 # The natural sun time is restored in all the national territory, in that the
@@ -3176,7 +3085,7 @@ Zone	America/Managua	-5:45:08 -	LMT	1890
 			-5:45:12 -	MMT	1934 Jun 23 # Managua Mean Time?
 			-6:00	-	CST	1973 May
 			-5:00	-	EST	1975 Feb 16
-			-6:00	Nic	C%sT	1992 Jan  1 4:00
+			-6:00	Nic	C%sT	1992 Jan  1  4:00
 			-5:00	-	EST	1992 Sep 24
 			-6:00	-	CST	1993
 			-5:00	-	EST	1997
@@ -3185,36 +3094,36 @@ Zone	America/Managua	-5:45:08 -	LMT	1890
 # Panama
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Panama	-5:18:08 -	LMT	1890
-			-5:19:36 -	CMT	1908 Apr 22   # Colon Mean Time
+			-5:19:36 -	CMT	1908 Apr 22 # Colón Mean Time
 			-5:00	-	EST
 
 # Puerto Rico
 # There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Puerto_Rico -4:24:25 -	LMT	1899 Mar 28 12:00    # San Juan
+Zone America/Puerto_Rico -4:24:25 -	LMT	1899 Mar 28 12:00 # San Juan
 			-4:00	-	AST	1942 May  3
 			-4:00	US	A%sT	1946
 			-4:00	-	AST
 
 # St Kitts-Nevis
 # St Lucia
-# See 'southamerica'.
+# See America/Port_of_Spain.
 
 # St Pierre and Miquelon
 # There are too many St Pierres elsewhere, so we'll use 'Miquelon'.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Miquelon	-3:44:40 -	LMT	1911 May 15	# St Pierre
+Zone America/Miquelon	-3:44:40 -	LMT	1911 May 15 # St Pierre
 			-4:00	-	AST	1980 May
 			-3:00	-	PMST	1987 # Pierre & Miquelon Time
 			-3:00	Canada	PM%sT
 
 # St Vincent and the Grenadines
-# See 'southamerica'.
+# See America/Port_of_Spain.
 
 # Turks and Caicos
 #
 # From Chris Dunn in
-# 
+# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=415007
 # (2007-03-15): In the Turks & Caicos Islands (America/Grand_Turk) the
 # daylight saving dates for time changes have been adjusted to match
 # the recent U.S. change of dates.
@@ -3227,21 +3136,23 @@ Zone America/Miquelon	-3:44:40 -	LMT	1911 May 15	# St Pierre
 # Clocks are set back one hour at 2:00 a.m. local Daylight Saving Time"
 # indicating that the normal ET rules are followed.
 #
-# From Paul Eggert (2006-05-01):
-# Shanks & Pottenger say they use US DST rules, but IATA SSIM (1991/1998)
-# says they switch at midnight.  Go with Shanks & Pottenger.
+# From Paul Eggert (2014-08-19):
+# The 2014-08-13 Cabinet meeting decided to stay on UTC-4 year-round.  See:
+# http://tcweeklynews.com/daylight-savings-time-to-be-maintained-p5353-127.htm
+# Model this as a switch from EST/EDT to AST on 2014-11-02 at 02:00.
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	TC	1979	1986	-	Apr	lastSun	2:00	1:00	D
-Rule	TC	1979	2006	-	Oct	lastSun	2:00	0	S
-Rule	TC	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
-Rule	TC	2007	max	-	Mar	Sun>=8	2:00	1:00	D
-Rule	TC	2007	max	-	Nov	Sun>=1	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Grand_Turk	-4:44:32 -	LMT	1890
-			-5:07:11 -	KMT	1912 Feb    # Kingston Mean Time
-			-5:00	TC	E%sT
+			-5:07:11 -	KMT	1912 Feb # Kingston Mean Time
+			-5:00	-	EST	1979
+			-5:00	US	E%sT	2014 Nov  2  2:00
+			-4:00	-	AST
 
 # British Virgin Is
 # Virgin Is
-# See 'southamerica'.
+# See America/Port_of_Spain.
+
+
+# Local Variables:
+# coding: utf-8
+# End:
diff --git a/jdk/make/data/tzdata/pacificnew b/jdk/make/data/tzdata/pacificnew
index 09000c3457a..9b9257a45fe 100644
--- a/jdk/make/data/tzdata/pacificnew
+++ b/jdk/make/data/tzdata/pacificnew
@@ -21,7 +21,6 @@
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
diff --git a/jdk/make/data/tzdata/southamerica b/jdk/make/data/tzdata/southamerica
index 02bf3bb6332..398ec0e4f06 100644
--- a/jdk/make/data/tzdata/southamerica
+++ b/jdk/make/data/tzdata/southamerica
@@ -21,13 +21,13 @@
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
-# This data is by no means authoritative; if you think you know better,
+# This file is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
-# tz@iana.org for general use in the future).
+# tz@iana.org for general use in the future).  For more, please see
+# the file CONTRIBUTING in the tz distribution.
 
 # From Paul Eggert (2006-03-22):
 # A good source for time zone historical data outside the U.S. is
@@ -35,8 +35,8 @@
 # San Diego: ACS Publications, Inc. (2003).
 #
 # For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
-# .
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
+# http://www.jstor.org/stable/1774359
 #
 # Gwillim Law writes that a good source
 # for recent time zone data is the International Air Transport
@@ -53,24 +53,24 @@
 #	I suggest the use of _Summer time_ instead of the more cumbersome
 #	_daylight-saving time_.  _Summer time_ seems to be in general use
 #	in Europe and South America.
-#	-- E O Cutler, _New York Times_ (1937-02-14), quoted in
+#	-- E O Cutler, _New York Times_ (1937-02-14), quoted in
 #	H L Mencken, _The American Language: Supplement I_ (1960), p 466
 #
 # Earlier editions of these tables also used the North American style
 # for time zones in Brazil, but this was incorrect, as Brazilians say
-# "summer time".  Reinaldo Goulart, a Sao Paulo businessman active in
+# "summer time".  Reinaldo Goulart, a São Paulo businessman active in
 # the railroad sector, writes (1999-07-06):
 #	The subject of time zones is currently a matter of discussion/debate in
-#	Brazil.  Let's say that "the Brasilia time" is considered the
-#	"official time" because Brasilia is the capital city.
-#	The other three time zones are called "Brasilia time "minus one" or
+#	Brazil.  Let's say that "the Brasília time" is considered the
+#	"official time" because Brasília is the capital city.
+#	The other three time zones are called "Brasília time "minus one" or
 #	"plus one" or "plus two".  As far as I know there is no such
 #	name/designation as "Eastern Time" or "Central Time".
 # So I invented the following (English-language) abbreviations for now.
 # Corrections are welcome!
 #		std	dst
 #	-2:00	FNT	FNST	Fernando de Noronha
-#	-3:00	BRT	BRST	Brasilia
+#	-3:00	BRT	BRST	Brasília
 #	-4:00	AMT	AMST	Amazon
 #	-5:00	ACT	ACST	Acre
 
@@ -84,7 +84,7 @@
 # Argentina: first Sunday in October to first Sunday in April since 1976.
 # Double Summer time from 1969 to 1974.  Switches at midnight.
 
-# From U. S. Naval Observatory (1988-01-199):
+# From U. S. Naval Observatory (1988-01-19):
 # ARGENTINA           3 H BEHIND   UTC
 
 # From Hernan G. Otero (1995-06-26):
@@ -118,7 +118,7 @@ Rule	Arg	1988	only	-	Dec	 1	0:00	1:00	S
 # From Hernan G. Otero (1995-06-26):
 # These corrections were contributed by InterSoft Argentina S.A.,
 # obtaining the data from the:
-# Talleres de Hidrografia Naval Argentina
+# Talleres de Hidrografía Naval Argentina
 # (Argentine Naval Hydrography Institute)
 Rule	Arg	1989	1993	-	Mar	Sun>=1	0:00	0	-
 Rule	Arg	1989	1992	-	Oct	Sun>=15	0:00	1:00	S
@@ -140,13 +140,13 @@ Rule	Arg	1999	only	-	Oct	Sun>=1	0:00	1:00	S
 Rule	Arg	2000	only	-	Mar	3	0:00	0	-
 #
 # From Peter Gradelski via Steffen Thorsen (2000-03-01):
-# We just checked with our Sao Paulo office and they say the government of
+# We just checked with our São Paulo office and they say the government of
 # Argentina decided not to become one of the countries that go on or off DST.
 # So Buenos Aires should be -3 hours from GMT at all times.
 #
-# From Fabian L. Arce Jofre (2000-04-04):
+# From Fabián L. Arce Jofré (2000-04-04):
 # The law that claimed DST for Argentina was derogated by President Fernando
-# de la Rua on March 2, 2000, because it would make people spend more energy
+# de la Rúa on March 2, 2000, because it would make people spend more energy
 # in the winter time, rather than less.  The change took effect on March 3.
 #
 # From Mariano Absatz (2001-06-06):
@@ -179,15 +179,13 @@ Rule	Arg	2000	only	-	Mar	3	0:00	0	-
 # that Argentina will use DST next year as well, from October to
 # March, although exact rules are not given.
 #
-# From Jesper Norgaard Welen (2007-12-26)
+# From Jesper Nørgaard Welen (2007-12-26)
 # The last hurdle of Argentina DST is over, the proposal was approved in
-# the lower chamber too (Deputados) with a vote 192 for and 2 against.
+# the lower chamber too (Diputados) with a vote 192 for and 2 against.
 # By the way thanks to Mariano Absatz and Daniel Mario Vega for the link to
 # the original scanned proposal, where the dates and the zero hours are
 # clear and unambiguous...This is the article about final approval:
-# 
 # http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996
-# 
 #
 # From Paul Eggert (2007-12-22):
 # For dates after mid-2008, the following rules are my guesses and
@@ -197,13 +195,8 @@ Rule	Arg	2000	only	-	Mar	3	0:00	0	-
 # As per message from Carlos Alberto Fonseca Arauz (Nicaragua),
 # Argentina will start DST on Sunday October 19, 2008.
 #
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_argentina03.html
-# 
-# OR
-# 
 # http://www.impulsobaires.com.ar/nota.php?id=57832 (in spanish)
-# 
 
 # From Rodrigo Severo (2008-10-06):
 # Here is some info available at a Gentoo bug related to TZ on Argentina's DST:
@@ -212,48 +205,39 @@ Rule	Arg	2000	only	-	Mar	3	0:00	0	-
 # Hi, there is a problem with timezone-data-2008e and maybe with
 # timezone-data-2008f
 # Argentinian law [Number] 25.155 is no longer valid.
-# 
 # http://www.infoleg.gov.ar/infolegInternet/anexos/60000-64999/60036/norma.htm
-# 
 # The new one is law [Number] 26.350
-# 
 # http://www.infoleg.gov.ar/infolegInternet/anexos/135000-139999/136191/norma.htm
-# 
 # So there is no summer time in Argentina for now.
 
 # From Mariano Absatz (2008-10-20):
-# Decree 1693/2008 applies Law 26.350 for the summer 2008/2009 establishing DST in Argentina
-# From 2008-10-19 until 2009-03-15
-# 
+# Decree 1693/2008 applies Law 26.350 for the summer 2008/2009 establishing DST
+# in Argentina from 2008-10-19 until 2009-03-15.
 # http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=16102008&pi=3&pf=4&s=0&sec=01
-# 
 #
-# Decree 1705/2008 excepting 12 Provinces from applying DST in the summer 2008/2009:
-# Catamarca, La Rioja, Mendoza, Salta, San Juan, San Luis, La Pampa, Neuquen, Rio Negro, Chubut, Santa Cruz
-# and Tierra del Fuego
-# 
+
+# Decree 1705/2008 excepting 12 Provinces from applying DST in the summer
+# 2008/2009: Catamarca, La Rioja, Mendoza, Salta, San Juan, San Luis, La
+# Pampa, Neuquén, Rio Negro, Chubut, Santa Cruz and Tierra del Fuego
 # http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=17102008&pi=1&pf=1&s=0&sec=01
-# 
 #
-# Press release 235 dated Saturday October 18th, from the Government of the Province of Jujuy saying
-# it will not apply DST either (even when it was not included in Decree 1705/2008)
-# 
+# Press release 235 dated Saturday October 18th, from the Government of the
+# Province of Jujuy saying it will not apply DST either (even when it was not
+# included in Decree 1705/2008).
 # http://www.jujuy.gov.ar/index2/partes_prensa/18_10_08/235-181008.doc
-# 
 
 # From fullinet (2009-10-18):
 # As announced in
-# 
 # http://www.argentina.gob.ar/argentina/portal/paginas.dhtml?pagina=356
-# 
-# (an official .gob.ar) under title: "Sin Cambio de Hora" (english: "No hour change")
+# (an official .gob.ar) under title: "Sin Cambio de Hora"
+# (English: "No hour change").
 #
-# "Por el momento, el Gobierno Nacional resolvio no modificar la hora
-# oficial, decision que estaba en estudio para su implementacion el
-# domingo 18 de octubre. Desde el Ministerio de Planificacion se anuncio
-# que la Argentina hoy, en estas condiciones meteorologicas, no necesita
-# la modificacion del huso horario, ya que 2009 nos encuentra con
-# crecimiento en la produccion y distribucion energetica."
+# "Por el momento, el Gobierno Nacional resolvió no modificar la hora
+# oficial, decisión que estaba en estudio para su implementación el
+# domingo 18 de octubre. Desde el Ministerio de Planificación se anunció
+# que la Argentina hoy, en estas condiciones meteorológicas, no necesita
+# la modificación del huso horario, ya que 2009 nos encuentra con
+# crecimiento en la producción y distribución energética."
 
 Rule	Arg	2007	only	-	Dec	30	0:00	1:00	S
 Rule	Arg	2008	2009	-	Mar	Sun>=15	0:00	0	-
@@ -267,10 +251,10 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
 # It's Law No. 7,210.  This change is due to a public power emergency, so for
 # now we'll assume it's for this year only.
 #
-# From Paul Eggert (2006-03-22):
-# 
-# Hora de verano para la Republica Argentina (2003-06-08)
-#  says that standard time in Argentina from 1894-10-31
+# From Paul Eggert (2014-08-09):
+# Hora de verano para la República Argentina
+# http://buenasiembra.com.ar/esoterismo/astrologia/hora-de-verano-de-la-republica-argentina-27.html
+# says that standard time in Argentina from 1894-10-31
 # to 1920-05-01 was -4:16:48.25.  Go with this more-precise value
 # over Shanks & Pottenger.
 #
@@ -285,10 +269,10 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
 # time in October 17th.
 #
 # Catamarca, Chubut, La Rioja, San Juan, San Luis, Santa Cruz,
-# Tierra del Fuego, Tucuman.
+# Tierra del Fuego, Tucumán.
 #
 # From Mariano Absatz (2004-06-14):
-# ... this weekend, the Province of Tucuman decided it'd go back to UTC-03:00
+# ... this weekend, the Province of Tucumán decided it'd go back to UTC-03:00
 # yesterday midnight (that is, at 24:00 Saturday 12th), since the people's
 # annoyance with the change is much higher than the power savings obtained....
 #
@@ -323,49 +307,38 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
 # Here are articles that Argentina Province San Luis is planning to end DST
 # as earlier as upcoming Monday January 21, 2008 or February 2008:
 #
-# Provincia argentina retrasa reloj y marca diferencia con resto del pais
+# Provincia argentina retrasa reloj y marca diferencia con resto del país
 # (Argentine Province delayed clock and mark difference with the rest of the
 # country)
-# 
 # http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel
-# 
 #
 # Es inminente que en San Luis atrasen una hora los relojes
 # (It is imminent in San Luis clocks one hour delay)
-# 
-# http://www.lagaceta.com.ar/vernotae.asp?id_nota=253414
-# 
-#
-# 
+# http://www.lagaceta.com.ar/nota/253414/Economia/Es-inminente-que-en-San-Luis-atrasen-una-hora-los-relojes.html
 # http://www.worldtimezone.net/dst_news/dst_news_argentina02.html
-# 
 
-# From Jesper Norgaard Welen (2008-01-18):
+# From Jesper Nørgaard Welen (2008-01-18):
 # The page of the San Luis provincial government
-# 
 # http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812
-# 
 # confirms what Alex Krivenyshev has earlier sent to the tz
 # emailing list about that San Luis plans to return to standard
 # time much earlier than the rest of the country. It also
 # confirms that upon request the provinces San Juan and Mendoza
 # refused to follow San Luis in this change.
 #
-# The change is supposed to take place Monday the 21.st at 0:00
+# The change is supposed to take place Monday the 21st at 0:00
 # hours. As far as I understand it if this goes ahead, we need
 # a new timezone for San Luis (although there are also documented
 # independent changes in the southamerica file of San Luis in
 # 1990 and 1991 which has not been confirmed).
 
-# From Jesper Norgaard Welen (2008-01-25):
+# From Jesper Nørgaard Welen (2008-01-25):
 # Unfortunately the below page has become defunct, about the San Luis
 # time change. Perhaps because it now is part of a group of pages "Most
 # important pages of 2008."
 #
 # You can use
-# 
 # http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834
-# 
 # instead it seems. Or use "Buscador" from the main page of the San Luis
 # government, and fill in "huso" and click OK, and you will get 3 pages
 # from which the first one is identical to the above.
@@ -385,9 +358,9 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
 # back in 2004, when these provinces changed to UTC-4 for a few days, I
 # mailed them personally and never got an answer).
 
-# From Paul Eggert (2008-06-30):
-# Unless otherwise specified, data are from Shanks & Pottenger through 1992,
-# from the IATA otherwise.  As noted below, Shanks & Pottenger say that
+# From Paul Eggert (2014-08-12):
+# Unless otherwise specified, data entries are from Shanks & Pottenger through
+# 1992, from the IATA otherwise.  As noted below, Shanks & Pottenger say that
 # America/Cordoba split into 6 subregions during 1991/1992, one of which
 # was America/San_Luis, but we haven't verified this yet so for now we'll
 # keep America/Cordoba a single region rather than splitting it into the
@@ -399,14 +372,9 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
 # to utc-04:00 until the second Saturday in October...
 #
 # The press release is at
-# 
 # http://www.sanluis.gov.ar/SL/Paginas/NoticiaDetalle.asp?TemaId=1&InfoPrensaId=3102
-# 
-# (I couldn't find the decree, but
-# 
-# www.sanluis.gov.ar
-# 
-# is the official page for the Province Government).
+# (I couldn't find the decree, but www.sanluis.gov.ar
+# is the official page for the Province Government.)
 #
 # There's also a note in only one of the major national papers ...
 # http://www.lanacion.com.ar/nota.asp?nota_id=1107912
@@ -423,9 +391,7 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
 # ...the Province of San Luis is a case in itself.
 #
 # The Law at
-# 
 # is ambiguous because establishes a calendar from the 2nd Sunday in
 # October at 0:00 thru the 2nd Saturday in March at 24:00 and the
 # complement of that starting on the 2nd Sunday of March at 0:00 and
@@ -454,19 +420,15 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
 # ...
 
 # From Alexander Krivenyshev (2010-04-09):
-# According to news reports from El Diario de la Republica Province San
+# According to news reports from El Diario de la República Province San
 # Luis, Argentina (standard time UTC-04) will keep Daylight Saving Time
-# after April 11, 2010--will continue to have same time as rest of
+# after April 11, 2010 - will continue to have same time as rest of
 # Argentina (UTC-3) (no DST).
 #
-# Confirmaron la prórroga del huso horario de verano (Spanish)
-# 
+# Confirmaron la prórroga del huso horario de verano (Spanish)
 # http://www.eldiariodelarepublica.com/index.php?option=com_content&task=view&id=29383&Itemid=9
-# 
 # or (some English translation):
-# 
 # http://www.worldtimezone.com/dst_news/dst_news_argentina08.html
-# 
 
 # From Mariano Absatz (2010-04-12):
 # yes...I can confirm this...and given that San Luis keeps calling
@@ -478,7 +440,7 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
 # Perhaps San Luis operates on the legal fiction that it is at UTC-4
 # with perpetual summer time, but ordinary usage typically seems to
 # just say it's at UTC-3; see, for example,
-# .
+# http://es.wikipedia.org/wiki/Hora_oficial_argentina
 # We've documented similar situations as being plain changes to
 # standard time, so let's do that here too.  This does not change UTC
 # offsets, only tm_isdst and the time zone abbreviations.  One minor
@@ -486,20 +448,20 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
 # setting for time stamps past 2038.
 
 # From Paul Eggert (2013-02-21):
-# Milne says Cordoba time was -4:16:48.2.  Round to the nearest second.
+# Milne says Córdoba time was -4:16:48.2.  Round to the nearest second.
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 #
 # Buenos Aires (BA), Capital Federal (CF),
-Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
-			-4:16:48 -	CMT	1920 May # Cordoba Mean Time
+Zone America/Argentina/Buenos_Aires -3:53:48 - LMT	1894 Oct 31
+			-4:16:48 -	CMT	1920 May    # Córdoba Mean Time
 			-4:00	-	ART	1930 Dec
 			-4:00	Arg	AR%sT	1969 Oct  5
 			-3:00	Arg	AR%sT	1999 Oct  3
 			-4:00	Arg	AR%sT	2000 Mar  3
 			-3:00	Arg	AR%sT
 #
-# Cordoba (CB), Santa Fe (SF), Entre Rios (ER), Corrientes (CN), Misiones (MN),
+# Córdoba (CB), Santa Fe (SF), Entre Ríos (ER), Corrientes (CN), Misiones (MN),
 # Chaco (CC), Formosa (FM), Santiago del Estero (SE)
 #
 # Shanks & Pottenger also make the following claims, which we haven't verified:
@@ -519,7 +481,7 @@ Zone America/Argentina/Cordoba -4:16:48 - LMT	1894 Oct 31
 			-4:00	Arg	AR%sT	2000 Mar  3
 			-3:00	Arg	AR%sT
 #
-# Salta (SA), La Pampa (LP), Neuquen (NQ), Rio Negro (RN)
+# Salta (SA), La Pampa (LP), Neuquén (NQ), Rio Negro (RN)
 Zone America/Argentina/Salta -4:21:40 - LMT	1894 Oct 31
 			-4:16:48 -	CMT	1920 May
 			-4:00	-	ART	1930 Dec
@@ -531,7 +493,7 @@ Zone America/Argentina/Salta -4:21:40 - LMT	1894 Oct 31
 			-3:00	Arg	AR%sT	2008 Oct 18
 			-3:00	-	ART
 #
-# Tucuman (TM)
+# Tucumán (TM)
 Zone America/Argentina/Tucuman -4:20:52 - LMT	1894 Oct 31
 			-4:16:48 -	CMT	1920 May
 			-4:00	-	ART	1930 Dec
@@ -642,8 +604,8 @@ Zone America/Argentina/San_Luis -4:25:24 - LMT	1894 Oct 31
 			-3:00	-	ART
 #
 # Santa Cruz (SC)
-Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
-			-4:16:48 -	CMT	1920 May # Cordoba Mean Time
+Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT	1894 Oct 31
+			-4:16:48 -	CMT	1920 May    # Córdoba Mean Time
 			-4:00	-	ART	1930 Dec
 			-4:00	Arg	AR%sT	1969 Oct  5
 			-3:00	Arg	AR%sT	1999 Oct  3
@@ -653,9 +615,9 @@ Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
 			-3:00	Arg	AR%sT	2008 Oct 18
 			-3:00	-	ART
 #
-# Tierra del Fuego, Antartida e Islas del Atlantico Sur (TF)
-Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
-			-4:16:48 -	CMT	1920 May # Cordoba Mean Time
+# Tierra del Fuego, Antártida e Islas del Atlántico Sur (TF)
+Zone America/Argentina/Ushuaia -4:33:12 - LMT	1894 Oct 31
+			-4:16:48 -	CMT	1920 May    # Córdoba Mean Time
 			-4:00	-	ART	1930 Dec
 			-4:00	Arg	AR%sT	1969 Oct  5
 			-3:00	Arg	AR%sT	1999 Oct  3
@@ -686,13 +648,13 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
 
 # From IATA SSIM (1996-02):
 # _Only_ the following states in BR1 observe DST: Rio Grande do Sul (RS),
-# Santa Catarina (SC), Parana (PR), Sao Paulo (SP), Rio de Janeiro (RJ),
-# Espirito Santo (ES), Minas Gerais (MG), Bahia (BA), Goias (GO),
+# Santa Catarina (SC), Paraná (PR), São Paulo (SP), Rio de Janeiro (RJ),
+# Espírito Santo (ES), Minas Gerais (MG), Bahia (BA), Goiás (GO),
 # Distrito Federal (DF), Tocantins (TO), Sergipe [SE] and Alagoas [AL].
 # [The last three states are new to this issue of the IATA SSIM.]
 
 # From Gwillim Law (1996-10-07):
-# Geography, history (Tocantins was part of Goias until 1989), and other
+# Geography, history (Tocantins was part of Goiás until 1989), and other
 # sources of time zone information lead me to believe that AL, SE, and TO were
 # always in BR1, and so the only change was whether or not they observed DST....
 # The earliest issue of the SSIM I have is 2/91.  Each issue from then until
@@ -706,16 +668,14 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
 # However, some conclusions can be drawn from another IATA manual: the Airline
 # Coding Directory, which lists close to 400 airports in Brazil.  For each
 # airport it gives a time zone which is coded to the SSIM.  From that
-# information, I'm led to conclude that the states of Amapa (AP), Ceara (CE),
-# Maranhao (MA), Paraiba (PR), Pernambuco (PE), Piaui (PI), and Rio Grande do
-# Norte (RN), and the eastern part of Para (PA) are all in BR1 without DST.
+# information, I'm led to conclude that the states of Amapá (AP), Ceará (CE),
+# Maranhão (MA), Paraíba (PR), Pernambuco (PE), Piauí (PI), and Rio Grande do
+# Norte (RN), and the eastern part of Pará (PA) are all in BR1 without DST.
 
 # From Marcos Tadeu (1998-09-27):
-# 
-# Brazilian official page
-# 
+# Brazilian official page 
 
-# From Jesper Norgaard (2000-11-03):
+# From Jesper Nørgaard (2000-11-03):
 # [For an official list of which regions in Brazil use which time zones, see:]
 # http://pcdsh01.on.br/Fusbr.htm
 # http://pcdsh01.on.br/Fusbrhv.htm
@@ -748,13 +708,13 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
 
 # From Paul Schulze (2008-06-24):
 # ...by law number 11.662 of April 24, 2008 (published in the "Diario
-# Oficial da Uniao"...) in Brazil there are changes in the timezones,
+# Oficial da União"...) in Brazil there are changes in the timezones,
 # effective today (00:00am at June 24, 2008) as follows:
 #
-# a) The timezone UTC+5 is e[x]tinguished, with all the Acre state and the
+# a) The timezone UTC+5 is extinguished, with all the Acre state and the
 # part of the Amazonas state that had this timezone now being put to the
 # timezone UTC+4
-# b) The whole Para state now is put at timezone UTC+3, instead of just
+# b) The whole Pará state now is put at timezone UTC+3, instead of just
 # part of it, as was before.
 #
 # This change follows a proposal of senator Tiao Viana of Acre state, that
@@ -767,13 +727,11 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
 
 # From Rodrigo Severo (2008-06-24):
 # Just correcting the URL:
-# 
 # https://www.in.gov.br/imprensa/visualiza/index.jsp?jornal=do&secao=1&pagina=1&data=25/04/2008
-# 
 #
 # As a result of the above Decree I believe the America/Rio_Branco
 # timezone shall be modified from UTC-5 to UTC-4 and a new timezone shall
-# be created to represent the...west side of the Para State. I
+# be created to represent the...west side of the Pará State. I
 # suggest this new timezone be called Santarem as the most
 # important/populated city in the affected area.
 #
@@ -782,19 +740,16 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
 
 # From Alex Krivenyshev (2008-06-24):
 # This is a quick reference page for New and Old Brazil Time Zones map.
-# 
 # http://www.worldtimezone.com/brazil-time-new-old.php
-# 
 #
-# - 4 time zones replaced by 3 time zones-eliminating time zone UTC- 05
-# (state Acre and the part of the Amazonas will be UTC/GMT- 04) - western
-# part of Par state is moving to one timezone UTC- 03 (from UTC -04).
+# - 4 time zones replaced by 3 time zones - eliminating time zone UTC-05
+# (state Acre and the part of the Amazonas will be UTC/GMT-04) - western
+# part of Par state is moving to one timezone UTC-03 (from UTC-04).
 
 # From Paul Eggert (2002-10-10):
 # The official decrees referenced below are mostly taken from
-# 
-# Decretos sobre o Horario de Verao no Brasil
-# .
+# Decretos sobre o Horário de Verão no Brasil.
+# http://pcdsh01.on.br/DecHV.html
 
 # From Steffen Thorsen (2008-08-29):
 # As announced by the government and many newspapers in Brazil late
@@ -806,25 +761,17 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
 # It has not yet been posted to http://pcdsh01.on.br/DecHV.html
 #
 # An official page about it:
-# 
 # http://www.mme.gov.br/site/news/detail.do?newsId=16722
-# 
 # Note that this link does not always work directly, but must be accessed
 # by going to
-# 
 # http://www.mme.gov.br/first
-# 
 #
 # One example link that works directly:
-# 
 # http://jornale.com.br/index.php?option=com_content&task=view&id=13530&Itemid=54
 # (Portuguese)
-# 
 #
 # We have a written a short article about it as well:
-# 
 # http://www.timeanddate.com/news/time/brazil-dst-2008-2009.html
-# 
 #
 # From Alexander Krivenyshev (2011-10-04):
 # State Bahia will return to Daylight savings time this year after 8 years off.
@@ -832,17 +779,12 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
 # television station in Salvador.
 
 # In Portuguese:
-# 
 # http://g1.globo.com/bahia/noticia/2011/10/governador-jaques-wagner-confirma-horario-de-verao-na-bahia.html
-#  and
-# 
 # http://noticias.terra.com.br/brasil/noticias/0,,OI5390887-EI8139,00-Bahia+volta+a+ter+horario+de+verao+apos+oito+anos.html
-# 
 
 # From Guilherme Bernardes Rodrigues (2011-10-07):
 # There is news in the media, however there is still no decree about it.
-# I just send a e-mail to Zulmira Brandao at
-# http://pcdsh01.on.br/ the
+# I just send a e-mail to Zulmira Brandao at http://pcdsh01.on.br/ the
 # official agency about time in Brazil, and she confirmed that the old rule is
 # still in force.
 
@@ -854,9 +796,7 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
 #
 # DECRETO No- 7.584, DE 13 DE OUTUBRO DE 2011
 # Link :
-# 
 # http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6
-# 
 
 # From Kelley Cook (2012-10-16):
 # The governor of state of Bahia in Brazil announced on Thursday that
@@ -884,42 +824,42 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
 # For now, assume western Amazonas will change as well.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-# Decree 20,466 (1931-10-01)
-# Decree 21,896 (1932-01-10)
+# Decree 20,466  (1931-10-01)
+# Decree 21,896  (1932-01-10)
 Rule	Brazil	1931	only	-	Oct	 3	11:00	1:00	S
 Rule	Brazil	1932	1933	-	Apr	 1	 0:00	0	-
 Rule	Brazil	1932	only	-	Oct	 3	 0:00	1:00	S
-# Decree 23,195 (1933-10-10)
+# Decree 23,195  (1933-10-10)
 # revoked DST.
-# Decree 27,496 (1949-11-24)
-# Decree 27,998 (1950-04-13)
+# Decree 27,496  (1949-11-24)
+# Decree 27,998  (1950-04-13)
 Rule	Brazil	1949	1952	-	Dec	 1	 0:00	1:00	S
 Rule	Brazil	1950	only	-	Apr	16	 1:00	0	-
 Rule	Brazil	1951	1952	-	Apr	 1	 0:00	0	-
-# Decree 32,308 (1953-02-24)
+# Decree 32,308  (1953-02-24)
 Rule	Brazil	1953	only	-	Mar	 1	 0:00	0	-
-# Decree 34,724 (1953-11-30)
+# Decree 34,724  (1953-11-30)
 # revoked DST.
-# Decree 52,700 (1963-10-18)
+# Decree 52,700  (1963-10-18)
 # established DST from 1963-10-23 00:00 to 1964-02-29 00:00
 # in SP, RJ, GB, MG, ES, due to the prolongation of the drought.
-# Decree 53,071 (1963-12-03)
+# Decree 53,071  (1963-12-03)
 # extended the above decree to all of the national territory on 12-09.
 Rule	Brazil	1963	only	-	Dec	 9	 0:00	1:00	S
-# Decree 53,604 (1964-02-25)
+# Decree 53,604  (1964-02-25)
 # extended summer time by one day to 1964-03-01 00:00 (start of school).
 Rule	Brazil	1964	only	-	Mar	 1	 0:00	0	-
-# Decree 55,639 (1965-01-27)
+# Decree 55,639  (1965-01-27)
 Rule	Brazil	1965	only	-	Jan	31	 0:00	1:00	S
 Rule	Brazil	1965	only	-	Mar	31	 0:00	0	-
-# Decree 57,303 (1965-11-22)
+# Decree 57,303  (1965-11-22)
 Rule	Brazil	1965	only	-	Dec	 1	 0:00	1:00	S
-# Decree 57,843 (1966-02-18)
+# Decree 57,843  (1966-02-18)
 Rule	Brazil	1966	1968	-	Mar	 1	 0:00	0	-
 Rule	Brazil	1966	1967	-	Nov	 1	 0:00	1:00	S
-# Decree 63,429 (1968-10-15)
+# Decree 63,429  (1968-10-15)
 # revoked DST.
-# Decree 91,698 (1985-09-27)
+# Decree 91,698  (1985-09-27)
 Rule	Brazil	1985	only	-	Nov	 2	 0:00	1:00	S
 # Decree 92,310 (1986-01-21)
 # Decree 92,463 (1986-03-13)
@@ -927,42 +867,42 @@ Rule	Brazil	1986	only	-	Mar	15	 0:00	0	-
 # Decree 93,316 (1986-10-01)
 Rule	Brazil	1986	only	-	Oct	25	 0:00	1:00	S
 Rule	Brazil	1987	only	-	Feb	14	 0:00	0	-
-# Decree 94,922 (1987-09-22)
+# Decree 94,922  (1987-09-22)
 Rule	Brazil	1987	only	-	Oct	25	 0:00	1:00	S
 Rule	Brazil	1988	only	-	Feb	 7	 0:00	0	-
-# Decree 96,676 (1988-09-12)
+# Decree 96,676  (1988-09-12)
 # except for the states of AC, AM, PA, RR, RO, and AP (then a territory)
 Rule	Brazil	1988	only	-	Oct	16	 0:00	1:00	S
 Rule	Brazil	1989	only	-	Jan	29	 0:00	0	-
-# Decree 98,077 (1989-08-21)
+# Decree 98,077  (1989-08-21)
 # with the same exceptions
 Rule	Brazil	1989	only	-	Oct	15	 0:00	1:00	S
 Rule	Brazil	1990	only	-	Feb	11	 0:00	0	-
-# Decree 99,530 (1990-09-17)
+# Decree 99,530  (1990-09-17)
 # adopted by RS, SC, PR, SP, RJ, ES, MG, GO, MS, DF.
 # Decree 99,629 (1990-10-19) adds BA, MT.
 Rule	Brazil	1990	only	-	Oct	21	 0:00	1:00	S
 Rule	Brazil	1991	only	-	Feb	17	 0:00	0	-
-# Unnumbered decree (1991-09-25)
+# Unnumbered decree  (1991-09-25)
 # adopted by RS, SC, PR, SP, RJ, ES, MG, BA, GO, MT, MS, DF.
 Rule	Brazil	1991	only	-	Oct	20	 0:00	1:00	S
 Rule	Brazil	1992	only	-	Feb	 9	 0:00	0	-
-# Unnumbered decree (1992-10-16)
+# Unnumbered decree  (1992-10-16)
 # adopted by same states.
 Rule	Brazil	1992	only	-	Oct	25	 0:00	1:00	S
 Rule	Brazil	1993	only	-	Jan	31	 0:00	0	-
-# Decree 942 (1993-09-28)
+# Decree 942  (1993-09-28)
 # adopted by same states, plus AM.
-# Decree 1,252 (1994-09-22;
+# Decree 1,252  (1994-09-22;
 # web page corrected 2004-01-07) adopted by same states, minus AM.
-# Decree 1,636 (1995-09-14)
+# Decree 1,636  (1995-09-14)
 # adopted by same states, plus MT and TO.
-# Decree 1,674 (1995-10-13)
+# Decree 1,674  (1995-10-13)
 # adds AL, SE.
 Rule	Brazil	1993	1995	-	Oct	Sun>=11	 0:00	1:00	S
 Rule	Brazil	1994	1995	-	Feb	Sun>=15	 0:00	0	-
 Rule	Brazil	1996	only	-	Feb	11	 0:00	0	-
-# Decree 2,000 (1996-09-04)
+# Decree 2,000  (1996-09-04)
 # adopted by same states, minus AL, SE.
 Rule	Brazil	1996	only	-	Oct	 6	 0:00	1:00	S
 Rule	Brazil	1997	only	-	Feb	16	 0:00	0	-
@@ -975,53 +915,51 @@ Rule	Brazil	1997	only	-	Feb	16	 0:00	0	-
 #
 # Decree 2,317 (1997-09-04), adopted by same states.
 Rule	Brazil	1997	only	-	Oct	 6	 0:00	1:00	S
-# Decree 2,495
+# Decree 2,495 
 # (1998-02-10)
 Rule	Brazil	1998	only	-	Mar	 1	 0:00	0	-
-# Decree 2,780 (1998-09-11)
+# Decree 2,780  (1998-09-11)
 # adopted by the same states as before.
 Rule	Brazil	1998	only	-	Oct	11	 0:00	1:00	S
 Rule	Brazil	1999	only	-	Feb	21	 0:00	0	-
-# Decree 3,150
+# Decree 3,150 
 # (1999-08-23) adopted by same states.
-# Decree 3,188 (1999-09-30)
+# Decree 3,188  (1999-09-30)
 # adds SE, AL, PB, PE, RN, CE, PI, MA and RR.
 Rule	Brazil	1999	only	-	Oct	 3	 0:00	1:00	S
 Rule	Brazil	2000	only	-	Feb	27	 0:00	0	-
-# Decree 3,592 (2000-09-06)
+# Decree 3,592  (2000-09-06)
 # adopted by the same states as before.
-# Decree 3,630 (2000-10-13)
+# Decree 3,630  (2000-10-13)
 # repeals DST in PE and RR, effective 2000-10-15 00:00.
-# Decree 3,632 (2000-10-17)
+# Decree 3,632  (2000-10-17)
 # repeals DST in SE, AL, PB, RN, CE, PI and MA, effective 2000-10-22 00:00.
-# Decree 3,916
+# Decree 3,916 
 # (2001-09-13) reestablishes DST in AL, CE, MA, PB, PE, PI, RN, SE.
 Rule	Brazil	2000	2001	-	Oct	Sun>=8	 0:00	1:00	S
 Rule	Brazil	2001	2006	-	Feb	Sun>=15	 0:00	0	-
 # Decree 4,399 (2002-10-01) repeals DST in AL, CE, MA, PB, PE, PI, RN, SE.
-# 4,399
+# 4,399 
 Rule	Brazil	2002	only	-	Nov	 3	 0:00	1:00	S
 # Decree 4,844 (2003-09-24; corrected 2003-09-26) repeals DST in BA, MT, TO.
-# 4,844
+# 4,844 
 Rule	Brazil	2003	only	-	Oct	19	 0:00	1:00	S
 # Decree 5,223 (2004-10-01) reestablishes DST in MT.
-# 5,223
+# 5,223 
 Rule	Brazil	2004	only	-	Nov	 2	 0:00	1:00	S
-# Decree 5,539 (2005-09-19),
+# Decree 5,539  (2005-09-19),
 # adopted by the same states as before.
 Rule	Brazil	2005	only	-	Oct	16	 0:00	1:00	S
-# Decree 5,920 (2006-10-03),
+# Decree 5,920  (2006-10-03),
 # adopted by the same states as before.
 Rule	Brazil	2006	only	-	Nov	 5	 0:00	1:00	S
 Rule	Brazil	2007	only	-	Feb	25	 0:00	0	-
-# Decree 6,212 (2007-09-26),
+# Decree 6,212  (2007-09-26),
 # adopted by the same states as before.
 Rule	Brazil	2007	only	-	Oct	Sun>=8	 0:00	1:00	S
 # From Frederico A. C. Neves (2008-09-10):
 # According to this decree
-# 
 # http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm
-# 
 # [t]he DST period in Brazil now on will be from the 3rd Oct Sunday to the
 # 3rd Feb Sunday. There is an exception on the return date when this is
 # the Carnival Sunday then the return date will be the next Sunday...
@@ -1056,29 +994,29 @@ Zone America/Noronha	-2:09:40 -	LMT	1914
 			-2:00	Brazil	FN%sT	2002 Oct  1
 			-2:00	-	FNT
 # Other Atlantic islands have no permanent settlement.
-# These include Trindade and Martin Vaz (administratively part of ES),
-# Atol das Rocas (RN), and Penedos de Sao Pedro e Sao Paulo (PE).
+# These include Trindade and Martim Vaz (administratively part of ES),
+# Rocas Atoll (RN), and the St Peter and St Paul Archipelago (PE).
 # Fernando de Noronha was a separate territory from 1942-09-02 to 1989-01-01;
 # it also included the Penedos.
 #
-# Amapa (AP), east Para (PA)
-# East Para includes Belem, Maraba, Serra Norte, and Sao Felix do Xingu.
-# The division between east and west Para is the river Xingu.
+# Amapá (AP), east Pará (PA)
+# East Pará includes Belém, Marabá, Serra Norte, and São Félix do Xingu.
+# The division between east and west Pará is the river Xingu.
 # In the north a very small part from the river Javary (now Jari I guess,
-# the border with Amapa) to the Amazon, then to the Xingu.
+# the border with Amapá) to the Amazon, then to the Xingu.
 Zone America/Belem	-3:13:56 -	LMT	1914
 			-3:00	Brazil	BR%sT	1988 Sep 12
 			-3:00	-	BRT
 #
-# west Para (PA)
-# West Para includes Altamira, Oribidos, Prainha, Oriximina, and Santarem.
+# west Pará (PA)
+# West Pará includes Altamira, Óbidos, Prainha, Oriximiná, and Santarém.
 Zone America/Santarem	-3:38:48 -	LMT	1914
 			-4:00	Brazil	AM%sT	1988 Sep 12
-			-4:00	-	AMT	2008 Jun 24 00:00
+			-4:00	-	AMT	2008 Jun 24  0:00
 			-3:00	-	BRT
 #
-# Maranhao (MA), Piaui (PI), Ceara (CE), Rio Grande do Norte (RN),
-# Paraiba (PB)
+# Maranhão (MA), Piauí (PI), Ceará (CE), Rio Grande do Norte (RN),
+# Paraíba (PB)
 Zone America/Fortaleza	-2:34:00 -	LMT	1914
 			-3:00	Brazil	BR%sT	1990 Sep 17
 			-3:00	-	BRT	1999 Sep 30
@@ -1125,11 +1063,11 @@ Zone America/Bahia	-2:34:04 -	LMT	1914
 			-3:00	Brazil	BR%sT	2012 Oct 21
 			-3:00	-	BRT
 #
-# Goias (GO), Distrito Federal (DF), Minas Gerais (MG),
-# Espirito Santo (ES), Rio de Janeiro (RJ), Sao Paulo (SP), Parana (PR),
+# Goiás (GO), Distrito Federal (DF), Minas Gerais (MG),
+# Espírito Santo (ES), Rio de Janeiro (RJ), São Paulo (SP), Paraná (PR),
 # Santa Catarina (SC), Rio Grande do Sul (RS)
 Zone America/Sao_Paulo	-3:06:28 -	LMT	1914
-			-3:00	Brazil	BR%sT	1963 Oct 23 00:00
+			-3:00	Brazil	BR%sT	1963 Oct 23  0:00
 			-3:00	1:00	BRST	1964
 			-3:00	Brazil	BR%sT
 #
@@ -1143,7 +1081,7 @@ Zone America/Cuiaba	-3:44:20 -	LMT	1914
 			-4:00	-	AMT	2004 Oct  1
 			-4:00	Brazil	AM%sT
 #
-# Rondonia (RO)
+# Rondônia (RO)
 Zone America/Porto_Velho -4:15:36 -	LMT	1914
 			-4:00	Brazil	AM%sT	1988 Sep 12
 			-4:00	-	AMT
@@ -1155,7 +1093,7 @@ Zone America/Boa_Vista	-4:02:40 -	LMT	1914
 			-4:00	Brazil	AM%sT	2000 Oct 15
 			-4:00	-	AMT
 #
-# east Amazonas (AM): Boca do Acre, Jutai, Manaus, Floriano Peixoto
+# east Amazonas (AM): Boca do Acre, Jutaí, Manaus, Floriano Peixoto
 # The great circle line from Tabatinga to Porto Acre divides
 # east from west Amazonas.
 Zone America/Manaus	-4:00:04 -	LMT	1914
@@ -1165,19 +1103,19 @@ Zone America/Manaus	-4:00:04 -	LMT	1914
 			-4:00	-	AMT
 #
 # west Amazonas (AM): Atalaia do Norte, Boca do Maoco, Benjamin Constant,
-#	Eirunepe, Envira, Ipixuna
+#	Eirunepé, Envira, Ipixuna
 Zone America/Eirunepe	-4:39:28 -	LMT	1914
 			-5:00	Brazil	AC%sT	1988 Sep 12
 			-5:00	-	ACT	1993 Sep 28
 			-5:00	Brazil	AC%sT	1994 Sep 22
-			-5:00	-	ACT	2008 Jun 24 00:00
+			-5:00	-	ACT	2008 Jun 24  0:00
 			-4:00	-	AMT	2013 Nov 10
 			-5:00	-	ACT
 #
 # Acre (AC)
 Zone America/Rio_Branco	-4:31:12 -	LMT	1914
 			-5:00	Brazil	AC%sT	1988 Sep 12
-			-5:00	-	ACT	2008 Jun 24 00:00
+			-5:00	-	ACT	2008 Jun 24  0:00
 			-4:00	-	AMT	2013 Nov 10
 			-5:00	-	ACT
 
@@ -1198,66 +1136,54 @@ Zone America/Rio_Branco	-4:31:12 -	LMT	1914
 # From Oscar van Vlijmen (2006-10-08):
 # http://www.horaoficial.cl/cambio.htm
 
-# From Jesper Norgaard Welen (2006-10-08):
+# From Jesper Nørgaard Welen (2006-10-08):
 # I think that there are some obvious mistakes in the suggested link
 # from Oscar van Vlijmen,... for instance entry 66 says that GMT-4
 # ended 1990-09-12 while entry 67 only begins GMT-3 at 1990-09-15
 # (they should have been 1990-09-15 and 1990-09-16 respectively), but
 # anyhow it clears up some doubts too.
 
-# From Paul Eggert (2006-12-27):
-# The following data for Chile and America/Santiago are from
+# From Paul Eggert (2014-08-12):
+# The following data entries for Chile and America/Santiago are from
 #  (2006-09-20), transcribed by
-# Jesper Norgaard Welen.  The data for Pacific/Easter are from Shanks
+# Jesper Nørgaard Welen.  The data entries for Pacific/Easter are from Shanks
 # & Pottenger, except with DST transitions after 1932 cloned from
-# America/Santiago.  The pre-1980 Pacific/Easter data are dubious,
+# America/Santiago.  The pre-1980 Pacific/Easter data entries are dubious,
 # but we have no other source.
 
-# From German Poo-Caaman~o (2008-03-03):
+# From Germán Poo-Caamaño (2008-03-03):
 # Due to drought, Chile extends Daylight Time in three weeks.  This
 # is one-time change (Saturday 3/29 at 24:00 for America/Santiago
 # and Saturday 3/29 at 22:00 for Pacific/Easter)
 # The Supreme Decree is located at
-# 
 # http://www.shoa.cl/servicios/supremo316.pdf
-# 
 # and the instructions for 2008 are located in:
-# 
 # http://www.horaoficial.cl/cambio.htm
-# .
 
-# From Jose Miguel Garrido (2008-03-05):
+# From José Miguel Garrido (2008-03-05):
 # ...
 # You could see the announces of the change on
-# 
 # http://www.shoa.cl/noticias/2008/04hora/hora.htm
-# .
 
 # From Angel Chiang (2010-03-04):
 # Subject: DST in Chile exceptionally extended to 3 April due to earthquake
-# 
 # http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098
-# 
 # (in Spanish, last paragraph).
 #
 # This is breaking news. There should be more information available later.
 
-# From Arthur Daivd Olson (2010-03-06):
+# From Arthur David Olson (2010-03-06):
 # Angel Chiang's message confirmed by Julio Pacheco; Julio provided a patch.
 
-# From Glenn Eychaner (2011-03-02): [geychaner@mac.com]
+# From Glenn Eychaner (2011-03-02):
 # It appears that the Chilean government has decided to postpone the
 # change from summer time to winter time again, by three weeks to April
 # 2nd:
-# 
 # http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651
-# 
 #
 # This is not yet reflected in the official "cambio de hora" site, but
 # probably will be soon:
-# 
 # http://www.horaoficial.cl/cambio.htm
-# 
 
 # From Arthur David Olson (2011-03-02):
 # The emol.com article mentions a water shortage as the cause of the
@@ -1265,9 +1191,7 @@ Zone America/Rio_Branco	-4:31:12 -	LMT	1914
 
 # From Glenn Eychaner (2011-03-28):
 # The article:
-# 
 # http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E}
-# 
 #
 # In English:
 # Chile's clocks will go back an hour this year on the 7th of May instead
@@ -1298,7 +1222,7 @@ Zone America/Rio_Branco	-4:31:12 -	LMT	1914
 # start date is 2013-09-08 00:00....
 # http://www.gob.cl/informa/2013/02/15/gobierno-anuncia-fechas-de-cambio-de-hora-para-el-ano-2013.htm
 
-# From Jose Miguel Garrido (2014-02-19):
+# From José Miguel Garrido (2014-02-19):
 # Today appeared in the Diario Oficial a decree amending the time change
 # dates to 2014.
 # DST End: last Saturday of April 2014 (Sun 27 Apr 2014 03:00 UTC)
@@ -1352,7 +1276,7 @@ Rule	Chile	2012	max	-	Sep	Sun>=2	4:00u	1:00	S
 # (1996-09) says 1998-03-08.  Ignore these.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Santiago	-4:42:46 -	LMT	1890
-			-4:42:46 -	SMT	1910 	    # Santiago Mean Time
+			-4:42:46 -	SMT	1910        # Santiago Mean Time
 			-5:00	-	CLT	1916 Jul  1 # Chile Time
 			-4:42:46 -	SMT	1918 Sep  1 # Santiago Mean Time
 			-4:00	-	CLT	1919 Jul  1 # Chile Time
@@ -1361,16 +1285,16 @@ Zone America/Santiago	-4:42:46 -	LMT	1890
 			-4:00	Chile	CL%sT
 Zone Pacific/Easter	-7:17:44 -	LMT	1890
 			-7:17:28 -	EMT	1932 Sep    # Easter Mean Time
-			-7:00	Chile	EAS%sT	1982 Mar 13 21:00 # Easter I Time
+			-7:00	Chile	EAS%sT	1982 Mar 13 21:00 # Easter Time
 			-6:00	Chile	EAS%sT
 #
-# Sala y Gomez Island is like Pacific/Easter.
-# Other Chilean locations, including Juan Fernandez Is, San Ambrosio,
-# San Felix, and Antarctic bases, are like America/Santiago.
+# Salas y Gómez Island is uninhabited.
+# Other Chilean locations, including Juan Fernández Is, Desventuradas Is,
+# and Antarctic bases, are like America/Santiago.
 
 # Colombia
 
-# Milne gives 4:56:16.4 for Bogota time in 1899; round to nearest.  He writes,
+# Milne gives 4:56:16.4 for Bogotá time in 1899; round to nearest.  He writes,
 # "A variation of fifteen minutes in the public clocks of Bogota is not rare."
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -1378,37 +1302,37 @@ Rule	CO	1992	only	-	May	 3	0:00	1:00	S
 Rule	CO	1993	only	-	Apr	 4	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Bogota	-4:56:16 -	LMT	1884 Mar 13
-			-4:56:16 -	BMT	1914 Nov 23 # Bogota Mean Time
+			-4:56:16 -	BMT	1914 Nov 23 # Bogotá Mean Time
 			-5:00	CO	CO%sT	# Colombia Time
 # Malpelo, Providencia, San Andres
 # no information; probably like America/Bogota
 
-# Curacao
+# Curaçao
 
-# Milne gives 4:35:46.9 for Curacao mean time; round to nearest.
+# Milne gives 4:35:46.9 for Curaçao mean time; round to nearest.
 #
 # From Paul Eggert (2006-03-22):
 # Shanks & Pottenger say that The Bottom and Philipsburg have been at
 # -4:00 since standard time was introduced on 1912-03-02; and that
 # Kralendijk and Rincon used Kralendijk Mean Time (-4:33:08) from
 # 1912-02-02 to 1965-01-01.  The former is dubious, since S&P also say
-# Saba Island has been like Curacao.
+# Saba Island has been like Curaçao.
 # This all predates our 1970 cutoff, though.
 #
-# By July 2007 Curacao and St Maarten are planned to become
+# By July 2007 Curaçao and St Maarten are planned to become
 # associated states within the Netherlands, much like Aruba;
 # Bonaire, Saba and St Eustatius would become directly part of the
 # Netherlands as Kingdom Islands.  This won't affect their time zones
 # though, as far as we know.
 #
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Curacao	-4:35:47 -	LMT	1912 Feb 12	# Willemstad
+Zone	America/Curacao	-4:35:47 -	LMT	1912 Feb 12 # Willemstad
 			-4:30	-	ANT	1965 # Netherlands Antilles Time
 			-4:00	-	AST
 
 # From Arthur David Olson (2011-06-15):
 # use links for places with new iso3166 codes.
-# The name "Lower Prince's Quarter" is both longer than fourteen charaters
+# The name "Lower Prince's Quarter" is both longer than fourteen characters
 # and contains an apostrophe; use "Lower_Princes" below.
 
 Link	America/Curacao	America/Lower_Princes	# Sint Maarten
@@ -1416,7 +1340,7 @@ Link	America/Curacao	America/Kralendijk	# Caribbean Netherlands
 
 # Ecuador
 #
-# Milne says the Sentral and South American Telegraph Company used -5:24:15.
+# Milne says the Central and South American Telegraph Company used -5:24:15.
 #
 # From Paul Eggert (2007-03-04):
 # Apparently Ecuador had a failed experiment with DST in 1992.
@@ -1427,10 +1351,10 @@ Link	America/Curacao	America/Kralendijk	# Caribbean Netherlands
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Guayaquil	-5:19:20 -	LMT	1890
 			-5:14:00 -	QMT	1931 # Quito Mean Time
-			-5:00	-	ECT	     # Ecuador Time
+			-5:00	-	ECT	# Ecuador Time
 Zone Pacific/Galapagos	-5:58:24 -	LMT	1931 # Puerto Baquerizo Moreno
 			-5:00	-	ECT	1986
-			-6:00	-	GALT	     # Galapagos Time
+			-6:00	-	GALT	# Galápagos Time
 
 # Falklands
 
@@ -1439,7 +1363,7 @@ Zone Pacific/Galapagos	-5:58:24 -	LMT	1931 # Puerto Baquerizo Moreno
 # the IATA gives 1996-09-08.  Go with Shanks & Pottenger.
 
 # From Falkland Islands Government Office, London (2001-01-22)
-# via Jesper Norgaard:
+# via Jesper Nørgaard:
 # ... the clocks revert back to Local Mean Time at 2 am on Sunday 15
 # April 2001 and advance one hour to summer time at 2 am on Sunday 2
 # September.  It is anticipated that the clocks will revert back at 2
@@ -1488,9 +1412,7 @@ Zone Pacific/Galapagos	-5:58:24 -	LMT	1931 # Puerto Baquerizo Moreno
 # daylight saving time.
 #
 # One source:
-# 
 # http://www.falklandnews.com/public/story.cfm?get=5914&source=3
-# 
 #
 # We have gotten this confirmed by a clerk of the legislative assembly:
 # Normally the clocks revert to Local Mean Time (UTC/GMT -4 hours) on the
@@ -1531,10 +1453,10 @@ Rule	Falk	2001	2010	-	Apr	Sun>=15	2:00	0	-
 Rule	Falk	2001	2010	-	Sep	Sun>=1	2:00	1:00	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Atlantic/Stanley	-3:51:24 -	LMT	1890
-			-3:51:24 -	SMT	1912 Mar 12  # Stanley Mean Time
-			-4:00	Falk	FK%sT	1983 May     # Falkland Is Time
+			-3:51:24 -	SMT	1912 Mar 12 # Stanley Mean Time
+			-4:00	Falk	FK%sT	1983 May    # Falkland Is Time
 			-3:00	Falk	FK%sT	1985 Sep 15
-			-4:00	Falk	FK%sT	2010 Sep 5 02:00
+			-4:00	Falk	FK%sT	2010 Sep  5  2:00
 			-3:00	-	FKST
 
 # French Guiana
@@ -1545,7 +1467,7 @@ Zone America/Cayenne	-3:29:20 -	LMT	1911 Jul
 
 # Guyana
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	America/Guyana	-3:52:40 -	LMT	1915 Mar	# Georgetown
+Zone	America/Guyana	-3:52:40 -	LMT	1915 Mar    # Georgetown
 			-3:45	-	GBGT	1966 May 26 # Br Guiana Time
 			-3:45	-	GYT	1975 Jul 31 # Guyana Time
 			-3:00	-	GYT	1991
@@ -1555,8 +1477,8 @@ Zone	America/Guyana	-3:52:40 -	LMT	1915 Mar	# Georgetown
 # Paraguay
 #
 # From Paul Eggert (2006-03-22):
-# Shanks & Pottenger say that spring transitions are from 01:00 -> 02:00,
-# and autumn transitions are from 00:00 -> 23:00.  Go with pre-1999
+# Shanks & Pottenger say that spring transitions are 01:00 -> 02:00,
+# and autumn transitions are 00:00 -> 23:00.  Go with pre-1999
 # editions of Shanks, and with the IATA, who say transitions occur at 00:00.
 #
 # From Waldemar Villamayor-Venialbo (2013-09-20):
@@ -1582,9 +1504,8 @@ Rule	Para	1996	only	-	Mar	 1	0:00	0	-
 # (10-01).
 #
 # Translated by Gwillim Law (2001-02-27) from
-# 
-# Noticias, a daily paper in Asuncion, Paraguay (2000-10-01)
-# :
+# Noticias, a daily paper in Asunción, Paraguay (2000-10-01):
+# http://www.diarionoticias.com.py/011000/nacional/naciona1.htm
 # Starting at 0:00 today, the clock will be set forward 60 minutes, in
 # fulfillment of Decree No. 7,273 of the Executive Power....  The time change
 # system has been operating for several years.  Formerly there was a separate
@@ -1605,21 +1526,18 @@ Rule	Para	1998	2001	-	Mar	Sun>=1	0:00	0	-
 Rule	Para	2002	2004	-	Apr	Sun>=1	0:00	0	-
 Rule	Para	2002	2003	-	Sep	Sun>=1	0:00	1:00	S
 #
-# From Jesper Norgaard Welen (2005-01-02):
+# From Jesper Nørgaard Welen (2005-01-02):
 # There are several sources that claim that Paraguay made
 # a timezone rule change in autumn 2004.
 # From Steffen Thorsen (2005-01-05):
 # Decree 1,867 (2004-03-05)
-# From Carlos Raul Perasso via Jesper Norgaard Welen (2006-10-13)
-# 
+# From Carlos Raúl Perasso via Jesper Nørgaard Welen (2006-10-13)
+# http://www.presidencia.gov.py/decretos/D1867.pdf
 Rule	Para	2004	2009	-	Oct	Sun>=15	0:00	1:00	S
 Rule	Para	2005	2009	-	Mar	Sun>=8	0:00	0	-
-# From Carlos Raul Perasso (2010-02-18):
-# By decree number 3958 issued yesterday (
-# 
+# From Carlos Raúl Perasso (2010-02-18):
+# By decree number 3958 issued yesterday
 # http://www.presidencia.gov.py/v1/wp-content/uploads/2010/02/decreto3958.pdf
-# 
-# )
 # Paraguay changes its DST schedule, postponing the March rule to April and
 # modifying the October date. The decree reads:
 # ...
@@ -1635,25 +1553,25 @@ Rule	Para	2010	2012	-	Apr	Sun>=8	0:00	0	-
 # Paraguay will end DST on 2013-03-24 00:00....
 # http://www.ande.gov.py/interna.php?id=1075
 #
-# From Carlos Raul Perasso (2013-03-15):
+# From Carlos Raúl Perasso (2013-03-15):
 # The change in Paraguay is now final.  Decree number 10780
 # http://www.presidencia.gov.py/uploads/pdf/presidencia-3b86ff4b691c79d4f5927ca964922ec74772ce857c02ca054a52a37b49afc7fb.pdf
-# From Carlos Raul Perasso (2014-02-28):
+# From Carlos Raúl Perasso (2014-02-28):
 # Decree 1264 can be found at:
 # http://www.presidencia.gov.py/archivos/documentos/DECRETO1264_ey9r8zai.pdf
 Rule	Para	2013	max	-	Mar	Sun>=22	0:00	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Asuncion	-3:50:40 -	LMT	1890
-			-3:50:40 -	AMT	1931 Oct 10 # Asuncion Mean Time
-			-4:00	-	PYT	1972 Oct # Paraguay Time
+			-3:50:40 -	AMT	1931 Oct 10 # Asunción Mean Time
+			-4:00	-	PYT	1972 Oct    # Paraguay Time
 			-3:00	-	PYT	1974 Apr
 			-4:00	Para	PY%sT
 
 # Peru
 #
-# 
-# From Evelyn C. Leeper via Mark Brader (2003-10-26):
+# From Evelyn C. Leeper via Mark Brader (2003-10-26)
+# :
 # When we were in Peru in 1985-1986, they apparently switched over
 # sometime between December 29 and January 3 while we were on the Amazon.
 #
@@ -1679,7 +1597,7 @@ Zone	America/Lima	-5:08:12 -	LMT	1890
 
 # South Georgia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Atlantic/South_Georgia -2:26:08 -	LMT	1890		# Grytviken
+Zone Atlantic/South_Georgia -2:26:08 -	LMT	1890 # Grytviken
 			-2:00	-	GST	# South Georgia Time
 
 # South Sandwich Is
@@ -1689,9 +1607,9 @@ Zone Atlantic/South_Georgia -2:26:08 -	LMT	1890		# Grytviken
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Paramaribo	-3:40:40 -	LMT	1911
 			-3:40:52 -	PMT	1935     # Paramaribo Mean Time
-			-3:40:36 -	PMT	1945 Oct # The capital moved?
+			-3:40:36 -	PMT	1945 Oct    # The capital moved?
 			-3:30	-	NEGT	1975 Nov 20 # Dutch Guiana Time
-			-3:30	-	SRT	1984 Oct # Suriname Time
+			-3:30	-	SRT	1984 Oct    # Suriname Time
 			-3:00	-	SRT
 
 # Trinidad and Tobago
@@ -1706,7 +1624,7 @@ Link America/Port_of_Spain America/Grenada
 Link America/Port_of_Spain America/Guadeloupe
 Link America/Port_of_Spain America/Marigot	# St Martin (French part)
 Link America/Port_of_Spain America/Montserrat
-Link America/Port_of_Spain America/St_Barthelemy
+Link America/Port_of_Spain America/St_Barthelemy # St Barthélemy
 Link America/Port_of_Spain America/St_Kitts	# St Kitts & Nevis
 Link America/Port_of_Spain America/St_Lucia
 Link America/Port_of_Spain America/St_Thomas	# Virgin Islands (US)
@@ -1765,7 +1683,7 @@ Rule	Uruguay	1990	1991	-	Oct	Sun>=21	 0:00	1:00	S
 Rule	Uruguay	1992	only	-	Oct	18	 0:00	1:00	S
 Rule	Uruguay	1993	only	-	Feb	28	 0:00	0	-
 # From Eduardo Cota (2004-09-20):
-# The uruguayan government has decreed a change in the local time....
+# The Uruguayan government has decreed a change in the local time....
 # http://www.presidencia.gub.uy/decretos/2004091502.htm
 Rule	Uruguay	2004	only	-	Sep	19	 0:00	1:00	S
 # From Steffen Thorsen (2005-03-11):
@@ -1779,14 +1697,14 @@ Rule	Uruguay	2005	only	-	Mar	27	 2:00	0	-
 # 02:00 local time, official time in Uruguay will be at GMT -2.
 Rule	Uruguay	2005	only	-	Oct	 9	 2:00	1:00	S
 Rule	Uruguay	2006	only	-	Mar	12	 2:00	0	-
-# From Jesper Norgaard Welen (2006-09-06):
+# From Jesper Nørgaard Welen (2006-09-06):
 # http://www.presidencia.gub.uy/_web/decretos/2006/09/CM%20210_08%2006%202006_00001.PDF
 Rule	Uruguay	2006	max	-	Oct	Sun>=1	 2:00	1:00	S
 Rule	Uruguay	2007	max	-	Mar	Sun>=8	 2:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Montevideo	-3:44:44 -	LMT	1898 Jun 28
-			-3:44:44 -	MMT	1920 May  1	# Montevideo MT
-			-3:30	Uruguay	UY%sT	1942 Dec 14	# Uruguay Time
+			-3:44:44 -	MMT	1920 May  1 # Montevideo MT
+			-3:30	Uruguay	UY%sT	1942 Dec 14 # Uruguay Time
 			-3:00	Uruguay	UY%sT
 
 # Venezuela
@@ -1794,14 +1712,14 @@ Zone America/Montevideo	-3:44:44 -	LMT	1898 Jun 28
 # From John Stainforth (2007-11-28):
 # ... the change for Venezuela originally expected for 2007-12-31 has
 # been brought forward to 2007-12-09.  The official announcement was
-# published today in the "Gaceta Oficial de la Republica Bolivariana
-# de Venezuela, numero 38.819" (official document for all laws or
+# published today in the "Gaceta Oficial de la República Bolivariana
+# de Venezuela, número 38.819" (official document for all laws or
 # resolution publication)
 # http://www.globovision.com/news.php?nid=72208
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Caracas	-4:27:44 -	LMT	1890
 			-4:27:40 -	CMT	1912 Feb 12 # Caracas Mean Time?
-			-4:30	-	VET	1965	     # Venezuela Time
-			-4:00	-	VET	2007 Dec  9 03:00
+			-4:30	-	VET	1965        # Venezuela Time
+			-4:00	-	VET	2007 Dec  9  3:00
 			-4:30	-	VET
diff --git a/jdk/make/data/tzdata/systemv b/jdk/make/data/tzdata/systemv
index f909f9c76db..c7b9a888e88 100644
--- a/jdk/make/data/tzdata/systemv
+++ b/jdk/make/data/tzdata/systemv
@@ -21,7 +21,6 @@
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# 
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
diff --git a/jdk/make/data/tzdata/zone.tab b/jdk/make/data/tzdata/zone.tab
index 7cec627fd95..45351ca8486 100644
--- a/jdk/make/data/tzdata/zone.tab
+++ b/jdk/make/data/tzdata/zone.tab
@@ -21,39 +21,27 @@
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 #
-# TZ zone descriptions
+# tz zone descriptions (deprecated version)
 #
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 #
-# From Paul Eggert (2013-08-14):
+# From Paul Eggert (2014-07-31):
+# This file is intended as a backward-compatibility aid for older programs.
+# New programs should use zone1970.tab.  This file is like zone1970.tab (see
+# zone1970.tab's comments), but with the following additional restrictions:
 #
-# This file contains a table where each row stands for an area that is
-# the intersection of a region identified by a country code and of a
-# zone where civil clocks have agreed since 1970.  The columns of the
-# table are as follows:
+# 1.  This file contains only ASCII characters.
+# 2.  The first data column contains exactly one country code.
 #
-# 1.  ISO 3166 2-character country code.  See the file 'iso3166.tab'.
-# 2.  Latitude and longitude of the area's principal location
-#     in ISO 6709 sign-degrees-minutes-seconds format,
-#     either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
-#     first latitude (+ is north), then longitude (+ is east).
-# 3.  Zone name used in value of TZ environment variable.
-#     Please see the 'Theory' file for how zone names are chosen.
-#     If multiple zones overlap a country, each has a row in the
-#     table, with column 1 being duplicated.
-# 4.  Comments; present if and only if the country has multiple rows.
-#
-# Columns are separated by a single tab.
-# The table is sorted first by country, then an order within the country that
-# (1) makes some geographical sense, and
-# (2) puts the most populous areas first, where that does not contradict (1).
-#
-# Lines beginning with '#' are comments.
+# Because of (2), each row stands for an area that is the intersection
+# of a region identified by a country code and of a zone where civil
+# clocks have agreed since 1970; this is a narrower definition than
+# that of zone1970.tab.
 #
 # This table is intended as an aid for users, to help them select time
-# zone data appropriate for their practical needs.  It is not intended
-# to take or endorse any position on legal or territorial claims.
+# zone data entries appropriate for their practical needs.  It is not
+# intended to take or endorse any position on legal or territorial claims.
 #
 #country-
 #code	coordinates	TZ			comments
@@ -72,7 +60,7 @@ AQ	-6736+06253	Antarctica/Mawson	Mawson Station, Holme Bay
 AQ	-6835+07758	Antarctica/Davis	Davis Station, Vestfold Hills
 AQ	-6617+11031	Antarctica/Casey	Casey Station, Bailey Peninsula
 AQ	-7824+10654	Antarctica/Vostok	Vostok Station, Lake Vostok
-AQ	-6640+14001	Antarctica/DumontDUrville	Dumont-d'Urville Station, Terre Adelie
+AQ	-6640+14001	Antarctica/DumontDUrville	Dumont-d'Urville Station, Adelie Land
 AQ	-690022+0393524	Antarctica/Syowa	Syowa Station, E Ongul I
 AQ	-720041+0023206	Antarctica/Troll	Troll Station, Queen Maud Land
 AR	-3436-05827	America/Argentina/Buenos_Aires	Buenos Aires (BA, CF)
@@ -151,7 +139,7 @@ CA	+4901-08816	America/Nipigon	Eastern Time - Ontario & Quebec - places that did
 CA	+4823-08915	America/Thunder_Bay	Eastern Time - Thunder Bay, Ontario
 CA	+6344-06828	America/Iqaluit	Eastern Time - east Nunavut - most locations
 CA	+6608-06544	America/Pangnirtung	Eastern Time - Pangnirtung, Nunavut
-CA	+744144-0944945	America/Resolute	Central Standard Time - Resolute, Nunavut
+CA	+744144-0944945	America/Resolute	Central Time - Resolute, Nunavut
 CA	+484531-0913718	America/Atikokan	Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
 CA	+624900-0920459	America/Rankin_Inlet	Central Time - central Nunavut
 CA	+4953-09709	America/Winnipeg	Central Time - Manitoba & west Ontario
@@ -176,13 +164,10 @@ CH	+4723+00832	Europe/Zurich
 CI	+0519-00402	Africa/Abidjan
 CK	-2114-15946	Pacific/Rarotonga
 CL	-3327-07040	America/Santiago	most locations
-CL	-2709-10926	Pacific/Easter	Easter Island & Sala y Gomez
+CL	-2709-10926	Pacific/Easter	Easter Island
 CM	+0403+00942	Africa/Douala
-CN	+3114+12128	Asia/Shanghai	east China - Beijing, Guangdong, Shanghai, etc.
-CN	+4545+12641	Asia/Harbin	Heilongjiang (except Mohe), Jilin
-CN	+2934+10635	Asia/Chongqing	central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.
-CN	+4348+08735	Asia/Urumqi	most of Tibet & Xinjiang
-CN	+3929+07559	Asia/Kashgar	west Tibet & Xinjiang
+CN	+3114+12128	Asia/Shanghai	Beijing Time
+CN	+4348+08735	Asia/Urumqi	Xinjiang Time
 CO	+0436-07405	America/Bogota
 CR	+0956-08405	America/Costa_Rica
 CU	+2308-08222	America/Havana
@@ -364,24 +349,26 @@ RE	-2052+05528	Indian/Reunion
 RO	+4426+02606	Europe/Bucharest
 RS	+4450+02030	Europe/Belgrade
 RU	+5443+02030	Europe/Kaliningrad	Moscow-01 - Kaliningrad
-RU	+5545+03735	Europe/Moscow	Moscow+00 - west Russia
-RU	+4844+04425	Europe/Volgograd	Moscow+00 - Caspian Sea
-RU	+5312+05009	Europe/Samara	Moscow+00 - Samara, Udmurtia
+RU	+554521+0373704	Europe/Moscow	Moscow+00 - west Russia
 RU	+4457+03406	Europe/Simferopol	Moscow+00 - Crimea
+RU	+4844+04425	Europe/Volgograd	Moscow+00 - Caspian Sea
+RU	+5312+05009	Europe/Samara	Moscow+00 (Moscow+01 after 2014-10-26) - Samara, Udmurtia
 RU	+5651+06036	Asia/Yekaterinburg	Moscow+02 - Urals
 RU	+5500+07324	Asia/Omsk	Moscow+03 - west Siberia
 RU	+5502+08255	Asia/Novosibirsk	Moscow+03 - Novosibirsk
-RU	+5345+08707	Asia/Novokuznetsk	Moscow+03 - Novokuznetsk
+RU	+5345+08707	Asia/Novokuznetsk	Moscow+03 (Moscow+04 after 2014-10-26) - Kemerovo
 RU	+5601+09250	Asia/Krasnoyarsk	Moscow+04 - Yenisei River
 RU	+5216+10420	Asia/Irkutsk	Moscow+05 - Lake Baikal
+RU	+5203+11328	Asia/Chita	Moscow+06 (Moscow+05 after 2014-10-26) - Zabaykalsky
 RU	+6200+12940	Asia/Yakutsk	Moscow+06 - Lena River
 RU	+623923+1353314	Asia/Khandyga	Moscow+06 - Tomponsky, Ust-Maysky
 RU	+4310+13156	Asia/Vladivostok	Moscow+07 - Amur River
 RU	+4658+14242	Asia/Sakhalin	Moscow+07 - Sakhalin Island
 RU	+643337+1431336	Asia/Ust-Nera	Moscow+07 - Oymyakonsky
-RU	+5934+15048	Asia/Magadan	Moscow+08 - Magadan
-RU	+5301+15839	Asia/Kamchatka	Moscow+08 - Kamchatka
-RU	+6445+17729	Asia/Anadyr	Moscow+08 - Bering Sea
+RU	+5934+15048	Asia/Magadan	Moscow+08 (Moscow+07 after 2014-10-26) - Magadan
+RU	+6728+15343	Asia/Srednekolymsk	Moscow+08 - E Sakha, N Kuril Is
+RU	+5301+15839	Asia/Kamchatka	Moscow+08 (Moscow+09 after 2014-10-26) - Kamchatka
+RU	+6445+17729	Asia/Anadyr	Moscow+08 (Moscow+09 after 2014-10-26) - Bering Sea
 RW	-0157+03004	Africa/Kigali
 SA	+2438+04643	Asia/Riyadh
 SB	-0932+16012	Pacific/Guadalcanal
@@ -448,13 +435,13 @@ US	+394421-1045903	America/Denver	Mountain Time
 US	+433649-1161209	America/Boise	Mountain Time - south Idaho & east Oregon
 US	+332654-1120424	America/Phoenix	Mountain Standard Time - Arizona (except Navajo)
 US	+340308-1181434	America/Los_Angeles	Pacific Time
+US	+550737-1313435	America/Metlakatla	Pacific Standard Time - Annette Island, Alaska
 US	+611305-1495401	America/Anchorage	Alaska Time
 US	+581807-1342511	America/Juneau	Alaska Time - Alaska panhandle
 US	+571035-1351807	America/Sitka	Alaska Time - southeast Alaska panhandle
 US	+593249-1394338	America/Yakutat	Alaska Time - Alaska panhandle neck
 US	+643004-1652423	America/Nome	Alaska Time - west Alaska
 US	+515248-1763929	America/Adak	Aleutian Islands
-US	+550737-1313435	America/Metlakatla	Metlakatla Time - Annette Island
 US	+211825-1575130	Pacific/Honolulu	Hawaii
 UY	-3453-05611	America/Montevideo
 UZ	+3940+06648	Asia/Samarkand	west Uzbekistan
diff --git a/jdk/make/gensrc/GensrcLocaleDataMetaInfo.gmk b/jdk/make/gensrc/GensrcLocaleDataMetaInfo.gmk
index f4a3575218e..b251026c2cb 100644
--- a/jdk/make/gensrc/GensrcLocaleDataMetaInfo.gmk
+++ b/jdk/make/gensrc/GensrcLocaleDataMetaInfo.gmk
@@ -58,7 +58,14 @@ EN_LOCALES := en%
 # Locales that don't have any resource files should be included here.
 ALL_NON_EN_LOCALES := ja-JP-JP nb-NO nn-NO th-TH-TH
 
-SED_ARGS := -e 's|$(HASH)warn This file is preprocessed before being compiled|// -- This file was mechanically generated: Do not edit! -- //|g'
+SED_ENARGS := -e 's|$(HASH)warn This file is preprocessed before being compiled|// -- This file was mechanically generated: Do not edit! -- //|g'
+SED_NONENARGS := $(SED_ENARGS)
+
+# Fill in the languages and package names
+SED_ENARGS += -e 's/$(HASH)Lang$(HASH)/En/' \
+    -e 's/$(HASH)Package$(HASH)/sun.util.locale.provider/'
+SED_NONENARGS += -e 's/$(HASH)Lang$(HASH)/NonEn/' \
+    -e 's/$(HASH)Package$(HASH)/sun.util.resources.provider/'
 
 # This macro creates a sed expression that substitues for example:
 # #FormatData_ENLocales# with: en% locales.
@@ -78,8 +85,8 @@ define CaptureLocale
   ALL_NON_EN_LOCALES += $$($1_NON_EN_LOCALES)
 
   # Don't sed in a space if there are no locales.
-  SED_ARGS += -e 's/$$(HASH)$1_ENLocales$$(HASH)/$$(if $$($1_EN_LOCALES),$$(SPACE)$$($1_EN_LOCALES),)/g'
-  SED_ARGS += -e 's/$$(HASH)$1_NonENLocales$$(HASH)/$$(if $$($1_NON_EN_LOCALES),$$(SPACE)$$($1_NON_EN_LOCALES),)/g'
+  SED_ENARGS += -e 's/$$(HASH)$1_Locales$$(HASH)/$$(if $$($1_EN_LOCALES),$$(SPACE)$$($1_EN_LOCALES),)/g'
+  SED_NONENARGS += -e 's/$$(HASH)$1_Locales$$(HASH)/$$(if $$($1_NON_EN_LOCALES),$$(SPACE)$$($1_NON_EN_LOCALES),)/g'
 endef
 
 #sun.text.resources.FormatData
@@ -106,17 +113,25 @@ $(eval $(call CaptureLocale,CurrencyNames))
 #sun.util.resources.CalendarData
 $(eval $(call CaptureLocale,CalendarData))
 
-SED_ARGS += -e 's/$(HASH)AvailableLocales_ENLocales$(HASH)/$(sort $(ALL_EN_LOCALES))/g'
-SED_ARGS += -e 's/$(HASH)AvailableLocales_NonENLocales$(HASH)/$(sort $(ALL_NON_EN_LOCALES))/g'
+SED_ENARGS += -e 's/$(HASH)AvailableLocales_Locales$(HASH)/$(sort $(ALL_EN_LOCALES))/g'
+SED_NONENARGS += -e 's/$(HASH)AvailableLocales_Locales$(HASH)/$(sort $(ALL_NON_EN_LOCALES))/g'
 
-$(JDK_OUTPUTDIR)/gensrc/java.base/sun/util/locale/provider/LocaleDataMetaInfo.java: \
+$(JDK_OUTPUTDIR)/gensrc/java.base/sun/util/locale/provider/EnLocaleDataMetaInfo.java: \
     $(JDK_TOPDIR)/src/java.base/share/classes/sun/util/locale/provider/LocaleDataMetaInfo-XLocales.java.template
 	$(MKDIR) -p $(@D)
-	$(ECHO) Creating sun/util/LocaleDataMetaInfo.java from $(words $(LOCALE_RESOURCES)) found resources.
+	$(ECHO) Creating sun/util/locale/provider/EnLocaleDataMetaInfo.java from $(words $(LOCALE_RESOURCES)) found resources.
 	$(PRINTF) "PREV_LOCALE_RESOURCES:=$(LOCALE_RESOURCES)" > $(JDK_OUTPUTDIR)/gensrc/_the.locale_resources
-	$(SED) $(SED_ARGS) $< > $@
+	$(SED) $(SED_ENARGS) $< > $@
 
-GENSRC_LOCALEDATAMETAINFO := $(JDK_OUTPUTDIR)/gensrc/java.base/sun/util/locale/provider/LocaleDataMetaInfo.java
+$(JDK_OUTPUTDIR)/gensrc/jdk.localedata/sun/util/resources/provider/NonEnLocaleDataMetaInfo.java: \
+    $(JDK_TOPDIR)/src/java.base/share/classes/sun/util/locale/provider/LocaleDataMetaInfo-XLocales.java.template
+	$(MKDIR) -p $(@D)
+	$(ECHO) Creating sun/util/resources/provider/NonEnLocaleDataMetaInfo.java from $(words $(LOCALE_RESOURCES)) found resources.
+	$(PRINTF) "PREV_LOCALE_RESOURCES:=$(LOCALE_RESOURCES)" > $(JDK_OUTPUTDIR)/gensrc/_the.locale_resources
+	$(SED) $(SED_NONENARGS) $< > $@
+
+GENSRC_LOCALEDATAMETAINFO := $(JDK_OUTPUTDIR)/gensrc/java.base/sun/util/locale/provider/EnLocaleDataMetaInfo.java \
+    $(JDK_OUTPUTDIR)/gensrc/jdk.localedata/sun/util/resources/provider/NonEnLocaleDataMetaInfo.java
 
 ################################################################################
 
diff --git a/jdk/make/src/classes/build/tools/cldrconverter/CLDRConverter.java b/jdk/make/src/classes/build/tools/cldrconverter/CLDRConverter.java
index 33ea34ffa2a..b1f559e7f6f 100644
--- a/jdk/make/src/classes/build/tools/cldrconverter/CLDRConverter.java
+++ b/jdk/make/src/classes/build/tools/cldrconverter/CLDRConverter.java
@@ -431,7 +431,7 @@ public class CLDRConverter {
             allLocales.addAll(metaInfo.get("LocaleNames"));
             allLocales.addAll(metaInfo.get("CalendarData"));
             allLocales.addAll(metaInfo.get("FormatData"));
-            metaInfo.put("All", allLocales);
+            metaInfo.put("AvailableLocales", allLocales);
         }
 
         bundleGenerator.generateMetaInfo(metaInfo);
diff --git a/jdk/make/src/classes/build/tools/cldrconverter/ResourceBundleGenerator.java b/jdk/make/src/classes/build/tools/cldrconverter/ResourceBundleGenerator.java
index b905f75290a..27a7b1fbd20 100644
--- a/jdk/make/src/classes/build/tools/cldrconverter/ResourceBundleGenerator.java
+++ b/jdk/make/src/classes/build/tools/cldrconverter/ResourceBundleGenerator.java
@@ -159,8 +159,10 @@ class ResourceBundleGenerator implements BundleGenerator {
             out.println(CopyrightHeaders.getOpenJDKCopyright());
 
             out.println("package sun.util.cldr;\n\n"
-                      + "import java.util.ListResourceBundle;\n");
-            out.printf("public class %s extends ListResourceBundle {\n", METAINFO_CLASS);
+                      + "import java.util.ListResourceBundle;\n"
+                      + "import sun.util.locale.provider.LocaleProviderAdapter;\n"
+                      + "import sun.util.locale.provider.LocaleDataMetaInfo;\n");
+            out.printf("public class %s extends ListResourceBundle implements LocaleDataMetaInfo {\n", METAINFO_CLASS);
             out.println("    @Override\n" +
                         "    protected final Object[][] getContents() {\n" +
                         "        final Object[][] data = new Object[][] {");
@@ -168,7 +170,15 @@ class ResourceBundleGenerator implements BundleGenerator {
                 out.printf("            { \"%s\",\n", key);
                 out.printf("              \"%s\" },\n", toLocaleList(metaInfo.get(key)));
             }
-            out.println("        };\n        return data;\n    }\n}");
+            out.println("        };\n        return data;\n    }\n\n");
+
+            out.println("    public LocaleProviderAdapter.Type getType() {\n" +
+                        "        return LocaleProviderAdapter.Type.CLDR;\n" +
+                        "    }\n\n");
+
+            out.println("    public String availableLanguageTags(String category) {\n" +
+                        "        return getString(category);\n" +
+                        "    };\n}");
         }
     }
 
diff --git a/jdk/src/java.base/share/classes/java/lang/String.java b/jdk/src/java.base/share/classes/java/lang/String.java
index ce673fba2d4..00f57044624 100644
--- a/jdk/src/java.base/share/classes/java/lang/String.java
+++ b/jdk/src/java.base/share/classes/java/lang/String.java
@@ -2119,7 +2119,7 @@ public final class String
      * @since 1.5
      */
     public boolean contains(CharSequence s) {
-        return indexOf(s.toString()) > -1;
+        return indexOf(s.toString()) >= 0;
     }
 
     /**
diff --git a/jdk/src/java.base/share/classes/java/util/Arrays.java b/jdk/src/java.base/share/classes/java/util/Arrays.java
index b7b75794ce4..628ce831ab6 100644
--- a/jdk/src/java.base/share/classes/java/util/Arrays.java
+++ b/jdk/src/java.base/share/classes/java/util/Arrays.java
@@ -3865,7 +3865,7 @@ public class Arrays {
 
         @Override
         public boolean contains(Object o) {
-            return indexOf(o) != -1;
+            return indexOf(o) >= 0;
         }
 
         @Override
diff --git a/jdk/src/java.base/share/classes/java/util/LinkedList.java b/jdk/src/java.base/share/classes/java/util/LinkedList.java
index 18a8b21ba80..343ded84d07 100644
--- a/jdk/src/java.base/share/classes/java/util/LinkedList.java
+++ b/jdk/src/java.base/share/classes/java/util/LinkedList.java
@@ -314,7 +314,7 @@ public class LinkedList
      * @return {@code true} if this list contains the specified element
      */
     public boolean contains(Object o) {
-        return indexOf(o) != -1;
+        return indexOf(o) >= 0;
     }
 
     /**
diff --git a/jdk/src/java.base/share/classes/java/util/PriorityQueue.java b/jdk/src/java.base/share/classes/java/util/PriorityQueue.java
index b0fb9816be0..cc1af05aa36 100644
--- a/jdk/src/java.base/share/classes/java/util/PriorityQueue.java
+++ b/jdk/src/java.base/share/classes/java/util/PriorityQueue.java
@@ -406,7 +406,7 @@ public class PriorityQueue extends AbstractQueue
      * @return {@code true} if this queue contains the specified element
      */
     public boolean contains(Object o) {
-        return indexOf(o) != -1;
+        return indexOf(o) >= 0;
     }
 
     /**
diff --git a/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java b/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java
index 9f5e14914d0..c3ebf04d343 100644
--- a/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java
@@ -49,6 +49,7 @@ import java.util.concurrent.RejectedExecutionException;
 import java.util.concurrent.RunnableFuture;
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
 import java.security.AccessControlContext;
 import java.security.ProtectionDomain;
 import java.security.Permissions;
@@ -80,9 +81,9 @@ import java.security.Permissions;
  *
  * 

For applications that require separate or custom pools, a {@code * ForkJoinPool} may be constructed with a given target parallelism - * level; by default, equal to the number of available processors. The - * pool attempts to maintain enough active (or available) threads by - * dynamically adding, suspending, or resuming internal worker + * level; by default, equal to the number of available processors. + * The pool attempts to maintain enough active (or available) threads + * by dynamically adding, suspending, or resuming internal worker * threads, even if some tasks are stalled waiting to join others. * However, no such adjustments are guaranteed in the face of blocked * I/O or other unmanaged synchronization. The nested {@link @@ -142,6 +143,9 @@ import java.security.Permissions; * - the class name of a {@link ForkJoinWorkerThreadFactory} *

  • {@code java.util.concurrent.ForkJoinPool.common.exceptionHandler} * - the class name of a {@link UncaughtExceptionHandler} + *
  • {@code java.util.concurrent.ForkJoinPool.common.maximumSpares} + * - the maximum number of allowed extra threads to maintain target + * parallelism (default 256). * * If a {@link SecurityManager} is present and no factory is * specified, then the default pool uses a factory supplying @@ -178,7 +182,14 @@ public class ForkJoinPool extends AbstractExecutorService { * that may be stolen by other workers. Preference rules give * first priority to processing tasks from their own queues (LIFO * or FIFO, depending on mode), then to randomized FIFO steals of - * tasks in other queues. + * tasks in other queues. This framework began as vehicle for + * supporting tree-structured parallelism using work-stealing. + * Over time, its scalability advantages led to extensions and + * changes to better support more diverse usage contexts. Because + * most internal methods and nested classes are interrelated, + * their main rationale and descriptions are presented here; + * individual methods and nested classes contain only brief + * comments about details. * * WorkQueues * ========== @@ -198,201 +209,318 @@ public class ForkJoinPool extends AbstractExecutorService { * (http://research.sun.com/scalable/pubs/index.html) and * "Idempotent work stealing" by Michael, Saraswat, and Vechev, * PPoPP 2009 (http://portal.acm.org/citation.cfm?id=1504186). - * See also "Correct and Efficient Work-Stealing for Weak Memory - * Models" by Le, Pop, Cohen, and Nardelli, PPoPP 2013 - * (http://www.di.ens.fr/~zappa/readings/ppopp13.pdf) for an - * analysis of memory ordering (atomic, volatile etc) issues. The - * main differences ultimately stem from GC requirements that we - * null out taken slots as soon as we can, to maintain as small a - * footprint as possible even in programs generating huge numbers - * of tasks. To accomplish this, we shift the CAS arbitrating pop - * vs poll (steal) from being on the indices ("base" and "top") to - * the slots themselves. So, both a successful pop and poll - * mainly entail a CAS of a slot from non-null to null. Because - * we rely on CASes of references, we do not need tag bits on base - * or top. They are simple ints as used in any circular + * The main differences ultimately stem from GC requirements that + * we null out taken slots as soon as we can, to maintain as small + * a footprint as possible even in programs generating huge + * numbers of tasks. To accomplish this, we shift the CAS + * arbitrating pop vs poll (steal) from being on the indices + * ("base" and "top") to the slots themselves. + * + * Adding tasks then takes the form of a classic array push(task): + * q.array[q.top] = task; ++q.top; + * + * (The actual code needs to null-check and size-check the array, + * properly fence the accesses, and possibly signal waiting + * workers to start scanning -- see below.) Both a successful pop + * and poll mainly entail a CAS of a slot from non-null to null. + * + * The pop operation (always performed by owner) is: + * if ((base != top) and + * (the task at top slot is not null) and + * (CAS slot to null)) + * decrement top and return task; + * + * And the poll operation (usually by a stealer) is + * if ((base != top) and + * (the task at base slot is not null) and + * (base has not changed) and + * (CAS slot to null)) + * increment base and return task; + * + * Because we rely on CASes of references, we do not need tag bits + * on base or top. They are simple ints as used in any circular * array-based queue (see for example ArrayDeque). Updates to the - * indices must still be ordered in a way that guarantees that top - * == base means the queue is empty, but otherwise may err on the - * side of possibly making the queue appear nonempty when a push, - * pop, or poll have not fully committed. Note that this means - * that the poll operation, considered individually, is not - * wait-free. One thief cannot successfully continue until another - * in-progress one (or, if previously empty, a push) completes. - * However, in the aggregate, we ensure at least probabilistic + * indices guarantee that top == base means the queue is empty, + * but otherwise may err on the side of possibly making the queue + * appear nonempty when a push, pop, or poll have not fully + * committed. (Method isEmpty() checks the case of a partially + * completed removal of the last element.) Because of this, the + * poll operation, considered individually, is not wait-free. One + * thief cannot successfully continue until another in-progress + * one (or, if previously empty, a push) completes. However, in + * the aggregate, we ensure at least probabilistic * non-blockingness. If an attempted steal fails, a thief always * chooses a different random victim target to try next. So, in * order for one thief to progress, it suffices for any * in-progress poll or new push on any empty queue to * complete. (This is why we normally use method pollAt and its * variants that try once at the apparent base index, else - * consider alternative actions, rather than method poll.) + * consider alternative actions, rather than method poll, which + * retries.) * - * This approach also enables support of a user mode in which local - * task processing is in FIFO, not LIFO order, simply by using - * poll rather than pop. This can be useful in message-passing - * frameworks in which tasks are never joined. However neither - * mode considers affinities, loads, cache localities, etc, so - * rarely provide the best possible performance on a given - * machine, but portably provide good throughput by averaging over - * these factors. (Further, even if we did try to use such - * information, we do not usually have a basis for exploiting it. - * For example, some sets of tasks profit from cache affinities, - * but others are harmed by cache pollution effects.) + * This approach also enables support of a user mode in which + * local task processing is in FIFO, not LIFO order, simply by + * using poll rather than pop. This can be useful in + * message-passing frameworks in which tasks are never joined. + * However neither mode considers affinities, loads, cache + * localities, etc, so rarely provide the best possible + * performance on a given machine, but portably provide good + * throughput by averaging over these factors. Further, even if + * we did try to use such information, we do not usually have a + * basis for exploiting it. For example, some sets of tasks + * profit from cache affinities, but others are harmed by cache + * pollution effects. Additionally, even though it requires + * scanning, long-term throughput is often best using random + * selection rather than directed selection policies, so cheap + * randomization of sufficient quality is used whenever + * applicable. Various Marsaglia XorShifts (some with different + * shift constants) are inlined at use points. * * WorkQueues are also used in a similar way for tasks submitted * to the pool. We cannot mix these tasks in the same queues used - * for work-stealing (this would contaminate lifo/fifo - * processing). Instead, we randomly associate submission queues + * by workers. Instead, we randomly associate submission queues * with submitting threads, using a form of hashing. The * ThreadLocalRandom probe value serves as a hash code for * choosing existing queues, and may be randomly repositioned upon * contention with other submitters. In essence, submitters act * like workers except that they are restricted to executing local * tasks that they submitted (or in the case of CountedCompleters, - * others with the same root task). However, because most - * shared/external queue operations are more expensive than - * internal, and because, at steady state, external submitters - * will compete for CPU with workers, ForkJoinTask.join and - * related methods disable them from repeatedly helping to process - * tasks if all workers are active. Insertion of tasks in shared + * others with the same root task). Insertion of tasks in shared * mode requires a lock (mainly to protect in the case of - * resizing) but we use only a simple spinlock (using bits in - * field qlock), because submitters encountering a busy queue move - * on to try or create other queues -- they block only when - * creating and registering new queues. + * resizing) but we use only a simple spinlock (using field + * qlock), because submitters encountering a busy queue move on to + * try or create other queues -- they block only when creating and + * registering new queues. Additionally, "qlock" saturates to an + * unlockable value (-1) at shutdown. Unlocking still can be and + * is performed by cheaper ordered writes of "qlock" in successful + * cases, but uses CAS in unsuccessful cases. * * Management * ========== * * The main throughput advantages of work-stealing stem from * decentralized control -- workers mostly take tasks from - * themselves or each other. We cannot negate this in the - * implementation of other management responsibilities. The main - * tactic for avoiding bottlenecks is packing nearly all - * essentially atomic control state into two volatile variables - * that are by far most often read (not written) as status and - * consistency checks. + * themselves or each other, at rates that can exceed a billion + * per second. The pool itself creates, activates (enables + * scanning for and running tasks), deactivates, blocks, and + * terminates threads, all with minimal central information. + * There are only a few properties that we can globally track or + * maintain, so we pack them into a small number of variables, + * often maintaining atomicity without blocking or locking. + * Nearly all essentially atomic control state is held in two + * volatile variables that are by far most often read (not + * written) as status and consistency checks. (Also, field + * "config" holds unchanging configuration state.) * - * Field "ctl" contains 64 bits holding all the information needed - * to atomically decide to add, inactivate, enqueue (on an event + * Field "ctl" contains 64 bits holding information needed to + * atomically decide to add, inactivate, enqueue (on an event * queue), dequeue, and/or re-activate workers. To enable this * packing, we restrict maximum parallelism to (1<<15)-1 (which is * far in excess of normal operating range) to allow ids, counts, * and their negations (used for thresholding) to fit into 16bit - * fields. + * subfields. * - * Field "plock" is a form of sequence lock with a saturating - * shutdown bit (similarly for per-queue "qlocks"), mainly - * protecting updates to the workQueues array, as well as to - * enable shutdown. When used as a lock, it is normally only very - * briefly held, so is nearly always available after at most a - * brief spin, but we use a monitor-based backup strategy to - * block when needed. + * Field "runState" holds lockable state bits (STARTED, STOP, etc) + * also protecting updates to the workQueues array. When used as + * a lock, it is normally held only for a few instructions (the + * only exceptions are one-time array initialization and uncommon + * resizing), so is nearly always available after at most a brief + * spin. But to be extra-cautious, after spinning, method + * awaitRunStateLock (called only if an initial CAS fails), uses a + * wait/notify mechanics on a builtin monitor to block when + * (rarely) needed. This would be a terrible idea for a highly + * contended lock, but most pools run without the lock ever + * contending after the spin limit, so this works fine as a more + * conservative alternative. Because we don't otherwise have an + * internal Object to use as a monitor, the "stealCounter" (an + * AtomicLong) is used when available (it too must be lazily + * initialized; see externalSubmit). + * + * Usages of "runState" vs "ctl" interact in only one case: + * deciding to add a worker thread (see tryAddWorker), in which + * case the ctl CAS is performed while the lock is held. * * Recording WorkQueues. WorkQueues are recorded in the - * "workQueues" array that is created upon first use and expanded - * if necessary. Updates to the array while recording new workers - * and unrecording terminated ones are protected from each other - * by a lock but the array is otherwise concurrently readable, and - * accessed directly. To simplify index-based operations, the - * array size is always a power of two, and all readers must - * tolerate null slots. Worker queues are at odd indices. Shared - * (submission) queues are at even indices, up to a maximum of 64 - * slots, to limit growth even if array needs to expand to add - * more workers. Grouping them together in this way simplifies and - * speeds up task scanning. + * "workQueues" array. The array is created upon first use (see + * externalSubmit) and expanded if necessary. Updates to the + * array while recording new workers and unrecording terminated + * ones are protected from each other by the runState lock, but + * the array is otherwise concurrently readable, and accessed + * directly. We also ensure that reads of the array reference + * itself never become too stale. To simplify index-based + * operations, the array size is always a power of two, and all + * readers must tolerate null slots. Worker queues are at odd + * indices. Shared (submission) queues are at even indices, up to + * a maximum of 64 slots, to limit growth even if array needs to + * expand to add more workers. Grouping them together in this way + * simplifies and speeds up task scanning. * * All worker thread creation is on-demand, triggered by task * submissions, replacement of terminated workers, and/or * compensation for blocked workers. However, all other support * code is set up to work with other policies. To ensure that we - * do not hold on to worker references that would prevent GC, ALL + * do not hold on to worker references that would prevent GC, All * accesses to workQueues are via indices into the workQueues * array (which is one source of some of the messy code * constructions here). In essence, the workQueues array serves as - * a weak reference mechanism. Thus for example the wait queue - * field of ctl stores indices, not references. Access to the - * workQueues in associated methods (for example signalWork) must - * both index-check and null-check the IDs. All such accesses - * ignore bad IDs by returning out early from what they are doing, - * since this can only be associated with termination, in which - * case it is OK to give up. All uses of the workQueues array - * also check that it is non-null (even if previously - * non-null). This allows nulling during termination, which is - * currently not necessary, but remains an option for - * resource-revocation-based shutdown schemes. It also helps - * reduce JIT issuance of uncommon-trap code, which tends to - * unnecessarily complicate control flow in some methods. + * a weak reference mechanism. Thus for example the stack top + * subfield of ctl stores indices, not references. * - * Event Queuing. Unlike HPC work-stealing frameworks, we cannot - * let workers spin indefinitely scanning for tasks when none can - * be found immediately, and we cannot start/resume workers unless - * there appear to be tasks available. On the other hand, we must - * quickly prod them into action when new tasks are submitted or - * generated. In many usages, ramp-up time to activate workers is - * the main limiting factor in overall performance (this is - * compounded at program start-up by JIT compilation and - * allocation). So we try to streamline this as much as possible. - * We park/unpark workers after placing in an event wait queue - * when they cannot find work. This "queue" is actually a simple - * Treiber stack, headed by the "id" field of ctl, plus a 15bit - * counter value (that reflects the number of times a worker has - * been inactivated) to avoid ABA effects (we need only as many - * version numbers as worker threads). Successors are held in - * field WorkQueue.nextWait. Queuing deals with several intrinsic - * races, mainly that a task-producing thread can miss seeing (and - * signalling) another thread that gave up looking for work but - * has not yet entered the wait queue. We solve this by requiring - * a full sweep of all workers (via repeated calls to method - * scan()) both before and after a newly waiting worker is added - * to the wait queue. Because enqueued workers may actually be - * rescanning rather than waiting, we set and clear the "parker" + * Queuing Idle Workers. Unlike HPC work-stealing frameworks, we + * cannot let workers spin indefinitely scanning for tasks when + * none can be found immediately, and we cannot start/resume + * workers unless there appear to be tasks available. On the + * other hand, we must quickly prod them into action when new + * tasks are submitted or generated. In many usages, ramp-up time + * to activate workers is the main limiting factor in overall + * performance, which is compounded at program start-up by JIT + * compilation and allocation. So we streamline this as much as + * possible. + * + * The "ctl" field atomically maintains active and total worker + * counts as well as a queue to place waiting threads so they can + * be located for signalling. Active counts also play the role of + * quiescence indicators, so are decremented when workers believe + * that there are no more tasks to execute. The "queue" is + * actually a form of Treiber stack. A stack is ideal for + * activating threads in most-recently used order. This improves + * performance and locality, outweighing the disadvantages of + * being prone to contention and inability to release a worker + * unless it is topmost on stack. We park/unpark workers after + * pushing on the idle worker stack (represented by the lower + * 32bit subfield of ctl) when they cannot find work. The top + * stack state holds the value of the "scanState" field of the + * worker: its index and status, plus a version counter that, in + * addition to the count subfields (also serving as version + * stamps) provide protection against Treiber stack ABA effects. + * + * Field scanState is used by both workers and the pool to manage + * and track whether a worker is INACTIVE (possibly blocked + * waiting for a signal), or SCANNING for tasks (when neither hold + * it is busy running tasks). When a worker is inactivated, its + * scanState field is set, and is prevented from executing tasks, + * even though it must scan once for them to avoid queuing + * races. Note that scanState updates lag queue CAS releases so + * usage requires care. When queued, the lower 16 bits of + * scanState must hold its pool index. So we place the index there + * upon initialization (see registerWorker) and otherwise keep it + * there or restore it when necessary. + * + * Memory ordering. See "Correct and Efficient Work-Stealing for + * Weak Memory Models" by Le, Pop, Cohen, and Nardelli, PPoPP 2013 + * (http://www.di.ens.fr/~zappa/readings/ppopp13.pdf) for an + * analysis of memory ordering requirements in work-stealing + * algorithms similar to the one used here. We usually need + * stronger than minimal ordering because we must sometimes signal + * workers, requiring Dekker-like full-fences to avoid lost + * signals. Arranging for enough ordering without expensive + * over-fencing requires tradeoffs among the supported means of + * expressing access constraints. The most central operations, + * taking from queues and updating ctl state, require full-fence + * CAS. Array slots are read using the emulation of volatiles + * provided by Unsafe. Access from other threads to WorkQueue + * base, top, and array requires a volatile load of the first of + * any of these read. We use the convention of declaring the + * "base" index volatile, and always read it before other fields. + * The owner thread must ensure ordered updates, so writes use + * ordered intrinsics unless they can piggyback on those for other + * writes. Similar conventions and rationales hold for other + * WorkQueue fields (such as "currentSteal") that are only written + * by owners but observed by others. + * + * Creating workers. To create a worker, we pre-increment total + * count (serving as a reservation), and attempt to construct a + * ForkJoinWorkerThread via its factory. Upon construction, the + * new thread invokes registerWorker, where it constructs a + * WorkQueue and is assigned an index in the workQueues array + * (expanding the array if necessary). The thread is then + * started. Upon any exception across these steps, or null return + * from factory, deregisterWorker adjusts counts and records + * accordingly. If a null return, the pool continues running with + * fewer than the target number workers. If exceptional, the + * exception is propagated, generally to some external caller. + * Worker index assignment avoids the bias in scanning that would + * occur if entries were sequentially packed starting at the front + * of the workQueues array. We treat the array as a simple + * power-of-two hash table, expanding as needed. The seedIndex + * increment ensures no collisions until a resize is needed or a + * worker is deregistered and replaced, and thereafter keeps + * probability of collision low. We cannot use + * ThreadLocalRandom.getProbe() for similar purposes here because + * the thread has not started yet, but do so for creating + * submission queues for existing external threads. + * + * Deactivation and waiting. Queuing encounters several intrinsic + * races; most notably that a task-producing thread can miss + * seeing (and signalling) another thread that gave up looking for + * work but has not yet entered the wait queue. When a worker + * cannot find a task to steal, it deactivates and enqueues. Very + * often, the lack of tasks is transient due to GC or OS + * scheduling. To reduce false-alarm deactivation, scanners + * compute checksums of queue states during sweeps. (The + * stability checks used here and elsewhere are probabilistic + * variants of snapshot techniques -- see Herlihy & Shavit.) + * Workers give up and try to deactivate only after the sum is + * stable across scans. Further, to avoid missed signals, they + * repeat this scanning process after successful enqueuing until + * again stable. In this state, the worker cannot take/run a task + * it sees until it is released from the queue, so the worker + * itself eventually tries to release itself or any successor (see + * tryRelease). Otherwise, upon an empty scan, a deactivated + * worker uses an adaptive local spin construction (see awaitWork) + * before blocking (via park). Note the unusual conventions about + * Thread.interrupts surrounding parking and other blocking: + * Because interrupts are used solely to alert threads to check + * termination, which is checked anyway upon blocking, we clear + * status (using Thread.interrupted) before any call to park, so + * that park does not immediately return due to status being set + * via some other unrelated call to interrupt in user code. + * + * Signalling and activation. Workers are created or activated + * only when there appears to be at least one task they might be + * able to find and execute. Upon push (either by a worker or an + * external submission) to a previously (possibly) empty queue, + * workers are signalled if idle, or created if fewer exist than + * the given parallelism level. These primary signals are + * buttressed by others whenever other threads remove a task from + * a queue and notice that there are other tasks there as well. + * On most platforms, signalling (unpark) overhead time is + * noticeably long, and the time between signalling a thread and + * it actually making progress can be very noticeably long, so it + * is worth offloading these delays from critical paths as much as + * possible. Also, because inactive workers are often rescanning + * or spinning rather than blocking, we set and clear the "parker" * field of WorkQueues to reduce unnecessary calls to unpark. * (This requires a secondary recheck to avoid missed signals.) - * Note the unusual conventions about Thread.interrupts - * surrounding parking and other blocking: Because interrupts are - * used solely to alert threads to check termination, which is - * checked anyway upon blocking, we clear status (using - * Thread.interrupted) before any call to park, so that park does - * not immediately return due to status being set via some other - * unrelated call to interrupt in user code. - * - * Signalling. We create or wake up workers only when there - * appears to be at least one task they might be able to find and - * execute. When a submission is added or another worker adds a - * task to a queue that has fewer than two tasks, they signal - * waiting workers (or trigger creation of new ones if fewer than - * the given parallelism level -- signalWork). These primary - * signals are buttressed by others whenever other threads remove - * a task from a queue and notice that there are other tasks there - * as well. So in general, pools will be over-signalled. On most - * platforms, signalling (unpark) overhead time is noticeably - * long, and the time between signalling a thread and it actually - * making progress can be very noticeably long, so it is worth - * offloading these delays from critical paths as much as - * possible. Additionally, workers spin-down gradually, by staying - * alive so long as they see the ctl state changing. Similar - * stability-sensing techniques are also used before blocking in - * awaitJoin and helpComplete. * * Trimming workers. To release resources after periods of lack of * use, a worker starting to wait when the pool is quiescent will - * time out and terminate if the pool has remained quiescent for a - * given period -- a short period if there are more threads than - * parallelism, longer as the number of threads decreases. This - * will slowly propagate, eventually terminating all workers after - * periods of non-use. + * time out and terminate (see awaitWork) if the pool has remained + * quiescent for period IDLE_TIMEOUT, increasing the period as the + * number of threads decreases, eventually removing all workers. + * Also, when more than two spare threads exist, excess threads + * are immediately terminated at the next quiescent point. + * (Padding by two avoids hysteresis.) + * + * Shutdown and Termination. A call to shutdownNow invokes + * tryTerminate to atomically set a runState bit. The calling + * thread, as well as every other worker thereafter terminating, + * helps terminate others by setting their (qlock) status, + * cancelling their unprocessed tasks, and waking them up, doing + * so repeatedly until stable (but with a loop bounded by the + * number of workers). Calls to non-abrupt shutdown() preface + * this by checking whether termination should commence. This + * relies primarily on the active count bits of "ctl" maintaining + * consensus -- tryTerminate is called from awaitWork whenever + * quiescent. However, external submitters do not take part in + * this consensus. So, tryTerminate sweeps through queues (until + * stable) to ensure lack of in-flight submissions and workers + * about to process them before triggering the "STOP" phase of + * termination. (Note: there is an intrinsic conflict if + * helpQuiescePool is called when shutdown is enabled. Both wait + * for quiescence, but tryTerminate is biased to not trigger until + * helpQuiescePool completes.) * - * Shutdown and Termination. A call to shutdownNow atomically sets - * a plock bit and then (non-atomically) sets each worker's - * qlock status, cancels all unprocessed tasks, and wakes up - * all waiting workers. Detecting whether termination should - * commence after a non-abrupt shutdown() call requires more work - * and bookkeeping. We need consensus about quiescence (i.e., that - * there is no more work). The active count provides a primary - * indication but non-abrupt shutdown still requires a rechecking - * scan for any workers that are inactive but not queued. * * Joining Tasks * ============= @@ -403,9 +531,9 @@ public class ForkJoinPool extends AbstractExecutorService { * just let them block (as in Thread.join). We also cannot just * reassign the joiner's run-time stack with another and replace * it later, which would be a form of "continuation", that even if - * possible is not necessarily a good idea since we sometimes need - * both an unblocked task and its continuation to progress. - * Instead we combine two tactics: + * possible is not necessarily a good idea since we may need both + * an unblocked task and its continuation to progress. Instead we + * combine two tactics: * * Helping: Arranging for the joiner to execute some task that it * would be running if the steal had not occurred. @@ -425,16 +553,16 @@ public class ForkJoinPool extends AbstractExecutorService { * The ManagedBlocker extension API can't use helping so relies * only on compensation in method awaitBlocker. * - * The algorithm in tryHelpStealer entails a form of "linear" - * helping: Each worker records (in field currentSteal) the most - * recent task it stole from some other worker. Plus, it records - * (in field currentJoin) the task it is currently actively - * joining. Method tryHelpStealer uses these markers to try to - * find a worker to help (i.e., steal back a task from and execute - * it) that could hasten completion of the actively joined task. - * In essence, the joiner executes a task that would be on its own - * local deque had the to-be-joined task not been stolen. This may - * be seen as a conservative variant of the approach in Wagner & + * The algorithm in helpStealer entails a form of "linear + * helping". Each worker records (in field currentSteal) the most + * recent task it stole from some other worker (or a submission). + * It also records (in field currentJoin) the task it is currently + * actively joining. Method helpStealer uses these markers to try + * to find a worker to help (i.e., steal back a task from and + * execute it) that could hasten completion of the actively joined + * task. Thus, the joiner executes a task that would be on its + * own local deque had the to-be-joined task not been stolen. This + * is a conservative variant of the approach described in Wagner & * Calder "Leapfrogging: a portable technique for implementing * efficient futures" SIGPLAN Notices, 1993 * (http://portal.acm.org/citation.cfm?id=155354). It differs in @@ -452,37 +580,40 @@ public class ForkJoinPool extends AbstractExecutorService { * which means that we miss links in the chain during long-lived * tasks, GC stalls etc (which is OK since blocking in such cases * is usually a good idea). (4) We bound the number of attempts - * to find work (see MAX_HELP) and fall back to suspending the + * to find work using checksums and fall back to suspending the * worker and if necessary replacing it with another. * - * Helping actions for CountedCompleters are much simpler: Method - * helpComplete can take and execute any task with the same root - * as the task being waited on. However, this still entails some - * traversal of completer chains, so is less efficient than using - * CountedCompleters without explicit joins. + * Helping actions for CountedCompleters do not require tracking + * currentJoins: Method helpComplete takes and executes any task + * with the same root as the task being waited on (preferring + * local pops to non-local polls). However, this still entails + * some traversal of completer chains, so is less efficient than + * using CountedCompleters without explicit joins. * - * It is impossible to keep exactly the target parallelism number - * of threads running at any given time. Determining the - * existence of conservatively safe helping targets, the - * availability of already-created spares, and the apparent need - * to create new spares are all racy, so we rely on multiple - * retries of each. Compensation in the apparent absence of - * helping opportunities is challenging to control on JVMs, where - * GC and other activities can stall progress of tasks that in - * turn stall out many other dependent tasks, without us being - * able to determine whether they will ever require compensation. - * Even though work-stealing otherwise encounters little - * degradation in the presence of more threads than cores, - * aggressively adding new threads in such cases entails risk of - * unwanted positive feedback control loops in which more threads - * cause more dependent stalls (as well as delayed progress of - * unblocked threads to the point that we know they are available) - * leading to more situations requiring more threads, and so - * on. This aspect of control can be seen as an (analytically - * intractable) game with an opponent that may choose the worst - * (for us) active thread to stall at any time. We take several - * precautions to bound losses (and thus bound gains), mainly in - * methods tryCompensate and awaitJoin. + * Compensation does not aim to keep exactly the target + * parallelism number of unblocked threads running at any given + * time. Some previous versions of this class employed immediate + * compensations for any blocked join. However, in practice, the + * vast majority of blockages are transient byproducts of GC and + * other JVM or OS activities that are made worse by replacement. + * Currently, compensation is attempted only after validating that + * all purportedly active threads are processing tasks by checking + * field WorkQueue.scanState, which eliminates most false + * positives. Also, compensation is bypassed (tolerating fewer + * threads) in the most common case in which it is rarely + * beneficial: when a worker with an empty queue (thus no + * continuation tasks) blocks on a join and there still remain + * enough threads to ensure liveness. + * + * The compensation mechanism may be bounded. Bounds for the + * commonPool (see commonMaxSpares) better enable JVMs to cope + * with programming errors and abuse before running out of + * resources to do so. In other cases, users may supply factories + * that limit thread construction. The effects of bounding in this + * pool (like all others) is imprecise. Total worker counts are + * decremented when threads deregister, not when they exit and + * resources are reclaimed by the JVM and OS. So the number of + * simultaneously live threads may transiently exceed bounds. * * Common Pool * =========== @@ -492,34 +623,52 @@ public class ForkJoinPool extends AbstractExecutorService { * never be used, we minimize initial construction overhead and * footprint to the setup of about a dozen fields, with no nested * allocation. Most bootstrapping occurs within method - * fullExternalPush during the first submission to the pool. + * externalSubmit during the first submission to the pool. * * When external threads submit to the common pool, they can - * perform subtask processing (see externalHelpJoin and related - * methods). This caller-helps policy makes it sensible to set - * common pool parallelism level to one (or more) less than the - * total number of available cores, or even zero for pure - * caller-runs. We do not need to record whether external - * submissions are to the common pool -- if not, externalHelpJoin - * returns quickly (at the most helping to signal some common pool - * workers). These submitters would otherwise be blocked waiting - * for completion, so the extra effort (with liberally sprinkled - * task status checks) in inapplicable cases amounts to an odd - * form of limited spin-wait before blocking in ForkJoinTask.join. + * perform subtask processing (see externalHelpComplete and + * related methods) upon joins. This caller-helps policy makes it + * sensible to set common pool parallelism level to one (or more) + * less than the total number of available cores, or even zero for + * pure caller-runs. We do not need to record whether external + * submissions are to the common pool -- if not, external help + * methods return quickly. These submitters would otherwise be + * blocked waiting for completion, so the extra effort (with + * liberally sprinkled task status checks) in inapplicable cases + * amounts to an odd form of limited spin-wait before blocking in + * ForkJoinTask.join. * * As a more appropriate default in managed environments, unless * overridden by system properties, we use workers of subclass * InnocuousForkJoinWorkerThread when there is a SecurityManager * present. These workers have no permissions set, do not belong * to any user-defined ThreadGroup, and erase all ThreadLocals - * after executing any top-level task (see WorkQueue.runTask). The - * associated mechanics (mainly in ForkJoinWorkerThread) may be - * JVM-dependent and must access particular Thread class fields to - * achieve this effect. + * after executing any top-level task (see WorkQueue.runTask). + * The associated mechanics (mainly in ForkJoinWorkerThread) may + * be JVM-dependent and must access particular Thread class fields + * to achieve this effect. * * Style notes * =========== * + * Memory ordering relies mainly on Unsafe intrinsics that carry + * the further responsibility of explicitly performing null- and + * bounds- checks otherwise carried out implicitly by JVMs. This + * can be awkward and ugly, but also reflects the need to control + * outcomes across the unusual cases that arise in very racy code + * with very few invariants. So these explicit checks would exist + * in some form anyway. All fields are read into locals before + * use, and null-checked if they are references. This is usually + * done in a "C"-like style of listing declarations at the heads + * of methods or blocks, and using inline assignments on first + * encounter. Array bounds-checks are usually performed by + * masking with array.length-1, which relies on the invariant that + * these arrays are created with positive lengths, which is itself + * paranoically checked. Nearly all explicit checks lead to + * bypass/return, not exception throws, because they may + * legitimately arise due to cancellation/revocation during + * shutdown. + * * There is a lot of representation-level coupling among classes * ForkJoinPool, ForkJoinWorkerThread, and ForkJoinTask. The * fields of WorkQueue maintain data structures managed by @@ -527,22 +676,13 @@ public class ForkJoinPool extends AbstractExecutorService { * trying to reduce this, since any associated future changes in * representations will need to be accompanied by algorithmic * changes anyway. Several methods intrinsically sprawl because - * they must accumulate sets of consistent reads of volatiles held - * in local variables. Methods signalWork() and scan() are the - * main bottlenecks, so are especially heavily - * micro-optimized/mangled. There are lots of inline assignments - * (of form "while ((local = field) != 0)") which are usually the - * simplest way to ensure the required read orderings (which are - * sometimes critical). This leads to a "C"-like style of listing - * declarations of these locals at the heads of methods or blocks. - * There are several occurrences of the unusual "do {} while - * (!cas...)" which is the simplest way to force an update of a - * CAS'ed variable. There are also other coding oddities (including - * several unnecessary-looking hoisted null checks) that help - * some methods perform reasonably even when interpreted (not - * compiled). + * they must accumulate sets of consistent reads of fields held in + * local variables. There are also other coding oddities + * (including several unnecessary-looking hoisted null checks) + * that help some methods perform reasonably even when interpreted + * (not compiled). * - * The order of declarations in this file is: + * The order of declarations in this file is (with a few exceptions): * (1) Static utility functions * (2) Nested (static) classes * (3) Static fields @@ -609,56 +749,37 @@ public class ForkJoinPool extends AbstractExecutorService { public final boolean exec() { return true; } } + // Constants shared across ForkJoinPool and WorkQueue + + // Bounds + static final int SMASK = 0xffff; // short bits == max index + static final int MAX_CAP = 0x7fff; // max #workers - 1 + static final int EVENMASK = 0xfffe; // even short bits + static final int SQMASK = 0x007e; // max 64 (even) slots + + // Masks and units for WorkQueue.scanState and ctl sp subfield + static final int SCANNING = 1; // false when running tasks + static final int INACTIVE = 1 << 31; // must be negative + static final int SS_SEQ = 1 << 16; // version count + + // Mode bits for ForkJoinPool.config and WorkQueue.config + static final int MODE_MASK = 0xffff << 16; // top half of int + static final int LIFO_QUEUE = 0; + static final int FIFO_QUEUE = 1 << 16; + static final int SHARED_QUEUE = 1 << 31; // must be negative + /** * Queues supporting work-stealing as well as external task - * submission. See above for main rationale and algorithms. - * Implementation relies heavily on "Unsafe" intrinsics - * and selective use of "volatile": - * - * Field "base" is the index (mod array.length) of the least valid - * queue slot, which is always the next position to steal (poll) - * from if nonempty. Reads and writes require volatile orderings - * but not CAS, because updates are only performed after slot - * CASes. - * - * Field "top" is the index (mod array.length) of the next queue - * slot to push to or pop from. It is written only by owner thread - * for push, or under lock for external/shared push, and accessed - * by other threads only after reading (volatile) base. Both top - * and base are allowed to wrap around on overflow, but (top - - * base) (or more commonly -(base - top) to force volatile read of - * base before top) still estimates size. The lock ("qlock") is - * forced to -1 on termination, causing all further lock attempts - * to fail. (Note: we don't need CAS for termination state because - * upon pool shutdown, all shared-queues will stop being used - * anyway.) Nearly all lock bodies are set up so that exceptions - * within lock bodies are "impossible" (modulo JVM errors that - * would cause failure anyway.) - * - * The array slots are read and written using the emulation of - * volatiles/atomics provided by Unsafe. Insertions must in - * general use putOrderedObject as a form of releasing store to - * ensure that all writes to the task object are ordered before - * its publication in the queue. All removals entail a CAS to - * null. The array is always a power of two. To ensure safety of - * Unsafe array operations, all accesses perform explicit null - * checks and implicit bounds checks via power-of-two masking. - * - * In addition to basic queuing support, this class contains - * fields described elsewhere to control execution. It turns out - * to work better memory-layout-wise to include them in this class - * rather than a separate class. - * + * submission. See above for descriptions and algorithms. * Performance on most platforms is very sensitive to placement of * instances of both WorkQueues and their arrays -- we absolutely * do not want multiple WorkQueue instances or multiple queue - * arrays sharing cache lines. (It would be best for queue objects - * and their arrays to share, but there is nothing available to - * help arrange that). The @Contended annotation alerts JVMs to - * try to keep instances apart. + * arrays sharing cache lines. The @Contended annotation alerts + * JVMs to try to keep instances apart. */ @sun.misc.Contended static final class WorkQueue { + /** * Capacity of work-stealing queue array upon initialization. * Must be a power of two; at least 4, but should be larger to @@ -679,13 +800,13 @@ public class ForkJoinPool extends AbstractExecutorService { */ static final int MAXIMUM_QUEUE_CAPACITY = 1 << 26; // 64M - volatile int eventCount; // encoded inactivation count; < 0 if inactive - int nextWait; // encoded record of next event waiter + // Instance fields + volatile int scanState; // versioned, <0: inactive; odd:scanning + int stackPred; // pool stack (ctl) predecessor int nsteals; // number of steals - int hint; // steal index hint - short poolIndex; // index of this queue in pool - final short mode; // 0: lifo, > 0: fifo, < 0: shared - volatile int qlock; // 1: locked, -1: terminate; else 0 + int hint; // randomization and stealer index hint + int config; // pool index and mode + volatile int qlock; // 1: locked, < 0: terminate; else 0 volatile int base; // index of next slot for poll int top; // index of next slot for push ForkJoinTask[] array; // the elements (initially unallocated) @@ -693,18 +814,22 @@ public class ForkJoinPool extends AbstractExecutorService { final ForkJoinWorkerThread owner; // owning thread or null if shared volatile Thread parker; // == owner during call to park; else null volatile ForkJoinTask currentJoin; // task being joined in awaitJoin - ForkJoinTask currentSteal; // current non-local task being executed + volatile ForkJoinTask currentSteal; // mainly used by helpStealer - WorkQueue(ForkJoinPool pool, ForkJoinWorkerThread owner, int mode, - int seed) { + WorkQueue(ForkJoinPool pool, ForkJoinWorkerThread owner) { this.pool = pool; this.owner = owner; - this.mode = (short)mode; - this.hint = seed; // store initial seed for runWorker // Place indices in the center of array (that is not yet allocated) base = top = INITIAL_QUEUE_CAPACITY >>> 1; } + /** + * Returns an exportable index (used by ForkJoinWorkerThread). + */ + final int getPoolIndex() { + return (config & 0xffff) >>> 1; // ignore odd/even tag bit + } + /** * Returns the approximate number of tasks in the queue. */ @@ -719,12 +844,10 @@ public class ForkJoinPool extends AbstractExecutorService { * near-empty queue has at least one unclaimed task. */ final boolean isEmpty() { - ForkJoinTask[] a; int m, s; - int n = base - (s = top); - return (n >= 0 || - (n == -1 && - ((a = array) == null || - (m = a.length - 1) < 0 || + ForkJoinTask[] a; int n, m, s; + return ((n = base - (s = top)) >= 0 || + (n == -1 && // possibly one task + ((a = array) == null || (m = a.length - 1) < 0 || U.getObject (a, (long)((m & (s - 1)) << ASHIFT) + ABASE) == null))); } @@ -738,12 +861,15 @@ public class ForkJoinPool extends AbstractExecutorService { */ final void push(ForkJoinTask task) { ForkJoinTask[] a; ForkJoinPool p; - int s = top, n; + int b = base, s = top, n; if ((a = array) != null) { // ignore if queue removed - int m = a.length - 1; + int m = a.length - 1; // fenced write for task visibility U.putOrderedObject(a, ((m & s) << ASHIFT) + ABASE, task); - if ((n = (top = s + 1) - base) <= 2) - (p = pool).signalWork(p.workQueues, this); + U.putOrderedInt(this, QTOP, s + 1); + if ((n = s - b) <= 1) { + if ((p = pool) != null) + p.signalWork(p.workQueues, this); + } else if (n >= m) growArray(); } @@ -764,7 +890,7 @@ public class ForkJoinPool extends AbstractExecutorService { if (oldA != null && (oldMask = oldA.length - 1) >= 0 && (t = top) - (b = base) > 0) { int mask = size - 1; - do { + do { // emulate poll from old array, push to new array ForkJoinTask x; int oldj = ((b & oldMask) << ASHIFT) + ABASE; int j = ((b & mask) << ASHIFT) + ABASE; @@ -789,7 +915,7 @@ public class ForkJoinPool extends AbstractExecutorService { if ((t = (ForkJoinTask)U.getObject(a, j)) == null) break; if (U.compareAndSwapObject(a, j, t, null)) { - top = s; + U.putOrderedInt(this, QTOP, s); return t; } } @@ -800,7 +926,7 @@ public class ForkJoinPool extends AbstractExecutorService { /** * Takes a task in FIFO order if b is base of queue and a task * can be claimed without contention. Specialized versions - * appear in ForkJoinPool methods scan and tryHelpStealer. + * appear in ForkJoinPool methods scan and helpStealer. */ final ForkJoinTask pollAt(int b) { ForkJoinTask t; ForkJoinTask[] a; @@ -808,7 +934,7 @@ public class ForkJoinPool extends AbstractExecutorService { int j = (((a.length - 1) & b) << ASHIFT) + ABASE; if ((t = (ForkJoinTask)U.getObjectVolatile(a, j)) != null && base == b && U.compareAndSwapObject(a, j, t, null)) { - U.putOrderedInt(this, QBASE, b + 1); + base = b + 1; return t; } } @@ -823,16 +949,15 @@ public class ForkJoinPool extends AbstractExecutorService { while ((b = base) - top < 0 && (a = array) != null) { int j = (((a.length - 1) & b) << ASHIFT) + ABASE; t = (ForkJoinTask)U.getObjectVolatile(a, j); - if (t != null) { - if (U.compareAndSwapObject(a, j, t, null)) { - U.putOrderedInt(this, QBASE, b + 1); - return t; + if (base == b) { + if (t != null) { + if (U.compareAndSwapObject(a, j, t, null)) { + base = b + 1; + return t; + } } - } - else if (base == b) { - if (b + 1 == top) + else if (b + 1 == top) // now empty break; - Thread.yield(); // wait for lagging update (very rare) } } return null; @@ -842,7 +967,7 @@ public class ForkJoinPool extends AbstractExecutorService { * Takes next task, if one exists, in order specified by mode. */ final ForkJoinTask nextLocalTask() { - return mode == 0 ? pop() : poll(); + return (config & FIFO_QUEUE) == 0 ? pop() : poll(); } /** @@ -852,7 +977,7 @@ public class ForkJoinPool extends AbstractExecutorService { ForkJoinTask[] a = array; int m; if (a == null || (m = a.length - 1) < 0) return null; - int i = mode == 0 ? top - 1 : base; + int i = (config & FIFO_QUEUE) == 0 ? top - 1 : base; int j = ((i & m) << ASHIFT) + ABASE; return (ForkJoinTask)U.getObjectVolatile(a, j); } @@ -860,13 +985,13 @@ public class ForkJoinPool extends AbstractExecutorService { /** * Pops the given task only if it is at the current top. * (A shared version is available only via FJP.tryExternalUnpush) - */ + */ final boolean tryUnpush(ForkJoinTask t) { ForkJoinTask[] a; int s; if ((a = array) != null && (s = top) != base && U.compareAndSwapObject (a, (((a.length - 1) & --s) << ASHIFT) + ABASE, t, null)) { - top = s; + U.putOrderedInt(this, QTOP, s); return true; } return false; @@ -876,9 +1001,16 @@ public class ForkJoinPool extends AbstractExecutorService { * Removes and cancels all known tasks, ignoring any exceptions. */ final void cancelAll() { - ForkJoinTask.cancelIgnoringExceptions(currentJoin); - ForkJoinTask.cancelIgnoringExceptions(currentSteal); - for (ForkJoinTask t; (t = poll()) != null; ) + ForkJoinTask t; + if ((t = currentJoin) != null) { + currentJoin = null; + ForkJoinTask.cancelIgnoringExceptions(t); + } + if ((t = currentSteal) != null) { + currentSteal = null; + ForkJoinTask.cancelIgnoringExceptions(t); + } + while ((t = poll()) != null) ForkJoinTask.cancelIgnoringExceptions(t); } @@ -893,167 +1025,186 @@ public class ForkJoinPool extends AbstractExecutorService { } /** - * Executes a top-level task and any local tasks remaining - * after execution. + * Removes and executes all local tasks. If LIFO, invokes + * pollAndExecAll. Otherwise implements a specialized pop loop + * to exec until empty. */ - final void runTask(ForkJoinTask task) { - if ((currentSteal = task) != null) { - ForkJoinWorkerThread thread; - task.doExec(); - ForkJoinTask[] a = array; - int md = mode; - ++nsteals; - currentSteal = null; - if (md != 0) - pollAndExecAll(); - else if (a != null) { - int s, m = a.length - 1; - ForkJoinTask t; - while ((s = top - 1) - base >= 0 && - (t = (ForkJoinTask)U.getAndSetObject - (a, ((m & s) << ASHIFT) + ABASE, null)) != null) { - top = s; + final void execLocalTasks() { + int b = base, m, s; + ForkJoinTask[] a = array; + if (b - (s = top - 1) <= 0 && a != null && + (m = a.length - 1) >= 0) { + if ((config & FIFO_QUEUE) == 0) { + for (ForkJoinTask t;;) { + if ((t = (ForkJoinTask)U.getAndSetObject + (a, ((m & s) << ASHIFT) + ABASE, null)) == null) + break; + U.putOrderedInt(this, QTOP, s); t.doExec(); + if (base - (s = top - 1) > 0) + break; } } - if ((thread = owner) != null) // no need to do in finally clause + else + pollAndExecAll(); + } + } + + /** + * Executes the given task and any remaining local tasks. + */ + final void runTask(ForkJoinTask task) { + if (task != null) { + scanState &= ~SCANNING; // mark as busy + (currentSteal = task).doExec(); + U.putOrderedObject(this, QCURRENTSTEAL, null); // release for GC + execLocalTasks(); + ForkJoinWorkerThread thread = owner; + if (++nsteals < 0) // collect on overflow + transferStealCount(pool); + scanState |= SCANNING; + if (thread != null) thread.afterTopLevelExec(); } } + /** + * Adds steal count to pool stealCounter if it exists, and resets. + */ + final void transferStealCount(ForkJoinPool p) { + AtomicLong sc; + if (p != null && (sc = p.stealCounter) != null) { + int s = nsteals; + nsteals = 0; // if negative, correct for overflow + sc.getAndAdd((long)(s < 0 ? Integer.MAX_VALUE : s)); + } + } + /** * If present, removes from queue and executes the given task, - * or any other cancelled task. Returns (true) on any CAS - * or consistency check failure so caller can retry. + * or any other cancelled task. Used only by awaitJoin. * - * @return false if no progress can be made, else true + * @return true if queue empty and task not known to be done */ final boolean tryRemoveAndExec(ForkJoinTask task) { - boolean stat; ForkJoinTask[] a; int m, s, b, n; - if (task != null && (a = array) != null && (m = a.length - 1) >= 0 && - (n = (s = top) - (b = base)) > 0) { - boolean removed = false, empty = true; - stat = true; - for (ForkJoinTask t;;) { // traverse from s to b - long j = ((--s & m) << ASHIFT) + ABASE; - t = (ForkJoinTask)U.getObject(a, j); - if (t == null) // inconsistent length - break; - else if (t == task) { - if (s + 1 == top) { // pop - if (!U.compareAndSwapObject(a, j, task, null)) - break; - top = s; - removed = true; + if ((a = array) != null && (m = a.length - 1) >= 0 && + task != null) { + while ((n = (s = top) - (b = base)) > 0) { + for (ForkJoinTask t;;) { // traverse from s to b + long j = ((--s & m) << ASHIFT) + ABASE; + if ((t = (ForkJoinTask)U.getObject(a, j)) == null) + return s + 1 == top; // shorter than expected + else if (t == task) { + boolean removed = false; + if (s + 1 == top) { // pop + if (U.compareAndSwapObject(a, j, task, null)) { + U.putOrderedInt(this, QTOP, s); + removed = true; + } + } + else if (base == b) // replace with proxy + removed = U.compareAndSwapObject( + a, j, task, new EmptyTask()); + if (removed) + task.doExec(); + break; } - else if (base == b) // replace with proxy - removed = U.compareAndSwapObject(a, j, task, - new EmptyTask()); - break; - } - else if (t.status >= 0) - empty = false; - else if (s + 1 == top) { // pop and throw away - if (U.compareAndSwapObject(a, j, t, null)) - top = s; - break; - } - if (--n == 0) { - if (!empty && base == b) - stat = false; - break; + else if (t.status < 0 && s + 1 == top) { + if (U.compareAndSwapObject(a, j, t, null)) + U.putOrderedInt(this, QTOP, s); + break; // was cancelled + } + if (--n == 0) + return false; } + if (task.status < 0) + return false; } - if (removed) - task.doExec(); } - else - stat = false; - return stat; + return true; } /** - * Tries to poll for and execute the given task or any other - * task in its CountedCompleter computation. + * Pops task if in the same CC computation as the given task, + * in either shared or owned mode. Used only by helpComplete. */ - final boolean pollAndExecCC(CountedCompleter root) { - ForkJoinTask[] a; int b; Object o; CountedCompleter t, r; - if ((b = base) - top < 0 && (a = array) != null) { + final CountedCompleter popCC(CountedCompleter task, int mode) { + int s; ForkJoinTask[] a; Object o; + if (base - (s = top) < 0 && (a = array) != null) { + long j = (((a.length - 1) & (s - 1)) << ASHIFT) + ABASE; + if ((o = U.getObjectVolatile(a, j)) != null && + (o instanceof CountedCompleter)) { + CountedCompleter t = (CountedCompleter)o; + for (CountedCompleter r = t;;) { + if (r == task) { + if (mode < 0) { // must lock + if (U.compareAndSwapInt(this, QLOCK, 0, 1)) { + if (top == s && array == a && + U.compareAndSwapObject(a, j, t, null)) { + U.putOrderedInt(this, QTOP, s - 1); + U.putOrderedInt(this, QLOCK, 0); + return t; + } + U.compareAndSwapInt(this, QLOCK, 1, 0); + } + } + else if (U.compareAndSwapObject(a, j, t, null)) { + U.putOrderedInt(this, QTOP, s - 1); + return t; + } + break; + } + else if ((r = r.completer) == null) // try parent + break; + } + } + } + return null; + } + + /** + * Steals and runs a task in the same CC computation as the + * given task if one exists and can be taken without + * contention. Otherwise returns a checksum/control value for + * use by method helpComplete. + * + * @return 1 if successful, 2 if retryable (lost to another + * stealer), -1 if non-empty but no matching task found, else + * the base index, forced negative. + */ + final int pollAndExecCC(CountedCompleter task) { + int b, h; ForkJoinTask[] a; Object o; + if ((b = base) - top >= 0 || (a = array) == null) + h = b | Integer.MIN_VALUE; // to sense movement on re-poll + else { long j = (((a.length - 1) & b) << ASHIFT) + ABASE; if ((o = U.getObjectVolatile(a, j)) == null) - return true; // retry - if (o instanceof CountedCompleter) { - for (t = (CountedCompleter)o, r = t;;) { - if (r == root) { + h = 2; // retryable + else if (!(o instanceof CountedCompleter)) + h = -1; // unmatchable + else { + CountedCompleter t = (CountedCompleter)o; + for (CountedCompleter r = t;;) { + if (r == task) { if (base == b && U.compareAndSwapObject(a, j, t, null)) { - U.putOrderedInt(this, QBASE, b + 1); + base = b + 1; t.doExec(); + h = 1; // success } - return true; - } - else if ((r = r.completer) == null) - break; // not part of root computation - } - } - } - return false; - } - - /** - * Tries to pop and execute the given task or any other task - * in its CountedCompleter computation. - */ - final boolean externalPopAndExecCC(CountedCompleter root) { - ForkJoinTask[] a; int s; Object o; CountedCompleter t, r; - if (base - (s = top) < 0 && (a = array) != null) { - long j = (((a.length - 1) & (s - 1)) << ASHIFT) + ABASE; - if ((o = U.getObject(a, j)) instanceof CountedCompleter) { - for (t = (CountedCompleter)o, r = t;;) { - if (r == root) { - if (U.compareAndSwapInt(this, QLOCK, 0, 1)) { - if (top == s && array == a && - U.compareAndSwapObject(a, j, t, null)) { - top = s - 1; - qlock = 0; - t.doExec(); - } - else - qlock = 0; - } - return true; - } - else if ((r = r.completer) == null) + else + h = 2; // lost CAS break; - } - } - } - return false; - } - - /** - * Internal version - */ - final boolean internalPopAndExecCC(CountedCompleter root) { - ForkJoinTask[] a; int s; Object o; CountedCompleter t, r; - if (base - (s = top) < 0 && (a = array) != null) { - long j = (((a.length - 1) & (s - 1)) << ASHIFT) + ABASE; - if ((o = U.getObject(a, j)) instanceof CountedCompleter) { - for (t = (CountedCompleter)o, r = t;;) { - if (r == root) { - if (U.compareAndSwapObject(a, j, t, null)) { - top = s - 1; - t.doExec(); - } - return true; } - else if ((r = r.completer) == null) + else if ((r = r.completer) == null) { + h = -1; // unmatched break; + } } } } - return false; + return h; } /** @@ -1061,28 +1212,31 @@ public class ForkJoinPool extends AbstractExecutorService { */ final boolean isApparentlyUnblocked() { Thread wt; Thread.State s; - return (eventCount >= 0 && + return (scanState >= 0 && (wt = owner) != null && (s = wt.getState()) != Thread.State.BLOCKED && s != Thread.State.WAITING && s != Thread.State.TIMED_WAITING); } - // Unsafe mechanics + // Unsafe mechanics. Note that some are (and must be) the same as in FJP private static final sun.misc.Unsafe U; - private static final long QBASE; + private static final int ABASE; + private static final int ASHIFT; + private static final long QTOP; private static final long QLOCK; - private static final int ABASE; - private static final int ASHIFT; + private static final long QCURRENTSTEAL; static { try { U = sun.misc.Unsafe.getUnsafe(); - Class k = WorkQueue.class; + Class wk = WorkQueue.class; Class ak = ForkJoinTask[].class; - QBASE = U.objectFieldOffset - (k.getDeclaredField("base")); + QTOP = U.objectFieldOffset + (wk.getDeclaredField("top")); QLOCK = U.objectFieldOffset - (k.getDeclaredField("qlock")); + (wk.getDeclaredField("qlock")); + QCURRENTSTEAL = U.objectFieldOffset + (wk.getDeclaredField("currentSteal")); ABASE = U.arrayBaseOffset(ak); int scale = U.arrayIndexScale(ak); if ((scale & (scale - 1)) != 0) @@ -1125,6 +1279,11 @@ public class ForkJoinPool extends AbstractExecutorService { */ static final int commonParallelism; + /** + * Limit on spare thread construction in tryCompensate. + */ + private static int commonMaxSpares; + /** * Sequence number for creating workerNamePrefix. */ @@ -1138,7 +1297,7 @@ public class ForkJoinPool extends AbstractExecutorService { return ++poolNumberSequence; } - // static constants + // static configuration constants /** * Initial timeout value (in nanoseconds) for the thread @@ -1148,27 +1307,34 @@ public class ForkJoinPool extends AbstractExecutorService { * aggressive shrinkage during most transient stalls (long GCs * etc). */ - private static final long IDLE_TIMEOUT = 2000L * 1000L * 1000L; // 2sec - - /** - * Timeout value when there are more threads than parallelism level - */ - private static final long FAST_IDLE_TIMEOUT = 200L * 1000L * 1000L; + private static final long IDLE_TIMEOUT = 2000L * 1000L * 1000L; // 2sec /** * Tolerance for idle timeouts, to cope with timer undershoots */ - private static final long TIMEOUT_SLOP = 2000000L; + private static final long TIMEOUT_SLOP = 20L * 1000L * 1000L; // 20ms /** - * The maximum stolen->joining link depth allowed in method - * tryHelpStealer. Must be a power of two. Depths for legitimate - * chains are unbounded, but we use a fixed constant to avoid - * (otherwise unchecked) cycles and to bound staleness of - * traversal parameters at the expense of sometimes blocking when - * we could be helping. + * The initial value for commonMaxSpares during static + * initialization unless overridden using System property + * "java.util.concurrent.ForkJoinPool.common.maximumSpares". The + * default value is far in excess of normal requirements, but also + * far short of MAX_CAP and typical OS thread limits, so allows + * JVMs to catch misuse/abuse before running out of resources + * needed to do so. */ - private static final int MAX_HELP = 64; + private static final int DEFAULT_COMMON_MAX_SPARES = 256; + + /** + * Number of times to spin-wait before blocking. The spins (in + * awaitRunStateLock and awaitWork) currently use randomized + * spins. If/when MWAIT-like intrinsics becomes available, they + * may allow quieter spinning. The value of SPINS must be a power + * of two, at least 4. The current value causes spinning for a + * small fraction of typical context-switch times, well worthwhile + * given the typical likelihoods that blocking is not necessary. + */ + private static final int SPINS = 1 << 11; /** * Increment for seed generators. See class ThreadLocal for @@ -1177,209 +1343,212 @@ public class ForkJoinPool extends AbstractExecutorService { private static final int SEED_INCREMENT = 0x9e3779b9; /* - * Bits and masks for control variables + * Bits and masks for field ctl, packed with 4 16 bit subfields: + * AC: Number of active running workers minus target parallelism + * TC: Number of total workers minus target parallelism + * SS: version count and status of top waiting thread + * ID: poolIndex of top of Treiber stack of waiters * - * Field ctl is a long packed with: - * AC: Number of active running workers minus target parallelism (16 bits) - * TC: Number of total workers minus target parallelism (16 bits) - * ST: true if pool is terminating (1 bit) - * EC: the wait count of top waiting thread (15 bits) - * ID: poolIndex of top of Treiber stack of waiters (16 bits) + * When convenient, we can extract the lower 32 stack top bits + * (including version bits) as sp=(int)ctl. The offsets of counts + * by the target parallelism and the positionings of fields makes + * it possible to perform the most common checks via sign tests of + * fields: When ac is negative, there are not enough active + * workers, when tc is negative, there are not enough total + * workers. When sp is non-zero, there are waiting workers. To + * deal with possibly negative fields, we use casts in and out of + * "short" and/or signed shifts to maintain signedness. * - * When convenient, we can extract the upper 32 bits of counts and - * the lower 32 bits of queue state, u = (int)(ctl >>> 32) and e = - * (int)ctl. The ec field is never accessed alone, but always - * together with id and st. The offsets of counts by the target - * parallelism and the positionings of fields makes it possible to - * perform the most common checks via sign tests of fields: When - * ac is negative, there are not enough active workers, when tc is - * negative, there are not enough total workers, and when e is - * negative, the pool is terminating. To deal with these possibly - * negative fields, we use casts in and out of "short" and/or - * signed shifts to maintain signedness. - * - * When a thread is queued (inactivated), its eventCount field is - * set negative, which is the only way to tell if a worker is - * prevented from executing tasks, even though it must continue to - * scan for them to avoid queuing races. Note however that - * eventCount updates lag releases so usage requires care. - * - * Field plock is an int packed with: - * SHUTDOWN: true if shutdown is enabled (1 bit) - * SEQ: a sequence lock, with PL_LOCK bit set if locked (30 bits) - * SIGNAL: set when threads may be waiting on the lock (1 bit) - * - * The sequence number enables simple consistency checks: - * Staleness of read-only operations on the workQueues array can - * be checked by comparing plock before vs after the reads. + * Because it occupies uppermost bits, we can add one active count + * using getAndAddLong of AC_UNIT, rather than CAS, when returning + * from a blocked join. Other updates entail multiple subfields + * and masking, requiring CAS. */ - // bit positions/shifts for fields + // Lower and upper word masks + private static final long SP_MASK = 0xffffffffL; + private static final long UC_MASK = ~SP_MASK; + + // Active counts private static final int AC_SHIFT = 48; + private static final long AC_UNIT = 0x0001L << AC_SHIFT; + private static final long AC_MASK = 0xffffL << AC_SHIFT; + + // Total counts private static final int TC_SHIFT = 32; - private static final int ST_SHIFT = 31; - private static final int EC_SHIFT = 16; + private static final long TC_UNIT = 0x0001L << TC_SHIFT; + private static final long TC_MASK = 0xffffL << TC_SHIFT; + private static final long ADD_WORKER = 0x0001L << (TC_SHIFT + 15); // sign - // bounds - private static final int SMASK = 0xffff; // short bits - private static final int MAX_CAP = 0x7fff; // max #workers - 1 - private static final int EVENMASK = 0xfffe; // even short bits - private static final int SQMASK = 0x007e; // max 64 (even) slots - private static final int SHORT_SIGN = 1 << 15; - private static final int INT_SIGN = 1 << 31; - - // masks - private static final long STOP_BIT = 0x0001L << ST_SHIFT; - private static final long AC_MASK = ((long)SMASK) << AC_SHIFT; - private static final long TC_MASK = ((long)SMASK) << TC_SHIFT; - - // units for incrementing and decrementing - private static final long TC_UNIT = 1L << TC_SHIFT; - private static final long AC_UNIT = 1L << AC_SHIFT; - - // masks and units for dealing with u = (int)(ctl >>> 32) - private static final int UAC_SHIFT = AC_SHIFT - 32; - private static final int UTC_SHIFT = TC_SHIFT - 32; - private static final int UAC_MASK = SMASK << UAC_SHIFT; - private static final int UTC_MASK = SMASK << UTC_SHIFT; - private static final int UAC_UNIT = 1 << UAC_SHIFT; - private static final int UTC_UNIT = 1 << UTC_SHIFT; - - // masks and units for dealing with e = (int)ctl - private static final int E_MASK = 0x7fffffff; // no STOP_BIT - private static final int E_SEQ = 1 << EC_SHIFT; - - // plock bits - private static final int SHUTDOWN = 1 << 31; - private static final int PL_LOCK = 2; - private static final int PL_SIGNAL = 1; - private static final int PL_SPINS = 1 << 8; - - // access mode for WorkQueue - static final int LIFO_QUEUE = 0; - static final int FIFO_QUEUE = 1; - static final int SHARED_QUEUE = -1; + // runState bits: SHUTDOWN must be negative, others arbitrary powers of two + private static final int RSLOCK = 1; + private static final int RSIGNAL = 1 << 1; + private static final int STARTED = 1 << 2; + private static final int STOP = 1 << 29; + private static final int TERMINATED = 1 << 30; + private static final int SHUTDOWN = 1 << 31; // Instance fields - volatile long stealCount; // collects worker counts - volatile long ctl; // main pool control - volatile int plock; // shutdown status and seqLock - volatile int indexSeed; // worker/submitter index seed - final short parallelism; // parallelism level - final short mode; // LIFO/FIFO - WorkQueue[] workQueues; // main registry + volatile long ctl; // main pool control + volatile int runState; // lockable status + final int config; // parallelism, mode + int indexSeed; // to generate worker index + volatile WorkQueue[] workQueues; // main registry final ForkJoinWorkerThreadFactory factory; - final UncaughtExceptionHandler ueh; // per-worker UEH - final String workerNamePrefix; // to create worker name string + final UncaughtExceptionHandler ueh; // per-worker UEH + final String workerNamePrefix; // to create worker name string + volatile AtomicLong stealCounter; // also used as sync monitor /** - * Acquires the plock lock to protect worker array and related - * updates. This method is called only if an initial CAS on plock - * fails. This acts as a spinlock for normal cases, but falls back - * to builtin monitor to block when (rarely) needed. This would be - * a terrible idea for a highly contended lock, but works fine as - * a more conservative alternative to a pure spinlock. + * Acquires the runState lock; returns current (locked) runState. */ - private int acquirePlock() { - int spins = PL_SPINS, ps, nps; - for (;;) { - if (((ps = plock) & PL_LOCK) == 0 && - U.compareAndSwapInt(this, PLOCK, ps, nps = ps + PL_LOCK)) - return nps; - else if (spins >= 0) { - if (ThreadLocalRandom.nextSecondarySeed() >= 0) + private int lockRunState() { + int rs; + return ((((rs = runState) & RSLOCK) != 0 || + !U.compareAndSwapInt(this, RUNSTATE, rs, rs |= RSLOCK)) ? + awaitRunStateLock() : rs); + } + + /** + * Spins and/or blocks until runstate lock is available. See + * above for explanation. + */ + private int awaitRunStateLock() { + Object lock; + boolean wasInterrupted = false; + for (int spins = SPINS, r = 0, rs, ns;;) { + if (((rs = runState) & RSLOCK) == 0) { + if (U.compareAndSwapInt(this, RUNSTATE, rs, ns = rs | RSLOCK)) { + if (wasInterrupted) { + try { + Thread.currentThread().interrupt(); + } catch (SecurityException ignore) { + } + } + return ns; + } + } + else if (r == 0) + r = ThreadLocalRandom.nextSecondarySeed(); + else if (spins > 0) { + r ^= r << 6; r ^= r >>> 21; r ^= r << 7; // xorshift + if (r >= 0) --spins; } - else if (U.compareAndSwapInt(this, PLOCK, ps, ps | PL_SIGNAL)) { - synchronized (this) { - if ((plock & PL_SIGNAL) != 0) { + else if ((rs & STARTED) == 0 || (lock = stealCounter) == null) + Thread.yield(); // initialization race + else if (U.compareAndSwapInt(this, RUNSTATE, rs, rs | RSIGNAL)) { + synchronized (lock) { + if ((runState & RSIGNAL) != 0) { try { - wait(); + lock.wait(); } catch (InterruptedException ie) { - try { - Thread.currentThread().interrupt(); - } catch (SecurityException ignore) { - } + if (!(Thread.currentThread() instanceof + ForkJoinWorkerThread)) + wasInterrupted = true; } } else - notifyAll(); + lock.notifyAll(); } } } } /** - * Unlocks and signals any thread waiting for plock. Called only - * when CAS of seq value for unlock fails. + * Unlocks and sets runState to newRunState. + * + * @param oldRunState a value returned from lockRunState + * @param newRunState the next value (must have lock bit clear). */ - private void releasePlock(int ps) { - plock = ps; - synchronized (this) { notifyAll(); } - } - - /** - * Tries to create and start one worker if fewer than target - * parallelism level exist. Adjusts counts etc on failure. - */ - private void tryAddWorker() { - long c; int u, e; - while ((u = (int)((c = ctl) >>> 32)) < 0 && - (u & SHORT_SIGN) != 0 && (e = (int)c) >= 0) { - long nc = ((long)(((u + UTC_UNIT) & UTC_MASK) | - ((u + UAC_UNIT) & UAC_MASK)) << 32) | (long)e; - if (U.compareAndSwapLong(this, CTL, c, nc)) { - ForkJoinWorkerThreadFactory fac; - Throwable ex = null; - ForkJoinWorkerThread wt = null; - try { - if ((fac = factory) != null && - (wt = fac.newThread(this)) != null) { - wt.start(); - break; - } - } catch (Throwable rex) { - ex = rex; - } - deregisterWorker(wt, ex); - break; - } + private void unlockRunState(int oldRunState, int newRunState) { + if (!U.compareAndSwapInt(this, RUNSTATE, oldRunState, newRunState)) { + Object lock = stealCounter; + runState = newRunState; // clears RSIGNAL bit + if (lock != null) + synchronized (lock) { lock.notifyAll(); } } } - // Registering and deregistering workers + // Creating, registering and deregistering workers /** - * Callback from ForkJoinWorkerThread to establish and record its - * WorkQueue. To avoid scanning bias due to packing entries in - * front of the workQueues array, we treat the array as a simple - * power-of-two hash table using per-thread seed as hash, - * expanding as needed. + * Tries to construct and start one worker. Assumes that total + * count has already been incremented as a reservation. Invokes + * deregisterWorker on any failure. + * + * @return true if successful + */ + private boolean createWorker() { + ForkJoinWorkerThreadFactory fac = factory; + Throwable ex = null; + ForkJoinWorkerThread wt = null; + try { + if (fac != null && (wt = fac.newThread(this)) != null) { + wt.start(); + return true; + } + } catch (Throwable rex) { + ex = rex; + } + deregisterWorker(wt, ex); + return false; + } + + /** + * Tries to add one worker, incrementing ctl counts before doing + * so, relying on createWorker to back out on failure. + * + * @param c incoming ctl value, with total count negative and no + * idle workers. On CAS failure, c is refreshed and retried if + * this holds (otherwise, a new worker is not needed). + */ + private void tryAddWorker(long c) { + boolean add = false; + do { + long nc = ((AC_MASK & (c + AC_UNIT)) | + (TC_MASK & (c + TC_UNIT))); + if (ctl == c) { + int rs, stop; // check if terminating + if ((stop = (rs = lockRunState()) & STOP) == 0) + add = U.compareAndSwapLong(this, CTL, c, nc); + unlockRunState(rs, rs & ~RSLOCK); + if (stop != 0) + break; + if (add) { + createWorker(); + break; + } + } + } while (((c = ctl) & ADD_WORKER) != 0L && (int)c == 0); + } + + /** + * Callback from ForkJoinWorkerThread constructor to establish and + * record its WorkQueue. * * @param wt the worker thread * @return the worker's queue */ final WorkQueue registerWorker(ForkJoinWorkerThread wt) { - UncaughtExceptionHandler handler; WorkQueue[] ws; int s, ps; - wt.setDaemon(true); + UncaughtExceptionHandler handler; + wt.setDaemon(true); // configure thread if ((handler = ueh) != null) wt.setUncaughtExceptionHandler(handler); - do {} while (!U.compareAndSwapInt(this, INDEXSEED, s = indexSeed, - s += SEED_INCREMENT) || - s == 0); // skip 0 - WorkQueue w = new WorkQueue(this, wt, mode, s); - if (((ps = plock) & PL_LOCK) != 0 || - !U.compareAndSwapInt(this, PLOCK, ps, ps += PL_LOCK)) - ps = acquirePlock(); - int nps = (ps & SHUTDOWN) | ((ps + PL_LOCK) & ~SHUTDOWN); + WorkQueue w = new WorkQueue(this, wt); + int i = 0; // assign a pool index + int mode = config & MODE_MASK; + int rs = lockRunState(); try { - if ((ws = workQueues) != null) { // skip if shutting down - int n = ws.length, m = n - 1; - int r = (s << 1) | 1; // use odd-numbered indices - if (ws[r &= m] != null) { // collision - int probes = 0; // step by approx half size + WorkQueue[] ws; int n; // skip if no array + if ((ws = workQueues) != null && (n = ws.length) > 0) { + int s = indexSeed += SEED_INCREMENT; // unlikely to collide + int m = n - 1; + i = ((s << 1) | 1) & m; // odd-numbered indices + if (ws[i] != null) { // collision + int probes = 0; // step by approx half n int step = (n <= 4) ? 2 : ((n >>> 1) & EVENMASK) + 2; - while (ws[r = (r + step) & m] != null) { + while (ws[i = (i + step) & m] != null) { if (++probes >= n) { workQueues = ws = Arrays.copyOf(ws, n <<= 1); m = n - 1; @@ -1387,15 +1556,15 @@ public class ForkJoinPool extends AbstractExecutorService { } } } - w.poolIndex = (short)r; - w.eventCount = r; // volatile write orders - ws[r] = w; + w.hint = s; // use as random seed + w.config = i | mode; + w.scanState = i; // publication fence + ws[i] = w; } } finally { - if (!U.compareAndSwapInt(this, PLOCK, ps, nps)) - releasePlock(nps); + unlockRunState(rs, rs & ~RSLOCK); } - wt.setName(workerNamePrefix.concat(Integer.toString(w.poolIndex >>> 1))); + wt.setName(workerNamePrefix.concat(Integer.toString(i >>> 1))); return w; } @@ -1411,384 +1580,322 @@ public class ForkJoinPool extends AbstractExecutorService { final void deregisterWorker(ForkJoinWorkerThread wt, Throwable ex) { WorkQueue w = null; if (wt != null && (w = wt.workQueue) != null) { - int ps; - w.qlock = -1; // ensure set - U.getAndAddLong(this, STEALCOUNT, w.nsteals); // collect steals - if (((ps = plock) & PL_LOCK) != 0 || - !U.compareAndSwapInt(this, PLOCK, ps, ps += PL_LOCK)) - ps = acquirePlock(); - int nps = (ps & SHUTDOWN) | ((ps + PL_LOCK) & ~SHUTDOWN); - try { - int idx = w.poolIndex; - WorkQueue[] ws = workQueues; - if (ws != null && idx >= 0 && idx < ws.length && ws[idx] == w) - ws[idx] = null; - } finally { - if (!U.compareAndSwapInt(this, PLOCK, ps, nps)) - releasePlock(nps); - } + WorkQueue[] ws; // remove index from array + int idx = w.config & SMASK; + int rs = lockRunState(); + if ((ws = workQueues) != null && ws.length > idx && ws[idx] == w) + ws[idx] = null; + unlockRunState(rs, rs & ~RSLOCK); } - - long c; // adjust ctl counts + long c; // decrement counts do {} while (!U.compareAndSwapLong - (this, CTL, c = ctl, (((c - AC_UNIT) & AC_MASK) | - ((c - TC_UNIT) & TC_MASK) | - (c & ~(AC_MASK|TC_MASK))))); - - if (!tryTerminate(false, false) && w != null && w.array != null) { - w.cancelAll(); // cancel remaining tasks - WorkQueue[] ws; WorkQueue v; Thread p; int u, i, e; - while ((u = (int)((c = ctl) >>> 32)) < 0 && (e = (int)c) >= 0) { - if (e > 0) { // activate or create replacement - if ((ws = workQueues) == null || - (i = e & SMASK) >= ws.length || - (v = ws[i]) == null) - break; - long nc = (((long)(v.nextWait & E_MASK)) | - ((long)(u + UAC_UNIT) << 32)); - if (v.eventCount != (e | INT_SIGN)) - break; - if (U.compareAndSwapLong(this, CTL, c, nc)) { - v.eventCount = (e + E_SEQ) & E_MASK; - if ((p = v.parker) != null) - U.unpark(p); - break; - } - } - else { - if ((short)u < 0) - tryAddWorker(); - break; - } - } + (this, CTL, c = ctl, ((AC_MASK & (c - AC_UNIT)) | + (TC_MASK & (c - TC_UNIT)) | + (SP_MASK & c)))); + if (w != null) { + w.qlock = -1; // ensure set + w.transferStealCount(this); + w.cancelAll(); // cancel remaining tasks } - if (ex == null) // help clean refs on way out + for (;;) { // possibly replace + WorkQueue[] ws; int m, sp; + if (tryTerminate(false, false) || w == null || w.array == null || + (runState & STOP) != 0 || (ws = workQueues) == null || + (m = ws.length - 1) < 0) // already terminating + break; + if ((sp = (int)(c = ctl)) != 0) { // wake up replacement + if (tryRelease(c, ws[sp & m], AC_UNIT)) + break; + } + else if (ex != null && (c & ADD_WORKER) != 0L) { + tryAddWorker(c); // create replacement + break; + } + else // don't need replacement + break; + } + if (ex == null) // help clean on way out ForkJoinTask.helpExpungeStaleExceptions(); - else // rethrow + else // rethrow ForkJoinTask.rethrow(ex); } - // Submissions - - /** - * Unless shutting down, adds the given task to a submission queue - * at submitter's current queue index (modulo submission - * range). Only the most common path is directly handled in this - * method. All others are relayed to fullExternalPush. - * - * @param task the task. Caller must ensure non-null. - */ - final void externalPush(ForkJoinTask task) { - WorkQueue q; int m, s, n, am; ForkJoinTask[] a; - int r = ThreadLocalRandom.getProbe(); - int ps = plock; - WorkQueue[] ws = workQueues; - if (ps > 0 && ws != null && (m = (ws.length - 1)) >= 0 && - (q = ws[m & r & SQMASK]) != null && r != 0 && - U.compareAndSwapInt(q, QLOCK, 0, 1)) { // lock - if ((a = q.array) != null && - (am = a.length - 1) > (n = (s = q.top) - q.base)) { - int j = ((am & s) << ASHIFT) + ABASE; - U.putOrderedObject(a, j, task); - q.top = s + 1; // push on to deque - q.qlock = 0; - if (n <= 1) - signalWork(ws, q); - return; - } - q.qlock = 0; - } - fullExternalPush(task); - } - - /** - * Full version of externalPush. This method is called, among - * other times, upon the first submission of the first task to the - * pool, so must perform secondary initialization. It also - * detects first submission by an external thread by looking up - * its ThreadLocal, and creates a new shared queue if the one at - * index if empty or contended. The plock lock body must be - * exception-free (so no try/finally) so we optimistically - * allocate new queues outside the lock and throw them away if - * (very rarely) not needed. - * - * Secondary initialization occurs when plock is zero, to create - * workQueue array and set plock to a valid value. This lock body - * must also be exception-free. Because the plock seq value can - * eventually wrap around zero, this method harmlessly fails to - * reinitialize if workQueues exists, while still advancing plock. - */ - private void fullExternalPush(ForkJoinTask task) { - int r; - if ((r = ThreadLocalRandom.getProbe()) == 0) { - ThreadLocalRandom.localInit(); - r = ThreadLocalRandom.getProbe(); - } - for (;;) { - WorkQueue[] ws; WorkQueue q; int ps, m, k; - boolean move = false; - if ((ps = plock) < 0) - throw new RejectedExecutionException(); - else if (ps == 0 || (ws = workQueues) == null || - (m = ws.length - 1) < 0) { // initialize workQueues - int p = parallelism; // find power of two table size - int n = (p > 1) ? p - 1 : 1; // ensure at least 2 slots - n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; - n |= n >>> 8; n |= n >>> 16; n = (n + 1) << 1; - WorkQueue[] nws = ((ws = workQueues) == null || ws.length == 0 ? - new WorkQueue[n] : null); - if (((ps = plock) & PL_LOCK) != 0 || - !U.compareAndSwapInt(this, PLOCK, ps, ps += PL_LOCK)) - ps = acquirePlock(); - if (((ws = workQueues) == null || ws.length == 0) && nws != null) - workQueues = nws; - int nps = (ps & SHUTDOWN) | ((ps + PL_LOCK) & ~SHUTDOWN); - if (!U.compareAndSwapInt(this, PLOCK, ps, nps)) - releasePlock(nps); - } - else if ((q = ws[k = r & m & SQMASK]) != null) { - if (q.qlock == 0 && U.compareAndSwapInt(q, QLOCK, 0, 1)) { - ForkJoinTask[] a = q.array; - int s = q.top; - boolean submitted = false; - try { // locked version of push - if ((a != null && a.length > s + 1 - q.base) || - (a = q.growArray()) != null) { // must presize - int j = (((a.length - 1) & s) << ASHIFT) + ABASE; - U.putOrderedObject(a, j, task); - q.top = s + 1; - submitted = true; - } - } finally { - q.qlock = 0; // unlock - } - if (submitted) { - signalWork(ws, q); - return; - } - } - move = true; // move on failure - } - else if (((ps = plock) & PL_LOCK) == 0) { // create new queue - q = new WorkQueue(this, null, SHARED_QUEUE, r); - q.poolIndex = (short)k; - if (((ps = plock) & PL_LOCK) != 0 || - !U.compareAndSwapInt(this, PLOCK, ps, ps += PL_LOCK)) - ps = acquirePlock(); - if ((ws = workQueues) != null && k < ws.length && ws[k] == null) - ws[k] = q; - int nps = (ps & SHUTDOWN) | ((ps + PL_LOCK) & ~SHUTDOWN); - if (!U.compareAndSwapInt(this, PLOCK, ps, nps)) - releasePlock(nps); - } - else - move = true; // move if busy - if (move) - r = ThreadLocalRandom.advanceProbe(r); - } - } - - // Maintaining ctl counts - - /** - * Increments active count; mainly called upon return from blocking. - */ - final void incrementActiveCount() { - long c; - do {} while (!U.compareAndSwapLong - (this, CTL, c = ctl, ((c & ~AC_MASK) | - ((c & AC_MASK) + AC_UNIT)))); - } + // Signalling /** * Tries to create or activate a worker if too few are active. * * @param ws the worker array to use to find signallees - * @param q if non-null, the queue holding tasks to be processed + * @param q a WorkQueue --if non-null, don't retry if now empty */ final void signalWork(WorkQueue[] ws, WorkQueue q) { - for (;;) { - long c; int e, u, i; WorkQueue w; Thread p; - if ((u = (int)((c = ctl) >>> 32)) >= 0) - break; - if ((e = (int)c) <= 0) { - if ((short)u < 0) - tryAddWorker(); + long c; int sp, i; WorkQueue v; Thread p; + while ((c = ctl) < 0L) { // too few active + if ((sp = (int)c) == 0) { // no idle workers + if ((c & ADD_WORKER) != 0L) // too few workers + tryAddWorker(c); break; } - if (ws == null || ws.length <= (i = e & SMASK) || - (w = ws[i]) == null) + if (ws == null) // unstarted/terminated break; - long nc = (((long)(w.nextWait & E_MASK)) | - ((long)(u + UAC_UNIT)) << 32); - int ne = (e + E_SEQ) & E_MASK; - if (w.eventCount == (e | INT_SIGN) && - U.compareAndSwapLong(this, CTL, c, nc)) { - w.eventCount = ne; - if ((p = w.parker) != null) + if (ws.length <= (i = sp & SMASK)) // terminated + break; + if ((v = ws[i]) == null) // terminating + break; + int vs = (sp + SS_SEQ) & ~INACTIVE; // next scanState + int d = sp - v.scanState; // screen CAS + long nc = (UC_MASK & (c + AC_UNIT)) | (SP_MASK & v.stackPred); + if (d == 0 && U.compareAndSwapLong(this, CTL, c, nc)) { + v.scanState = vs; // activate v + if ((p = v.parker) != null) U.unpark(p); break; } - if (q != null && q.base >= q.top) + if (q != null && q.base == q.top) // no more work break; } } + /** + * Signals and releases worker v if it is top of idle worker + * stack. This performs a one-shot version of signalWork only if + * there is (apparently) at least one idle worker. + * + * @param c incoming ctl value + * @param v if non-null, a worker + * @param inc the increment to active count (zero when compensating) + * @return true if successful + */ + private boolean tryRelease(long c, WorkQueue v, long inc) { + int sp = (int)c, vs = (sp + SS_SEQ) & ~INACTIVE; Thread p; + if (v != null && v.scanState == sp) { // v is at top of stack + long nc = (UC_MASK & (c + inc)) | (SP_MASK & v.stackPred); + if (U.compareAndSwapLong(this, CTL, c, nc)) { + v.scanState = vs; + if ((p = v.parker) != null) + U.unpark(p); + return true; + } + } + return false; + } + // Scanning for tasks /** * Top-level runloop for workers, called by ForkJoinWorkerThread.run. */ final void runWorker(WorkQueue w) { - w.growArray(); // allocate queue - for (int r = w.hint; scan(w, r) == 0; ) { + w.growArray(); // allocate queue + int seed = w.hint; // initially holds randomization hint + int r = (seed == 0) ? 1 : seed; // avoid 0 for xorShift + for (ForkJoinTask t;;) { + if ((t = scan(w, r)) != null) + w.runTask(t); + else if (!awaitWork(w, r)) + break; r ^= r << 13; r ^= r >>> 17; r ^= r << 5; // xorshift } } /** - * Scans for and, if found, runs one task, else possibly - * inactivates the worker. This method operates on single reads of - * volatile state and is designed to be re-invoked continuously, - * in part because it returns upon detecting inconsistencies, - * contention, or state changes that indicate possible success on - * re-invocation. - * - * The scan searches for tasks across queues starting at a random - * index, checking each at least twice. The scan terminates upon - * either finding a non-empty queue, or completing the sweep. If - * the worker is not inactivated, it takes and runs a task from - * this queue. Otherwise, if not activated, it tries to activate - * itself or some other worker by signalling. On failure to find a - * task, returns (for retry) if pool state may have changed during - * an empty scan, or tries to inactivate if active, else possibly - * blocks or terminates via method awaitWork. + * Scans for and tries to steal a top-level task. Scans start at a + * random location, randomly moving on apparent contention, + * otherwise continuing linearly until reaching two consecutive + * empty passes over all queues with the same checksum (summing + * each base index of each queue, that moves on each steal), at + * which point the worker tries to inactivate and then re-scans, + * attempting to re-activate (itself or some other worker) if + * finding a task; otherwise returning null to await work. Scans + * otherwise touch as little memory as possible, to reduce + * disruption on other scanning threads. * * @param w the worker (via its WorkQueue) * @param r a random seed - * @return worker qlock status if would have waited, else 0 + * @return a task, or null if none found */ - private final int scan(WorkQueue w, int r) { + private ForkJoinTask scan(WorkQueue w, int r) { WorkQueue[] ws; int m; - long c = ctl; // for consistency check - if ((ws = workQueues) != null && (m = ws.length - 1) >= 0 && w != null) { - for (int j = m + m + 1, ec = w.eventCount;;) { - WorkQueue q; int b, e; ForkJoinTask[] a; ForkJoinTask t; - if ((q = ws[(r - j) & m]) != null && - (b = q.base) - q.top < 0 && (a = q.array) != null) { - long i = (((a.length - 1) & b) << ASHIFT) + ABASE; - if ((t = ((ForkJoinTask) - U.getObjectVolatile(a, i))) != null) { - if (ec < 0) - helpRelease(c, ws, w, q, b); - else if (q.base == b && - U.compareAndSwapObject(a, i, t, null)) { - U.putOrderedInt(q, QBASE, b + 1); - if ((b + 1) - q.top < 0) - signalWork(ws, q); - w.runTask(t); + if ((ws = workQueues) != null && (m = ws.length - 1) > 0 && w != null) { + int ss = w.scanState; // initially non-negative + for (int origin = r & m, k = origin, oldSum = 0, checkSum = 0;;) { + WorkQueue q; ForkJoinTask[] a; ForkJoinTask t; + int b, n; long c; + if ((q = ws[k]) != null) { + if ((n = (b = q.base) - q.top) < 0 && + (a = q.array) != null) { // non-empty + long i = (((a.length - 1) & b) << ASHIFT) + ABASE; + if ((t = ((ForkJoinTask) + U.getObjectVolatile(a, i))) != null && + q.base == b) { + if (ss >= 0) { + if (U.compareAndSwapObject(a, i, t, null)) { + q.base = b + 1; + if (n < -1) // signal others + signalWork(ws, q); + return t; + } + } + else if (oldSum == 0 && // try to activate + w.scanState < 0) + tryRelease(c = ctl, ws[m & (int)c], AC_UNIT); } + if (ss < 0) // refresh + ss = w.scanState; + r ^= r << 1; r ^= r >>> 3; r ^= r << 10; + origin = k = r & m; // move and rescan + oldSum = checkSum = 0; + continue; } - break; + checkSum += b; } - else if (--j < 0) { - if ((ec | (e = (int)c)) < 0) // inactive or terminating - return awaitWork(w, c, ec); - else if (ctl == c) { // try to inactivate and enqueue - long nc = (long)ec | ((c - AC_UNIT) & (AC_MASK|TC_MASK)); - w.nextWait = e; - w.eventCount = ec | INT_SIGN; - if (!U.compareAndSwapLong(this, CTL, c, nc)) - w.eventCount = ec; // back out + if ((k = (k + 1) & m) == origin) { // continue until stable + if ((ss >= 0 || (ss == (ss = w.scanState))) && + oldSum == (oldSum = checkSum)) { + if (ss < 0 || w.qlock < 0) // already inactive + break; + int ns = ss | INACTIVE; // try to inactivate + long nc = ((SP_MASK & ns) | + (UC_MASK & ((c = ctl) - AC_UNIT))); + w.stackPred = (int)c; // hold prev stack top + U.putInt(w, QSCANSTATE, ns); + if (U.compareAndSwapLong(this, CTL, c, nc)) + ss = ns; + else + w.scanState = ss; // back out } - break; + checkSum = 0; } } } - return 0; + return null; } /** - * A continuation of scan(), possibly blocking or terminating - * worker w. Returns without blocking if pool state has apparently - * changed since last invocation. Also, if inactivating w has - * caused the pool to become quiescent, checks for pool + * Possibly blocks worker w waiting for a task to steal, or + * returns false if the worker should terminate. If inactivating + * w has caused the pool to become quiescent, checks for pool * termination, and, so long as this is not the only worker, waits - * for event for up to a given duration. On timeout, if ctl has - * not changed, terminates the worker, which will in turn wake up + * for up to a given duration. On timeout, if ctl has not + * changed, terminates the worker, which will in turn wake up * another worker to possibly repeat this process. * * @param w the calling worker - * @param c the ctl value on entry to scan - * @param ec the worker's eventCount on entry to scan + * @param r a random seed (for spins) + * @return false if the worker should terminate */ - private final int awaitWork(WorkQueue w, long c, int ec) { - int stat, ns; long parkTime, deadline; - if ((stat = w.qlock) >= 0 && w.eventCount == ec && ctl == c && - !Thread.interrupted()) { - int e = (int)c; - int u = (int)(c >>> 32); - int d = (u >> UAC_SHIFT) + parallelism; // active count - - if (e < 0 || (d <= 0 && tryTerminate(false, false))) - stat = w.qlock = -1; // pool is terminating - else if ((ns = w.nsteals) != 0) { // collect steals and retry - w.nsteals = 0; - U.getAndAddLong(this, STEALCOUNT, (long)ns); + private boolean awaitWork(WorkQueue w, int r) { + if (w == null || w.qlock < 0) // w is terminating + return false; + for (int pred = w.stackPred, spins = SPINS, ss;;) { + if ((ss = w.scanState) >= 0) + break; + else if (spins > 0) { + r ^= r << 6; r ^= r >>> 21; r ^= r << 7; + if (r >= 0 && --spins == 0) { // randomize spins + WorkQueue v; WorkQueue[] ws; int s, j; AtomicLong sc; + if (pred != 0 && (ws = workQueues) != null && + (j = pred & SMASK) < ws.length && + (v = ws[j]) != null && // see if pred parking + (v.parker == null || v.scanState >= 0)) + spins = SPINS; // continue spinning + } } - else { - long pc = ((d > 0 || ec != (e | INT_SIGN)) ? 0L : - ((long)(w.nextWait & E_MASK)) | // ctl to restore - ((long)(u + UAC_UNIT)) << 32); - if (pc != 0L) { // timed wait if last waiter - int dc = -(short)(c >>> TC_SHIFT); - parkTime = (dc < 0 ? FAST_IDLE_TIMEOUT: - (dc + 1) * IDLE_TIMEOUT); + else if (w.qlock < 0) // recheck after spins + return false; + else if (!Thread.interrupted()) { + long c, prevctl, parkTime, deadline; + int ac = (int)((c = ctl) >> AC_SHIFT) + (config & SMASK); + if ((ac <= 0 && tryTerminate(false, false)) || + (runState & STOP) != 0) // pool terminating + return false; + if (ac <= 0 && ss == (int)c) { // is last waiter + prevctl = (UC_MASK & (c + AC_UNIT)) | (SP_MASK & pred); + int t = (short)(c >>> TC_SHIFT); // shrink excess spares + if (t > 2 && U.compareAndSwapLong(this, CTL, c, prevctl)) + return false; // else use timed wait + parkTime = IDLE_TIMEOUT * ((t >= 0) ? 1 : 1 - t); deadline = System.nanoTime() + parkTime - TIMEOUT_SLOP; } else - parkTime = deadline = 0L; - if (w.eventCount == ec && ctl == c) { - Thread wt = Thread.currentThread(); - U.putObject(wt, PARKBLOCKER, this); - w.parker = wt; // emulate LockSupport.park - if (w.eventCount == ec && ctl == c) - U.park(false, parkTime); // must recheck before park - w.parker = null; - U.putObject(wt, PARKBLOCKER, null); - if (parkTime != 0L && ctl == c && - deadline - System.nanoTime() <= 0L && - U.compareAndSwapLong(this, CTL, c, pc)) - stat = w.qlock = -1; // shrink pool + prevctl = parkTime = deadline = 0L; + Thread wt = Thread.currentThread(); + U.putObject(wt, PARKBLOCKER, this); // emulate LockSupport + w.parker = wt; + if (w.scanState < 0 && ctl == c) // recheck before park + U.park(false, parkTime); + U.putOrderedObject(w, QPARKER, null); + U.putObject(wt, PARKBLOCKER, null); + if (w.scanState >= 0) + break; + if (parkTime != 0L && ctl == c && + deadline - System.nanoTime() <= 0L && + U.compareAndSwapLong(this, CTL, c, prevctl)) + return false; // shrink pool + } + } + return true; + } + + // Joining tasks + + /** + * Tries to steal and run tasks within the target's computation. + * Uses a variant of the top-level algorithm, restricted to tasks + * with the given task as ancestor: It prefers taking and running + * eligible tasks popped from the worker's own queue (via + * popCC). Otherwise it scans others, randomly moving on + * contention or execution, deciding to give up based on a + * checksum (via return codes frob pollAndExecCC). The maxTasks + * argument supports external usages; internal calls use zero, + * allowing unbounded steps (external calls trap non-positive + * values). + * + * @param w caller + * @param maxTasks if non-zero, the maximum number of other tasks to run + * @return task status on exit + */ + final int helpComplete(WorkQueue w, CountedCompleter task, + int maxTasks) { + WorkQueue[] ws; int s = 0, m; + if ((ws = workQueues) != null && (m = ws.length - 1) >= 0 && + task != null && w != null) { + int mode = w.config; // for popCC + int r = w.hint ^ w.top; // arbitrary seed for origin + int origin = r & m; // first queue to scan + int h = 1; // 1:ran, >1:contended, <0:hash + for (int k = origin, oldSum = 0, checkSum = 0;;) { + CountedCompleter p; WorkQueue q; + if ((s = task.status) < 0) + break; + if (h == 1 && (p = w.popCC(task, mode)) != null) { + p.doExec(); // run local task + if (maxTasks != 0 && --maxTasks == 0) + break; + origin = k; // reset + oldSum = checkSum = 0; + } + else { // poll other queues + if ((q = ws[k]) == null) + h = 0; + else if ((h = q.pollAndExecCC(task)) < 0) + checkSum += h; + if (h > 0) { + if (h == 1 && maxTasks != 0 && --maxTasks == 0) + break; + r ^= r << 13; r ^= r >>> 17; r ^= r << 5; // xorshift + origin = k = r & m; // move and restart + oldSum = checkSum = 0; + } + else if ((k = (k + 1) & m) == origin) { + if (oldSum == (oldSum = checkSum)) + break; + checkSum = 0; + } } } } - return stat; - } - - /** - * Possibly releases (signals) a worker. Called only from scan() - * when a worker with apparently inactive status finds a non-empty - * queue. This requires revalidating all of the associated state - * from caller. - */ - private final void helpRelease(long c, WorkQueue[] ws, WorkQueue w, - WorkQueue q, int b) { - WorkQueue v; int e, i; Thread p; - if (w != null && w.eventCount < 0 && (e = (int)c) > 0 && - ws != null && ws.length > (i = e & SMASK) && - (v = ws[i]) != null && ctl == c) { - long nc = (((long)(v.nextWait & E_MASK)) | - ((long)((int)(c >>> 32) + UAC_UNIT)) << 32); - int ne = (e + E_SEQ) & E_MASK; - if (q != null && q.base == b && w.eventCount < 0 && - v.eventCount == (e | INT_SIGN) && - U.compareAndSwapLong(this, CTL, c, nc)) { - v.eventCount = ne; - if ((p = v.parker) != null) - U.unpark(p); - } - } + return s; } /** @@ -1799,268 +1906,167 @@ public class ForkJoinPool extends AbstractExecutorService { * execute tasks from. The first call to this method upon a * waiting join will often entail scanning/search, (which is OK * because the joiner has nothing better to do), but this method - * leaves hints in workers to speed up subsequent calls. The - * implementation is very branchy to cope with potential - * inconsistencies or loops encountering chains that are stale, - * unknown, or so long that they are likely cyclic. + * leaves hints in workers to speed up subsequent calls. * - * @param joiner the joining worker + * @param w caller * @param task the task to join - * @return 0 if no progress can be made, negative if task - * known complete, else positive */ - private int tryHelpStealer(WorkQueue joiner, ForkJoinTask task) { - int stat = 0, steps = 0; // bound to avoid cycles - if (task != null && joiner != null && - joiner.base - joiner.top >= 0) { // hoist checks - restart: for (;;) { - ForkJoinTask subtask = task; // current target - for (WorkQueue j = joiner, v;;) { // v is stealer of subtask - WorkQueue[] ws; int m, s, h; - if ((s = task.status) < 0) { - stat = s; - break restart; - } - if ((ws = workQueues) == null || (m = ws.length - 1) <= 0) - break restart; // shutting down - if ((v = ws[h = (j.hint | 1) & m]) == null || - v.currentSteal != subtask) { - for (int origin = h;;) { // find stealer - if (((h = (h + 2) & m) & 15) == 1 && - (subtask.status < 0 || j.currentJoin != subtask)) - continue restart; // occasional staleness check - if ((v = ws[h]) != null && - v.currentSteal == subtask) { - j.hint = h; // save hint + private void helpStealer(WorkQueue w, ForkJoinTask task) { + WorkQueue[] ws = workQueues; + int oldSum = 0, checkSum, m; + if (ws != null && (m = ws.length - 1) >= 0 && w != null && + task != null) { + do { // restart point + checkSum = 0; // for stability check + ForkJoinTask subtask; + WorkQueue j = w, v; // v is subtask stealer + descent: for (subtask = task; subtask.status >= 0; ) { + for (int h = j.hint | 1, k = 0, i; ; k += 2) { + if (k > m) // can't find stealer + break descent; + if ((v = ws[i = (h + k) & m]) != null) { + if (v.currentSteal == subtask) { + j.hint = i; break; } - if (h == origin) - break restart; // cannot find stealer + checkSum += v.base; } } - for (;;) { // help stealer or descend to its stealer + for (;;) { // help v or descend ForkJoinTask[] a; int b; - if (subtask.status < 0) // surround probes with - continue restart; // consistency checks - if ((b = v.base) - v.top < 0 && (a = v.array) != null) { - int i = (((a.length - 1) & b) << ASHIFT) + ABASE; - ForkJoinTask t = - (ForkJoinTask)U.getObjectVolatile(a, i); - if (subtask.status < 0 || j.currentJoin != subtask || - v.currentSteal != subtask) - continue restart; // stale - stat = 1; // apparent progress - if (v.base == b) { - if (t == null) - break restart; - if (U.compareAndSwapObject(a, i, t, null)) { - U.putOrderedInt(v, QBASE, b + 1); - ForkJoinTask ps = joiner.currentSteal; - int jt = joiner.top; - do { - joiner.currentSteal = t; - t.doExec(); // clear local tasks too - } while (task.status >= 0 && - joiner.top != jt && - (t = joiner.pop()) != null); - joiner.currentSteal = ps; - break restart; - } - } + checkSum += (b = v.base); + ForkJoinTask next = v.currentJoin; + if (subtask.status < 0 || j.currentJoin != subtask || + v.currentSteal != subtask) // stale + break descent; + if (b - v.top >= 0 || (a = v.array) == null) { + if ((subtask = next) == null) + break descent; + j = v; + break; } - else { // empty -- try to descend - ForkJoinTask next = v.currentJoin; - if (subtask.status < 0 || j.currentJoin != subtask || - v.currentSteal != subtask) - continue restart; // stale - else if (next == null || ++steps == MAX_HELP) - break restart; // dead-end or maybe cyclic - else { - subtask = next; - j = v; - break; + int i = (((a.length - 1) & b) << ASHIFT) + ABASE; + ForkJoinTask t = ((ForkJoinTask) + U.getObjectVolatile(a, i)); + if (v.base == b) { + if (t == null) // stale + break descent; + if (U.compareAndSwapObject(a, i, t, null)) { + v.base = b + 1; + ForkJoinTask ps = w.currentSteal; + int top = w.top; + do { + U.putOrderedObject(w, QCURRENTSTEAL, t); + t.doExec(); // clear local tasks too + } while (task.status >= 0 && + w.top != top && + (t = w.pop()) != null); + U.putOrderedObject(w, QCURRENTSTEAL, ps); + if (w.base != w.top) + return; // can't further help } } } } - } + } while (task.status >= 0 && oldSum != (oldSum = checkSum)); } - return stat; - } - - /** - * Analog of tryHelpStealer for CountedCompleters. Tries to steal - * and run tasks within the target's computation. - * - * @param task the task to join - * @param maxTasks the maximum number of other tasks to run - */ - final int helpComplete(WorkQueue joiner, CountedCompleter task, - int maxTasks) { - WorkQueue[] ws; int m; - int s = 0; - if ((ws = workQueues) != null && (m = ws.length - 1) >= 0 && - joiner != null && task != null) { - int j = joiner.poolIndex; - int scans = m + m + 1; - long c = 0L; // for stability check - for (int k = scans; ; j += 2) { - WorkQueue q; - if ((s = task.status) < 0) - break; - else if (joiner.internalPopAndExecCC(task)) { - if (--maxTasks <= 0) { - s = task.status; - break; - } - k = scans; - } - else if ((s = task.status) < 0) - break; - else if ((q = ws[j & m]) != null && q.pollAndExecCC(task)) { - if (--maxTasks <= 0) { - s = task.status; - break; - } - k = scans; - } - else if (--k < 0) { - if (c == (c = ctl)) - break; - k = scans; - } - } - } - return s; } /** * Tries to decrement active count (sometimes implicitly) and * possibly release or create a compensating worker in preparation - * for blocking. Fails on contention or termination. Otherwise, - * adds a new thread if no idle workers are available and pool - * may become starved. + * for blocking. Returns false (retryable by caller), on + * contention, detected staleness, instability, or termination. * - * @param c the assumed ctl value + * @param w caller */ - final boolean tryCompensate(long c) { - WorkQueue[] ws = workQueues; - int pc = parallelism, e = (int)c, m, tc; - if (ws != null && (m = ws.length - 1) >= 0 && e >= 0 && ctl == c) { - WorkQueue w = ws[e & m]; - if (e != 0 && w != null) { - Thread p; - long nc = ((long)(w.nextWait & E_MASK) | - (c & (AC_MASK|TC_MASK))); - int ne = (e + E_SEQ) & E_MASK; - if (w.eventCount == (e | INT_SIGN) && - U.compareAndSwapLong(this, CTL, c, nc)) { - w.eventCount = ne; - if ((p = w.parker) != null) - U.unpark(p); - return true; // replace with idle worker + private boolean tryCompensate(WorkQueue w) { + boolean canBlock; + WorkQueue[] ws; long c; int m, pc, sp; + if (w == null || w.qlock < 0 || // caller terminating + (ws = workQueues) == null || (m = ws.length - 1) <= 0 || + (pc = config & SMASK) == 0) // parallelism disabled + canBlock = false; + else if ((sp = (int)(c = ctl)) != 0) // release idle worker + canBlock = tryRelease(c, ws[sp & m], 0L); + else { + int ac = (int)(c >> AC_SHIFT) + pc; + int tc = (short)(c >> TC_SHIFT) + pc; + int nbusy = 0; // validate saturation + for (int i = 0; i <= m; ++i) { // two passes of odd indices + WorkQueue v; + if ((v = ws[((i << 1) | 1) & m]) != null) { + if ((v.scanState & SCANNING) != 0) + break; + ++nbusy; } } - else if ((tc = (short)(c >>> TC_SHIFT)) >= 0 && - (int)(c >> AC_SHIFT) + pc > 1) { - long nc = ((c - AC_UNIT) & AC_MASK) | (c & ~AC_MASK); - if (U.compareAndSwapLong(this, CTL, c, nc)) - return true; // no compensation + if (nbusy != (tc << 1) || ctl != c) + canBlock = false; // unstable or stale + else if (tc >= pc && ac > 1 && w.isEmpty()) { + long nc = ((AC_MASK & (c - AC_UNIT)) | + (~AC_MASK & c)); // uncompensated + canBlock = U.compareAndSwapLong(this, CTL, c, nc); } - else if (tc + pc < MAX_CAP) { - long nc = ((c + TC_UNIT) & TC_MASK) | (c & ~TC_MASK); - if (U.compareAndSwapLong(this, CTL, c, nc)) { - ForkJoinWorkerThreadFactory fac; - Throwable ex = null; - ForkJoinWorkerThread wt = null; - try { - if ((fac = factory) != null && - (wt = fac.newThread(this)) != null) { - wt.start(); - return true; - } - } catch (Throwable rex) { - ex = rex; - } - deregisterWorker(wt, ex); // clean up and return false - } + else if (tc >= MAX_CAP || + (this == common && tc >= pc + commonMaxSpares)) + throw new RejectedExecutionException( + "Thread limit exceeded replacing blocked worker"); + else { // similar to tryAddWorker + boolean add = false; int rs; // CAS within lock + long nc = ((AC_MASK & c) | + (TC_MASK & (c + TC_UNIT))); + if (((rs = lockRunState()) & STOP) == 0) + add = U.compareAndSwapLong(this, CTL, c, nc); + unlockRunState(rs, rs & ~RSLOCK); + canBlock = add && createWorker(); // throws on exception } } - return false; + return canBlock; } /** - * Helps and/or blocks until the given task is done. + * Helps and/or blocks until the given task is done or timeout. * - * @param joiner the joining worker + * @param w caller * @param task the task + * @param deadline for timed waits, if nonzero * @return task status on exit */ - final int awaitJoin(WorkQueue joiner, ForkJoinTask task) { + final int awaitJoin(WorkQueue w, ForkJoinTask task, long deadline) { int s = 0; - if (task != null && (s = task.status) >= 0 && joiner != null) { - ForkJoinTask prevJoin = joiner.currentJoin; - joiner.currentJoin = task; - do {} while (joiner.tryRemoveAndExec(task) && // process local tasks - (s = task.status) >= 0); - if (s >= 0 && (task instanceof CountedCompleter)) - s = helpComplete(joiner, (CountedCompleter)task, Integer.MAX_VALUE); - long cc = 0; // for stability checks - while (s >= 0 && (s = task.status) >= 0) { - if ((s = tryHelpStealer(joiner, task)) == 0 && - (s = task.status) >= 0) { - if (!tryCompensate(cc)) - cc = ctl; - else { - if (task.trySetSignal() && (s = task.status) >= 0) { - synchronized (task) { - if (task.status >= 0) { - try { // see ForkJoinTask - task.wait(); // for explanation - } catch (InterruptedException ie) { - } - } - else - task.notifyAll(); - } - } - long c; // reactivate - do {} while (!U.compareAndSwapLong - (this, CTL, c = ctl, - ((c & ~AC_MASK) | - ((c & AC_MASK) + AC_UNIT)))); - } + if (task != null && w != null) { + ForkJoinTask prevJoin = w.currentJoin; + U.putOrderedObject(w, QCURRENTJOIN, task); + CountedCompleter cc = (task instanceof CountedCompleter) ? + (CountedCompleter)task : null; + for (;;) { + if ((s = task.status) < 0) + break; + if (cc != null) + helpComplete(w, cc, 0); + else if (w.base == w.top || w.tryRemoveAndExec(task)) + helpStealer(w, task); + if ((s = task.status) < 0) + break; + long ms, ns; + if (deadline == 0L) + ms = 0L; + else if ((ns = deadline - System.nanoTime()) <= 0L) + break; + else if ((ms = TimeUnit.NANOSECONDS.toMillis(ns)) <= 0L) + ms = 1L; + if (tryCompensate(w)) { + task.internalWait(ms); + U.getAndAddLong(this, CTL, AC_UNIT); } } - joiner.currentJoin = prevJoin; + U.putOrderedObject(w, QCURRENTJOIN, prevJoin); } return s; } - /** - * Stripped-down variant of awaitJoin used by timed joins. Tries - * to help join only while there is continuous progress. (Caller - * will then enter a timed wait.) - * - * @param joiner the joining worker - * @param task the task - */ - final void helpJoinOnce(WorkQueue joiner, ForkJoinTask task) { - int s; - if (joiner != null && task != null && (s = task.status) >= 0) { - ForkJoinTask prevJoin = joiner.currentJoin; - joiner.currentJoin = task; - do {} while (joiner.tryRemoveAndExec(task) && // process local tasks - (s = task.status) >= 0); - if (s >= 0) { - if (task instanceof CountedCompleter) - helpComplete(joiner, (CountedCompleter)task, Integer.MAX_VALUE); - do {} while (task.status >= 0 && - tryHelpStealer(joiner, task) > 0); - } - joiner.currentJoin = prevJoin; - } - } + // Specialized scanning /** * Returns a (probably) non-empty steal queue, if one is found @@ -2068,19 +2074,24 @@ public class ForkJoinPool extends AbstractExecutorService { * caller if, by the time it tries to use the queue, it is empty. */ private WorkQueue findNonEmptyStealQueue() { + WorkQueue[] ws; int m; // one-shot version of scan loop int r = ThreadLocalRandom.nextSecondarySeed(); - for (;;) { - int ps = plock, m; WorkQueue[] ws; WorkQueue q; - if ((ws = workQueues) != null && (m = ws.length - 1) >= 0) { - for (int j = (m + 1) << 2; j >= 0; --j) { - if ((q = ws[(((r - j) << 1) | 1) & m]) != null && - q.base - q.top < 0) + if ((ws = workQueues) != null && (m = ws.length - 1) >= 0) { + for (int origin = r & m, k = origin, oldSum = 0, checkSum = 0;;) { + WorkQueue q; int b; + if ((q = ws[k]) != null) { + if ((b = q.base) - q.top < 0) return q; + checkSum += b; + } + if ((k = (k + 1) & m) == origin) { + if (oldSum == (oldSum = checkSum)) + break; + checkSum = 0; } } - if (plock == ps) - return null; } + return null; } /** @@ -2090,35 +2101,34 @@ public class ForkJoinPool extends AbstractExecutorService { * find tasks either. */ final void helpQuiescePool(WorkQueue w) { - ForkJoinTask ps = w.currentSteal; + ForkJoinTask ps = w.currentSteal; // save context for (boolean active = true;;) { long c; WorkQueue q; ForkJoinTask t; int b; - while ((t = w.nextLocalTask()) != null) - t.doExec(); + w.execLocalTasks(); // run locals before each scan if ((q = findNonEmptyStealQueue()) != null) { if (!active) { // re-establish active count active = true; - do {} while (!U.compareAndSwapLong - (this, CTL, c = ctl, - ((c & ~AC_MASK) | - ((c & AC_MASK) + AC_UNIT)))); + U.getAndAddLong(this, CTL, AC_UNIT); + } + if ((b = q.base) - q.top < 0 && (t = q.pollAt(b)) != null) { + U.putOrderedObject(w, QCURRENTSTEAL, t); + t.doExec(); + if (++w.nsteals < 0) + w.transferStealCount(this); } - if ((b = q.base) - q.top < 0 && (t = q.pollAt(b)) != null) - w.runTask(t); } else if (active) { // decrement active count without queuing - long nc = ((c = ctl) & ~AC_MASK) | ((c & AC_MASK) - AC_UNIT); - if ((int)(nc >> AC_SHIFT) + parallelism == 0) + long nc = (AC_MASK & ((c = ctl) - AC_UNIT)) | (~AC_MASK & c); + if ((int)(nc >> AC_SHIFT) + (config & SMASK) <= 0) break; // bypass decrement-then-increment if (U.compareAndSwapLong(this, CTL, c, nc)) active = false; } - else if ((int)((c = ctl) >> AC_SHIFT) + parallelism <= 0 && - U.compareAndSwapLong - (this, CTL, c, ((c & ~AC_MASK) | - ((c & AC_MASK) + AC_UNIT)))) + else if ((int)((c = ctl) >> AC_SHIFT) + (config & SMASK) <= 0 && + U.compareAndSwapLong(this, CTL, c, c + AC_UNIT)) break; } + U.putOrderedObject(w, QCURRENTSTEAL, ps); } /** @@ -2141,7 +2151,7 @@ public class ForkJoinPool extends AbstractExecutorService { /** * Returns a cheap heuristic guide for task partitioning when * programmers, frameworks, tools, or languages have little or no - * idea about task granularity. In essence by offering this + * idea about task granularity. In essence, by offering this * method, we ask users only about tradeoffs in overhead vs * expected throughput and its variance, rather than how finely to * partition tasks. @@ -2179,15 +2189,12 @@ public class ForkJoinPool extends AbstractExecutorService { * many of these by further considering the number of "idle" * threads, that are known to have zero queued tasks, so * compensate by a factor of (#idle/#active) threads. - * - * Note: The approximation of #busy workers as #active workers is - * not very good under current signalling scheme, and should be - * improved. */ static int getSurplusQueuedTaskCount() { Thread t; ForkJoinWorkerThread wt; ForkJoinPool pool; WorkQueue q; if (((t = Thread.currentThread()) instanceof ForkJoinWorkerThread)) { - int p = (pool = (wt = (ForkJoinWorkerThread)t).pool).parallelism; + int p = (pool = (wt = (ForkJoinWorkerThread)t).pool). + config & SMASK; int n = (q = wt.workQueue).top - q.base; int a = (int)(pool.ctl >> AC_SHIFT) + p; return n - (a > (p >>>= 1) ? 0 : @@ -2202,13 +2209,7 @@ public class ForkJoinPool extends AbstractExecutorService { // Termination /** - * Possibly initiates and/or completes termination. The caller - * triggering termination runs three passes through workQueues: - * (0) Setting termination status, followed by wakeups of queued - * workers; (1) cancelling all tasks; (2) interrupting lagging - * threads (likely in external tasks, but possibly also blocked in - * joins). Each pass repeats previous steps because of potential - * lagging thread creation. + * Possibly initiates and/or completes termination. * * @param now if true, unconditionally terminate, else only * if no work and no active workers @@ -2216,166 +2217,256 @@ public class ForkJoinPool extends AbstractExecutorService { * @return true if now terminating or terminated */ private boolean tryTerminate(boolean now, boolean enable) { - int ps; - if (this == common) // cannot shut down + int rs; + if (this == common) // cannot shut down return false; - if ((ps = plock) >= 0) { // enable by setting plock + if ((rs = runState) >= 0) { if (!enable) return false; - if ((ps & PL_LOCK) != 0 || - !U.compareAndSwapInt(this, PLOCK, ps, ps += PL_LOCK)) - ps = acquirePlock(); - int nps = ((ps + PL_LOCK) & ~SHUTDOWN) | SHUTDOWN; - if (!U.compareAndSwapInt(this, PLOCK, ps, nps)) - releasePlock(nps); + rs = lockRunState(); // enter SHUTDOWN phase + unlockRunState(rs, (rs & ~RSLOCK) | SHUTDOWN); } - for (long c;;) { - if (((c = ctl) & STOP_BIT) != 0) { // already terminating - if ((short)(c >>> TC_SHIFT) + parallelism <= 0) { - synchronized (this) { - notifyAll(); // signal when 0 workers - } - } - return true; - } - if (!now) { // check if idle & no tasks - WorkQueue[] ws; WorkQueue w; - if ((int)(c >> AC_SHIFT) + parallelism > 0) - return false; - if ((ws = workQueues) != null) { - for (int i = 0; i < ws.length; ++i) { - if ((w = ws[i]) != null && - (!w.isEmpty() || - ((i & 1) != 0 && w.eventCount >= 0))) { - signalWork(ws, w); - return false; + + if ((rs & STOP) == 0) { + if (!now) { // check quiescence + for (long oldSum = 0L;;) { // repeat until stable + WorkQueue[] ws; WorkQueue w; int m, b; long c; + long checkSum = ctl; + if ((int)(checkSum >> AC_SHIFT) + (config & SMASK) > 0) + return false; // still active workers + if ((ws = workQueues) == null || (m = ws.length - 1) <= 0) + break; // check queues + for (int i = 0; i <= m; ++i) { + if ((w = ws[i]) != null) { + if ((b = w.base) != w.top || w.scanState >= 0 || + w.currentSteal != null) { + tryRelease(c = ctl, ws[m & (int)c], AC_UNIT); + return false; // arrange for recheck + } + checkSum += b; + if ((i & 1) == 0) + w.qlock = -1; // try to disable external } } + if (oldSum == (oldSum = checkSum)) + break; } } - if (U.compareAndSwapLong(this, CTL, c, c | STOP_BIT)) { - for (int pass = 0; pass < 3; ++pass) { - WorkQueue[] ws; WorkQueue w; Thread wt; - if ((ws = workQueues) != null) { - int n = ws.length; - for (int i = 0; i < n; ++i) { - if ((w = ws[i]) != null) { - w.qlock = -1; - if (pass > 0) { - w.cancelAll(); - if (pass > 1 && (wt = w.owner) != null) { - if (!wt.isInterrupted()) { - try { - wt.interrupt(); - } catch (Throwable ignore) { - } - } - U.unpark(wt); - } + if ((runState & STOP) == 0) { + rs = lockRunState(); // enter STOP phase + unlockRunState(rs, (rs & ~RSLOCK) | STOP); + } + } + + int pass = 0; // 3 passes to help terminate + for (long oldSum = 0L;;) { // or until done or stable + WorkQueue[] ws; WorkQueue w; ForkJoinWorkerThread wt; int m; + long checkSum = ctl; + if ((short)(checkSum >>> TC_SHIFT) + (config & SMASK) <= 0 || + (ws = workQueues) == null || (m = ws.length - 1) <= 0) { + if ((runState & TERMINATED) == 0) { + rs = lockRunState(); // done + unlockRunState(rs, (rs & ~RSLOCK) | TERMINATED); + synchronized (this) { notifyAll(); } // for awaitTermination + } + break; + } + for (int i = 0; i <= m; ++i) { + if ((w = ws[i]) != null) { + checkSum += w.base; + w.qlock = -1; // try to disable + if (pass > 0) { + w.cancelAll(); // clear queue + if (pass > 1 && (wt = w.owner) != null) { + if (!wt.isInterrupted()) { + try { // unblock join + wt.interrupt(); + } catch (Throwable ignore) { } } - } - // Wake up workers parked on event queue - int i, e; long cc; Thread p; - while ((e = (int)(cc = ctl) & E_MASK) != 0 && - (i = e & SMASK) < n && i >= 0 && - (w = ws[i]) != null) { - long nc = ((long)(w.nextWait & E_MASK) | - ((cc + AC_UNIT) & AC_MASK) | - (cc & (TC_MASK|STOP_BIT))); - if (w.eventCount == (e | INT_SIGN) && - U.compareAndSwapLong(this, CTL, cc, nc)) { - w.eventCount = (e + E_SEQ) & E_MASK; - w.qlock = -1; - if ((p = w.parker) != null) - U.unpark(p); - } + if (w.scanState < 0) + U.unpark(wt); // wake up } } } } + if (checkSum != oldSum) { // unstable + oldSum = checkSum; + pass = 0; + } + else if (pass > 3 && pass > m) // can't further help + break; + else if (++pass > 1) { // try to dequeue + long c; int j = 0, sp; // bound attempts + while (j++ <= m && (sp = (int)(c = ctl)) != 0) + tryRelease(c, ws[sp & m], AC_UNIT); + } + } + return true; + } + + // External operations + + /** + * Full version of externalPush, handling uncommon cases, as well + * as performing secondary initialization upon the first + * submission of the first task to the pool. It also detects + * first submission by an external thread and creates a new shared + * queue if the one at index if empty or contended. + * + * @param task the task. Caller must ensure non-null. + */ + private void externalSubmit(ForkJoinTask task) { + int r; // initialize caller's probe + if ((r = ThreadLocalRandom.getProbe()) == 0) { + ThreadLocalRandom.localInit(); + r = ThreadLocalRandom.getProbe(); + } + for (;;) { + WorkQueue[] ws; WorkQueue q; int rs, m, k; + boolean move = false; + if ((rs = runState) < 0) { + tryTerminate(false, false); // help terminate + throw new RejectedExecutionException(); + } + else if ((rs & STARTED) == 0 || // initialize + ((ws = workQueues) == null || (m = ws.length - 1) < 0)) { + int ns = 0; + rs = lockRunState(); + try { + if ((rs & STARTED) == 0) { + U.compareAndSwapObject(this, STEALCOUNTER, null, + new AtomicLong()); + // create workQueues array with size a power of two + int p = config & SMASK; // ensure at least 2 slots + int n = (p > 1) ? p - 1 : 1; + n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; + n |= n >>> 8; n |= n >>> 16; n = (n + 1) << 1; + workQueues = new WorkQueue[n]; + ns = STARTED; + } + } finally { + unlockRunState(rs, (rs & ~RSLOCK) | ns); + } + } + else if ((q = ws[k = r & m & SQMASK]) != null) { + if (q.qlock == 0 && U.compareAndSwapInt(q, QLOCK, 0, 1)) { + ForkJoinTask[] a = q.array; + int s = q.top; + boolean submitted = false; // initial submission or resizing + try { // locked version of push + if ((a != null && a.length > s + 1 - q.base) || + (a = q.growArray()) != null) { + int j = (((a.length - 1) & s) << ASHIFT) + ABASE; + U.putOrderedObject(a, j, task); + U.putOrderedInt(q, QTOP, s + 1); + submitted = true; + } + } finally { + U.compareAndSwapInt(q, QLOCK, 1, 0); + } + if (submitted) { + signalWork(ws, q); + return; + } + } + move = true; // move on failure + } + else if (((rs = runState) & RSLOCK) == 0) { // create new queue + q = new WorkQueue(this, null); + q.hint = r; + q.config = k | SHARED_QUEUE; + q.scanState = INACTIVE; + rs = lockRunState(); // publish index + if (rs > 0 && (ws = workQueues) != null && + k < ws.length && ws[k] == null) + ws[k] = q; // else terminated + unlockRunState(rs, rs & ~RSLOCK); + } + else + move = true; // move if busy + if (move) + r = ThreadLocalRandom.advanceProbe(r); } } - // external operations on common pool + /** + * Tries to add the given task to a submission queue at + * submitter's current queue. Only the (vastly) most common path + * is directly handled in this method, while screening for need + * for externalSubmit. + * + * @param task the task. Caller must ensure non-null. + */ + final void externalPush(ForkJoinTask task) { + WorkQueue[] ws; WorkQueue q; int m; + int r = ThreadLocalRandom.getProbe(); + int rs = runState; + if ((ws = workQueues) != null && (m = (ws.length - 1)) >= 0 && + (q = ws[m & r & SQMASK]) != null && r != 0 && rs > 0 && + U.compareAndSwapInt(q, QLOCK, 0, 1)) { + ForkJoinTask[] a; int am, n, s; + if ((a = q.array) != null && + (am = a.length - 1) > (n = (s = q.top) - q.base)) { + int j = ((am & s) << ASHIFT) + ABASE; + U.putOrderedObject(a, j, task); + U.putOrderedInt(q, QTOP, s + 1); + U.putOrderedInt(q, QLOCK, 0); + if (n <= 1) + signalWork(ws, q); + return; + } + U.compareAndSwapInt(q, QLOCK, 1, 0); + } + externalSubmit(task); + } /** - * Returns common pool queue for a thread that has submitted at - * least one task. + * Returns common pool queue for an external thread. */ static WorkQueue commonSubmitterQueue() { - ForkJoinPool p; WorkQueue[] ws; int m, z; - return ((z = ThreadLocalRandom.getProbe()) != 0 && - (p = common) != null && - (ws = p.workQueues) != null && + ForkJoinPool p = common; + int r = ThreadLocalRandom.getProbe(); + WorkQueue[] ws; int m; + return (p != null && (ws = p.workQueues) != null && (m = ws.length - 1) >= 0) ? - ws[m & z & SQMASK] : null; + ws[m & r & SQMASK] : null; } /** - * Tries to pop the given task from submitter's queue in common pool. + * Performs tryUnpush for an external submitter: Finds queue, + * locks if apparently non-empty, validates upon locking, and + * adjusts top. Each check can fail but rarely does. */ final boolean tryExternalUnpush(ForkJoinTask task) { - WorkQueue joiner; ForkJoinTask[] a; int m, s; - WorkQueue[] ws = workQueues; - int z = ThreadLocalRandom.getProbe(); - boolean popped = false; - if (ws != null && (m = ws.length - 1) >= 0 && - (joiner = ws[z & m & SQMASK]) != null && - joiner.base != (s = joiner.top) && - (a = joiner.array) != null) { + WorkQueue[] ws; WorkQueue w; ForkJoinTask[] a; int m, s; + int r = ThreadLocalRandom.getProbe(); + if ((ws = workQueues) != null && (m = ws.length - 1) >= 0 && + (w = ws[m & r & SQMASK]) != null && + (a = w.array) != null && (s = w.top) != w.base) { long j = (((a.length - 1) & (s - 1)) << ASHIFT) + ABASE; - if (U.getObject(a, j) == task && - U.compareAndSwapInt(joiner, QLOCK, 0, 1)) { - if (joiner.top == s && joiner.array == a && + if (U.compareAndSwapInt(w, QLOCK, 0, 1)) { + if (w.top == s && w.array == a && + U.getObject(a, j) == task && U.compareAndSwapObject(a, j, task, null)) { - joiner.top = s - 1; - popped = true; + U.putOrderedInt(w, QTOP, s - 1); + U.putOrderedInt(w, QLOCK, 0); + return true; } - joiner.qlock = 0; + U.compareAndSwapInt(w, QLOCK, 1, 0); } } - return popped; + return false; } + /** + * Performs helpComplete for an external submitter. + */ final int externalHelpComplete(CountedCompleter task, int maxTasks) { - WorkQueue joiner; int m; - WorkQueue[] ws = workQueues; - int j = ThreadLocalRandom.getProbe(); - int s = 0; - if (ws != null && (m = ws.length - 1) >= 0 && - (joiner = ws[j & m & SQMASK]) != null && task != null) { - int scans = m + m + 1; - long c = 0L; // for stability check - j |= 1; // poll odd queues - for (int k = scans; ; j += 2) { - WorkQueue q; - if ((s = task.status) < 0) - break; - else if (joiner.externalPopAndExecCC(task)) { - if (--maxTasks <= 0) { - s = task.status; - break; - } - k = scans; - } - else if ((s = task.status) < 0) - break; - else if ((q = ws[j & m]) != null && q.pollAndExecCC(task)) { - if (--maxTasks <= 0) { - s = task.status; - break; - } - k = scans; - } - else if (--k < 0) { - if (c == (c = ctl)) - break; - k = scans; - } - } - } - return s; + WorkQueue[] ws; int n; + int r = ThreadLocalRandom.getProbe(); + return ((ws = workQueues) == null || (n = ws.length) == 0) ? 0 : + helpComplete(ws[(n - 1) & r & SQMASK], task, maxTasks); } // Exported methods @@ -2447,7 +2538,7 @@ public class ForkJoinPool extends AbstractExecutorService { this(checkParallelism(parallelism), checkFactory(factory), handler, - (asyncMode ? FIFO_QUEUE : LIFO_QUEUE), + asyncMode ? FIFO_QUEUE : LIFO_QUEUE, "ForkJoinPool-" + nextPoolId() + "-worker-"); checkPermission(); } @@ -2478,8 +2569,7 @@ public class ForkJoinPool extends AbstractExecutorService { this.workerNamePrefix = workerNamePrefix; this.factory = factory; this.ueh = handler; - this.mode = (short)mode; - this.parallelism = (short)parallelism; + this.config = (parallelism & SMASK) | mode; long np = (long)(-parallelism); // offset ctl counts this.ctl = ((np << AC_SHIFT) & AC_MASK) | ((np << TC_SHIFT) & TC_MASK); } @@ -2624,7 +2714,7 @@ public class ForkJoinPool extends AbstractExecutorService { // In previous versions of this class, this method constructed // a task to run ForkJoinTask.invokeAll, but now external // invocation of multiple tasks is at least as efficient. - ArrayList> futures = new ArrayList>(tasks.size()); + ArrayList> futures = new ArrayList<>(tasks.size()); boolean done = false; try { @@ -2670,7 +2760,7 @@ public class ForkJoinPool extends AbstractExecutorService { */ public int getParallelism() { int par; - return ((par = parallelism) > 0) ? par : 1; + return ((par = config & SMASK) > 0) ? par : 1; } /** @@ -2692,7 +2782,7 @@ public class ForkJoinPool extends AbstractExecutorService { * @return the number of worker threads */ public int getPoolSize() { - return parallelism + (short)(ctl >>> TC_SHIFT); + return (config & SMASK) + (short)(ctl >>> TC_SHIFT); } /** @@ -2702,7 +2792,7 @@ public class ForkJoinPool extends AbstractExecutorService { * @return {@code true} if this pool uses async mode */ public boolean getAsyncMode() { - return mode == FIFO_QUEUE; + return (config & FIFO_QUEUE) != 0; } /** @@ -2733,7 +2823,7 @@ public class ForkJoinPool extends AbstractExecutorService { * @return the number of active threads */ public int getActiveThreadCount() { - int r = parallelism + (int)(ctl >> AC_SHIFT); + int r = (config & SMASK) + (int)(ctl >> AC_SHIFT); return (r <= 0) ? 0 : r; // suppress momentarily negative values } @@ -2749,7 +2839,7 @@ public class ForkJoinPool extends AbstractExecutorService { * @return {@code true} if all threads are currently idle */ public boolean isQuiescent() { - return parallelism + (int)(ctl >> AC_SHIFT) <= 0; + return (config & SMASK) + (int)(ctl >> AC_SHIFT) <= 0; } /** @@ -2764,7 +2854,8 @@ public class ForkJoinPool extends AbstractExecutorService { * @return the number of steals */ public long getStealCount() { - long count = stealCount; + AtomicLong sc = stealCounter; + long count = (sc == null) ? 0L : sc.get(); WorkQueue[] ws; WorkQueue w; if ((ws = workQueues) != null) { for (int i = 1; i < ws.length; i += 2) { @@ -2894,7 +2985,8 @@ public class ForkJoinPool extends AbstractExecutorService { public String toString() { // Use a single pass through workQueues to collect counts long qt = 0L, qs = 0L; int rc = 0; - long st = stealCount; + AtomicLong sc = stealCounter; + long st = (sc == null) ? 0L : sc.get(); long c = ctl; WorkQueue[] ws; WorkQueue w; if ((ws = workQueues) != null) { @@ -2912,16 +3004,16 @@ public class ForkJoinPool extends AbstractExecutorService { } } } - int pc = parallelism; + int pc = (config & SMASK); int tc = pc + (short)(c >>> TC_SHIFT); int ac = pc + (int)(c >> AC_SHIFT); if (ac < 0) // ignore transient negative ac = 0; - String level; - if ((c & STOP_BIT) != 0) - level = (tc == 0) ? "Terminated" : "Terminating"; - else - level = plock < 0 ? "Shutting down" : "Running"; + int rs = runState; + String level = ((rs & TERMINATED) != 0 ? "Terminated" : + (rs & STOP) != 0 ? "Terminating" : + (rs & SHUTDOWN) != 0 ? "Shutting down" : + "Running"); return super.toString() + "[" + level + ", parallelism = " + pc + @@ -2983,9 +3075,7 @@ public class ForkJoinPool extends AbstractExecutorService { * @return {@code true} if all tasks have completed following shut down */ public boolean isTerminated() { - long c = ctl; - return ((c & STOP_BIT) != 0L && - (short)(c >>> TC_SHIFT) + parallelism <= 0); + return (runState & TERMINATED) != 0; } /** @@ -3002,9 +3092,8 @@ public class ForkJoinPool extends AbstractExecutorService { * @return {@code true} if terminating but not yet terminated */ public boolean isTerminating() { - long c = ctl; - return ((c & STOP_BIT) != 0L && - (short)(c >>> TC_SHIFT) + parallelism > 0); + int rs = runState; + return (rs & STOP) != 0 && (rs & TERMINATED) == 0; } /** @@ -3013,7 +3102,7 @@ public class ForkJoinPool extends AbstractExecutorService { * @return {@code true} if this pool has been shut down */ public boolean isShutdown() { - return plock < 0; + return (runState & SHUTDOWN) != 0; } /** @@ -3090,8 +3179,9 @@ public class ForkJoinPool extends AbstractExecutorService { } found = false; for (int j = (m + 1) << 2; j >= 0; --j) { - ForkJoinTask t; WorkQueue q; int b; - if ((q = ws[r++ & m]) != null && (b = q.base) - q.top < 0) { + ForkJoinTask t; WorkQueue q; int b, k; + if ((k = r++ & m) <= m && k >= 0 && (q = ws[k]) != null && + (b = q.base) - q.top < 0) { found = true; if ((t = q.pollAt(b)) != null) t.doExec(); @@ -3115,8 +3205,8 @@ public class ForkJoinPool extends AbstractExecutorService { * in {@link ForkJoinPool}s. * *

    A {@code ManagedBlocker} provides two methods. Method - * {@code isReleasable} must return {@code true} if blocking is - * not necessary. Method {@code block} blocks the current thread + * {@link #isReleasable} must return {@code true} if blocking is + * not necessary. Method {@link #block} blocks the current thread * if necessary (perhaps internally invoking {@code isReleasable} * before actually blocking). These actions are performed by any * thread invoking {@link ForkJoinPool#managedBlock(ManagedBlocker)}. @@ -3185,37 +3275,46 @@ public class ForkJoinPool extends AbstractExecutorService { } /** - * Blocks in accord with the given blocker. If the current thread - * is a {@link ForkJoinWorkerThread}, this method possibly - * arranges for a spare thread to be activated if necessary to - * ensure sufficient parallelism while the current thread is blocked. + * Runs the given possibly blocking task. When {@linkplain + * ForkJoinTask#inForkJoinPool() running in a ForkJoinPool}, this + * method possibly arranges for a spare thread to be activated if + * necessary to ensure sufficient parallelism while the current + * thread is blocked in {@link ManagedBlocker#block blocker.block()}. * - *

    If the caller is not a {@link ForkJoinTask}, this method is + *

    This method repeatedly calls {@code blocker.isReleasable()} and + * {@code blocker.block()} until either method returns {@code true}. + * Every call to {@code blocker.block()} is preceded by a call to + * {@code blocker.isReleasable()} that returned {@code false}. + * + *

    If not running in a ForkJoinPool, this method is * behaviorally equivalent to *

     {@code
          * while (!blocker.isReleasable())
          *   if (blocker.block())
    -     *     return;
    -     * }
    + * break;}
  • * - * If the caller is a {@code ForkJoinTask}, then the pool may - * first be expanded to ensure parallelism, and later adjusted. + * If running in a ForkJoinPool, the pool may first be expanded to + * ensure sufficient parallelism available during the call to + * {@code blocker.block()}. * - * @param blocker the blocker - * @throws InterruptedException if blocker.block did so + * @param blocker the blocker task + * @throws InterruptedException if {@code blocker.block()} did so */ public static void managedBlock(ManagedBlocker blocker) throws InterruptedException { + ForkJoinPool p; + ForkJoinWorkerThread wt; Thread t = Thread.currentThread(); - if (t instanceof ForkJoinWorkerThread) { - ForkJoinPool p = ((ForkJoinWorkerThread)t).pool; + if ((t instanceof ForkJoinWorkerThread) && + (p = (wt = (ForkJoinWorkerThread)t).pool) != null) { + WorkQueue w = wt.workQueue; while (!blocker.isReleasable()) { - if (p.tryCompensate(p.ctl)) { + if (p.tryCompensate(w)) { try { do {} while (!blocker.isReleasable() && !blocker.block()); } finally { - p.incrementActiveCount(); + U.getAndAddLong(p, CTL, AC_UNIT); } break; } @@ -3241,15 +3340,18 @@ public class ForkJoinPool extends AbstractExecutorService { // Unsafe mechanics private static final sun.misc.Unsafe U; + private static final int ABASE; + private static final int ASHIFT; private static final long CTL; + private static final long RUNSTATE; + private static final long STEALCOUNTER; private static final long PARKBLOCKER; - private static final int ABASE; - private static final int ASHIFT; - private static final long STEALCOUNT; - private static final long PLOCK; - private static final long INDEXSEED; - private static final long QBASE; + private static final long QTOP; private static final long QLOCK; + private static final long QSCANSTATE; + private static final long QPARKER; + private static final long QCURRENTSTEAL; + private static final long QCURRENTJOIN; static { // initialize field offsets for CAS etc @@ -3258,20 +3360,26 @@ public class ForkJoinPool extends AbstractExecutorService { Class k = ForkJoinPool.class; CTL = U.objectFieldOffset (k.getDeclaredField("ctl")); - STEALCOUNT = U.objectFieldOffset - (k.getDeclaredField("stealCount")); - PLOCK = U.objectFieldOffset - (k.getDeclaredField("plock")); - INDEXSEED = U.objectFieldOffset - (k.getDeclaredField("indexSeed")); + RUNSTATE = U.objectFieldOffset + (k.getDeclaredField("runState")); + STEALCOUNTER = U.objectFieldOffset + (k.getDeclaredField("stealCounter")); Class tk = Thread.class; PARKBLOCKER = U.objectFieldOffset (tk.getDeclaredField("parkBlocker")); Class wk = WorkQueue.class; - QBASE = U.objectFieldOffset - (wk.getDeclaredField("base")); + QTOP = U.objectFieldOffset + (wk.getDeclaredField("top")); QLOCK = U.objectFieldOffset (wk.getDeclaredField("qlock")); + QSCANSTATE = U.objectFieldOffset + (wk.getDeclaredField("scanState")); + QPARKER = U.objectFieldOffset + (wk.getDeclaredField("parker")); + QCURRENTSTEAL = U.objectFieldOffset + (wk.getDeclaredField("currentSteal")); + QCURRENTJOIN = U.objectFieldOffset + (wk.getDeclaredField("currentJoin")); Class ak = ForkJoinTask[].class; ABASE = U.arrayBaseOffset(ak); int scale = U.arrayIndexScale(ak); @@ -3282,6 +3390,7 @@ public class ForkJoinPool extends AbstractExecutorService { throw new Error(e); } + commonMaxSpares = DEFAULT_COMMON_MAX_SPARES; defaultForkJoinWorkerThreadFactory = new DefaultForkJoinWorkerThreadFactory(); modifyThreadPermission = new RuntimePermission("modifyThread"); @@ -3289,7 +3398,7 @@ public class ForkJoinPool extends AbstractExecutorService { common = java.security.AccessController.doPrivileged (new java.security.PrivilegedAction() { public ForkJoinPool run() { return makeCommonPool(); }}); - int par = common.parallelism; // report 1 even if threads disabled + int par = common.config & SMASK; // report 1 even if threads disabled commonParallelism = par > 0 ? par : 1; } @@ -3308,6 +3417,8 @@ public class ForkJoinPool extends AbstractExecutorService { ("java.util.concurrent.ForkJoinPool.common.threadFactory"); String hp = System.getProperty ("java.util.concurrent.ForkJoinPool.common.exceptionHandler"); + String mp = System.getProperty + ("java.util.concurrent.ForkJoinPool.common.maximumSpares"); if (pp != null) parallelism = Integer.parseInt(pp); if (fp != null) @@ -3316,6 +3427,8 @@ public class ForkJoinPool extends AbstractExecutorService { if (hp != null) handler = ((UncaughtExceptionHandler)ClassLoader. getSystemClassLoader().loadClass(hp).newInstance()); + if (mp != null) + commonMaxSpares = Integer.parseInt(mp); } catch (Exception ignore) { } if (factory == null) { diff --git a/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinTask.java b/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinTask.java index 936bfc23a33..4439c2407da 100644 --- a/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinTask.java +++ b/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinTask.java @@ -297,15 +297,22 @@ public abstract class ForkJoinTask implements Future, Serializable { } /** - * Tries to set SIGNAL status unless already completed. Used by - * ForkJoinPool. Other variants are directly incorporated into - * externalAwaitDone etc. + * If not done, sets SIGNAL status and performs Object.wait(timeout). + * This task may or may not be done on exit. Ignores interrupts. * - * @return true if successful + * @param timeout using Object.wait conventions. */ - final boolean trySetSignal() { - int s = status; - return s >= 0 && U.compareAndSwapInt(this, STATUS, s, s | SIGNAL); + final void internalWait(long timeout) { + int s; + if ((s = status) >= 0 && // force completer to issue notify + U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) { + synchronized (this) { + if (status >= 0) + try { wait(timeout); } catch (InterruptedException ie) { } + else + notifyAll(); + } + } } /** @@ -313,35 +320,29 @@ public abstract class ForkJoinTask implements Future, Serializable { * @return status upon completion */ private int externalAwaitDone() { - int s; - ForkJoinPool cp = ForkJoinPool.common; - if ((s = status) >= 0) { - if (cp != null) { - if (this instanceof CountedCompleter) - s = cp.externalHelpComplete((CountedCompleter)this, Integer.MAX_VALUE); - else if (cp.tryExternalUnpush(this)) - s = doExec(); - } - if (s >= 0 && (s = status) >= 0) { - boolean interrupted = false; - do { - if (U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) { - synchronized (this) { - if (status >= 0) { - try { - wait(); - } catch (InterruptedException ie) { - interrupted = true; - } + int s = ((this instanceof CountedCompleter) ? // try helping + ForkJoinPool.common.externalHelpComplete( + (CountedCompleter)this, 0) : + ForkJoinPool.common.tryExternalUnpush(this) ? doExec() : 0); + if (s >= 0 && (s = status) >= 0) { + boolean interrupted = false; + do { + if (U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) { + synchronized (this) { + if (status >= 0) { + try { + wait(0L); + } catch (InterruptedException ie) { + interrupted = true; } - else - notifyAll(); } + else + notifyAll(); } - } while ((s = status) >= 0); - if (interrupted) - Thread.currentThread().interrupt(); - } + } + } while ((s = status) >= 0); + if (interrupted) + Thread.currentThread().interrupt(); } return s; } @@ -351,22 +352,22 @@ public abstract class ForkJoinTask implements Future, Serializable { */ private int externalInterruptibleAwaitDone() throws InterruptedException { int s; - ForkJoinPool cp = ForkJoinPool.common; if (Thread.interrupted()) throw new InterruptedException(); - if ((s = status) >= 0 && cp != null) { - if (this instanceof CountedCompleter) - cp.externalHelpComplete((CountedCompleter)this, Integer.MAX_VALUE); - else if (cp.tryExternalUnpush(this)) - doExec(); - } - while ((s = status) >= 0) { - if (U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) { - synchronized (this) { - if (status >= 0) - wait(); - else - notifyAll(); + if ((s = status) >= 0 && + (s = ((this instanceof CountedCompleter) ? + ForkJoinPool.common.externalHelpComplete( + (CountedCompleter)this, 0) : + ForkJoinPool.common.tryExternalUnpush(this) ? doExec() : + 0)) >= 0) { + while ((s = status) >= 0) { + if (U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) { + synchronized (this) { + if (status >= 0) + wait(0L); + else + notifyAll(); + } } } } @@ -386,7 +387,7 @@ public abstract class ForkJoinTask implements Future, Serializable { ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) ? (w = (wt = (ForkJoinWorkerThread)t).workQueue). tryUnpush(this) && (s = doExec()) < 0 ? s : - wt.pool.awaitJoin(w, this) : + wt.pool.awaitJoin(w, this, 0L) : externalAwaitDone(); } @@ -399,7 +400,8 @@ public abstract class ForkJoinTask implements Future, Serializable { int s; Thread t; ForkJoinWorkerThread wt; return (s = doExec()) < 0 ? s : ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) ? - (wt = (ForkJoinWorkerThread)t).pool.awaitJoin(wt.workQueue, this) : + (wt = (ForkJoinWorkerThread)t).pool. + awaitJoin(wt.workQueue, this, 0L) : externalAwaitDone(); } @@ -577,7 +579,7 @@ public abstract class ForkJoinTask implements Future, Serializable { Throwable ex; if (e == null || (ex = e.ex) == null) return null; - if (false && e.thrower != Thread.currentThread().getId()) { + if (e.thrower != Thread.currentThread().getId()) { Class ec = ex.getClass(); try { Constructor noArgCtor = null; @@ -587,13 +589,17 @@ public abstract class ForkJoinTask implements Future, Serializable { Class[] ps = c.getParameterTypes(); if (ps.length == 0) noArgCtor = c; - else if (ps.length == 1 && ps[0] == Throwable.class) - return (Throwable)(c.newInstance(ex)); + else if (ps.length == 1 && ps[0] == Throwable.class) { + Throwable wx = (Throwable)c.newInstance(ex); + return (wx == null) ? ex : wx; + } } if (noArgCtor != null) { Throwable wx = (Throwable)(noArgCtor.newInstance()); - wx.initCause(ex); - return wx; + if (wx != null) { + wx.initCause(ex); + return wx; + } } } catch (Exception ignore) { } @@ -1017,67 +1023,40 @@ public abstract class ForkJoinTask implements Future, Serializable { */ public final V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { + int s; + long nanos = unit.toNanos(timeout); if (Thread.interrupted()) throw new InterruptedException(); - // Messy in part because we measure in nanosecs, but wait in millisecs - int s; long ms; - long ns = unit.toNanos(timeout); - ForkJoinPool cp; - if ((s = status) >= 0 && ns > 0L) { - long deadline = System.nanoTime() + ns; - ForkJoinPool p = null; - ForkJoinPool.WorkQueue w = null; + if ((s = status) >= 0 && nanos > 0L) { + long d = System.nanoTime() + nanos; + long deadline = (d == 0L) ? 1L : d; // avoid 0 Thread t = Thread.currentThread(); if (t instanceof ForkJoinWorkerThread) { ForkJoinWorkerThread wt = (ForkJoinWorkerThread)t; - p = wt.pool; - w = wt.workQueue; - p.helpJoinOnce(w, this); // no retries on failure + s = wt.pool.awaitJoin(wt.workQueue, this, deadline); } - else if ((cp = ForkJoinPool.common) != null) { - if (this instanceof CountedCompleter) - cp.externalHelpComplete((CountedCompleter)this, Integer.MAX_VALUE); - else if (cp.tryExternalUnpush(this)) - doExec(); - } - boolean canBlock = false; - boolean interrupted = false; - try { - while ((s = status) >= 0) { - if (w != null && w.qlock < 0) - cancelIgnoringExceptions(this); - else if (!canBlock) { - if (p == null || p.tryCompensate(p.ctl)) - canBlock = true; - } - else { - if ((ms = TimeUnit.NANOSECONDS.toMillis(ns)) > 0L && - U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) { - synchronized (this) { - if (status >= 0) { - try { - wait(ms); - } catch (InterruptedException ie) { - if (p == null) - interrupted = true; - } - } - else - notifyAll(); - } + else if ((s = ((this instanceof CountedCompleter) ? + ForkJoinPool.common.externalHelpComplete( + (CountedCompleter)this, 0) : + ForkJoinPool.common.tryExternalUnpush(this) ? + doExec() : 0)) >= 0) { + long ns, ms; // measure in nanosecs, but wait in millisecs + while ((s = status) >= 0 && + (ns = deadline - System.nanoTime()) > 0L) { + if ((ms = TimeUnit.NANOSECONDS.toMillis(ns)) > 0L && + U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) { + synchronized (this) { + if (status >= 0) + wait(ms); // OK to throw InterruptedException + else + notifyAll(); } - if ((s = status) < 0 || interrupted || - (ns = deadline - System.nanoTime()) <= 0L) - break; } } - } finally { - if (p != null && canBlock) - p.incrementActiveCount(); } - if (interrupted) - throw new InterruptedException(); } + if (s >= 0) + s = status; if ((s &= DONE_MASK) != NORMAL) { Throwable ex; if (s == CANCELLED) diff --git a/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinWorkerThread.java b/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinWorkerThread.java index 404c47cc01a..8723f0aac69 100644 --- a/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinWorkerThread.java +++ b/jdk/src/java.base/share/classes/java/util/concurrent/ForkJoinWorkerThread.java @@ -66,7 +66,7 @@ public class ForkJoinWorkerThread extends Thread { * owning thread. * * Support for (non-public) subclass InnocuousForkJoinWorkerThread - * requires that we break quite a lot of encapulation (via Unsafe) + * requires that we break quite a lot of encapsulation (via Unsafe) * both here and in the subclass to access and set Thread fields. */ @@ -118,7 +118,7 @@ public class ForkJoinWorkerThread extends Thread { * @return the index number */ public int getPoolIndex() { - return workQueue.poolIndex >>> 1; // ignore odd/even tag bit + return workQueue.getPoolIndex(); } /** @@ -171,7 +171,7 @@ public class ForkJoinWorkerThread extends Thread { } /** - * Erases ThreadLocals by nulling out Thread maps + * Erases ThreadLocals by nulling out Thread maps. */ final void eraseThreadLocals() { U.putObject(this, THREADLOCALS, null); @@ -246,8 +246,8 @@ public class ForkJoinWorkerThread extends Thread { /** * Returns a new group with the system ThreadGroup (the - * topmost, parentless group) as parent. Uses Unsafe to - * traverse Thread group and ThreadGroup parent fields. + * topmost, parent-less group) as parent. Uses Unsafe to + * traverse Thread.group and ThreadGroup.parent fields. */ private static ThreadGroup createThreadGroup() { try { @@ -274,4 +274,3 @@ public class ForkJoinWorkerThread extends Thread { } } - diff --git a/jdk/src/java.base/share/classes/sun/security/tools/keytool/CertAndKeyGen.java b/jdk/src/java.base/share/classes/sun/security/tools/keytool/CertAndKeyGen.java index a8a748cdb14..e2b4cfbb823 100644 --- a/jdk/src/java.base/share/classes/sun/security/tools/keytool/CertAndKeyGen.java +++ b/jdk/src/java.base/share/classes/sun/security/tools/keytool/CertAndKeyGen.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -158,8 +158,8 @@ public final class CertAndKeyGen { // publicKey's format must be X.509 otherwise // the whole CertGen part of this class is broken. if (!"X.509".equalsIgnoreCase(publicKey.getFormat())) { - throw new IllegalArgumentException("publicKey's is not X.509, but " - + publicKey.getFormat()); + throw new IllegalArgumentException("Public key format is " + + publicKey.getFormat() + ", must be X.509"); } } diff --git a/jdk/src/java.base/share/classes/sun/util/calendar/ZoneInfoFile.java b/jdk/src/java.base/share/classes/sun/util/calendar/ZoneInfoFile.java index 4c423b703a7..78d9f3ed6cb 100644 --- a/jdk/src/java.base/share/classes/sun/util/calendar/ZoneInfoFile.java +++ b/jdk/src/java.base/share/classes/sun/util/calendar/ZoneInfoFile.java @@ -615,7 +615,9 @@ public final class ZoneInfoFile { // startTime=86400000 <= 24 hours // This: startDayOfWeek=6 // startTime=0 - // Below is the workaround, it probably slows down everyone a little + // Similar workaround needs to be applied to Africa/Cairo and + // its endDayOfWeek and endTime + // Below is the workarounds, it probably slows down everyone a little if (params[2] == 6 && params[3] == 0 && (zoneId.equals("Asia/Amman") || zoneId.equals("Asia/Gaza") || @@ -623,6 +625,13 @@ public final class ZoneInfoFile { params[2] = 5; params[3] = 86400000; } + //endDayOfWeek and endTime workaround + if (params[7] == 6 && params[8] == 0 && + (zoneId.equals("Africa/Cairo"))) { + params[7] = 5; + params[8] = 86400000; + } + } else if (nTrans > 0) { // only do this if there is something in table already if (lastyear < LASTYEAR) { // ZoneInfo has an ending entry for 2037 diff --git a/jdk/src/java.base/share/classes/sun/util/cldr/CLDRLocaleProviderAdapter.java b/jdk/src/java.base/share/classes/sun/util/cldr/CLDRLocaleProviderAdapter.java index bda94f63bec..f267212f102 100644 --- a/jdk/src/java.base/share/classes/sun/util/cldr/CLDRLocaleProviderAdapter.java +++ b/jdk/src/java.base/share/classes/sun/util/cldr/CLDRLocaleProviderAdapter.java @@ -25,20 +25,20 @@ package sun.util.cldr; -import java.io.File; import java.security.AccessController; -import java.security.PrivilegedAction; +import java.security.PrivilegedActionException; +import java.security.PrivilegedExceptionAction; import java.text.spi.BreakIteratorProvider; import java.text.spi.CollatorProvider; import java.util.Collections; import java.util.HashSet; import java.util.Locale; -import java.util.ResourceBundle; +import java.util.ServiceLoader; import java.util.Set; import java.util.StringTokenizer; -import java.util.spi.TimeZoneNameProvider; import sun.util.locale.provider.JRELocaleProviderAdapter; import sun.util.locale.provider.LocaleProviderAdapter; +import sun.util.locale.provider.LocaleDataMetaInfo; /** * LocaleProviderAdapter implementation for the CLDR locale data. @@ -47,26 +47,31 @@ import sun.util.locale.provider.LocaleProviderAdapter; * @author Naoto Sato */ public class CLDRLocaleProviderAdapter extends JRELocaleProviderAdapter { - private static final String LOCALE_DATA_JAR_NAME = "cldrdata.jar"; + + private final LocaleDataMetaInfo metaInfo; public CLDRLocaleProviderAdapter() { - final String sep = File.separator; - String localeDataJar = java.security.AccessController.doPrivileged( - new sun.security.action.GetPropertyAction("java.home")) - + sep + "lib" + sep + "ext" + sep + LOCALE_DATA_JAR_NAME; - - // Peek at the installed extension directory to see if the jar file for - // CLDR resources is installed or not. - final File f = new File(localeDataJar); - boolean result = AccessController.doPrivileged( - new PrivilegedAction() { + try { + metaInfo = AccessController.doPrivileged(new PrivilegedExceptionAction() { @Override - public Boolean run() { - return f.exists(); + public LocaleDataMetaInfo run() { + for (LocaleDataMetaInfo ldmi : ServiceLoader.loadInstalled(LocaleDataMetaInfo.class)) { + if (ldmi.getType() == LocaleProviderAdapter.Type.CLDR) { + return ldmi; + } + } + return null; } }); - if (!result) { - throw new UnsupportedOperationException(); + } catch (Exception e) { + // Catch any exception, and fail gracefully as if CLDR locales do not exist. + // It's ok ignore it if something wrong happens because there always is the + // JRE or FALLBACK LocaleProviderAdapter that will do the right thing. + throw new UnsupportedOperationException(e); + } + + if (metaInfo == null) { + throw new UnsupportedOperationException("CLDR locale data could not be found."); } } @@ -91,7 +96,7 @@ public class CLDRLocaleProviderAdapter extends JRELocaleProviderAdapter { @Override public Locale[] getAvailableLocales() { - Set all = createLanguageTagSet("All"); + Set all = createLanguageTagSet("AvailableLocales"); Locale[] locs = new Locale[all.size()]; int index = 0; for (String tag : all) { @@ -102,11 +107,10 @@ public class CLDRLocaleProviderAdapter extends JRELocaleProviderAdapter { @Override protected Set createLanguageTagSet(String category) { - ResourceBundle rb = ResourceBundle.getBundle("sun.util.cldr.CLDRLocaleDataMetaInfo", Locale.ROOT); - if (rb.containsKey(category)) { + String supportedLocaleString = metaInfo.availableLanguageTags(category); + if (supportedLocaleString == null) { return Collections.emptySet(); } - String supportedLocaleString = rb.getString(category); Set tagset = new HashSet<>(); StringTokenizer tokens = new StringTokenizer(supportedLocaleString); while (tokens.hasMoreTokens()) { diff --git a/jdk/src/java.base/share/classes/sun/util/locale/provider/AuxLocaleProviderAdapter.java b/jdk/src/java.base/share/classes/sun/util/locale/provider/AuxLocaleProviderAdapter.java index 05ddd6e91d4..7ddcd0e3c61 100644 --- a/jdk/src/java.base/share/classes/sun/util/locale/provider/AuxLocaleProviderAdapter.java +++ b/jdk/src/java.base/share/classes/sun/util/locale/provider/AuxLocaleProviderAdapter.java @@ -56,7 +56,7 @@ public abstract class AuxLocaleProviderAdapter extends LocaleProviderAdapter { /** * SPI implementations map */ - private ConcurrentMap, LocaleServiceProvider> providersMap = + private final ConcurrentMap, LocaleServiceProvider> providersMap = new ConcurrentHashMap<>(); /** @@ -167,7 +167,6 @@ public abstract class AuxLocaleProviderAdapter extends LocaleProviderAdapter { avail.addAll(Arrays.asList(lsp.getAvailableLocales())); } } - availableLocales = avail.toArray(new Locale[0]); } // assuming caller won't mutate the array. @@ -178,7 +177,7 @@ public abstract class AuxLocaleProviderAdapter extends LocaleProviderAdapter { * A dummy locale service provider that indicates there is no * provider available */ - private static NullProvider NULL_PROVIDER = new NullProvider(); + private static final NullProvider NULL_PROVIDER = new NullProvider(); private static class NullProvider extends LocaleServiceProvider { @Override public Locale[] getAvailableLocales() { diff --git a/jdk/src/java.base/share/classes/sun/util/locale/provider/JRELocaleProviderAdapter.java b/jdk/src/java.base/share/classes/sun/util/locale/provider/JRELocaleProviderAdapter.java index f07d793a88d..efde2013320 100644 --- a/jdk/src/java.base/share/classes/sun/util/locale/provider/JRELocaleProviderAdapter.java +++ b/jdk/src/java.base/share/classes/sun/util/locale/provider/JRELocaleProviderAdapter.java @@ -25,9 +25,9 @@ package sun.util.locale.provider; -import java.io.File; import java.security.AccessController; -import java.security.PrivilegedAction; +import java.security.PrivilegedActionException; +import java.security.PrivilegedExceptionAction; import java.text.spi.BreakIteratorProvider; import java.text.spi.CollatorProvider; import java.text.spi.DateFormatProvider; @@ -37,6 +37,7 @@ import java.text.spi.NumberFormatProvider; import java.util.Collections; import java.util.HashSet; import java.util.Locale; +import java.util.ServiceLoader; import java.util.Set; import java.util.StringTokenizer; import java.util.concurrent.ConcurrentHashMap; @@ -58,8 +59,6 @@ import sun.util.spi.CalendarProvider; */ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements ResourceBundleBasedAdapter { - private static final String LOCALE_DATA_JAR_NAME = "localedata.jar"; - private final ConcurrentMap> langtagSets = new ConcurrentHashMap<>(); @@ -356,26 +355,56 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R } protected Set createLanguageTagSet(String category) { - String supportedLocaleString = LocaleDataMetaInfo.getSupportedLocaleString(category); + String supportedLocaleString = createSupportedLocaleString(category); if (supportedLocaleString == null) { return Collections.emptySet(); } Set tagset = new HashSet<>(); StringTokenizer tokens = new StringTokenizer(supportedLocaleString); while (tokens.hasMoreTokens()) { - String token = tokens.nextToken(); - if (token.equals("|")) { - if (isNonENLangSupported()) { - continue; - } - break; - } - tagset.add(token); + tagset.add(tokens.nextToken()); } return tagset; } + private static String createSupportedLocaleString(String category) { + // Directly call English tags, as we know it's in the base module. + String supportedLocaleString = EnLocaleDataMetaInfo.getSupportedLocaleString(category); + + // Use ServiceLoader to dynamically acquire installed locales' tags. + try { + String nonENTags = AccessController.doPrivileged(new PrivilegedExceptionAction() { + @Override + public String run() { + String tags = null; + for (LocaleDataMetaInfo ldmi : + ServiceLoader.loadInstalled(LocaleDataMetaInfo.class)) { + if (ldmi.getType() == LocaleProviderAdapter.Type.JRE) { + String t = ldmi.availableLanguageTags(category); + if (t != null) { + if (tags == null) { + tags = t; + } else { + tags += " " + t; + } + } + } + } + return tags; + } + }); + + if (nonENTags != null) { + supportedLocaleString += " " + nonENTags; + } + } catch (Exception e) { + // catch any exception, and ignore them as if non-EN locales do not exist. + } + + return supportedLocaleString; + } + /** * Lazy load available locales. */ @@ -387,27 +416,17 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R private static Locale[] createAvailableLocales() { /* - * Gets the locale string list from LocaleDataMetaInfo class and then + * Gets the locale string list from LocaleDataMetaInfo classes and then * contructs the Locale array and a set of language tags based on the * locale string returned above. */ - String supportedLocaleString = LocaleDataMetaInfo.getSupportedLocaleString("AvailableLocales"); + String supportedLocaleString = createSupportedLocaleString("AvailableLocales"); if (supportedLocaleString.length() == 0) { throw new InternalError("No available locales for JRE"); } - /* - * Look for "|" and construct a new locale string list. - */ - int barIndex = supportedLocaleString.indexOf('|'); - StringTokenizer localeStringTokenizer; - if (isNonENLangSupported()) { - localeStringTokenizer = new StringTokenizer(supportedLocaleString.substring(0, barIndex) - + supportedLocaleString.substring(barIndex + 1)); - } else { - localeStringTokenizer = new StringTokenizer(supportedLocaleString.substring(0, barIndex)); - } + StringTokenizer localeStringTokenizer = new StringTokenizer(supportedLocaleString); int length = localeStringTokenizer.countTokens(); Locale[] locales = new Locale[length + 1]; @@ -430,39 +449,4 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements R } return locales; } - - private static volatile Boolean isNonENSupported = null; - - /* - * Returns true if the non EN resources jar file exists in jre - * extension directory. @returns true if the jar file is there. Otherwise, - * returns false. - */ - private static boolean isNonENLangSupported() { - if (isNonENSupported == null) { - synchronized (JRELocaleProviderAdapter.class) { - if (isNonENSupported == null) { - final String sep = File.separator; - String localeDataJar = - java.security.AccessController.doPrivileged( - new sun.security.action.GetPropertyAction("java.home")) - + sep + "lib" + sep + "ext" + sep + LOCALE_DATA_JAR_NAME; - - /* - * Peek at the installed extension directory to see if - * localedata.jar is installed or not. - */ - final File f = new File(localeDataJar); - isNonENSupported = - AccessController.doPrivileged(new PrivilegedAction() { - @Override - public Boolean run() { - return f.exists(); } - }); - } - } - } - return isNonENSupported; - } -} diff --git a/jdk/src/java.base/share/classes/sun/util/locale/provider/LocaleDataMetaInfo-XLocales.java.template b/jdk/src/java.base/share/classes/sun/util/locale/provider/LocaleDataMetaInfo-XLocales.java.template index 52ac29de777..7509b602b6c 100644 --- a/jdk/src/java.base/share/classes/sun/util/locale/provider/LocaleDataMetaInfo-XLocales.java.template +++ b/jdk/src/java.base/share/classes/sun/util/locale/provider/LocaleDataMetaInfo-XLocales.java.template @@ -30,19 +30,17 @@ * each resource in sun.util.resources & sun.text.resources. * It is used to avoid loading non-existent localized resources so that * jar files won't be opened unnecessary to look up them. - * - * @since 1.6 */ -package sun.util.locale.provider; +package #Package#; import java.util.HashMap; +import java.util.Map; +import sun.util.locale.provider.LocaleDataMetaInfo; +import static sun.util.locale.provider.LocaleProviderAdapter.Type; +public class #Lang#LocaleDataMetaInfo implements LocaleDataMetaInfo { -public class LocaleDataMetaInfo { - - private static final HashMap resourceNameToLocales = - new HashMap(7); - + private static final Map resourceNameToLocales = new HashMap<>(9); static { /* During JDK build time, #XXX_YYY# will be replaced by a string contain all the locales @@ -52,38 +50,51 @@ public class LocaleDataMetaInfo { look up locale string such as "en" could be based on if it contains " en ". */ resourceNameToLocales.put("FormatData", - " #FormatData_ENLocales# | #FormatData_NonENLocales# "); + " #FormatData_Locales# "); resourceNameToLocales.put("CollationData", - " #CollationData_ENLocales# | #CollationData_NonENLocales# "); + " #CollationData_Locales# "); resourceNameToLocales.put("BreakIteratorInfo", - " #BreakIteratorInfo_ENLocales# | #BreakIteratorInfo_NonENLocales# "); + " #BreakIteratorInfo_Locales# "); resourceNameToLocales.put("BreakIteratorRules", - " #BreakIteratorRules_ENLocales# | #BreakIteratorRules_NonENLocales# "); + " #BreakIteratorRules_Locales# "); resourceNameToLocales.put("TimeZoneNames", - " #TimeZoneNames_ENLocales# | #TimeZoneNames_NonENLocales# "); + " #TimeZoneNames_Locales# "); resourceNameToLocales.put("LocaleNames", - " #LocaleNames_ENLocales# | #LocaleNames_NonENLocales# "); + " #LocaleNames_Locales# "); resourceNameToLocales.put("CurrencyNames", - " #CurrencyNames_ENLocales# | #CurrencyNames_NonENLocales# "); + " #CurrencyNames_Locales# "); resourceNameToLocales.put("CalendarData", - " #CalendarData_ENLocales# | #CalendarData_NonENLocales# "); + " #CalendarData_Locales# "); resourceNameToLocales.put("AvailableLocales", - " #AvailableLocales_ENLocales# | #AvailableLocales_NonENLocales# "); + " #AvailableLocales_Locales# "); } /* + * Gets the supported locales string based on the availability of + * locale data resource bundles for each resource name. + * * @param resourceName the resource name * @return the supported locale string for the passed in resource. */ public static String getSupportedLocaleString(String resourceName) { - return resourceNameToLocales.get(resourceName); + return resourceNameToLocales.getOrDefault(resourceName, ""); + } + + @Override + public Type getType() { + return Type.JRE; +} + + @Override + public String availableLanguageTags(String category) { + return getSupportedLocaleString(category); } } diff --git a/jdk/src/java.base/share/classes/sun/util/locale/provider/LocaleDataMetaInfo.java b/jdk/src/java.base/share/classes/sun/util/locale/provider/LocaleDataMetaInfo.java new file mode 100644 index 00000000000..149348f66d0 --- /dev/null +++ b/jdk/src/java.base/share/classes/sun/util/locale/provider/LocaleDataMetaInfo.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.util.locale.provider; + +/** + * LocaleData meta info SPI + * + * @author Naoto Sato + */ +public interface LocaleDataMetaInfo { + + /** + * Returns the type of LocaleProviderAdapter for which this LocaleData + * provides the data. + * @return type The type of the adapter. + */ + public LocaleProviderAdapter.Type getType(); + + /** + * Returns the string concatenation of the supported language tags in + * this LocaleData instance + * @param category category of the locale data. + * @return concatenated language tags, separated by a space. + */ + public String availableLanguageTags(String category); +} diff --git a/jdk/src/java.base/share/classes/sun/util/resources/LocaleData.java b/jdk/src/java.base/share/classes/sun/util/resources/LocaleData.java index 679baf6ebbb..75ee2f018ba 100644 --- a/jdk/src/java.base/share/classes/sun/util/resources/LocaleData.java +++ b/jdk/src/java.base/share/classes/sun/util/resources/LocaleData.java @@ -50,7 +50,6 @@ import java.util.MissingResourceException; import java.util.ResourceBundle; import java.util.Set; import sun.util.locale.provider.JRELocaleProviderAdapter; -import sun.util.locale.provider.LocaleDataMetaInfo; import sun.util.locale.provider.LocaleProviderAdapter; import static sun.util.locale.provider.LocaleProviderAdapter.Type.CLDR; import static sun.util.locale.provider.LocaleProviderAdapter.Type.JRE; diff --git a/jdk/src/java.base/share/classes/sun/util/resources/TimeZoneNames.java b/jdk/src/java.base/share/classes/sun/util/resources/TimeZoneNames.java index 298a233d850..9ab92c93620 100644 --- a/jdk/src/java.base/share/classes/sun/util/resources/TimeZoneNames.java +++ b/jdk/src/java.base/share/classes/sun/util/resources/TimeZoneNames.java @@ -47,9 +47,9 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { String ACT[] = new String[] {"Acre Time", "ACT", "Acre Summer Time", "ACST", "Acre Time", "ACT"}; - String ADELAIDE[] = new String[] {"Central Standard Time (South Australia)", "CST", - "Central Summer Time (South Australia)", "CST", - "Central Time (South Australia)", "CT"}; + String ADELAIDE[] = new String[] {"Australian Central Standard Time (South Australia)", "ACST", + "Australian Central Daylight Time (South Australia)", "ACDT", + "Australian Central Time (South Australia)", "ACT"}; String AGT[] = new String[] {"Argentine Time", "ART", "Argentine Summer Time", "ARST", "Argentine Time", "ART"}; @@ -71,12 +71,12 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { String BDT[] = new String[] {"Bangladesh Time", "BDT", "Bangladesh Summer Time", "BDST", "Bangladesh Time", "BDT"}; - String BRISBANE[] = new String[] {"Eastern Standard Time (Queensland)", "EST", - "Eastern Summer Time (Queensland)", "EST", - "Eastern Time (Queensland)", "ET"}; - String BROKEN_HILL[] = new String[] {"Central Standard Time (South Australia/New South Wales)", "CST", - "Central Summer Time (South Australia/New South Wales)", "CST", - "Central Time (South Australia/New South Wales)", "CT"}; + String BRISBANE[] = new String[] {"Australian Eastern Standard Time (Queensland)", "AEST", + "Australian Eastern Daylight Time (Queensland)", "AEDT", + "Australian Eastern Time (Queensland)", "AET"}; + String BROKEN_HILL[] = new String[] {"Australian Central Standard Time (South Australia/New South Wales)", "ACST", + "Australian Central Daylight Time (South Australia/New South Wales)", "ACDT", + "Australian Central Time (South Australia/New South Wales)", "ACT"}; String BRT[] = new String[] {"Brasilia Time", "BRT", "Brasilia Summer Time", "BRST", "Brasilia Time", "BRT"}; @@ -110,9 +110,9 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { String CUBA[] = new String[] {"Cuba Standard Time", "CST", "Cuba Daylight Time", "CDT", "Cuba Time", "CT"}; - String DARWIN[] = new String[] {"Central Standard Time (Northern Territory)", "CST", - "Central Summer Time (Northern Territory)", "CST", - "Central Time (Northern Territory)", "CT"}; + String DARWIN[] = new String[] {"Australian Central Standard Time (Northern Territory)", "ACST", + "Australian Central Daylight Time (Northern Territory)", "ACDT", + "Australian Central Time (Northern Territory)", "ACT"}; String DUBLIN[] = new String[] {"Greenwich Mean Time", "GMT", "Irish Summer Time", "IST", "Irish Time", "IT"}; @@ -131,9 +131,9 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { String EST[] = new String[] {"Eastern Standard Time", "EST", "Eastern Daylight Time", "EDT", "Eastern Time", "ET"}; - String EST_NSW[] = new String[] {"Eastern Standard Time (New South Wales)", "EST", - "Eastern Summer Time (New South Wales)", "EST", - "Eastern Time (New South Wales)", "ET"}; + String EST_NSW[] = new String[] {"Australian Eastern Standard Time (New South Wales)", "AEST", + "Australian Eastern Daylight Time (New South Wales)", "AEDT", + "Australian Eastern Time (New South Wales)", "AET"}; String FET[] = new String[] {"Further-eastern European Time", "FET", "Further-eastern European Summer Time", "FEST", "Further-eastern European Time", "FET"}; @@ -167,6 +167,9 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { String IRT[] = new String[] {"Iran Standard Time", "IRST", "Iran Daylight Time", "IRDT", "Iran Time", "IRT"}; + String IRKT[] = new String[] {"Irkutsk Time", "IRKT", + "Irkutsk Summer Time", "IRKST", + "Irkutsk Time", "IRKT"}; String ISRAEL[] = new String[] {"Israel Standard Time", "IST", "Israel Daylight Time", "IDT", "Israel Time", "IT"}; @@ -176,11 +179,14 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { String JST[] = new String[] {"Japan Standard Time", "JST", "Japan Daylight Time", "JDT", "Japan Time", "JT"}; + String KRAT[] = new String[] {"Krasnoyarsk Time", "KRAT", + "Krasnoyarsk Summer Time", "KRAST", + "Krasnoyarsk Time", "KRAT"}; String KST[] = new String[] {"Korea Standard Time", "KST", "Korea Daylight Time", "KDT", "Korea Time", "KT"}; String LORD_HOWE[] = new String[] {"Lord Howe Standard Time", "LHST", - "Lord Howe Summer Time", "LHST", + "Lord Howe Daylight Time", "LHDT", "Lord Howe Time", "LHT"}; String MHT[] = new String[] {"Marshall Islands Time", "MHT", "Marshall Islands Summer Time", "MHST", @@ -230,21 +236,15 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { String SGT[] = new String[] {"Singapore Time", "SGT", "Singapore Summer Time", "SGST", "Singapore Time", "SGT"}; - String SLST[] = new String[] {"Greenwich Mean Time", "GMT", - "Sierra Leone Summer Time", "SLST", - "Sierra Leone Time", "SLT"}; - String TASMANIA[] = new String[] {"Eastern Standard Time (Tasmania)", "EST", - "Eastern Summer Time (Tasmania)", "EST", - "Eastern Time (Tasmania)", "ET"}; + String TASMANIA[] = new String[] {"Australian Eastern Standard Time (Tasmania)", "AEST", + "Australian Eastern Daylight Time (Tasmania)", "AEDT", + "Australian Eastern Time (Tasmania)", "AET"}; String TMT[] = new String[] {"Turkmenistan Time", "TMT", "Turkmenistan Summer Time", "TMST", "Turkmenistan Time", "TMT"}; String ULAT[]= new String[] {"Ulaanbaatar Time", "ULAT", "Ulaanbaatar Summer Time", "ULAST", "Ulaanbaatar Time", "ULAT"}; - String WART[] = new String[] {"Western Argentine Time", "WART", - "Western Argentine Summer Time", "WARST", - "Western Argentine Time", "WART"}; String WAT[] = new String[] {"Western African Time", "WAT", "Western African Summer Time", "WAST", "Western African Time", "WAT"}; @@ -254,27 +254,30 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { String WIT[] = new String[] {"West Indonesia Time", "WIB", "West Indonesia Summer Time", "WIST", "West Indonesia Time", "WIB"}; - String WST_AUS[] = new String[] {"Western Standard Time (Australia)", "WST", - "Western Summer Time (Australia)", "WST", - "Western Time (Australia)", "WT"}; + String WST_AUS[] = new String[] {"Australian Western Standard Time", "AWST", + "Australian Western Daylight Time", "AWDT", + "Australian Western Time", "AWT"}; String SAMOA[] = new String[] {"Samoa Standard Time", "SST", "Samoa Daylight Time", "SDT", "Samoa Time", "ST"}; - String WST_SAMOA[] = new String[] {"West Samoa Time", "WST", + String WST_SAMOA[] = new String[] {"West Samoa Standard Time", "WSST", "West Samoa Daylight Time", "WSDT", "West Samoa Time", "WST"}; String ChST[] = new String[] {"Chamorro Standard Time", "ChST", "Chamorro Daylight Time", "ChDT", "Chamorro Time", "ChT"}; - String VICTORIA[] = new String[] {"Eastern Standard Time (Victoria)", "EST", - "Eastern Summer Time (Victoria)", "EST", - "Eastern Time (Victoria)", "ET"}; + String VICTORIA[] = new String[] {"Australian Eastern Standard Time (Victoria)", "AEST", + "Australian Eastern Daylight Time (Victoria)", "AEDT", + "Australian Eastern Time (Victoria)", "AET"}; String UTC[] = new String[] {"Coordinated Universal Time", "UTC", "Coordinated Universal Time", "UTC", "Coordinated Universal Time", "UTC"}; String UZT[] = new String[] {"Uzbekistan Time", "UZT", "Uzbekistan Summer Time", "UZST", "Uzbekistan Time", "UZT"}; + String XJT[] = new String[] {"Xinjiang Standard Time", "XJT", + "Xinjiang Daylight Time", "XJDT", + "Xinjiang Time", "XJT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -336,7 +339,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, @@ -437,7 +440,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { "Western Greenland Summer Time", "WGST", "Western Greenland Time", "WGT"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -484,9 +487,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST", - "Metlakatla Daylight Time", "MeDT", - "Metlakatla Time", "MeT"}}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Pierre & Miquelon Standard Time", "PMST", "Pierre & Miquelon Daylight Time", "PMDT", @@ -555,8 +556,8 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville Time", "DDUT", "Dumont-d'Urville Summer Time", "DDUST", "Dumont-d'Urville Time", "DDUT"}}, - {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST", - "Macquarie Island Summer Time", "MIST", + {"Antarctica/Macquarie", new String[] {"Macquarie Island Standard Time", "MIST", + "Macquarie Island Daylight Time", "MIDT", "Macquarie Island Time", "MIST"}}, {"Antarctica/Mawson", new String[] {"Mawson Time", "MAWT", "Mawson Summer Time", "MAWST", @@ -607,6 +608,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { "Brunei Summer Time", "BNST", "Brunei Time", "BNT"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"Choibalsan Time", "CHOT", "Choibalsan Summer Time", "CHOST", "Choibalsan Time", "CHOT"}}, @@ -631,9 +633,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { {"Asia/Hovd", new String[] {"Hovd Time", "HOVT", "Hovd Summer Time", "HOVST", "Hovd Time", "HOVT"}}, - {"Asia/Irkutsk", new String[] {"Irkutsk Time", "IRKT", - "Irkutsk Summer Time", "IRKST", - "Irkutsk Time", "IRKT"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, {"Asia/Jayapura", new String[] {"East Indonesia Time", "WIT", @@ -646,7 +646,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { "Petropavlovsk-Kamchatski Summer Time", "PETST", "Petropavlovsk-Kamchatski Time", "PETT"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, {"Asia/Khandyga", new String[] {"Khandyga Time", "YAKT", @@ -654,9 +654,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { "Khandyga Time", "YAKT"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"Krasnoyarsk Time", "KRAT", - "Krasnoyarsk Summer Time", "KRAST", - "Krasnoyarsk Time", "KRAT"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -671,7 +669,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { "Philippines Time", "PHT"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"Oral Time", "ORAT", "Oral Summer Time", "ORAST", @@ -697,6 +695,9 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT", + "Srednekolymsk Time", "SRET"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -709,7 +710,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, {"Asia/Ust-Nera", new String[] {"Ust-Nera Time", "VLAT", "Ust-Nera Summer Time", "VLAST", "Ust-Nera Time", "VLAT"}}, @@ -751,9 +752,9 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST", - "Central Western Summer Time (Australia)", "CWST", - "Central Western Time (Australia)", "CWT"}}, + {"Australia/Eucla", new String[] {"Australian Central Western Standard Time", "ACWST", + "Australian Central Western Daylight Time", "ACWDT", + "Australian Central Western Time", "ACWT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -819,7 +820,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { {"Europe/Isle_of_Man", GMTBST}, {"Europe/Istanbul", EET}, {"Europe/Jersey", GMTBST}, - {"Europe/Kaliningrad", FET}, + {"Europe/Kaliningrad", EET}, {"Europe/Kiev", EET}, {"Europe/Lisbon", WET}, {"Europe/Ljubljana", CET}, @@ -854,9 +855,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"Volgograd Time", "VOLT", - "Volgograd Summer Time", "VOLST", - "Volgograd Time", "VOLT"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, diff --git a/jdk/src/java.base/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java b/jdk/src/java.base/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java index d20d12fb053..82a4bc3aecd 100644 --- a/jdk/src/java.base/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java +++ b/jdk/src/java.base/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java @@ -36,6 +36,17 @@ import sun.misc.Unsafe; class WindowsNativeDispatcher { private WindowsNativeDispatcher() { } + /** + * HANDLE CreateEvent( + * LPSECURITY_ATTRIBUTES lpEventAttributes, + * BOOL bManualReset, + * BOOL bInitialState, + * PCTSTR lpName + * ); + */ + static native long CreateEvent(boolean bManualReset, boolean bInitialState) + throws WindowsException; + /** * HANDLE CreateFile( * LPCTSTR lpFileName, @@ -1041,6 +1052,25 @@ class WindowsNativeDispatcher { long pOverlapped) throws WindowsException; + + /** + * CancelIo( + * HANDLE hFile + * ) + */ + static native void CancelIo(long hFile) throws WindowsException; + + /** + * GetOverlappedResult( + * HANDLE hFile, + * LPOVERLAPPED lpOverlapped, + * LPDWORD lpNumberOfBytesTransferred, + * BOOL bWait + * ); + */ + static native int GetOverlappedResult(long hFile, long lpOverlapped) + throws WindowsException; + /** * BackupRead( * HANDLE hFile, diff --git a/jdk/src/java.base/windows/classes/sun/nio/fs/WindowsWatchService.java b/jdk/src/java.base/windows/classes/sun/nio/fs/WindowsWatchService.java index 6677c874348..737c485698f 100644 --- a/jdk/src/java.base/windows/classes/sun/nio/fs/WindowsWatchService.java +++ b/jdk/src/java.base/windows/classes/sun/nio/fs/WindowsWatchService.java @@ -25,9 +25,16 @@ package sun.nio.fs; -import java.nio.file.*; import java.io.IOException; -import java.util.*; +import java.nio.file.NotDirectoryException; +import java.nio.file.Path; +import java.nio.file.StandardWatchEventKinds; +import java.nio.file.WatchEvent; +import java.nio.file.WatchKey; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + import com.sun.nio.file.ExtendedWatchEventModifier; import sun.misc.Unsafe; @@ -42,7 +49,6 @@ class WindowsWatchService extends AbstractWatchService { private final static int WAKEUP_COMPLETION_KEY = 0; - private final Unsafe unsafe = Unsafe.getUnsafe(); // background thread to service I/O completion port private final Poller poller; @@ -82,7 +88,7 @@ class WindowsWatchService /** * Windows implementation of WatchKey. */ - private class WindowsWatchKey extends AbstractWatchKey { + private static class WindowsWatchKey extends AbstractWatchKey { // file key (used to detect existing registrations) private final FileKey fileKey; @@ -169,15 +175,9 @@ class WindowsWatchService return completionKey; } - // close directory and release buffer - void releaseResources() { - CloseHandle(handle); - buffer.cleaner().clean(); - } - - // Invalidate key by closing directory and releasing buffer + // Invalidate the key, assumes that resources have been released void invalidate() { - releaseResources(); + ((WindowsWatchService)watcher()).poller.releaseResources(this); handle = INVALID_HANDLE_VALUE; buffer = null; countAddress = 0; @@ -193,7 +193,7 @@ class WindowsWatchService public void cancel() { if (isValid()) { // delegate to poller - poller.cancel(this); + ((WindowsWatchService)watcher()).poller.cancel(this); } } } @@ -241,18 +241,25 @@ class WindowsWatchService /** * Background thread to service I/O completion port. */ - private class Poller extends AbstractPoller { + private static class Poller extends AbstractPoller { + private final static Unsafe UNSAFE = Unsafe.getUnsafe(); + /* * typedef struct _OVERLAPPED { - * DWORD Internal; - * DWORD InternalHigh; - * DWORD Offset; - * DWORD OffsetHigh; - * HANDLE hEvent; + * ULONG_PTR Internal; + * ULONG_PTR InternalHigh; + * union { + * struct { DWORD Offset; DWORD OffsetHigh; }; + * PVOID Pointer; + * }; + * HANDLE hEvent; * } OVERLAPPED; */ private static final short SIZEOF_DWORD = 4; private static final short SIZEOF_OVERLAPPED = 32; // 20 on 32-bit + private static final short OFFSETOF_HEVENT = + (UNSAFE.addressSize() == 4) ? (short) 16 : 24; + /* * typedef struct _FILE_NOTIFY_INFORMATION { @@ -276,10 +283,10 @@ class WindowsWatchService private final long port; // maps completion key to WatchKey - private final Map ck2key; + private final Map ck2key; // maps file key to WatchKey - private final Map fk2key; + private final Map fk2key; // unique completion key for each directory // native completion key capacity is 64 bits on Win64. @@ -393,8 +400,13 @@ class WindowsWatchService long overlappedAddress = bufferAddress + size - SIZEOF_OVERLAPPED; long countAddress = overlappedAddress - SIZEOF_DWORD; + // zero the overlapped structure + UNSAFE.setMemory(overlappedAddress, SIZEOF_OVERLAPPED, (byte)0); + // start async read of changes to directory try { + createAndAttachEvent(overlappedAddress); + ReadDirectoryChangesW(handle, bufferAddress, CHANGES_BUFFER_SIZE, @@ -403,6 +415,7 @@ class WindowsWatchService countAddress, overlappedAddress); } catch (WindowsException x) { + closeAttachedEvent(overlappedAddress); buffer.release(); return new IOException(x.getMessage()); } @@ -421,7 +434,7 @@ class WindowsWatchService // 2. release existing key's resources (handle/buffer) // 3. re-initialize key with new handle/buffer ck2key.remove(existing.completionKey()); - existing.releaseResources(); + releaseResources(existing); watchKey = existing.init(handle, events, watchSubtree, buffer, countAddress, overlappedAddress, completionKey); } @@ -436,6 +449,42 @@ class WindowsWatchService } } + /** + * Cancels the outstanding I/O operation on the directory + * associated with the given key and releases the associated + * resources. + */ + private void releaseResources(WindowsWatchKey key) { + try { + CancelIo(key.handle()); + GetOverlappedResult(key.handle(), key.overlappedAddress()); + } catch (WindowsException expected) { + // expected as I/O operation has been cancelled + } + CloseHandle(key.handle()); + closeAttachedEvent(key.overlappedAddress()); + key.buffer().cleaner().clean(); + } + + /** + * Creates an unnamed event and set it as the hEvent field + * in the given OVERLAPPED structure + */ + private void createAndAttachEvent(long ov) throws WindowsException { + long hEvent = CreateEvent(false, false); + UNSAFE.putAddress(ov + OFFSETOF_HEVENT, hEvent); + } + + /** + * Closes the event attached to the given OVERLAPPED structure. A + * no-op if there isn't an event attached. + */ + private void closeAttachedEvent(long ov) { + long hEvent = UNSAFE.getAddress(ov + OFFSETOF_HEVENT); + if (hEvent != 0 && hEvent != INVALID_HANDLE_VALUE) + CloseHandle(hEvent); + } + // cancel single key @Override void implCancelKey(WatchKey obj) { @@ -451,9 +500,8 @@ class WindowsWatchService @Override void implCloseAll() { // cancel all keys - for (Map.Entry entry: ck2key.entrySet()) { - entry.getValue().invalidate(); - } + ck2key.values().forEach(WindowsWatchKey::invalidate); + fk2key.clear(); ck2key.clear(); @@ -462,8 +510,7 @@ class WindowsWatchService } // Translate file change action into watch event - private WatchEvent.Kind translateActionToEvent(int action) - { + private WatchEvent.Kind translateActionToEvent(int action) { switch (action) { case FILE_ACTION_MODIFIED : return StandardWatchEventKinds.ENTRY_MODIFY; @@ -487,18 +534,18 @@ class WindowsWatchService int nextOffset; do { - int action = unsafe.getInt(address + OFFSETOF_ACTION); + int action = UNSAFE.getInt(address + OFFSETOF_ACTION); // map action to event WatchEvent.Kind kind = translateActionToEvent(action); if (key.events().contains(kind)) { // copy the name - int nameLengthInBytes = unsafe.getInt(address + OFFSETOF_FILENAMELENGTH); + int nameLengthInBytes = UNSAFE.getInt(address + OFFSETOF_FILENAMELENGTH); if ((nameLengthInBytes % 2) != 0) { - throw new AssertionError("FileNameLength.FileNameLength is not a multiple of 2"); + throw new AssertionError("FileNameLength is not a multiple of 2"); } char[] nameAsArray = new char[nameLengthInBytes/2]; - unsafe.copyMemory(null, address + OFFSETOF_FILENAME, nameAsArray, + UNSAFE.copyMemory(null, address + OFFSETOF_FILENAME, nameAsArray, Unsafe.ARRAY_CHAR_BASE_OFFSET, nameLengthInBytes); // create FileName and queue event @@ -508,7 +555,7 @@ class WindowsWatchService } // next event - nextOffset = unsafe.getInt(address + OFFSETOF_NEXTENTRYOFFSET); + nextOffset = UNSAFE.getInt(address + OFFSETOF_NEXTENTRYOFFSET); address += (long)nextOffset; } while (nextOffset != 0); } diff --git a/jdk/src/java.base/windows/native/libnio/fs/WindowsNativeDispatcher.c b/jdk/src/java.base/windows/native/libnio/fs/WindowsNativeDispatcher.c index 94e060fa193..8075d046763 100644 --- a/jdk/src/java.base/windows/native/libnio/fs/WindowsNativeDispatcher.c +++ b/jdk/src/java.base/windows/native/libnio/fs/WindowsNativeDispatcher.c @@ -195,6 +195,17 @@ Java_sun_nio_fs_WindowsNativeDispatcher_initIDs(JNIEnv* env, jclass this) } } +JNIEXPORT jlong JNICALL +Java_sun_nio_fs_WindowsNativeDispatcher_CreateEvent(JNIEnv* env, jclass this, + jboolean bManualReset, jboolean bInitialState) +{ + HANDLE hEvent = CreateEventW(NULL, bManualReset, bInitialState, NULL); + if (hEvent == NULL) { + throwWindowsException(env, GetLastError()); + } + return ptr_to_jlong(hEvent); +} + JNIEXPORT jstring JNICALL Java_sun_nio_fs_WindowsNativeDispatcher_FormatMessage(JNIEnv* env, jclass this, jint errorCode) { WCHAR message[255]; @@ -1229,6 +1240,31 @@ Java_sun_nio_fs_WindowsNativeDispatcher_PostQueuedCompletionStatus(JNIEnv* env, } } +JNIEXPORT void JNICALL +Java_sun_nio_fs_WindowsNativeDispatcher_CancelIo(JNIEnv* env, jclass this, jlong hFile) { + if (CancelIo((HANDLE)jlong_to_ptr(hFile)) == 0) { + throwWindowsException(env, GetLastError()); + } +} + +JNIEXPORT jint JNICALL +Java_sun_nio_fs_WindowsNativeDispatcher_GetOverlappedResult(JNIEnv *env, jclass this, + jlong hFile, jlong lpOverlapped) +{ + BOOL res; + DWORD bytesTransferred = -1; + + res = GetOverlappedResult((HANDLE)jlong_to_ptr(hFile), + (LPOVERLAPPED)jlong_to_ptr(lpOverlapped), + &bytesTransferred, + TRUE); + if (res == 0) { + throwWindowsException(env, GetLastError()); + } + + return (jint)bytesTransferred; +} + JNIEXPORT void JNICALL Java_sun_nio_fs_WindowsNativeDispatcher_ReadDirectoryChangesW(JNIEnv* env, jclass this, jlong hDirectory, jlong bufferAddress, jint bufferLength, jboolean watchSubTree, jint filter, @@ -1236,17 +1272,7 @@ Java_sun_nio_fs_WindowsNativeDispatcher_ReadDirectoryChangesW(JNIEnv* env, jclas { BOOL res; BOOL subtree = (watchSubTree == JNI_TRUE) ? TRUE : FALSE; - - /* Any unused members of [OVERLAPPED] structure should always be initialized to zero - before the structure is used in a function call. - Otherwise, the function may fail and return ERROR_INVALID_PARAMETER. - http://msdn.microsoft.com/en-us/library/windows/desktop/ms684342%28v=vs.85%29.aspx - - The [Offset] and [OffsetHigh] members of this structure are not used. - http://msdn.microsoft.com/en-us/library/windows/desktop/aa365465%28v=vs.85%29.aspx - - [hEvent] should be zero, other fields are the return values. */ - ZeroMemory((LPOVERLAPPED)jlong_to_ptr(pOverlapped), sizeof(OVERLAPPED)); + LPOVERLAPPED ov = (LPOVERLAPPED)jlong_to_ptr(pOverlapped); res = ReadDirectoryChangesW((HANDLE)jlong_to_ptr(hDirectory), (LPVOID)jlong_to_ptr(bufferAddress), diff --git a/jdk/src/jdk.attach/linux/classes/sun/tools/attach/AttachProviderImpl.java b/jdk/src/jdk.attach/linux/classes/sun/tools/attach/AttachProviderImpl.java index adf8b01e6b4..fd89af02511 100644 --- a/jdk/src/jdk.attach/linux/classes/sun/tools/attach/AttachProviderImpl.java +++ b/jdk/src/jdk.attach/linux/classes/sun/tools/attach/AttachProviderImpl.java @@ -27,8 +27,6 @@ package sun.tools.attach; import com.sun.tools.attach.VirtualMachine; import com.sun.tools.attach.VirtualMachineDescriptor; import com.sun.tools.attach.AttachNotSupportedException; -import com.sun.tools.attach.spi.AttachProvider; - import java.io.IOException; /* @@ -37,9 +35,6 @@ import java.io.IOException; */ public class AttachProviderImpl extends HotSpotAttachProvider { - // perf counter for the JVM version - private static final String JVM_VERSION = "java.property.java.vm.version"; - public AttachProviderImpl() { } diff --git a/jdk/src/jdk.attach/macosx/classes/sun/tools/attach/AttachProviderImpl.java b/jdk/src/jdk.attach/macosx/classes/sun/tools/attach/AttachProviderImpl.java index 0f129769c0e..d44684f81af 100644 --- a/jdk/src/jdk.attach/macosx/classes/sun/tools/attach/AttachProviderImpl.java +++ b/jdk/src/jdk.attach/macosx/classes/sun/tools/attach/AttachProviderImpl.java @@ -27,8 +27,6 @@ package sun.tools.attach; import com.sun.tools.attach.VirtualMachine; import com.sun.tools.attach.VirtualMachineDescriptor; import com.sun.tools.attach.AttachNotSupportedException; -import com.sun.tools.attach.spi.AttachProvider; - import java.io.IOException; /* @@ -37,9 +35,6 @@ import java.io.IOException; */ public class AttachProviderImpl extends HotSpotAttachProvider { - // perf counter for the JVM version - private static final String JVM_VERSION = "java.property.java.vm.version"; - public AttachProviderImpl() { } diff --git a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/VirtualMachine.java b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/VirtualMachine.java index e735c2c775f..d5e934a6e2d 100644 --- a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/VirtualMachine.java +++ b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/VirtualMachine.java @@ -636,7 +636,7 @@ public abstract class VirtualMachine { * @throws NullPointerException * If agentProperties is null. * - * @since 1.9 + * @since 1.8 */ public abstract void startManagementAgent(Properties agentProperties) throws IOException; @@ -662,7 +662,7 @@ public abstract class VirtualMachine { * that cannot be identified as an error to indicate that the * operation failed in the target VM. * - * @since 1.9 + * @since 1.8 */ public abstract String startLocalManagementAgent() throws IOException; diff --git a/jdk/src/jdk.attach/share/classes/sun/tools/attach/HotSpotAttachProvider.java b/jdk/src/jdk.attach/share/classes/sun/tools/attach/HotSpotAttachProvider.java index c28dddad9d7..95faea9429e 100644 --- a/jdk/src/jdk.attach/share/classes/sun/tools/attach/HotSpotAttachProvider.java +++ b/jdk/src/jdk.attach/share/classes/sun/tools/attach/HotSpotAttachProvider.java @@ -25,34 +25,25 @@ package sun.tools.attach; import com.sun.tools.attach.VirtualMachineDescriptor; -import com.sun.tools.attach.VirtualMachine; import com.sun.tools.attach.AttachPermission; import com.sun.tools.attach.AttachNotSupportedException; import com.sun.tools.attach.spi.AttachProvider; -import java.io.IOException; import java.util.List; -import java.util.Iterator; import java.util.ArrayList; import java.util.Set; -import java.net.URISyntaxException; import sun.jvmstat.monitor.HostIdentifier; -import sun.jvmstat.monitor.Monitor; import sun.jvmstat.monitor.MonitoredHost; import sun.jvmstat.monitor.MonitoredVm; import sun.jvmstat.monitor.MonitoredVmUtil; import sun.jvmstat.monitor.VmIdentifier; -import sun.jvmstat.monitor.MonitorException; /* * Platform specific provider implementations extend this */ public abstract class HotSpotAttachProvider extends AttachProvider { - // perf count name for the JVM version - private static final String JVM_VERSION = "java.property.java.vm.version"; - public HotSpotAttachProvider() { } diff --git a/jdk/src/jdk.attach/solaris/classes/sun/tools/attach/AttachProviderImpl.java b/jdk/src/jdk.attach/solaris/classes/sun/tools/attach/AttachProviderImpl.java index b044bb6965f..df0d8dc248e 100644 --- a/jdk/src/jdk.attach/solaris/classes/sun/tools/attach/AttachProviderImpl.java +++ b/jdk/src/jdk.attach/solaris/classes/sun/tools/attach/AttachProviderImpl.java @@ -27,7 +27,6 @@ package sun.tools.attach; import com.sun.tools.attach.VirtualMachine; import com.sun.tools.attach.VirtualMachineDescriptor; import com.sun.tools.attach.AttachNotSupportedException; -import com.sun.tools.attach.spi.AttachProvider; import java.io.IOException; /* diff --git a/jdk/src/jdk.localedata/META-INF/cldrdata-services/sun.util.locale.provider.LocaleDataMetaInfo b/jdk/src/jdk.localedata/META-INF/cldrdata-services/sun.util.locale.provider.LocaleDataMetaInfo new file mode 100644 index 00000000000..799dfdcc49a --- /dev/null +++ b/jdk/src/jdk.localedata/META-INF/cldrdata-services/sun.util.locale.provider.LocaleDataMetaInfo @@ -0,0 +1 @@ +sun.util.cldr.CLDRLocaleDataMetaInfo diff --git a/jdk/src/jdk.localedata/META-INF/localedata-services/sun.util.locale.provider.LocaleDataMetaInfo b/jdk/src/jdk.localedata/META-INF/localedata-services/sun.util.locale.provider.LocaleDataMetaInfo new file mode 100644 index 00000000000..ea327d5c468 --- /dev/null +++ b/jdk/src/jdk.localedata/META-INF/localedata-services/sun.util.locale.provider.LocaleDataMetaInfo @@ -0,0 +1 @@ +sun.util.resources.provider.NonEnLocaleDataMetaInfo diff --git a/jdk/src/jdk.localedata/share/classes/sun/util/resources/de/TimeZoneNames_de.java b/jdk/src/jdk.localedata/share/classes/sun/util/resources/de/TimeZoneNames_de.java index ea7ab573a71..9b4e6503d84 100644 --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/de/TimeZoneNames_de.java +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/de/TimeZoneNames_de.java @@ -48,9 +48,9 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { String ACT[] = new String[] {"Acre Normalzeit", "ACT", "Acre Sommerzeit", "ACST", "Acre Normalzeit", "ACT"}; - String ADELAIDE[] = new String[] {"Zentrale Normalzeit (S\u00FCdaustralien)", "CST", - "Zentrale Sommerzeit (S\u00FCdaustralien)", "CST", - "Zentrale Zeitzone (S\u00FCdaustralien)", "CT"}; + String ADELAIDE[] = new String[] {"Zentrale Normalzeit (S\u00FCdaustralien)", "ACST", + "Zentrale Sommerzeit (S\u00FCdaustralien)", "ACDT", + "Zentrale Zeitzone (S\u00FCdaustralien)", "ACT"}; String AGT[] = new String[] {"Argentinische Zeit", "ART", "Argentinische Sommerzeit", "ARST", "Argentinische Zeit", "ART"}; @@ -72,12 +72,12 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { String BDT[] = new String[] {"Bangladesch Zeit", "BDT", "Bangladesch Sommerzeit", "BDST", "Bangladesch Zeit", "BDT"}; - String BRISBANE[] = new String[] {"\u00D6stliche Normalzeit (Queensland)", "EST", - "\u00D6stliche Sommerzeit (Queensland)", "EST", - "\u00D6stliche Zeitzone (Queensland)", "ET"}; - String BROKEN_HILL[] = new String[] {"Zentrale Normalzeit (S\u00FCdaustralien/New South Wales)", "CST", - "Zentrale Sommerzeit (S\u00FCdaustralien/New South Wales)", "CST", - "Zentrale Zeitzone (S\u00FCdaustralien/New South Wales)", "CT"}; + String BRISBANE[] = new String[] {"\u00D6stliche Normalzeit (Queensland)", "AEST", + "\u00D6stliche Sommerzeit (Queensland)", "AEDT", + "\u00D6stliche Zeitzone (Queensland)", "AET"}; + String BROKEN_HILL[] = new String[] {"Zentrale Normalzeit (S\u00FCdaustralien/New South Wales)", "ACST", + "Zentrale Sommerzeit (S\u00FCdaustralien/New South Wales)", "ACDT", + "Zentrale Zeitzone (S\u00FCdaustralien/New South Wales)", "ACT"}; String BRT[] = new String[] {"Brasilianische Zeit", "BRT", "Brasilianische Sommerzeit", "BRST", "Brasilianische Zeit", "BRT"}; @@ -111,9 +111,9 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { String CUBA[] = new String[] {"Kubanische Normalzeit", "CST", "Kubanische Sommerzeit", "CDT", "Kubanische Normalzeit", "CT"}; - String DARWIN[] = new String[] {"Zentrale Normalzeit (Northern Territory)", "CST", - "Zentrale Sommerzeit (Northern Territory)", "CST", - "Zentrale Zeitzone (Northern Territory)", "CT"}; + String DARWIN[] = new String[] {"Zentrale Normalzeit (Northern Territory)", "ACST", + "Zentrale Sommerzeit (Northern Territory)", "ACDT", + "Zentrale Zeitzone (Northern Territory)", "ACT"}; String DUBLIN[] = new String[] {"Greenwich Zeit", "GMT", "Irische Sommerzeit", "IST", "Irische Zeit", "IT"}; @@ -132,9 +132,9 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { String EST[] = new String[] {"\u00d6stliche Normalzeit", "EST", "\u00d6stliche Sommerzeit", "EDT", "\u00D6stliche Zeitzone", "ET"}; - String EST_NSW[] = new String[] {"\u00D6stliche Normalzeit (New South Wales)", "EST", - "\u00D6stliche Sommerzeit (New South Wales)", "EST", - "\u00D6stliche Zeitzone (New South Wales)", "ET"}; + String EST_NSW[] = new String[] {"\u00D6stliche Normalzeit (New South Wales)", "AEST", + "\u00D6stliche Sommerzeit (New South Wales)", "AEDT", + "\u00D6stliche Zeitzone (New South Wales)", "AET"}; String FET[] = new String[] {"Kaliningrader Zeit", "FET", "Kaliningrader Sommerzeit", "FEST", "Kaliningrader Zeit", "FET"}; @@ -165,6 +165,9 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { String ICT[] = new String[] {"Indochina Zeit", "ICT", "Indochina Sommerzeit", "ICST", "Indochina Zeit", "ICT"}; + String IRKT[] = new String[] {"Irkutsk Zeit", "IRKT", + "Irkutsk Sommerzeit", "IRKST", + "Irkutsk Zeit", "IRKT"}; String IRT[] = new String[] {"Iranische Normalzeit", "IRST", "Iranische Sommerzeit", "IRDT", "Iranische Zeit", "IRT"}; @@ -177,11 +180,14 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { String JST[] = new String[] {"Japanische Normalzeit", "JST", "Japanische Sommerzeit", "JDT", "Zeitzone f\u00FCr Japan", "JT"}; + String KRAT[] = new String[] {"Krasnojarsker Zeit", "KRAT", + "Krasnojarsker Sommerzeit", "KRAST", + "Krasnojarsker Zeit", "KRAT"}; String KST[] = new String[] {"Koreanische Normalzeit", "KST", "Koreanische Sommerzeit", "KDT", "Zeitzone f\u00FCr Korea", "KT"}; String LORD_HOWE[] = new String[] {"Lord Howe Normalzeit", "LHST", - "Lord Howe Sommerzeit", "LHST", + "Lord Howe Sommerzeit", "LHDT", "Lord-Howe Normalzeit", "LHT"}; String MHT[] = new String[] {"Marshallinseln Zeit", "MHT", "Marshallinseln Sommerzeit", "MHST", @@ -231,20 +237,15 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { String SGT[] = new String[] {"Singapur Zeit", "SGT", "Singapur Sommerzeit", "SGST", "Singapur Zeit", "SGT"}; - String SLST[] = new String[] {"Greenwich Normalzeit", "GMT", - "Sierra Leone Sommerzeit", "SLST", - "Sierra Leone Zeit", "SLT"}; - String TASMANIA[] = new String[] {"\u00D6stliche Normalzeit (Tasmanien)", "EST", - "\u00D6stliche Sommerzeit (Tasmanien)", "EST", - "\u00D6stliche Zeitzone (Tasmanien)", "ET"}; + String TASMANIA[] = new String[] {"\u00D6stliche Normalzeit (Tasmanien)", "AEST", + "\u00D6stliche Sommerzeit (Tasmanien)", "AEDT", + "\u00D6stliche Zeitzone (Tasmanien)", "AET"}; String TMT[] = new String[] {"Turkmenische Zeit", "TMT", "Turkmenische Sommerzeit", "TMST", "Turkmenische Zeit", "TMT"}; String ULAT[]= new String[] {"Ulaanbaatar Zeit", "ULAT", "Ulaanbaatar Sommerzeit", "ULAST", "Ulaanbaatar Zeit", "ULAT"}; - String WART[] = new String[] {"Westargentinische Zeit", "WART", - "Westargentinische Sommerzeit", "WARST"}; String WAT[] = new String[] {"Westafrikanische Zeit", "WAT", "Westafrikanische Sommerzeit", "WAST", "Westafrikanische Zeit", "WAT"}; @@ -254,27 +255,30 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { String WIT[] = new String[] {"Westindonesische Zeit", "WIB", "Westindonesische Sommerzeit", "WIST", "Westindonesische Zeit", "WIB"}; - String WST_AUS[] = new String[] {"Westliche Normalzeit (Australien)", "WST", - "Westliche Sommerzeit (Australien)", "WST", - "Westliche Zeitzone (Australien)", "WT"}; + String WST_AUS[] = new String[] {"Westliche Normalzeit (Australien)", "AWST", + "Westliche Sommerzeit (Australien)", "AWDT", + "Westliche Zeitzone (Australien)", "AWT"}; String SAMOA[] = new String[] {"Samoa Normalzeit", "SST", "Samoa Sommerzeit", "SDT", "Zeitzone f\u00FCr Samoa", "ST"}; - String WST_SAMOA[] = new String[] {"West Samoa Zeit", "WST", + String WST_SAMOA[] = new String[] {"West Samoa Zeit", "WSST", "West Samoa Sommerzeit", "WSDT", "West Samoa Zeit", "WST"}; String ChST[] = new String[] {"Chamorro Normalzeit", "ChST", "Chamorro Sommerzeit", "ChDT", "Zeitzone f\u00FCr die Marianen", "ChT"}; - String VICTORIA[] = new String[] {"\u00D6stliche Normalzeit (Victoria)", "EST", - "\u00D6stliche Sommerzeit (Victoria)", "EST", - "\u00D6stliche Zeitzone (Victoria)", "ET"}; + String VICTORIA[] = new String[] {"\u00D6stliche Normalzeit (Victoria)", "AEST", + "\u00D6stliche Sommerzeit (Victoria)", "AEDT", + "\u00D6stliche Zeitzone (Victoria)", "AET"}; String UTC[] = new String[] {"Koordinierte Universalzeit", "UTC", "Koordinierte Universalzeit", "UTC", "Koordinierte Universalzeit", "UTC"}; String UZT[] = new String[] {"Usbekistan Zeit", "UZT", "Usbekistan Sommerzeit", "UZST", "Usbekistan Zeit", "UZT"}; + String XJT[] = new String[] {"Chinesische Normalzeit", "XJT", + "Chinesische Sommerzeit", "XJDT", + "Zeitzone f\u00FCr China", "XJT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -336,7 +340,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, @@ -437,7 +441,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { "Westgr\u00f6nl\u00e4ndische Sommerzeit", "WGST", "Westgr\u00F6nl\u00E4ndische Zeit", "WGT"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -484,9 +488,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", new String[] {"Metlakatla Normalzeit", "MeST", - "Metlakatla Sommerzeit", "MeDT", - "Metlakatla Normalzeit", "MeT"}}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Pierre & Miquelon Normalzeit", "PMST", "Pierre & Miquelon Sommerzeit", "PMDT", @@ -607,6 +609,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { "Brunei Sommerzeit", "BNST", "Brunei Zeit", "BNT"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"Choibalsan Zeit", "CHOT", "Choibalsan Sommerzeit", "CHOST", "Choibalsan Zeit", "CHOT"}}, @@ -631,9 +634,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { {"Asia/Hovd", new String[] {"Hovd Zeit", "HOVT", "Hovd Sommerzeit", "HOVST", "Hovd Zeit", "HOVT"}}, - {"Asia/Irkutsk", new String[] {"Irkutsk Zeit", "IRKT", - "Irkutsk Sommerzeit", "IRKST", - "Irkutsk Zeit", "IRKT"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, {"Asia/Jayapura", new String[] {"Ostindonesische Zeit", "WIT", @@ -646,16 +647,14 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { "Petropawlowsk-Kamtschatkische Sommerzeit", "PETST", "Petropawlowsk-Kamtschatkische Zeit", "PETT"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, {"Asia/Khandyga", new String[] {"Chandyga Zeit", "YAKT", "Chandyga Sommerzeit", "YAKST", "Chandyga Zeit", "YAKT"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"Krasnojarsker Zeit", "KRAT", - "Krasnojarsker Sommerzeit", "KRAST", - "Krasnojarsker Zeit", "KRAT"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -670,7 +669,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { "Philippinische Zeit", "PHT"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"Oral Zeit", "ORAT", "Oral Sommerzeit", "ORAST", @@ -696,6 +695,9 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT", + "Srednekolymsk Time", "SRET"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -708,7 +710,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, {"Asia/Ust-Nera", new String[] {"Ust-Nera Zeit", "VLAT", "Ust-Nera Sommerzeit", "VLAST", "Ust-Nera Zeit", "VLAT"}}, @@ -750,9 +752,9 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"Zentral-Westliche Normalzeit (Australien)", "CWST", - "Zentral-Westliche Sommerzeit (Australien)", "CWST", - "Zentral-Westliche Normalzeit (Australien)", "CWT"}}, + {"Australia/Eucla", new String[] {"Zentral-Westliche Normalzeit (Australien)", "ACWST", + "Zentral-Westliche Sommerzeit (Australien)", "ACWDT", + "Zentral-Westliche Normalzeit (Australien)", "ACWT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -818,7 +820,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { {"Europe/Isle_of_Man", GMTBST}, {"Europe/Istanbul", EET}, {"Europe/Jersey", GMTBST}, - {"Europe/Kaliningrad", FET}, + {"Europe/Kaliningrad", EET}, {"Europe/Kiev", EET}, {"Europe/Lisbon", WET}, {"Europe/Ljubljana", CET}, @@ -853,9 +855,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"Wolgograder Zeit", "VOLT", - "Wolgograder Sommerzeit", "VOLST", - "Wolgograder Zeit", "VOLT"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, diff --git a/jdk/src/jdk.localedata/share/classes/sun/util/resources/es/TimeZoneNames_es.java b/jdk/src/jdk.localedata/share/classes/sun/util/resources/es/TimeZoneNames_es.java index c35c80963be..0235158296c 100644 --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/es/TimeZoneNames_es.java +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/es/TimeZoneNames_es.java @@ -48,9 +48,9 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { String ACT[] = new String[] {"Hora de Acre", "ACT", "Hora de verano de Acre", "ACST", "Hora de Acre", "ACT"}; - String ADELAIDE[] = new String[] {"Hora est\u00E1ndar Central (Sur de Australia)", "CST", - "Hora de verano Central (Sur de Australia)", "CST", - "Hora Central (Australia del Sur)", "CT"}; + String ADELAIDE[] = new String[] {"Hora est\u00E1ndar Central (Sur de Australia)", "ACST", + "Hora de verano Central (Sur de Australia)", "ACDT", + "Hora Central (Australia del Sur)", "ACT"}; String AGT[] = new String[] {"Hora de Argentina", "ART", "Hora de verano de Argentina", "ARST", "Hora de Argentina", "ART"}; @@ -72,12 +72,12 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { String BDT[] = new String[] {"Hora de Bangladesh", "BDT", "Hora de verano de Bangladesh", "BDST", "Hora de Bangladesh", "BDT"}; - String BRISBANE[] = new String[] {"Hora est\u00E1ndar del Este (Queensland)", "EST", - "Hora est\u00E1ndar de verano del Este (Queensland)", "EST", - "Hora Oriental (Queensland)", "ET"}; - String BROKEN_HILL[] = new String[] {"Hora est\u00E1ndar Central (Sur de Australia/Nueva Gales del Sur)", "CST", - "Hora de verano Central (Sur de Australia/Nueva Gales del Sur)", "CST", - "Hora Central (Australia del Sur/Nueva Gales del Sur)", "CT"}; + String BRISBANE[] = new String[] {"Hora est\u00E1ndar del Este (Queensland)", "AEST", + "Hora est\u00E1ndar de verano del Este (Queensland)", "AEDT", + "Hora Oriental (Queensland)", "AET"}; + String BROKEN_HILL[] = new String[] {"Hora est\u00E1ndar Central (Sur de Australia/Nueva Gales del Sur)", "ACST", + "Hora de verano Central (Sur de Australia/Nueva Gales del Sur)", "ACDT", + "Hora Central (Australia del Sur/Nueva Gales del Sur)", "ACT"}; String BRT[] = new String[] {"Hora de Brasil", "BRT", "Hora de verano de Brasil", "BRST", "Hora de Brasil", "BRT"}; @@ -111,9 +111,9 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { String CUBA[] = new String[] {"Hora est\u00e1ndar de Cuba", "CST", "Hora de verano de Cuba", "CDT", "Hora de Cuba", "CT"}; - String DARWIN[] = new String[] {"Hora est\u00E1ndar Central (territorio del Norte)", "CST", - "Hora de verano Central (territorio del Norte)", "CST", - "Hora Central (Territorio Septentrional)", "CT"}; + String DARWIN[] = new String[] {"Hora est\u00E1ndar Central (territorio del Norte)", "ACST", + "Hora de verano Central (territorio del Norte)", "ACDT", + "Hora Central (Territorio Septentrional)", "ACT"}; String DUBLIN[] = new String[] {"Hora del Meridiano de Greenwich", "GMT", "Hora de verano de Irlanda", "IST", "Hora de Irlanda", "IT"}; @@ -132,9 +132,9 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { String EST[] = new String[] {"Hora est\u00e1ndar Oriental", "EST", "Hora de verano Oriental", "EDT", "Hora Oriental", "ET"}; - String EST_NSW[] = new String[] {"Hora est\u00E1ndar Oriental (Nueva Gales del Sur)", "EST", - "Hora de verano Oriental (Nueva Gales del Sur)", "EST", - "Hora Oriental (Nueva Gales del Sur)", "ET"}; + String EST_NSW[] = new String[] {"Hora est\u00E1ndar Oriental (Nueva Gales del Sur)", "AEST", + "Hora de verano Oriental (Nueva Gales del Sur)", "AEDT", + "Hora Oriental (Nueva Gales del Sur)", "AET"}; String FET[] = new String[] {"Hora de Europa m\u00E1s Oriental", "FET", "Hora de verano de Europa m\u00E1s Oriental", "FEST", "Hora de Europa m\u00E1s Oriental", "FET"}; @@ -165,6 +165,9 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { String ICT[] = new String[] {"Hora de Indochina", "ICT", "Hora de verano de Indochina", "ICST", "Hora de Indochina", "ICT"}; + String IRKT[] = new String[] {"Hora de Irkutsk", "IRKT", + "Hora de verano de Irkutsk", "IRKST", + "Hora de Irkutsk", "IRKT"}; String IRT[] = new String[] {"Hora est\u00e1ndar de Ir\u00e1n", "IRST", "Hora de verano de Ir\u00e1n", "IRDT", "Hora de Ir\u00E1n", "IRT"}; @@ -177,11 +180,14 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { String JST[] = new String[] {"Hora est\u00e1ndar de Jap\u00f3n", "JST", "Hora de verano de Jap\u00f3n", "JDT", "Hora de Jap\u00F3n", "JT"}; + String KRAT[] = new String[] {"Hora de Krasnoyarsk", "KRAT", + "Hora de verano de Krasnoyarsk", "KRAST", + "Hora de Krasnoyarsk", "KRAT"}; String KST[] = new String[] {"Hora est\u00e1ndar de Corea", "KST", "Hora de verano de Corea", "KDT", "Hora de Corea", "KT"}; String LORD_HOWE[] = new String[] {"Hora est\u00e1ndar de Lord Howe", "LHST", - "Hora de verano de Lord Howe", "LHST", + "Hora de verano de Lord Howe", "LHDT", "Hora de Lord Howe", "LHT"}; String MHT[] = new String[] {"Hora de las Islas Marshall", "MHT", "Hora de verano de las Islas Marshall", "MHST", @@ -231,20 +237,15 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { String SGT[] = new String[] {"Hora de Singapur", "SGT", "Hora de verano de Singapur", "SGST", "Hora de Singapur", "SGT"}; - String SLST[] = new String[] {"Hora del Meridiano de Greenwich", "GMT", - "Hora de verano de Sierra Leona", "SLST", - "Horario de Sierra Leona", "SLT"}; - String TASMANIA[] = new String[] {"Hora est\u00E1ndar del Este (Tasmania)", "EST", - "Hora de verano del Este (Tasmania)", "EST", - "Hora Oriental (Tasmania)", "ET"}; + String TASMANIA[] = new String[] {"Hora est\u00E1ndar del Este (Tasmania)", "AEST", + "Hora de verano del Este (Tasmania)", "AEDT", + "Hora Oriental (Tasmania)", "AET"}; String TMT[] = new String[] {"Hora de Turkmenist\u00e1n", "TMT", "Hora de verano de Turkmenist\u00e1n", "TMST", "Hora de Turkmenist\u00E1n", "TMT"}; String ULAT[]= new String[] {"Hora de Ulan Bator", "ULAT", "Hora de verano de Ulan Bator", "ULAST", "Hora de Ulan Bator", "ULAT"}; - String WART[] = new String[] {"Hora de Argentina Occidental", "WART", - "Hora de verano de Argentina Occidental", "WARST"}; String WAT[] = new String[] {"Hora de \u00c1frica Occidental", "WAT", "Hora de verano de \u00c1frica Occidental", "WAST", "Hora de \u00C1frica Occidental", "WAT"}; @@ -254,27 +255,30 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { String WIT[] = new String[] {"Hora de Indonesia Occidental", "WIB", "Indonesia Hora de verano de Indonesia Occidental", "WIST", "Hora de Indonesia Occidental", "WIB"}; - String WST_AUS[] = new String[] {"Hora est\u00E1ndar Occidental (Australia)", "WST", - "Hora de verano Occidental (Australia)", "WST", - "Hora Occidental (Australia)", "WT"}; + String WST_AUS[] = new String[] {"Hora est\u00E1ndar Occidental (Australia)", "AWST", + "Hora de verano Occidental (Australia)", "AWDT", + "Hora Occidental (Australia)", "AWT"}; String SAMOA[] = new String[] {"Hora est\u00e1ndar de Samoa", "SST", "Hora de verano de Samoa", "SDT", "Hora de Samoa", "ST"}; - String WST_SAMOA[] = new String[] {"Hora de Samoa Occidental", "WST", + String WST_SAMOA[] = new String[] {"Hora de Samoa Occidental", "WSST", "Hora de verano de Samoa Occidental", "WSDT", "Hora de Samoa Occidental", "WST"}; String ChST[] = new String[] {"Hora est\u00e1ndar de Chamorro", "ChST", "Hora de verano de Chamorro", "ChDT", "Hora de Chamorro", "ChT"}; - String VICTORIA[] = new String[] {"Hora est\u00E1ndar del Este (Victoria)", "EST", - "Hora de verano del Este (Victoria)", "EST", - "Hora Oriental (Victoria)", "ET"}; + String VICTORIA[] = new String[] {"Hora est\u00E1ndar del Este (Victoria)", "AEST", + "Hora de verano del Este (Victoria)", "AEDT", + "Hora Oriental (Victoria)", "AET"}; String UTC[] = new String[] {"Hora Universal Coordinada", "UTC", "Hora Universal Coordinada", "UTC", "Hora Universal Coordinada", "UTC"}; String UZT[] = new String[] {"Hora de Uzbekist\u00e1n", "UZT", "Hora de verano de Uzbekist\u00e1n", "UZST", "Hora de Uzbekist\u00E1n", "UZT"}; + String XJT[] = new String[] {"Hora est\u00e1ndar de China", "XJT", + "Hora de verano de China", "XJDT", + "Hora de China", "XJT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -336,7 +340,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, @@ -437,7 +441,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { "Hora de verano de Groenlandia Occidental", "WGST", "Hora de Groenlandia Occidental", "WGT"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -484,9 +488,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", new String[] {"Hora de Metlakatla", "MeST", - "Hora de verano de Metlakatla", "MeDT", - "Metlakatla Time", "MeT"}}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Hora est\u00e1ndar de Pierre & Miquelon", "PMST", "Hora de verano de Pierre & Miquelon", "PMDT", @@ -607,6 +609,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { "Hora de verano de Brunei", "BNST", "Hora de Brunei", "BNT"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"Hora de Choibalsan", "CHOT", "Hora de verano de Choibalsan", "CHOST", "Hora de Choibalsan", "CHOT"}}, @@ -631,9 +634,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { {"Asia/Hovd", new String[] {"Hora de Hovd", "HOVT", "Hora de verano de Hovd", "HOVST", "Hora de Hovd", "HOVT"}}, - {"Asia/Irkutsk", new String[] {"Hora de Irkutsk", "IRKT", - "Hora de verano de Irkutsk", "IRKST", - "Hora de Irkutsk", "IRKT"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, {"Asia/Jayapura", new String[] {"Hora de Indonesia Oriental", "WIT", @@ -646,16 +647,14 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { "Hora de verano de Petropavlovsk-Kamchatski", "PETST", "Hora de Petropavlovsk-Kamchatski", "PETT"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, {"Asia/Khandyga", new String[] {"Hora de Khandyga", "YAKT", "Hora de verano de Khandyga", "YAKST", "Hora de Khandyga", "YAKT"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"Hora de Krasnoyarsk", "KRAT", - "Hora de verano de Krasnoyarsk", "KRAST", - "Hora de Krasnoyarsk", "KRAT"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -670,7 +669,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { "Hora de Filipinas", "PHT"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"Hora de Uralsk", "ORAT", "Hora de verano de Uralsk", "ORAST", @@ -696,6 +695,9 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT", + "Srednekolymsk Time", "SRET"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -708,7 +710,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, {"Asia/Ust-Nera", new String[] {"Hora de Ust-Nera", "VLAT", "Hora de verano de Ust-Nera", "VLAST", "Hora de Ust-Nera", "VLAT"}}, @@ -750,9 +752,9 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"Hora est\u00E1ndar de Australia Central y Occidental", "CWST", - "Hora est\u00E1ndar de verano de Australia Central y Occidental", "CWST", - "Hora de Australia Central y Occidental", "CWT"}}, + {"Australia/Eucla", new String[] {"Hora est\u00E1ndar de Australia Central y Occidental", "ACWST", + "Hora est\u00E1ndar de verano de Australia Central y Occidental", "ACWDT", + "Hora de Australia Central y Occidental", "ACWT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -818,7 +820,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { {"Europe/Isle_of_Man", GMTBST}, {"Europe/Istanbul", EET}, {"Europe/Jersey", GMTBST}, - {"Europe/Kaliningrad", FET}, + {"Europe/Kaliningrad", EET}, {"Europe/Kiev", EET}, {"Europe/Lisbon", WET}, {"Europe/Ljubljana", CET}, @@ -853,9 +855,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"Hora de Volgogrado", "VOLT", - "Hora de verano de Volgogrado", "VOLST", - "Hora de Volgogrado", "VOLT"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, diff --git a/jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java b/jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java index 393e45d4549..1d8b8561299 100644 --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java @@ -48,9 +48,9 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { String ACT[] = new String[] {"Heure de l'Acre", "ACT", "Heure d'\u00e9t\u00e9 de l'Acre", "ACST", "Heure de l'Acre", "ACT"}; - String ADELAIDE[] = new String[] {"Heure standard d'Australie centrale (Australie du sud)", "CST", - "Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud)", "CST", - "Centre (Australie-M\u00E9ridionale)", "CT"}; + String ADELAIDE[] = new String[] {"Heure standard d'Australie centrale (Australie du sud)", "ACST", + "Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud)", "ACDT", + "Centre (Australie-M\u00E9ridionale)", "ACT"}; String AGT[] = new String[] {"Heure D'Argentine", "ART", "Heure d'\u00e9t\u00e9 D'Argentine", "ARST", "Heure d'Argentine", "ART"} ; @@ -72,12 +72,12 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { String BDT[] = new String[] {"Heure du Bangladesh", "BDT", "Heure d'\u00e9t\u00e9 du Bangladesh", "BDST", "Heure du Bangladesh", "BDT"} ; - String BRISBANE[] = new String[] {"Heure standard d'Australie orientale (Queensland)", "EST", - "Heure d'\u00E9t\u00E9 d'Australie orientale (Queensland)", "EST", - "C\u00F4te Est (Queensland)", "ET"}; - String BROKEN_HILL[] = new String[] {"Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "CST", - "Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "CST", - "Centre (Australie-M\u00E9ridionale/Nouvelle-Galles du Sud)", "CT"}; + String BRISBANE[] = new String[] {"Heure standard d'Australie orientale (Queensland)", "AEST", + "Heure d'\u00E9t\u00E9 d'Australie orientale (Queensland)", "AEDT", + "C\u00F4te Est (Queensland)", "AET"}; + String BROKEN_HILL[] = new String[] {"Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "ACST", + "Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "ACDT", + "Centre (Australie-M\u00E9ridionale/Nouvelle-Galles du Sud)", "ACT"}; String BRT[] = new String[] {"Heure du Br\u00e9sil", "BRT", "Heure d'\u00e9t\u00e9 du Br\u00e9sil", "BRST", "Heure du Br\u00E9sil", "BRT"} ; @@ -111,9 +111,9 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { String CUBA[] = new String[] {"Heure standard de Cuba", "CST", "Heure d'\u00e9t\u00e9 de Cuba", "CDT", "Heure de Cuba", "CT"}; - String DARWIN[] = new String[] {"Heure standard d'Australie centrale (Territoire du Nord)", "CST", - "Heure d'\u00E9t\u00E9 d'Australie centrale (Territoire du Nord)", "CST", - "Centre (Territoire du Nord)", "CT"}; + String DARWIN[] = new String[] {"Heure standard d'Australie centrale (Territoire du Nord)", "ACST", + "Heure d'\u00E9t\u00E9 d'Australie centrale (Territoire du Nord)", "ACDT", + "Centre (Territoire du Nord)", "ACT"}; String DUBLIN[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT", "Heure d'\u00e9t\u00e9 irlandaise", "IST", "Heure irlandaise", "IT"}; @@ -132,9 +132,9 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { String EST[] = new String[] {"Heure normale de l'Est", "EST", "Heure avanc\u00e9e de l'Est", "EDT", "C\u00F4te Est", "ET"} ; - String EST_NSW[] = new String[] {"Heure normale de l'Est (Nouvelle-Galles du Sud)", "EST", - "Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud)", "EST", - "C\u00F4te Est (Nouvelle-Galles du Sud)", "ET"} ; + String EST_NSW[] = new String[] {"Heure normale de l'Est (Nouvelle-Galles du Sud)", "AEST", + "Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud)", "AEDT", + "C\u00F4te Est (Nouvelle-Galles du Sud)", "AET"} ; String FET[] = new String[] {"Heure d'Europe de l'Est UTC+3", "FET", "Heure d'\u00E9t\u00E9 d'Europe de l'Est UTC+3", "FEST", "Heure d'Europe de l'Est UTC+3", "FET"}; @@ -165,6 +165,9 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { String ICT[] = new String[] {"Heure d'Indochine", "ICT", "Heure d'\u00e9t\u00e9 d'Indochine", "ICST", "Heure d'Indochine", "ICT"} ; + String IRKT[] = new String[] {"Heure d'Irkutsk", "IRKT", + "Heure d'\u00e9t\u00e9 d'Irkutsk", "IRKST", + "Heure d'Irkutsk", "IRKT"}; String IRT[] = new String[] {"Heure normale d'Iran", "IRST", "Heure avanc\u00e9e d'Iran", "IRDT", "Heure d'Iran", "IRT"} ; @@ -177,11 +180,14 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { String JST[] = new String[] {"Heure normale du Japon", "JST", "Heure avanc\u00e9e du Japon", "JDT", "Japon", "JT"} ; + String KRAT[] = new String[] {"Heure de Krasno\u00efarsk", "KRAT", + "Heure d'\u00e9t\u00e9 de Krasno\u00efarsk", "KRAST", + "Heure de Krasno\u00EFarsk", "KRAT"}; String KST[] = new String[] {"Heure normale de Cor\u00e9e", "KST", "Heure avanc\u00e9e de Cor\u00e9e", "KDT", "Cor\u00E9e", "KT"} ; String LORD_HOWE[] = new String[] {"Heure standard de Lord Howe", "LHST", - "Heure d'\u00e9t\u00e9 de Lord Howe", "LHST", + "Heure d'\u00e9t\u00e9 de Lord Howe", "LHDT", "Heure de Lord Howe", "LHT"}; String MHT[] = new String[] {"Heure des Iles Marshall", "MHT", "Heure d'\u00e9t\u00e9 des Iles Marshall", "MHST", @@ -231,20 +237,15 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { String SGT[] = new String[] {"Heure de Singapour", "SGT", "Heure d'\u00e9t\u00e9 de Singapour", "SGST", "Heure de Singapour", "SGT"}; - String SLST[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT", - "Heure d'\u00e9t\u00e9 de Sierra Leone", "SLST", - "Heure de Sierra Leone", "SLT"}; - String TASMANIA[] = new String[] {"Heure standard d'Australie orientale (Tasmanie)", "EST", - "Heure d'\u00E9t\u00E9 d'Australie orientale (Tasmanie)", "EST", - "C\u00F4te Est (Tasmanie)", "ET"}; + String TASMANIA[] = new String[] {"Heure standard d'Australie orientale (Tasmanie)", "AEST", + "Heure d'\u00E9t\u00E9 d'Australie orientale (Tasmanie)", "AEDT", + "C\u00F4te Est (Tasmanie)", "AET"}; String TMT[] = new String[] {"Heure du Turkm\u00e9nistan", "TMT", "Heure d'\u00e9t\u00e9 du Turkm\u00e9nistan", "TMST", "Heure du Turkm\u00E9nistan", "TMT"} ; String ULAT[]= new String[] {"Heure de l'Ulaanbaatar", "ULAT", "Heure d'\u00e9t\u00e9 de l'Ulaanbaatar", "ULAST", "Heure de l'Ulaanbaatar", "ULAT"} ; - String WART[] = new String[] {"Heure D'Argentine de l'Ouest", "WART", - "Heure d'\u00e9t\u00e9 D'Argentine de l'Ouest", "WARST"} ; String WAT[] = new String[] {"Heure d'Afrique de l'Ouest", "WAT", "Heure d'\u00e9t\u00e9 d'Afrique de l'Ouest", "WAST", "Heure d'Afrique de l'Ouest", "WAT"} ; @@ -254,27 +255,30 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { String WIT[] = new String[] {"Heure de l'Indon\u00e9sie occidentale", "WIB", "Heure d'\u00e9t\u00e9 de l'Indon\u00e9sie occidentale", "WIST", "Heure de l'Indon\u00E9sie occidentale", "WIB"}; - String WST_AUS[] = new String[] {"Heure normale de l'Ouest (Australie)", "WST", - "Heure d'\u00E9t\u00E9 de l'Ouest (Australie)", "WST", - "Ouest (Australie)", "WT"} ; + String WST_AUS[] = new String[] {"Heure normale de l'Ouest (Australie)", "AWST", + "Heure d'\u00E9t\u00E9 de l'Ouest (Australie)", "AWDT", + "Ouest (Australie)", "AWT"} ; String SAMOA[] = new String[] {"Heure standard de Samoa", "SST", "Heure avanc\u00e9e de Samoa", "SDT", "Samoa", "ST"}; - String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WST", + String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WSST", "Heure d'\u00e9t\u00e9 des Samoas occidentales", "WSDT", "Heure des Samoas occidentales", "WST"} ; String ChST[] = new String[] {"Heure normale des \u00eeles Mariannes", "ChST", "Heure d'\u00e9t\u00e9 des \u00eeles Mariannes", "ChDT", "Chamorro", "ChT"}; - String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "EST", - "Heure d'\u00E9t\u00E9 d'Australie orientale (Victoria)", "EST", - "C\u00F4te Est (Victoria)", "ET"}; + String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "AEST", + "Heure d'\u00E9t\u00E9 d'Australie orientale (Victoria)", "AEDT", + "C\u00F4te Est (Victoria)", "AET"}; String UTC[] = new String[] {"Temps universel coordonn\u00e9", "UTC", "Temps universel coordonn\u00e9", "UTC", "Temps universel coordonn\u00E9", "UTC"}; String UZT[] = new String[] {"Heure de l'Ouzb\u00e9kistan", "UZT", "Heure d'\u00e9t\u00e9 de l'Ouzb\u00e9kistan", "UZST", "Heure de l'Ouzb\u00E9kistan", "UZT"}; + String XJT[] = new String[] {"Heure normale de Chine", "XJT", + "Heure avanc\u00e9e de Chine", "XJDT", + "Chine", "XJT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -336,7 +340,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, @@ -437,7 +441,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { "Heure d'\u00e9t\u00e9 du Groenland de l'Ouest", "WGST", "Heure du Groenland de l'Ouest", "WGT"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -484,9 +488,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", new String[] {"Heure normale de Metlakatla", "MeST", - "Heure avanc\u00E9e de Metlakatla", "MeDT", - "Heure de Metlakatla", "MeT"}}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Heure normale de Saint-Pierre et Miquelon", "PMST", "Heure avanc\u00e9e de Saint-Pierre et Miquelon", "PMDT", @@ -607,6 +609,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { "Heure d'\u00e9t\u00e9 du Brunei", "BNST", "Heure du Brunei", "BNT"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"Heure de Choibalsan", "CHOT", "Heure d'\u00e9t\u00e9 de Choibalsan", "CHOST", "Heure de Choibalsan", "CHOT"}}, @@ -631,9 +634,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { {"Asia/Hovd", new String[] {"Heure de Hovd", "HOVT", "Heure d'\u00e9t\u00e9 de Hovd", "HOVST", "Heure de Hovd", "HOVT"}}, - {"Asia/Irkutsk", new String[] {"Heure d'Irkutsk", "IRKT", - "Heure d'\u00e9t\u00e9 d'Irkutsk", "IRKST", - "Heure d'Irkutsk", "IRKT"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, {"Asia/Jayapura", new String[] {"Heure d'Indon\u00e9sie orientale", "WIT", @@ -646,16 +647,14 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { "Heure d'\u00e9t\u00e9 de Petropavlovsk-Kamchatski", "PETST", "Heure de Petropavlovsk-Kamchatski", "PETT"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, {"Asia/Khandyga", new String[] {"Heure de Khandyga", "YAKT", "Heure d'\u00E9t\u00E9 de Khandyga", "YAKST", "Heure de Khandyga", "YAKT"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"Heure de Krasno\u00efarsk", "KRAT", - "Heure d'\u00e9t\u00e9 de Krasno\u00efarsk", "KRAST", - "Heure de Krasno\u00EFarsk", "KRAT"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -670,7 +669,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { "Heure des Philippines", "PHT"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"Heure d'Oral", "ORAT", "Heure d'\u00e9t\u00e9 d'Oral", "ORAST", @@ -696,6 +695,9 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT", + "Srednekolymsk Time", "SRET"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -708,7 +710,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, {"Asia/Ust-Nera", new String[] {"Heure d'Ust-Nera", "VLAT", "Heure d'\u00E9t\u00E9 d'Ust-Nera", "VLAST", "Heure d'Ust-Nera", "VLAT"}}, @@ -750,9 +752,9 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"Heure standard de l'Australie occidentale (centre)", "CWST", - "Heure d'\u00E9t\u00E9 de l'Australie occidentale (centre)", "CWST", - "Heure de l'Australie occidentale (centre)", "CWT"}}, + {"Australia/Eucla", new String[] {"Heure standard de l'Australie occidentale (centre)", "ACWST", + "Heure d'\u00E9t\u00E9 de l'Australie occidentale (centre)", "ACWDT", + "Heure de l'Australie occidentale (centre)", "ACWT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -818,7 +820,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { {"Europe/Isle_of_Man", GMTBST}, {"Europe/Istanbul", EET}, {"Europe/Jersey", GMTBST}, - {"Europe/Kaliningrad", FET}, + {"Europe/Kaliningrad", EET}, {"Europe/Kiev", EET}, {"Europe/Lisbon", WET}, {"Europe/Ljubljana", CET}, @@ -853,9 +855,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"Heure de Volgograd", "VOLT", - "Heure d'\u00e9t\u00e9 de Volgograd", "VOLST", - "Heure de Volgograd", "VOLT"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, diff --git a/jdk/src/jdk.localedata/share/classes/sun/util/resources/it/TimeZoneNames_it.java b/jdk/src/jdk.localedata/share/classes/sun/util/resources/it/TimeZoneNames_it.java index 309a7715c7d..43035b66ea4 100644 --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/it/TimeZoneNames_it.java +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/it/TimeZoneNames_it.java @@ -48,9 +48,9 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { String ACT[] = new String[] {"Ora di Acre", "ACT", "Ora estiva di Acre", "ACST", "Ora di Acre", "ACT"}; - String ADELAIDE[] = new String[] {"Ora standard centrale (Australia del Sud)", "CST", - "Ora estiva centrale (Australia del Sud)", "CST", - "Ora fuso centrale (Australia del Sud)", "CT"}; + String ADELAIDE[] = new String[] {"Ora standard centrale (Australia del Sud)", "ACST", + "Ora estiva centrale (Australia del Sud)", "ACDT", + "Ora fuso centrale (Australia del Sud)", "ACT"}; String AGT[] = new String[] {"Ora dell'Argentina", "ART", "Ora estiva dell'Argentina", "ARST", "Ora dell'Argentina", "ART"}; @@ -72,12 +72,12 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { String BDT[] = new String[] {"Ora del Bangladesh", "BDT", "Ora estiva del Bangladesh", "BDST", "Ora del Bangladesh", "BDT"}; - String BRISBANE[] = new String[] {"Ora standard orientale (Queensland)", "EST", - "Ora estiva orientale (Queensland)", "EST", - "Ora fuso orientale (Queensland)", "ET"}; - String BROKEN_HILL[] = new String[] {"Ora standard centrale (Australia del Sud/Nuovo Galles del Sud)", "CST", - "Ora estiva centrale (Australia del Sud/Nuovo Galles del Sud)", "CST", - "Ora fuso centrale (Australia del Sud/Nuovo Galles del Sud)", "CT"}; + String BRISBANE[] = new String[] {"Ora standard orientale (Queensland)", "AEST", + "Ora estiva orientale (Queensland)", "AEDT", + "Ora fuso orientale (Queensland)", "AET"}; + String BROKEN_HILL[] = new String[] {"Ora standard centrale (Australia del Sud/Nuovo Galles del Sud)", "ACST", + "Ora estiva centrale (Australia del Sud/Nuovo Galles del Sud)", "ACDT", + "Ora fuso centrale (Australia del Sud/Nuovo Galles del Sud)", "ACT"}; String BRT[] = new String[] {"Ora del Brasile", "BRT", "Ora estiva del Brasile", "BRST", "Ora di Brasilia", "BRT"}; @@ -111,9 +111,9 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { String CUBA[] = new String[] {"Ora solare Cuba", "CST", "Ora legale Cuba", "CDT", "Ora di Cuba", "CT"}; - String DARWIN[] = new String[] {"Ora standard centrale (Territori del Nord)", "CST", - "Ora estiva centrale (Territori del Nord)", "CST", - "Ora fuso centrale (Territori del Nord)", "CT"}; + String DARWIN[] = new String[] {"Ora standard centrale (Territori del Nord)", "ACST", + "Ora estiva centrale (Territori del Nord)", "ACDT", + "Ora fuso centrale (Territori del Nord)", "ACT"}; String DUBLIN[] = new String[] {"Ora media di Greenwich", "GMT", "Ora estiva irlandese", "IST", "Ora irlandese", "IT"}; @@ -132,9 +132,9 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { String EST[] = new String[] {"Ora solare USA orientale", "EST", "Ora legale USA orientale", "EDT", "Fuso orientale", "ET"}; - String EST_NSW[] = new String[] {"Ora standard dell'Australia orientale (Nuovo Galles del Sud)", "EST", - "Ora estiva dell'Australia orientale (Nuovo Galles del Sud)", "EST", - "Ora fuso orientale (Nuovo Galles del Sud)", "ET"}; + String EST_NSW[] = new String[] {"Ora standard dell'Australia orientale (Nuovo Galles del Sud)", "AEST", + "Ora estiva dell'Australia orientale (Nuovo Galles del Sud)", "AEDT", + "Ora fuso orientale (Nuovo Galles del Sud)", "AET"}; String FET[] = new String[] {"Ora dei paesi europei pi\u00F9 orientali", "FET", "Ora estiva dei paesi europei pi\u00F9 orientali", "FEST", "Ora dei paesi europei pi\u00F9 orientali", "FET"}; @@ -165,6 +165,9 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { String ICT[] = new String[] {"Ora dell'Indocina", "ICT", "Ora estiva dell'Indocina", "ICST", "Ora dell'Indocina", "ICT"}; + String IRKT[] = new String[] {"Ora di Irkutsk", "IRKT", + "Ora estiva di Irkutsk", "IRKST", + "Ora di Irkutsk", "IRKT"}; String IRT[] = new String[] {"Ora solare Iran", "IRST", "Ora legale Iran", "IRDT", "Ora Iran", "IRT"}; @@ -177,11 +180,14 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { String JST[] = new String[] {"Ora solare del Giappone", "JST", "Ora legale del Giappone", "JDT", "Ora Giappone", "JT"}; + String KRAT[] = new String[] {"Ora di Krasnojarsk", "KRAT", + "Ora estiva di Krasnojarsk", "KRAST", + "Ora di Krasnojarsk", "KRAT"}; String KST[] = new String[] {"Ora solare della Corea", "KST", "Ora legale della Corea", "KDT", "Ora Corea", "KT"}; String LORD_HOWE[] = new String[] {"Ora standard di Lord Howe", "LHST", - "Ora estiva di Lord Howe", "LHST", + "Ora estiva di Lord Howe", "LHDT", "Ora di Lord Howe", "LHT"}; String MHT[] = new String[] {"Ora delle Isole Marshall", "MHT", "Ora estiva delle Isole Marshall", "MHST", @@ -231,20 +237,15 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { String SGT[] = new String[] {"Ora di Singapore", "SGT", "Ora estiva di Singapore", "SGST", "Ora di Singapore", "SGT"}; - String SLST[] = new String[] {"Ora media di Greenwich", "GMT", - "Ora legale della Sierra Leone", "SLST", - "Ora della Sierra Leone", "SLT"}; - String TASMANIA[] = new String[] {"Ora standard orientale (Tasmania)", "EST", - "Ora estiva orientale (Tasmania)", "EST", - "Ora fuso orientale (Tasmania)", "ET"}; + String TASMANIA[] = new String[] {"Ora standard orientale (Tasmania)", "AEST", + "Ora estiva orientale (Tasmania)", "AEDT", + "Ora fuso orientale (Tasmania)", "AET"}; String TMT[] = new String[] {"Ora del Turkmenistan", "TMT", "Ora estiva del Turkmenistan", "TMST", "Ora del Turkmenistan", "TMT"}; String ULAT[]= new String[] {"Ora di Ulaanbaatar", "ULAT", "Ora estiva di Ulaanbaatar", "ULAST", "Ora di Ulaanbaatar", "ULAT"}; - String WART[] = new String[] {"Ora dell'Argentina occidentale", "WART", - "Ora estiva dell'Argentina occidentale", "WARST"}; String WAT[] = new String[] {"Ora dell'Africa occidentale", "WAT", "Ora estiva dell'Africa occidentale", "WAST", "Ora dell'Africa occidentale", "WAT"}; @@ -254,27 +255,30 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { String WIT[] = new String[] {"Ora dell'Indonesia occidentale", "WIB", "Ora estiva dell'Indonesia occidentale", "WIST", "Ora dell'Indonesia occidentale", "WIB"}; - String WST_AUS[] = new String[] {"Ora standard dell'Australia occidentale", "WST", - "Ora estiva dell'Australia occidentale", "WST", - "Ora Australia occidentale", "WT"}; + String WST_AUS[] = new String[] {"Ora standard dell'Australia occidentale", "AWST", + "Ora estiva dell'Australia occidentale", "AWDT", + "Ora Australia occidentale", "AWT"}; String SAMOA[] = new String[] {"Ora standard di Samoa", "SST", "Ora legale di Samoa", "SDT", "Ora Samoa", "ST"}; - String WST_SAMOA[] = new String[] {"Ora di Samoa", "WST", + String WST_SAMOA[] = new String[] {"Ora di Samoa", "WSST", "Ora estiva di Samoa", "WSDT", "Ora di Samoa occidentale", "WST"}; String ChST[] = new String[] {"Ora standard di Chamorro", "ChST", "Ora legale di Chamorro", "ChDT", "Ora Chamorro", "ChT"}; - String VICTORIA[] = new String[] {"Ora standard orientale (Victoria)", "EST", - "Ora estiva orientale (Victoria)", "EST", - "Ora fuso orientale (Victoria)", "ET"}; + String VICTORIA[] = new String[] {"Ora standard orientale (Victoria)", "AEST", + "Ora estiva orientale (Victoria)", "AEDT", + "Ora fuso orientale (Victoria)", "AET"}; String UTC[] = new String[] {"Tempo universale coordinato", "UTC", "Tempo universale coordinato", "UTC", "Tempo universale coordinato", "UTC"}; String UZT[] = new String[] {"Ora dell'Uzbekistan", "UZT", "Ora estiva dell'Uzbekistan", "UZST", "Ora dell'Uzbekistan", "UZT"}; + String XJT[] = new String[] {"Ora solare della Cina", "XJT", + "Ora legale della Cina", "XJDT", + "Ora Cina", "XJT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -336,7 +340,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, @@ -437,7 +441,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { "Ora estiva della Groenlandia occidentale", "WGST", "Ora della Groenlandia occidentale", "WGT"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -484,9 +488,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", new String[] {"Ora standard di Metlakatla", "MeST", - "Ora legale di Metlakatla", "MeDT", - "Ora di Metlakatla", "MeT"}}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Ora solare di Saint-Pierre e Miquelon", "PMST", "Ora legale di Saint-Pierre e Miquelon", "PMDT", @@ -607,6 +609,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { "Ora estiva del Brunei", "BNST", "Ora del Brunei", "BNT"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"Ora di Choibalsan", "CHOT", "Ora estiva di Choibalsan", "CHOST", "Ora di Choibalsan", "CHOT"}}, @@ -631,9 +634,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { {"Asia/Hovd", new String[] {"Ora di Hovd", "HOVT", "Ora estiva di Hovd", "HOVST", "Ora di Hovd", "HOVT"}}, - {"Asia/Irkutsk", new String[] {"Ora di Irkutsk", "IRKT", - "Ora estiva di Irkutsk", "IRKST", - "Ora di Irkutsk", "IRKT"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, {"Asia/Jayapura", new String[] {"Ora dell'Indonesia orientale", "WIT", @@ -646,16 +647,14 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { "Ora estiva di Petropavlovsk-Kamchatski", "PETST", "Ora di Petropavlovsk-Kamchatski", "PETT"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, {"Asia/Kolkata", IST}, {"Asia/Khandyga", new String[] {"Ora di Khandyga", "YAKT", "Ora estiva di Khandyga", "YAKST", "Ora di Khandyga", "YAKT"}}, - {"Asia/Krasnoyarsk", new String[] {"Ora di Krasnojarsk", "KRAT", - "Ora estiva di Krasnojarsk", "KRAST", - "Ora di Krasnojarsk", "KRAT"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -670,7 +669,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { "Ora delle Filippine", "PHT"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"Ora di Oral", "ORAT", "Ora estiva di Oral", "ORAST", @@ -696,6 +695,9 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT", + "Srednekolymsk Time", "SRET"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -708,7 +710,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, {"Asia/Ust-Nera", new String[] {"Ora di Ust-Nera", "VLAT", "Ora estiva di Ust-Nera", "VLAST", "Ora di Ust-Nera", "VLAT"}}, @@ -750,9 +752,9 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"Ora standard Australia centro-occidentale", "CWST", - "Ora estiva Australia centro-occidentale", "CWST", - "Ora Australia centro-occidentale", "CWT"}}, + {"Australia/Eucla", new String[] {"Ora standard Australia centro-occidentale", "ACWST", + "Ora estiva Australia centro-occidentale", "ACWDT", + "Ora Australia centro-occidentale", "ACWT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -818,7 +820,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { {"Europe/Isle_of_Man", GMTBST}, {"Europe/Istanbul", EET}, {"Europe/Jersey", GMTBST}, - {"Europe/Kaliningrad", FET}, + {"Europe/Kaliningrad", EET}, {"Europe/Kiev", EET}, {"Europe/Lisbon", WET}, {"Europe/Ljubljana", CET}, @@ -853,9 +855,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"Ora di Volgograd", "VOLT", - "Ora estiva di Volgograd", "VOLST", - "Ora di Volgograd", "VOLT"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, diff --git a/jdk/src/jdk.localedata/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java b/jdk/src/jdk.localedata/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java index 23bbcd6c8e0..68bd6c30871 100644 --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java @@ -48,9 +48,9 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { String ACT[] = new String[] {"\u30a2\u30af\u30ec\u6642\u9593", "ACT", "\u30a2\u30af\u30ec\u590f\u6642\u9593", "ACST", "\u30a2\u30af\u30ec\u6642\u9593", "ACT"}; - String ADELAIDE[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CST", - "\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CST", - "\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CT"}; + String ADELAIDE[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACST", + "\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACDT", + "\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACT"}; String AGT[] = new String[] {"\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "ART", "\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "ARST", "\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593", "ART"}; @@ -72,12 +72,12 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { String BDT[] = new String[] {"\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5\u6642\u9593", "BDT", "\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5\u590f\u6642\u9593", "BDST", "\u30D0\u30F3\u30B0\u30E9\u30C7\u30B7\u30E5\u6642\u9593", "BDT"}; - String BRISBANE[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "EST", - "\u6771\u90E8\u590F\u6642\u9593(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "EST", - "\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "ET"}; - String BROKEN_HILL[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "CST", - "\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "CST", - "\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "CT"}; + String BRISBANE[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "AEST", + "\u6771\u90E8\u590F\u6642\u9593(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "AEDT", + "\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)", "AET"}; + String BROKEN_HILL[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "ACST", + "\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "ACDT", + "\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "ACT"}; String BRT[] = new String[] {"\u30d6\u30e9\u30b8\u30eb\u6642\u9593", "BRT", "\u30d6\u30e9\u30b8\u30eb\u590f\u6642\u9593", "BRST", "\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593", "BRT"}; @@ -111,9 +111,9 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { String CUBA[] = new String[] {"\u30ad\u30e5\u30fc\u30d0\u6a19\u6e96\u6642", "CST", "\u30ad\u30e5\u30fc\u30d0\u590f\u6642\u9593", "CDT", "\u30AD\u30E5\u30FC\u30D0\u6642\u9593", "CT"}; - String DARWIN[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "CST", - "\u4E2D\u90E8\u590F\u6642\u9593(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "CST", - "\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "CT"}; + String DARWIN[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "ACST", + "\u4E2D\u90E8\u590F\u6642\u9593(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "ACDT", + "\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)", "ACT"}; String DUBLIN[] = new String[] {"\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642", "GMT", "\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9\u590f\u6642\u9593", "IST", "\u30A2\u30A4\u30EB\u30E9\u30F3\u30C9\u6642\u9593", "IT"}; @@ -132,9 +132,9 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { String EST[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642", "EST", "\u6771\u90e8\u590f\u6642\u9593", "EDT", "\u6771\u90E8\u6A19\u6E96\u6642", "ET"}; - String EST_NSW[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "EST", - "\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "EST", - "\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "ET"}; + String EST_NSW[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "AEST", + "\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "AEDT", + "\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)", "AET"}; String FET[] = new String[] {"\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593", "FET", "\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u590F\u6642\u9593", "FEST", "\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593", "FET"}; @@ -165,6 +165,9 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { String ICT[] = new String[] {"\u30a4\u30f3\u30c9\u30b7\u30ca\u6642\u9593", "ICT", "\u30a4\u30f3\u30c9\u30b7\u30ca\u590f\u6642\u9593", "ICST", "\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593", "ICT"}; + String IRKT[] = new String[] {"\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u6642\u9593", "IRKT", + "\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "IRKST", + "\u30A4\u30EB\u30AF\u30FC\u30C4\u30AF\u6642\u9593", "IRKT"}; String IRT[] = new String[] {"\u30a4\u30e9\u30f3\u6a19\u6e96\u6642", "IRST", "\u30a4\u30e9\u30f3\u590f\u6642\u9593", "IRDT", "\u30A4\u30E9\u30F3\u6642\u9593", "IRT"}; @@ -177,11 +180,14 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { String JST[] = new String[] {"\u65e5\u672c\u6a19\u6e96\u6642", "JST", "\u65e5\u672c\u590f\u6642\u9593", "JDT", "\u65E5\u672C\u6642\u9593", "JT"}; + String KRAT[] = new String[] {"\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u6642\u9593", "KRAT", + "\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u590f\u6642\u9593", "KRAST", + "\u30AF\u30E9\u30B9\u30CE\u30E4\u30EB\u30B9\u30AF\u6642\u9593", "KRAT"}; String KST[] = new String[] {"\u97d3\u56fd\u6a19\u6e96\u6642", "KST", "\u97d3\u56fd\u590f\u6642\u9593", "KDT", "\u97D3\u56FD\u6642\u9593", "KT"}; String LORD_HOWE[] = new String[] {"\u30ed\u30fc\u30c9\u30cf\u30a6\u5cf6\u6a19\u6e96\u6642", "LHST", - "\u30ed\u30fc\u30c9\u30cf\u30a6\u5cf6\u590f\u6642\u9593", "LHST", + "\u30ed\u30fc\u30c9\u30cf\u30a6\u5cf6\u590f\u6642\u9593", "LHDT", "\u30ED\u30FC\u30C9\u30CF\u30A6\u6642\u9593", "LHT"}; String MHT[] = new String[] {"\u30de\u30fc\u30b7\u30e3\u30eb\u5cf6\u6642\u9593", "MHT", "\u30de\u30fc\u30b7\u30e3\u30eb\u5cf6\u590f\u6642\u9593", "MHST", @@ -231,20 +237,15 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { String SGT[] = new String[] {"\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb\u6642\u9593", "SGT", "\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb\u590f\u6642\u9593", "SGST", "\u30B7\u30F3\u30AC\u30DD\u30FC\u30EB\u6642\u9593", "SGT"}; - String SLST[] = new String[] {"\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642", "GMT", - "\u30b7\u30a8\u30e9\u30ec\u30aa\u30cd\u590f\u6642\u9593", "SLST", - "\u30B7\u30A8\u30E9\u30EC\u30AA\u30CD\u6642\u9593", "SLT"}; - String TASMANIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2)", "EST", - "\u6771\u90E8\u590F\u6642\u9593(\u30BF\u30B9\u30DE\u30CB\u30A2)", "EST", - "\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2)", "ET"}; + String TASMANIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2)", "AEST", + "\u6771\u90E8\u590F\u6642\u9593(\u30BF\u30B9\u30DE\u30CB\u30A2)", "AEDT", + "\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2)", "AET"}; String TMT[] = new String[] {"\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u6642\u9593", "TMT", "\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u590f\u6642\u9593", "TMST", "\u30C8\u30EB\u30AF\u30E1\u30CB\u30B9\u30BF\u30F3\u6642\u9593", "TMT"}; String ULAT[]= new String[] {"\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u6642\u9593", "ULAT", "\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u590f\u6642\u9593", "ULAST", "\u30A6\u30E9\u30F3\u30D0\u30FC\u30C8\u30EB\u6642\u9593", "ULAT"}; - String WART[] = new String[] {"\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "WART", - "\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "WARST"}; String WAT[] = new String[] {"\u897f\u30a2\u30d5\u30ea\u30ab\u6642\u9593", "WAT", "\u897f\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "WAST", "\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593", "WAT"}; @@ -254,27 +255,30 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { String WIT[] = new String[] {"\u897f\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "WIB", "\u897f\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "WIST", "\u897F\u90E8\u30A4\u30F3\u30C9\u30CD\u30B7\u30A2\u6642\u9593", "WIB"}; - String WST_AUS[] = new String[] {"\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "WST", - "\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "WST", - "\u897F\u90E8\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "WT"}; + String WST_AUS[] = new String[] {"\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "AWST", + "\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "AWDT", + "\u897F\u90E8\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "AWT"}; String SAMOA[] = new String[] {"\u30b5\u30e2\u30a2\u6a19\u6e96\u6642", "SST", "\u30b5\u30e2\u30a2\u590f\u6642\u9593", "SDT", "\u30B5\u30E2\u30A2\u6642\u9593", "ST"}; - String WST_SAMOA[] = new String[] {"\u897f\u30b5\u30e2\u30a2\u6642\u9593", "WST", + String WST_SAMOA[] = new String[] {"\u897f\u30b5\u30e2\u30a2\u6642\u9593", "WSST", "\u897f\u30b5\u30e2\u30a2\u590f\u6642\u9593", "WSDT", "\u897F\u30B5\u30E2\u30A2\u6642\u9593", "WST"}; String ChST[] = new String[] {"\u30b0\u30a2\u30e0\u6a19\u6e96\u6642", "ChST", "\u30b0\u30a2\u30e0\u590f\u6642\u9593", "ChDT", "\u30C1\u30E3\u30E2\u30ED\u6642\u9593", "ChT"}; - String VICTORIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2)", "EST", - "\u6771\u90E8\u590F\u6642\u9593(\u30D3\u30AF\u30C8\u30EA\u30A2)", "EST", - "\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2)", "ET"}; + String VICTORIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2)", "AEST", + "\u6771\u90E8\u590F\u6642\u9593(\u30D3\u30AF\u30C8\u30EA\u30A2)", "AEDT", + "\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2)", "AET"}; String UTC[] = new String[] {"\u5354\u5b9a\u4e16\u754c\u6642", "UTC", "\u5354\u5b9a\u4e16\u754c\u6642", "UTC", "\u5354\u5B9A\u4E16\u754C\u6642", "UTC"}; String UZT[] = new String[] {"\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "UZT", "\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "UZST", "\u30A6\u30BA\u30D9\u30AD\u30B9\u30BF\u30F3\u6642\u9593", "UZT"}; + String XJT[] = new String[] {"\u4e2d\u56fd\u6a19\u6e96\u6642", "XJT", + "\u4e2d\u56fd\u590f\u6642\u9593", "XJDT", + "\u4E2D\u56FD\u6642\u9593", "XJT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -336,7 +340,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, @@ -437,7 +441,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { "\u897f\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u590f\u6642\u9593", "WGST", "\u897F\u90E8\u30B0\u30EA\u30FC\u30F3\u30E9\u30F3\u30C9\u6642\u9593", "WGT"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -484,9 +488,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", new String[] {"\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u6A19\u6E96\u6642\u9593", "MeST", - "\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u590F\u6642\u9593", "MeDT", - "\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u6642\u9593", "MeT"}}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u6a19\u6e96\u6642", "PMST", "\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u590f\u6642\u9593", "PMDT", @@ -607,6 +609,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { "\u30d6\u30eb\u30cd\u30a4\u590f\u6642\u9593", "BNST", "\u30D6\u30EB\u30CD\u30A4\u6642\u9593", "BNT"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"\u30c1\u30e7\u30a4\u30d0\u30eb\u30b5\u30f3\u6642\u9593", "CHOT", "\u30c1\u30e7\u30a4\u30d0\u30eb\u30b5\u30f3\u590f\u6642\u9593", "CHOST", "\u30C1\u30E7\u30A4\u30D0\u30EB\u30B5\u30F3\u6642\u9593", "CHOT"}}, @@ -631,9 +634,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { {"Asia/Hovd", new String[] {"\u30db\u30d6\u30c9\u6642\u9593", "HOVT", "\u30db\u30d6\u30c9\u590f\u6642\u9593", "HOVST", "\u30DB\u30D6\u30C9\u6642\u9593", "HOVT"}}, - {"Asia/Irkutsk", new String[] {"\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u6642\u9593", "IRKT", - "\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "IRKST", - "\u30A4\u30EB\u30AF\u30FC\u30C4\u30AF\u6642\u9593", "IRKT"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, {"Asia/Jayapura", new String[] {"\u6771\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "WIT", @@ -646,16 +647,14 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { "\u30da\u30c8\u30ed\u30d1\u30d6\u30ed\u30d5\u30b9\u30af\u30ab\u30e0\u30c1\u30e3\u30c4\u30ad\u30fc\u590f\u6642\u9593", "PETST", "\u30DA\u30C8\u30ED\u30D1\u30D6\u30ED\u30D5\u30B9\u30AF\u30FB\u30AB\u30E0\u30C1\u30E3\u30C4\u30AD\u30FC\u6642\u9593", "PETT"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, {"Asia/Khandyga", new String[] {"\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u6642\u9593", "YAKT", "\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u590F\u6642\u9593", "YAKST", "\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u6642\u9593", "YAKT"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u6642\u9593", "KRAT", - "\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u590f\u6642\u9593", "KRAST", - "\u30AF\u30E9\u30B9\u30CE\u30E4\u30EB\u30B9\u30AF\u6642\u9593", "KRAT"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -670,7 +669,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { "\u30D5\u30A3\u30EA\u30D4\u30F3\u6642\u9593", "PHT"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"\u30aa\u30e9\u30eb\u6642\u9593", "ORAT", "\u30aa\u30e9\u30eb\u590f\u6642\u9593", "ORAST", @@ -696,6 +695,9 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT", + "Srednekolymsk Time", "SRET"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -708,7 +710,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, {"Asia/Ust-Nera", new String[] {"\u30A6\u30B9\u30C1\u30CD\u30E9\u6642\u9593", "VLAT", "\u30A6\u30B9\u30C1\u30CD\u30E9\u590F\u6642\u9593", "VLAST", "\u30A6\u30B9\u30C1\u30CD\u30E9\u6642\u9593", "VLAT"}}, @@ -750,9 +752,9 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CWST", - "\u4E2D\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CWST", - "\u4E2D\u897F\u90E8\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "CWT"}}, + {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACWST", + "\u4E2D\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACWDT", + "\u4E2D\u897F\u90E8\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)", "ACWT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -818,7 +820,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { {"Europe/Isle_of_Man", GMTBST}, {"Europe/Istanbul", EET}, {"Europe/Jersey", GMTBST}, - {"Europe/Kaliningrad", FET}, + {"Europe/Kaliningrad", EET}, {"Europe/Kiev", EET}, {"Europe/Lisbon", WET}, {"Europe/Ljubljana", CET}, @@ -853,9 +855,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"\u30dc\u30eb\u30b4\u30b0\u30e9\u30fc\u30c9\u6642\u9593", "VOLT", - "\u30dc\u30eb\u30b4\u30b0\u30e9\u30fc\u30c9\u590f\u6642\u9593", "VOLST", - "\u30DC\u30EB\u30B4\u30B0\u30E9\u30FC\u30C9\u6642\u9593", "VOLT"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, diff --git a/jdk/src/jdk.localedata/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java b/jdk/src/jdk.localedata/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java index d1e106e2cd8..fcfd748153e 100644 --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java @@ -48,9 +48,9 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { String ACT[] = new String[] {"\uc5d0\uc774\ucee4 \uc2dc\uac04", "ACT", "\uc5d0\uc774\ucee4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ACST", "\uc5d0\uc774\ucee4 \uc2dc\uac04", "ACT"}; - String ADELAIDE[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CST", - "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CST", - "\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CT"}; + String ADELAIDE[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACST", + "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACDT", + "\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACT"}; String AGT[] = new String[] {"\uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "ART", "\uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ARST", "\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC", "ART"}; @@ -72,12 +72,12 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { String BDT[] = new String[] {"\ubc29\uae00\ub77c\ub370\uc2dc \uc2dc\uac04", "BDT", "\ubc29\uae00\ub77c\ub370\uc2dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BDST", "\uBC29\uAE00\uB77C\uB370\uC2DC \uD45C\uC900\uC2DC", "BDT"}; - String BRISBANE[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC)", "EST", - "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD038\uC990\uB79C\uB4DC)", "EST", - "\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC)", "ET"}; - String BROKEN_HILL[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "CST", - "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "CST", - "\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "CT"}; + String BRISBANE[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC)", "AEST", + "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD038\uC990\uB79C\uB4DC)", "AEDT", + "\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC)", "AET"}; + String BROKEN_HILL[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "ACST", + "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "ACDT", + "\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "ACT"}; String BRT[] = new String[] {"\ube0c\ub77c\uc9c8\ub9ac\uc544 \uc2dc\uac04", "BRT", "\ube0c\ub77c\uc9c8\ub9ac\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BRST", "\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC", "BRT"}; @@ -111,9 +111,9 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { String CUBA[] = new String[] {"\ucfe0\ubc14 \ud45c\uc900\uc2dc", "CST", "\ucfe0\ubc14 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT", "\uCFE0\uBC14 \uD45C\uC900\uC2DC", "CT"}; - String DARWIN[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED)", "CST", - "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBD81\uBD80 \uC9C0\uC5ED)", "CST", - "\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED)", "CT"}; + String DARWIN[] = new String[] {"\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED)", "ACST", + "\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBD81\uBD80 \uC9C0\uC5ED)", "ACDT", + "\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED)", "ACT"}; String DUBLIN[] = new String[] {"\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc", "GMT", "\uc544\uc77c\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IST", "\uC544\uC77C\uB79C\uB4DC \uD45C\uC900\uC2DC", "IT"}; @@ -132,9 +132,9 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { String EST[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc", "EST", "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EDT", "\uB3D9\uBD80 \uD45C\uC900\uC2DC", "ET"}; - String EST_NSW[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "EST", - "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "EST", - "\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "ET"}; + String EST_NSW[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "AEST", + "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "AEDT", + "\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)", "AET"}; String FET[] = new String[] {"\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC", "FET", "\uADF9\uB3D9 \uC720\uB7FD \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "FEST", "\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC", "FET"}; @@ -165,6 +165,9 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { String ICT[] = new String[] {"\uc778\ub3c4\ucc28\uc774\ub098 \ubc18\ub3c4 \uc2dc\uac04", "ICT", "\uc778\ub3c4\ucc28\uc774\ub098 \ubc18\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ICST", "\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC", "ICT"}; + String IRKT[] = new String[] {"\uc774\ub974\ucfe0\uce20\ud06c \uc2dc\uac04", "IRKT", + "\uc774\ub974\ucfe0\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IRKST", + "\uC774\uB974\uCFE0\uCE20\uD06C \uD45C\uC900\uC2DC", "IRKT"}; String IRT[] = new String[] {"\uc774\ub780 \ud45c\uc900\uc2dc", "IRST", "\uc774\ub780 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IRDT", "\uC774\uB780 \uD45C\uC900\uC2DC", "IRT"}; @@ -177,11 +180,14 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { String JST[] = new String[] {"\uc77c\ubcf8 \ud45c\uc900\uc2dc", "JST", "\uc77c\ubcf8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "JDT", "\uC77C\uBCF8 \uD45C\uC900\uC2DC", "JT"}; + String KRAT[] = new String[] {"\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc2dc\uac04", "KRAT", + "\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KRAST", + "\uD06C\uB77C\uC2A4\uB178\uC57C\uB974\uC2A4\uD06C \uD45C\uC900\uC2DC", "KRAT"}; String KST[] = new String[] {"\ud55c\uad6d \ud45c\uc900\uc2dc", "KST", "\ud55c\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KDT", "\uB300\uD55C\uBBFC\uAD6D \uD45C\uC900\uC2DC", "KT"}; String LORD_HOWE[] = new String[] {"\ub85c\ub4dc \ud558\uc6b0 \ud45c\uc900\uc2dc", "LHST", - "\ub85c\ub4dc \ud558\uc6b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "LHST", + "\ub85c\ub4dc \ud558\uc6b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "LHDT", "\uB85C\uB4DC\uD558\uC6B0 \uD45C\uC900\uC2DC", "LHT"}; String MHT[] = new String[] {"\ub9c8\uc15c\uc81c\ub3c4 \uc2dc\uac04", "MHT", "\ub9c8\uc15c\uc81c\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MHST", @@ -231,20 +237,15 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { String SGT[] = new String[] {"\uc2f1\uac00\ud3ec\ub974 \uc2dc\uac04", "SGT", "\uc2f1\uac00\ud3ec\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SGST", "\uC2F1\uAC00\uD3EC\uB974 \uD45C\uC900\uC2DC", "SGT"}; - String SLST[] = new String[] {"\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc", "GMT", - "\uc2dc\uc5d0\ub77c\ub9ac\uc628 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SLST", - "\uC2DC\uC5D0\uB77C\uB9AC\uC628 \uD45C\uC900\uC2DC", "SLT"}; - String TASMANIA[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "EST", - "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "EST", - "\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "ET"}; + String TASMANIA[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "AEST", + "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "AEDT", + "\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)", "AET"}; String TMT[] = new String[] {"\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc2dc\uac04", "TMT", "\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TMST", "\uD22C\uB974\uD06C\uBA54\uB2C8\uC2A4\uD0C4 \uD45C\uC900\uC2DC", "TMT"}; String ULAT[]= new String[] {"\uc6b8\ub780\ubc14\ud0c0\ub974 \uc2dc\uac04", "ULAT", "\uc6b8\ub780\ubc14\ud0c0\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ULAST", "\uC6B8\uB780\uBC14\uD1A0\uB974 \uD45C\uC900\uC2DC", "ULAT"}; - String WART[] = new String[] {"\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "WART", - "\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WARST"}; String WAT[] = new String[] {"\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc2dc\uac04", "WAT", "\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WAST", "\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC", "WAT"}; @@ -254,27 +255,30 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { String WIT[] = new String[] {"\uc11c\uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "WIB", "\uc11c\uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WIST", "\uC11C\uBD80 \uC778\uB3C4\uB124\uC2DC\uC544 \uD45C\uC900\uC2DC", "WIB"}; - String WST_AUS[] = new String[] {"\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "WST", - "\uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "WST", - "\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "WT"}; + String WST_AUS[] = new String[] {"\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "AWST", + "\uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "AWDT", + "\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "AWT"}; String SAMOA[] = new String[] {"\uc0ac\ubaa8\uc544 \ud45c\uc900\uc2dc", "SST", "\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SDT", "\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC", "ST"}; - String WST_SAMOA[] = new String[] {"\uc11c\uc0ac\ubaa8\uc544 \uc2dc\uac04", "WST", + String WST_SAMOA[] = new String[] {"\uc11c\uc0ac\ubaa8\uc544 \uc2dc\uac04", "WSST", "\uc11c\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WSDT", "\uC11C\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC", "WST"}; String ChST[] = new String[] {"\ucc28\ubaa8\ub85c \ud45c\uc900\uc2dc", "ChST", "\ucc28\ubaa8\ub85c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ChDT", "\uCC28\uBAA8\uB974 \uD45C\uC900\uC2DC", "ChT"}; - String VICTORIA[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544)", "EST", - "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBE45\uD1A0\uB9AC\uC544)", "EST", - "\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544)", "ET"}; + String VICTORIA[] = new String[] {"\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544)", "AEST", + "\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBE45\uD1A0\uB9AC\uC544)", "AEDT", + "\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544)", "AET"}; String UTC[] = new String[] {"\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC", "\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC", "\uC9C0\uC5ED \uD45C\uC900\uC2DC", "UTC"}; String UZT[] = new String[] {"\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "UZT", "\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "UZST", "\uC6B0\uC988\uBCA0\uD0A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC", "UZT"}; + String XJT[] = new String[] {"\uc911\uad6d \ud45c\uc900\uc2dc", "XJT", + "\uc911\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "XJDT", + "\uC911\uAD6D \uD45C\uC900\uC2DC", "XJT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -336,7 +340,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, @@ -437,7 +441,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { "\uc11c\ubd80 \uadf8\ub9b0\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WGST", "\uC11C\uBD80 \uADF8\uB9B0\uB780\uB4DC \uD45C\uC900\uC2DC", "WGT"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -484,9 +488,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", new String[] {"\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uD45C\uC900\uC2DC", "MeST", - "\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "MeDT", - "\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uD45C\uC900\uC2DC", "MeT"}}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \ud45c\uc900\uc2dc", "PMST", "\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PMDT", @@ -607,6 +609,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { "\ube0c\ub8e8\ub098\uc774 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BNST", "\uBE0C\uB8E8\uB098\uC774 \uD45C\uC900\uC2DC", "BNT"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"Choibalsan \uc2dc\uac04", "CHOT", "Choibalsan \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CHOST", "\uCD08\uC774\uBC1C\uC0B0 \uD45C\uC900\uC2DC", "CHOT"}}, @@ -631,9 +634,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { {"Asia/Hovd", new String[] {"Hovd \uc2dc\uac04", "HOVT", "Hovd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "HOVST", "\uD638\uBE0C\uB4DC \uD45C\uC900\uC2DC", "HOVT"}}, - {"Asia/Irkutsk", new String[] {"\uc774\ub974\ucfe0\uce20\ud06c \uc2dc\uac04", "IRKT", - "\uc774\ub974\ucfe0\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IRKST", - "\uC774\uB974\uCFE0\uCE20\uD06C \uD45C\uC900\uC2DC", "IRKT"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, {"Asia/Jayapura", new String[] {"\ub3d9\ubd80 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "WIT", @@ -646,16 +647,14 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { "\ud398\ud2b8\ub85c\ud30c\ube14\ub85c\ud504\uc2a4\ud06c-\uce84\ucc28\uce20\ud0a4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PETST", "\uD398\uD2B8\uB85C\uD30C\uBE0C\uB85C\uD504\uC2A4\uD06C-\uCE84\uCC28\uCE20\uD0A4 \uD45C\uC900\uC2DC", "PETT"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, {"Asia/Khandyga", new String[] {"\uD55C\uB514\uAC00 \uD45C\uC900\uC2DC", "YAKT", "\uD55C\uB514\uAC00 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "YAKST", "\uD55C\uB514\uAC00 \uD45C\uC900\uC2DC", "YAKT"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc2dc\uac04", "KRAT", - "\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KRAST", - "\uD06C\uB77C\uC2A4\uB178\uC57C\uB974\uC2A4\uD06C \uD45C\uC900\uC2DC", "KRAT"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -670,7 +669,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { "\uD544\uB9AC\uD540 \uD45C\uC900\uC2DC", "PHT"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"Oral \ud45c\uc900\uc2dc", "ORAT", "Oral \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ORAST", @@ -696,6 +695,9 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT", + "Srednekolymsk Time", "SRET"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -708,7 +710,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, {"Asia/Ust-Nera", new String[] {"\uC6B0\uC2A4\uD2F0\uB124\uB77C \uD45C\uC900\uC2DC", "VLAT", "\uC6B0\uC2A4\uD2F0\uB124\uB77C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04", "VLAST" , "\uC6B0\uC2A4\uD2F0\uB124\uB77C \uD45C\uC900\uC2DC", "VLAT"}}, @@ -750,9 +752,9 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"\uC911\uC559 \uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CWST", - "\uC911\uC559 \uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CWST", - "\uC911\uC559 \uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "CWT"}}, + {"Australia/Eucla", new String[] {"\uC911\uC559 \uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACWST", + "\uC911\uC559 \uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACWDT", + "\uC911\uC559 \uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)", "ACWT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -818,7 +820,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { {"Europe/Isle_of_Man", GMTBST}, {"Europe/Istanbul", EET}, {"Europe/Jersey", GMTBST}, - {"Europe/Kaliningrad", FET}, + {"Europe/Kaliningrad", EET}, {"Europe/Kiev", EET}, {"Europe/Lisbon", WET}, {"Europe/Ljubljana", CET}, @@ -853,9 +855,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"\ubcfc\uace0\uadf8\ub77c\ub4dc \uc2dc\uac04", "VOLT", - "\ubcfc\uace0\uadf8\ub77c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VOLST", - "\uBCFC\uACE0\uADF8\uB77C\uB4DC \uD45C\uC900\uC2DC", "VOLT"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, diff --git a/jdk/src/jdk.localedata/share/classes/sun/util/resources/lt/CurrencyNames_lt_LT.properties b/jdk/src/jdk.localedata/share/classes/sun/util/resources/lt/CurrencyNames_lt_LT.properties index f7275219e28..a0884fafef5 100644 --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/lt/CurrencyNames_lt_LT.properties +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/lt/CurrencyNames_lt_LT.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -35,4 +35,5 @@ # This notice and attribution to Taligent may not be removed. # Taligent is a registered trademark of Taligent, Inc. +EUR=\u20AC LTL=Lt diff --git a/jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java b/jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java index 21852adbb67..60664c5b1f1 100644 --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java @@ -48,9 +48,9 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { String ACT[] = new String[] {"Fuso hor\u00e1rio do Acre", "ACT", "Fuso hor\u00e1rio de ver\u00e3o do Acre", "ACST", "Fuso hor\u00e1rio do Acre", "ACT"}; - String ADELAIDE[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul)", "CST", - "Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul)", "CST", - "Hor\u00E1rio Central (Austr\u00E1lia do Sul)", "CT"}; + String ADELAIDE[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul)", "ACST", + "Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul)", "ACDT", + "Hor\u00E1rio Central (Austr\u00E1lia do Sul)", "ACT"}; String AGT[] = new String[] {"Fuso hor\u00e1rio da Argentina", "ART", "Fuso hor\u00e1rio de ver\u00e3o da Argentina", "ARST", "Hor\u00E1rio da Argentina", "ART"}; @@ -72,12 +72,12 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { String BDT[] = new String[] {"Fuso hor\u00e1rio de Bangladesh", "BDT", "Fuso hor\u00e1rio de ver\u00e3o de Bangladesh", "BDST", "Hor\u00E1rio de Bangladesh", "BDT"}; - String BRISBANE[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Queensland)", "EST", - "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Queensland)", "EST", - "Hor\u00E1rio do Leste (Queensland)", "ET"}; - String BROKEN_HILL[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "CST", - "Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "CST", - "Hor\u00E1rio Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "CT"}; + String BRISBANE[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Queensland)", "AEST", + "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Queensland)", "AEDT", + "Hor\u00E1rio do Leste (Queensland)", "AET"}; + String BROKEN_HILL[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "ACST", + "Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "ACDT", + "Hor\u00E1rio Central (Austr\u00E1lia do Sul/Nova Gales do Sul)", "ACT"}; String BRT[] = new String[] {"Fuso hor\u00e1rio de Bras\u00edlia", "BRT", "Fuso hor\u00e1rio de ver\u00e3o de Bras\u00edlia", "BRST", "Hor\u00E1rio de Bras\u00EDlia", "BRT"}; @@ -108,9 +108,9 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { String CUBA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Cuba", "CST", "Hor\u00e1rio de luz natural de Cuba", "CDT", "Hor\u00E1rio de Cuba", "CT"}; - String DARWIN[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Territ\u00F3rio do Norte)", "CST", - "Fuso Hor\u00E1rio de Ver\u00E3o Central (Territ\u00F3rio do Norte)", "CST", - "Hor\u00E1rio Central (Territ\u00F3rio do Norte)", "CT"}; + String DARWIN[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Central (Territ\u00F3rio do Norte)", "ACST", + "Fuso Hor\u00E1rio de Ver\u00E3o Central (Territ\u00F3rio do Norte)", "ACDT", + "Hor\u00E1rio Central (Territ\u00F3rio do Norte)", "ACT"}; String DUBLIN[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT", "Fuso hor\u00e1rio de ver\u00e3o da Irlanda", "IST", "Hor\u00E1rio da Rep\u00FAblica da Irlanda", "IT"}; @@ -129,9 +129,9 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { String EST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental", "EST", "Hor\u00e1rio de luz natural oriental", "EDT", "Hor\u00E1rio do Leste", "ET"}; - String EST_NSW[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul)", "EST", - "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul)", "EST", - "Hor\u00E1rio Oriental (Nova Gales do Sul)", "ET"}; + String EST_NSW[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul)", "AEST", + "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul)", "AEDT", + "Hor\u00E1rio Oriental (Nova Gales do Sul)", "AET"}; String FET[] = new String[] {"Hor\u00E1rio do Extremo Leste Europeu (FET)", "FET", "Fuso Hor\u00E1rio de Ver\u00E3o do Extremo Leste Europeu", "FEST", "Hor\u00E1rio do Extremo Leste Europeu (FET)", "FET"}; @@ -162,6 +162,9 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { String ICT[] = new String[] {"Fuso hor\u00e1rio da Indochina", "ICT", "Fuso hor\u00e1rio de ver\u00e3o da Indochina", "ICST", "Hor\u00E1rio da Indochina", "ICT"}; + String IRKT[] = new String[] {"Fuso hor\u00e1rio de Irkutsk", "IRKT", + "Fuso hor\u00e1rio de ver\u00e3o de Irkutsk", "IRKST", + "Hor\u00E1rio de Irkutsk", "IRKT"}; String IRT[] = new String[] {"Fuso hor\u00e1rio do Ir\u00e3", "IRST", "Hor\u00e1rio de luz natural do Ir\u00e3", "IRDT", "Hor\u00E1rio do Ir\u00E3", "IRT"}; @@ -174,11 +177,14 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { String JST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Jap\u00e3o", "JST", "Hor\u00e1rio de luz natural do Jap\u00e3o", "JDT", "Hor\u00E1rio do Jap\u00E3o", "JT"}; + String KRAT[] = new String[] {"Fuso hor\u00e1rio de Krasnoyarsk", "KRAT", + "Fuso hor\u00e1rio de ver\u00e3o de Krasnoyarsk", "KRAST", + "Hor\u00E1rio de Krasnoyarsk", "KRAT"}; String KST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Coreia", "KST", "Hor\u00e1rio de luz natural da Coreia", "KDT", "Hor\u00E1rio da Coreia", "KT"}; String LORD_HOWE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Lord Howe", "LHST", - "Fuso hor\u00e1rio de ver\u00e3o de Lord Howe", "LHST", + "Fuso hor\u00e1rio de ver\u00e3o de Lord Howe", "LHDT", "Hor\u00E1rio de Lord Howe", "LHT"}; String MHT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Marshall", "MHT", "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Marshall", "MHST", @@ -228,12 +234,9 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { String SGT[] = new String[] {"Fuso hor\u00e1rio de Cingapura", "SGT", "Fuso hor\u00e1rio de ver\u00e1 de Cingapura", "SGST", "Hor\u00E1rio de Cingapura", "SGT"}; - String SLST[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT", - "Fuso hor\u00e1rio de ver\u00e3o de Serra Leoa", "SLST", - "Hor\u00E1rio de Serra Leoa", "SLT"}; - String TASMANIA[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Tasm\u00E2nia)", "EST", - "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Tasm\u00E2nia)", "EST", - "Hor\u00E1rio do Leste (Tasm\u00E2nia)", "ET"}; + String TASMANIA[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Tasm\u00E2nia)", "AEST", + "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Tasm\u00E2nia)", "AEDT", + "Hor\u00E1rio do Leste (Tasm\u00E2nia)", "AET"}; String TMT[] = new String[] {"Fuso hor\u00e1rio do Turcomenist\u00e3o", "TMT", "Fuso hor\u00e1rio de ver\u00e3o do Turcomenist\u00e3o", "TMST", "Hor\u00E1rio do Turcomenist\u00E3o", "TMT"}; @@ -252,29 +255,30 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { String WIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Ocidental", "WIB", "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Ocidental", "WIST", "Hor\u00E1rio da Indon\u00E9sia Ocidental", "WIB"}; - String WST_AUS[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Ocidental (Austr\u00E1lia)", "WST", - "Fuso Hor\u00E1rio de Ver\u00E3o Ocidental (Austr\u00E1lia)", "WST", - "Hor\u00E1rio Ocidental (Austr\u00E1lia)", "WT"}; + String WST_AUS[] = new String[] {"Hor\u00E1rio-Padr\u00E3o Ocidental (Austr\u00E1lia)", "AWST", + "Fuso Hor\u00E1rio de Ver\u00E3o Ocidental (Austr\u00E1lia)", "AWDT", + "Hor\u00E1rio Ocidental (Austr\u00E1lia)", "AWT"}; String SAMOA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Samoa", "SST", "Hor\u00e1rio de luz natural de Samoa", "SDT", "Hor\u00E1rio da Samoa", "ST"}; - String WST_SAMOA[] = new String[] {"Fuso hor\u00e1rio de Samoa Ocidental", "WST", + String WST_SAMOA[] = new String[] {"Fuso hor\u00e1rio de Samoa Ocidental", "WSST", "Fuso hor\u00e1rio de ver\u00e3o de Samoa Ocidental", "WSDT", "Fuso Hor\u00E1rio de Samoa Ocidental", "WST"}; String ChST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chamorro", "ChST", "Hor\u00e1rio de luz natural de Chamorro", "ChDT", "Hor\u00E1rio de Chamorro", "ChT"}; - String VICTORIA[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Victoria)", "EST", - "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Victoria)", "EST", - "Hor\u00E1rio do Leste (Victoria)", "ET"}; + String VICTORIA[] = new String[] {"Hor\u00E1rio-Padr\u00E3o do Leste (Victoria)", "AEST", + "Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Victoria)", "AEDT", + "Hor\u00E1rio do Leste (Victoria)", "AET"}; String UTC[] = new String[] {"Tempo universal coordenado", "UTC", "Tempo universal coordenado", "UTC", "Hor\u00E1rio Universal Coordenado", "UTC"}; String UZT[] = new String[] {"Fuso hor\u00e1rio do Uzbequist\u00e3o", "UZT", "Fuso hor\u00e1rio de ver\u00e3o do Uzbequist\u00e3o", "UZST", "Hor\u00E1rio do Uzbequist\u00E3o", "UZT"}; - String WART[] = new String[] {"Fuso hor\u00e1rio da Argentina Ocidental", "WART", - "Fuso hor\u00e1rio de ver\u00e3o da Argentina Ocidental", "WARST"}; + String XJT[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da China", "XJT", + "Hor\u00e1rio de luz natural da China", "XJDT", + "Hor\u00E1rio da China", "XJT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -336,7 +340,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, @@ -437,7 +441,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { "Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Ocidental", "WGST", "Hor\u00E1rio da Groenl\u00E2ndia Ocidental", "WGT"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -484,9 +488,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", new String[] {"Hor\u00E1rio Padr\u00E3o de Metlakatla", "MeST", - "Hor\u00E1rio de Luz Natural de Metlakatla", "MeDT", - "Hor\u00E1rio de Metlakatla", "MeT"}}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Fuso hor\u00e1rio padr\u00e3o de S\u00e3o Pedro e Miquelon", "PMST", "Hor\u00e1rio de luz natural de S\u00e3o Pedro e Miquelon", "PMDT", @@ -607,6 +609,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { "Fuso hor\u00e1rio de ver\u00e3o de Brunei", "BNST", "Hor\u00E1rio de Brunei", "BNT"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"Fuso hor\u00e1rio de Choibalsan", "CHOT", "Fuso hor\u00e1rio de ver\u00e3o de Choibalsan", "CHOST", "Hor\u00E1rio de Choibalsan", "CHOT"}}, @@ -631,9 +634,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { {"Asia/Hovd", new String[] {"Fuso hor\u00e1rio de Hovd", "HOVT", "Fuso hor\u00e1rio de ver\u00e3o de Hovd", "HOVST", "Hor\u00E1rio de Hovd", "HOVT"}}, - {"Asia/Irkutsk", new String[] {"Fuso hor\u00e1rio de Irkutsk", "IRKT", - "Fuso hor\u00e1rio de ver\u00e3o de Irkutsk", "IRKST", - "Hor\u00E1rio de Irkutsk", "IRKT"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, {"Asia/Jayapura", new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Oriental", "WIT", @@ -646,16 +647,14 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { "Fuso hor\u00e1rio de ver\u00e3o de Petropavlovsk-Kamchatski", "PETST", "Hor\u00E1rio de Petropavlovsk-Kamchatski", "PETT"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, {"Asia/Khandyga", new String[] {"Hor\u00E1rio de Khandyga", "YAKT", "Hor\u00E1rio de Ver\u00E3o de Khandyga", "YAKST", "Hor\u00E1rio de Khandyga", "YAKT"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"Fuso hor\u00e1rio de Krasnoyarsk", "KRAT", - "Fuso hor\u00e1rio de ver\u00e3o de Krasnoyarsk", "KRAST", - "Hor\u00E1rio de Krasnoyarsk", "KRAT"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -670,7 +669,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { "Hor\u00E1rio das Filipinas", "PHT"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"Fuso hor\u00e1rio de Uralsk", "ORAT", "Fuso hor\u00e1rio de ver\u00e3o de Uralsk", "ORAST", @@ -696,6 +695,9 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT", + "Srednekolymsk Time", "SRET"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -708,7 +710,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, {"Asia/Ust-Nera", new String[] {"Hor\u00E1rio de Ust-Nera", "VLAT", "Hor\u00E1rio de Ver\u00E3o de Ust-Nera", "VLAST", "Hor\u00E1rio de Ust-Nera", "VLAT"}}, @@ -750,9 +752,9 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"Fuso Hor\u00E1rio Ocidental Central (Austr\u00E1lia)", "CWST", - "Fuso Hor\u00E1rio de Ver\u00E3o Ocidental Central (Austr\u00E1lia)", "CWST", - "Hor\u00E1rio Ocidental Central (Austr\u00E1lia)", "CWT"}}, + {"Australia/Eucla", new String[] {"Fuso Hor\u00E1rio Ocidental Central (Austr\u00E1lia)", "ACWST", + "Fuso Hor\u00E1rio de Ver\u00E3o Ocidental Central (Austr\u00E1lia)", "ACWDT", + "Hor\u00E1rio Ocidental Central (Austr\u00E1lia)", "ACWT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -818,7 +820,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { {"Europe/Isle_of_Man", GMTBST}, {"Europe/Istanbul", EET}, {"Europe/Jersey", GMTBST}, - {"Europe/Kaliningrad", FET}, + {"Europe/Kaliningrad", EET}, {"Europe/Kiev", EET}, {"Europe/Lisbon", WET}, {"Europe/Ljubljana", CET}, @@ -853,9 +855,7 @@ public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle { {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"Fuso hor\u00e1rio de Volgogrado", "VOLT", - "Fuso hor\u00e1rio de ver\u00e3o de Volgogrado", "VOLST", - "Hor\u00E1rio de Volgogrado", "VOLT"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, diff --git a/jdk/src/jdk.localedata/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java b/jdk/src/jdk.localedata/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java index dd509e15142..ab28e0054a0 100644 --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java @@ -48,9 +48,9 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { String ACT[] = new String[] {"Acre, normaltid", "ACT", "Acre, sommartid", "ACST", "Acre, normaltid", "ACT"}; - String ADELAIDE[] = new String[] {"Central standardtid (Sydaustralien)", "CST", - "Central sommartid (South Australia)", "CST", - "Central tid (Sydaustralien)", "CT"}; + String ADELAIDE[] = new String[] {"Central standardtid (Sydaustralien)", "ACST", + "Central sommartid (South Australia)", "ACDT", + "Central tid (Sydaustralien)", "ACT"}; String AGT[] = new String[] {"Argentina, normaltid", "ART", "Argentina, sommartid", "ARST", "Argentinsk tid", "ART"}; @@ -72,12 +72,12 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { String BDT[] = new String[] {"Bangladesh, normaltid", "BDT", "Bangladesh, sommartid", "BDST", "Bangladeshisk tid", "BDT"}; - String BRISBANE[] = new String[] {"\u00D6stlig standardtid (Queensland)", "EST", - "\u00D6stlig sommartid (Queensland)", "EST", - "\u00D6stlig tid (Queensland)", "ET"}; - String BROKEN_HILL[] = new String[] {"Central standardtid (Sydaustralien/New South Wales)", "CST", - "Central sommartid (South Australia/New South Wales)", "CST", - "Central tid (Sydaustralien/New South Wales)", "CT"}; + String BRISBANE[] = new String[] {"\u00D6stlig standardtid (Queensland)", "AEST", + "\u00D6stlig sommartid (Queensland)", "AEDT", + "\u00D6stlig tid (Queensland)", "AET"}; + String BROKEN_HILL[] = new String[] {"Central standardtid (Sydaustralien/New South Wales)", "ACST", + "Central sommartid (South Australia/New South Wales)", "ACDT", + "Central tid (Sydaustralien/New South Wales)", "ACT"}; String BRT[] = new String[] {"Brasilien, normaltid", "BRT", "Brasilien, sommartid", "BRST", "Brasiliansk tid", "BRT"}; @@ -111,9 +111,9 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { String CUBA[] = new String[] {"Kuba, normaltid", "CST", "Kuba, sommartid", "CDT", "Kubansk tid", "CT"}; - String DARWIN[] = new String[] {"Central standardtid (Nordterritoriet)", "CST", - "Central sommartid (Nordterritoriet)", "CST", - "Central tid (Nordterritoriet)", "CT"}; + String DARWIN[] = new String[] {"Central standardtid (Nordterritoriet)", "ACST", + "Central sommartid (Nordterritoriet)", "ACDT", + "Central tid (Nordterritoriet)", "ACT"}; String DUBLIN[] = new String[] {"Greenwichtid", "GMT", "Irland, sommartid", "IST", "Irl\u00E4ndsk tid", "IT"}; @@ -132,9 +132,9 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { String EST[] = new String[] {"Eastern, normaltid", "EST", "Eastern, sommartid", "EDT", "\u00D6stlig tid", "ET"}; - String EST_NSW[] = new String[] {"\u00D6stlig standardtid (New South Wales)", "EST", - "\u00D6stlig sommartid (New South Wales)", "EST", - "\u00D6stlig tid (New South Wales)", "ET"}; + String EST_NSW[] = new String[] {"\u00D6stlig standardtid (New South Wales)", "AEST", + "\u00D6stlig sommartid (New South Wales)", "AEDT", + "\u00D6stlig tid (New South Wales)", "AET"}; String FET[] = new String[] {"Kaliningradtid", "FET", "\u00D6steuropeisk sommartid", "FEST", "Kaliningradtid", "FET"}; @@ -165,6 +165,9 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { String ICT[] = new String[] {"Indokinesisk tid", "ICT", "Indokinesisk sommartid", "ICST", "Indokinesisk tid", "ICT"}; + String IRKT[] = new String[] {"Irkutsk, normaltid", "IRKT", + "Irkutsk, sommartid", "IRKST", + "Irkutsk-tid", "IRKT"}; String IRT[] = new String[] {"Iran, normaltid", "IRST", "Iran, sommartid", "IRDT", "Iransk tid", "IRT"}; @@ -177,11 +180,14 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { String JST[] = new String[] {"Japan, normaltid", "JST", "Japan, sommartid", "JDT", "Japansk tid", "JT"}; + String KRAT[] = new String[] {"Krasnojarsk, normaltid", "KRAT", + "Krasnojarsk, sommartid", "KRAST", + "Krasnojarsk-tid", "KRAT"}; String KST[] = new String[] {"Korea, normaltid", "KST", "Korea, sommartid", "KDT", "Koreansk tid", "KT"}; String LORD_HOWE[] = new String[] {"Lord Howe, normaltid", "LHST", - "Lord Howe, sommartid", "LHST", + "Lord Howe, sommartid", "LHDT", "Lord Howe-tid", "LHT"}; String MHT[] = new String[] {"Marshall\u00f6arna, normaltid", "MHT", "Marshall\u00f6arna, sommartid", "MHST", @@ -231,20 +237,15 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { String SGT[] = new String[] {"Singapore, normaltid", "SGT", "Singapore, sommartid", "SGST", "Singapore-tid", "SGT"}; - String SLST[] = new String[] {"Greenwichtid", "GMT", - "Sierra Leone, sommartid", "SLST", - "Sierra Leone-tid", "SLT"}; - String TASMANIA[] = new String[] {"\u00D6stlig standardtid (Tasmania)", "EST", - "\u00D6stlig sommartid (Tasmanien)", "EST", - "\u00D6stlig tid (Tasmania)", "ET"}; + String TASMANIA[] = new String[] {"\u00D6stlig standardtid (Tasmania)", "AEST", + "\u00D6stlig sommartid (Tasmanien)", "AEDT", + "\u00D6stlig tid (Tasmania)", "AET"}; String TMT[] = new String[] {"Turkmenistan, normaltid", "TMT", "Turkmenistan, sommartid", "TMST", "Turkmensk tid", "TMT"}; String ULAT[]= new String[] {"Ulaanbaatar, normaltid", "ULAT", "Ulaanbaatar, sommartid", "ULAST", "Ulaanbaatar-tid", "ULAT"}; - String WART[] = new String[] {"V\u00e4stargentina, normaltid", "WART", - "V\u00e4stargentina, sommartid", "WARST"}; String WAT[] = new String[] {"V\u00e4stafrikansk tid", "WAT", "V\u00e4stafrikansk sommartid", "WAST", "V\u00E4stafrikansk tid", "WAT"}; @@ -254,27 +255,30 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { String WIT[] = new String[] {"V\u00e4stindonesisk tid", "WIB", "V\u00e4stindonesisk sommartid", "WIST", "V\u00E4stindonesisk tid", "WIB"}; - String WST_AUS[] = new String[] {"Western Standard Time (Australien)", "WST", - "V\u00E4stlig sommartid (Australien)", "WST", - "V\u00E4stlig tid (Australien)", "WT"}; + String WST_AUS[] = new String[] {"Western Standard Time (Australien)", "AWST", + "V\u00E4stlig sommartid (Australien)", "AWDT", + "V\u00E4stlig tid (Australien)", "AWT"}; String SAMOA[] = new String[] {"Samoa, normaltid", "SST", "Samoa, sommartid", "SDT", "Samoansk tid", "ST"}; - String WST_SAMOA[] = new String[] {"V\u00e4stsamoansk tid", "WST", + String WST_SAMOA[] = new String[] {"V\u00e4stsamoansk tid", "WSST", "V\u00e4stsamoansk sommartid", "WSDT", "V\u00E4stsamoansk tid", "WST"}; String ChST[] = new String[] {"Chamorro, normaltid", "ChST", "Chamorro, sommartid", "ChDT", "Chamorros tid", "ChT"}; - String VICTORIA[] = new String[] {"\u00D6stlig standardtid (Victoria)", "EST", - "\u00D6stlig sommartid (Victoria)", "EST", - "\u00D6stlig tid (Victoria)", "ET"}; + String VICTORIA[] = new String[] {"\u00D6stlig standardtid (Victoria)", "AEST", + "\u00D6stlig sommartid (Victoria)", "AEDT", + "\u00D6stlig tid (Victoria)", "AET"}; String UTC[] = new String[] {"Koordinerad universell tid", "UTC", "Koordinerad universell tid", "UTC", "UTC (koordinerad v\u00E4rldstid)", "UTC"}; String UZT[] = new String[] {"Uzbekistan, normaltid", "UZT", "Uzbekistan, sommartid", "UZST", "Uzbekisk tid", "UZT"}; + String XJT[] = new String[] {"Kina, normaltid", "XJT", + "Kina, sommartid", "XJDT", + "Kinesisk tid", "XJT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -336,7 +340,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, @@ -437,7 +441,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { "V\u00e4stra Gr\u00f6nland, sommartid", "WGST", "V\u00E4stgr\u00F6nl\u00E4ndsk tid", "WGT"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -484,9 +488,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", new String[] {"Metlakatla, normaltid", "MeST", - "Metlakatla, sommartid", "MeDT", - "Metlakatla-tid", "MeT"}}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"Saint-Pierre-et-Miquelon, normaltid", "PMST", "Saint-Pierre-et-Miquelon, sommartid", "PMDT", @@ -612,6 +614,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { "Choibalsan-tid", "CHOT"}}, {"Asia/Chongqing", CTT}, {"Asia/Chungking", CTT}, + {"Asia/Chita", IRKT}, {"Asia/Colombo", IST}, {"Asia/Dacca", BDT}, {"Asia/Dhaka", BDT}, @@ -631,9 +634,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { {"Asia/Hovd", new String[] {"Hovd, normaltid", "HOVT", "Hovd, sommartid", "HOVST", "Hovd-tid", "HOVT"}}, - {"Asia/Irkutsk", new String[] {"Irkutsk, normaltid", "IRKT", - "Irkutsk, sommartid", "IRKST", - "Irkutsk-tid", "IRKT"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, {"Asia/Jayapura", new String[] {"\u00d6stindonesisk tid", "WIT", @@ -646,16 +647,14 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { "Petropavlovsk-Kamtjatka, sommartid", "PETST", "Petropavlovsk-Kamtjatskij-tid", "PETT"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, {"Asia/Khandyga", new String[] {"Khandyga, normaltid", "YAKT", "Khandyga, sommartid", "YAKST", "Khandyga, normaltid", "YAKT"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"Krasnojarsk, normaltid", "KRAT", - "Krasnojarsk, sommartid", "KRAST", - "Krasnojarsk-tid", "KRAT"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -670,7 +669,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { "Filippinsk tid", "PHT"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"Oral, normaltid", "ORAT", "Oral, sommartid", "ORAST", @@ -696,6 +695,9 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT", + "Srednekolymsk Time", "SRET"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -708,7 +710,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, {"Asia/Ust-Nera", new String[] {"Ust-Nera, normaltid", "VLAT", "Ust-Nera, sommartid", "VLAST", "Ust-Nera, normaltid", "VLAT"}}, @@ -750,9 +752,9 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"Central v\u00E4stlig normaltid (Australien)", "CWST", - "Central v\u00E4stlig sommartid (Australien)", "CWST", - "Central v\u00E4stlig tid (Australien)", "CWT"}}, + {"Australia/Eucla", new String[] {"Central v\u00E4stlig normaltid (Australien)", "ACWST", + "Central v\u00E4stlig sommartid (Australien)", "ACWDT", + "Central v\u00E4stlig tid (Australien)", "ACWT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -818,7 +820,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { {"Europe/Isle_of_Man", GMTBST}, {"Europe/Istanbul", EET}, {"Europe/Jersey", GMTBST}, - {"Europe/Kaliningrad", FET}, + {"Europe/Kaliningrad", EET}, {"Europe/Kiev", EET}, {"Europe/Lisbon", WET}, {"Europe/Ljubljana", CET}, @@ -853,9 +855,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"Volgograd-tid", "VOLT", - "Volgograd, sommartid", "VOLST", - "Volgograd, normaltid", "VOLT"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, diff --git a/jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java b/jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java index e4fca385baa..c8f109aec64 100644 --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java @@ -48,9 +48,9 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { String ACT[] = new String[] {"Acre \u65f6\u95f4", "ACT", "Acre \u590f\u4ee4\u65f6", "ACST", "Acre \u65f6\u95f4", "ACT"}; - String ADELAIDE[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A)", "CST", - "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A)", "CST", - "\u4E2D\u90E8\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A)", "CT"}; + String ADELAIDE[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A)", "ACST", + "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A)", "ACDT", + "\u4E2D\u90E8\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A)", "ACT"}; String AGT[] = new String[] {"\u963f\u6839\u5ef7\u65f6\u95f4", "ART", "\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "ARST", "\u963F\u6839\u5EF7\u65F6\u95F4", "ART"}; @@ -72,12 +72,12 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { String BDT[] = new String[] {"\u5b5f\u52a0\u62c9\u65f6\u95f4", "BDT", "\u5b5f\u52a0\u62c9\u590f\u4ee4\u65f6", "BDST", "\u5B5F\u52A0\u62C9\u65F6\u95F4", "BDT"}; - String BRISBANE[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u6606\u58EB\u5170)", "EST", - "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u6606\u58EB\u5170)", "EST", - "\u4E1C\u90E8\u65F6\u95F4 (\u6606\u58EB\u5170)", "ET"}; - String BROKEN_HILL[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "CST", - "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "CST", - "\u4E2D\u90E8\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "CT"}; + String BRISBANE[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u6606\u58EB\u5170)", "AEST", + "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u6606\u58EB\u5170)", "AEDT", + "\u4E1C\u90E8\u65F6\u95F4 (\u6606\u58EB\u5170)", "AET"}; + String BROKEN_HILL[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "ACST", + "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "ACDT", + "\u4E2D\u90E8\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)", "ACT"}; String BRT[] = new String[] {"\u5df4\u897f\u5229\u4e9a\u65f6\u95f4", "BRT", "\u5df4\u897f\u5229\u4e9a\u590f\u4ee4\u65f6", "BRST", "\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4", "BRT"}; @@ -111,9 +111,9 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { String CUBA[] = new String[] {"\u53e4\u5df4\u6807\u51c6\u65f6\u95f4", "CST", "\u53e4\u5df4\u590f\u4ee4\u65f6", "CDT", "\u53E4\u5DF4\u65F6\u95F4", "CT"}; - String DARWIN[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5317\u9886\u5730)", "CST", - "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5317\u9886\u5730)", "CST", - "\u4E2D\u90E8\u65F6\u95F4 (\u5317\u90E8\u5730\u533A)", "CT"}; + String DARWIN[] = new String[] {"\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5317\u9886\u5730)", "ACST", + "\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5317\u9886\u5730)", "ACDT", + "\u4E2D\u90E8\u65F6\u95F4 (\u5317\u90E8\u5730\u533A)", "ACT"}; String DUBLIN[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u65f6\u95f4", "GMT", "\u7231\u5c14\u5170\u590f\u4ee4\u65f6", "IST", "\u7231\u5C14\u5170\u65F6\u95F4", "IT"}; @@ -132,9 +132,9 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { String EST[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4", "EST", "\u4e1c\u90e8\u590f\u4ee4\u65f6", "EDT", "\u4E1C\u90E8\u65F6\u95F4", "ET"}; - String EST_NSW[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)", "EST", - "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF)", "EST", - "\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)", "ET"}; + String EST_NSW[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)", "AEST", + "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF)", "AEDT", + "\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)", "AET"}; String FET[] = new String[] {"\u8FDC\u4E1C\u6B27\u65F6\u95F4", "FET", "\u8FDC\u4E1C\u6B27\u590F\u4EE4\u65F6", "FEST", "\u8FDC\u4E1C\u6B27\u65F6\u95F4", "FET"}; @@ -165,6 +165,9 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { String ICT[] = new String[] {"\u5370\u5ea6\u652f\u90a3\u65f6\u95f4", "ICT", "\u5370\u5ea6\u652f\u90a3\u590f\u4ee4\u65f6", "ICST", "\u5370\u5EA6\u652F\u90A3\u65F6\u95F4", "ICT"}; + String IRKT[] = new String[] {"\u4f0a\u5c14\u5e93\u6b21\u514b\u65f6\u95f4", "IRKT", + "\u4f0a\u5c14\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "IRKST", + "\u4F0A\u5C14\u5E93\u6B21\u514B\u65F6\u95F4", "IRKT"}; String IRT[] = new String[] {"\u4f0a\u6717\u6807\u51c6\u65f6\u95f4", "IRST", "\u4f0a\u6717\u590f\u4ee4\u65f6", "IRDT", "\u4F0A\u6717\u65F6\u95F4", "IRT"}; @@ -177,11 +180,14 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { String JST[] = new String[] {"\u65e5\u672c\u6807\u51c6\u65f6\u95f4", "JST", "\u65e5\u672c\u590f\u4ee4\u65f6", "JDT", "\u65E5\u672C\u65F6\u95F4", "JT"}; + String KRAT[] = new String[] {"\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u65f6\u95f4", "KRAT", + "\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u590f\u4ee4\u65f6", "KRAST", + "\u514B\u62C9\u65AF\u8BFA\u4E9A\u5C14\u65AF\u514B\u65F6\u95F4", "KRAT"}; String KST[] = new String[] {"\u97e9\u56fd\u6807\u51c6\u65f6\u95f4", "KST", "\u97e9\u56fd\u590f\u4ee4\u65f6", "KDT", "\u97E9\u56FD\u65F6\u95F4", "KT"}; String LORD_HOWE[] = new String[] {"\u8c6a\u516c\u6807\u51c6\u65f6\u95f4", "LHST", - "\u8c6a\u516c\u590f\u4ee4\u65f6", "LHST", + "\u8c6a\u516c\u590f\u4ee4\u65f6", "LHDT", "\u8C6A\u516C\u65F6\u95F4", "LHT"}; String MHT[] = new String[] {"\u9a6c\u7ecd\u5c14\u7fa4\u5c9b\u65f6\u95f4", "MHT", "\u9a6c\u7ecd\u5c14\u7fa4\u5c9b\u590f\u4ee4\u65f6", "MHST", @@ -231,20 +237,15 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { String SGT[] = new String[] {"\u65b0\u52a0\u5761\u65f6\u95f4", "SGT", "\u65b0\u52a0\u5761\u590f\u4ee4\u65f6", "SGST", "\u65B0\u52A0\u5761\u65F6\u95F4", "SGT"}; - String SLST[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u65f6\u95f4", "GMT", - "\u585e\u62c9\u5229\u6602\u590f\u4ee4\u65f6", "SLST", - "\u585E\u62C9\u91CC\u6602\u65F6\u95F4", "SLT"}; - String TASMANIA[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "EST", - "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "EST", - "\u4E1C\u90E8\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "ET"}; + String TASMANIA[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "AEST", + "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "AEDT", + "\u4E1C\u90E8\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)", "AET"}; String TMT[] = new String[] {"\u571f\u5e93\u66fc\u65f6\u95f4", "TMT", "\u571f\u5e93\u66fc\u590f\u4ee4\u65f6", "TMST", "\u571F\u5E93\u66FC\u65F6\u95F4", "TMT"}; String ULAT[]= new String[] {"\u5e93\u4f26\u65f6\u95f4", "ULAT", "\u5e93\u4f26\u590f\u4ee4\u65f6", "ULAST", "\u5E93\u4F26\u65F6\u95F4", "ULAT"}; - String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u65f6\u95f4", "WART", - "\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "WARST"}; String WAT[] = new String[] {"\u897f\u975e\u65f6\u95f4", "WAT", "\u897f\u975e\u590f\u4ee4\u65f6", "WAST", "\u897F\u975E\u65F6\u95F4", "WAT"}; @@ -254,27 +255,30 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { String WIT[] = new String[] {"\u897f\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "WIB", "\u897f\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "WIST", "\u897F\u5370\u5EA6\u5C3C\u897F\u4E9A\u65F6\u95F4", "WIB"}; - String WST_AUS[] = new String[] {"\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "WST", - "\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)", "WST", - "\u897F\u90E8\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "WT"}; + String WST_AUS[] = new String[] {"\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "AWST", + "\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)", "AWDT", + "\u897F\u90E8\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "AWT"}; String SAMOA[] = new String[] {"\u8428\u6469\u4e9a\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "SST", "\u8428\u6469\u4e9a\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SDT", "\u8428\u6469\u4E9A\u65F6\u95F4", "ST"}; - String WST_SAMOA[] = new String[] {"\u897f\u8428\u6469\u4e9a\u65f6\u95f4", "WST", + String WST_SAMOA[] = new String[] {"\u897f\u8428\u6469\u4e9a\u65f6\u95f4", "WSST", "\u897f\u8428\u6469\u4e9a\u590f\u4ee4\u65f6", "WSDT", "\u897F\u8428\u6469\u4E9A\u65F6\u95F4", "WST"}; String ChST[] = new String[] {"Chamorro \u6807\u51c6\u65f6\u95f4", "ChST", "Chamorro \u590f\u4ee4\u65f6", "ChDT", "\u67E5\u6469\u6D1B\u65F6\u95F4", "ChT"}; - String VICTORIA[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A)", "EST", - "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u7EF4\u591A\u5229\u4E9A)", "EST", - "\u4E1C\u90E8\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A)", "ET"}; + String VICTORIA[] = new String[] {"\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A)", "AEST", + "\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u7EF4\u591A\u5229\u4E9A)", "AEDT", + "\u4E1C\u90E8\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A)", "AET"}; String UTC[] = new String[] {"\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC", "\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC", "\u534F\u8C03\u4E16\u754C\u65F6\u95F4", "UTC"}; String UZT[] = new String[] {"\u4e4c\u5179\u522b\u514b\u65af\u5766\u65f6\u95f4", "UZT", "\u4e4c\u5179\u522b\u514b\u65af\u5766\u590f\u4ee4\u65f6", "UZST", "\u4E4C\u5179\u522B\u514B\u65AF\u5766\u65F6\u95F4", "UZT"}; + String XJT[] = new String[] {"\u4e2d\u56fd\u6807\u51c6\u65f6\u95f4", "XJT", + "\u4e2d\u56fd\u590f\u4ee4\u65f6", "XJDT", + "\u4E2D\u56FD\u65F6\u95F4", "XJT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -336,7 +340,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, @@ -437,7 +441,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { "\u897f\u683c\u6797\u5170\u5c9b\u590f\u4ee4\u65f6", "WGST", "\u897F\u683C\u6797\u5170\u5C9B\u65F6\u95F4", "WGT"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -484,9 +488,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", new String[] {"\u6885\u7279\u62C9\u5361\u7279\u62C9\u6807\u51C6\u65F6\u95F4", "MeST", - "\u6885\u7279\u62C9\u5361\u7279\u62C9\u590F\u4EE4\u65F6", "MeDT", - "\u6885\u7279\u62C9\u5361\u7279\u62C9\u65F6\u95F4", "MeT"}}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u6807\u51c6\u65f6\u95f4", "PMST", "\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u590f\u4ee4\u65f6", "PMDT", @@ -607,6 +609,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { "\u6587\u83b1\u590f\u4ee4\u65f6", "BNST", "\u6587\u83B1\u65F6\u95F4", "BNT"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"Choibalsan \u65f6\u95f4", "CHOT", "Choibalsan \u590f\u4ee4\u65f6", "CHOST", "Choibalsan \u65F6\u95F4", "CHOT"}}, @@ -631,9 +634,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { {"Asia/Hovd", new String[] {"\u79d1\u5e03\u591a\u65f6\u95f4", "HOVT", "\u79d1\u5e03\u591a\u590f\u4ee4\u65f6", "HOVST", "\u79D1\u5E03\u591A\u65F6\u95F4", "HOVT"}}, - {"Asia/Irkutsk", new String[] {"\u4f0a\u5c14\u5e93\u6b21\u514b\u65f6\u95f4", "IRKT", - "\u4f0a\u5c14\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "IRKST", - "\u4F0A\u5C14\u5E93\u6B21\u514B\u65F6\u95F4", "IRKT"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, {"Asia/Jayapura", new String[] {"\u4e1c\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "WIT", @@ -646,16 +647,14 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { "\u5f7c\u5f97\u7f57\u5df4\u752b\u6d1b\u592b\u65af\u514b\u590f\u4ee4\u65f6", "PETST", "\u5F7C\u5F97\u7F57\u5DF4\u752B\u6D1B\u592B\u65AF\u514B\u65F6\u95F4", "PETT"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, {"Asia/Khandyga", new String[] {"\u6C49\u5FB7\u52A0\u65F6\u95F4", "YAKT", "\u6C49\u5FB7\u52A0\u590F\u4EE4\u65F6", "YAKST", "\u6C49\u5FB7\u52A0\u65F6\u95F4", "YAKT"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u65f6\u95f4", "KRAT", - "\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u590f\u4ee4\u65f6", "KRAST", - "\u514B\u62C9\u65AF\u8BFA\u4E9A\u5C14\u65AF\u514B\u65F6\u95F4", "KRAT"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -670,7 +669,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { "\u83F2\u5F8B\u5BBE\u65F6\u95F4", "PHT"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"Oral \u65f6\u95f4", "ORAT", "Oral \u590f\u4ee4\u65f6", "ORAST", @@ -696,6 +695,9 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT", + "Srednekolymsk Time", "SRET"}}, {"Asia/Taipei", CTT}, {"Asia/Tel_Aviv", ISRAEL}, {"Asia/Tashkent", UZT}, @@ -708,7 +710,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, {"Asia/Ust-Nera", new String[] {"\u4E4C\u65AF\u5B63\u6D85\u62C9\u65F6\u95F4", "VLAT", "\u4E4C\u65AF\u5B63\u6D85\u62C9\u590F\u4EE4\u65F6", "VLAST", "\u4E4C\u65AF\u5B63\u6D85\u62C9\u65F6\u95F4", "VLAT"}}, @@ -750,9 +752,9 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "CWST", - "\u4E2D\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)", "CWST", - "\u4E2D\u897F\u90E8\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "CWT"}}, + {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "ACWST", + "\u4E2D\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)", "ACWDT", + "\u4E2D\u897F\u90E8\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)", "ACWT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -818,7 +820,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { {"Europe/Isle_of_Man", GMTBST}, {"Europe/Istanbul", EET}, {"Europe/Jersey", GMTBST}, - {"Europe/Kaliningrad", FET}, + {"Europe/Kaliningrad", EET}, {"Europe/Kiev", EET}, {"Europe/Lisbon", WET}, {"Europe/Ljubljana", CET}, @@ -853,9 +855,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"\u4f0f\u5c14\u52a0\u683c\u52d2\u65f6\u95f4", "VOLT", - "\u4f0f\u5c14\u52a0\u683c\u52d2\u590f\u4ee4\u65f6", "VOLST", - "\u4F0F\u5C14\u52A0\u683C\u52D2\u65F6\u95F4", "VOLT"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, diff --git a/jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java b/jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java index 20cfa231737..696b571ddc3 100644 --- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java +++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java @@ -48,9 +48,9 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { String ACT[] = new String[] {"Acre \u6642\u9593", "ACT", "Acre \u590f\u4ee4\u6642\u9593", "ACST", "Acre \u6642\u9593", "ACT"}; - String ADELAIDE[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8)", "CST", - "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340)", "CST", - "\u4E2D\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8)", "CT"}; + String ADELAIDE[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8)", "ACST", + "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340)", "ACDT", + "\u4E2D\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8)", "ACT"}; String AGT[] = new String[] {"\u963f\u6839\u5ef7\u6642\u9593", "ART", "\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "ARST", "\u963F\u6839\u5EF7\u6642\u9593", "ART"}; @@ -72,12 +72,12 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { String BDT[] = new String[] {"\u5b5f\u52a0\u62c9\u6642\u9593", "BDT", "\u5b5f\u52a0\u62c9\u590f\u4ee4\u6642\u9593", "BDST", "\u5B5F\u52A0\u62C9\u6642\u9593", "BDT"}; - String BRISBANE[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u6606\u58EB\u862D)", "EST", - "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u6606\u58EB\u862D)", "EST", - "\u6771\u90E8\u6642\u9593 (\u6606\u58EB\u862D)", "ET"}; - String BROKEN_HILL[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)", "CST", - "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)", "CST", - "\u4E2D\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8/\u65B0\u5357\u5A01\u723E\u65AF)", "CT"}; + String BRISBANE[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u6606\u58EB\u862D)", "AEST", + "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u6606\u58EB\u862D)", "AEDT", + "\u6771\u90E8\u6642\u9593 (\u6606\u58EB\u862D)", "AET"}; + String BROKEN_HILL[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)", "ACST", + "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)", "ACDT", + "\u4E2D\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8/\u65B0\u5357\u5A01\u723E\u65AF)", "ACT"}; String BRT[] = new String[] {"\u5df4\u897f\u5229\u4e9e\u6642\u9593", "BRT", "\u5df4\u897f\u5229\u4e9e\u590f\u4ee4\u6642\u9593", "BRST", "\u5DF4\u897F\u5229\u4E9E\u6642\u9593", "BRT"}; @@ -111,9 +111,9 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { String CUBA[] = new String[] {"\u53e4\u5df4\u6a19\u6e96\u6642\u9593", "CST", "\u53e4\u5df4\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT", "\u53E4\u5DF4\u6642\u9593", "CT"}; - String DARWIN[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)", "CST", - "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)", "CST", - "\u6FB3\u5927\u5229\u4E9E\u4E2D\u90E8\u6642\u9593 (\u5317\u65B9\u5340\u57DF)", "CT"}; + String DARWIN[] = new String[] {"\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)", "ACST", + "\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)", "ACDT", + "\u6FB3\u5927\u5229\u4E9E\u4E2D\u90E8\u6642\u9593 (\u5317\u65B9\u5340\u57DF)", "ACT"}; String DUBLIN[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u5e73\u5747\u6642\u9593", "GMT", "\u611b\u723e\u862d\u590f\u4ee4\u6642\u9593", "IST", "\u611B\u723E\u862D\u6587\u6642\u9593", "IT"}; @@ -132,9 +132,9 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { String EST[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593", "EST", "\u6771\u65b9\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "EDT", "\u7F8E\u570B\u6771\u90E8\u6642\u9593", "ET"}; - String EST_NSW[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "EST", - "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "EST", - "\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "ET"}; + String EST_NSW[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "AEST", + "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "AEDT", + "\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)", "AET"}; String FET[] = new String[] {"\u6771\u6B50\u5167\u9678\u6642\u9593", "FET", "\u6771\u6B50\u5167\u9678\u590F\u4EE4\u6642\u9593", "FEST", "\u6771\u6B50\u5167\u9678\u6642\u9593", "FET"}; @@ -165,6 +165,9 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { String ICT[] = new String[] {"\u5370\u5ea6\u652f\u90a3\u6642\u9593", "ICT", "\u5370\u5ea6\u652f\u90a3\u590f\u4ee4\u6642\u9593", "ICST", "\u5370\u5EA6\u652F\u90A3\u6642\u9593", "ICT"}; + String IRKT[] = new String[] {"Irkutsk \u6642\u9593", "IRKT", + "Irkutsk \u590f\u4ee4\u6642\u9593", "IRKST", + "\u4F0A\u723E\u5EAB\u6B21\u514B\u6642\u9593", "IRKT"}; String IRT[] = new String[] {"\u4f0a\u6717\u6a19\u6e96\u6642\u9593", "IRST", "\u4f0a\u6717\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "IRDT", "\u4F0A\u6717\u6642\u9593", "IRT"}; @@ -177,11 +180,14 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { String JST[] = new String[] {"\u65e5\u672c\u6a19\u6e96\u6642\u9593", "JST", "\u65e5\u672c\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "JDT", "\u65E5\u672C\u6642\u9593", "JT"}; + String KRAT[] = new String[] {"\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u6642\u9593", "KRAT", + "\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u590f\u4ee4\u6642\u9593", "KRAST", + "\u514B\u62C9\u65AF\u8AFE\u4E9E\u723E\u65AF\u514B\u6642\u9593", "KRAT"}; String KST[] = new String[] {"\u97d3\u570b\u6a19\u6e96\u6642\u9593", "KST", "\u97d3\u570b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "KDT", "\u97D3\u570B\u6642\u9593", "KT"}; String LORD_HOWE[] = new String[] {"\u8c6a\u52f3\u7235\u5cf6\u6a19\u6e96\u6642\u9593", "LHST", - "\u8c6a\u52f3\u7235\u5cf6\u590f\u4ee4\u6642\u9593", "LHST", + "\u8c6a\u52f3\u7235\u5cf6\u590f\u4ee4\u6642\u9593", "LHDT", "\u8C6A\u52F3\u7235\u5CF6\u6642\u9593", "LHT"}; String MHT[] = new String[] {"\u99ac\u7d39\u723e\u7fa4\u5cf6\u6642\u9593", "MHT", "\u99ac\u7d39\u723e\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "MHST", @@ -231,20 +237,15 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { String SGT[] = new String[] {"\u65b0\u52a0\u5761\u6642\u9593", "SGT", "\u65b0\u52a0\u5761\u590f\u4ee4\u6642\u9593", "SGST", "\u65B0\u52A0\u5761\u6642\u9593", "SGT"}; - String SLST[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u5e73\u5747\u6642\u9593", "GMT", - "\u7345\u5b50\u5c71\u590f\u4ee4\u6642\u9593", "SLST", - "\u7345\u5B50\u5C71\u6642\u9593", "SLT"}; - String TASMANIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)", "EST", - "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)", "EST", - "\u6FB3\u5927\u5229\u4E9E\u6771\u90E8\u6642\u9593 (\u5854\u65AF\u99AC\u5C3C\u4E9E\u5CF6)", "ET"}; + String TASMANIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)", "AEST", + "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)", "AEDT", + "\u6FB3\u5927\u5229\u4E9E\u6771\u90E8\u6642\u9593 (\u5854\u65AF\u99AC\u5C3C\u4E9E\u5CF6)", "AET"}; String TMT[] = new String[] {"\u571f\u5eab\u66fc\u6642\u9593", "TMT", "\u571f\u5eab\u66fc\u590f\u4ee4\u6642\u9593", "TMST", "\u571F\u5EAB\u66FC\u6642\u9593", "TMT"}; String ULAT[]= new String[] {"\u5eab\u502b\u6642\u9593", "ULAT", "\u5eab\u502b\u590f\u4ee4\u6642\u9593", "ULAST", "\u5EAB\u502B\u6642\u9593", "ULAT"}; - String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u6642\u9593", "WART", - "\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "WARST"}; String WAT[] = new String[] {"\u897f\u975e\u6642\u9593", "WAT", "\u897f\u975e\u590f\u4ee4\u6642\u9593", "WAST", "\u897F\u975E\u6642\u9593", "WAT"}; @@ -254,27 +255,30 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { String WIT[] = new String[] {"\u897f\u5370\u5c3c\u6642\u9593", "WIB", "\u897f\u5370\u5c3c\u590f\u4ee4\u6642\u9593", "WIST", "\u897F\u5370\u5C3C\u6642\u9593", "WIB"}; - String WST_AUS[] = new String[] {"\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "WST", - "\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "WST", - "\u897F\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "WT"}; + String WST_AUS[] = new String[] {"\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "AWST", + "\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "AWDT", + "\u897F\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "AWT"}; String SAMOA[] = new String[] {"\u85a9\u6469\u4e9e\u6a19\u6e96\u6642\u9593", "SST", "\u85a9\u6469\u4e9e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "SDT", "\u85A9\u6469\u4E9E\u6642\u9593", "ST"}; - String WST_SAMOA[] = new String[] {"\u897f\u85a9\u6469\u4e9e\u6642\u9593", "WST", + String WST_SAMOA[] = new String[] {"\u897f\u85a9\u6469\u4e9e\u6642\u9593", "WSST", "\u897f\u85a9\u6469\u4e9e\u590f\u4ee4\u6642\u9593", "WSDT", "\u897F\u85A9\u6469\u4E9E\u6642\u9593", "WST"}; String ChST[] = new String[] {"\u67e5\u83ab\u6d1b\u6a19\u6e96\u6642\u9593", "ChST", "\u67e5\u83ab\u6d1b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ChDT", "\u67E5\u83AB\u7F85\u6642\u9593", "ChT"}; - String VICTORIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)", "EST", - "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)", "EST", - "\u6771\u90E8\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E)", "ET"}; + String VICTORIA[] = new String[] {"\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)", "AEST", + "\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)", "AEDT", + "\u6771\u90E8\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E)", "AET"}; String UTC[] = new String[] {"\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC", "\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC", "\u5354\u8ABF\u4E16\u754C\u6642\u9593", "UTC"}; String UZT[] = new String[] {"\u70cf\u8332\u5225\u514b\u65af\u5766\u6642\u9593", "UZT", "\u70cf\u8332\u5225\u514b\u65af\u5766\u590f\u4ee4\u6642\u9593", "UZST", "\u70CF\u8332\u5225\u514B\u65AF\u5766\u6642\u9593", "UZT"}; + String XJT[] = new String[] {"\u4e2d\u570b\u6a19\u6e96\u6642\u9593", "XJT", + "\u4e2d\u570b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "XJDT", + "\u4E2D\u570B\u6642\u9593", "XJT"}; return new Object[][] { {"America/Los_Angeles", PST}, @@ -336,7 +340,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { {"Africa/Djibouti", EAT}, {"Africa/Douala", WAT}, {"Africa/El_Aaiun", WET}, - {"Africa/Freetown", SLST}, + {"Africa/Freetown", GMT}, {"Africa/Gaborone", CAT}, {"Africa/Harare", CAT}, {"Africa/Johannesburg", SAST}, @@ -437,7 +441,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { "\u897f\u683c\u6797\u862d\u5cf6\u590f\u4ee4\u6642\u9593", "WGST", "\u897F\u683C\u9675\u862D\u6642\u9593", "WGT"}}, {"America/Goose_Bay", AST}, - {"America/Grand_Turk", EST}, + {"America/Grand_Turk", AST}, {"America/Grenada", AST}, {"America/Guadeloupe", AST}, {"America/Guatemala", CST}, @@ -484,9 +488,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { {"America/Mendoza", AGT}, {"America/Menominee", CST}, {"America/Merida", CST}, - {"America/Metlakatla", new String[] {"\u6885\u7279\u62C9\u5361\u7279\u62C9\u6A19\u6E96\u6642\u9593", "MeST", - "\u6885\u7279\u62C9\u5361\u7279\u62C9\u65E5\u5149\u7BC0\u7D04\u6642\u9593", "MeDT", - "\u6885\u7279\u62C9\u5361\u7279\u62C9\u6642\u9593", "MeT"}}, + {"America/Metlakatla", PST}, {"America/Mexico_City", CST}, {"America/Miquelon", new String[] {"\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u6a19\u6e96\u6642\u9593", "PMST", "\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PMDT", @@ -607,6 +609,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { "\u6c76\u840a\u590f\u4ee4\u6642\u9593", "BNST", "\u6C76\u840A\u6642\u9593", "BNT"}}, {"Asia/Calcutta", IST}, + {"Asia/Chita", IRKT}, {"Asia/Choibalsan", new String[] {"\u5de7\u5df4\u5c71 (Choibalsan) \u6642\u9593", "CHOT", "\u5de7\u5df4\u5c71 (Choibalsan) \u590f\u4ee4\u6642\u9593", "CHOST", "\u5DE7\u5DF4\u5C71 (Choibalsan) \u6642\u9593", "CHOT"}}, @@ -631,9 +634,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { {"Asia/Hovd", new String[] {"\u4faf\u5fb7 (Hovd) \u6642\u9593", "HOVT", "\u4faf\u5fb7 (Hovd) \u590f\u4ee4\u6642\u9593", "HOVST", "\u4FAF\u5FB7 (Hovd) \u6642\u9593", "HOVT"}}, - {"Asia/Irkutsk", new String[] {"Irkutsk \u6642\u9593", "IRKT", - "Irkutsk \u590f\u4ee4\u6642\u9593", "IRKST", - "\u4F0A\u723E\u5EAB\u6B21\u514B\u6642\u9593", "IRKT"}}, + {"Asia/Irkutsk", IRKT}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, {"Asia/Jayapura", new String[] {"\u6771\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "WIT", @@ -646,16 +647,14 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { "Petropavlovsk-Kamchatski \u590f\u4ee4\u6642\u9593", "PETST", "Petropavlovsk-Kamchatski \u6642\u9593", "PETT"}}, {"Asia/Karachi", PKT}, - {"Asia/Kashgar", CTT}, + {"Asia/Kashgar", XJT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, {"Asia/Khandyga", new String[] {"\u6F22\u5730\u52A0 (Khandyga) \u6642\u9593", "YAKT", "\u6F22\u5730\u52A0 (Khandyga) \u590F\u4EE4\u6642\u9593", "YAKST", "\u6F22\u5730\u52A0 (Khandyga) \u6642\u9593", "YAKT"}}, {"Asia/Kolkata", IST}, - {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u6642\u9593", "KRAT", - "\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u590f\u4ee4\u6642\u9593", "KRAST", - "\u514B\u62C9\u65AF\u8AFE\u4E9E\u723E\u65AF\u514B\u6642\u9593", "KRAT"}}, + {"Asia/Krasnoyarsk", KRAT}, {"Asia/Kuala_Lumpur", MYT}, {"Asia/Kuching", MYT}, {"Asia/Kuwait", ARAST}, @@ -670,7 +669,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { "\u83F2\u5F8B\u8CD3\u6642\u9593", "PHT"}}, {"Asia/Muscat", GST}, {"Asia/Nicosia", EET}, - {"Asia/Novokuznetsk", NOVT}, + {"Asia/Novokuznetsk", KRAT}, {"Asia/Novosibirsk", NOVT}, {"Asia/Oral", new String[] {"\u6b50\u4f5b\u6642\u9593", "ORAT", "\u6b50\u4f5b\u590f\u4ee4\u6642\u9593", "ORAST", @@ -696,6 +695,9 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { {"Asia/Samarkand", UZT}, {"Asia/Seoul", KST}, {"Asia/Singapore", SGT}, + {"Asia/Srednekolymsk", new String[] {"Srednekolymsk Time", "SRET", + "Srednekolymsk Daylight Time", "SREDT", + "Srednekolymsk Time", "SRET"}}, {"Asia/Taipei", new String[] {"\u53f0\u7063\u6a19\u6e96\u6642\u9593", "TST", "\u53f0\u7063\u590f\u4ee4\u6642\u9593", "TDT", "\u53f0\u7063\u6642\u9593", "TT"}}, @@ -710,7 +712,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { {"Asia/Ujung_Pandang", CIT}, {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, - {"Asia/Urumqi", CTT}, + {"Asia/Urumqi", XJT}, {"Asia/Ust-Nera", new String[] {"\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u6642\u9593", "VLAT", "\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u590F\u4EE4\u6642\u9593", "VLAST", "\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u6642\u9593", "VLAT"}}, @@ -752,9 +754,9 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, - {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "CWST", - "\u4E2D\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "CWST", - "\u4E2D\u897F\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "CWT"}}, + {"Australia/Eucla", new String[] {"\u4E2D\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "ACWST", + "\u4E2D\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "ACWDT", + "\u4E2D\u897F\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)", "ACWT"}}, {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, @@ -820,7 +822,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { {"Europe/Isle_of_Man", GMTBST}, {"Europe/Istanbul", EET}, {"Europe/Jersey", GMTBST}, - {"Europe/Kaliningrad", FET}, + {"Europe/Kaliningrad", EET}, {"Europe/Kiev", EET}, {"Europe/Lisbon", WET}, {"Europe/Ljubljana", CET}, @@ -855,9 +857,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { {"Europe/Vatican", CET}, {"Europe/Vienna", CET}, {"Europe/Vilnius", EET}, - {"Europe/Volgograd", new String[] {"\u4f0f\u723e\u52a0\u683c\u52d2\u6642\u9593", "VOLT", - "\u4f0f\u723e\u52a0\u683c\u52d2\u590f\u4ee4\u6642\u9593", "VOLST", - "\u4F0F\u723E\u52A0\u683C\u52D2\u6642\u9593", "VOLT"}}, + {"Europe/Volgograd", MSK}, {"Europe/Warsaw", CET}, {"Europe/Zagreb", CET}, {"Europe/Zaporozhye", EET}, diff --git a/jdk/test/ProblemList.txt b/jdk/test/ProblemList.txt index fa11cfc642d..39697b08227 100644 --- a/jdk/test/ProblemList.txt +++ b/jdk/test/ProblemList.txt @@ -124,7 +124,7 @@ # jdk_management -# 8046351 +# 8044591 com/sun/management/GarbageCollectorMXBean/GarbageCollectionNotificationContentTest.java generic-all com/sun/management/GarbageCollectorMXBean/GarbageCollectionNotificationTest.java generic-all # 8056143 @@ -283,15 +283,13 @@ com/sun/jdi/JdbReadTwiceTest.sh generic-all # 8031482 sun/tools/jcmd/TestJcmdSanity.java windows-all -# 8033104 -sun/jvmstat/monitor/MonitoredVm/CR6672135.java generic-all - # 8027668 sun/tools/jstatd/TestJstatdDefaults.java generic-all sun/tools/jstatd/TestJstatdServer.java generic-all sun/tools/jstatd/TestJstatdPort.java generic-all +sun/tools/jstatd/TestJstatdPortAndServer.java generic-all -# 8046355 +# 8046285 8027668 sun/tools/jstatd/TestJstatdExternalRegistry.java generic-all # 6456333 diff --git a/jdk/test/java/nio/file/WatchService/LotsOfCancels.java b/jdk/test/java/nio/file/WatchService/LotsOfCancels.java new file mode 100644 index 00000000000..cb7f9eff9af --- /dev/null +++ b/jdk/test/java/nio/file/WatchService/LotsOfCancels.java @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * 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. + * + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @bug 8029516 + * @summary Bash on WatchKey.cancel with a view to causing a crash when + * an outstanding I/O operation on directory completes after the + * directory has been closed + */ + +import java.nio.file.ClosedWatchServiceException; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.WatchKey; +import java.nio.file.WatchService; +import static java.nio.file.StandardWatchEventKinds.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +public class LotsOfCancels { + + // set to true for any exceptions + static volatile boolean failed; + + public static void main(String[] args) throws Exception { + + // create a bunch of directories. Create two tasks for each directory, + // one to bash on cancel, the other to poll the events + ExecutorService pool = Executors.newCachedThreadPool(); + try { + Path top = Files.createTempDirectory("work"); + top.toFile().deleteOnExit(); + for (int i=1; i<=16; i++) { + Path dir = Files.createDirectory(top.resolve("dir-" + i)); + WatchService watcher = FileSystems.getDefault().newWatchService(); + pool.submit(() -> handle(dir, watcher)); + pool.submit(() -> poll(watcher)); + } + } finally { + pool.shutdown(); + } + + // give thread pool lots of time to terminate + if (!pool.awaitTermination(5L, TimeUnit.MINUTES)) + throw new RuntimeException("Thread pool did not terminate"); + + if (failed) + throw new RuntimeException("Test failed, see log for details"); + } + + /** + * Stress the given WatchService, specifically the cancel method, in + * the given directory. Closes the WatchService when done. + */ + static void handle(Path dir, WatchService watcher) { + try { + try { + Path file = dir.resolve("anyfile"); + for (int i=0; i<2000; i++) { + WatchKey key = dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE); + Files.createFile(file); + Files.delete(file); + key.cancel(); + } + } finally { + watcher.close(); + } + } catch (Exception e) { + e.printStackTrace(); + failed = true; + } + } + + /** + * Polls the given WatchService in a tight loop. This keeps the event + * queue drained, it also hogs a CPU core which seems necessary to + * tickle the original bug. + */ + static void poll(WatchService watcher) { + try { + for (;;) { + WatchKey key = watcher.take(); + if (key != null) { + key.pollEvents(); + key.reset(); + } + } + } catch (ClosedWatchServiceException expected) { + // nothing to do + } catch (Exception e) { + e.printStackTrace(); + failed = true; + } + } + +} + diff --git a/jdk/test/java/security/AccessController/DoPrivAccomplice.java b/jdk/test/java/security/AccessController/DoPrivAccomplice.java new file mode 100644 index 00000000000..6cc2846deee --- /dev/null +++ b/jdk/test/java/security/AccessController/DoPrivAccomplice.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved. + * 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +public class DoPrivAccomplice { + + public String go() { + String name = (String)java.security.AccessController. + doPrivileged((java.security.PrivilegedAction)() -> + System.getProperty("user.name")); + return name; + } +} diff --git a/jdk/test/java/security/AccessController/DoPrivAccompliceTest.java b/jdk/test/java/security/AccessController/DoPrivAccompliceTest.java new file mode 100644 index 00000000000..d18038c9a87 --- /dev/null +++ b/jdk/test/java/security/AccessController/DoPrivAccompliceTest.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved. + * 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.URI; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @test + * @bug 8048362 + * @compile ../../../lib/testlibrary/JavaToolUtils.java + * DoPrivAccomplice.java DoPrivTest.java + * @summary Tests the doPrivileged with accomplice Generate two jars + * (DoPrivTest.jar and DoPrivAccomplice.jar) and grant permission to + * DoPrivAccmplice.jar for reading user.home property from a PrivilagedAction. + * Run DoPrivTest.jar and try to access user.home property using + * DoPrivAccmplice.jar. + * @run main/othervm DoPrivAccompliceTest + */ + +public class DoPrivAccompliceTest { + + private static final String PWD = System.getProperty("test.classes", "./"); + private static final String ACTION_SOURCE = "DoPrivAccomplice"; + private static final String TEST_SOURCE = "DoPrivTest"; + + public static void createPolicyFile(URI codebaseURL) throws IOException { + String codebase = codebaseURL.toString(); + String quotes = "\""; + StringBuilder policyFile = new StringBuilder(); + policyFile.append("grant codeBase ").append(quotes). + append(codebase).append(quotes).append("{\n"). + append("permission java.util.PropertyPermission "). + append(quotes).append("user.name").append(quotes). + append(",").append(quotes).append("read").append(quotes). + append(";\n};"); + try (FileWriter writer = new FileWriter(new File(PWD, "java.policy"))) { + writer.write(policyFile.toString()); + writer.close(); + } catch (IOException e) { + System.err.println("Error while creating policy file"); + throw e; + } + } + + public static void main(String[] args) throws Exception { + final File class1 = new File(PWD, ACTION_SOURCE + ".class"); + final File class2 = new File(PWD, TEST_SOURCE + ".class"); + final File jarFile1 = new File(PWD, ACTION_SOURCE + ".jar"); + final File jarFile2 = new File(PWD, TEST_SOURCE + ".jar"); + System.out.println("Compilation successfull"); + JavaToolUtils.createJar(jarFile1, Arrays.asList(new File[]{class1})); + System.out.println("Created jar file " + jarFile1); + JavaToolUtils.createJar(jarFile2, Arrays.asList(new File[]{class2})); + System.out.println("Created jar file " + jarFile2); + createPolicyFile(jarFile1.toURI()); + + List commands = new ArrayList<>(); + final String pathSepartor = System.getProperty("path.separator"); + commands.add("-Djava.security.manager"); + commands.add("-Djava.security.policy=" + PWD + "/java.policy"); + commands.add("-classpath"); + commands.add(PWD + "/" + TEST_SOURCE + ".jar" + pathSepartor + + PWD + "/" + ACTION_SOURCE + ".jar"); + commands.add(TEST_SOURCE); + if (JavaToolUtils.runJava(commands) == 0) { + System.out.println("Test PASSES"); + } + } + +} diff --git a/jdk/test/java/security/AccessController/DoPrivTest.java b/jdk/test/java/security/AccessController/DoPrivTest.java new file mode 100644 index 00000000000..9ed0f97d000 --- /dev/null +++ b/jdk/test/java/security/AccessController/DoPrivTest.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved. + * 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +public class DoPrivTest { + + public static void main(String[] args) { + String name = new DoPrivAccomplice().go(); + System.out.println("Received Name : " + name); + } +} diff --git a/jdk/test/java/security/KeyStore/TestKeyStoreBasic.java b/jdk/test/java/security/KeyStore/TestKeyStoreBasic.java new file mode 100644 index 00000000000..00b46baf6a5 --- /dev/null +++ b/jdk/test/java/security/KeyStore/TestKeyStoreBasic.java @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * 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. + * + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import static java.lang.System.out; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.Provider; +import java.security.Security; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; + +/* + * @test + * @bug 8048621 + * @summary Test the basic operations of KeyStore, provided by SunJCE (jceks), + * and SunPKCS11-Solaris(PKCS11KeyStore) + * @author Yu-Ching Valerie PENG + */ + +public class TestKeyStoreBasic { + private static final char[] PASSWD2 = new char[] { + 'b', 'o', 'r', 'e', 'd' + }; + private static final char[] PASSWDK = new String("cannot be null") + .toCharArray(); + private static final String[] KS_Type = { + "jks", "jceks", "pkcs12", "PKCS11KeyStore" + }; + private static final String[] PRO_TYPE = { + "SUN", "SunJCE", "SunJSSE", "SunPKCS11-Solaris" + }; + private static final String ALIAS_HEAD = "test"; + + public static void main(String args[]) throws Exception { + TestKeyStoreBasic jstest = new TestKeyStoreBasic(); + jstest.run(); + } + + public void run() throws Exception { + Provider[] providers = Security.getProviders(); + for (Provider p: providers) { + String prvName = p.getName(); + if (prvName.startsWith("SunJCE") + || prvName.startsWith("SunPKCS11-Solaris")) { + try { + runTest(p); + out.println("Test with provider " + p.getName() + "" + + " passed"); + } catch (java.security.KeyStoreException e) { + if (prvName.startsWith("SunPKCS11-Solaris")) { + out.println("KeyStoreException is expected " + + "PKCS11KeyStore is invalid keystore type."); + e.printStackTrace(); + } else { + throw e; + } + } + } + } + } + + public void runTest(Provider p) throws Exception { + SecretKey key = new SecretKeySpec( + new String("No one knows").getBytes(), "PBE"); + int numEntries = 5; + String proName = p.getName(); + String type = null; + for (int i = 0; i < PRO_TYPE.length; i++) { + if (proName.compareTo(PRO_TYPE[i]) == 0) { + type = KS_Type[i]; + break; + } + } + KeyStore ks = KeyStore.getInstance(type, p); + KeyStore ks2 = KeyStore.getInstance(type, ks.getProvider().getName()); + + // create an empty key store + ks.load(null, null); + + // store the secret keys + for (int j = 0; j < numEntries; j++) { + ks.setKeyEntry(ALIAS_HEAD + j, key, PASSWDK, null); + } + + // initialize the 2nd key store object with the 1st one + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ks.store(baos, PASSWDK); + byte[] bArr = baos.toByteArray(); + ByteArrayInputStream bais = new ByteArrayInputStream(bArr); + ks2.load(bais, null); + + // check 2nd key store type + checkType(ks2, type); + // check the existing aliases for the 2nd key store + checkAlias(ks2, numEntries); + + // compare the creation date of the 2 key stores for all aliases + compareCreationDate(ks, ks2, numEntries); + // remove the last entry from the 2nd key store + numEntries--; + ks2.deleteEntry(ALIAS_HEAD + numEntries); + + // re-initialize the 1st key store with the 2nd key store + baos.reset(); + ks2.store(baos, PASSWD2); + bais = new ByteArrayInputStream(baos.toByteArray()); + try { + // expect an exception since the password is incorrect + ks.load(bais, PASSWDK); + throw new RuntimeException( + "ERROR: passed the loading with incorrect password"); + } catch (IOException ex) { + bais.reset(); + ks.load(bais, PASSWD2); + bais.reset(); + ks.load(bais, null); + } finally { + bais.close(); + baos.close(); + } + + // check key store type + checkType(ks, type); + + // check the existing aliases + checkAlias(ks, numEntries); + + // compare the creation date of the 2 key stores for all aliases + compareCreationDate(ks, ks2, numEntries); + + } + + // check key store type + private void checkType(KeyStore obj, String type) { + if (!obj.getType().equals(type)) { + throw new RuntimeException("ERROR: wrong key store type"); + + } + } + + // check the existing aliases + private void checkAlias(KeyStore obj, int range) throws KeyStoreException { + for (int k = 0; k < range; k++) { + if (!obj.containsAlias(ALIAS_HEAD + k)) { + throw new RuntimeException("ERROR: alias (" + k + + ") should exist"); + + } + } + } + + // compare the creation dates - true if all the same + private void compareCreationDate(KeyStore o1, KeyStore o2, int range) + throws KeyStoreException { + boolean result = true; + String alias = null; + for (int k = 0; k < range; k++) { + alias = ALIAS_HEAD + k; + if (!o1.getCreationDate(alias).equals(o2.getCreationDate(alias))) { + throw new RuntimeException("ERROR: entry creation time (" + k + + ") differs"); + + } + } + } + +} diff --git a/jdk/test/java/security/KeyStore/TestKeyStoreEntry.java b/jdk/test/java/security/KeyStore/TestKeyStoreEntry.java new file mode 100644 index 00000000000..6448e5becea --- /dev/null +++ b/jdk/test/java/security/KeyStore/TestKeyStoreEntry.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * 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. + * + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import static java.lang.System.out; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.security.Key; +import java.security.KeyStore; +import java.security.Provider; +import java.security.Security; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; + +/* + * @test + * @bug 8048621 + * @summary Test the basic operations of KeyStore entry, provided by SunJCE + * (jceks), and SunPKCS11-Solaris(PKCS11KeyStore) + * @author Yu-Ching Valerie PENG + */ + +public class TestKeyStoreEntry { + private static final char[] PASSWDK = new char[] { + 't', 'e', 'r', 'c', 'e', 's' + }; + private static final char[] PASSWDF = new String("guardian Angel") + .toCharArray(); + private static final String[] KS_ALGOS = { + "DES", "DESede", "Blowfish" + }; + private static final int NUM_ALGOS = KS_ALGOS.length; + + private static final String[] KS_TYPE = { + "jks", "jceks", "pkcs12", "PKCS11KeyStore" + }; + private static final String[] PRO_TYPE = { + "SUN", "SunJCE", "SunJSSE", "SunPKCS11-Solaris" + }; + + private final SecretKey[] sks = new SecretKey[NUM_ALGOS]; + + TestKeyStoreEntry() throws Exception { + // generate secret keys which are to be stored in the jce + // key store object + KeyGenerator[] kgs = new KeyGenerator[NUM_ALGOS]; + for (int i = 0; i < NUM_ALGOS; i++) { + kgs[i] = KeyGenerator.getInstance(KS_ALGOS[i], "SunJCE"); + sks[i] = kgs[i].generateKey(); + } + + } + + public static void main(String args[]) throws Exception { + TestKeyStoreEntry jstest = new TestKeyStoreEntry(); + jstest.run(); + } + + public void run() throws Exception { + + Provider[] providers = Security.getProviders(); + for (Provider p: providers) { + String prvName = p.getName(); + if (prvName.startsWith("SunJCE") + || prvName.startsWith("SunPKCS11-Solaris")) { + try { + runTest(p); + out.println("Test with provider " + p.getName() + "" + + " passed"); + + } catch (java.security.KeyStoreException e) { + if (prvName.startsWith("SunPKCS11-Solaris")) { + out.println("KeyStoreException is expected because " + + "PKCS11KeyStore is invalid keystore type."); + e.printStackTrace(); + } else { + throw e; + } + } + } + } + } + + public void runTest(Provider p) throws Exception { + try (FileOutputStream fos = new FileOutputStream("jceks"); + FileInputStream fis = new FileInputStream("jceks");) { + + KeyStore ks = KeyStore.getInstance("jceks", p); + // create an empty key store + ks.load(null, null); + + // store the secret keys + String aliasHead = new String("secretKey"); + for (int j = 0; j < NUM_ALGOS; j++) { + ks.setKeyEntry(aliasHead + j, sks[j], PASSWDK, null); + } + + // write the key store out to a file + ks.store(fos, PASSWDF); + // wipe clean the existing key store + for (int k = 0; k < NUM_ALGOS; k++) { + ks.deleteEntry(aliasHead + k); + } + if (ks.size() != 0) { + throw new RuntimeException("ERROR: re-initialization failed"); + } + + // reload the key store with the file + ks.load(fis, PASSWDF); + + // check the integrity/validaty of the key store + Key temp = null; + String alias = null; + if (ks.size() != NUM_ALGOS) { + throw new RuntimeException("ERROR: wrong number of key" + + " entries"); + } + + for (int m = 0; m < ks.size(); m++) { + alias = aliasHead + m; + temp = ks.getKey(alias, PASSWDK); + // compare the keys + if (!temp.equals(sks[m])) { + throw new RuntimeException("ERROR: key comparison (" + m + + ") failed"); + } + // check the type of key + if (ks.isCertificateEntry(alias) || !ks.isKeyEntry(alias)) { + throw new RuntimeException("ERROR: type identification (" + + m + ") failed"); + } + } + } + } + +} diff --git a/jdk/test/java/sql/test/sql/DriverManagerPermissionsTests.java b/jdk/test/java/sql/test/sql/DriverManagerPermissionsTests.java new file mode 100644 index 00000000000..73a8923d82f --- /dev/null +++ b/jdk/test/java/sql/test/sql/DriverManagerPermissionsTests.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * 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. + * + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package test.sql; + +import java.security.AccessControlException; +import java.security.Policy; +import java.sql.DriverManager; +import java.sql.SQLException; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import util.BaseTest; +import util.StubDriver; +import util.TestPolicy; + +public class DriverManagerPermissionsTests extends BaseTest { + + private static Policy policy; + private static SecurityManager sm; + + /* + * Install a SecurityManager along with a base Policy to allow testNG to run + */ + @BeforeClass + public static void setUpClass() throws Exception { + setPolicy(new TestPolicy()); + System.setSecurityManager(new SecurityManager()); + } + + /* + * Install the original Policy and SecurityManager + */ + @AfterClass + public static void tearDownClass() throws Exception { + System.setSecurityManager(sm); + setPolicy(policy); + } + + /* + * Save off the original Policy and SecurityManager + */ + public DriverManagerPermissionsTests() { + policy = Policy.getPolicy(); + sm = System.getSecurityManager(); + } + + /* + * Validate that AccessControlException is thrown if SQLPermission("setLog") + * has not been granted + */ + @Test(expectedExceptions = AccessControlException.class) + public void test() { + setPolicy(new TestPolicy()); + DriverManager.setLogStream(null); + } + + /* + * Validate that setLogStream succeeds if SQLPermission("setLog") has been + * granted + */ + @Test + public void test1() { + Policy.setPolicy(new TestPolicy("setLog")); + DriverManager.setLogStream(null); + } + + /* + * Validate that setLogStream succeeds if AllPermissions has been granted + */ + @Test + public void test2() { + setPolicy(new TestPolicy("all")); + DriverManager.setLogStream(null); + } + + /* + * Validate that AccessControlException is thrown if SQLPermission("setLog") + * has not been granted + */ + @Test(expectedExceptions = AccessControlException.class) + public void test4() { + setPolicy(new TestPolicy()); + DriverManager.setLogWriter(null); + } + + /* + * Validate that setLogWriter succeeds if SQLPermission("setLog") has been + * granted + */ + @Test + public void test5() { + setPolicy(new TestPolicy("setLog")); + DriverManager.setLogWriter(null); + } + + /* + * Validate that setLogWriter succeeds if AllPermissions has been granted + */ + @Test + public void test6() { + setPolicy(new TestPolicy("all")); + DriverManager.setLogWriter(null); + } + + /* + * Validate that AccessControlException is thrown if + * SQLPermission("deregisterDriver") has not been granted + */ + @Test(expectedExceptions = AccessControlException.class) + public void test7() throws SQLException { + setPolicy(new TestPolicy()); + DriverManager.deregisterDriver(new StubDriver()); + } + + /* + * Validate that deregisterDriver succeeds if + * SQLPermission("deregisterDriver") has been granted + */ + @Test + public void test8() throws SQLException { + setPolicy(new TestPolicy("deregisterDriver")); + DriverManager.deregisterDriver(new StubDriver()); + } + + /* + * Validate that deregisterDriver succeeds if AllPermissions has been + * granted + */ + @Test + public void test9() throws SQLException { + setPolicy(new TestPolicy("all")); + DriverManager.deregisterDriver(new StubDriver()); + } +} diff --git a/jdk/test/java/sql/util/BaseTest.java b/jdk/test/java/sql/util/BaseTest.java index 130dae8fb4e..da991431abc 100644 --- a/jdk/test/java/sql/util/BaseTest.java +++ b/jdk/test/java/sql/util/BaseTest.java @@ -27,6 +27,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.security.Policy; import java.sql.SQLException; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; @@ -88,4 +89,11 @@ public class BaseTest { } return o1; } + + /* + * Utility Method used to set the current Policy + */ + protected static void setPolicy(Policy p) { + Policy.setPolicy(p); + } } diff --git a/jdk/test/java/sql/util/TestPolicy.java b/jdk/test/java/sql/util/TestPolicy.java new file mode 100644 index 00000000000..dca2152deaa --- /dev/null +++ b/jdk/test/java/sql/util/TestPolicy.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * 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. + * + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package util; + +import java.io.FilePermission; +import java.security.AllPermission; +import java.security.CodeSource; +import java.security.Permission; +import java.security.PermissionCollection; +import java.security.Permissions; +import java.security.Policy; +import java.security.ProtectionDomain; +import java.security.SecurityPermission; +import java.sql.SQLPermission; +import java.util.Enumeration; +import java.util.PropertyPermission; +import java.util.StringJoiner; + +/* + * Simple Policy class that supports the required Permissions to validate the + * JDBC concrete classes + */ +public class TestPolicy extends Policy { + + final PermissionCollection permissions = new Permissions(); + + /** + * Constructor which sets the minimum permissions allowing testNG to work + * with a SecurityManager + */ + public TestPolicy() { + setMinimalPermissions(); + } + + /* + * Constructor which determines which permissions are defined for this + * Policy used by the JDBC tests Possible values are: all (ALLPermissions), + * setLog (SQLPemission("setLog"), deregisterDriver + * (SQLPermission("deregisterDriver") (SQLPermission("deregisterDriver"), + * and setSyncFactory(SQLPermission(setSyncFactory), + * + * @param policy Permissions to set + */ + public TestPolicy(String policy) { + + switch (policy) { + case "all": + permissions.add(new AllPermission()); + break; + case "setLog": + setMinimalPermissions(); + permissions.add(new SQLPermission("setLog")); + break; + case "deregisterDriver": + setMinimalPermissions(); + permissions.add(new SQLPermission("deregisterDriver")); + break; + case "setSyncFactory": + setMinimalPermissions(); + permissions.add(new SQLPermission("setSyncFactory")); + break; + default: + setMinimalPermissions(); + } + } + + /* + * Defines the minimal permissions required by testNG when running these + * tests + */ + private void setMinimalPermissions() { + permissions.add(new SecurityPermission("getPolicy")); + permissions.add(new SecurityPermission("setPolicy")); + permissions.add(new RuntimePermission("getClassLoader")); + permissions.add(new RuntimePermission("setSecurityManager")); + permissions.add(new RuntimePermission("createSecurityManager")); + permissions.add(new PropertyPermission("testng.show.stack.frames", + "read")); + permissions.add(new PropertyPermission("line.separator", "read")); + permissions.add(new PropertyPermission("fileStringBuffer", "read")); + permissions.add(new PropertyPermission("dataproviderthreadcount", "read")); + permissions.add(new PropertyPermission("java.io.tmpdir", "read")); + permissions.add(new FilePermission("<>", + "read, write, delete")); + } + + /* + * Overloaded methods from the Policy class + */ + @Override + public String toString() { + StringJoiner sj = new StringJoiner("\n", "policy: ", ""); + Enumeration perms = permissions.elements(); + while (perms.hasMoreElements()) { + sj.add(perms.nextElement().toString()); + } + return sj.toString(); + + } + + @Override + public PermissionCollection getPermissions(ProtectionDomain domain) { + return permissions; + } + + @Override + public PermissionCollection getPermissions(CodeSource codesource) { + return permissions; + } + + @Override + public boolean implies(ProtectionDomain domain, Permission perm) { + return permissions.implies(perm); + } +} diff --git a/jdk/test/java/time/test/java/time/format/TestZoneTextPrinterParser.java b/jdk/test/java/time/test/java/time/format/TestZoneTextPrinterParser.java index 4021a147c9c..28ccbfe0516 100644 --- a/jdk/test/java/time/test/java/time/format/TestZoneTextPrinterParser.java +++ b/jdk/test/java/time/test/java/time/format/TestZoneTextPrinterParser.java @@ -138,7 +138,7 @@ public class TestZoneTextPrinterParser extends AbstractTestPrinterParser { {"Asia/Taipei", "China Standard Time", preferred, Locale.ENGLISH, TextStyle.FULL}, {"America/Chicago", "CST", none, Locale.ENGLISH, TextStyle.SHORT}, {"Asia/Taipei", "CST", preferred, Locale.ENGLISH, TextStyle.SHORT}, - {"Australia/South", "CST", preferred_s, Locale.ENGLISH, TextStyle.SHORT}, + {"Australia/South", "ACST", preferred_s, Locale.ENGLISH, TextStyle.SHORT}, {"America/Chicago", "CDT", none, Locale.ENGLISH, TextStyle.SHORT}, {"Asia/Shanghai", "CDT", preferred_s, Locale.ENGLISH, TextStyle.SHORT}, }; diff --git a/jdk/test/java/util/Currency/tablea1.txt b/jdk/test/java/util/Currency/tablea1.txt index 94c848ae880..298856753b5 100644 --- a/jdk/test/java/util/Currency/tablea1.txt +++ b/jdk/test/java/util/Currency/tablea1.txt @@ -1,12 +1,12 @@ # # -# Amendments up until ISO 4217 AMENDMENT NUMBER 156 -# (As of 23 July 2013) +# Amendments up until ISO 4217 AMENDMENT NUMBER 159 +# (As of 15 August 2014) # # Version FILEVERSION=1 -DATAVERSION=156 +DATAVERSION=159 # ISO 4217 currency data AF AFN 971 2 @@ -142,7 +142,7 @@ LS LSL 426 2 LR LRD 430 2 LY LYD 434 3 LI CHF 756 2 -LT LTL 440 2 +LT LTL 440 2 2014-12-31-22-00-00 EUR 978 2 LU EUR 978 2 MO MOP 446 2 MK MKD 807 2 diff --git a/jdk/test/javax/sql/testng/test/rowset/spi/SyncFactoryPermissionsTests.java b/jdk/test/javax/sql/testng/test/rowset/spi/SyncFactoryPermissionsTests.java new file mode 100644 index 00000000000..1b60f5b1c39 --- /dev/null +++ b/jdk/test/javax/sql/testng/test/rowset/spi/SyncFactoryPermissionsTests.java @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * 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. + * + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package test.rowset.spi; + +import java.security.AccessControlException; +import java.security.Policy; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; +import javax.sql.rowset.spi.SyncFactory; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import util.BaseTest; +import util.TestPolicy; + +public class SyncFactoryPermissionsTests extends BaseTest { + + Context ctx; + private static Policy policy; + private static SecurityManager sm; + + /* + * Install a SeeurityManager along with a base Policy to allow testNG to run + */ + @BeforeClass + public static void setUpClass() throws Exception { + setPolicy(new TestPolicy()); + System.setSecurityManager(new SecurityManager()); + } + + /* + * Install the original Policy and SecurityManager + */ + @AfterClass + public static void tearDownClass() throws Exception { + System.setSecurityManager(sm); + setPolicy(policy); + } + + /* + * Initialize a Context to be used in our tests. + * Save off the original Policy and SecurityManager + */ + public SyncFactoryPermissionsTests() { + policy = Policy.getPolicy(); + sm = System.getSecurityManager(); + + try { + ctx = new InitialContext(); + } catch (NamingException ex) { + Logger.getLogger(SyncFactoryPermissionsTests.class.getName()). + log(Level.SEVERE, null, ex); + } + } + + /* + * Validate that AccessControlException is thrown if + * SQLPermission("setSyncFactory") has not been granted + */ + @Test(expectedExceptions = AccessControlException.class) + public void test() throws Exception { + setPolicy(new TestPolicy()); + SyncFactory.setJNDIContext(ctx); + } + + /* + * Validate that setJNDIContext succeeds if SQLPermission("setSyncFactory") + * has been granted + */ + @Test + public void test1() throws Exception { + Policy.setPolicy(new TestPolicy("setSyncFactory")); + SyncFactory.setJNDIContext(ctx); + } + + /* + * Validate that setJNDIContext succeeds if AllPermissions has been granted + */ + @Test + public void test2() throws Exception { + setPolicy(new TestPolicy("all")); + SyncFactory.setJNDIContext(ctx); + } +} diff --git a/jdk/test/javax/sql/testng/util/BaseTest.java b/jdk/test/javax/sql/testng/util/BaseTest.java index 130dae8fb4e..da991431abc 100644 --- a/jdk/test/javax/sql/testng/util/BaseTest.java +++ b/jdk/test/javax/sql/testng/util/BaseTest.java @@ -27,6 +27,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.security.Policy; import java.sql.SQLException; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; @@ -88,4 +89,11 @@ public class BaseTest { } return o1; } + + /* + * Utility Method used to set the current Policy + */ + protected static void setPolicy(Policy p) { + Policy.setPolicy(p); + } } diff --git a/jdk/test/javax/sql/testng/util/TestPolicy.java b/jdk/test/javax/sql/testng/util/TestPolicy.java new file mode 100644 index 00000000000..dca2152deaa --- /dev/null +++ b/jdk/test/javax/sql/testng/util/TestPolicy.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * 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. + * + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package util; + +import java.io.FilePermission; +import java.security.AllPermission; +import java.security.CodeSource; +import java.security.Permission; +import java.security.PermissionCollection; +import java.security.Permissions; +import java.security.Policy; +import java.security.ProtectionDomain; +import java.security.SecurityPermission; +import java.sql.SQLPermission; +import java.util.Enumeration; +import java.util.PropertyPermission; +import java.util.StringJoiner; + +/* + * Simple Policy class that supports the required Permissions to validate the + * JDBC concrete classes + */ +public class TestPolicy extends Policy { + + final PermissionCollection permissions = new Permissions(); + + /** + * Constructor which sets the minimum permissions allowing testNG to work + * with a SecurityManager + */ + public TestPolicy() { + setMinimalPermissions(); + } + + /* + * Constructor which determines which permissions are defined for this + * Policy used by the JDBC tests Possible values are: all (ALLPermissions), + * setLog (SQLPemission("setLog"), deregisterDriver + * (SQLPermission("deregisterDriver") (SQLPermission("deregisterDriver"), + * and setSyncFactory(SQLPermission(setSyncFactory), + * + * @param policy Permissions to set + */ + public TestPolicy(String policy) { + + switch (policy) { + case "all": + permissions.add(new AllPermission()); + break; + case "setLog": + setMinimalPermissions(); + permissions.add(new SQLPermission("setLog")); + break; + case "deregisterDriver": + setMinimalPermissions(); + permissions.add(new SQLPermission("deregisterDriver")); + break; + case "setSyncFactory": + setMinimalPermissions(); + permissions.add(new SQLPermission("setSyncFactory")); + break; + default: + setMinimalPermissions(); + } + } + + /* + * Defines the minimal permissions required by testNG when running these + * tests + */ + private void setMinimalPermissions() { + permissions.add(new SecurityPermission("getPolicy")); + permissions.add(new SecurityPermission("setPolicy")); + permissions.add(new RuntimePermission("getClassLoader")); + permissions.add(new RuntimePermission("setSecurityManager")); + permissions.add(new RuntimePermission("createSecurityManager")); + permissions.add(new PropertyPermission("testng.show.stack.frames", + "read")); + permissions.add(new PropertyPermission("line.separator", "read")); + permissions.add(new PropertyPermission("fileStringBuffer", "read")); + permissions.add(new PropertyPermission("dataproviderthreadcount", "read")); + permissions.add(new PropertyPermission("java.io.tmpdir", "read")); + permissions.add(new FilePermission("<>", + "read, write, delete")); + } + + /* + * Overloaded methods from the Policy class + */ + @Override + public String toString() { + StringJoiner sj = new StringJoiner("\n", "policy: ", ""); + Enumeration perms = permissions.elements(); + while (perms.hasMoreElements()) { + sj.add(perms.nextElement().toString()); + } + return sj.toString(); + + } + + @Override + public PermissionCollection getPermissions(ProtectionDomain domain) { + return permissions; + } + + @Override + public PermissionCollection getPermissions(CodeSource codesource) { + return permissions; + } + + @Override + public boolean implies(ProtectionDomain domain, Permission perm) { + return permissions.implies(perm); + } +} diff --git a/jdk/test/lib/testlibrary/JavaToolUtils.java b/jdk/test/lib/testlibrary/JavaToolUtils.java new file mode 100644 index 00000000000..c9736bcf9a0 --- /dev/null +++ b/jdk/test/lib/testlibrary/JavaToolUtils.java @@ -0,0 +1,209 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.file.Files; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.TimeUnit; +import java.util.jar.Attributes; +import java.util.jar.JarEntry; +import java.util.jar.JarOutputStream; +import java.util.jar.Manifest; +import javax.tools.JavaCompiler; +import javax.tools.JavaFileObject; +import javax.tools.StandardJavaFileManager; +import javax.tools.ToolProvider; + +/** + * Utils class for compiling , creating jar file and executing a java command + * + * @author Raghu Nair + */ + +public class JavaToolUtils { + + public static final long DEFAULT_WAIT_TIME = 10000; + + private JavaToolUtils() { + } + + /** + * Takes a list of files and compile these files into the working directory. + * + * @param files + * @throws IOException + */ + public static void compileFiles(List files) throws IOException { + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + try (StandardJavaFileManager fileManager = compiler. + getStandardFileManager(null, null, null)) { + Iterable compilationUnit + = fileManager.getJavaFileObjectsFromFiles(files); + compiler.getTask(null, fileManager, null, null, null, + compilationUnit).call(); + } + } + + /** + * Create a jar file using the list of files provided. + * + * @param jar + * @param files + * @throws IOException + */ + public static void createJar(File jar, List files) + throws IOException { + Manifest manifest = new Manifest(); + manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, + "1.0"); + try (JarOutputStream target = new JarOutputStream( + new FileOutputStream(jar), manifest)) { + for (File file : files) { + add(file, target); + } + } + } + + private static void add(File source, JarOutputStream target) + throws IOException { + Objects.requireNonNull(source, "source cannot be null"); + Objects.requireNonNull(target, "target cannot be null"); + // not tested against directories and from different path. + String name = source.getName(); + if (source.isDirectory()) { + if (!name.isEmpty()) { + if (!name.endsWith("/")) { + name += "/"; + } + JarEntry entry = new JarEntry(name); + entry.setTime(source.lastModified()); + target.putNextEntry(entry); + target.closeEntry(); + } + for (File nestedFile : source.listFiles()) { + add(nestedFile, target); + } + return; + } + System.out.println("Adding entry " + name); + JarEntry entry = new JarEntry(name); + entry.setTime(source.lastModified()); + target.putNextEntry(entry); + Files.copy(source.toPath(), target); + target.closeEntry(); + } + + /** + * Runs java command with provided arguments. Caller should not pass java + * command in the argument list. + * + * @param commands + * @param waitTime time to wait for the command to exit in milli seconds + * @return + * @throws Exception + */ + public static int runJava(List commands,long waitTime) + throws Exception { + String java = System.getProperty("java.home") + "/bin/java"; + commands.add(0, java); + String command = commands.toString().replace(",", " "); + System.out.println("Executing the following command \n" + command); + ProcessBuilder processBuilder = new ProcessBuilder(commands); + final Process process = processBuilder.start(); + BufferedReader errorStream = new BufferedReader( + new InputStreamReader(process.getErrorStream())); + BufferedReader outStream = new BufferedReader( + new InputStreamReader(process.getInputStream())); + String errorLine; + StringBuilder errors = new StringBuilder(); + String outLines; + while ((errorLine = errorStream.readLine()) != null) { + errors.append(errorLine).append("\n"); + } + while ((outLines = outStream.readLine()) != null) { + System.out.println(outLines); + } + errorLine = errors.toString(); + System.err.println(errorLine); + process.waitFor(waitTime, TimeUnit.MILLISECONDS); + int exitStatus = process.exitValue(); + if (exitStatus != 0 && errorLine != null && errorLine.isEmpty()) { + throw new RuntimeException(errorLine); + } + return exitStatus; + } + + /** + * Runs java command with provided arguments. Caller should not pass java + * command in the argument list. + * + * @param commands + * @return + * @throws Exception + */ + public static int runJava(List commands) throws Exception { + return runJava(commands, DEFAULT_WAIT_TIME); + } + + /** + * Run any command + * @param commands + * @return + * @throws Exception + */ + public static int runCommand(List commands) throws Exception { + String command = commands.toString().replace(",", " "); + System.out.println("Executing the following command \n" + command); + ProcessBuilder processBuilder = new ProcessBuilder(commands); + final Process process = processBuilder.start(); + BufferedReader errorStream = new BufferedReader( + new InputStreamReader(process.getErrorStream())); + BufferedReader outStream = new BufferedReader( + new InputStreamReader(process.getInputStream())); + String errorLine; + StringBuilder errors = new StringBuilder(); + String outLines; + while ((errorLine = errorStream.readLine()) != null) { + errors.append(errorLine).append("\n"); + } + while ((outLines = outStream.readLine()) != null) { + System.out.println(outLines); + } + errorLine = errors.toString(); + System.err.println(errorLine); + int exitStatus = process.exitValue(); + if (exitStatus != 0 && errorLine != null && errorLine.isEmpty()) { + throw new RuntimeException(errorLine); + } + return exitStatus; + } + + +} diff --git a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java b/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java index f941e767b7f..6d142174f6b 100644 --- a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java +++ b/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java @@ -26,7 +26,7 @@ import java.io.IOException; import java.lang.reflect.Method; import java.net.ConnectException; import java.net.ServerSocket; -import java.rmi.NoSuchObjectException; +import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.util.ArrayList; @@ -115,8 +115,7 @@ public class JMXStartStopTest { throws Exception { Set names = server.queryNames(pattern,query); - for (Iterator i = names.iterator(); i.hasNext(); ) { - ObjectName name = (ObjectName)i.next(); + for (ObjectName name : names) { MBeanInfo info = server.getMBeanInfo(name); dbg_print("Got MBean: " + name); @@ -174,9 +173,9 @@ public class JMXStartStopTest { } catch (Exception e) { Throwable t = e; while (t != null) { - if (t instanceof NoSuchObjectException || - t instanceof ConnectException || - t instanceof SSLHandshakeException) { + if (t instanceof RemoteException || + t instanceof SSLHandshakeException || + t instanceof ConnectException) { break; } t = t.getCause(); @@ -617,7 +616,10 @@ public class JMXStartStopTest { busyPort = ss.getLocalPort(); jcmd( line -> { - if (line.contains("Port already in use: " + busyPort)) { + boolean match = line.contains("Port already in use: " + + busyPort); + System.out.println("[match] " + line + " => " + match); + if (match) { checks.getAndUpdate((op) -> op | 4); } }, diff --git a/jdk/test/sun/text/resources/LocaleData b/jdk/test/sun/text/resources/LocaleData index 6be5a4c1111..635416d9189 100644 --- a/jdk/test/sun/text/resources/LocaleData +++ b/jdk/test/sun/text/resources/LocaleData @@ -7696,3 +7696,6 @@ FormatData/es_EC/TimePatterns/3=H:mm # bug 8037343 FormatData/es_DO/DatePatterns/2=dd/MM/yyyy FormatData/es_DO/DatePatterns/3=dd/MM/yy + +# bug 8055222 +CurrencyNames/lt_LT/EUR=\u20AC diff --git a/jdk/test/sun/text/resources/LocaleDataTest.java b/jdk/test/sun/text/resources/LocaleDataTest.java index 9b44eec236b..66039d08f40 100644 --- a/jdk/test/sun/text/resources/LocaleDataTest.java +++ b/jdk/test/sun/text/resources/LocaleDataTest.java @@ -36,7 +36,7 @@ * 6919624 6998391 7019267 7020960 7025837 7020583 7036905 7066203 7101495 * 7003124 7085757 7028073 7171028 7189611 8000983 7195759 8004489 8006509 * 7114053 7074882 7040556 8013836 8021121 6192407 6931564 8027695 8017142 - * 8037343 + * 8037343 8055222 * @summary Verify locale data * */ diff --git a/jdk/test/sun/util/calendar/zi/tzdata/VERSION b/jdk/test/sun/util/calendar/zi/tzdata/VERSION index c735be51ca1..5e925ada8df 100644 --- a/jdk/test/sun/util/calendar/zi/tzdata/VERSION +++ b/jdk/test/sun/util/calendar/zi/tzdata/VERSION @@ -1,24 +1,24 @@ # # 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. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2014c +tzdata2014g diff --git a/jdk/test/sun/util/calendar/zi/tzdata/africa b/jdk/test/sun/util/calendar/zi/tzdata/africa index 6f1a1471e0c..aa91f365ce1 100644 --- a/jdk/test/sun/util/calendar/zi/tzdata/africa +++ b/jdk/test/sun/util/calendar/zi/tzdata/africa @@ -21,13 +21,13 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -#
     # This file is in the public domain, so clarified as of
     # 2009-05-17 by Arthur David Olson.
     
    -# This data is by no means authoritative; if you think you know better,
    +# This file is by no means authoritative; if you think you know better,
     # go ahead and edit the file (and please send any changes to
    -# tz@iana.org for general use in the future).
    +# tz@iana.org for general use in the future).  For more, please see
    +# the file CONTRIBUTING in the tz distribution.
     
     # From Paul Eggert (2013-02-21):
     #
    @@ -49,8 +49,8 @@
     # I found in the UCLA library.
     #
     # For data circa 1899, a common source is:
    -# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
    -# .
    +# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
    +# http://www.jstor.org/stable/1774359
     #
     # A reliable and entertaining source about time zones is
     # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
    @@ -58,13 +58,13 @@
     # Previous editions of this database used WAT, CAT, SAT, and EAT
     # for +0:00 through +3:00, respectively,
     # but Mark R V Murray reports that
    -# `SAST' is the official abbreviation for +2:00 in the country of South Africa,
    -# `CAT' is commonly used for +2:00 in countries north of South Africa, and
    -# `WAT' is probably the best name for +1:00, as the common phrase for
    -# the area that includes Nigeria is ``West Africa''.
    -# He has heard of ``Western Sahara Time'' for +0:00 but can find no reference.
    +# 'SAST' is the official abbreviation for +2:00 in the country of South Africa,
    +# 'CAT' is commonly used for +2:00 in countries north of South Africa, and
    +# 'WAT' is probably the best name for +1:00, as the common phrase for
    +# the area that includes Nigeria is "West Africa".
    +# He has heard of "Western Sahara Time" for +0:00 but can find no reference.
     #
    -# To make things confusing, `WAT' seems to have been used for -1:00 long ago;
    +# To make things confusing, 'WAT' seems to have been used for -1:00 long ago;
     # I'd guess that this was because people needed _some_ name for -1:00,
     # and at the time, far west Africa was the only major land area in -1:00.
     # This usage is now obsolete, as the last use of -1:00 on the African
    @@ -77,7 +77,7 @@
     #	 2:00	SAST	South Africa Standard Time
     # and Murray suggests the following abbreviation:
     #	 1:00	WAT	West Africa Time
    -# I realize that this leads to `WAT' being used for both -1:00 and 1:00
    +# I realize that this leads to 'WAT' being used for both -1:00 and 1:00
     # for times before 1976, but this is the best I can think of
     # until we get more information.
     #
    @@ -117,9 +117,9 @@ Rule	Algeria	1980	only	-	Oct	31	 2:00	0	-
     # Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
     # more precise 0:09:21.
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Africa/Algiers	0:12:12 -	LMT	1891 Mar 15 0:01
    -			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
    -			0:00	Algeria	WE%sT	1940 Feb 25 2:00
    +Zone	Africa/Algiers	0:12:12 -	LMT	1891 Mar 15  0:01
    +			0:09:21	-	PMT	1911 Mar 11 # Paris Mean Time
    +			0:00	Algeria	WE%sT	1940 Feb 25  2:00
     			1:00	Algeria	CE%sT	1946 Oct  7
     			0:00	-	WET	1956 Jan 29
     			1:00	-	CET	1963 Apr 14
    @@ -129,18 +129,8 @@ Zone	Africa/Algiers	0:12:12 -	LMT	1891 Mar 15 0:01
     			1:00	-	CET
     
     # Angola
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Africa/Luanda	0:52:56	-	LMT	1892
    -			0:52:04	-	AOT	1911 May 26 # Angola Time
    -			1:00	-	WAT
    -
     # Benin
    -# Whitman says they switched to 1:00 in 1946, not 1934;
    -# go with Shanks & Pottenger.
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Africa/Porto-Novo	0:10:28	-	LMT	1912
    -			0:00	-	GMT	1934 Feb 26
    -			1:00	-	WAT
    +# See Africa/Lagos.
     
     # Botswana
     # From Paul Eggert (2013-02-21):
    @@ -149,14 +139,12 @@ Zone Africa/Porto-Novo	0:10:28	-	LMT	1912
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Africa/Gaborone	1:43:40 -	LMT	1885
     			1:30	-	SAST	1903 Mar
    -			2:00	-	CAT	1943 Sep 19 2:00
    -			2:00	1:00	CAST	1944 Mar 19 2:00
    +			2:00	-	CAT	1943 Sep 19  2:00
    +			2:00	1:00	CAST	1944 Mar 19  2:00
     			2:00	-	CAT
     
     # Burkina Faso
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Africa/Ouagadougou	-0:06:04 -	LMT	1912
    -			 0:00	-	GMT
    +# See Africa/Abidjan.
     
     # Burundi
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    @@ -164,52 +152,60 @@ Zone Africa/Bujumbura	1:57:28	-	LMT	1890
     			2:00	-	CAT
     
     # Cameroon
    -# Whitman says they switched to 1:00 in 1920; go with Shanks & Pottenger.
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Africa/Douala	0:38:48	-	LMT	1912
    -			1:00	-	WAT
    +# See Africa/Lagos.
     
     # Cape Verde
    +#
    +# Shanks gives 1907 for the transition to CVT.
    +# Perhaps the 1911-05-26 Portuguese decree
    +# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
    +# merely made it official?
    +#
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Atlantic/Cape_Verde -1:34:04 -	LMT	1907			# Praia
    +Zone Atlantic/Cape_Verde -1:34:04 -	LMT	1907        # Praia
     			-2:00	-	CVT	1942 Sep
     			-2:00	1:00	CVST	1945 Oct 15
    -			-2:00	-	CVT	1975 Nov 25 2:00
    +			-2:00	-	CVT	1975 Nov 25  2:00
     			-1:00	-	CVT
     
     # Central African Republic
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Africa/Bangui	1:14:20	-	LMT	1912
    -			1:00	-	WAT
    +# See Africa/Lagos.
     
     # Chad
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Africa/Ndjamena	1:00:12 -	LMT	1912
    +Zone	Africa/Ndjamena	1:00:12 -	LMT	1912        # N'Djamena
     			1:00	-	WAT	1979 Oct 14
     			1:00	1:00	WAST	1980 Mar  8
     			1:00	-	WAT
     
     # Comoros
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Indian/Comoro	2:53:04 -	LMT	1911 Jul   # Moroni, Gran Comoro
    +Zone	Indian/Comoro	2:53:04 -	LMT	1911 Jul # Moroni, Gran Comoro
     			3:00	-	EAT
     
    -# Democratic Republic of Congo
    +# Democratic Republic of the Congo
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Africa/Kinshasa	1:01:12 -	LMT	1897 Nov 9
    -			1:00	-	WAT
     Zone Africa/Lubumbashi	1:49:52 -	LMT	1897 Nov 9
     			2:00	-	CAT
    +# The above is for the eastern part; see Africa/Lagos for the western part.
     
     # Republic of the Congo
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Africa/Brazzaville	1:01:08 -	LMT	1912
    -			1:00	-	WAT
    +# See Africa/Lagos.
     
    -# Cote D'Ivoire
    +# Côte d'Ivoire / Ivory Coast
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Africa/Abidjan	-0:16:08 -	LMT	1912
     			 0:00	-	GMT
    +Link Africa/Abidjan Africa/Bamako	# Mali
    +Link Africa/Abidjan Africa/Banjul	# Gambia
    +Link Africa/Abidjan Africa/Conakry	# Guinea
    +Link Africa/Abidjan Africa/Dakar	# Senegal
    +Link Africa/Abidjan Africa/Freetown	# Sierra Leone
    +Link Africa/Abidjan Africa/Lome		# Togo
    +Link Africa/Abidjan Africa/Nouakchott	# Mauritania
    +Link Africa/Abidjan Africa/Ouagadougou	# Burkina Faso
    +Link Africa/Abidjan Africa/Sao_Tome	# São Tomé and Príncipe
    +Link Africa/Abidjan Atlantic/St_Helena	# St Helena
     
     # Djibouti
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    @@ -254,30 +250,26 @@ Rule	Egypt	1990	1994	-	May	 1	1:00	1:00	S
     # Egyptians would approve the cancellation."
     #
     # Egypt to cancel daylight saving time
    -# 
     # http://www.almasryalyoum.com/en/node/407168
    -# 
     # or
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_egypt04.html
    -# 
     Rule	Egypt	1995	2010	-	Apr	lastFri	 0:00s	1:00	S
    -Rule	Egypt	1995	2005	-	Sep	lastThu	23:00s	0	-
    +Rule	Egypt	1995	2005	-	Sep	lastThu	24:00	0	-
     # From Steffen Thorsen (2006-09-19):
     # The Egyptian Gazette, issue 41,090 (2006-09-18), page 1, reports:
     # Egypt will turn back clocks by one hour at the midnight of Thursday
     # after observing the daylight saving time since May.
     # http://news.gom.com.eg/gazette/pdf/2006/09/18/01.pdf
    -Rule	Egypt	2006	only	-	Sep	21	23:00s	0	-
    +Rule	Egypt	2006	only	-	Sep	21	24:00	0	-
     # From Dirk Losch (2007-08-14):
     # I received a mail from an airline which says that the daylight
     # saving time in Egypt will end in the night of 2007-09-06 to 2007-09-07.
    -# From Jesper Norgaard Welen (2007-08-15): [The following agree:]
    +# From Jesper Nørgaard Welen (2007-08-15): [The following agree:]
     # http://www.nentjes.info/Bill/bill5.htm
     # http://www.timeanddate.com/worldclock/city.html?n=53
     # From Steffen Thorsen (2007-09-04): The official information...:
     # http://www.sis.gov.eg/En/EgyptOnline/Miscellaneous/000002/0207000000000000001580.htm
    -Rule	Egypt	2007	only	-	Sep	Thu>=1	23:00s	0	-
    +Rule	Egypt	2007	only	-	Sep	Thu>=1	24:00	0	-
     # From Abdelrahman Hassan (2007-09-06):
     # Due to the Hijri (lunar Islamic calendar) year being 11 days shorter
     # than the year of the Gregorian calendar, Ramadan shifts earlier each
    @@ -311,15 +303,9 @@ Rule	Egypt	2007	only	-	Sep	Thu>=1	23:00s	0	-
     #
     # timeanddate[2] and another site I've found[3] also support that.
     #
    -# [1] 
    -# https://bugzilla.redhat.com/show_bug.cgi?id=492263
    -# 
    -# [2] 
    -# http://www.timeanddate.com/worldclock/clockchange.html?n=53
    -# 
    -# [3] 
    -# http://wwp.greenwichmeantime.com/time-zone/africa/egypt/
    -# 
    +# [1] https://bugzilla.redhat.com/show_bug.cgi?id=492263
    +# [2] http://www.timeanddate.com/worldclock/clockchange.html?n=53
    +# [3] http://wwp.greenwichmeantime.com/time-zone/africa/egypt/
     
     # From Arthur David Olson (2009-04-20):
     # In 2009 (and for the next several years), Ramadan ends before the fourth
    @@ -329,14 +315,10 @@ Rule	Egypt	2007	only	-	Sep	Thu>=1	23:00s	0	-
     # From Steffen Thorsen (2009-08-11):
     # We have been able to confirm the August change with the Egyptian Cabinet
     # Information and Decision Support Center:
    -# 
     # http://www.timeanddate.com/news/time/egypt-dst-ends-2009.html
    -# 
     #
     # The Middle East News Agency
    -# 
     # http://www.mena.org.eg/index.aspx
    -# 
     # also reports "Egypt starts winter time on August 21"
     # today in article numbered "71, 11/08/2009 12:25 GMT."
     # Only the title above is available without a subscription to their service,
    @@ -344,19 +326,14 @@ Rule	Egypt	2007	only	-	Sep	Thu>=1	23:00s	0	-
     # (at least today).
     
     # From Alexander Krivenyshev (2010-07-20):
    -# According to News from Egypt -  Al-Masry Al-Youm Egypt's cabinet has
    +# According to News from Egypt - Al-Masry Al-Youm Egypt's cabinet has
     # decided that Daylight Saving Time will not be used in Egypt during
     # Ramadan.
     #
     # Arabic translation:
    -# "Clocks to go back during Ramadan--and then forward again"
    -# 
    +# "Clocks to go back during Ramadan - and then forward again"
     # http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again
    -# 
    -# or
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_egypt02.html
    -# 
     
     # From Ahmad El-Dardiry (2014-05-07):
     # Egypt is to change back to Daylight system on May 15
    @@ -365,46 +342,77 @@ Rule	Egypt	2007	only	-	Sep	Thu>=1	23:00s	0	-
     # From Gunther Vermier (2015-05-13):
     # our Egypt office confirms that the change will be at 15 May "midnight" (24:00)
     
    -# From Paul Eggert (2014-05-13):
    +# From Imed Chihi (2014-06-04):
    +# We have finally "located" a precise official reference about the DST changes
    +# in Egypt.  The Ministers Cabinet decision is explained at
    +# http://www.cabinet.gov.eg/Media/CabinetMeetingsDetails.aspx?id=347 ...
    +# [T]his (Arabic) site is not accessible outside Egypt, but the page ...
    +# translates into: "With regard to daylight saving time, it is scheduled to
    +# take effect at exactly twelve o'clock this evening, Thursday, 15 MAY 2014,
    +# to be suspended by twelve o'clock on the evening of Thursday, 26 JUN 2014,
    +# and re-established again at the end of the month of Ramadan, at twelve
    +# o'clock on the evening of Thursday, 31 JUL 2014."  This statement has been
    +# reproduced by other (more accessible) sites[, e.g.,]...
    +# http://elgornal.net/news/news.aspx?id=4699258
    +
    +# From Paul Eggert (2014-06-04):
     # Sarah El Deeb and Lee Keath of AP report that the Egyptian government says
     # the change is because of blackouts in Cairo, even though Ahram Online (cited
    -# above) says DST had no affect on electricity consumption.  The AP story says
    -# DST will not be observed during Ramadan.  There is no information about when
    -# DST will end.  See:
    +# above) says DST had no affect on electricity consumption.  There is
    +# no information about when DST will end this fall.  See:
     # http://abcnews.go.com/International/wireStory/el-sissi-pushes-egyptians-line-23614833
     #
    -# For now, guess that later transitions will use 2010's rules, and that
    -# Egypt will agree with Morocco (see below) about the date Ramadan starts and
    -# ends, though (unlike Morocco) it will switch at 00:00 standard time.  In
    -# Egypt the spring-forward transitions are removed for 2020-2022, when the
    -# guessed spring-forward date falls during the estimated Ramadan, and all
    -# transitions removed for 2023-2038, where the estimated Ramadan falls entirely
    -# outside the guessed daylight-saving time.  Ramadan intrudes on the guessed
    -# DST starting in 2039, but that's beyond our somewhat-arbitrary cutoff.
    -
    -Rule	Egypt	2008	only	-	Aug	lastThu	23:00s	0	-
    -Rule	Egypt	2009	only	-	Aug	20	23:00s	0	-
    -Rule	Egypt	2010	only	-	Aug	11	0:00	0	-
    -Rule	Egypt	2010	only	-	Sep	10	0:00	1:00	S
    -Rule	Egypt	2010	only	-	Sep	lastThu	23:00s	0	-
    +# For now, guess that later spring and fall transitions will use
    +# 2010's rules, and guess that Egypt will switch to standard time at
    +# 24:00 the last Thursday before Ramadan, and back to DST at 00:00 the
    +# first Friday after Ramadan.  To implement this,
    +# transition dates for 2015 through 2037 were determined by running
    +# the following program under GNU Emacs 24.3, with the results integrated
    +# by hand into the table below.  Ramadan again intrudes on the guessed
    +# DST starting in 2038, but that's beyond our somewhat-arbitrary cutoff.
    +# (let ((islamic-year 1436))
    +#   (while (< islamic-year 1460)
    +#     (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
    +#           (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
    +#           (friday 5))
    +#       (while (/= friday (mod a 7))
    +#         (setq a (1- a)))
    +#       (while (/= friday (mod b 7))
    +#         (setq b (1+ b)))
    +#       (setq a (1- a))
    +#       (setq b (1- b))
    +#       (setq a (calendar-gregorian-from-absolute a))
    +#       (setq b (calendar-gregorian-from-absolute b))
    +#       (insert
    +#        (format
    +#         (concat "Rule\tEgypt\t%d\tonly\t-\t%s\t%2d\t24:00\t0\t-\n"
    +#                 "Rule\tEgypt\t%d\tonly\t-\t%s\t%2d\t24:00\t1:00\tS\n")
    +#         (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
    +#         (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
    +#     (setq islamic-year (+ 1 islamic-year))))
    +Rule	Egypt	2008	only	-	Aug	lastThu	24:00	0	-
    +Rule	Egypt	2009	only	-	Aug	20	24:00	0	-
    +Rule	Egypt	2010	only	-	Aug	10	24:00	0	-
    +Rule	Egypt	2010	only	-	Sep	 9	24:00	1:00	S
    +Rule	Egypt	2010	only	-	Sep	lastThu	24:00	0	-
     Rule	Egypt	2014	only	-	May	15	24:00	1:00	S
    -Rule	Egypt	2014	only	-	Jun	29	 0:00s	0	-
    -Rule	Egypt	2014	only	-	Jul	29	 0:00s	1:00	S
    -Rule	Egypt	2014	max	-	Sep	lastThu	23:00s	0	-
    +Rule	Egypt	2014	only	-	Jun	26	24:00	0	-
    +Rule	Egypt	2014	only	-	Jul	31	24:00	1:00	S
    +Rule	Egypt	2014	max	-	Sep	lastThu	24:00	0	-
     Rule	Egypt	2015	2019	-	Apr	lastFri	 0:00s	1:00	S
    -Rule	Egypt	2015	only	-	Jun	18	 0:00s	0	-
    -Rule	Egypt	2015	only	-	Jul	18	 0:00s	1:00	S
    -Rule	Egypt	2016	only	-	Jun	 7	 0:00s	0	-
    -Rule	Egypt	2016	only	-	Jul	 7	 0:00s	1:00	S
    -Rule	Egypt	2017	only	-	May	27	 0:00s	0	-
    -Rule	Egypt	2017	only	-	Jun	26	 0:00s	1:00	S
    -Rule	Egypt	2018	only	-	May	16	 0:00s	0	-
    -Rule	Egypt	2018	only	-	Jun	15	 0:00s	1:00	S
    -Rule	Egypt	2019	only	-	May	 6	 0:00s	0	-
    -Rule	Egypt	2019	only	-	Jun	 5	 0:00s	1:00	S
    -Rule	Egypt	2020	only	-	May	24	 0:00s	1:00	S
    -Rule	Egypt	2021	only	-	May	13	 0:00s	1:00	S
    -Rule	Egypt	2022	only	-	May	 3	 0:00s	1:00	S
    +Rule	Egypt	2015	only	-	Jun	11	24:00	0	-
    +Rule	Egypt	2015	only	-	Jul	23	24:00	1:00	S
    +Rule	Egypt	2016	only	-	Jun	 2	24:00	0	-
    +Rule	Egypt	2016	only	-	Jul	 7	24:00	1:00	S
    +Rule	Egypt	2017	only	-	May	25	24:00	0	-
    +Rule	Egypt	2017	only	-	Jun	29	24:00	1:00	S
    +Rule	Egypt	2018	only	-	May	10	24:00	0	-
    +Rule	Egypt	2018	only	-	Jun	14	24:00	1:00	S
    +Rule	Egypt	2019	only	-	May	 2	24:00	0	-
    +Rule	Egypt	2019	only	-	Jun	 6	24:00	1:00	S
    +Rule	Egypt	2020	only	-	May	28	24:00	1:00	S
    +Rule	Egypt	2021	only	-	May	13	24:00	1:00	S
    +Rule	Egypt	2022	only	-	May	 5	24:00	1:00	S
     Rule	Egypt	2023	max	-	Apr	lastFri	 0:00s	1:00	S
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    @@ -412,60 +420,63 @@ Zone	Africa/Cairo	2:05:09 -	LMT	1900 Oct
     			2:00	Egypt	EE%sT
     
     # Equatorial Guinea
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Africa/Malabo	0:35:08 -	LMT	1912
    -			0:00	-	GMT	1963 Dec 15
    -			1:00	-	WAT
    +# See Africa/Lagos.
     
     # Eritrea
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Africa/Asmara	2:35:32 -	LMT	1870
    -			2:35:32	-	AMT	1890	      # Asmara Mean Time
    -			2:35:20	-	ADMT	1936 May 5    # Adis Dera MT
    +			2:35:32	-	AMT	1890        # Asmara Mean Time
    +			2:35:20	-	ADMT	1936 May  5 # Adis Dera MT
     			3:00	-	EAT
     
     # Ethiopia
    -# From Paul Eggert (2006-03-22):
    -# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time zones
    -# between 1870 and 1890, and that they merged to 38E50 (2:35:20) in 1890.
    -# We'll guess that 38E50 is for Adis Dera.
    +# From Paul Eggert (2014-07-31):
    +# Like the Swahili of Kenya and Tanzania, many Ethiopians keep a
    +# 12-hour clock starting at our 06:00, so their "8 o'clock" is our
    +# 02:00 or 14:00.  Keep this in mind when you ask the time in Amharic.
    +#
    +# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time
    +# zones between 1870 and 1890, that they merged to 38E50 (2:35:20) in
    +# 1890, and that they switched to 3:00 on 1936-05-05.  Perhaps 38E50
    +# was for Adis Dera.  Quite likely the Shanks data entries are wrong
    +# anyway.
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Africa/Addis_Ababa	2:34:48 -	LMT	1870
    -			2:35:20	-	ADMT	1936 May 5    # Adis Dera MT
    +			2:35:20	-	ADMT	1936 May  5 # Adis Dera MT
     			3:00	-	EAT
     
     # Gabon
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Africa/Libreville	0:37:48 -	LMT	1912
    -			1:00	-	WAT
    +# See Africa/Lagos.
     
     # Gambia
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Africa/Banjul	-1:06:36 -	LMT	1912
    -			-1:06:36 -	BMT	1935	# Banjul Mean Time
    -			-1:00	-	WAT	1964
    -			 0:00	-	GMT
    +# See Africa/Abidjan.
     
     # Ghana
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -# Whitman says DST was observed from 1931 to ``the present'';
    -# go with Shanks & Pottenger.
    -Rule	Ghana	1936	1942	-	Sep	 1	0:00	0:20	GHST
    -Rule	Ghana	1936	1942	-	Dec	31	0:00	0	GMT
    +# Whitman says DST was observed from 1931 to "the present";
    +# Shanks & Pottenger say 1936 to 1942;
    +# and September 1 to January 1 is given by:
    +# Scott Keltie J, Epstein M (eds), The Statesman's Year-Book,
    +# 57th ed. Macmillan, London (1920), OCLC 609408015, pp xxviii.
    +# For lack of better info, assume DST was observed from 1920 to 1942.
    +Rule	Ghana	1920	1942	-	Sep	 1	0:00	0:20	GHST
    +Rule	Ghana	1920	1942	-	Dec	31	0:00	0	GMT
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Africa/Accra	-0:00:52 -	LMT	1918
     			 0:00	Ghana	%s
     
     # Guinea
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Africa/Conakry	-0:54:52 -	LMT	1912
    -			 0:00	-	GMT	1934 Feb 26
    -			-1:00	-	WAT	1960
    -			 0:00	-	GMT
    +# See Africa/Abidjan.
     
     # Guinea-Bissau
    +#
    +# Shanks gives 1911-05-26 for the transition to WAT,
    +# evidently confusing the date of the Portuguese decree
    +# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
    +# with the date that it took effect, namely 1912-01-01.
    +#
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Africa/Bissau	-1:02:20 -	LMT	1911 May 26
    +Zone	Africa/Bissau	-1:02:20 -	LMT	1912 Jan  1
     			-1:00	-	WAT	1975
     			 0:00	-	GMT
     
    @@ -480,8 +491,8 @@ Zone	Africa/Nairobi	2:27:16	-	LMT	1928 Jul
     # Lesotho
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Africa/Maseru	1:50:00 -	LMT	1903 Mar
    -			2:00	-	SAST	1943 Sep 19 2:00
    -			2:00	1:00	SAST	1944 Mar 19 2:00
    +			2:00	-	SAST	1943 Sep 19  2:00
    +			2:00	1:00	SAST	1944 Mar 19  2:00
     			2:00	-	SAST
     
     # Liberia
    @@ -549,11 +560,11 @@ Zone	Africa/Tripoli	0:52:44 -	LMT	1920
     			2:00	-	EET	1982
     			1:00	Libya	CE%sT	1990 May  4
     # The 1996 and 1997 entries are from Shanks & Pottenger;
    -# the IATA SSIM data contain some obvious errors.
    +# the IATA SSIM data entries contain some obvious errors.
     			2:00	-	EET	1996 Sep 30
     			1:00	Libya	CE%sT	1997 Oct  4
    -			2:00	-	EET	2012 Nov 10 2:00
    -			1:00	Libya	CE%sT	2013 Oct 25 2:00
    +			2:00	-	EET	2012 Nov 10  2:00
    +			1:00	Libya	CE%sT	2013 Oct 25  2:00
     			2:00	-	EET
     
     # Madagascar
    @@ -569,18 +580,8 @@ Zone	Africa/Blantyre	2:20:00 -	LMT	1903 Mar
     			2:00	-	CAT
     
     # Mali
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Africa/Bamako	-0:32:00 -	LMT	1912
    -			 0:00	-	GMT	1934 Feb 26
    -			-1:00	-	WAT	1960 Jun 20
    -			 0:00	-	GMT
    -
     # Mauritania
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Africa/Nouakchott	-1:03:48 -	LMT	1912
    -			 0:00	-	GMT	1934 Feb 26
    -			-1:00	-	WAT	1960 Nov 28
    -			 0:00	-	GMT
    +# See Africa/Abidjan.
     
     # Mauritius
     
    @@ -604,9 +605,7 @@ Zone Africa/Nouakchott	-1:03:48 -	LMT	1912
     
     # From Steffen Thorsen (2008-07-10):
     # According to
    -# 
     # http://www.lexpress.mu/display_article.php?news_id=111216
    -# 
     # (in French), Mauritius will start and end their DST a few days earlier
     # than previously announced (2008-11-01 to 2009-03-31).  The new start
     # date is 2008-10-26 at 02:00 and the new end date is 2009-03-27 (no time
    @@ -621,22 +620,17 @@ Zone Africa/Nouakchott	-1:03:48 -	LMT	1912
     
     # From Alex Krivenyshev (2008-07-11):
     # Seems that English language article "The revival of daylight saving
    -# time:  Energy conservation?"-# No. 16578 (07/11/2008) was originally
    +# time: Energy conservation?"-# No. 16578 (07/11/2008) was originally
     # published on Monday, June 30, 2008...
     #
     # I guess that article in French "Le gouvernement avance l'introduction
    -# de l'heure d'ete" stating that DST in Mauritius starting on October 26
    -# and ending on March 27, 2009 is the most recent one.
    -# ...
    -# 
    +# de l'heure d'été" stating that DST in Mauritius starting on October 26
    +# and ending on March 27, 2009 is the most recent one....
     # http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html
    -# 
     
     # From Riad M. Hossen Ally (2008-08-03):
     # The Government of Mauritius weblink
    -# 
     # http://www.gov.mu/portal/site/pmosite/menuitem.4ca0efdee47462e7440a600248a521ca/?content_id=4728ca68b2a5b110VgnVCM1000000a04a8c0RCRD
    -# 
     # Cabinet Decision of July 18th, 2008 states as follows:
     #
     # 4. ...Cabinet has agreed to the introduction into the National Assembly
    @@ -646,33 +640,25 @@ Zone Africa/Nouakchott	-1:03:48 -	LMT	1912
     # States of America. It will start at two o'clock in the morning on the
     # last Sunday of October and will end at two o'clock in the morning on
     # the last Sunday of March the following year. The summer time for the
    -# year 2008 - 2009 will, therefore, be effective as from 26 October 2008
    +# year 2008-2009 will, therefore, be effective as from 26 October 2008
     # and end on 29 March 2009.
     
     # From Ed Maste (2008-10-07):
     # THE TIME BILL (No. XXVII of 2008) Explanatory Memorandum states the
     # beginning / ending of summer time is 2 o'clock standard time in the
     # morning of the last Sunday of October / last Sunday of March.
    -# 
     # http://www.gov.mu/portal/goc/assemblysite/file/bill2708.pdf
    -# 
     
     # From Steffen Thorsen (2009-06-05):
     # According to several sources, Mauritius will not continue to observe
     # DST the coming summer...
     #
     # Some sources, in French:
    -# 
     # http://www.defimedia.info/news/946/Rashid-Beebeejaun-:-%C2%AB-L%E2%80%99heure-d%E2%80%99%C3%A9t%C3%A9-ne-sera-pas-appliqu%C3%A9e-cette-ann%C3%A9e-%C2%BB
    -# 
    -# 
     # http://lexpress.mu/Story/3398~Beebeejaun---Les-objectifs-d-%C3%A9conomie-d-%C3%A9nergie-de-l-heure-d-%C3%A9t%C3%A9-ont-%C3%A9t%C3%A9-atteints-
    -# 
     #
     # Our wrap-up:
    -# 
     # http://www.timeanddate.com/news/time/mauritius-dst-will-not-repeat.html
    -# 
     
     # From Arthur David Olson (2009-07-11):
     # The "mauritius-dst-will-not-repeat" wrapup includes this:
    @@ -685,18 +671,18 @@ Rule Mauritius	1983	only	-	Mar	21	0:00	0	-
     Rule Mauritius	2008	only	-	Oct	lastSun	2:00	1:00	S
     Rule Mauritius	2009	only	-	Mar	lastSun	2:00	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Indian/Mauritius	3:50:00 -	LMT	1907		# Port Louis
    +Zone Indian/Mauritius	3:50:00 -	LMT	1907 # Port Louis
     			4:00 Mauritius	MU%sT	# Mauritius Time
     # Agalega Is, Rodriguez
     # no information; probably like Indian/Mauritius
     
     # Mayotte
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
    +Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul # Mamoutzou
     			3:00	-	EAT
     
     # Morocco
    -# See the `europe' file for Spanish Morocco (Africa/Ceuta).
    +# See the 'europe' file for Spanish Morocco (Africa/Ceuta).
     
     # From Alex Krivenyshev (2008-05-09):
     # Here is an article that Morocco plan to introduce Daylight Saving Time between
    @@ -704,60 +690,44 @@ Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
     #
     # "... Morocco is to save energy by adjusting its clock during summer so it will
     # be one hour ahead of GMT between 1 June and 27 September, according to
    -# Communication Minister and Gov ernment Spokesman, Khalid Naciri...."
    +# Communication Minister and Government Spokesman, Khalid Naciri...."
     #
    -# 
     # http://www.worldtimezone.net/dst_news/dst_news_morocco01.html
    -# 
    -# OR
    -# 
     # http://en.afrik.com/news11892.html
    -# 
     
     # From Alex Krivenyshev (2008-05-09):
    -# The Morocco time change can be confirmed on Morocco web site Maghreb Arabe Presse:
    -# 
    +# The Morocco time change can be confirmed on Morocco web site Maghreb Arabe
    +# Presse:
     # http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view
    -# 
     #
     # Morocco shifts to daylight time on June 1st through September 27, Govt.
     # spokesman.
     
     # From Patrice Scattolin (2008-05-09):
     # According to this article:
    -# 
     # http://www.avmaroc.com/actualite/heure-dete-comment-a127896.html
    -# 
    -# (and republished here:
    -# 
    -# http://www.actu.ma/heure-dete-comment_i127896_0.html
    -# 
    -# )
    -# the changes occurs at midnight:
    +# (and republished here: )
    +# the changes occur at midnight:
     #
    -# saturday night may 31st at midnight (which in french is to be
    -# intrepreted as the night between saturday and sunday)
    -# sunday night the 28th  at midnight
    +# Saturday night May 31st at midnight (which in French is to be
    +# interpreted as the night between Saturday and Sunday)
    +# Sunday night the 28th at midnight
     #
    -# Seeing that the 28th is monday, I am guessing that she intends to say
    -# the midnight of the 28th which is the midnight between sunday and
    -# monday, which jives with other sources that say that it's inclusive
    -# june1st to sept 27th.
    +# Seeing that the 28th is Monday, I am guessing that she intends to say
    +# the midnight of the 28th which is the midnight between Sunday and
    +# Monday, which jives with other sources that say that it's inclusive
    +# June 1st to Sept 27th.
     #
     # The decision was taken by decree *2-08-224 *but I can't find the decree
     # published on the web.
     #
     # It's also confirmed here:
    -# 
     # http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm
    -# 
    -# on a government portal as being  between june 1st and sept 27th (not yet
    -# posted in english).
    +# on a government portal as being between June 1st and Sept 27th (not yet
    +# posted in English).
     #
    -# The following google query will generate many relevant hits:
    -# 
    +# The following Google query will generate many relevant hits:
     # http://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search
    -# 
     
     # From Steffen Thorsen (2008-08-27):
     # Morocco will change the clocks back on the midnight between August 31
    @@ -765,47 +735,32 @@ Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
     # of September:
     #
     # One article about it (in French):
    -# 
     # http://www.menara.ma/fr/Actualites/Maroc/Societe/ci.retour_a_l_heure_gmt_a_partir_du_dimanche_31_aout_a_minuit_officiel_.default
    -# 
     #
     # We have some further details posted here:
    -# 
     # http://www.timeanddate.com/news/time/morocco-ends-dst-early-2008.html
    -# 
     
     # From Steffen Thorsen (2009-03-17):
     # Morocco will observe DST from 2009-06-01 00:00 to 2009-08-21 00:00 according
     # to many sources, such as
    -# 
     # http://news.marweb.com/morocco/entertainment/morocco-daylight-saving.html
    -# 
    -# 
     # http://www.medi1sat.ma/fr/depeche.aspx?idp=2312
    -# 
     # (French)
     #
     # Our summary:
    -# 
     # http://www.timeanddate.com/news/time/morocco-starts-dst-2009.html
    -# 
     
     # From Alexander Krivenyshev (2009-03-17):
     # Here is a link to official document from Royaume du Maroc Premier Ministre,
    -# Ministere de la Modernisation des Secteurs Publics
    +# Ministère de la Modernisation des Secteurs Publics
     #
     # Under Article 1 of Royal Decree No. 455-67 of Act 23 safar 1387 (2 june 1967)
     # concerning the amendment of the legal time, the Ministry of Modernization of
     # Public Sectors announced that the official time in the Kingdom will be
     # advanced 60 minutes from Sunday 31 May 2009 at midnight.
     #
    -# 
     # http://www.mmsp.gov.ma/francais/Actualites_fr/PDF_Actualites_Fr/HeureEte_FR.pdf
    -# 
    -#
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_morocco03.html
    -# 
     
     # From Steffen Thorsen (2010-04-13):
     # Several news media in Morocco report that the Ministry of Modernization
    @@ -813,51 +768,33 @@ Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
     # 2010-05-02 to 2010-08-08.
     #
     # Example:
    -# 
     # http://www.lavieeco.com/actualites/4099-le-maroc-passera-a-l-heure-d-ete-gmt1-le-2-mai.html
    -# 
     # (French)
     # Our page:
    -# 
     # http://www.timeanddate.com/news/time/morocco-starts-dst-2010.html
    -# 
     
     # From Dan Abitol (2011-03-30):
     # ...Rules for Africa/Casablanca are the following (24h format)
    -# The 3rd april 2011 at 00:00:00, [it] will be 3rd april 1:00:00
    -# The 31th july 2011 at 00:59:59,  [it] will be 31th July 00:00:00
    +# The 3rd April 2011 at 00:00:00, [it] will be 3rd April 01:00:00
    +# The 31st July 2011 at 00:59:59, [it] will be 31st July 00:00:00
     # ...Official links of change in morocco
     # The change was broadcast on the FM Radio
     # I ve called ANRT (telecom regulations in Morocco) at
     # +212.537.71.84.00
    -# 
     # http://www.anrt.net.ma/fr/
    -# 
     # They said that
    -# 
     # http://www.map.ma/fr/sections/accueil/l_heure_legale_au_ma/view
    -# 
     # is the official publication to look at.
     # They said that the decision was already taken.
     #
     # More articles in the press
    -# 
    -# http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-lev
    -# 
    -# e.html
    -# 
    +# http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-leve.html
     # http://www.lematin.ma/Actualite/Express/Article.asp?id=148923
    -# 
    -# 
     # http://www.lavieeco.com/actualite/Le-Maroc-passe-sur-GMT%2B1-a-partir-de-dim
    -# anche-prochain-5538.html
    -# 
     
     # From Petr Machata (2011-03-30):
     # They have it written in English here:
    -# 
     # http://www.map.ma/eng/sections/home/morocco_to_spring_fo/view
    -# 
     #
     # It says there that "Morocco will resume its standard time on July 31,
     # 2011 at midnight." Now they don't say whether they mean midnight of
    @@ -865,20 +802,16 @@ Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
     # also been like that in the past.
     
     # From Alexander Krivenyshev (2012-03-09):
    -# According to Infomédiaire web site from Morocco (infomediaire.ma),
    -# on March 9, 2012, (in French) Heure légale:
    -# Le Maroc adopte officiellement l'heure d'été
    -# 
    +# According to Infomédiaire web site from Morocco (infomediaire.ma),
    +# on March 9, 2012, (in French) Heure légale:
    +# Le Maroc adopte officiellement l'heure d'été
     # http://www.infomediaire.ma/news/maroc/heure-l%C3%A9gale-le-maroc-adopte-officiellement-lheure-d%C3%A9t%C3%A9
    -# 
     # Governing Council adopted draft decree, that Morocco DST starts on
     # the last Sunday of March (March 25, 2012) and ends on
     # last Sunday of September (September 30, 2012)
     # except the month of Ramadan.
     # or (brief)
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_morocco06.html
    -# 
     
     # From Arthur David Olson (2012-03-10):
     # The infomediaire.ma source indicates that the system is to be in
    @@ -889,17 +822,13 @@ Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
     
     # From Christophe Tropamer (2012-03-16):
     # Seen Morocco change again:
    -# 
     # http://www.le2uminutes.com/actualite.php
    -# 
    -# "...à partir du dernier dimance d'avril et non fins mars,
    -# comme annoncé précédemment."
    +# "...à partir du dernier dimanche d'avril et non fins mars,
    +# comme annoncé précédemment."
     
     # From Milamber Space Network (2012-07-17):
     # The official return to GMT is announced by the Moroccan government:
    -# 
     # http://www.mmsp.gov.ma/fr/actualites.aspx?id=288 [in French]
    -# 
     #
     # Google translation, lightly edited:
     # Back to the standard time of the Kingdom (GMT)
    @@ -917,7 +846,7 @@ Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
     # announced a bit in advance.  On 2012-07-11 the Moroccan government
     # announced that year's Ramadan daylight-saving transitions would be
     # 2012-07-20 and 2012-08-20; see
    -# .
    +# http://www.mmsp.gov.ma/fr/actualites.aspx?id=288
     
     # From Andrew Paprocki (2013-07-02):
     # Morocco announced that the year's Ramadan daylight-savings
    @@ -937,39 +866,36 @@ Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
     # From Sebastien Willemijns (2014-03-18):
     # http://www.afriquinfos.com/articles/2014/3/18/maroc-heure-dete-avancez-tous-horloges-247891.asp
     
    -# From Paul Eggert (2014-03-19):
    -# To estimate what the Moroccan government will do in future years,
    -# transition dates for 2014 through 2038 were determined by running
    -# the following program under GNU Emacs 24.3:
    -#
    -# (let ((islamic-year 1435))
    -#   (while (< islamic-year 1461)
    -#     (let ((a
    -#	     (calendar-gregorian-from-absolute
    -#	      (calendar-islamic-to-absolute (list 9 1 islamic-year))))
    -#	    (b
    -#	     (calendar-gregorian-from-absolute
    -#	      (calendar-islamic-to-absolute (list 10 1 islamic-year)))))
    -#	(insert
    -#	 (format
    -#	  (concat "Rule\tMorocco\t%d\tonly\t-\t%s\t %2d\t 3:00\t0\t-\n"
    -#		  "Rule\tMorocco\t%d\tonly\t-\t%s\t %2d\t 2:00\t1:00\tS\n")
    -#	  (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
    -#	  (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
    +# From Milamber Space Network (2014-06-05):
    +# The Moroccan government has recently announced that the country will return
    +# to standard time at 03:00 on Saturday, June 28, 2014 local time....  DST
    +# will resume again at 02:00 on Saturday, August 2, 2014....
    +# http://www.mmsp.gov.ma/fr/actualites.aspx?id=586
    +
    +# From Paul Eggert (2014-06-05):
    +# For now, guess that later spring and fall transitions will use 2014's rules,
    +# and guess that Morocco will switch to standard time at 03:00 the last
    +# Saturday before Ramadan, and back to DST at 02:00 the first Saturday after
    +# Ramadan.  To implement this, transition dates for 2015 through 2037 were
    +# determined by running the following program under GNU Emacs 24.3, with the
    +# results integrated by hand into the table below.
    +# (let ((islamic-year 1436))
    +#   (while (< islamic-year 1460)
    +#     (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
    +#           (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
    +#           (saturday 6))
    +#       (while (/= saturday (mod (setq a (1- a)) 7)))
    +#       (while (/= saturday (mod b 7))
    +#         (setq b (1+ b)))
    +#       (setq a (calendar-gregorian-from-absolute a))
    +#       (setq b (calendar-gregorian-from-absolute b))
    +#       (insert
    +#        (format
    +#         (concat "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 3:00\t0\t-\n"
    +#                 "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 2:00\t1:00\tS\n")
    +#         (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
    +#         (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
     #     (setq islamic-year (+ 1 islamic-year))))
    -#
    -# with spring-forward transitions removed for 2023-2025, when the
    -# normal spring-forward date falls during the estimated Ramadan; with
    -# all transitions removed for 2026-2035, where the estimated Ramadan
    -# falls entirely outside daylight-saving time; and with fall-back
    -# transitions removed for 2036-2037, where the normal fall-back
    -# date falls during the estimated Ramadan.  Normally, the table would
    -# stop after 2037 because 32-bit time_t values roll around early in 2038,
    -# but that would imply a prediction of perpetual DST after March 2038
    -# due to the year-2037 glitches.  So, this table instead stops after
    -# 2038, the first non-glitchy year after the 32-bit rollover.
    -# An advantage of stopping after 2038 is that it lets zic guess
    -# TZ='WET0WEST,M3.5.0,M10.5.0/3' for time stamps far in the future.
     
     # RULE	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
     
    @@ -991,46 +917,44 @@ Rule	Morocco	1978	only	-	Aug	 4	 0:00	0	-
     Rule	Morocco	2008	only	-	Jun	 1	 0:00	1:00	S
     Rule	Morocco	2008	only	-	Sep	 1	 0:00	0	-
     Rule	Morocco	2009	only	-	Jun	 1	 0:00	1:00	S
    -Rule	Morocco	2009	only	-	Aug	 21	 0:00	0	-
    +Rule	Morocco	2009	only	-	Aug	21	 0:00	0	-
     Rule	Morocco	2010	only	-	May	 2	 0:00	1:00	S
     Rule	Morocco	2010	only	-	Aug	 8	 0:00	0	-
     Rule	Morocco	2011	only	-	Apr	 3	 0:00	1:00	S
    -Rule	Morocco	2011	only	-	Jul	 31	 0	0	-
    -Rule	Morocco	2012	2013	-	Apr	 lastSun 2:00	1:00	S
    -Rule	Morocco	2012	only	-	Sep	 30	 3:00	0	-
    -Rule	Morocco	2012	only	-	Jul	 20	 3:00	0	-
    -Rule	Morocco	2012	only	-	Aug	 20	 2:00	1:00	S
    -Rule	Morocco	2013	only	-	Jul	  7	 3:00	0	-
    -Rule	Morocco	2013	only	-	Aug	 10	 2:00	1:00	S
    -Rule	Morocco	2013	2035	-	Oct	 lastSun 3:00	0	-
    -Rule	Morocco	2014	2022	-	Mar	 lastSun 2:00	1:00	S
    -Rule	Morocco	2014	only	-	Jun	 29	 3:00	0	-
    -Rule	Morocco	2014	only	-	Jul	 29	 2:00	1:00	S
    -Rule	Morocco	2015	only	-	Jun	 18	 3:00	0	-
    -Rule	Morocco	2015	only	-	Jul	 18	 2:00	1:00	S
    -Rule	Morocco	2016	only	-	Jun	  7	 3:00	0	-
    -Rule	Morocco	2016	only	-	Jul	  7	 2:00	1:00	S
    -Rule	Morocco	2017	only	-	May	 27	 3:00	0	-
    -Rule	Morocco	2017	only	-	Jun	 26	 2:00	1:00	S
    -Rule	Morocco	2018	only	-	May	 16	 3:00	0	-
    -Rule	Morocco	2018	only	-	Jun	 15	 2:00	1:00	S
    -Rule	Morocco	2019	only	-	May	  6	 3:00	0	-
    -Rule	Morocco	2019	only	-	Jun	  5	 2:00	1:00	S
    -Rule	Morocco	2020	only	-	Apr	 24	 3:00	0	-
    -Rule	Morocco	2020	only	-	May	 24	 2:00	1:00	S
    -Rule	Morocco	2021	only	-	Apr	 13	 3:00	0	-
    -Rule	Morocco	2021	only	-	May	 13	 2:00	1:00	S
    -Rule	Morocco	2022	only	-	Apr	  3	 3:00	0	-
    -Rule	Morocco	2022	only	-	May	  3	 2:00	1:00	S
    -Rule	Morocco	2023	only	-	Apr	 22	 2:00	1:00	S
    -Rule	Morocco	2024	only	-	Apr	 10	 2:00	1:00	S
    -Rule	Morocco	2025	only	-	Mar	 31	 2:00	1:00	S
    -Rule	Morocco	2026	max	-	Mar	 lastSun 2:00	1:00	S
    -Rule	Morocco	2036	only	-	Oct	 21	 3:00	0	-
    -Rule	Morocco	2037	only	-	Oct	 11	 3:00	0	-
    -Rule	Morocco	2038	only	-	Sep	 30	 3:00	0	-
    -Rule	Morocco	2038	only	-	Oct	 30	 2:00	1:00	S
    -Rule	Morocco	2038	max	-	Oct	 lastSun 3:00	0	-
    +Rule	Morocco	2011	only	-	Jul	31	 0	0	-
    +Rule	Morocco	2012	2013	-	Apr	lastSun	 2:00	1:00	S
    +Rule	Morocco	2012	only	-	Sep	30	 3:00	0	-
    +Rule	Morocco	2012	only	-	Jul	20	 3:00	0	-
    +Rule	Morocco	2012	only	-	Aug	20	 2:00	1:00	S
    +Rule	Morocco	2013	only	-	Jul	 7	 3:00	0	-
    +Rule	Morocco	2013	only	-	Aug	10	 2:00	1:00	S
    +Rule	Morocco	2013	max	-	Oct	lastSun	 3:00	0	-
    +Rule	Morocco	2014	2022	-	Mar	lastSun	 2:00	1:00	S
    +Rule	Morocco	2014	only	-	Jun	28	 3:00	0	-
    +Rule	Morocco	2014	only	-	Aug	 2	 2:00	1:00	S
    +Rule	Morocco	2015	only	-	Jun	13	 3:00	0	-
    +Rule	Morocco	2015	only	-	Jul	18	 2:00	1:00	S
    +Rule	Morocco	2016	only	-	Jun	 4	 3:00	0	-
    +Rule	Morocco	2016	only	-	Jul	 9	 2:00	1:00	S
    +Rule	Morocco	2017	only	-	May	20	 3:00	0	-
    +Rule	Morocco	2017	only	-	Jul	 1	 2:00	1:00	S
    +Rule	Morocco	2018	only	-	May	12	 3:00	0	-
    +Rule	Morocco	2018	only	-	Jun	16	 2:00	1:00	S
    +Rule	Morocco	2019	only	-	May	 4	 3:00	0	-
    +Rule	Morocco	2019	only	-	Jun	 8	 2:00	1:00	S
    +Rule	Morocco	2020	only	-	Apr	18	 3:00	0	-
    +Rule	Morocco	2020	only	-	May	30	 2:00	1:00	S
    +Rule	Morocco	2021	only	-	Apr	10	 3:00	0	-
    +Rule	Morocco	2021	only	-	May	15	 2:00	1:00	S
    +Rule	Morocco	2022	only	-	Apr	 2	 3:00	0	-
    +Rule	Morocco	2022	only	-	May	 7	 2:00	1:00	S
    +Rule	Morocco	2023	only	-	Apr	22	 2:00	1:00	S
    +Rule	Morocco	2024	only	-	Apr	13	 2:00	1:00	S
    +Rule	Morocco	2025	only	-	Apr	 5	 2:00	1:00	S
    +Rule	Morocco	2026	max	-	Mar	lastSun	 2:00	1:00	S
    +Rule	Morocco	2035	only	-	Oct	27	 3:00	0	-
    +Rule	Morocco	2036	only	-	Oct	18	 3:00	0	-
    +Rule	Morocco	2037	only	-	Oct	10	 3:00	0	-
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
    @@ -1049,11 +973,17 @@ Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
     # Assume that this has been true since Western Sahara switched to GMT,
     # since most of it was then controlled by Morocco.
     
    -Zone Africa/El_Aaiun	-0:52:48 -	LMT	1934 Jan
    +Zone Africa/El_Aaiun	-0:52:48 -	LMT	1934 Jan # El Aaiún
     			-1:00	-	WAT	1976 Apr 14
     			 0:00	Morocco	WE%sT
     
     # Mozambique
    +#
    +# Shanks gives 1903-03-01 for the transition to CAT.
    +# Perhaps the 1911-05-26 Portuguese decree
    +# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
    +# merely made it official?
    +#
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Africa/Maputo	2:10:20 -	LMT	1903 Mar
     			2:00	-	CAT
    @@ -1062,8 +992,8 @@ Zone	Africa/Maputo	2:10:20 -	LMT	1903 Mar
     # The 1994-04-03 transition is from Shanks & Pottenger.
     # Shanks & Pottenger report no DST after 1998-04; go with IATA.
     
    -# From Petronella Sibeene (2007-03-30) in
    -# :
    +# From Petronella Sibeene (2007-03-30):
    +# http://allafrica.com/stories/200703300178.html
     # While the entire country changes its time, Katima Mulilo and other
     # settlements in Caprivi unofficially will not because the sun there
     # rises and sets earlier compared to other regions.  Chief of
    @@ -1080,34 +1010,41 @@ Rule	Namibia	1994	max	-	Sep	Sun>=1	2:00	1:00	S
     Rule	Namibia	1995	max	-	Apr	Sun>=1	2:00	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Africa/Windhoek	1:08:24 -	LMT	1892 Feb 8
    -			1:30	-	SWAT	1903 Mar	# SW Africa Time
    -			2:00	-	SAST	1942 Sep 20 2:00
    -			2:00	1:00	SAST	1943 Mar 21 2:00
    +			1:30	-	SWAT	1903 Mar    # SW Africa Time
    +			2:00	-	SAST	1942 Sep 20  2:00
    +			2:00	1:00	SAST	1943 Mar 21  2:00
     			2:00	-	SAST	1990 Mar 21 # independence
     			2:00	-	CAT	1994 Apr  3
     			1:00	Namibia	WA%sT
     
     # Niger
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Africa/Niamey	 0:08:28 -	LMT	1912
    -			-1:00	-	WAT	1934 Feb 26
    -			 0:00	-	GMT	1960
    -			 1:00	-	WAT
    +# See Africa/Lagos.
     
     # Nigeria
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Africa/Lagos	0:13:36 -	LMT	1919 Sep
     			1:00	-	WAT
    +Link Africa/Lagos Africa/Bangui	     # Central African Republic
    +Link Africa/Lagos Africa/Brazzaville # Rep. of the Congo
    +Link Africa/Lagos Africa/Douala	     # Cameroon
    +Link Africa/Lagos Africa/Kinshasa    # Dem. Rep. of the Congo (west)
    +Link Africa/Lagos Africa/Libreville  # Gabon
    +Link Africa/Lagos Africa/Luanda	     # Angola
    +Link Africa/Lagos Africa/Malabo	     # Equatorial Guinea
    +Link Africa/Lagos Africa/Niamey	     # Niger
    +Link Africa/Lagos Africa/Porto-Novo  # Benin
     
    -# Reunion
    +# Réunion
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Indian/Reunion	3:41:52 -	LMT	1911 Jun	# Saint-Denis
    -			4:00	-	RET	# Reunion Time
    +Zone	Indian/Reunion	3:41:52 -	LMT	1911 Jun # Saint-Denis
    +			4:00	-	RET	# Réunion Time
     #
    -# Scattered Islands (Iles Eparses) administered from Reunion are as follows.
    +# Crozet Islands also observes Réunion time; see the 'antarctica' file.
    +#
    +# Scattered Islands (Îles Éparses) administered from Réunion are as follows.
     # The following information about them is taken from
    -# Iles Eparses (www.outre-mer.gouv.fr/domtom/ile.htm, 1997-07-22, in French;
    -# no longer available as of 1999-08-17).
    +# Îles Éparses (, 1997-07-22,
    +# in French; no longer available as of 1999-08-17).
     # We have no info about their time zone histories.
     #
     # Bassas da India - uninhabited
    @@ -1122,32 +1059,21 @@ Zone	Africa/Kigali	2:00:16 -	LMT	1935 Jun
     			2:00	-	CAT
     
     # St Helena
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Atlantic/St_Helena	-0:22:48 -	LMT	1890		# Jamestown
    -			-0:22:48 -	JMT	1951	# Jamestown Mean Time
    -			 0:00	-	GMT
    +# See Africa/Abidjan.
     # The other parts of the St Helena territory are similar:
     #	Tristan da Cunha: on GMT, say Whitman and the CIA
    -#	Ascension: on GMT, says usno1995 and the CIA
    +#	Ascension: on GMT, say the USNO (1995-12-21) and the CIA
     #	Gough (scientific station since 1955; sealers wintered previously):
     #		on GMT, says the CIA
    -#	Inaccessible, Nightingale: no information, but probably GMT
    -
    -# Sao Tome and Principe
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Africa/Sao_Tome	 0:26:56 -	LMT	1884
    -			-0:36:32 -	LMT	1912	# Lisbon Mean Time
    -			 0:00	-	GMT
    +#	Inaccessible, Nightingale: uninhabited
     
    +# São Tomé and Príncipe
     # Senegal
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Africa/Dakar	-1:09:44 -	LMT	1912
    -			-1:00	-	WAT	1941 Jun
    -			 0:00	-	GMT
    +# See Africa/Abidjan.
     
     # Seychelles
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Indian/Mahe	3:41:48 -	LMT	1906 Jun	# Victoria
    +Zone	Indian/Mahe	3:41:48 -	LMT	1906 Jun # Victoria
     			4:00	-	SCT	# Seychelles Time
     # From Paul Eggert (2001-05-30):
     # Aldabra, Farquhar, and Desroches, originally dependencies of the
    @@ -1157,17 +1083,7 @@ Zone	Indian/Mahe	3:41:48 -	LMT	1906 Jun	# Victoria
     # Possibly the islands were uninhabited.
     
     # Sierra Leone
    -# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -# Whitman gives Mar 31 - Aug 31 for 1931 on; go with Shanks & Pottenger.
    -Rule	SL	1935	1942	-	Jun	 1	0:00	0:40	SLST
    -Rule	SL	1935	1942	-	Oct	 1	0:00	0	WAT
    -Rule	SL	1957	1962	-	Jun	 1	0:00	1:00	SLST
    -Rule	SL	1957	1962	-	Sep	 1	0:00	0	GMT
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Africa/Freetown	-0:53:00 -	LMT	1882
    -			-0:53:00 -	FMT	1913 Jun # Freetown Mean Time
    -			-1:00	SL	%s	1957
    -			 0:00	SL	%s
    +# See Africa/Abidjan.
     
     # Somalia
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    @@ -1190,9 +1106,9 @@ Zone Africa/Johannesburg 1:52:00 -	LMT	1892 Feb 8
     
     # Sudan
     #
    -# From 
    -# Sudan News Agency (2000-01-13)
    -# , also reported by Michael De Beukelaer-Dossche via Steffen Thorsen:
    +# From 
    +# Sudan News Agency (2000-01-13),
    +# also reported by Michaël De Beukelaer-Dossche via Steffen Thorsen:
     # Clocks will be moved ahead for 60 minutes all over the Sudan as of noon
     # Saturday....  This was announced Thursday by Caretaker State Minister for
     # Manpower Abdul-Rahman Nur-Eddin.
    @@ -1223,14 +1139,12 @@ Zone Africa/Dar_es_Salaam 2:37:08 -	LMT	1931
     			3:00	-	EAT
     
     # Togo
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Africa/Lome	0:04:52 -	LMT	1893
    -			0:00	-	GMT
    +# See Africa/Abidjan.
     
     # Tunisia
     
     # From Gwillim Law (2005-04-30):
    -# My correspondent, Risto Nykanen, has alerted me to another adoption of DST,
    +# My correspondent, Risto Nykänen, has alerted me to another adoption of DST,
     # this time in Tunisia.  According to Yahoo France News
     # , in a story attributed to AP
     # and dated 2005-04-26, "Tunisia has decided to advance its official time by
    @@ -1239,8 +1153,8 @@ Zone	Africa/Lome	0:04:52 -	LMT	1893
     # Saturday."  (My translation)
     #
     # From Oscar van Vlijmen (2005-05-02):
    -# LaPresse, the first national daily newspaper ...
    -# 
    +# La Presse, the first national daily newspaper ...
    +# http://www.lapresse.tn/archives/archives280405/actualites/lheure.html
     # ... DST for 2005: on: Sun May 1 0h standard time, off: Fri Sept. 30,
     # 1h standard time.
     #
    @@ -1253,18 +1167,12 @@ Zone	Africa/Lome	0:04:52 -	LMT	1893
     # From Steffen Thorsen (2009-03-16):
     # According to several news sources, Tunisia will not observe DST this year.
     # (Arabic)
    -# 
     # http://www.elbashayer.com/?page=viewn&nid=42546
    -# 
    -# 
     # http://www.babnet.net/kiwidetail-15295.asp
    -# 
     #
     # We have also confirmed this with the US embassy in Tunisia.
     # We have a wrap-up about this on the following page:
    -# 
     # http://www.timeanddate.com/news/time/tunisia-cancels-dst-2009.html
    -# 
     
     # From Alexander Krivenyshev (2009-03-17):
     # Here is a link to Tunis Afrique Presse News Agency
    @@ -1272,20 +1180,17 @@ Zone	Africa/Lome	0:04:52 -	LMT	1893
     # Standard time to be kept the whole year long (tap.info.tn):
     #
     # (in English)
    -# 
     # http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=26813&Itemid=157
    -# 
     #
     # (in Arabic)
    -# 
     # http://www.tap.info.tn/ar/index.php?option=com_content&task=view&id=61240&Itemid=1
    -# 
     
    -# From Arthur David Olson (2009--3-18):
    -# The Tunis Afrique Presse News Agency notice contains this: "This measure is due to the fact
    -# that the fasting month of ramadan coincides with the period concerned by summer time.
    -# Therefore, the standard time will be kept unchanged the whole year long."
    -# So foregoing DST seems to be an exception (albeit one that may be repeated in the  future).
    +# From Arthur David Olson (2009-03-18):
    +# The Tunis Afrique Presse News Agency notice contains this: "This measure is
    +# due to the fact that the fasting month of Ramadan coincides with the period
    +# concerned by summer time.  Therefore, the standard time will be kept
    +# unchanged the whole year long."  So foregoing DST seems to be an exception
    +# (albeit one that may be repeated in the future).
     
     # From Alexander Krivenyshev (2010-03-27):
     # According to some news reports Tunis confirmed not to use DST in 2010
    @@ -1297,12 +1202,8 @@ Zone	Africa/Lome	0:04:52 -	LMT	1893
     # coincided with the month of Ramadan..."
     #
     # (in Arabic)
    -# 
     # http://www.moheet.com/show_news.aspx?nid=358861&pg=1
    -# 
     # http://www.almadenahnews.com/newss/news.php?c=118&id=38036
    -# or
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_tunis02.html
     
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    @@ -1337,7 +1238,7 @@ Rule	Tunisia	2006	2008	-	Oct	lastSun	 2:00s	0	-
     # Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11.
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Africa/Tunis	0:40:44 -	LMT	1881 May 12
    -			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
    +			0:09:21	-	PMT	1911 Mar 11 # Paris Mean Time
     			1:00	Tunisia	CE%sT
     
     # Uganda
    diff --git a/jdk/test/sun/util/calendar/zi/tzdata/antarctica b/jdk/test/sun/util/calendar/zi/tzdata/antarctica
    index e31bada94fb..0cdac270861 100644
    --- a/jdk/test/sun/util/calendar/zi/tzdata/antarctica
    +++ b/jdk/test/sun/util/calendar/zi/tzdata/antarctica
    @@ -21,19 +21,16 @@
     # or visit www.oracle.com if you need additional information or have any
     # questions.
     #
    -# 
     # This file is in the public domain, so clarified as of
     # 2009-05-17 by Arthur David Olson.
     
     # From Paul Eggert (1999-11-15):
     # To keep things manageable, we list only locations occupied year-round; see
    -# 
     # COMNAP - Stations and Bases
    -# 
    +# http://www.comnap.aq/comnap/comnap.nsf/P/Stations/
     # and
    -# 
     # Summary of the Peri-Antarctic Islands (1998-07-23)
    -# 
    +# http://www.spri.cam.ac.uk/bob/periant.htm
     # for information.
     # Unless otherwise specified, we have no time zone information.
     #
    @@ -78,19 +75,19 @@ Rule	ChileAQ	2012	max	-	Sep	Sun>=2	4:00u	1:00	S
     
     # Argentina - year-round bases
     # Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
    -# Esperanza, San Martin Land, -6323-05659, since 1952-12-17
    -# Jubany, Potter Peninsula, King George Island, -6414-0602320, since 1982-01
    -# Marambio, Seymour I, -6414-05637, since 1969-10-29
    +# Carlini, Potter Cove, King George Island, -6414-0602320, since 1982-01
    +# Esperanza, Hope Bay, -6323-05659, since 1952-12-17
    +# Marambio, -6414-05637, since 1969-10-29
     # Orcadas, Laurie I, -6016-04444, since 1904-02-22
    -# San Martin, Debenham I, -6807-06708, since 1951-03-21
    +# San Martín, Barry I, -6808-06706, since 1951-03-21
     #	(except 1960-03 / 1976-03-21)
     
     # Australia - territories
     # Heard Island, McDonald Islands (uninhabited)
     #	previously sealers and scientific personnel wintered
    -#	
     #	Margaret Turner reports
    -#	 (1999-09-30) that they're UTC+5, with no DST;
    +#	http://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html
    +#	(1999-09-30) that they're UTC+5, with no DST;
     #	presumably this is when they have visitors.
     #
     # year-round bases
    @@ -107,14 +104,10 @@ Rule	ChileAQ	2012	max	-	Sep	Sun>=2	4:00u	1:00	S
     # The changes occurred on 2009-10-18 at 02:00 (local times).
     #
     # Government source: (Australian Antarctic Division)
    -# 
     # http://www.aad.gov.au/default.asp?casid=37079
    -# 
     #
     # We have more background information here:
    -# 
     # http://www.timeanddate.com/news/time/antarctica-new-times.html
    -# 
     
     # From Steffen Thorsen (2010-03-10):
     # We got these changes from the Australian Antarctic Division: ...
    @@ -129,50 +122,49 @@ Rule	ChileAQ	2012	max	-	Sep	Sun>=2	4:00u	1:00	S
     # - Mawson station stays on UTC+5.
     #
     # Background:
    -# 
     # http://www.timeanddate.com/news/time/antartica-time-changes-2010.html
    -# 
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Antarctica/Casey	0	-	zzz	1969
    -			8:00	-	WST	2009 Oct 18 2:00
    -						# Western (Aus) Standard Time
    -			11:00	-	CAST	2010 Mar 5 2:00
    -						# Casey Time
    -			8:00	-	WST	2011 Oct 28 2:00
    +			8:00	-	AWST	2009 Oct 18  2:00
    +						# Australian Western Std Time
    +			11:00	-	CAST	2010 Mar  5  2:00  # Casey Time
    +			8:00	-	AWST	2011 Oct 28  2:00
     			11:00	-	CAST	2012 Feb 21 17:00u
    -			8:00	-	WST
    +			8:00	-	AWST
     Zone Antarctica/Davis	0	-	zzz	1957 Jan 13
    -			7:00	-	DAVT	1964 Nov # Davis Time
    +			7:00	-	DAVT	1964 Nov    # Davis Time
     			0	-	zzz	1969 Feb
    -			7:00	-	DAVT	2009 Oct 18 2:00
    +			7:00	-	DAVT	2009 Oct 18  2:00
     			5:00	-	DAVT	2010 Mar 10 20:00u
    -			7:00	-	DAVT	2011 Oct 28 2:00
    +			7:00	-	DAVT	2011 Oct 28  2:00
     			5:00	-	DAVT	2012 Feb 21 20:00u
     			7:00	-	DAVT
     Zone Antarctica/Mawson	0	-	zzz	1954 Feb 13
    -			6:00	-	MAWT	2009 Oct 18 2:00
    -						# Mawson Time
    +			6:00	-	MAWT	2009 Oct 18  2:00 # Mawson Time
     			5:00	-	MAWT
     # References:
    -# 
     # Casey Weather (1998-02-26)
    -# 
    -# 
    +# http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html
     # Davis Station, Antarctica (1998-02-26)
    -# 
    -# 
    +# http://www.antdiv.gov.au/aad/exop/sfo/davis/video.html
     # Mawson Station, Antarctica (1998-02-25)
    -# 
    +# http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html
    +
    +# Belgium - year-round base
    +# Princess Elisabeth, Queen Maud Land, -713412+0231200, since 2007
     
     # Brazil - year-round base
    -# Comandante Ferraz, King George Island, -6205+05824, since 1983/4
    +# Ferraz, King George Island, -6205+05824, since 1983/4
    +
    +# Bulgaria - year-round base
    +# St. Kliment Ohridski, Livingston Island, -623829-0602153, since 1988
     
     # Chile - year-round bases and towns
     # Escudero, South Shetland Is, -621157-0585735, since 1994
    -# Presidente Eduadro Frei, King George Island, -6214-05848, since 1969-03-07
    -# General Bernardo O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
    -# Capitan Arturo Prat, -6230-05941
    +# Frei Montalva, King George Island, -6214-05848, since 1969-03-07
    +# O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
    +# Prat, -6230-05941
     # Villa Las Estrellas (a town), around the Frei base, since 1984-04-09
     # These locations have always used Santiago time; use TZ='America/Santiago'.
     
    @@ -180,31 +172,35 @@ Zone Antarctica/Mawson	0	-	zzz	1954 Feb 13
     # Great Wall, King George Island, -6213-05858, since 1985-02-20
     # Zhongshan, Larsemann Hills, Prydz Bay, -6922+07623, since 1989-02-26
     
    -# France - year-round bases
    +# France - year-round bases (also see "France & Italy")
     #
     # From Antoine Leca (1997-01-20):
    -# Time data are from Nicole Pailleau at the IFRTP
    +# Time data entries are from Nicole Pailleau at the IFRTP
     # (French Institute for Polar Research and Technology).
    -# She confirms that French Southern Territories and Terre Adelie bases
    -# don't observe daylight saving time, even if Terre Adelie supplies came
    +# She confirms that French Southern Territories and Terre Adélie bases
    +# don't observe daylight saving time, even if Terre Adélie supplies came
     # from Tasmania.
     #
     # French Southern Territories with year-round inhabitants
     #
    -# Martin-de-Vivies Base, Amsterdam Island, -374105+0773155, since 1950
    -# Alfred-Faure Base, Crozet Islands, -462551+0515152, since 1964
    -# Port-aux-Francais, Kerguelen Islands, -492110+0701303, since 1951;
    +# Alfred Faure, Possession Island, Crozet Islands, -462551+0515152, since 1964;
    +#	sealing & whaling stations operated variously 1802/1911+;
    +#	see Indian/Reunion.
    +#
    +# Martin-de-Viviès, Amsterdam Island, -374105+0773155, since 1950
    +# Port-aux-Français, Kerguelen Islands, -492110+0701303, since 1951;
     #	whaling & sealing station operated 1908/1914, 1920/1929, and 1951/1956
     #
     # St Paul Island - near Amsterdam, uninhabited
     #	fishing stations operated variously 1819/1931
     #
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Indian/Kerguelen	0	-	zzz	1950	# Port-aux-Francais
    +Zone Indian/Kerguelen	0	-	zzz	1950 # Port-aux-Français
     			5:00	-	TFT	# ISO code TF Time
     #
     # year-round base in the main continent
    -# Dumont-d'Urville, Ile des Petrels, -6640+14001, since 1956-11
    +# Dumont d'Urville, Île des Pétrels, -6640+14001, since 1956-11
    +#  (2005-12-05)
     #
     # Another base at Port-Martin, 50km east, began operation in 1947.
     # It was destroyed by fire on 1952-01-14.
    @@ -214,20 +210,22 @@ Zone Antarctica/DumontDUrville 0 -	zzz	1947
     			10:00	-	PMT	1952 Jan 14 # Port-Martin Time
     			0	-	zzz	1956 Nov
     			10:00	-	DDUT	# Dumont-d'Urville Time
    -# Reference:
    -# 
    -# Dumont d'Urville Station (2005-12-05)
    -# 
    +
    +# France & Italy - year-round base
    +# Concordia, -750600+1232000, since 2005
     
     # Germany - year-round base
    -# Georg von Neumayer, -7039-00815
    +# Neumayer III, -704080-0081602, since 2009
     
    -# India - year-round base
    -# Dakshin Gangotri, -7005+01200
    +# India - year-round bases
    +# Bharati, -692428+0761114, since 2012
    +# Maitri, -704558+0114356, since 1989
    +
    +# Italy - year-round base (also see "France & Italy")
    +# Zuchelli, Terra Nova Bay, -744140+1640647, since 1986
     
     # Japan - year-round bases
    -# Dome Fuji, -7719+03942
    -# Syowa, -690022+0393524
    +# Syowa (also known as Showa), -690022+0393524, since 1957
     #
     # From Hideyuki Suzuki (1999-02-06):
     # In all Japanese stations, +0300 is used as the standard time.
    @@ -239,11 +237,11 @@ Zone Antarctica/DumontDUrville 0 -	zzz	1947
     Zone Antarctica/Syowa	0	-	zzz	1957 Jan 29
     			3:00	-	SYOT	# Syowa Time
     # See:
    -# 
     # NIPR Antarctic Research Activities (1999-08-17)
    -# 
    +# http://www.nipr.ac.jp/english/ara01.html
     
     # S Korea - year-round base
    +# Jang Bogo, Terra Nova Bay, -743700+1641205 since 2014
     # King Sejong, King George Island, -6213-05847, since 1988
     
     # New Zealand - claims
    @@ -287,11 +285,14 @@ Rule	Troll	2005	max	-	Mar	lastSun	1:00u	2:00	CEST
     Rule	Troll	2004	max	-	Oct	lastSun	1:00u	0:00	UTC
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Antarctica/Troll	0	-	zzz	2005 Feb 12
    -     			0:00	Troll	%s
    +			0:00	Troll	%s
     
     # Poland - year-round base
     # Arctowski, King George Island, -620945-0582745, since 1977
     
    +# Romania - year-bound base
    +# Law-Racoviță, Larsemann Hills, -692319+0762251, since 1986
    +
     # Russia - year-round bases
     # Bellingshausen, King George Island, -621159-0585337, since 1968-02-22
     # Mirny, Davis coast, -6633+09301, since 1956-02
    @@ -301,8 +302,8 @@ Zone Antarctica/Troll	0	-	zzz	2005 Feb 12
     #	year-round from 1960/61 to 1992
     
     # Vostok, since 1957-12-16, temporarily closed 1994-02/1994-11
    -# 
    -# From Craig Mundell (1994-12-15):
    +# From Craig Mundell (1994-12-15):
    +# http://quest.arc.nasa.gov/antarctica/QA/computers/Directions,Time,ZIP
     # Vostok, which is one of the Russian stations, is set on the same
     # time as Moscow, Russia.
     #
    @@ -317,7 +318,7 @@ Zone Antarctica/Troll	0	-	zzz	2005 Feb 12
     #
     # From Paul Eggert (2001-05-04):
     # This seems to be hopelessly confusing, so I asked Lee Hotz about it
    -# in person.  He said that some Antartic locations set their local
    +# in person.  He said that some Antarctic locations set their local
     # time so that noon is the warmest part of the day, and that this
     # changes during the year and does not necessarily correspond to mean
     # solar noon.  So the Vostok time might have been whatever the clocks
    @@ -329,9 +330,12 @@ Zone Antarctica/Vostok	0	-	zzz	1957 Dec 16
     
     # S Africa - year-round bases
     # Marion Island, -4653+03752
    -# Sanae, -7141-00250
    +# SANAE IV, Vesleskarvet, Queen Maud Land, -714022-0025026, since 1997
     
    -# UK
    +# Ukraine - year-round base
    +# Vernadsky (formerly Faraday), Galindez Island, -651445-0641526, since 1954
    +
    +# United Kingdom
     #
     # British Antarctic Territories (BAT) claims
     # South Orkney Islands
    @@ -387,7 +391,7 @@ Zone Antarctica/Palmer	0	-	zzz	1965
     # but that he found it more convenient to keep GMT+12
     # as supplies for the station were coming from McMurdo Sound,
     # which was on GMT+12 because New Zealand was on GMT+12 all year
    -# at that time (1957).  (Source: Siple's book 90 degrees SOUTH.)
    +# at that time (1957).  (Source: Siple's book 90 Degrees South.)
     #
     # From Susan Smith
     # http://www.cybertours.com/whs/pole10.html
    diff --git a/jdk/test/sun/util/calendar/zi/tzdata/asia b/jdk/test/sun/util/calendar/zi/tzdata/asia
    index 595c8ed7245..906c0a97cda 100644
    --- a/jdk/test/sun/util/calendar/zi/tzdata/asia
    +++ b/jdk/test/sun/util/calendar/zi/tzdata/asia
    @@ -21,13 +21,13 @@
     # or visit www.oracle.com if you need additional information or have any
     # questions.
     #
    -# 
     # This file is in the public domain, so clarified as of
     # 2009-05-17 by Arthur David Olson.
     
    -# This data is by no means authoritative; if you think you know better,
    +# This file is by no means authoritative; if you think you know better,
     # go ahead and edit the file (and please send any changes to
    -# tz@iana.org for general use in the future).
    +# tz@iana.org for general use in the future).  For more, please see
    +# the file CONTRIBUTING in the tz distribution.
     
     # From Paul Eggert (2013-08-11):
     #
    @@ -49,13 +49,17 @@
     # I found in the UCLA library.
     #
     # For data circa 1899, a common source is:
    -# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
    -# .
    +# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
    +# http://www.jstor.org/stable/1774359
    +#
    +# For Russian data circa 1919, a source is:
    +# Byalokoz EL. New Counting of Time in Russia since July 1, 1919.
    +# (See the 'europe' file for a fuller citation.)
     #
     # A reliable and entertaining source about time zones is
     # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
     #
    -# I invented the abbreviations marked `*' in the following table;
    +# I invented the abbreviations marked '*' in the following table;
     # the rest are from earlier versions of this file, or from other sources.
     # Corrections are welcome!
     #	     std  dst
    @@ -70,13 +74,14 @@
     #	7:00 WIB	west Indonesia (Waktu Indonesia Barat)
     #	8:00 WITA	central Indonesia (Waktu Indonesia Tengah)
     #	8:00 CST	China
    -#	9:00 CJT	Central Japanese Time (1896/1937)*
    +#	8:00 JWST	Western Standard Time (Japan, 1896/1937)*
    +#	9:00 JCST	Central Standard Time (Japan, 1896/1937)
     #	9:00 WIT	east Indonesia (Waktu Indonesia Timur)
     #	9:00 JST  JDT	Japan
     #	9:00 KST  KDT	Korea
    -#	9:30 CST	(Australian) Central Standard Time
    +#	9:30 ACST	Australian Central Standard Time
     #
    -# See the `europe' file for Russia and Turkey in Asia.
    +# See the 'europe' file for Russia and Turkey in Asia.
     
     # From Guy Harris:
     # Incorporates data for Singapore from Robert Elz' asia 1.1, as well as
    @@ -86,7 +91,7 @@
     
     ###############################################################################
     
    -# These rules are stolen from the `europe' file.
    +# These rules are stolen from the 'europe' file.
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
     Rule	EUAsia	1981	max	-	Mar	lastSun	 1:00u	1:00	S
     Rule	EUAsia	1979	1995	-	Sep	lastSun	 1:00u	0	-
    @@ -138,11 +143,11 @@ Zone	Asia/Kabul	4:36:48 -	LMT	1890
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Asia/Yerevan	2:58:00 -	LMT	1924 May  2
     			3:00	-	YERT	1957 Mar    # Yerevan Time
    -			4:00 RussiaAsia YER%sT	1991 Mar 31 2:00s
    +			4:00 RussiaAsia YER%sT	1991 Mar 31  2:00s
     			3:00	1:00	YERST	1991 Sep 23 # independence
    -			3:00 RussiaAsia	AM%sT	1995 Sep 24 2:00s
    +			3:00 RussiaAsia	AM%sT	1995 Sep 24  2:00s
     			4:00	-	AMT	1997
    -			4:00 RussiaAsia	AM%sT	2012 Mar 25 2:00s
    +			4:00 RussiaAsia	AM%sT	2012 Mar 25  2:00s
     			4:00	-	AMT
     
     # Azerbaijan
    @@ -155,16 +160,16 @@ Rule	Azer	1997	max	-	Oct	lastSun	 5:00	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Asia/Baku	3:19:24 -	LMT	1924 May  2
     			3:00	-	BAKT	1957 Mar    # Baku Time
    -			4:00 RussiaAsia BAK%sT	1991 Mar 31 2:00s
    +			4:00 RussiaAsia BAK%sT	1991 Mar 31  2:00s
     			3:00	1:00	BAKST	1991 Aug 30 # independence
     			3:00 RussiaAsia	AZ%sT	1992 Sep lastSat 23:00
    -			4:00	-	AZT	1996 # Azerbaijan time
    +			4:00	-	AZT	1996     # Azerbaijan Time
     			4:00	EUAsia	AZ%sT	1997
     			4:00	Azer	AZ%sT
     
     # Bahrain
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Asia/Bahrain	3:22:20 -	LMT	1920		# Al Manamah
    +Zone	Asia/Bahrain	3:22:20 -	LMT	1920     # Manamah
     			4:00	-	GST	1972 Jun
     			3:00	-	AST
     
    @@ -174,13 +179,8 @@ Zone	Asia/Bahrain	3:22:20 -	LMT	1920		# Al Manamah
     # Daylight Saving Time from June 16 to Sept 30
     #
     # Bangladesh to introduce daylight saving time likely from June 16
    -# 
     # http://www.asiantribune.com/?q=node/17288
    -# 
    -# or
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_bangladesh02.html
    -# 
     #
     # "... Bangladesh government has decided to switch daylight saving time from
     # June
    @@ -195,17 +195,11 @@ Zone	Asia/Bahrain	3:22:20 -	LMT	1920		# Al Manamah
     # the 19th and 20th, and they have not set the end date yet.
     #
     # Some sources:
    -# 
     # http://in.reuters.com/article/southAsiaNews/idINIndia-40017620090601
    -# 
    -# 
     # http://bdnews24.com/details.php?id=85889&cid=2
    -# 
     #
     # Our wrap-up:
    -# 
     # http://www.timeanddate.com/news/time/bangladesh-daylight-saving-2009.html
    -# 
     
     # From A. N. M. Kamrus Saadat (2009-06-15):
     # Finally we've got the official mail regarding DST start time where DST start
    @@ -220,13 +214,8 @@ Zone	Asia/Bahrain	3:22:20 -	LMT	1920		# Al Manamah
     #
     # Following report by same newspaper-"The Daily Star Friday":
     # "DST change awaits cabinet decision-Clock won't go back by 1-hr from Oct 1"
    -# 
     # http://www.thedailystar.net/newDesign/news-details.php?nid=107021
    -# 
    -# or
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_bangladesh04.html
    -# 
     
     # From Steffen Thorsen (2009-10-13):
     # IANS (Indo-Asian News Service) now reports:
    @@ -235,22 +224,15 @@ Zone	Asia/Bahrain	3:22:20 -	LMT	1920		# Al Manamah
     # "continue for an indefinite period."
     #
     # One of many places where it is published:
    -# 
     # http://www.thaindian.com/newsportal/business/bangladesh-to-continue-indefinitely-with-advanced-time_100259987.html
    -# 
     
     # From Alexander Krivenyshev (2009-12-24):
     # According to Bangladesh newspaper "The Daily Star,"
     # Bangladesh will change its clock back to Standard Time on Dec 31, 2009.
     #
     # Clock goes back 1-hr on Dec 31 night.
    -# 
     # http://www.thedailystar.net/newDesign/news-details.php?nid=119228
    -# 
    -# and
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_bangladesh05.html
    -# 
     #
     # "...The government yesterday decided to put the clock back by one hour
     # on December 31 midnight and the new time will continue until March 31,
    @@ -260,17 +242,12 @@ Zone	Asia/Bahrain	3:22:20 -	LMT	1920		# Al Manamah
     # From Alexander Krivenyshev (2010-03-22):
     # According to Bangladesh newspaper "The Daily Star,"
     # Cabinet cancels Daylight Saving Time
    -# 
     # http://www.thedailystar.net/newDesign/latest_news.php?nid=22817
    -# 
    -# or
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html
    -# 
     
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
     Rule	Dhaka	2009	only	-	Jun	19	23:00	1:00	S
    -Rule	Dhaka	2009	only	-	Dec	31	23:59	0	-
    +Rule	Dhaka	2009	only	-	Dec	31	24:00	0	-
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Asia/Dhaka	6:01:40 -	LMT	1890
    @@ -301,7 +278,7 @@ Zone	Indian/Chagos	4:49:40	-	LMT	1907
     
     # Brunei
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Asia/Brunei	7:39:40 -	LMT	1926 Mar   # Bandar Seri Begawan
    +Zone	Asia/Brunei	7:39:40 -	LMT	1926 Mar # Bandar Seri Begawan
     			7:30	-	BNT	1933
     			8:00	-	BNT
     
    @@ -310,16 +287,16 @@ Zone	Asia/Brunei	7:39:40 -	LMT	1926 Mar   # Bandar Seri Begawan
     # Milne says 6:24:40 was the meridian of the time ball observatory at Rangoon.
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Asia/Rangoon	6:24:40 -	LMT	1880		# or Yangon
    -			6:24:40	-	RMT	1920	   # Rangoon Mean Time?
    -			6:30	-	BURT	1942 May   # Burma Time
    -			9:00	-	JST	1945 May 3
    -			6:30	-	MMT		   # Myanmar Time
    +Zone	Asia/Rangoon	6:24:40 -	LMT	1880        # or Yangon
    +			6:24:40	-	RMT	1920        # Rangoon Mean Time?
    +			6:30	-	BURT	1942 May    # Burma Time
    +			9:00	-	JST	1945 May  3
    +			6:30	-	MMT	# Myanmar Time
     
     # Cambodia
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Asia/Phnom_Penh	6:59:40 -	LMT	1906 Jun  9
    -			7:06:20	-	SMT	1911 Mar 11 0:01 # Saigon MT?
    +			7:06:20	-	SMT	1911 Mar 11  0:01 # Saigon MT?
     			7:00	-	ICT	1912 May
     			8:00	-	ICT	1931 May
     			7:00	-	ICT
    @@ -332,12 +309,12 @@ Zone	Asia/Phnom_Penh	6:59:40 -	LMT	1906 Jun  9
     # From Bob Devine (1988-01-28):
     # No they don't.  See TIME mag, 1986-02-17 p.52.  Even though
     # China is across 4 physical time zones, before Feb 1, 1986 only the
    -# Peking (Bejing) time zone was recognized.  Since that date, China
    -# has two of 'em -- Peking's and Urumqi (named after the capital of
    +# Peking (Beijing) time zone was recognized.  Since that date, China
    +# has two of 'em - Peking's and Ürümqi (named after the capital of
     # the Xinjiang Uyghur Autonomous Region).  I don't know about DST for it.
     #
     # . . .I just deleted the DST table and this editor makes it too
    -# painful to suck in another copy..  So, here is what I have for
    +# painful to suck in another copy.  So, here is what I have for
     # DST start/end dates for Peking's time zone (info from AP):
     #
     #     1986 May 4 - Sept 14
    @@ -347,15 +324,16 @@ Zone	Asia/Phnom_Penh	6:59:40 -	LMT	1906 Jun  9
     # CHINA               8 H  AHEAD OF UTC  ALL OF CHINA, INCL TAIWAN
     # CHINA               9 H  AHEAD OF UTC  APR 17 - SEP 10
     
    -# From Paul Eggert (2006-03-22):
    -# Shanks & Pottenger write that China (except for Hong Kong and Macau)
    -# has had a single time zone since 1980 May 1, observing summer DST
    -# from 1986 through 1991; this contradicts Devine's
    -# note about Time magazine, though apparently _something_ happened in 1986.
    -# Go with Shanks & Pottenger for now.  I made up names for the other
    -# pre-1980 time zones.
    +# From Paul Eggert (2008-02-11):
    +# Jim Mann, "A clumsy embrace for another western custom: China on daylight
    +# time - sort of", Los Angeles Times, 1986-05-05 ... [says] that China began
    +# observing daylight saving time in 1986.
     
    -# From Shanks & Pottenger:
    +# From Paul Eggert (2014-06-30):
    +# Shanks & Pottenger have China switching to a single time zone in 1980, but
    +# this doesn't seem to be correct.  They also write that China observed summer
    +# DST from 1986 through 1991, which seems to match the above commentary, so
    +# go with them for DST rules as follows:
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
     Rule	Shang	1940	only	-	Jun	 3	0:00	1:00	D
     Rule	Shang	1940	1941	-	Oct	 1	0:00	0	S
    @@ -369,7 +347,7 @@ Rule	PRC	1987	1991	-	Apr	Sun>=10	0:00	1:00	D
     # historic timezones from some Taiwan websites.  And yes, there are official
     # Chinese names for these locales (before 1949).
     #
    -# From Jesper Norgaard Welen (2006-07-14):
    +# From Jesper Nørgaard Welen (2006-07-14):
     # I have investigated the timezones around 1970 on the
     # http://www.astro.com/atlas site [with provinces and county
     # boundaries summarized below]....  A few other exceptions were two
    @@ -380,65 +358,97 @@ Rule	PRC	1987	1991	-	Apr	Sun>=10	0:00	1:00	D
     # (could be true), for the moment I am assuming that those two
     # counties are mistakes in the astro.com data.
     
    -# From Paul Eggert (2008-02-11):
    -# I just now checked Google News for western news sources that talk
    -# about China's single time zone, and couldn't find anything before 1986
    -# talking about China being in one time zone.  (That article was: Jim
    -# Mann, "A clumsy embrace for another western custom: China on daylight
    -# time--sort of", Los Angeles Times, 1986-05-05.  By the way, this
    -# article confirms the tz database's data claiming that China began
    -# observing daylight saving time in 1986.
    +# From Paul Eggert (2014-06-30):
    +# Alois Treindl kindly sent me translations of the following two sources:
     #
    -# From Thomas S. Mullaney (2008-02-11):
    -# I think you're combining two subjects that need to treated
    -# separately: daylight savings (which, you're correct, wasn't
    -# implemented until the 1980s) and the unified time zone centered near
    -# Beijing (which was implemented in 1949). Briefly, there was also a
    -# "Lhasa Time" in Tibet and "Urumqi Time" in Xinjiang. The first was
    -# ceased, and the second eventually recognized (again, in the 1980s).
    +# (1)
    +# Guo Qingsheng (National Time-Service Center, CAS, Xi'an 710600, China)
    +# Beijing Time at the Beginning of the PRC
    +# China Historical Materials of Science and Technology
    +# (Zhongguo ke ji shi liao, 中国科技史料), Vol. 24, No. 1 (2003)
    +# It gives evidence that at the beginning of the PRC, Beijing time was
    +# officially apparent solar time!  However, Guo also says that the
    +# evidence is dubious, as the relevant institute of astronomy had not
    +# been taken over by the PRC yet.  It's plausible that apparent solar
    +# time was announced but never implemented, and that people continued
    +# to use UT+8.  As the Shanghai radio station (and I presume the
    +# observatory) was still under control of French missionaries, it
    +# could well have ignored any such mandate.
     #
    -# From Paul Eggert (2008-06-30):
    -# There seems to be a good chance China switched to a single time zone in 1949
    -# rather than in 1980 as Shanks & Pottenger have it, but we don't have a
    -# reliable documentary source saying so yet, so for now we still go with
    -# Shanks & Pottenger.
    -
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -# Changbai Time ("Long-white Time", Long-white = Heilongjiang area)
    +# (2)
    +# Guo Qing-sheng (Shaanxi Astronomical Observatory, CAS, Xi'an 710600, China)
    +# A Study on the Standard Time Changes for the Past 100 Years in China
    +# [undated and unknown publication location]
    +# It says several things:
    +#   * The Qing dynasty used local apparent solar time throughout China.
    +#   * The Republic of China instituted Beijing mean solar time effective
    +#     the official calendar book of 1914.
    +#   * The French Concession in Shanghai set up signal stations in
    +#     French docks in the 1890s, controlled by Xujiahui (Zikawei)
    +#     Observatory and set to local mean time.
    +#   * "From the end of the 19th century" it changed to UT+8.
    +#   * Chinese Customs (by then reduced to a tool of foreign powers)
    +#     eventually standardized on this time for all ports, and it
    +#     became used by railways as well.
    +#   * In 1918 the Central Observatory proposed dividing China into
    +#     five time zones (see below for details).  This caught on
    +#     at first only in coastal areas observing UT+8.
    +#   * During WWII all of China was in theory was at UT+7.  In practice
    +#     this was ignored in the west, and I presume was ignored in
    +#     Japanese-occupied territory.
    +#   * Japanese-occupied Manchuria was at UT+9, i.e., Japan time.
    +#   * The five-zone plan was resurrected after WWII and officially put into
    +#     place (with some modifications) in March 1948.  It's not clear
    +#     how well it was observed in areas under Nationalist control.
    +#   * The People's Liberation Army used UT+8 during the civil war.
    +#
    +# An AP article "Shanghai Internat'l Area Little Changed" in the
    +# Lewiston (ME) Daily Sun (1939-05-29), p 17, said "Even the time is
    +# different - the occupied districts going by Tokyo time, an hour
    +# ahead of that prevailing in the rest of Shanghai."  Guess that the
    +# Xujiahui Observatory was under French control and stuck with UT+8.
    +#
    +# In earlier versions of this file, China had many separate Zone entries, but
    +# this was based on what were apparently incorrect data in Shanks & Pottenger.
    +# This has now been simplified to the two entries Asia/Shanghai and
    +# Asia/Urumqi, with the others being links for backward compatibility.
    +# Proposed in 1918 and theoretically in effect until 1949 (although in practice
    +# mainly observed in coastal areas), the five zones were:
    +#
    +# Changbai Time ("Long-white Time", Long-white = Heilongjiang area) UT+8.5
    +# Asia/Harbin (currently a link to Asia/Shanghai)
     # Heilongjiang (except Mohe county), Jilin
    -Zone	Asia/Harbin	8:26:44	-	LMT	1928 # or Haerbin
    -			8:30	-	CHAT	1932 Mar # Changbai Time
    -			8:00	-	CST	1940
    -			9:00	-	CHAT	1966 May
    -			8:30	-	CHAT	1980 May
    -			8:00	PRC	C%sT
    -# Zhongyuan Time ("Central plain Time")
    +#
    +# Zhongyuan Time ("Central plain Time") UT+8
    +# Asia/Shanghai
     # most of China
    -# Milne gives 8:05:56.7; round to nearest.
    -Zone	Asia/Shanghai	8:05:57	-	LMT	1928
    -			8:00	Shang	C%sT	1949
    -			8:00	PRC	C%sT
    -# Long-shu Time (probably due to Long and Shu being two names of that area)
    +# This currently represents most other zones as well,
    +# as apparently these regions have been the same since 1970.
    +# Milne gives 8:05:43.2 for Xujiahui Observatory time; round to nearest.
    +# Guo says Shanghai switched to UT+8 "from the end of the 19th century".
    +#
    +# Long-shu Time (probably due to Long and Shu being two names of that area) UT+7
    +# Asia/Chongqing (currently a link to Asia/Shanghai)
     # Guangxi, Guizhou, Hainan, Ningxia, Sichuan, Shaanxi, and Yunnan;
     # most of Gansu; west Inner Mongolia; west Qinghai; and the Guangdong
     # counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing,
     # Yangchun, Yangjiang, Yu'nan, and Yunfu.
    -Zone	Asia/Chongqing	7:06:20	-	LMT	1928 # or Chungking
    -			7:00	-	LONT	1980 May # Long-shu Time
    -			8:00	PRC	C%sT
    -# Xin-zang Time ("Xinjiang-Tibet Time")
    +#
    +# Xin-zang Time ("Xinjiang-Tibet Time") UT+6
    +# Asia/Urumqi
    +# This currently represents Kunlun Time as well,
    +# as apparently the two regions have been the same since 1970.
     # The Gansu counties Aksay, Anxi, Dunhuang, Subei; west Qinghai;
     # the Guangdong counties  Xuwen, Haikang, Suixi, Lianjiang,
     # Zhanjiang, Wuchuan, Huazhou, Gaozhou, Maoming, Dianbai, and Xinyi;
     # east Tibet, including Lhasa, Chamdo, Shigaise, Jimsar, Shawan and Hutubi;
    -# east Xinjiang, including Urumqi, Turpan, Karamay, Korla, Minfeng, Jinghe,
    +# east Xinjiang, including Ürümqi, Turpan, Karamay, Korla, Minfeng, Jinghe,
     # Wusu, Qiemo, Xinyan, Wulanwusu, Jinghe, Yumin, Tacheng, Tuoli, Emin,
     # Shihezi, Changji, Yanqi, Heshuo, Tuokexun, Tulufan, Shanshan, Hami,
     # Fukang, Kuitun, Kumukuli, Miquan, Qitai, and Turfan.
    -Zone	Asia/Urumqi	5:50:20	-	LMT	1928 # or Urumchi
    -			6:00	-	URUT	1980 May # Urumqi Time
    -			8:00	PRC	C%sT
    -# Kunlun Time
    +#
    +# Kunlun Time UT+5.5
    +# Asia/Kashgar (currently a link to Asia/Urumqi)
     # West Tibet, including Pulan, Aheqi, Shufu, Shule;
     # West Xinjiang, including Aksu, Atushi, Yining, Hetian, Cele, Luopu, Nileke,
     # Zhaosu, Tekesi, Gongliu, Chabuchaer, Huocheng, Bole, Pishan, Suiding,
    @@ -455,9 +465,9 @@ Zone	Asia/Urumqi	5:50:20	-	LMT	1928 # or Urumchi
     # population of Xinjiang, typically use "Xinjiang time" which is two
     # hours behind Beijing time, or UTC +0600. The government of the Xinjiang
     # Uyghur Autonomous Region, (XAUR, or just Xinjiang for short) as well as
    -# local governments such as the Urumqi city government use both times in
    +# local governments such as the Ürümqi city government use both times in
     # publications, referring to what is popularly called Xinjiang time as
    -# "Urumqi time." When Uyghurs make an appointment in the Uyghur language
    +# "Ürümqi time." When Uyghurs make an appointment in the Uyghur language
     # they almost invariably use Xinjiang time.
     #
     # (Their ethnic Han compatriots would typically have no clue of its
    @@ -469,21 +479,6 @@ Zone	Asia/Urumqi	5:50:20	-	LMT	1928 # or Urumchi
     # the province not having dual times but four times in use at the same
     # time. Some areas remained on standard Xinjiang time or Beijing time and
     # others moving their clocks ahead.)
    -#
    -# ...an example of an official website using of Urumqi time.
    -#
    -# The first few lines of the Google translation of
    -# 
    -# http://www.fjysgl.gov.cn/show.aspx?id=2379&cid=39
    -# 
    -# (retrieved 2009-10-13)
    -# > Urumqi fire seven people are missing the alleged losses of at least
    -# > 500 million yuan
    -# >
    -# > (Reporter Dong Liu) the day before 20:20 or so (Urumqi Time 18:20),
    -# > Urumqi City Department of International Plaza Luther Qiantang River
    -# > burst fire. As of yesterday, 18:30, Urumqi City Fire officers and men
    -# > have worked continuously for 22 hours...
     
     # From Luther Ma (2009-11-19):
     # With the risk of being redundant to previous answers these are the most common
    @@ -494,7 +489,7 @@ Zone	Asia/Urumqi	5:50:20	-	LMT	1928 # or Urumchi
     # 3. Urumqi...
     # 4. Kashgar...
     # ...
    -# 5. It seems that Uyghurs in Urumqi has been using Xinjiang since at least the
    +# 5. It seems that Uyghurs in Ürümqi has been using Xinjiang since at least the
     # 1960's. I know of one Han, now over 50, who grew up in the surrounding
     # countryside and used Xinjiang time as a child.
     #
    @@ -506,10 +501,55 @@ Zone	Asia/Urumqi	5:50:20	-	LMT	1928 # or Urumchi
     # Autonomous Region under the PRC. (Before that Uyghurs, of course, would also
     # not be using Beijing time, but some local time.)
     
    -Zone	Asia/Kashgar	5:03:56	-	LMT	1928 # or Kashi or Kaxgar
    -			5:30	-	KAST	1940	 # Kashgar Time
    -			5:00	-	KAST	1980 May
    +# From David Cochrane (2014-03-26):
    +# Just a confirmation that Ürümqi time was implemented in Ürümqi on 1 Feb 1986:
    +# http://content.time.com/time/magazine/article/0,9171,960684,00.html
    +
    +# From Luther Ma (2014-04-22):
    +# I have interviewed numerous people of various nationalities and from
    +# different localities in Xinjiang and can confirm the information in Guo's
    +# report regarding Xinjiang, as well as the Time article reference by David
    +# Cochrane.  Whether officially recognized or not (and both are officially
    +# recognized), two separate times have been in use in Xinjiang since at least
    +# the Cultural Revolution: Xinjiang Time (XJT), aka Ürümqi Time or local time;
    +# and Beijing Time.  There is no confusion in Xinjiang as to which name refers
    +# to which time. Both are widely used in the province, although in some
    +# population groups might be use one to the exclusion of the other.  The only
    +# problem is that computers and smart phones list Ürümqi (or Kashgar) as
    +# having the same time as Beijing.
    +
    +# From Paul Eggert (2014-06-30):
    +# In the early days of the PRC, Tibet was given its own time zone (UT+6) but
    +# this was withdrawn in 1959 and never reinstated; see Tubten Khétsun,
    +# Memories of life in Lhasa under Chinese Rule, Columbia U Press, ISBN
    +# 978-0231142861 (2008), translator's introduction by Matthew Akester, p x.
    +# As this is before our 1970 cutoff, Tibet doesn't need a separate zone.
    +#
    +# Xinjiang Time is well-documented as being officially recognized.  E.g., see
    +# "The Working-Calendar for The Xinjiang Uygur Autonomous Region Government"
    +#  (2014-04-22).
    +# Unfortunately, we have no good records of time in Xinjiang before 1986.
    +# During the 20th century parts of Xinjiang were ruled by the Qing dynasty,
    +# the Republic of China, various warlords, the First and Second East Turkestan
    +# Republics, the Soviet Union, the Kuomintang, and the People's Republic of
    +# China, and tracking down all these organizations' timekeeping rules would be
    +# quite a trick.  Approximate this lost history by a transition from LMT to
    +# XJT at the start of 1928, the year of accession of the warlord Jin Shuren,
    +# which happens to be the date given by Shanks & Pottenger (no doubt as a
    +# guess) as the transition from LMT.  Ignore the usage of UT+8 before
    +# 1986-02-01 under the theory that the transition date to UT+8 is unknown and
    +# that the sort of users who prefer Asia/Urumqi now typically ignored the
    +# UT+8 mandate back then.
    +
    +# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    +# Beijing time, used throughout China; represented by Shanghai.
    +Zone	Asia/Shanghai	8:05:43	-	LMT	1901
    +			8:00	Shang	C%sT	1949
     			8:00	PRC	C%sT
    +# Xinjiang time, used by many in western China; represented by Ürümqi / Ürümchi
    +# / Wulumuqi.  (Please use Asia/Shanghai if you prefer Beijing time.)
    +Zone	Asia/Urumqi	5:50:20	-	LMT	1928
    +			6:00	-	XJT
     
     
     # Hong Kong (Xianggang)
    @@ -524,15 +564,11 @@ Zone	Asia/Kashgar	5:03:56	-	LMT	1928 # or Kashi or Kaxgar
     # and incorrect rules. Although the exact switch over time is missing, I
     # think 3:30 is correct. The official DST record for Hong Kong can be
     # obtained from
    -# 
     # http://www.hko.gov.hk/gts/time/Summertime.htm
    -# .
     
     # From Arthur David Olson (2009-10-28):
     # Here are the dates given at
    -# 
     # http://www.hko.gov.hk/gts/time/Summertime.htm
    -# 
     # as of 2009-10-28:
     # Year        Period
     # 1941        1 Apr to 30 Sep
    @@ -612,35 +648,113 @@ Zone	Asia/Hong_Kong	7:36:42 -	LMT	1904 Oct 30
     
     # Taiwan
     
    -# Shanks & Pottenger write that Taiwan observed DST during 1945, when it
    -# was still controlled by Japan.  This is hard to believe, but we don't
    -# have any other information.
    -
     # From smallufo (2010-04-03):
    -# According to Taiwan's CWB,
    -# 
    +# According to Taiwan's CWB [Central Weather Bureau],
     # http://www.cwb.gov.tw/V6/astronomy/cdata/summert.htm
    -# 
     # Taipei has DST in 1979 between July 1st and Sep 30.
     
    -# From Arthur David Olson (2010-04-07):
    -# Here's Google's translation of the table at the bottom of the "summert.htm" page:
    -# Decade 	                                                    Name                      Start and end date
    -# Republic of China 34 years to 40 years (AD 1945-1951 years) Summer Time               May 1 to September 30
    -# 41 years of the Republic of China (AD 1952)                 Daylight Saving Time      March 1 to October 31
    -# Republic of China 42 years to 43 years (AD 1953-1954 years) Daylight Saving Time      April 1 to October 31
    -# In the 44 years to 45 years (AD 1955-1956 years)            Daylight Saving Time      April 1 to September 30
    -# Republic of China 46 years to 48 years (AD 1957-1959)       Summer Time               April 1 to September 30
    -# Republic of China 49 years to 50 years (AD 1960-1961)       Summer Time               June 1 to September 30
    -# Republic of China 51 years to 62 years (AD 1962-1973 years) Stop Summer Time
    -# Republic of China 63 years to 64 years (1974-1975 AD)       Daylight Saving Time      April 1 to September 30
    -# Republic of China 65 years to 67 years (1976-1978 AD)       Stop Daylight Saving Time
    -# Republic of China 68 years (AD 1979)                        Daylight Saving Time      July 1 to September 30
    -# Republic of China since 69 years (AD 1980)                  Stop Daylight Saving Time
    +# From Yu-Cheng Chuang (2013-07-12):
    +# On Dec 28, 1895, the Meiji Emperor announced Ordinance No. 167 of
    +# Meiji Year 28 "The clause about standard time", mentioned that
    +# Taiwan and Penghu Islands, as well as Yaeyama and Miyako Islands
    +# (both in Okinawa) adopt the Western Standard Time which is based on
    +# 120E. The adoption began from Jan 1, 1896. The original text can be
    +# found on Wikisource:
    +# http://ja.wikisource.org/wiki/標準時ニ關スル件_(公布時)
    +# ... This could be the first adoption of time zone in Taiwan, because
    +# during the Qing Dynasty, it seems that there was no time zone
    +# declared officially.
    +#
    +# Later, in the beginning of World War II, on Sep 25, 1937, the Showa
    +# Emperor announced Ordinance No. 529 of Showa Year 12 "The clause of
    +# revision in the ordinance No. 167 of Meiji year 28 about standard
    +# time", in which abolished the adoption of Western Standard Time in
    +# western islands (listed above), which means the whole Japan
    +# territory, including later occupations, adopt Japan Central Time
    +# (UTC+9). The adoption began on Oct 1, 1937. The original text can
    +# be found on Wikisource:
    +# http://ja.wikisource.org/wiki/明治二十八年勅令第百六十七號標準時ニ關スル件中改正ノ件
    +#
    +# That is, the time zone of Taipei switched to UTC+9 on Oct 1, 1937.
    +
    +# From Yu-Cheng Chuang (2014-07-02):
    +# I've found more evidence about when the time zone was switched from UTC+9
    +# back to UTC+8 after WW2.  I believe it was on Sep 21, 1945.  In a document
    +# during Japanese era [1] in which the officer told the staff to change time
    +# zone back to Western Standard Time (UTC+8) on Sep 21.  And in another
    +# history page of National Cheng Kung University [2], on Sep 21 there is a
    +# note "from today, switch back to Western Standard Time".  From these two
    +# materials, I believe that the time zone change happened on Sep 21.  And
    +# today I have found another monthly journal called "The Astronomical Herald"
    +# from The Astronomical Society of Japan [3] in which it mentioned the fact
    +# that:
    +#
    +# 1. Standard Time of the Country (Japan) was adopted on Jan 1, 1888, using
    +# the time at 135E (GMT+9)
    +#
    +# 2. Standard Time of the Country was renamed to Central Standard Time, on Jan
    +# 1, 1898, and on the same day, the new territories Taiwan and Penghu islands,
    +# as well as Yaeyama and Miyako islands, adopted a new time zone called
    +# Western Standard Time, which is in GMT+8.
    +#
    +# 3. Western Standard Time was deprecated on Sep 30, 1937. From then all the
    +# territories of Japan adopted the same time zone, which is Central Standard
    +# Time.
    +#
    +# [1] Academica Historica, Taiwan:
    +# http://163.29.208.22:8080/govsaleShowImage/connect_img.php?s=00101738900090036&e=00101738900090037
    +# [2] Nat'l Cheng Kung University 70th Anniversary Special Site:
    +# http://www.ncku.edu.tw/~ncku70/menu/001/01_01.htm
    +# [3] Yukio Niimi, The Standard Time in Japan (1997), p.475:
    +# http://www.asj.or.jp/geppou/archive_open/1997/pdf/19971001c.pdf
    +
    +# Yu-Cheng Chuang (2014-07-03):
    +# I finally have found the real official gazette about changing back to
    +# Western Standard Time on Sep 21 in Taiwan.  It's Taiwan Governor-General
    +# Bulletin No. 386 in Showa 20 years (1945), published on Sep 19, 1945. [1] ...
    +# [It] abolishes Bulletin No. 207 in Showa 12 years (1937), which is a local
    +# bulletin in Taiwan for that Ordinance No. 529. It also mentioned that 1am on
    +# Sep 21, 1945 will be 12am on Sep 21.  I think this bulletin is much more
    +# official than the one I mentioned in my first mail, because it's from the
    +# top-level government in Taiwan. If you're going to quote any resource, this
    +# would be a good one.
    +# [1] Taiwan Governor-General Gazette, No. 1018, Sep 19, 1945:
    +# http://db2.th.gov.tw/db2/view/viewImg.php?imgcode=0072031018a&num=19&bgn=019&end=019&otherImg=&type=gener
    +
    +# From Yu-Cheng Chuang (2014-07-02):
    +# In 1946, DST in Taiwan was from May 15 and ended on Sep 30. The info from
    +# Central Weather Bureau website was not correct.
    +#
    +# Original Bulletin:
    +# http://subtpg.tpg.gov.tw/og/image2.asp?f=03502F0AKM1AF
    +# http://subtpg.tpg.gov.tw/og/image2.asp?f=0350300AKM1B0 (cont.)
    +#
    +# In 1947, DST in Taiwan was expanded to Oct 31. There is a backup of that
    +# telegram announcement from Taiwan Province Government:
    +#
    +# http://subtpg.tpg.gov.tw/og/image2.asp?f=0360310AKZ431
    +#
    +# Here is a brief translation:
    +#
    +#   The Summer Time this year is adopted from midnight Apr 15 until Sep 20
    +#   midnight. To save (energy?) consumption, we're expanding Summer Time
    +#   adoption till Oct 31 midnight.
    +#
    +# The Central Weather Bureau website didn't mention that, however it can
    +# be found from historical government announcement database.
    +
    +# From Paul Eggert (2014-07-03):
    +# As per Yu-Cheng Chuang, say that Taiwan was at UT+9 from 1937-10-01
    +# until 1945-09-21 at 01:00, overriding Shanks & Pottenger.
    +# Likewise, use Yu-Cheng Chuang's data for DST in Taiwan.
     
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -Rule	Taiwan	1945	1951	-	May	1	0:00	1:00	D
    -Rule	Taiwan	1945	1951	-	Oct	1	0:00	0	S
    +Rule	Taiwan	1946	only	-	May	15	0:00	1:00	D
    +Rule	Taiwan	1946	only	-	Oct	1	0:00	0	S
    +Rule	Taiwan	1947	only	-	Apr	15	0:00	1:00	D
    +Rule	Taiwan	1947	only	-	Nov	1	0:00	0	S
    +Rule	Taiwan	1948	1951	-	May	1	0:00	1:00	D
    +Rule	Taiwan	1948	1951	-	Oct	1	0:00	0	S
     Rule	Taiwan	1952	only	-	Mar	1	0:00	1:00	D
     Rule	Taiwan	1952	1954	-	Nov	1	0:00	0	S
     Rule	Taiwan	1953	1959	-	Apr	1	0:00	1:00	D
    @@ -648,11 +762,14 @@ Rule	Taiwan	1955	1961	-	Oct	1	0:00	0	S
     Rule	Taiwan	1960	1961	-	Jun	1	0:00	1:00	D
     Rule	Taiwan	1974	1975	-	Apr	1	0:00	1:00	D
     Rule	Taiwan	1974	1975	-	Oct	1	0:00	0	S
    -Rule	Taiwan	1979	only	-	Jun	30	0:00	1:00	D
    -Rule	Taiwan	1979	only	-	Sep	30	0:00	0	S
    +Rule	Taiwan	1979	only	-	Jul	1	0:00	1:00	D
    +Rule	Taiwan	1979	only	-	Oct	1	0:00	0	S
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Asia/Taipei	8:06:00 -	LMT	1896 # or Taibei or T'ai-pei
    +# Taipei or Taibei or T'ai-pei
    +Zone	Asia/Taipei	8:06:00 -	LMT	1896 Jan  1
    +			8:00	-	JWST	1937 Oct  1
    +			9:00	-	JST	1945 Sep 21  1:00
     			8:00	Taiwan	C%sT
     
     # Macau (Macao, Aomen)
    @@ -672,7 +789,7 @@ Rule	Macau	1975	1977	-	Apr	Sun>=15	3:30	1:00	S
     Rule	Macau	1978	1980	-	Apr	Sun>=15	0:00	1:00	S
     Rule	Macau	1978	1980	-	Oct	Sun>=15	0:00	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Asia/Macau	7:34:20 -	LMT	1912
    +Zone	Asia/Macau	7:34:20 -	LMT	1912 Jan  1
     			8:00	Macau	MO%sT	1999 Dec 20 # return to China
     			8:00	PRC	C%sT
     
    @@ -721,7 +838,7 @@ Link	Asia/Nicosia	Europe/Nicosia
     # republic has changed its time zone back to that of Moscow.  As a result it
     # is now just four hours ahead of Greenwich Mean Time, rather than five hours
     # ahead.  The switch was decreed by the pro-Western president of Georgia,
    -# Mikhail Saakashvili, who said the change was partly prompted by the process
    +# Mikheil Saakashvili, who said the change was partly prompted by the process
     # of integration into Europe.
     
     # From Teimuraz Abashidze (2005-11-07):
    @@ -734,29 +851,31 @@ Link	Asia/Nicosia	Europe/Nicosia
     # I don't know what can be done, especially knowing that some years ago our
     # DST rules where changed THREE TIMES during one month.
     
    +# Milne 1899 says Tbilisi (Tiflis) time was 2:59:05.7.
    +# Byalokoz 1919 says Georgia was 2:59:11.
    +# Go with Byalokoz.
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Asia/Tbilisi	2:59:16 -	LMT	1880
    -			2:59:16	-	TBMT	1924 May  2 # Tbilisi Mean Time
    +Zone	Asia/Tbilisi	2:59:11 -	LMT	1880
    +			2:59:11	-	TBMT	1924 May  2 # Tbilisi Mean Time
     			3:00	-	TBIT	1957 Mar    # Tbilisi Time
    -			4:00 RussiaAsia TBI%sT	1991 Mar 31 2:00s
    +			4:00 RussiaAsia TBI%sT	1991 Mar 31  2:00s
     			3:00	1:00	TBIST	1991 Apr  9 # independence
    -			3:00 RussiaAsia GE%sT	1992 # Georgia Time
    +			3:00 RussiaAsia GE%sT	1992        # Georgia Time
     			3:00 E-EurAsia	GE%sT	1994 Sep lastSun
     			4:00 E-EurAsia	GE%sT	1996 Oct lastSun
     			4:00	1:00	GEST	1997 Mar lastSun
     			4:00 E-EurAsia	GE%sT	2004 Jun 27
    -			3:00 RussiaAsia	GE%sT	2005 Mar lastSun 2:00
    +			3:00 RussiaAsia	GE%sT	2005 Mar lastSun  2:00
     			4:00	-	GET
     
     # East Timor
     
     # See Indonesia for the 1945 transition.
     
    -# From Joao Carrascalao, brother of the former governor of East Timor, in
    -# 
    +# From João Carrascalão, brother of the former governor of East Timor, in
     # East Timor may be late for its millennium
    -#  (1999-12-26/31):
    +#  (1999-12-26/31):
     # Portugal tried to change the time forward in 1974 because the sun
     # rises too early but the suggestion raised a lot of problems with the
     # Timorese and I still don't think it would work today because it
    @@ -766,25 +885,25 @@ Zone	Asia/Tbilisi	2:59:16 -	LMT	1880
     # We don't have any record of the above attempt.
     # Most likely our records are incomplete, but we have no better data.
     
    -# 
     # From Manoel de Almeida e Silva, Deputy Spokesman for the UN Secretary-General
    -# (2000-08-16):
    +# http://www.hri.org/news/world/undh/2000/00-08-16.undh.html
    +# (2000-08-16):
     # The Cabinet of the East Timor Transition Administration decided
     # today to advance East Timor's time by one hour.  The time change,
     # which will be permanent, with no seasonal adjustment, will happen at
     # midnight on Saturday, September 16.
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Asia/Dili	8:22:20 -	LMT	1912
    +Zone	Asia/Dili	8:22:20 -	LMT	1912 Jan  1
     			8:00	-	TLT	1942 Feb 21 23:00 # E Timor Time
     			9:00	-	JST	1945 Sep 23
     			9:00	-	TLT	1976 May  3
    -			8:00	-	WITA	2000 Sep 17 00:00
    +			8:00	-	WITA	2000 Sep 17  0:00
     			9:00	-	TLT
     
     # India
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Asia/Kolkata	5:53:28 -	LMT	1880	# Kolkata
    +Zone	Asia/Kolkata	5:53:28 -	LMT	1880        # Kolkata
     			5:53:20	-	HMT	1941 Oct    # Howrah Mean Time?
     			6:30	-	BURT	1942 May 15 # Burma Time
     			5:30	-	IST	1942 Sep
    @@ -798,7 +917,7 @@ Zone	Asia/Kolkata	5:53:28 -	LMT	1880	# Kolkata
     # Indonesia
     #
     # From Gwillim Law (2001-05-28), overriding Shanks & Pottenger:
    -# 
    +# http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime
     # says that Indonesia's time zones changed on 1988-01-01.  Looking at some
     # time zone maps, I think that must refer to Western Borneo (Kalimantan Barat
     # and Kalimantan Tengah) switching from UTC+8 to UTC+7.
    @@ -810,7 +929,7 @@ Zone	Asia/Kolkata	5:53:28 -	LMT	1880	# Kolkata
     # other formal surrender ceremonies were September 9, 11, and 13, plus
     # September 12 for the regional surrender to Mountbatten in Singapore.
     # These would be the earliest possible times for a change.
    -# Regimes horaires pour le monde entier, by Henri Le Corre, (Editions
    +# Régimes horaires pour le monde entier, by Henri Le Corre, (Éditions
     # Traditionnelles, 1987, Paris) says that Java and Madura switched
     # from JST to UTC+07:30 on 1945-09-23, and gives 1944-09-01 for Jayapura
     # (Hollandia).  For now, assume all Indonesian locations other than Jayapura
    @@ -835,7 +954,7 @@ Zone Asia/Jakarta	7:07:12 -	LMT	1867 Aug 10
     # Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
     # but this must be a typo.
     			7:07:12	-	BMT	1923 Dec 31 23:47:12 # Batavia
    -			7:20	-	JAVT	1932 Nov	 # Java Time
    +			7:20	-	JAVT	1932 Nov    # Java Time
     			7:30	-	WIB	1942 Mar 23
     			9:00	-	JST	1945 Sep 23
     			7:30	-	WIB	1948 May
    @@ -861,7 +980,7 @@ Zone Asia/Makassar	7:57:36 -	LMT	1920
     # Maluku Islands, West Papua, Papua
     Zone Asia/Jayapura	9:22:48 -	LMT	1932 Nov
     			9:00	-	WIT	1944 Sep  1
    -			9:30	-	CST	1964
    +			9:30	-	ACST	1964
     			9:00	-	WIT
     
     # Iran
    @@ -927,7 +1046,7 @@ Zone Asia/Jayapura	9:22:48 -	LMT	1932 Nov
     # Several of my users have reported that Iran will not observe DST anymore:
     # http://www.irna.ir/en/news/view/line-17/0603193812164948.htm
     #
    -# From Reuters (2007-09-16), with a heads-up from Jesper Norgaard Welen:
    +# From Reuters (2007-09-16), with a heads-up from Jesper Nørgaard Welen:
     # ... the Guardian Council ... approved a law on Sunday to re-introduce
     # daylight saving time ...
     # http://uk.reuters.com/article/oilRpt/idUKBLA65048420070916
    @@ -993,7 +1112,7 @@ Rule	Iran	2036	2037	-	Mar	21	0:00	1:00	D
     Rule	Iran	2036	2037	-	Sep	21	0:00	0	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Asia/Tehran	3:25:44	-	LMT	1916
    -			3:25:44	-	TMT	1946	# Tehran Mean Time
    +			3:25:44	-	TMT	1946     # Tehran Mean Time
     			3:30	-	IRST	1977 Nov
     			4:00	Iran	IR%sT	1979
     			3:30	Iran	IR%sT
    @@ -1018,17 +1137,11 @@ Zone	Asia/Tehran	3:25:44	-	LMT	1916
     # From Steffen Thorsen (2008-03-10):
     # The cabinet in Iraq abolished DST last week, according to the following
     # news sources (in Arabic):
    -# 
     # http://www.aljeeran.net/wesima_articles/news-20080305-98602.html
    -# 
    -# 
     # http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10
    -# 
     #
     # We have published a short article in English about the change:
    -# 
     # http://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html
    -# 
     
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
     Rule	Iraq	1982	only	-	May	1	0:00	1:00	D
    @@ -1037,14 +1150,14 @@ Rule	Iraq	1983	only	-	Mar	31	0:00	1:00	D
     Rule	Iraq	1984	1985	-	Apr	1	0:00	1:00	D
     Rule	Iraq	1985	1990	-	Sep	lastSun	1:00s	0	S
     Rule	Iraq	1986	1990	-	Mar	lastSun	1:00s	1:00	D
    -# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the `:01' is a typo.
    +# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the ':01' is a typo.
     # Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this.
     #
     Rule	Iraq	1991	2007	-	Apr	 1	3:00s	1:00	D
     Rule	Iraq	1991	2007	-	Oct	 1	3:00s	0	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Asia/Baghdad	2:57:40	-	LMT	1890
    -			2:57:36	-	BMT	1918	    # Baghdad Mean Time?
    +			2:57:36	-	BMT	1918     # Baghdad Mean Time?
     			3:00	-	AST	1982 May
     			3:00	Iraq	A%sT
     
    @@ -1272,7 +1385,7 @@ Rule	Zion	2013	max	-	Oct	lastSun	2:00	0	S
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Asia/Jerusalem	2:20:54 -	LMT	1880
    -			2:20:40	-	JMT	1918	# Jerusalem Mean Time?
    +			2:20:40	-	JMT	1918 # Jerusalem Mean Time?
     			2:00	Zion	I%sT
     
     
    @@ -1281,15 +1394,15 @@ Zone	Asia/Jerusalem	2:20:54 -	LMT	1880
     
     # Japan
     
    -# `9:00' and `JST' is from Guy Harris.
    +# '9:00' and 'JST' is from Guy Harris.
     
     # From Paul Eggert (1995-03-06):
     # Today's _Asahi Evening News_ (page 4) reports that Japan had
    -# daylight saving between 1948 and 1951, but ``the system was discontinued
    -# because the public believed it would lead to longer working hours.''
    +# daylight saving between 1948 and 1951, but "the system was discontinued
    +# because the public believed it would lead to longer working hours."
     
    -# From Mayumi Negishi in the 2005-08-10 Japan Times
    -# :
    +# From Mayumi Negishi in the 2005-08-10 Japan Times:
    +# http://www.japantimes.co.jp/cgi-bin/getarticle.pl5?nn20050810f2.htm
     # Occupation authorities imposed daylight-saving time on Japan on
     # [1948-05-01]....  But lack of prior debate and the execution of
     # daylight-saving time just three days after the bill was passed generated
    @@ -1313,7 +1426,8 @@ Rule	Japan	1950	1951	-	May	Sun>=1	2:00	1:00	D
     
     # From Hideyuki Suzuki (1998-11-09):
     # 'Tokyo' usually stands for the former location of Tokyo Astronomical
    -# Observatory: E 139 44' 40".90 (9h 18m 58s.727), N 35 39' 16".0.
    +# Observatory: 139 degrees 44' 40.90" E (9h 18m 58.727s),
    +# 35 degrees 39' 16.0" N.
     # This data is from 'Rika Nenpyou (Chronological Scientific Tables) 1996'
     # edited by National Astronomical Observatory of Japan....
     # JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST).
    @@ -1321,10 +1435,10 @@ Rule	Japan	1950	1951	-	May	Sun>=1	2:00	1:00	D
     
     # From Hideyuki Suzuki (1998-11-16):
     # The ordinance No. 51 (1886) established "standard time" in Japan,
    -# which stands for the time on E 135 degree.
    +# which stands for the time on 135 degrees E.
     # In the ordinance No. 167 (1895), "standard time" was renamed to "central
     # standard time".  And the same ordinance also established "western standard
    -# time", which stands for the time on E 120 degree....  But "western standard
    +# time", which stands for the time on 120 degrees E....  But "western standard
     # time" was abolished in the ordinance No. 529 (1937).  In the ordinance No.
     # 167, there is no mention regarding for what place western standard time is
     # standard....
    @@ -1332,27 +1446,33 @@ Rule	Japan	1950	1951	-	May	Sun>=1	2:00	1:00	D
     # I wrote "ordinance" above, but I don't know how to translate.
     # In Japanese it's "chokurei", which means ordinance from emperor.
     
    -# Shanks & Pottenger claim JST in use since 1896, and that a few
    -# places (e.g. Ishigaki) use +0800; go with Suzuki.  Guess that all
    -# ordinances took effect on Jan 1.
    +# From Yu-Cheng Chuang (2013-07-12):
    +# ...the Meiji Emperor announced Ordinance No. 167 of Meiji Year 28 "The clause
    +# about standard time" ... The adoption began from Jan 1, 1896.
    +# http://ja.wikisource.org/wiki/標準時ニ關スル件_(公布時)
    +#
    +# ...the Showa Emperor announced Ordinance No. 529 of Showa Year 12 ... which
    +# means the whole Japan territory, including later occupations, adopt Japan
    +# Central Time (UTC+9). The adoption began on Oct 1, 1937.
    +# http://ja.wikisource.org/wiki/明治二十八年勅令第百六十七號標準時ニ關スル件中改正ノ件
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Asia/Tokyo	9:18:59	-	LMT	1887 Dec 31 15:00u
    -			9:00	-	JST	1896
    -			9:00	-	CJT	1938
    +			9:00	-	JST	1896 Jan  1
    +			9:00	-	JCST	1937 Oct  1
     			9:00	Japan	J%sT
     # Since 1938, all Japanese possessions have been like Asia/Tokyo.
     
     # Jordan
     #
    -# From 
    -# Jordan Week (1999-07-01)  via Steffen Thorsen (1999-09-09):
    +# From 
    +# Jordan Week (1999-07-01) via Steffen Thorsen (1999-09-09):
     # Clocks in Jordan were forwarded one hour on Wednesday at midnight,
     # in accordance with the government's decision to implement summer time
     # all year round.
     #
    -# From 
    -# Jordan Week (1999-09-30)  via Steffen Thorsen (1999-11-09):
    +# From 
    +# Jordan Week (1999-09-30) via Steffen Thorsen (1999-11-09):
     # Winter time starts today Thursday, 30 September. Clocks will be turned back
     # by one hour.  This is the latest government decision and it's final!
     # The decision was taken because of the increase in working hours in
    @@ -1372,9 +1492,7 @@ Zone	Asia/Tokyo	9:18:59	-	LMT	1887 Dec 31 15:00u
     
     # From Steffen Thorsen (2009-04-02):
     # This single one might be good enough, (2009-03-24, Arabic):
    -# 
     # http://petra.gov.jo/Artical.aspx?Lng=2&Section=8&Artical=95279
    -# 
     #
     # Google's translation:
     #
    @@ -1465,9 +1583,8 @@ Zone	Asia/Amman	2:23:44 -	LMT	1931
     # - Qyzylorda switched from +5:00 to +6:00 on 1992-01-19 02:00.
     # - Oral switched from +5:00 to +4:00 in spring 1989.
     
    -# 
    -# From Kazakhstan Embassy's News Bulletin #11 (2005-03-21):
    -# 
    +# From Kazakhstan Embassy's News Bulletin #11
    +#  (2005-03-21):
     # The Government of Kazakhstan passed a resolution March 15 abolishing
     # daylight saving time citing lack of economic benefits and health
     # complications coupled with a decrease in productivity.
    @@ -1500,10 +1617,10 @@ Zone	Asia/Qyzylorda	4:21:52 -	LMT	1924 May  2
     			6:00	-	KIZT	1982 Apr  1
     			5:00 RussiaAsia	KIZ%sT	1991
     			5:00	-	KIZT	1991 Dec 16 # independence
    -			5:00	-	QYZT	1992 Jan 19 2:00
    +			5:00	-	QYZT	1992 Jan 19  2:00
     			6:00 RussiaAsia	QYZ%sT	2005 Mar 15
     			6:00	-	QYZT
    -# Aqtobe (aka Aktobe, formerly Akt'ubinsk)
    +# Aqtobe (aka Aktobe, formerly Aktyubinsk)
     Zone	Asia/Aqtobe	3:48:40	-	LMT	1924 May  2
     			4:00	-	AKTT	1930 Jun 21 # Aktyubinsk Time
     			5:00	-	AKTT	1981 Apr  1
    @@ -1523,7 +1640,7 @@ Zone	Asia/Aqtau	3:21:04	-	LMT	1924 May  2
     			6:00	-	SHET	1982 Apr  1
     			5:00 RussiaAsia	SHE%sT	1991
     			5:00	-	SHET	1991 Dec 16 # independence
    -			5:00 RussiaAsia	AQT%sT	1995 Mar lastSun 2:00 # Aqtau Time
    +			5:00 RussiaAsia	AQT%sT	1995 Mar lastSun  2:00 # Aqtau Time
     			4:00 RussiaAsia	AQT%sT	2005 Mar 15
     			5:00	-	AQTT
     # West Kazakhstan
    @@ -1532,7 +1649,7 @@ Zone	Asia/Oral	3:25:24	-	LMT	1924 May  2 # or Ural'sk
     			5:00	-	URAT	1981 Apr  1
     			5:00	1:00	URAST	1981 Oct  1
     			6:00	-	URAT	1982 Apr  1
    -			5:00 RussiaAsia	URA%sT	1989 Mar 26 2:00
    +			5:00 RussiaAsia	URA%sT	1989 Mar 26  2:00
     			4:00 RussiaAsia	URA%sT	1991
     			4:00	-	URAT	1991 Dec 16 # independence
     			4:00 RussiaAsia	ORA%sT	2005 Mar 15 # Oral Time
    @@ -1543,7 +1660,7 @@ Zone	Asia/Oral	3:25:24	-	LMT	1924 May  2 # or Ural'sk
     
     # From Paul Eggert (2005-08-15):
     # According to an article dated today in the Kyrgyzstan Development Gateway
    -# 
    +# http://eng.gateway.kg/cgi-bin/page.pl?id=1&story_name=doc9979.shtml
     # Kyrgyzstan is canceling the daylight saving time system.  I take the article
     # to mean that they will leave their clocks at 6 hours ahead of UTC.
     # From Malik Abdugaliev (2005-09-21):
    @@ -1558,17 +1675,17 @@ Rule	Kyrgyz	1997	2004	-	Oct	lastSun	2:30	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Asia/Bishkek	4:58:24 -	LMT	1924 May  2
     			5:00	-	FRUT	1930 Jun 21 # Frunze Time
    -			6:00 RussiaAsia FRU%sT	1991 Mar 31 2:00s
    -			5:00	1:00	FRUST	1991 Aug 31 2:00 # independence
    -			5:00	Kyrgyz	KG%sT	2005 Aug 12    # Kyrgyzstan Time
    +			6:00 RussiaAsia FRU%sT	1991 Mar 31  2:00s
    +			5:00	1:00	FRUST	1991 Aug 31  2:00 # independence
    +			5:00	Kyrgyz	KG%sT	2005 Aug 12 # Kyrgyzstan Time
     			6:00	-	KGT
     
     ###############################################################################
     
     # Korea (North and South)
     
    -# From Annie I. Bang (2006-07-10) in
    -# :
    +# From Annie I. Bang (2006-07-10):
    +# http://www.koreaherald.co.kr/SITE/data/html_dir/2006/07/10/200607100012.asp
     # The Ministry of Commerce, Industry and Energy has already
     # commissioned a research project [to reintroduce DST] and has said
     # the system may begin as early as 2008....  Korea ran a daylight
    @@ -1581,19 +1698,29 @@ Rule	ROK	1960	only	-	Sep	13	0:00	0	S
     Rule	ROK	1987	1988	-	May	Sun>=8	0:00	1:00	D
     Rule	ROK	1987	1988	-	Oct	Sun>=8	0:00	0	S
     
    +# From Paul Eggert (2014-07-01):
    +# The following entries are from Shanks & Pottenger, except that I
    +# guessed that time zone abbreviations through 1945 followed the same
    +# rules as discussed under Taiwan, with nominal switches from JST to KST
    +# when the respective cities were taken over by the Allies after WWII.
    +
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Asia/Seoul	8:27:52	-	LMT	1890
     			8:30	-	KST	1904 Dec
    -			9:00	-	KST	1928
    +			9:00	-	JCST	1928
     			8:30	-	KST	1932
    +			9:00	-	JCST	1937 Oct  1
    +			9:00	-	JST	1945 Sep  8
     			9:00	-	KST	1954 Mar 21
     			8:00	ROK	K%sT	1961 Aug 10
     			8:30	-	KST	1968 Oct
     			9:00	ROK	K%sT
     Zone	Asia/Pyongyang	8:23:00 -	LMT	1890
     			8:30	-	KST	1904 Dec
    -			9:00	-	KST	1928
    +			9:00	-	JCST	1928
     			8:30	-	KST	1932
    +			9:00	-	JCST	1937 Oct  1
    +			9:00	-	JST	1945 Aug 24
     			9:00	-	KST	1954 Mar 21
     			8:00	-	KST	1961 Aug 10
     			9:00	-	KST
    @@ -1602,21 +1729,13 @@ Zone	Asia/Pyongyang	8:23:00 -	LMT	1890
     
     # Kuwait
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -# From the Arab Times (2007-03-14):
    -# The Civil Service Commission (CSC) has approved a proposal forwarded
    -# by MP Ahmad Baqer on implementing the daylight saving time (DST) in
    -# Kuwait starting from April until the end of Sept this year, reports Al-Anba.
    -# .
    -# From Paul Eggert (2007-03-29):
    -# We don't know the details, or whether the approval means it'll happen,
    -# so for now we assume no DST.
     Zone	Asia/Kuwait	3:11:56 -	LMT	1950
     			3:00	-	AST
     
     # Laos
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Asia/Vientiane	6:50:24 -	LMT	1906 Jun  9 # or Viangchan
    -			7:06:20	-	SMT	1911 Mar 11 0:01 # Saigon MT?
    +Zone	Asia/Vientiane	6:50:24 -	LMT	1906 Jun  9       # or Viangchan
    +			7:06:20	-	SMT	1911 Mar 11  0:01 # Saigon MT?
     			7:00	-	ICT	1912 May
     			8:00	-	ICT	1931 May
     			7:00	-	ICT
    @@ -1657,8 +1776,8 @@ Rule	NBorneo	1935	1941	-	Sep	14	0:00	0:20	TS # one-Third Summer
     Rule	NBorneo	1935	1941	-	Dec	14	0:00	0	-
     #
     # peninsular Malaysia
    -# The data here are taken from Mok Ly Yng (2003-10-30)
    -# .
    +# taken from Mok Ly Yng (2003-10-30)
    +# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Asia/Kuala_Lumpur	6:46:46 -	LMT	1901 Jan  1
     			6:55:25	-	SMT	1905 Jun  1 # Singapore M.T.
    @@ -1670,12 +1789,12 @@ Zone Asia/Kuala_Lumpur	6:46:46 -	LMT	1901 Jan  1
     			7:30	-	MALT	1982 Jan  1
     			8:00	-	MYT	# Malaysia Time
     # Sabah & Sarawak
    -# From Paul Eggert (2006-03-22):
    -# The data here are mostly from Shanks & Pottenger, but the 1942, 1945 and 1982
    -# transition dates are from Mok Ly Yng.
    +# From Paul Eggert (2014-08-12):
    +# The data entries here are mostly from Shanks & Pottenger, but the 1942, 1945
    +# and 1982 transition dates are from Mok Ly Yng.
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Asia/Kuching	7:21:20	-	LMT	1926 Mar
    -			7:30	-	BORT	1933	# Borneo Time
    +			7:30	-	BORT	1933        # Borneo Time
     			8:00	NBorneo	BOR%sT	1942 Feb 16
     			9:00	-	JST	1945 Sep 12
     			8:00	-	BORT	1982 Jan  1
    @@ -1683,22 +1802,21 @@ Zone Asia/Kuching	7:21:20	-	LMT	1926 Mar
     
     # Maldives
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Indian/Maldives	4:54:00 -	LMT	1880	# Male
    -			4:54:00	-	MMT	1960	# Male Mean Time
    -			5:00	-	MVT		# Maldives Time
    +Zone	Indian/Maldives	4:54:00 -	LMT	1880 # Male
    +			4:54:00	-	MMT	1960 # Male Mean Time
    +			5:00	-	MVT	# Maldives Time
     
     # Mongolia
     
     # Shanks & Pottenger say that Mongolia has three time zones, but
    -# usno1995 and the CIA map Standard Time Zones of the World (2005-03)
    -# both say that it has just one.
    +# The USNO (1995-12-21) and the CIA map Standard Time Zones of the World
    +# (2005-03) both say that it has just one.
     
     # From Oscar van Vlijmen (1999-12-11):
    -# 
     # General Information Mongolia
    -#  (1999-09)
    +#  (1999-09)
     # "Time: Mongolia has two time zones. Three westernmost provinces of
    -# Bayan-Ulgii, Uvs, and Hovd are one hour earlier than the capital city, and
    +# Bayan-Ölgii, Uvs, and Hovd are one hour earlier than the capital city, and
     # the rest of the country follows the Ulaanbaatar time, which is UTC/GMT plus
     # eight hours."
     
    @@ -1709,7 +1827,7 @@ Zone	Indian/Maldives	4:54:00 -	LMT	1880	# Male
     # of implementation may have been different....
     # Some maps in the past have indicated that there was an additional time
     # zone in the eastern part of Mongolia, including the provinces of Dornod,
    -# Suhbaatar, and possibly Khentij.
    +# Sükhbaatar, and possibly Khentii.
     
     # From Paul Eggert (1999-12-15):
     # Naming and spelling is tricky in Mongolia.
    @@ -1723,10 +1841,10 @@ Zone	Indian/Maldives	4:54:00 -	LMT	1880	# Male
     # (adopted DST on 2001-04-27 02:00 local time, ending 2001-09-28),
     # there are three time zones.
     #
    -# Provinces [at 7:00]: Bayan-ulgii, Uvs, Khovd, Zavkhan, Govi-Altai
    -# Provinces [at 8:00]: Khovsgol, Bulgan, Arkhangai, Khentii, Tov,
    -#	Bayankhongor, Ovorkhangai, Dundgovi, Dornogovi, Omnogovi
    -# Provinces [at 9:00]: Dornod, Sukhbaatar
    +# Provinces [at 7:00]: Bayan-Ölgii, Uvs, Khovd, Zavkhan, Govi-Altai
    +# Provinces [at 8:00]: Khövsgöl, Bulgan, Arkhangai, Khentii, Töv,
    +#	Bayankhongor, Övörkhangai, Dundgovi, Dornogovi, Ömnögovi
    +# Provinces [at 9:00]: Dornod, Sükhbaatar
     #
     # [The province of Selenge is omitted from the above lists.]
     
    @@ -1743,16 +1861,16 @@ Zone	Indian/Maldives	4:54:00 -	LMT	1880	# Male
     # We have wildly conflicting information about Mongolia's time zones.
     # Bill Bonnet (2005-05-19) reports that the US Embassy in Ulaanbaatar says
     # there is only one time zone and that DST is observed, citing Microsoft
    -# Windows XP as the source.  Risto Nykanen (2005-05-16) reports that
    +# Windows XP as the source.  Risto Nykänen (2005-05-16) reports that
     # travelmongolia.org says there are two time zones (UTC+7, UTC+8) with no DST.
     # Oscar van Vlijmen (2005-05-20) reports that the Mongolian Embassy in
     # Washington, DC says there are two time zones, with DST observed.
     # He also found
    -# 
    +# http://ubpost.mongolnews.mn/index.php?subaction=showcomments&id=1111634894&archive=&start_from=&ucat=1&
     # which also says that there is DST, and which has a comment by "Toddius"
     # (2005-03-31 06:05 +0700) saying "Mongolia actually has 3.5 time zones.
     # The West (OLGII) is +7 GMT, most of the country is ULAT is +8 GMT
    -# and some Eastern provinces are +9 GMT but Sukhbaatar Aimag is SUHK +8.5 GMT.
    +# and some Eastern provinces are +9 GMT but Sükhbaatar Aimag is SUHK +8.5 GMT.
     # The SUKH timezone is new this year, it is one of the few things the
     # parliament passed during the tumultuous winter session."
     # For now, let's ignore this information, until we have more confirmation.
    @@ -1768,29 +1886,23 @@ Zone	Indian/Maldives	4:54:00 -	LMT	1880	# Male
     # +08:00 instead. Different sources appear to disagree with the tz
     # database on this, e.g.:
     #
    -# 
     # http://www.timeanddate.com/worldclock/city.html?n=1026
    -# 
    -# 
     # http://www.worldtimeserver.com/current_time_in_MN.aspx
    -# 
     #
     # both say GMT+08:00.
     
     # From Steffen Thorsen (2008-03-31):
     # eznis airways, which operates several domestic flights, has a flight
     # schedule here:
    -# 
     # http://www.eznis.com/Container.jsp?id=112
    -# 
     # (click the English flag for English)
     #
    -# There it appears that flights between Choibalsan and Ulaanbatar arrive
    +# There it appears that flights between Choibalsan and Ulaanbaatar arrive
     # about 1:35 - 1:50 hours later in local clock time, no matter the
    -# direction, while Ulaanbaatar-Khvod takes 2 hours in the Eastern
    -# direction and 3:35 back, which indicates that Ulaanbatar and Khvod are
    +# direction, while Ulaanbaatar-Khovd takes 2 hours in the Eastern
    +# direction and 3:35 back, which indicates that Ulaanbaatar and Khovd are
     # in different time zones (like we know about), while Choibalsan and
    -# Ulaanbatar are in the same time zone (correction needed).
    +# Ulaanbaatar are in the same time zone (correction needed).
     
     # From Arthur David Olson (2008-05-19):
     # Assume that Choibalsan is indeed offset by 8:00.
    @@ -1806,7 +1918,7 @@ Rule	Mongol	1983	only	-	Oct	1	0:00	0	-
     # (1996-09) says 1996-10-25.  Go with Shanks & Pottenger through 1998.
     #
     # Shanks & Pottenger say that the Sept. 1984 through Sept. 1990 switches
    -# in Choibalsan (more precisely, in Dornod and Sukhbaatar) took place
    +# in Choibalsan (more precisely, in Dornod and Sükhbaatar) took place
     # at 02:00 standard time, not at 00:00 local time as in the rest of
     # the country.  That would be odd, and possibly is a result of their
     # correction of 02:00 (in the previous edition) not being done correctly
    @@ -1822,13 +1934,13 @@ Rule	Mongol	2002	2006	-	Mar	lastSat	2:00	1:00	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     # Hovd, a.k.a. Chovd, Dund-Us, Dzhargalant, Khovd, Jirgalanta
     Zone	Asia/Hovd	6:06:36 -	LMT	1905 Aug
    -			6:00	-	HOVT	1978	# Hovd Time
    +			6:00	-	HOVT	1978     # Hovd Time
     			7:00	Mongol	HOV%sT
     # Ulaanbaatar, a.k.a. Ulan Bataar, Ulan Bator, Urga
     Zone	Asia/Ulaanbaatar 7:07:32 -	LMT	1905 Aug
    -			7:00	-	ULAT	1978	# Ulaanbaatar Time
    +			7:00	-	ULAT	1978     # Ulaanbaatar Time
     			8:00	Mongol	ULA%sT
    -# Choibalsan, a.k.a. Bajan Tuemen, Bajan Tumen, Chojbalsan,
    +# Choibalsan, a.k.a. Bajan Tümen, Bajan Tumen, Chojbalsan,
     # Choybalsan, Sanbejse, Tchoibalsan
     Zone	Asia/Choibalsan	7:38:00 -	LMT	1905 Aug
     			7:00	-	ULAT	1978
    @@ -1860,7 +1972,7 @@ Zone	Asia/Muscat	3:54:24 -	LMT	1920
     # 00:01 was to make it clear which day it was on.
     
     # From Paul Eggert (2002-03-15):
    -# Jesper Norgaard found this URL:
    +# Jesper Nørgaard found this URL:
     # http://www.pak.gov.pk/public/news/app/app06_dec.htm
     # (dated 2001-12-06) which says that the Cabinet adopted a scheme "to
     # advance the clocks by one hour on the night between the first
    @@ -1892,43 +2004,30 @@ Zone	Asia/Muscat	3:54:24 -	LMT	1920
     # Here is an article that Pakistan plan to introduce Daylight Saving Time
     # on June 1, 2008 for 3 months.
     #
    -# "... The federal cabinet on Wednesday announced a new conservation plan to help
    -# reduce load shedding by approving the closure of commercial centres at 9pm and
    -# moving clocks forward by one hour for the next three months.
    -# ...."
    +# "... The federal cabinet on Wednesday announced a new conservation plan to
    +# help reduce load shedding by approving the closure of commercial centres at
    +# 9pm and moving clocks forward by one hour for the next three months. ...."
     #
    -# 
     # http://www.worldtimezone.net/dst_news/dst_news_pakistan01.html
    -# 
    -# OR
    -# 
     # http://www.dailytimes.com.pk/default.asp?page=2008%5C05%5C15%5Cstory_15-5-2008_pg1_4
    -# 
     
     # From Arthur David Olson (2008-05-19):
     # XXX--midnight transitions is a guess; 2008 only is a guess.
     
     # From Alexander Krivenyshev (2008-08-28):
     # Pakistan government has decided to keep the watches one-hour advanced
    -# for another 2 months--plan to return to Standard Time on October 31
    +# for another 2 months - plan to return to Standard Time on October 31
     # instead of August 31.
     #
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_pakistan02.html
    -# 
    -# OR
    -# 
     # http://dailymailnews.com/200808/28/news/dmbrn03.html
    -# 
     
     # From Alexander Krivenyshev (2009-04-08):
     # Based on previous media reports that "... proposed plan to
     # advance clocks by one hour from May 1 will cause disturbance
     # to the working schedules rather than bringing discipline in
     # official working."
    -# 
     # http://www.thenews.com.pk/daily_detail.asp?id=171280
    -# 
     #
     # recent news that instead of May 2009 - Pakistan plan to
     # introduce DST from April 15, 2009
    @@ -1936,15 +2035,8 @@ Zone	Asia/Muscat	3:54:24 -	LMT	1920
     # FYI: Associated Press Of Pakistan
     # April 08, 2009
     # Cabinet okays proposal to advance clocks by one hour from April 15
    -# 
     # http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=73043&Itemid=1
    -# 
    -#
    -# or
    -#
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_pakistan05.html
    -# 
     #
     # ....
     # The Federal Cabinet on Wednesday approved the proposal to
    @@ -1957,34 +2049,20 @@ Zone	Asia/Muscat	3:54:24 -	LMT	1920
     # clocks backward by one hour from October 1. A formal announcement to
     # this effect will be made after the Prime Minister grants approval in
     # this regard."
    -# 
     # http://www.thenews.com.pk/updates.asp?id=87168
    -# 
     
     # From Alexander Krivenyshev (2009-09-28):
     # According to Associated Press Of Pakistan, it is confirmed that
    -# Pakistan clocks across the country would be turned back by an hour from October
    -# 1, 2009.
    +# Pakistan clocks across the country would be turned back by an hour from
    +# October 1, 2009.
     #
     # "Clocks to go back one hour from 1 Oct"
    -# 
     # http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=86715&Itemid=2
    -# 
    -# or
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_pakistan07.htm
    -# 
    -
    -# From Steffen Thorsen (2009-09-29):
    -# Alexander Krivenyshev wrote:
    -# > According to Associated Press Of Pakistan, it is confirmed that
    -# > Pakistan clocks across the country would be turned back by an hour from October
    -# > 1, 2009.
     #
    +# From Steffen Thorsen (2009-09-29):
     # Now they seem to have changed their mind, November 1 is the new date:
    -# 
     # http://www.thenews.com.pk/top_story_detail.asp?Id=24742
    -# 
     # "The country's clocks will be reversed by one hour on November 1.
     # Officials of Federal Ministry for Interior told this to Geo News on
     # Monday."
    @@ -1996,11 +2074,9 @@ Zone	Asia/Muscat	3:54:24 -	LMT	1920
     #
     # We have confirmed this year's end date with both with the Ministry of
     # Water and Power and the Pakistan Electric Power Company:
    -# 
     # http://www.timeanddate.com/news/time/pakistan-ends-dst09.html
    -# 
     
    -# From Christoph Goehre (2009-10-01):
    +# From Christoph Göhre (2009-10-01):
     # [T]he German Consulate General in Karachi reported me today that Pakistan
     # will go back to standard time on 1st of November.
     
    @@ -2016,22 +2092,17 @@ Zone	Asia/Muscat	3:54:24 -	LMT	1920
     # Now, it seems that the decision to not observe DST in final:
     #
     # "Govt Withdraws Plan To Advance Clocks"
    -# 
     # http://www.apakistannews.com/govt-withdraws-plan-to-advance-clocks-172041
    -# 
     #
     # "People laud PM's announcement to end DST"
    -# 
     # http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2
    -# 
     
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
     Rule Pakistan	2002	only	-	Apr	Sun>=2	0:01	1:00	S
     Rule Pakistan	2002	only	-	Oct	Sun>=2	0:01	0	-
     Rule Pakistan	2008	only	-	Jun	1	0:00	1:00	S
    -Rule Pakistan	2008	only	-	Nov	1	0:00	0	-
    +Rule Pakistan	2008	2009	-	Nov	1	0:00	0	-
     Rule Pakistan	2009	only	-	Apr	15	0:00	1:00	S
    -Rule Pakistan	2009	only	-	Nov	1	0:00	0	-
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Asia/Karachi	4:28:12 -	LMT	1907
    @@ -2105,10 +2176,9 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
     # the PA has decided to implement DST in April.
     
     # From Paul Eggert (1999-09-20):
    -# Daoud Kuttab writes in
    -# 
    -# Holiday havoc
    -#  (Jerusalem Post, 1999-04-22) that
    +# Daoud Kuttab writes in Holiday havoc
    +# http://www.jpost.com/com/Archive/22.Apr.1999/Opinion/Article-2.html
    +# (Jerusalem Post, 1999-04-22) that
     # the Palestinian National Authority changed to DST on 1999-04-15.
     # I vaguely recall that they switch back in October (sorry, forgot the source).
     # For now, let's assume that the spring switch was at 24:00,
    @@ -2121,7 +2191,7 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
     # A user from Gaza reported that Gaza made the change early because of
     # the Ramadan.  Next year Ramadan will be even earlier, so I think
     # there is a good chance next year's end date will be around two weeks
    -# earlier--the same goes for Jordan.
    +# earlier - the same goes for Jordan.
     
     # From Steffen Thorsen (2006-08-17):
     # I was informed by a user in Bethlehem that in Bethlehem it started the
    @@ -2140,7 +2210,7 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
     # I guess it is likely that next year's date will be moved as well,
     # because of the Ramadan.
     
    -# From Jesper Norgaard Welen (2007-09-18):
    +# From Jesper Nørgaard Welen (2007-09-18):
     # According to Steffen Thorsen's web site the Gaza Strip and the rest of the
     # Palestinian territories left DST early on 13.th. of September at 2:00.
     
    @@ -2157,16 +2227,9 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
     # Gaza Strip (as Egypt) ended DST at midnight Thursday (Aug 28, 2008), while
     # the West Bank will end Daylight Saving Time at midnight Sunday (Aug 31, 2008).
     #
    -# 
     # http://www.guardian.co.uk/world/feedarticle/7759001
    -# 
    -# 
     # http://www.abcnews.go.com/International/wireStory?id=5676087
    -# 
    -# or
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_gazastrip01.html
    -# 
     
     # From Alexander Krivenyshev (2009-03-26):
     # According to the Palestine News Network (arabic.pnn.ps), Palestinian
    @@ -2174,24 +2237,17 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
     # 26 and continue until the night of 27 September 2009.
     #
     # (in Arabic)
    -# 
     # http://arabic.pnn.ps/index.php?option=com_content&task=view&id=50850
    -# 
     #
    -# or
     # (English translation)
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_westbank01.html
    -# 
     
     # From Steffen Thorsen (2009-08-31):
     # Palestine's Council of Ministers announced that they will revert back to
     # winter time on Friday, 2009-09-04.
     #
     # One news source:
    -# 
     # http://www.safa.ps/ara/?action=showdetail&seid=4158
    -# 
     # (Palestinian press agency, Arabic),
     # Google translate: "Decided that the Palestinian government in Ramallah
     # headed by Salam Fayyad, the start of work in time for the winter of
    @@ -2200,9 +2256,7 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
     #
     # We are not sure if Gaza will do the same, last year they had a different
     # end date, we will keep this page updated:
    -# 
     # http://www.timeanddate.com/news/time/westbank-gaza-dst-2009.html
    -# 
     
     # From Alexander Krivenyshev (2009-09-02):
     # Seems that Gaza Strip will go back to Winter Time same date as West Bank.
    @@ -2212,51 +2266,35 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
     #
     # "Winter time unite the West Bank and Gaza"
     # (from Palestinian National Authority):
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_gazastrip02.html
    -# 
     
     # From Alexander Krivenyshev (2010-03-19):
     # According to Voice of Palestine DST will last for 191 days, from March
     # 26, 2010 till "the last Sunday before the tenth day of Tishri
     # (October), each year" (October 03, 2010?)
     #
    -# 
     # http://palvoice.org/forums/showthread.php?t=245697
    -# 
     # (in Arabic)
    -# or
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_westbank03.html
    -# 
     
     # From Steffen Thorsen (2010-03-24):
     # ...Ma'an News Agency reports that Hamas cabinet has decided it will
     # start one day later, at 12:01am. Not sure if they really mean 12:01am or
     # noon though:
     #
    -# 
     # http://www.maannews.net/eng/ViewDetails.aspx?ID=271178
    -# 
     # (Ma'an News Agency)
     # "At 12:01am Friday, clocks in Israel and the West Bank will change to
     # 1:01am, while Gaza clocks will change at 12:01am Saturday morning."
     
     # From Steffen Thorsen (2010-08-11):
     # According to several sources, including
    -# 
     # http://www.maannews.net/eng/ViewDetails.aspx?ID=306795
    -# 
     # the clocks were set back one hour at 2010-08-11 00:00:00 local time in
     # Gaza and the West Bank.
     # Some more background info:
    -# 
     # http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html
    -# 
     
     # From Steffen Thorsen (2011-08-26):
     # Gaza and the West Bank did go back to standard time in the beginning of
    @@ -2264,13 +2302,9 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
     # 00:00 (so two periods of DST in 2011). The pause was because of
     # Ramadan.
     #
    -# 
     # http://www.maannews.net/eng/ViewDetails.aspx?ID=416217
    -# 
     # Additional info:
    -# 
     # http://www.timeanddate.com/news/time/palestine-dst-2011.html
    -# 
     
     # From Alexander Krivenyshev (2011-08-27):
     # According to the article in The Jerusalem Post:
    @@ -2280,14 +2314,9 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
     # The Hamas government said on Saturday that it won't observe summertime after
     # the Muslim feast of Id al-Fitr, which begins on Tuesday..."
     # ...
    -# 
     # http://www.jpost.com/MiddleEast/Article.aspx?id=235650
    -# 
    -# or
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_gazastrip05.html
    -# 
    -# The rules for Egypt are stolen from the `africa' file.
    +# The rules for Egypt are stolen from the 'africa' file.
     
     # From Steffen Thorsen (2011-09-30):
     # West Bank did end Daylight Saving Time this morning/midnight (2011-09-30
    @@ -2295,26 +2324,18 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
     # So West Bank and Gaza now have the same time again.
     #
     # Many sources, including:
    -# 
     # http://www.maannews.net/eng/ViewDetails.aspx?ID=424808
    -# 
     
     # From Steffen Thorsen (2012-03-26):
     # Palestinian news sources tell that both Gaza and West Bank will start DST
     # on Friday (Thursday midnight, 2012-03-29 24:00).
     # Some of many sources in Arabic:
    -# 
     # http://www.samanews.com/index.php?act=Show&id=122638
    -# 
     #
    -# 
     # http://safa.ps/details/news/74352/%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-%D8%A8%D8%A7%D9%84%D8%B6%D9%81%D8%A9-%D9%88%D8%BA%D8%B2%D8%A9-%D9%84%D9%8A%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D8%B9%D8%A9.html
    -# 
     #
     # Our brief summary:
    -# 
     # http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html
    -# 
     
     # From Steffen Thorsen (2013-03-26):
     # The following news sources tells that Palestine will "start daylight saving
    @@ -2374,10 +2395,10 @@ Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
     			2:00 EgyptAsia	EE%sT	1967 Jun  5
     			2:00	Zion	I%sT	1996
     			2:00	Jordan	EE%sT	1999
    -			2:00 Palestine	EE%sT	2008 Aug 29 0:00
    +			2:00 Palestine	EE%sT	2008 Aug 29  0:00
     			2:00	-	EET	2008 Sep
     			2:00 Palestine	EE%sT	2010
    -			2:00	-	EET	2010 Mar 27 0:01
    +			2:00	-	EET	2010 Mar 27  0:01
     			2:00 Palestine	EE%sT	2011 Aug  1
     			2:00	-	EET	2012
     			2:00 Palestine	EE%sT
    @@ -2393,25 +2414,27 @@ Zone	Asia/Hebron	2:20:23	-	LMT	1900 Oct
     # no information
     
     # Philippines
    -# On 1844-08-16, Narciso Claveria, governor-general of the
    +# On 1844-08-16, Narciso Clavería, governor-general of the
     # Philippines, issued a proclamation announcing that 1844-12-30 was to
    -# be immediately followed by 1845-01-01.  Robert H. van Gent has a
    -# transcript of the decree in .
    -# The rest of the data are from Shanks & Pottenger.
    +# be immediately followed by 1845-01-01; see R.H. van Gent's
    +# History of the International Date Line
    +# http://www.staff.science.uu.nl/~gent0113/idl/idl_philippines.htm
    +# The rest of the data entries are from Shanks & Pottenger.
     
    -# From Paul Eggert (2006-04-25):
    -# Tomorrow's Manila Standard reports that the Philippines Department of
    -# Trade and Industry is considering adopting DST this June when the
    -# rainy season begins.  See
    -# .
    -# For now, we'll ignore this, since it's not definite and we lack details.
    -#
    -# From Jesper Norgaard Welen (2006-04-26):
    +# From Jesper Nørgaard Welen (2006-04-26):
     # ... claims that Philippines had DST last time in 1990:
     # http://story.philippinetimes.com/p.x/ct/9/id/145be20cc6b121c0/cid/3e5bbccc730d258c/
     # [a story dated 2006-04-25 by Cris Larano of Dow Jones Newswires,
     # but no details]
     
    +# From Paul Eggert (2014-08-14):
    +# The following source says DST may be instituted November-January and again
    +# March-June, but this is not definite.  It also says DST was last proclaimed
    +# during the Ramos administration (1992-1998); but again, no details.
    +# Carcamo D. PNoy urged to declare use of daylight saving time.
    +# Philippine Star 2014-08-05
    +# http://www.philstar.com/headlines/2014/08/05/1354152/pnoy-urged-declare-use-daylight-saving-time
    +
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
     Rule	Phil	1936	only	-	Nov	1	0:00	1:00	S
     Rule	Phil	1937	only	-	Feb	1	0:00	0	-
    @@ -2428,18 +2451,39 @@ Zone	Asia/Manila	-15:56:00 -	LMT	1844 Dec 31
     
     # Qatar
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Asia/Qatar	3:26:08 -	LMT	1920	# Al Dawhah / Doha
    +Zone	Asia/Qatar	3:26:08 -	LMT	1920     # Al Dawhah / Doha
     			4:00	-	GST	1972 Jun
     			3:00	-	AST
     
     # Saudi Arabia
    +#
    +# From Paul Eggert (2014-07-15):
    +# Time in Saudi Arabia and other countries in the Arabian peninsula was not
    +# standardized until relatively recently; we don't know when, and possibly it
    +# has never been made official.  Richard P Hunt, in "Islam city yielding to
    +# modern times", New York Times (1961-04-09), p 20, wrote that only airlines
    +# observed standard time, and that people in Jeddah mostly observed quasi-solar
    +# time, doing so by setting their watches at sunrise to 6 o'clock (or to 12
    +# o'clock for "Arab" time).
    +#
    +# The TZ database cannot represent quasi-solar time; airline time is the best
    +# we can do.  The 1946 foreign air news digest of the U.S. Civil Aeronautics
    +# Board (OCLC 42299995) reported that the "... Arabian Government, inaugurated
    +# a weekly Dhahran-Cairo service, via the Saudi Arabian cities of Riyadh and
    +# Jidda, on March 14, 1947".  Shanks & Pottenger guessed 1950; go with the
    +# earlier date.
    +#
    +# Shanks & Pottenger also state that until 1968-05-01 Saudi Arabia had two
    +# time zones; the other zone, at UTC+4, was in the far eastern part of
    +# the country.  Ignore this, as it's before our 1970 cutoff.
    +#
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Asia/Riyadh	3:06:52 -	LMT	1950
    +Zone	Asia/Riyadh	3:06:52 -	LMT	1947 Mar 14
     			3:00	-	AST
     
     # Singapore
    -# The data here are taken from Mok Ly Yng (2003-10-30)
    -# .
    +# taken from Mok Ly Yng (2003-10-30)
    +# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Asia/Singapore	6:55:25 -	LMT	1901 Jan  1
     			6:55:25	-	SMT	1905 Jun  1 # Singapore M.T.
    @@ -2465,26 +2509,24 @@ Zone	Asia/Singapore	6:55:25 -	LMT	1901 Jan  1
     
     # From Paul Eggert (1996-09-03):
     # "Sri Lanka advances clock by an hour to avoid blackout"
    -# (www.virtual-pc.com/lankaweb/news/items/240596-2.html, 1996-05-24,
    +# (, 1996-05-24,
     # no longer available as of 1999-08-17)
    -# reported ``the country's standard time will be put forward by one hour at
    -# midnight Friday (1830 GMT) `in the light of the present power crisis'.''
    +# reported "the country's standard time will be put forward by one hour at
    +# midnight Friday (1830 GMT) 'in the light of the present power crisis'."
     #
     # From Dharmasiri Senanayake, Sri Lanka Media Minister (1996-10-24), as quoted
    -# by Shamindra in
    -# 
    -# Daily News - Hot News Section (1996-10-26)
    -# :
    +# by Shamindra in Daily News - Hot News Section
    +#  (1996-10-26):
     # With effect from 12.30 a.m. on 26th October 1996
     # Sri Lanka will be six (06) hours ahead of GMT.
     
    -# From Jesper Norgaard Welen (2006-04-14), quoting Sri Lanka News Online
    +# From Jesper Nørgaard Welen (2006-04-14), quoting Sri Lanka News Online
     #  (2006-04-13):
     # 0030 hrs on April 15, 2006 (midnight of April 14, 2006 +30 minutes)
     # at present, become 2400 hours of April 14, 2006 (midnight of April 14, 2006).
     
     # From Peter Apps and Ranga Sirila of Reuters (2006-04-12) in:
    -# 
    +# http://today.reuters.co.uk/news/newsArticle.aspx?type=scienceNews&storyID=2006-04-12T172228Z_01_COL295762_RTRIDST_0_SCIENCE-SRILANKA-TIME-DC.XML
     # [The Tamil Tigers] never accepted the original 1996 time change and simply
     # kept their clocks set five and a half hours ahead of Greenwich Mean
     # Time (GMT), in line with neighbor India.
    @@ -2498,7 +2540,7 @@ Zone	Asia/Singapore	6:55:25 -	LMT	1901 Jan  1
     # twice in 1996 and probably SL Government or its standardization
     # agencies never declared an abbreviation as a national standard.
     #
    -# I recollect before the recent change the government annoucemments
    +# I recollect before the recent change the government announcements
     # mentioning it as simply changing Sri Lanka Standard Time or Sri Lanka
     # Time and no mention was made about the abbreviation.
     #
    @@ -2508,7 +2550,7 @@ Zone	Asia/Singapore	6:55:25 -	LMT	1901 Jan  1
     # item....
     #
     # Within Sri Lanka I think LKT is well known among computer users and
    -# adminsitrators.  In my opinion SLT may not be a good choice because the
    +# administrators.  In my opinion SLT may not be a good choice because the
     # nation's largest telcom / internet operator Sri Lanka Telcom is well
     # known by that abbreviation - simply as SLT (there IP domains are
     # slt.lk and sltnet.lk).
    @@ -2523,13 +2565,13 @@ Zone	Asia/Singapore	6:55:25 -	LMT	1901 Jan  1
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Asia/Colombo	5:19:24 -	LMT	1880
    -			5:19:32	-	MMT	1906	# Moratuwa Mean Time
    +			5:19:32	-	MMT	1906        # Moratuwa Mean Time
     			5:30	-	IST	1942 Jan  5
     			5:30	0:30	IHST	1942 Sep
    -			5:30	1:00	IST	1945 Oct 16 2:00
    -			5:30	-	IST	1996 May 25 0:00
    -			6:30	-	LKT	1996 Oct 26 0:30
    -			6:00	-	LKT	2006 Apr 15 0:30
    +			5:30	1:00	IST	1945 Oct 16  2:00
    +			5:30	-	IST	1996 May 25  0:00
    +			6:30	-	LKT	1996 Oct 26  0:30
    +			6:00	-	LKT	2006 Apr 15  0:30
     			5:30	-	IST
     
     # Syria
    @@ -2580,7 +2622,7 @@ Rule	Syria	2006	only	-	Sep	22	0:00	0	-
     # Today the AP reported "Syria will switch to summertime at midnight Thursday."
     # http://www.iht.com/articles/ap/2007/03/29/africa/ME-GEN-Syria-Time-Change.php
     Rule	Syria	2007	only	-	Mar	lastFri	0:00	1:00	S
    -# From Jesper Norgard (2007-10-27):
    +# From Jesper Nørgaard (2007-10-27):
     # The sister center ICARDA of my work CIMMYT is confirming that Syria DST will
     # not take place 1st November at 0:00 o'clock but 1st November at 24:00 or
     # rather Midnight between Thursday and Friday. This does make more sense than
    @@ -2589,7 +2631,7 @@ Rule	Syria	2007	only	-	Mar	lastFri	0:00	1:00	S
     # it is implemented at midnight of the last workday before weekend...
     #
     # From Steffen Thorsen (2007-10-27):
    -# Jesper Norgaard Welen wrote:
    +# Jesper Nørgaard Welen wrote:
     #
     # > "Winter local time in Syria will be observed at midnight of Thursday 1
     # > November 2007, and the clock will be put back 1 hour."
    @@ -2605,8 +2647,7 @@ Rule	Syria	2007	only	-	Nov	 Fri>=1	0:00	0	-
     
     # From Stephen Colebourne (2008-03-17):
     # For everyone's info, I saw an IATA time zone change for [Syria] for
    -# this month (March 2008) in the last day or so...This is the data IATA
    -# are now using:
    +# this month (March 2008) in the last day or so....
     # Country     Time Standard   --- DST Start ---   --- DST End ---  DST
     # Name        Zone Variation   Time    Date        Time    Date
     # Variation
    @@ -2618,16 +2659,15 @@ Rule	Syria	2007	only	-	Nov	 Fri>=1	0:00	0	-
     # From Arthur David Olson (2008-03-17):
     # Here's a link to English-language coverage by the Syrian Arab News
     # Agency (SANA)...
    -# 
     # http://www.sana.sy/eng/21/2008/03/11/165173.htm
    -# ...which reads (in part) "The Cabinet approved the suggestion of the
    +# ...which reads (in part) "The Cabinet approved the suggestion of the
     # Ministry of Electricity to begin daylight savings time on Friday April
     # 4th, advancing clocks one hour ahead on midnight of Thursday April 3rd."
     # Since Syria is two hours east of UTC, the 2200 and 2100 transition times
     # shown above match up with midnight in Syria.
     
     # From Arthur David Olson (2008-03-18):
    -# My buest guess at a Syrian rule is "the Friday nearest April 1";
    +# My best guess at a Syrian rule is "the Friday nearest April 1";
     # coding that involves either using a "Mar Fri>=29" construct that old time zone
     # compilers can't handle  or having multiple Rules (a la Israel).
     # For now, use "Apr Fri>=1", and go with IATA on a uniform Sep 30 end.
    @@ -2640,37 +2680,27 @@ Rule	Syria	2007	only	-	Nov	 Fri>=1	0:00	0	-
     # winter time on 2008-11-01 at 00:00 local daylight time (delaying/setting
     # clocks back 60 minutes).
     #
    -# 
     # http://sana.sy/ara/2/2008/10/07/195459.htm
    -# 
     
     # From Steffen Thorsen (2009-03-19):
     # Syria will start DST on 2009-03-27 00:00 this year according to many sources,
     # two examples:
     #
    -# 
     # http://www.sana.sy/eng/21/2009/03/17/217563.htm
    -# 
     # (English, Syrian Arab News # Agency)
    -# 
     # http://thawra.alwehda.gov.sy/_View_news2.asp?FileName=94459258720090318012209
    -# 
     # (Arabic, gov-site)
     #
     # We have not found any sources saying anything about when DST ends this year.
     #
     # Our summary
    -# 
     # http://www.timeanddate.com/news/time/syria-dst-starts-march-27-2009.html
    -# 
     
     # From Steffen Thorsen (2009-10-27):
     # The Syrian Arab News Network on 2009-09-29 reported that Syria will
     # revert back to winter (standard) time on midnight between Thursday
     # 2009-10-29 and Friday 2009-10-30:
    -# 
     # http://www.sana.sy/ara/2/2009/09/29/247012.htm (Arabic)
    -# 
     
     # From Arthur David Olson (2009-10-28):
     # We'll see if future DST switching times turn out to be end of the last
    @@ -2681,23 +2711,17 @@ Rule	Syria	2007	only	-	Nov	 Fri>=1	0:00	0	-
     # The "Syrian News Station" reported on 2010-03-16 that the Council of
     # Ministers has decided that Syria will start DST on midnight Thursday
     # 2010-04-01: (midnight between Thursday and Friday):
    -# 
     # http://sns.sy/sns/?path=news/read/11421 (Arabic)
    -# 
     
     # From Steffen Thorsen (2012-03-26):
     # Today, Syria's government announced that they will start DST early on Friday
     # (00:00). This is a bit earlier than the past two years.
     #
     # From Syrian Arab News Agency, in Arabic:
    -# 
     # http://www.sana.sy/ara/2/2012/03/26/408215.htm
    -# 
     #
     # Our brief summary:
    -# 
     # http://www.timeanddate.com/news/time/syria-dst-2012.html
    -# 
     
     # From Arthur David Olson (2012-03-27):
     # Assume last Friday in March going forward XXX.
    @@ -2710,7 +2734,7 @@ Rule	Syria	2012	max	-	Mar	lastFri	0:00	1:00	S
     Rule	Syria	2009	max	-	Oct	lastFri	0:00	0	-
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Asia/Damascus	2:25:12 -	LMT	1920	# Dimashq
    +Zone	Asia/Damascus	2:25:12 -	LMT	1920 # Dimashq
     			2:00	Syria	EE%sT
     
     # Tajikistan
    @@ -2718,9 +2742,9 @@ Zone	Asia/Damascus	2:25:12 -	LMT	1920	# Dimashq
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Asia/Dushanbe	4:35:12 -	LMT	1924 May  2
     			5:00	-	DUST	1930 Jun 21 # Dushanbe Time
    -			6:00 RussiaAsia DUS%sT	1991 Mar 31 2:00s
    -			5:00	1:00	DUSST	1991 Sep  9 2:00s
    -			5:00	-	TJT		    # Tajikistan Time
    +			6:00 RussiaAsia DUS%sT	1991 Mar 31  2:00s
    +			5:00	1:00	DUSST	1991 Sep  9  2:00s
    +			5:00	-	TJT	# Tajikistan Time
     
     # Thailand
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    @@ -2733,9 +2757,9 @@ Zone	Asia/Bangkok	6:42:04	-	LMT	1880
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Asia/Ashgabat	3:53:32 -	LMT	1924 May  2 # or Ashkhabad
     			4:00	-	ASHT	1930 Jun 21 # Ashkhabad Time
    -			5:00 RussiaAsia	ASH%sT	1991 Mar 31 2:00
    +			5:00 RussiaAsia	ASH%sT	1991 Mar 31  2:00
     			4:00 RussiaAsia	ASH%sT	1991 Oct 27 # independence
    -			4:00 RussiaAsia	TM%sT	1992 Jan 19 2:00
    +			4:00 RussiaAsia	TM%sT	1992 Jan 19  2:00
     			5:00	-	TMT
     
     # United Arab Emirates
    @@ -2744,8 +2768,9 @@ Zone	Asia/Dubai	3:41:12 -	LMT	1920
     			4:00	-	GST
     
     # Uzbekistan
    +# Byalokoz 1919 says Uzbekistan was 4:27:53.
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Asia/Samarkand	4:27:12 -	LMT	1924 May  2
    +Zone	Asia/Samarkand	4:27:53 -	LMT	1924 May  2
     			4:00	-	SAMT	1930 Jun 21 # Samarkand Time
     			5:00	-	SAMT	1981 Apr  1
     			5:00	1:00	SAMST	1981 Oct  1
    @@ -2753,9 +2778,10 @@ Zone	Asia/Samarkand	4:27:12 -	LMT	1924 May  2
     			5:00 RussiaAsia	SAM%sT	1991 Sep  1 # independence
     			5:00 RussiaAsia	UZ%sT	1992
     			5:00	-	UZT
    -Zone	Asia/Tashkent	4:37:12 -	LMT	1924 May  2
    +# Milne says Tashkent was 4:37:10.8; round to nearest.
    +Zone	Asia/Tashkent	4:37:11 -	LMT	1924 May  2
     			5:00	-	TAST	1930 Jun 21 # Tashkent Time
    -			6:00 RussiaAsia	TAS%sT	1991 Mar 31 2:00
    +			6:00 RussiaAsia	TAS%sT	1991 Mar 31  2:00
     			5:00 RussiaAsia	TAS%sT	1991 Sep  1 # independence
     			5:00 RussiaAsia	UZ%sT	1992
     			5:00	-	UZT
    @@ -2769,13 +2795,13 @@ Zone	Asia/Tashkent	4:37:12 -	LMT	1924 May  2
     # and Pottenger.
     
     # From Arthur David Olson (2008-03-18):
    -# The English-language name of Vietnam's most populous city is "Ho Chi Min City";
    -# we use Ho_Chi_Minh below to avoid a name of more than 14 characters.
    +# The English-language name of Vietnam's most populous city is "Ho Chi Minh
    +# City"; use Ho_Chi_Minh below to avoid a name of more than 14 characters.
     
     # From Shanks & Pottenger:
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Asia/Ho_Chi_Minh	7:06:40 -	LMT	1906 Jun  9
    -			7:06:20	-	SMT	1911 Mar 11 0:01 # Saigon MT?
    +			7:06:20	-	SMT	1911 Mar 11  0:01 # Saigon MT?
     			7:00	-	ICT	1912 May
     			8:00	-	ICT	1931 May
     			7:00	-	ICT
    diff --git a/jdk/test/sun/util/calendar/zi/tzdata/australasia b/jdk/test/sun/util/calendar/zi/tzdata/australasia
    index 94c9adb912c..52d32904178 100644
    --- a/jdk/test/sun/util/calendar/zi/tzdata/australasia
    +++ b/jdk/test/sun/util/calendar/zi/tzdata/australasia
    @@ -21,7 +21,6 @@
     # or visit www.oracle.com if you need additional information or have any
     # questions.
     #
    -# 
     # This file is in the public domain, so clarified as of
     # 2009-05-17 by Arthur David Olson.
     
    @@ -36,13 +35,13 @@
     # Please see the notes below for the controversy about "EST" versus "AEST" etc.
     
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -Rule	Aus	1917	only	-	Jan	 1	0:01	1:00	-
    -Rule	Aus	1917	only	-	Mar	25	2:00	0	-
    -Rule	Aus	1942	only	-	Jan	 1	2:00	1:00	-
    -Rule	Aus	1942	only	-	Mar	29	2:00	0	-
    -Rule	Aus	1942	only	-	Sep	27	2:00	1:00	-
    -Rule	Aus	1943	1944	-	Mar	lastSun	2:00	0	-
    -Rule	Aus	1943	only	-	Oct	 3	2:00	1:00	-
    +Rule	Aus	1917	only	-	Jan	 1	0:01	1:00	D
    +Rule	Aus	1917	only	-	Mar	25	2:00	0	S
    +Rule	Aus	1942	only	-	Jan	 1	2:00	1:00	D
    +Rule	Aus	1942	only	-	Mar	29	2:00	0	S
    +Rule	Aus	1942	only	-	Sep	27	2:00	1:00	D
    +Rule	Aus	1943	1944	-	Mar	lastSun	2:00	0	S
    +Rule	Aus	1943	only	-	Oct	 3	2:00	1:00	D
     # Go with Whitman and the Australian National Standards Commission, which
     # says W Australia didn't use DST in 1943/1944.  Ignore Whitman's claim that
     # 1944/1945 was just like 1943/1944.
    @@ -50,26 +49,26 @@ Rule	Aus	1943	only	-	Oct	 3	2:00	1:00	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     # Northern Territory
     Zone Australia/Darwin	 8:43:20 -	LMT	1895 Feb
    -			 9:00	-	CST	1899 May
    -			 9:30	Aus	CST
    +			 9:00	-	ACST	1899 May
    +			 9:30	Aus	AC%sT
     # Western Australia
     #
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -Rule	AW	1974	only	-	Oct	lastSun	2:00s	1:00	-
    -Rule	AW	1975	only	-	Mar	Sun>=1	2:00s	0	-
    -Rule	AW	1983	only	-	Oct	lastSun	2:00s	1:00	-
    -Rule	AW	1984	only	-	Mar	Sun>=1	2:00s	0	-
    -Rule	AW	1991	only	-	Nov	17	2:00s	1:00	-
    -Rule	AW	1992	only	-	Mar	Sun>=1	2:00s	0	-
    -Rule	AW	2006	only	-	Dec	 3	2:00s	1:00	-
    -Rule	AW	2007	2009	-	Mar	lastSun	2:00s	0	-
    -Rule	AW	2007	2008	-	Oct	lastSun	2:00s	1:00	-
    +Rule	AW	1974	only	-	Oct	lastSun	2:00s	1:00	D
    +Rule	AW	1975	only	-	Mar	Sun>=1	2:00s	0	S
    +Rule	AW	1983	only	-	Oct	lastSun	2:00s	1:00	D
    +Rule	AW	1984	only	-	Mar	Sun>=1	2:00s	0	S
    +Rule	AW	1991	only	-	Nov	17	2:00s	1:00	D
    +Rule	AW	1992	only	-	Mar	Sun>=1	2:00s	0	S
    +Rule	AW	2006	only	-	Dec	 3	2:00s	1:00	D
    +Rule	AW	2007	2009	-	Mar	lastSun	2:00s	0	S
    +Rule	AW	2007	2008	-	Oct	lastSun	2:00s	1:00	D
     Zone Australia/Perth	 7:43:24 -	LMT	1895 Dec
    -			 8:00	Aus	WST	1943 Jul
    -			 8:00	AW	WST
    +			 8:00	Aus	AW%sT	1943 Jul
    +			 8:00	AW	AW%sT
     Zone Australia/Eucla	 8:35:28 -	LMT	1895 Dec
    -			 8:45	Aus	CWST	1943 Jul
    -			 8:45	AW	CWST
    +			 8:45	Aus	ACW%sT	1943 Jul
    +			 8:45	AW	ACW%sT
     
     # Queensland
     #
    @@ -85,150 +84,150 @@ Zone Australia/Eucla	 8:35:28 -	LMT	1895 Dec
     # so use Lindeman.
     #
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -Rule	AQ	1971	only	-	Oct	lastSun	2:00s	1:00	-
    -Rule	AQ	1972	only	-	Feb	lastSun	2:00s	0	-
    -Rule	AQ	1989	1991	-	Oct	lastSun	2:00s	1:00	-
    -Rule	AQ	1990	1992	-	Mar	Sun>=1	2:00s	0	-
    -Rule	Holiday	1992	1993	-	Oct	lastSun	2:00s	1:00	-
    -Rule	Holiday	1993	1994	-	Mar	Sun>=1	2:00s	0	-
    +Rule	AQ	1971	only	-	Oct	lastSun	2:00s	1:00	D
    +Rule	AQ	1972	only	-	Feb	lastSun	2:00s	0	S
    +Rule	AQ	1989	1991	-	Oct	lastSun	2:00s	1:00	D
    +Rule	AQ	1990	1992	-	Mar	Sun>=1	2:00s	0	S
    +Rule	Holiday	1992	1993	-	Oct	lastSun	2:00s	1:00	D
    +Rule	Holiday	1993	1994	-	Mar	Sun>=1	2:00s	0	S
     Zone Australia/Brisbane	10:12:08 -	LMT	1895
    -			10:00	Aus	EST	1971
    -			10:00	AQ	EST
    +			10:00	Aus	AE%sT	1971
    +			10:00	AQ	AE%sT
     Zone Australia/Lindeman  9:55:56 -	LMT	1895
    -			10:00	Aus	EST	1971
    -			10:00	AQ	EST	1992 Jul
    -			10:00	Holiday	EST
    +			10:00	Aus	AE%sT	1971
    +			10:00	AQ	AE%sT	1992 Jul
    +			10:00	Holiday	AE%sT
     
     # South Australia
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -Rule	AS	1971	1985	-	Oct	lastSun	2:00s	1:00	-
    -Rule	AS	1986	only	-	Oct	19	2:00s	1:00	-
    -Rule	AS	1987	2007	-	Oct	lastSun	2:00s	1:00	-
    -Rule	AS	1972	only	-	Feb	27	2:00s	0	-
    -Rule	AS	1973	1985	-	Mar	Sun>=1	2:00s	0	-
    -Rule	AS	1986	1990	-	Mar	Sun>=15	2:00s	0	-
    -Rule	AS	1991	only	-	Mar	3	2:00s	0	-
    -Rule	AS	1992	only	-	Mar	22	2:00s	0	-
    -Rule	AS	1993	only	-	Mar	7	2:00s	0	-
    -Rule	AS	1994	only	-	Mar	20	2:00s	0	-
    -Rule	AS	1995	2005	-	Mar	lastSun	2:00s	0	-
    -Rule	AS	2006	only	-	Apr	2	2:00s	0	-
    -Rule	AS	2007	only	-	Mar	lastSun	2:00s	0	-
    -Rule	AS	2008	max	-	Apr	Sun>=1	2:00s	0	-
    -Rule	AS	2008	max	-	Oct	Sun>=1	2:00s	1:00	-
    +Rule	AS	1971	1985	-	Oct	lastSun	2:00s	1:00	D
    +Rule	AS	1986	only	-	Oct	19	2:00s	1:00	D
    +Rule	AS	1987	2007	-	Oct	lastSun	2:00s	1:00	D
    +Rule	AS	1972	only	-	Feb	27	2:00s	0	S
    +Rule	AS	1973	1985	-	Mar	Sun>=1	2:00s	0	S
    +Rule	AS	1986	1990	-	Mar	Sun>=15	2:00s	0	S
    +Rule	AS	1991	only	-	Mar	3	2:00s	0	S
    +Rule	AS	1992	only	-	Mar	22	2:00s	0	S
    +Rule	AS	1993	only	-	Mar	7	2:00s	0	S
    +Rule	AS	1994	only	-	Mar	20	2:00s	0	S
    +Rule	AS	1995	2005	-	Mar	lastSun	2:00s	0	S
    +Rule	AS	2006	only	-	Apr	2	2:00s	0	S
    +Rule	AS	2007	only	-	Mar	lastSun	2:00s	0	S
    +Rule	AS	2008	max	-	Apr	Sun>=1	2:00s	0	S
    +Rule	AS	2008	max	-	Oct	Sun>=1	2:00s	1:00	D
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Australia/Adelaide	9:14:20 -	LMT	1895 Feb
    -			9:00	-	CST	1899 May
    -			9:30	Aus	CST	1971
    -			9:30	AS	CST
    +			9:00	-	ACST	1899 May
    +			9:30	Aus	AC%sT	1971
    +			9:30	AS	AC%sT
     
     # Tasmania
     #
     # From Paul Eggert (2005-08-16):
    -# 
    +# http://www.bom.gov.au/climate/averages/tables/dst_times.shtml
     # says King Island didn't observe DST from WWII until late 1971.
     #
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -Rule	AT	1967	only	-	Oct	Sun>=1	2:00s	1:00	-
    -Rule	AT	1968	only	-	Mar	lastSun	2:00s	0	-
    -Rule	AT	1968	1985	-	Oct	lastSun	2:00s	1:00	-
    -Rule	AT	1969	1971	-	Mar	Sun>=8	2:00s	0	-
    -Rule	AT	1972	only	-	Feb	lastSun	2:00s	0	-
    -Rule	AT	1973	1981	-	Mar	Sun>=1	2:00s	0	-
    -Rule	AT	1982	1983	-	Mar	lastSun	2:00s	0	-
    -Rule	AT	1984	1986	-	Mar	Sun>=1	2:00s	0	-
    -Rule	AT	1986	only	-	Oct	Sun>=15	2:00s	1:00	-
    -Rule	AT	1987	1990	-	Mar	Sun>=15	2:00s	0	-
    -Rule	AT	1987	only	-	Oct	Sun>=22	2:00s	1:00	-
    -Rule	AT	1988	1990	-	Oct	lastSun	2:00s	1:00	-
    -Rule	AT	1991	1999	-	Oct	Sun>=1	2:00s	1:00	-
    -Rule	AT	1991	2005	-	Mar	lastSun	2:00s	0	-
    -Rule	AT	2000	only	-	Aug	lastSun	2:00s	1:00	-
    -Rule	AT	2001	max	-	Oct	Sun>=1	2:00s	1:00	-
    -Rule	AT	2006	only	-	Apr	Sun>=1	2:00s	0	-
    -Rule	AT	2007	only	-	Mar	lastSun	2:00s	0	-
    -Rule	AT	2008	max	-	Apr	Sun>=1	2:00s	0	-
    +Rule	AT	1967	only	-	Oct	Sun>=1	2:00s	1:00	D
    +Rule	AT	1968	only	-	Mar	lastSun	2:00s	0	S
    +Rule	AT	1968	1985	-	Oct	lastSun	2:00s	1:00	D
    +Rule	AT	1969	1971	-	Mar	Sun>=8	2:00s	0	S
    +Rule	AT	1972	only	-	Feb	lastSun	2:00s	0	S
    +Rule	AT	1973	1981	-	Mar	Sun>=1	2:00s	0	S
    +Rule	AT	1982	1983	-	Mar	lastSun	2:00s	0	S
    +Rule	AT	1984	1986	-	Mar	Sun>=1	2:00s	0	S
    +Rule	AT	1986	only	-	Oct	Sun>=15	2:00s	1:00	D
    +Rule	AT	1987	1990	-	Mar	Sun>=15	2:00s	0	S
    +Rule	AT	1987	only	-	Oct	Sun>=22	2:00s	1:00	D
    +Rule	AT	1988	1990	-	Oct	lastSun	2:00s	1:00	D
    +Rule	AT	1991	1999	-	Oct	Sun>=1	2:00s	1:00	D
    +Rule	AT	1991	2005	-	Mar	lastSun	2:00s	0	S
    +Rule	AT	2000	only	-	Aug	lastSun	2:00s	1:00	D
    +Rule	AT	2001	max	-	Oct	Sun>=1	2:00s	1:00	D
    +Rule	AT	2006	only	-	Apr	Sun>=1	2:00s	0	S
    +Rule	AT	2007	only	-	Mar	lastSun	2:00s	0	S
    +Rule	AT	2008	max	-	Apr	Sun>=1	2:00s	0	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Australia/Hobart	9:49:16	-	LMT	1895 Sep
    -			10:00	-	EST	1916 Oct 1 2:00
    -			10:00	1:00	EST	1917 Feb
    -			10:00	Aus	EST	1967
    -			10:00	AT	EST
    +			10:00	-	AEST	1916 Oct  1  2:00
    +			10:00	1:00	AEDT	1917 Feb
    +			10:00	Aus	AE%sT	1967
    +			10:00	AT	AE%sT
     Zone Australia/Currie	9:35:28	-	LMT	1895 Sep
    -			10:00	-	EST	1916 Oct 1 2:00
    -			10:00	1:00	EST	1917 Feb
    -			10:00	Aus	EST	1971 Jul
    -			10:00	AT	EST
    +			10:00	-	AEST	1916 Oct  1  2:00
    +			10:00	1:00	AEDT	1917 Feb
    +			10:00	Aus	AE%sT	1971 Jul
    +			10:00	AT	AE%sT
     
     # Victoria
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -Rule	AV	1971	1985	-	Oct	lastSun	2:00s	1:00	-
    -Rule	AV	1972	only	-	Feb	lastSun	2:00s	0	-
    -Rule	AV	1973	1985	-	Mar	Sun>=1	2:00s	0	-
    -Rule	AV	1986	1990	-	Mar	Sun>=15	2:00s	0	-
    -Rule	AV	1986	1987	-	Oct	Sun>=15	2:00s	1:00	-
    -Rule	AV	1988	1999	-	Oct	lastSun	2:00s	1:00	-
    -Rule	AV	1991	1994	-	Mar	Sun>=1	2:00s	0	-
    -Rule	AV	1995	2005	-	Mar	lastSun	2:00s	0	-
    -Rule	AV	2000	only	-	Aug	lastSun	2:00s	1:00	-
    -Rule	AV	2001	2007	-	Oct	lastSun	2:00s	1:00	-
    -Rule	AV	2006	only	-	Apr	Sun>=1	2:00s	0	-
    -Rule	AV	2007	only	-	Mar	lastSun	2:00s	0	-
    -Rule	AV	2008	max	-	Apr	Sun>=1	2:00s	0	-
    -Rule	AV	2008	max	-	Oct	Sun>=1	2:00s	1:00	-
    +Rule	AV	1971	1985	-	Oct	lastSun	2:00s	1:00	D
    +Rule	AV	1972	only	-	Feb	lastSun	2:00s	0	S
    +Rule	AV	1973	1985	-	Mar	Sun>=1	2:00s	0	S
    +Rule	AV	1986	1990	-	Mar	Sun>=15	2:00s	0	S
    +Rule	AV	1986	1987	-	Oct	Sun>=15	2:00s	1:00	D
    +Rule	AV	1988	1999	-	Oct	lastSun	2:00s	1:00	D
    +Rule	AV	1991	1994	-	Mar	Sun>=1	2:00s	0	S
    +Rule	AV	1995	2005	-	Mar	lastSun	2:00s	0	S
    +Rule	AV	2000	only	-	Aug	lastSun	2:00s	1:00	D
    +Rule	AV	2001	2007	-	Oct	lastSun	2:00s	1:00	D
    +Rule	AV	2006	only	-	Apr	Sun>=1	2:00s	0	S
    +Rule	AV	2007	only	-	Mar	lastSun	2:00s	0	S
    +Rule	AV	2008	max	-	Apr	Sun>=1	2:00s	0	S
    +Rule	AV	2008	max	-	Oct	Sun>=1	2:00s	1:00	D
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Australia/Melbourne 9:39:52 -	LMT	1895 Feb
    -			10:00	Aus	EST	1971
    -			10:00	AV	EST
    +			10:00	Aus	AE%sT	1971
    +			10:00	AV	AE%sT
     
     # New South Wales
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -Rule	AN	1971	1985	-	Oct	lastSun	2:00s	1:00	-
    -Rule	AN	1972	only	-	Feb	27	2:00s	0	-
    -Rule	AN	1973	1981	-	Mar	Sun>=1	2:00s	0	-
    -Rule	AN	1982	only	-	Apr	Sun>=1	2:00s	0	-
    -Rule	AN	1983	1985	-	Mar	Sun>=1	2:00s	0	-
    -Rule	AN	1986	1989	-	Mar	Sun>=15	2:00s	0	-
    -Rule	AN	1986	only	-	Oct	19	2:00s	1:00	-
    -Rule	AN	1987	1999	-	Oct	lastSun	2:00s	1:00	-
    -Rule	AN	1990	1995	-	Mar	Sun>=1	2:00s	0	-
    -Rule	AN	1996	2005	-	Mar	lastSun	2:00s	0	-
    -Rule	AN	2000	only	-	Aug	lastSun	2:00s	1:00	-
    -Rule	AN	2001	2007	-	Oct	lastSun	2:00s	1:00	-
    -Rule	AN	2006	only	-	Apr	Sun>=1	2:00s	0	-
    -Rule	AN	2007	only	-	Mar	lastSun	2:00s	0	-
    -Rule	AN	2008	max	-	Apr	Sun>=1	2:00s	0	-
    -Rule	AN	2008	max	-	Oct	Sun>=1	2:00s	1:00	-
    +Rule	AN	1971	1985	-	Oct	lastSun	2:00s	1:00	D
    +Rule	AN	1972	only	-	Feb	27	2:00s	0	S
    +Rule	AN	1973	1981	-	Mar	Sun>=1	2:00s	0	S
    +Rule	AN	1982	only	-	Apr	Sun>=1	2:00s	0	S
    +Rule	AN	1983	1985	-	Mar	Sun>=1	2:00s	0	S
    +Rule	AN	1986	1989	-	Mar	Sun>=15	2:00s	0	S
    +Rule	AN	1986	only	-	Oct	19	2:00s	1:00	D
    +Rule	AN	1987	1999	-	Oct	lastSun	2:00s	1:00	D
    +Rule	AN	1990	1995	-	Mar	Sun>=1	2:00s	0	S
    +Rule	AN	1996	2005	-	Mar	lastSun	2:00s	0	S
    +Rule	AN	2000	only	-	Aug	lastSun	2:00s	1:00	D
    +Rule	AN	2001	2007	-	Oct	lastSun	2:00s	1:00	D
    +Rule	AN	2006	only	-	Apr	Sun>=1	2:00s	0	S
    +Rule	AN	2007	only	-	Mar	lastSun	2:00s	0	S
    +Rule	AN	2008	max	-	Apr	Sun>=1	2:00s	0	S
    +Rule	AN	2008	max	-	Oct	Sun>=1	2:00s	1:00	D
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Australia/Sydney	10:04:52 -	LMT	1895 Feb
    -			10:00	Aus	EST	1971
    -			10:00	AN	EST
    +			10:00	Aus	AE%sT	1971
    +			10:00	AN	AE%sT
     Zone Australia/Broken_Hill 9:25:48 -	LMT	1895 Feb
    -			10:00	-	EST	1896 Aug 23
    -			9:00	-	CST	1899 May
    -			9:30	Aus	CST	1971
    -			9:30	AN	CST	2000
    -			9:30	AS	CST
    +			10:00	-	AEST	1896 Aug 23
    +			9:00	-	ACST	1899 May
    +			9:30	Aus	AC%sT	1971
    +			9:30	AN	AC%sT	2000
    +			9:30	AS	AC%sT
     
     # Lord Howe Island
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -Rule	LH	1981	1984	-	Oct	lastSun	2:00	1:00	-
    -Rule	LH	1982	1985	-	Mar	Sun>=1	2:00	0	-
    -Rule	LH	1985	only	-	Oct	lastSun	2:00	0:30	-
    -Rule	LH	1986	1989	-	Mar	Sun>=15	2:00	0	-
    -Rule	LH	1986	only	-	Oct	19	2:00	0:30	-
    -Rule	LH	1987	1999	-	Oct	lastSun	2:00	0:30	-
    -Rule	LH	1990	1995	-	Mar	Sun>=1	2:00	0	-
    -Rule	LH	1996	2005	-	Mar	lastSun	2:00	0	-
    -Rule	LH	2000	only	-	Aug	lastSun	2:00	0:30	-
    -Rule	LH	2001	2007	-	Oct	lastSun	2:00	0:30	-
    -Rule	LH	2006	only	-	Apr	Sun>=1	2:00	0	-
    -Rule	LH	2007	only	-	Mar	lastSun	2:00	0	-
    -Rule	LH	2008	max	-	Apr	Sun>=1	2:00	0	-
    -Rule	LH	2008	max	-	Oct	Sun>=1	2:00	0:30	-
    +Rule	LH	1981	1984	-	Oct	lastSun	2:00	1:00	D
    +Rule	LH	1982	1985	-	Mar	Sun>=1	2:00	0	S
    +Rule	LH	1985	only	-	Oct	lastSun	2:00	0:30	D
    +Rule	LH	1986	1989	-	Mar	Sun>=15	2:00	0	S
    +Rule	LH	1986	only	-	Oct	19	2:00	0:30	D
    +Rule	LH	1987	1999	-	Oct	lastSun	2:00	0:30	D
    +Rule	LH	1990	1995	-	Mar	Sun>=1	2:00	0	S
    +Rule	LH	1996	2005	-	Mar	lastSun	2:00	0	S
    +Rule	LH	2000	only	-	Aug	lastSun	2:00	0:30	D
    +Rule	LH	2001	2007	-	Oct	lastSun	2:00	0:30	D
    +Rule	LH	2006	only	-	Apr	Sun>=1	2:00	0	S
    +Rule	LH	2007	only	-	Mar	lastSun	2:00	0	S
    +Rule	LH	2008	max	-	Apr	Sun>=1	2:00	0	S
    +Rule	LH	2008	max	-	Oct	Sun>=1	2:00	0:30	D
     Zone Australia/Lord_Howe 10:36:20 -	LMT	1895 Feb
    -			10:00	-	EST	1981 Mar
    -			10:30	LH	LHST
    +			10:00	-	AEST	1981 Mar
    +			10:30	LH	LH%sT
     
     # Australian miscellany
     #
    @@ -244,8 +243,8 @@ Zone Australia/Lord_Howe 10:36:20 -	LMT	1895 Feb
     # Permanent occupation (scientific station) 1911-1915 and since 25 March 1948;
     # sealing and penguin oil station operated Nov 1899 to Apr 1919.  See the
     # Tasmania Parks & Wildlife Service history of sealing at Macquarie Island
    -# 
    -# .
    +# http://www.parks.tas.gov.au/index.aspx?base=1828
    +# http://www.parks.tas.gov.au/index.aspx?base=1831
     # Guess that it was like Australia/Hobart while inhabited before 2010.
     #
     # From Steffen Thorsen (2010-03-10):
    @@ -256,16 +255,16 @@ Zone Australia/Lord_Howe 10:36:20 -	LMT	1895 Feb
     #
     # From Arthur David Olson (2013-05-23):
     # The 1919 transition is overspecified below so pre-2013 zics
    -# will produce a binary file with an EST-type as the first 32-bit type;
    +# will produce a binary file with an [A]EST-type as the first 32-bit type;
     # this is required for correct handling of times before 1916 by
     # pre-2013 versions of localtime.
     Zone Antarctica/Macquarie 0	-	zzz	1899 Nov
    -			10:00	-	EST	1916 Oct 1 2:00
    -			10:00	1:00	EST	1917 Feb
    -			10:00	Aus	EST	1919 Apr 1 0:00s
    +			10:00	-	AEST	1916 Oct  1  2:00
    +			10:00	1:00	AEDT	1917 Feb
    +			10:00	Aus	AE%sT	1919 Apr  1  0:00s
     			0	-	zzz	1948 Mar 25
    -			10:00	Aus	EST	1967
    -			10:00	AT	EST	2010 Apr 4 3:00
    +			10:00	Aus	AE%sT	1967
    +			10:00	AT	AE%sT	2010 Apr  4  3:00
     			11:00	-	MIST	# Macquarie I Standard Time
     
     # Christmas
    @@ -273,24 +272,14 @@ Zone Antarctica/Macquarie 0	-	zzz	1899 Nov
     Zone Indian/Christmas	7:02:52 -	LMT	1895 Feb
     			7:00	-	CXT	# Christmas Island Time
     
    -# Cook Is
    -# From Shanks & Pottenger:
    -# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -Rule	Cook	1978	only	-	Nov	12	0:00	0:30	HS
    -Rule	Cook	1979	1991	-	Mar	Sun>=1	0:00	0	-
    -Rule	Cook	1979	1990	-	Oct	lastSun	0:00	0:30	HS
    -# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Pacific/Rarotonga	-10:39:04 -	LMT	1901		# Avarua
    -			-10:30	-	CKT	1978 Nov 12	# Cook Is Time
    -			-10:00	Cook	CK%sT
    -
    -# Cocos
    +# Cocos (Keeling) Is
     # These islands were ruled by the Ross family from about 1830 to 1978.
     # We don't know when standard time was introduced; for now, we guess 1900.
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Indian/Cocos	6:27:40	-	LMT	1900
     			6:30	-	CCT	# Cocos Islands Time
     
    +
     # Fiji
     
     # Milne gives 11:55:44 for Suva.
    @@ -300,20 +289,13 @@ Zone	Indian/Cocos	6:27:40	-	LMT	1900
     # from November 29th 2009  to April 25th 2010.
     #
     # "Daylight savings to commence this month"
    -# 
     # http://www.radiofiji.com.fj/fullstory.php?id=23719
    -# 
    -# or
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_fiji01.html
    -# 
     
     # From Steffen Thorsen (2009-11-10):
     # The Fiji Government has posted some more details about the approved
     # amendments:
    -# 
     # http://www.fiji.gov.fj/publish/page_16198.shtml
    -# 
     
     # From Steffen Thorsen (2010-03-03):
     # The Cabinet in Fiji has decided to end DST about a month early, on
    @@ -322,35 +304,24 @@ Zone	Indian/Cocos	6:27:40	-	LMT	1900
     # 2011 (last Sunday a good guess?).
     #
     # Official source:
    -# 
     # http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=1096:3310-cabinet-approves-change-in-daylight-savings-dates&catid=49:cabinet-releases&Itemid=166
    -# 
     #
     # A bit more background info here:
    -# 
     # http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html
    -# 
     
     # From Alexander Krivenyshev (2010-10-24):
     # According to Radio Fiji and Fiji Times online, Fiji will end DST 3
     # weeks earlier than expected - on March 6, 2011, not March 27, 2011...
     # Here is confirmation from Government of the Republic of the Fiji Islands,
     # Ministry of Information (fiji.gov.fj) web site:
    -# 
     # http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155
    -# 
    -# or
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_fiji04.html
    -# 
     
     # From Steffen Thorsen (2011-10-03):
     # Now the dates have been confirmed, and at least our start date
     # assumption was correct (end date was one week wrong).
     #
    -# 
    -# www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155
    -# 
    +# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155
     # which says
     # Members of the public are reminded to change their time to one hour in
     # advance at 2am to 3am on October 23, 2011 and one hour back at 3am to
    @@ -360,9 +331,7 @@ Zone	Indian/Cocos	6:27:40	-	LMT	1900
     # Another change to the Fiji DST end date. In the TZ database the end date for
     # Fiji DST 2012, is currently Feb 26. This has been changed to Jan 22.
     #
    -# 
     # http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=5017:amendments-to-daylight-savings&catid=71:press-releases&Itemid=155
    -# 
     # states:
     #
     # The end of daylight saving scheduled initially for the 26th of February 2012
    @@ -400,16 +369,16 @@ Rule	Fiji	2011	only	-	Mar	Sun>=1	3:00	0	-
     Rule	Fiji	2012	2013	-	Jan	Sun>=18	3:00	0	-
     Rule	Fiji	2014	max	-	Jan	Sun>=18	2:00	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Pacific/Fiji	11:55:44 -	LMT	1915 Oct 26	# Suva
    +Zone	Pacific/Fiji	11:55:44 -	LMT	1915 Oct 26 # Suva
     			12:00	Fiji	FJ%sT	# Fiji Time
     
     # French Polynesia
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Pacific/Gambier	 -8:59:48 -	LMT	1912 Oct	# Rikitea
    +Zone	Pacific/Gambier	 -8:59:48 -	LMT	1912 Oct # Rikitea
     			 -9:00	-	GAMT	# Gambier Time
     Zone	Pacific/Marquesas -9:18:00 -	LMT	1912 Oct
     			 -9:30	-	MART	# Marquesas Time
    -Zone	Pacific/Tahiti	 -9:58:16 -	LMT	1912 Oct	# Papeete
    +Zone	Pacific/Tahiti	 -9:58:16 -	LMT	1912 Oct # Papeete
     			-10:00	-	TAHT	# Tahiti Time
     # Clipperton (near North America) is administered from French Polynesia;
     # it is uninhabited.
    @@ -417,14 +386,14 @@ Zone	Pacific/Tahiti	 -9:58:16 -	LMT	1912 Oct	# Papeete
     # Guam
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Pacific/Guam	-14:21:00 -	LMT	1844 Dec 31
    -			 9:39:00 -	LMT	1901		# Agana
    -			10:00	-	GST	2000 Dec 23	# Guam
    +			 9:39:00 -	LMT	1901        # Agana
    +			10:00	-	GST	2000 Dec 23 # Guam
     			10:00	-	ChST	# Chamorro Standard Time
     
     # Kiribati
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Pacific/Tarawa	 11:32:04 -	LMT	1901		# Bairiki
    -			 12:00	-	GILT		 # Gilbert Is Time
    +Zone Pacific/Tarawa	 11:32:04 -	LMT	1901 # Bairiki
    +			 12:00	-	GILT	# Gilbert Is Time
     Zone Pacific/Enderbury	-11:24:20 -	LMT	1901
     			-12:00	-	PHOT	1979 Oct # Phoenix Is Time
     			-11:00	-	PHOT	1995
    @@ -438,7 +407,7 @@ Zone Pacific/Kiritimati	-10:29:20 -	LMT	1901
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Pacific/Saipan	-14:17:00 -	LMT	1844 Dec 31
     			 9:43:00 -	LMT	1901
    -			 9:00	-	MPT	1969 Oct # N Mariana Is Time
    +			 9:00	-	MPT	1969 Oct    # N Mariana Is Time
     			10:00	-	MPT	2000 Dec 23
     			10:00	-	ChST	# Chamorro Standard Time
     
    @@ -449,24 +418,24 @@ Zone Pacific/Majuro	11:24:48 -	LMT	1901
     			12:00	-	MHT
     Zone Pacific/Kwajalein	11:09:20 -	LMT	1901
     			11:00	-	MHT	1969 Oct
    -			-12:00	-	KWAT	1993 Aug 20	# Kwajalein Time
    +			-12:00	-	KWAT	1993 Aug 20 # Kwajalein Time
     			12:00	-	MHT
     
     # Micronesia
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Pacific/Chuuk	10:07:08 -	LMT	1901
    -			10:00	-	CHUT			# Chuuk Time
    -Zone Pacific/Pohnpei	10:32:52 -	LMT	1901		# Kolonia
    -			11:00	-	PONT			# Pohnpei Time
    +			10:00	-	CHUT	# Chuuk Time
    +Zone Pacific/Pohnpei	10:32:52 -	LMT	1901 # Kolonia
    +			11:00	-	PONT	# Pohnpei Time
     Zone Pacific/Kosrae	10:51:56 -	LMT	1901
    -			11:00	-	KOST	1969 Oct	# Kosrae Time
    +			11:00	-	KOST	1969 Oct # Kosrae Time
     			12:00	-	KOST	1999
     			11:00	-	KOST
     
     # Nauru
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Pacific/Nauru	11:07:40 -	LMT	1921 Jan 15	# Uaobe
    -			11:30	-	NRT	1942 Mar 15	# Nauru Time
    +Zone	Pacific/Nauru	11:07:40 -	LMT	1921 Jan 15 # Uaobe
    +			11:30	-	NRT	1942 Mar 15 # Nauru Time
     			9:00	-	JST	1944 Aug 15
     			11:30	-	NRT	1979 May
     			12:00	-	NRT
    @@ -479,7 +448,7 @@ Rule	NC	1996	only	-	Dec	 1	2:00s	1:00	S
     # Shanks & Pottenger say the following was at 2:00; go with IATA.
     Rule	NC	1997	only	-	Mar	 2	2:00s	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Pacific/Noumea	11:05:48 -	LMT	1912 Jan 13
    +Zone	Pacific/Noumea	11:05:48 -	LMT	1912 Jan 13 # Nouméa
     			11:00	NC	NC%sT
     
     
    @@ -496,7 +465,8 @@ Rule	NZ	1934	1940	-	Apr	lastSun	2:00	0	M
     Rule	NZ	1934	1940	-	Sep	lastSun	2:00	0:30	S
     Rule	NZ	1946	only	-	Jan	 1	0:00	0	S
     # Since 1957 Chatham has been 45 minutes ahead of NZ, but there's no
    -# convenient notation for this so we must duplicate the Rule lines.
    +# convenient single notation for the date and time of this transition
    +# so we must duplicate the Rule lines.
     Rule	NZ	1974	only	-	Nov	Sun>=1	2:00s	1:00	D
     Rule	Chatham	1974	only	-	Nov	Sun>=1	2:45s	1:00	D
     Rule	NZ	1975	only	-	Feb	lastSun	2:00s	0	S
    @@ -519,13 +489,14 @@ Rule	Chatham	2008	max	-	Apr	Sun>=1	2:45s	0	S
     Zone Pacific/Auckland	11:39:04 -	LMT	1868 Nov  2
     			11:30	NZ	NZ%sT	1946 Jan  1
     			12:00	NZ	NZ%sT
    -Zone Pacific/Chatham	12:13:48 -	LMT	1957 Jan  1
    +Zone Pacific/Chatham	12:13:48 -	LMT	1868 Nov  2
    +			12:15	-	CHAST	1946 Jan  1
     			12:45	Chatham	CHA%sT
     
     Link Pacific/Auckland Antarctica/McMurdo
     
     # Auckland Is
    -# uninhabited; Maori and Moriori, colonial settlers, pastoralists, sealers,
    +# uninhabited; Māori and Moriori, colonial settlers, pastoralists, sealers,
     # and scientific personnel have wintered
     
     # Campbell I
    @@ -534,48 +505,58 @@ Link Pacific/Auckland Antarctica/McMurdo
     # previously whalers, sealers, pastoralists, and scientific personnel wintered
     # was probably like Pacific/Auckland
     
    +# Cook Is
    +# From Shanks & Pottenger:
    +# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    +Rule	Cook	1978	only	-	Nov	12	0:00	0:30	HS
    +Rule	Cook	1979	1991	-	Mar	Sun>=1	0:00	0	-
    +Rule	Cook	1979	1990	-	Oct	lastSun	0:00	0:30	HS
    +# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    +Zone Pacific/Rarotonga	-10:39:04 -	LMT	1901        # Avarua
    +			-10:30	-	CKT	1978 Nov 12 # Cook Is Time
    +			-10:00	Cook	CK%sT
    +
     ###############################################################################
     
     
     # Niue
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Pacific/Niue	-11:19:40 -	LMT	1901		# Alofi
    -			-11:20	-	NUT	1951	# Niue Time
    -			-11:30	-	NUT	1978 Oct 1
    +Zone	Pacific/Niue	-11:19:40 -	LMT	1901        # Alofi
    +			-11:20	-	NUT	1951        # Niue Time
    +			-11:30	-	NUT	1978 Oct  1
     			-11:00	-	NUT
     
     # Norfolk
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Pacific/Norfolk	11:11:52 -	LMT	1901		# Kingston
    -			11:12	-	NMT	1951	# Norfolk Mean Time
    -			11:30	-	NFT		# Norfolk Time
    +Zone	Pacific/Norfolk	11:11:52 -	LMT	1901 # Kingston
    +			11:12	-	NMT	1951 # Norfolk Mean Time
    +			11:30	-	NFT	# Norfolk Time
     
     # Palau (Belau)
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Pacific/Palau	8:57:56 -	LMT	1901		# Koror
    +Zone Pacific/Palau	8:57:56 -	LMT	1901 # Koror
     			9:00	-	PWT	# Palau Time
     
     # Papua New Guinea
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Pacific/Port_Moresby 9:48:40 -	LMT	1880
    -			9:48:32	-	PMMT	1895	# Port Moresby Mean Time
    -			10:00	-	PGT		# Papua New Guinea Time
    +			9:48:32	-	PMMT	1895 # Port Moresby Mean Time
    +			10:00	-	PGT	# Papua New Guinea Time
     
     # Pitcairn
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Pacific/Pitcairn	-8:40:20 -	LMT	1901		# Adamstown
    -			-8:30	-	PNT	1998 Apr 27 00:00
    +Zone Pacific/Pitcairn	-8:40:20 -	LMT	1901        # Adamstown
    +			-8:30	-	PNT	1998 Apr 27  0:00
     			-8:00	-	PST	# Pitcairn Standard Time
     
     # American Samoa
     Zone Pacific/Pago_Pago	 12:37:12 -	LMT	1879 Jul  5
     			-11:22:48 -	LMT	1911
    -			-11:30	-	SAMT	1950		# Samoa Time
    -			-11:00	-	NST	1967 Apr	# N=Nome
    -			-11:00	-	BST	1983 Nov 30	# B=Bering
    -			-11:00	-	SST			# S=Samoa
    +			-11:00	-	NST	1967 Apr    # N=Nome
    +			-11:00	-	BST	1983 Nov 30 # B=Bering
    +			-11:00	-	SST	            # S=Samoa
     
    -# Samoa
    +# Samoa (formerly and also known as Western Samoa)
     
     # From Steffen Thorsen (2009-10-16):
     # We have been in contact with the government of Samoa again, and received
    @@ -586,141 +567,80 @@ Zone Pacific/Pago_Pago	 12:37:12 -	LMT	1879 Jul  5
     # Sunday of April 2011."
     #
     # Background info:
    -# 
     # http://www.timeanddate.com/news/time/samoa-dst-plan-2009.html
    -# 
     #
     # Samoa's Daylight Saving Time Act 2009 is available here, but does not
     # contain any dates:
    -# 
     # http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf
    -# 
     
     # From Laupue Raymond Hughes (2010-10-07):
     # Please see
    -# 
     # http://www.mcil.gov.ws
    -# ,
     # the Ministry of Commerce, Industry and Labour (sideframe) "Last Sunday
     # September 2010 (26/09/10) - adjust clocks forward from 12:00 midnight
     # to 01:00am and First Sunday April 2011 (03/04/11) - adjust clocks
     # backwards from 1:00am to 12:00am"
     
     # From Laupue Raymond Hughes (2011-03-07):
    -# I believe this will be posted shortly on the website
    -# 
    -# www.mcil.gov.ws
    -# 
    +# [http://www.mcil.gov.ws/ftcd/daylight_saving_2011.pdf]
     #
    -# PUBLIC NOTICE ON DAYLIGHT SAVING TIME
    -#
    -# Pursuant to the Daylight Saving Act 2009 and Cabinets decision,
    -# businesses and the general public are hereby advised that daylight
    -# saving time is on the first Saturday of April 2011 (02/04/11).
    -#
    -# The public is therefore advised that when the standard time strikes
    -# the hour of four oclock (4.00am or 0400 Hours) on the 2nd April 2011,
    -# then all instruments used to measure standard time are to be
    -# adjusted/changed to three oclock (3:00am or 0300Hrs).
    -#
    -# Margaret Fruean ACTING CHIEF EXECUTIVE OFFICER MINISTRY OF COMMERCE,
    -# INDUSTRY AND LABOUR 28th February 2011
    +# ... when the standard time strikes the hour of four o'clock (4.00am
    +# or 0400 Hours) on the 2nd April 2011, then all instruments used to
    +# measure standard time are to be adjusted/changed to three o'clock
    +# (3:00am or 0300Hrs).
     
    -# From David Zuelke (2011-05-09):
    +# From David Zülke (2011-05-09):
     # Subject: Samoa to move timezone from east to west of international date line
     #
    -# 
     # http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963
    -# 
     
    -# From Mark Sim-Smith (2011-08-17):
    -# I have been in contact with Leilani Tuala Warren from the Samoa Law
    -# Reform Commission, and she has sent me a copy of the Bill that she
    -# confirmed has been passed...Most of the sections are about maps rather
    -# than the time zone change, but I'll paste the relevant bits below. But
    -# the essence is that at midnight 29 Dec (UTC-11 I suppose), Samoa
    -# changes from UTC-11 to UTC+13:
    -#
    -# International Date Line Bill 2011
    -#
    -# AN ACT to provide for the change to standard time in Samoa and to make
    -# consequential amendments to the position of the International Date
    -# Line, and for related purposes.
    -#
    -# BE IT ENACTED by the Legislative Assembly of Samoa in Parliament
    -# assembled as follows:
    -#
    -# 1. Short title and commencement-(1) This Act may be cited as the
    -# International Date Line Act 2011. (2) Except for section 5(3) this Act
    -# commences at 12 o'clock midnight, on Thursday 29th December 2011. (3)
    -# Section 5(3) commences on the date of assent by the Head of State.
    -#
    -# [snip]
    -#
    -# 3. Interpretation - [snip] "Samoa standard time" in this Act and any
    -# other statute of Samoa which refers to 'Samoa standard time' means the
    -# time 13 hours in advance of Co-ordinated Universal Time.
    -#
    -# 4. Samoa standard time - (1) Upon the commencement of this Act, Samoa
    -# standard time shall be set at 13 hours in advance of Co-ordinated
    -# Universal Time for the whole of Samoa. (2) All references to Samoa's
    -# time zone and to Samoa standard time in Samoa in all legislation and
    -# instruments after the commencement of this Act shall be references to
    -# Samoa standard time as provided for in this Act. (3) Nothing in this
    -# Act affects the provisions of the Daylight Saving Act 2009, except that
    -# it defines Samoa standard time....
    +# From Paul Eggert (2014-06-27):
    +# The International Date Line Act 2011
    +# http://www.parliament.gov.ws/images/ACTS/International_Date_Line_Act__2011_-_Eng.pdf
    +# changed Samoa from UTC-11 to UTC+13, effective "12 o'clock midnight, on
    +# Thursday 29th December 2011".  The International Date Line was adjusted
    +# accordingly.
     
     # From Laupue Raymond Hughes (2011-09-02):
    -# 
     # http://www.mcil.gov.ws/mcil_publications.html
    -# 
     #
     # here is the official website publication for Samoa DST and dateline change
     #
     # DST
    -# Year	End	Time	Start	Time
    -# 2011	- - -	- - -	24 September	3:00am to 4:00am
    -# 2012	01 April	4:00am to 3:00am	- - -	- - -
    +# Year  End      Time              Start        Time
    +# 2011  - - -    - - -             24 September 3:00am to 4:00am
    +# 2012  01 April 4:00am to 3:00am  - - -        - - -
     #
     # Dateline Change skip Friday 30th Dec 2011
     # Thursday 29th December 2011	23:59:59 Hours
     # Saturday 31st December 2011	00:00:00 Hours
     #
    -# Clarification by Tim Parenti (2012-01-03):
    -# Although Samoa has used Daylight Saving Time in the 2010-2011 and 2011-2012
    -# seasons, there is not yet any indication that this trend will continue on
    -# a regular basis. For now, we have explicitly listed the transitions below.
    -#
    -# From Nicky (2012-09-10):
    +# From Nicholas Pereira (2012-09-10):
     # Daylight Saving Time commences on Sunday 30th September 2012 and
    -# ends on Sunday 7th of April 2013.
    -#
    -# Please find link below for more information.
    +# ends on Sunday 7th of April 2013....
     # http://www.mcil.gov.ws/mcil_publications.html
     #
    -# That publication also includes dates for Summer of 2013/4 as well
    -# which give the impression of a pattern in selecting dates for the
    -# future, so for now, we will guess this will continue.
    +# From Paul Eggert (2014-07-08):
    +# That web page currently lists transitions for 2012/3 and 2013/4.
    +# Assume the pattern instituted in 2012 will continue indefinitely.
     
    -# Western Samoa
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    +Rule	WS	2010	only	-	Sep	lastSun	0:00	1	D
    +Rule	WS	2011	only	-	Apr	Sat>=1	4:00	0	S
    +Rule	WS	2011	only	-	Sep	lastSat	3:00	1	D
    +Rule	WS	2012	max	-	Apr	Sun>=1	4:00	0	S
     Rule	WS	2012	max	-	Sep	lastSun	3:00	1	D
    -Rule	WS	2012	max	-	Apr	Sun>=1	4:00	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Pacific/Apia	 12:33:04 -	LMT	1879 Jul  5
     			-11:26:56 -	LMT	1911
    -			-11:30	-	SAMT	1950		# Samoa Time
    -			-11:00	-	WST	2010 Sep 26
    -			-11:00	1:00	WSDT	2011 Apr 2 4:00
    -			-11:00	-	WST	2011 Sep 24 3:00
    -			-11:00	1:00	WSDT	2011 Dec 30
    -			 13:00	1:00	WSDT	2012 Apr Sun>=1 4:00
    +			-11:30	-	WSST	1950
    +			-11:00	WS	S%sT	2011 Dec 29 24:00 # S=Samoa
     			 13:00	WS	WS%sT
     
     # Solomon Is
     # excludes Bougainville, for which see Papua New Guinea
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Pacific/Guadalcanal 10:39:48 -	LMT	1912 Oct	# Honiara
    +Zone Pacific/Guadalcanal 10:39:48 -	LMT	1912 Oct # Honiara
     			11:00	-	SBT	# Solomon Is Time
     
     # Tokelau Is
    @@ -744,7 +664,7 @@ Zone Pacific/Guadalcanal 10:39:48 -	LMT	1912 Oct	# Honiara
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Pacific/Fakaofo	-11:24:56 -	LMT	1901
    -			-11:00	-	TKT 2011 Dec 30	# Tokelau Time
    +			-11:00	-	TKT	2011 Dec 30 # Tokelau Time
     			13:00	-	TKT
     
     # Tonga
    @@ -804,8 +724,8 @@ Zone Pacific/Funafuti	11:56:52 -	LMT	1901
     # time from Operation Newsreel (Hardtack I/Teak shot, 1958-08-01) to the last
     # Operation Fishbowl shot (Tightrope, 1962-11-04).... [See] Herman Hoerlin,
     # "The United States High-Altitude Test Experience: A Review Emphasizing the
    -# Impact on the Environment", Los Alamos LA-6405, Oct 1976
    -# .
    +# Impact on the Environment", Los Alamos LA-6405, Oct 1976.
    +# http://www.fas.org/sgp/othergov/doe/lanl/docs1/00322994.pdf
     # See the table on page 4 where he lists GMT and local times for the tests; a
     # footnote for the JI tests reads that local time is "JI time = Hawaii Time
     # Minus One Hour".
    @@ -820,7 +740,7 @@ Zone Pacific/Funafuti	11:56:52 -	LMT	1901
     # From Mark Brader (2005-01-23):
     # [Fallacies and Fantasies of Air Transport History, by R.E.G. Davies,
     # published 1994 by Paladwr Press, McLean, VA, USA; ISBN 0-9626483-5-3]
    -# reproduced a Pan American Airways timeables from 1936, for their weekly
    +# reproduced a Pan American Airways timetable from 1936, for their weekly
     # "Orient Express" flights between San Francisco and Manila, and connecting
     # flights to Chicago and the US East Coast.  As it uses some time zone
     # designations that I've never seen before:....
    @@ -830,9 +750,9 @@ Zone Pacific/Funafuti	11:56:52 -	LMT	1901
     Zone Pacific/Midway	-11:49:28 -	LMT	1901
     			-11:00	-	NST	1956 Jun  3
     			-11:00	1:00	NDT	1956 Sep  2
    -			-11:00	-	NST	1967 Apr	# N=Nome
    -			-11:00	-	BST	1983 Nov 30	# B=Bering
    -			-11:00	-	SST			# S=Samoa
    +			-11:00	-	NST	1967 Apr    # N=Nome
    +			-11:00	-	BST	1983 Nov 30 # B=Bering
    +			-11:00	-	SST	            # S=Samoa
     
     # Palmyra
     # uninhabited since World War II; was probably like Pacific/Kiritimati
    @@ -852,7 +772,7 @@ Rule	Vanuatu	1985	1991	-	Sep	Sun>=23	0:00	1:00	S
     Rule	Vanuatu	1992	1993	-	Jan	Sun>=23	0:00	0	-
     Rule	Vanuatu	1992	only	-	Oct	Sun>=23	0:00	1:00	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Pacific/Efate	11:13:16 -	LMT	1912 Jan 13		# Vila
    +Zone	Pacific/Efate	11:13:16 -	LMT	1912 Jan 13 # Vila
     			11:00	Vanuatu	VU%sT	# Vanuatu Time
     
     # Wallis and Futuna
    @@ -864,9 +784,10 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     
     # NOTES
     
    -# This data is by no means authoritative; if you think you know better,
    +# This file is by no means authoritative; if you think you know better,
     # go ahead and edit the file (and please send any changes to
    -# tz@iana.org for general use in the future).
    +# tz@iana.org for general use in the future).  For more, please see
    +# the file CONTRIBUTING in the tz distribution.
     
     # From Paul Eggert (2013-02-21):
     # A good source for time zone historical data outside the U.S. is
    @@ -887,165 +808,188 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # I found in the UCLA library.
     #
     # For data circa 1899, a common source is:
    -# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
    -# .
    +# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
    +# http://www.jstor.org/stable/1774359
     #
     # A reliable and entertaining source about time zones is
     # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
     #
    -# I invented the abbreviations marked `*' in the following table;
    +# I invented the abbreviations marked '*' in the following table;
     # the rest are from earlier versions of this file, or from other sources.
     # Corrections are welcome!
    -#		std dst
    -#		LMT	Local Mean Time
    -#	  8:00	WST WST	Western Australia
    -#	  8:45	CWST CWST Central Western Australia*
    -#	  9:00	JST	Japan
    -#	  9:30	CST CST	Central Australia
    -#	 10:00	EST EST	Eastern Australia
    -#	 10:00	ChST	Chamorro
    -#	 10:30	LHST LHST Lord Howe*
    -#	 11:30	NZMT NZST New Zealand through 1945
    -#	 12:00	NZST NZDT New Zealand 1946-present
    -#	 12:45	CHAST CHADT Chatham*
    -#	-11:00	SST	Samoa
    -#	-10:00	HST	Hawaii
    -#	- 8:00	PST	Pitcairn*
    +#		std	dst
    +#		LMT		Local Mean Time
    +#	  8:00	AWST	AWDT	Western Australia
    +#	  8:45	ACWST	ACWDT	Central Western Australia*
    +#	  9:00	JST		Japan
    +#	  9:30	ACST	ACDT	Central Australia
    +#	 10:00	AEST	AEDT	Eastern Australia
    +#	 10:00	ChST		Chamorro
    +#	 10:30	LHST	LHDT	Lord Howe*
    +#	 11:30	NZMT	NZST	New Zealand through 1945
    +#	 12:00	NZST	NZDT	New Zealand 1946-present
    +#	 12:15	CHAST		Chatham through 1945*
    +#	 12:45	CHAST	CHADT	Chatham 1946-present*
    +#	 13:00	WSST	WSDT	(western) Samoa 2011-present*
    +#	-11:30	WSST		Western Samoa through 1950*
    +#	-11:00	SST		Samoa
    +#	-10:00	HST		Hawaii
    +#	- 8:00	PST		Pitcairn*
     #
    -# See the `northamerica' file for Hawaii.
    -# See the `southamerica' file for Easter I and the Galapagos Is.
    +# See the 'northamerica' file for Hawaii.
    +# See the 'southamerica' file for Easter I and the Galápagos Is.
     
     ###############################################################################
     
     # Australia
     
    +# From Paul Eggert (2014-06-30):
    +# Daylight saving time has long been controversial in Australia, pitting
    +# region against region, rural against urban, and local against global.
    +# For example, in her review of Graeme Davison's _The Unforgiving
    +# Minute: how Australians learned to tell the time_ (1993), Perth native
    +# Phillipa J Martyr wrote, "The section entitled 'Saving Daylight' was
    +# very informative, but was (as can, sadly, only be expected from a
    +# Melbourne-based study) replete with the usual chuckleheaded
    +# Queenslanders and straw-chewing yokels from the West prattling fables
    +# about fading curtains and crazed farm animals."
    +# Electronic Journal of Australian and New Zealand History (1997-03-03)
    +# http://www.jcu.edu.au/aff/history/reviews/davison.htm
    +
     # From Paul Eggert (2005-12-08):
    -# 
     # Implementation Dates of Daylight Saving Time within Australia
    -#  summarizes daylight saving issues in Australia.
    +# http://www.bom.gov.au/climate/averages/tables/dst_times.shtml
    +# summarizes daylight saving issues in Australia.
     
     # From Arthur David Olson (2005-12-12):
    -# 
     # Lawlink NSW:Daylight Saving in New South Wales
    -#  covers New South Wales in particular.
    +# http://www.lawlink.nsw.gov.au/lawlink/Corporate/ll_agdinfo.nsf/pages/community_relations_daylight_saving
    +# covers New South Wales in particular.
     
     # From John Mackin (1991-03-06):
    -# We in Australia have _never_ referred to DST as `daylight' time.
    -# It is called `summer' time.  Now by a happy coincidence, `summer'
    -# and `standard' happen to start with the same letter; hence, the
    +# We in Australia have _never_ referred to DST as 'daylight' time.
    +# It is called 'summer' time.  Now by a happy coincidence, 'summer'
    +# and 'standard' happen to start with the same letter; hence, the
     # abbreviation does _not_ change...
     # The legislation does not actually define abbreviations, at least
     # in this State, but the abbreviation is just commonly taken to be the
     # initials of the phrase, and the legislation here uniformly uses
    -# the phrase `summer time' and does not use the phrase `daylight
    +# the phrase 'summer time' and does not use the phrase 'daylight
     # time'.
     # Announcers on the Commonwealth radio network, the ABC (for Australian
    -# Broadcasting Commission), use the phrases `Eastern Standard Time'
    -# or `Eastern Summer Time'.  (Note, though, that as I say in the
    +# Broadcasting Commission), use the phrases 'Eastern Standard Time'
    +# or 'Eastern Summer Time'.  (Note, though, that as I say in the
     # current australasia file, there is really no such thing.)  Announcers
     # on its overseas service, Radio Australia, use the same phrases
    -# prefixed by the word `Australian' when referring to local times;
    +# prefixed by the word 'Australian' when referring to local times;
     # time announcements on that service, naturally enough, are made in UTC.
     
    -# From Arthur David Olson (1992-03-08):
    -# Given the above, what's chosen for year-round use is:
    -#	CST	for any place operating at a GMTOFF of 9:30
    -#	WST	for any place operating at a GMTOFF of 8:00
    -#	EST	for any place operating at a GMTOFF of 10:00
    -
    -# From Chuck Soper (2006-06-01):
    -# I recently found this Australian government web page on time zones:
    -# 
    -# And this government web page lists time zone names and abbreviations:
    -# 
    -
    -# From Paul Eggert (2001-04-05), summarizing a long discussion about "EST"
    -# versus "AEST" etc.:
    +# From Paul Eggert (2014-06-30):
     #
    -# I see the following points of dispute:
    +# Inspired by Mackin's remarks quoted above, earlier versions of this
    +# file used "EST" for both Eastern Standard Time and Eastern Summer
    +# Time in Australia, and similarly for "CST", "CWST", and "WST".
    +# However, these abbreviations were confusing and were not common
    +# practice among Australians, and there were justifiable complaints
    +# about them, so I attempted to survey current Australian usage.
    +# For the tz database, the full English phrase is not that important;
    +# what matters is the abbreviation.  It's difficult to survey the web
    +# directly for abbreviation usage, as there are so many false hits for
    +# strings like "EST" and "EDT", so I looked for pages that defined an
    +# abbreviation for eastern or central DST in Australia, and got the
    +# following numbers of unique hits for the listed Google queries:
     #
    -# * How important are unique time zone abbreviations?
    +#   10 "Eastern Daylight Time AEST" site:au [some are false hits]
    +#   10 "Eastern Summer Time AEST" site:au
    +#   10 "Summer Time AEDT" site:au
    +#   13 "EDST Eastern Daylight Saving Time" site:au
    +#   18 "Summer Time ESST" site:au
    +#   28 "Eastern Daylight Saving Time EDST" site:au
    +#   39 "EDT Eastern Daylight Time" site:au [some are false hits]
    +#   53 "Eastern Daylight Time EDT" site:au [some are false hits]
    +#   54 "AEDT Australian Eastern Daylight Time" site:au
    +#  182 "Eastern Daylight Time AEDT" site:au
     #
    -#   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.
    +#   17 "Central Daylight Time CDT" site:au [some are false hits]
    +#   46 "Central Daylight Time ACDT" site:au
     #
    -#   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.
    +# I tried several other variants (e.g., "Eastern Summer Time EST") but
    +# they all returned fewer than 10 unique hits.  I also looked for pages
    +# mentioning both "western standard time" and an abbreviation, since
    +# there is no WST in the US to generate false hits, and found:
     #
    -# * Does the relevant legislation indicate which abbreviations should be used?
    +#  156 "western standard time" AWST site:au
    +#  226 "western standard time" WST site:au
     #
    -#   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.
    +# I then surveyed the top ten newspapers in Australia by circulation as
    +# listed in Wikipedia, using Google queries like "AEDT site:heraldsun.com.au"
    +# and obtaining estimated counts from the initial page of search results.
    +# All ten papers greatly preferred "AEDT" to "EDT".  The papers
    +# surveyed were the Herald Sun, The Daily Telegraph, The Courier-Mail,
    +# The Sydney Morning Herald, The West Australian, The Age, The Advertiser,
    +# The Australian, The Financial Review, and The Herald (Newcastle).
     #
    -#   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.
    +# I also searched for historical usage, to see whether abbreviations
    +# like "AEDT" are new.  A Trove search 
    +# found only one newspaper (The Canberra Times) with a house style
    +# dating back to the 1970s, I expect because other newspapers weren't
    +# fully indexed.  The Canberra Times strongly preferred abbreviations
    +# like "AEDT".  The first occurrence of "AEDT" was a World Weather
    +# column (1971-11-17, page 24), and of "ACDT" was a Scoreboard column
    +# (1993-01-24, p 16).  The style was the typical usage but was not
    +# strictly enforced; for example, "Welcome to the twilight zones ..."
    +# (1994-10-29, p 1) uses the abbreviations AEST/AEDT, CST/CDT, and
    +# WST, and goes on to say, "The confusion and frustration some feel
    +# about the lack of uniformity among Australia's six states and two
    +# territories has prompted one group to form its very own political
    +# party -- the Sydney-based Daylight Saving Extension Party."
     #
    -# * Do Australians more often use "Eastern Daylight Time" or "Eastern
    -#   Summer Time"?  Do they typically prefix the time zone names with
    -#   the word "Australian"?
    +# I also surveyed federal government sources.  They did not agree:
     #
    -#   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:
    +#   The Australian Government (2014-03-26)
    +#   http://australia.gov.au/about-australia/our-country/time
    +#   (This document was produced by the Department of Finance.)
    +#   AEST ACST AWST AEDT ACDT
     #
    -#     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
    +#   Bureau of Meteorology (2012-11-08)
    +#   http://www.bom.gov.au/climate/averages/tables/daysavtm.shtml
    +#   EST CST WST EDT CDT
     #
    -#   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.
    +#   Civil Aviation Safety Authority (undated)
    +#   http://services.casa.gov.au/outnback/inc/pages/episode3/episode-3_time_zones.shtml
    +#   EST CST WST (no abbreviations given for DST)
     #
    -#   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:
    +#   Geoscience Australia (2011-11-24)
    +#   http://www.ga.gov.au/geodesy/astro/sunrise.jsp
    +#   AEST ACST AWST AEDT ACDT
     #
    -#     161,304 "EST" and domain:au
    -#      25,156 "EDT" and domain:au
    -#      18,263 "AEST" and domain:au
    -#      10,416 "AEDT" and domain:au
    +#   Parliamentary Library (2008-11-10)
    +#   http://www.aph.gov.au/binaries/library/pubs/rp/2008-09/09rp14.pdf
    +#   EST CST WST preferred for standard time; AEST AEDT ACST ACDT also used
     #
    -#      14,538 "CST" and domain:au
    -#       5,728 "CDT" and domain:au
    -#         176 "ACST" and domain:au
    -#          29 "ACDT" and domain:au
    +#   The Transport Safety Bureau has an extensive series of accident reports,
    +#   and investigators seem to use whatever abbreviation they like.
    +#   Googling site:atsb.gov.au found the following number of unique hits:
    +#   311 "ESuT", 195 "EDT", 26 "AEDT", 83 "CSuT", 46 "CDT".
    +#   "_SuT" tended to appear in older reports, and "A_DT" tended to
    +#   appear in reports of events with international implications.
     #
    -#       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 the above it appears that there is a working consensus in
    +# Australia to use trailing "DT" for daylight saving time; although
    +# some sources use trailing "SST" or "ST" or "SuT" they are by far in
    +# the minority.  The case for leading "A" is weaker, but since it
    +# seems to be preferred in the overall web and is preferred in all
    +# the leading newspaper websites and in many government departments,
    +# it has a stronger case than omitting the leading "A".  The current
    +# version of the database therefore uses abbreviations like "AEST" and
    +# "AEDT" for Australian time zones.
     
     # From Paul Eggert (1995-12-19):
     # Shanks & Pottenger report 2:00 for all autumn changes in Australia and NZ.
     # Mark Prior writes that his newspaper
     # reports that NSW's fall 1995 change will occur at 2:00,
     # but Robert Elz says it's been 3:00 in Victoria since 1970
    -# and perhaps the newspaper's `2:00' is referring to standard time.
    +# and perhaps the newspaper's '2:00' is referring to standard time.
     # For now we'll continue to assume 2:00s for changes since 1960.
     
     # From Eric Ulevik (1998-01-05):
    @@ -1055,17 +999,14 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # relevant entries in this database.
     #
     # NSW (including LHI and Broken Hill):
    -# 
     # Standard Time Act 1987 (updated 1995-04-04)
    -# 
    +# http://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html
     # ACT
    -# 
     # Standard Time and Summer Time Act 1972
    -# 
    +# http://www.austlii.edu.au/au/legis/act/consol_act/stasta1972279/index.html
     # SA
    -# 
     # Standard Time Act, 1898
    -# 
    +# http://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html
     
     # From David Grosz (2005-06-13):
     # It was announced last week that Daylight Saving would be extended by
    @@ -1083,7 +1024,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # Victoria: I wasn't able to find anything separate, but the other articles
     # allude to it.
     # But not Queensland
    -# http://www.news.com.au/story/0,10117,15564030-1248,00.html.
    +# http://www.news.com.au/story/0,10117,15564030-1248,00.html
     
     # Northern Territory
     
    @@ -1130,9 +1071,9 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # The 1992 ending date used in the rules is a best guess;
     # it matches what was used in the past.
     
    -# 
     # The Australian Bureau of Meteorology FAQ
    -#  (1999-09-27) writes that Giles Meteorological Station uses
    +# http://www.bom.gov.au/faq/faqgen.htm
    +# (1999-09-27) writes that Giles Meteorological Station uses
     # South Australian time even though it's located in Western Australia.
     
     # Queensland
    @@ -1173,9 +1114,9 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # The chosen rules the union of the 1971/1972 change and the 1989-1992 changes.
     
     # From Christopher Hunt (2006-11-21), after an advance warning
    -# from Jesper Norgaard Welen (2006-11-01):
    +# from Jesper Nørgaard Welen (2006-11-01):
     # WA are trialing DST for three years.
    -# 
    +# http://www.parliament.wa.gov.au/parliament/bills.nsf/9A1B183144403DA54825721200088DF1/$File/Bill175-1B.pdf
     
     # From Rives McDow (2002-04-09):
     # The most interesting region I have found consists of three towns on the
    @@ -1189,7 +1130,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # From Paul Eggert (2002-04-09):
     # This is confirmed by the section entitled
     # "What's the deal with time zones???" in
    -# .
    +# http://www.earthsci.unimelb.edu.au/~awatkins/null.html
     #
     # From Alex Livingston (2006-12-07):
     # ... it was just on four years ago that I drove along the Eyre Highway,
    @@ -1337,7 +1278,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # Based on law library research by John Mackin,
     # who notes:
     #	In Australia, time is not legislated federally, but rather by the
    -#	individual states.  Thus, while such terms as ``Eastern Standard Time''
    +#	individual states.  Thus, while such terms as "Eastern Standard Time"
     #	[I mean, of course, Australian EST, not any other kind] are in common
     #	use, _they have NO REAL MEANING_, as they are not defined in the
     #	legislation.  This is very important to understand.
    @@ -1345,48 +1286,42 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     
     # From Eric Ulevik (1999-05-26):
     # DST will start in NSW on the last Sunday of August, rather than the usual
    -# October in 2000.  [See: Matthew Moore,
    -# 
    -# Two months more daylight saving
    -# 
    -# Sydney Morning Herald (1999-05-26).]
    +# October in 2000.  See: Matthew Moore,
    +# Two months more daylight saving, Sydney Morning Herald (1999-05-26).
    +# http://www.smh.com.au/news/9905/26/pageone/pageone4.html
     
     # From Paul Eggert (1999-09-27):
     # See the following official NSW source:
    -# 
     # Daylight Saving in New South Wales.
    -# 
    +# http://dir.gis.nsw.gov.au/cgi-bin/genobject/document/other/daylightsaving/tigGmZ
     #
     # Narrabri Shire (NSW) council has announced it will ignore the extension of
     # daylight saving next year.  See:
    -# 
     # Narrabri Council to ignore daylight saving
    -#  (1999-07-22).  For now, we'll wait to see if this really happens.
    +# http://abc.net.au/news/regionals/neweng/monthly/regeng-22jul1999-1.htm
    +# (1999-07-22).  For now, we'll wait to see if this really happens.
     #
     # Victoria will following NSW.  See:
    -# 
    -# Vic to extend daylight saving
    -#  (1999-07-28).
    +# Vic to extend daylight saving (1999-07-28)
    +# http://abc.net.au/local/news/olympics/1999/07/item19990728112314_1.htm
     #
     # However, South Australia rejected the DST request.  See:
    -# 
    -# South Australia rejects Olympics daylight savings request
    -#  (1999-07-19).
    +# South Australia rejects Olympics daylight savings request (1999-07-19)
    +# http://abc.net.au/news/olympics/1999/07/item19990719151754_1.htm
     #
     # Queensland also will not observe DST for the Olympics.  See:
    -# 
     # Qld says no to daylight savings for Olympics
    -#  (1999-06-01), which quotes Queensland Premier Peter Beattie as saying
    -# ``Look you've got to remember in my family when this came up last time
    +# http://abc.net.au/news/olympics/1999/06/item19990601114608_1.htm
    +# (1999-06-01), which quotes Queensland Premier Peter Beattie as saying
    +# "Look you've got to remember in my family when this came up last time
     # I voted for it, my wife voted against it and she said to me it's all very
     # well for you, you don't have to worry about getting the children out of
     # bed, getting them to school, getting them to sleep at night.
    -# I've been through all this argument domestically...my wife rules.''
    +# I've been through all this argument domestically...my wife rules."
     #
     # Broken Hill will stick with South Australian time in 2000.  See:
    -# 
    -# Broken Hill to be behind the times
    -#  (1999-07-21).
    +# Broken Hill to be behind the times (1999-07-21)
    +# http://abc.net.au/news/regionals/brokenh/monthly/regbrok-21jul1999-6.htm
     
     # IATA SSIM (1998-09) says that the spring 2000 change for Australian
     # Capital Territory, New South Wales except Lord Howe Island and Broken
    @@ -1402,7 +1337,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # Yancowinna
     
     # From John Mackin (1989-01-04):
    -# `Broken Hill' means the County of Yancowinna.
    +# 'Broken Hill' means the County of Yancowinna.
     
     # From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
     # # YANCOWINNA..  [ Confirmation courtesy of Broken Hill Postmaster ]
    @@ -1459,9 +1394,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # summer (southern hemisphere).
     #
     # From
    -# 
     # http://www.safework.sa.gov.au/uploaded_files/DaylightDatesSet.pdf
    -# 
     # The extended daylight saving period that South Australia has been trialling
     # for over the last year is now set to be ongoing.
     # Daylight saving will continue to start on the first Sunday in October each
    @@ -1471,9 +1404,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # the ACT for all 52 weeks of the year...
     #
     # We have a wrap-up here:
    -# 
     # http://www.timeanddate.com/news/time/south-australia-extends-dst.html
    -# 
     ###############################################################################
     
     # New Zealand
    @@ -1482,7 +1413,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # the 1989/90 year was a trial of an extended "daylight saving" period.
     # This trial was deemed successful and the extended period adopted for
     # subsequent years (with the addition of a further week at the start).
    -# source -- phone call to Ministry of Internal Affairs Head Office.
    +# source - phone call to Ministry of Internal Affairs Head Office.
     
     # From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
     # # The Country of New Zealand   (Australia's east island -) Gee they hate that!
    @@ -1524,6 +1455,19 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # that DST will begin on 2007-09-30 2008-04-06.
     # http://www.dia.govt.nz/diawebsite.nsf/wpg_URL/Services-Daylight-Saving-Daylight-saving-to-be-extended
     
    +# From Paul Eggert (2014-07-14):
    +# Chatham Island time was formally standardized on 1957-01-01 by
    +# New Zealand's Standard Time Amendment Act 1956 (1956-10-26).
    +# http://www.austlii.edu.au/nz/legis/hist_act/staa19561956n100244.pdf
    +# According to Google Books snippet view, a speaker in the New Zealand
    +# parliamentary debates in 1956 said "Clause 78 makes provision for standard
    +# time in the Chatham Islands.  The time there is 45 minutes in advance of New
    +# Zealand time.  I understand that is the time they keep locally, anyhow."
    +# For now, assume this practice goes back to the introduction of standard time
    +# in New Zealand, as this would make Chatham Islands time almost exactly match
    +# LMT back when New Zealand was at UTC+11:30; also, assume Chatham Islands did
    +# not observe New Zealand's prewar DST.
    +
     ###############################################################################
     
     
    @@ -1543,7 +1487,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     
     # From the BBC World Service in
     # http://news.bbc.co.uk/2/hi/asia-pacific/205226.stm (1998-10-31 16:03 UTC):
    -# The Fijiian government says the main reasons for the time change is to
    +# The Fijian government says the main reasons for the time change is to
     # improve productivity and reduce road accidents.... [T]he move is also
     # intended to boost Fiji's ability to attract tourists to witness the dawning
     # of the new millennium.
    @@ -1551,16 +1495,12 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # http://www.fiji.gov.fj/press/2000_09/2000_09_13-05.shtml (2000-09-13)
     # reports that Fiji has discontinued DST.
     
    -# Johnston
    -
    -# Johnston data is from usno1995.
    -
     
     # Kiribati
     
     # From Paul Eggert (1996-01-22):
     # Today's _Wall Street Journal_ (page 1) reports that Kiribati
    -# ``declared it the same day [throughout] the country as of Jan. 1, 1995''
    +# "declared it the same day [throughout] the country as of Jan. 1, 1995"
     # as part of the competition to be first into the 21st century.
     
     
    @@ -1575,8 +1515,8 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     
     # N Mariana Is, Guam
     
    -# Howse writes (p 153) ``The Spaniards, on the other hand, reached the
    -# Philippines and the Ladrones from America,'' and implies that the Ladrones
    +# Howse writes (p 153) "The Spaniards, on the other hand, reached the
    +# Philippines and the Ladrones from America," and implies that the Ladrones
     # (now called the Marianas) kept American date for quite some time.
     # For now, we assume the Ladrones switched at the same time as the Philippines;
     # see Asia/Manila.
    @@ -1590,17 +1530,16 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # Micronesia
     
     # Alan Eugene Davis writes (1996-03-16),
    -# ``I am certain, having lived there for the past decade, that "Truk"
    -# (now properly known as Chuuk) ... is in the time zone GMT+10.''
    +# "I am certain, having lived there for the past decade, that 'Truk'
    +# (now properly known as Chuuk) ... is in the time zone GMT+10."
     #
     # Shanks & Pottenger write that Truk switched from UTC+10 to UTC+11
     # on 1978-10-01; ignore this for now.
     
     # From Paul Eggert (1999-10-29):
     # The Federated States of Micronesia Visitors Board writes in
    -# 
    -# The Federated States of Micronesia - Visitor Information
    -#  (1999-01-26)
    +# The Federated States of Micronesia - Visitor Information (1999-01-26)
    +# http://www.fsmgov.org/info/clocks.html
     # that Truk and Yap are UTC+10, and Ponape and Kosrae are UTC+11.
     # We don't know when Kosrae switched from UTC+12; assume January 1 for now.
     
    @@ -1646,27 +1585,34 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # Sacramento but it was changed a couple of years ago.
     
     
    -# Samoa
    +# (Western) Samoa and American Samoa
     
     # Howse writes (p 153, citing p 10 of the 1883-11-18 New York Herald)
     # that in 1879 the King of Samoa decided to change
    -# ``the date in his kingdom from the Antipodean to the American system,
    -# ordaining -- by a masterpiece of diplomatic flattery -- that
    -# the Fourth of July should be celebrated twice in that year.''
    +# "the date in his kingdom from the Antipodean to the American system,
    +# ordaining - by a masterpiece of diplomatic flattery - that
    +# the Fourth of July should be celebrated twice in that year."
     
    +# Although Shanks & Pottenger says they both switched to UTC-11:30
    +# in 1911, and to UTC-11 in 1950. many earlier sources give UTC-11
    +# for American Samoa, e.g., the US National Bureau of Standards
    +# circular "Standard Time Throughout the World", 1932.
    +# Assume American Samoa switched to UTC-11 in 1911, not 1950,
    +# and that after 1950 they agreed until (western) Samoa skipped a
    +# day in 2011.  Assume also that the Samoas follow the US and New
    +# Zealand's "ST"/"DT" style of daylight-saving abbreviations.
     
     # Tonga
     
     # From Paul Eggert (1996-01-22):
    -# Today's _Wall Street Journal_ (p 1) reports that ``Tonga has been plotting
    -# to sneak ahead of [New Zealanders] by introducing daylight-saving time.''
    +# Today's _Wall Street Journal_ (p 1) reports that "Tonga has been plotting
    +# to sneak ahead of [New Zealanders] by introducing daylight-saving time."
     # Since Kiribati has moved the Date Line it's not clear what Tonga will do.
     
     # Don Mundell writes in the 1997-02-20 Tonga Chronicle
    -# 
    -# How Tonga became `The Land where Time Begins'
    -# :
    -
    +# How Tonga became 'The Land where Time Begins':
    +# http://www.tongatapu.net.to/tonga/homeland/timebegins.htm
    +#
     # Until 1941 Tonga maintained a standard time 50 minutes ahead of NZST
     # 12 hours and 20 minutes ahead of GMT.  When New Zealand adjusted its
     # standard time in 1940s, Tonga had the choice of subtracting from its
    @@ -1674,8 +1620,8 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # advancing its time to maintain the differential of 13 degrees
     # (approximately 50 minutes ahead of New Zealand time).
     #
    -# Because His Majesty King Taufa'ahau Tupou IV, then Crown Prince
    -# Tungi, preferred to ensure Tonga's title as the land where time
    +# Because His Majesty King Tāufaʻāhau Tupou IV, then Crown Prince
    +# Tungī, preferred to ensure Tonga's title as the land where time
     # begins, the Legislative Assembly approved the latter change.
     #
     # But some of the older, more conservative members from the outer
    @@ -1701,9 +1647,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # * Tonga will introduce DST in November
     #
     # I was given this link by John Letts:
    -# 
     # http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm
    -# 
     #
     # 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
    @@ -1711,9 +1655,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # (12 + 1 hour DST).
     
     # From Arthur David Olson (1999-09-20):
    -# According to 
    -# http://www.tongaonline.com/news/sept1799.html
    -# :
    +# According to :
     # "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
    @@ -1731,7 +1673,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # instead of the original reported date April 16. Unfortunately, the article
     # is no longer available on the site, and I did not make a copy of the
     # text, and I have forgotten to report it here.
    -# (Original URL was: http://www.tongaonline.com/news/march162000.htm )
    +# (Original URL was )
     
     # From Rives McDow (2000-12-01):
     # Tonga is observing DST as of 2000-11-04 and will stop on 2001-01-27.
    @@ -1751,7 +1693,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # From Vernice Anderson, Personal Secretary to Philip Jessup,
     # US Ambassador At Large (oral history interview, 1971-02-02):
     #
    -# Saturday, the 14th [of October, 1950] -- ...  The time was all the
    +# Saturday, the 14th [of October, 1950] - ...  The time was all the
     # more confusing at that point, because we had crossed the
     # International Date Line, thus getting two Sundays.  Furthermore, we
     # discovered that Wake Island had two hours of daylight saving time
    @@ -1796,7 +1738,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # on the high seas.  Whenever a ship was within the territorial waters of any
     # nation it would use that nation's standard time.  The captain was permitted
     # to change his ship's clocks at a time of his choice following his ship's
    -# entry into another zone time--he often chose midnight.  These zones were
    +# entry into another zone time - he often chose midnight.  These zones were
     # adopted by all major fleets between 1920 and 1925 but not by many
     # independent merchant ships until World War II.
     
    @@ -1804,6 +1746,6 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
     # (2005-03-20):
     #
     # The American Practical Navigator (2002)
    -# 
    +# http://pollux.nss.nima.mil/pubs/pubs_j_apn_sections.html?rid=187
     # talks only about the 180-degree meridian with respect to ships in
     # international waters; it ignores the international date line.
    diff --git a/jdk/test/sun/util/calendar/zi/tzdata/backward b/jdk/test/sun/util/calendar/zi/tzdata/backward
    index 5afe9a317ff..ba012f45733 100644
    --- a/jdk/test/sun/util/calendar/zi/tzdata/backward
    +++ b/jdk/test/sun/util/calendar/zi/tzdata/backward
    @@ -21,15 +21,15 @@
     # or visit www.oracle.com if you need additional information or have any
     # questions.
     #
    -# 
     # This file is in the public domain, so clarified as of
     # 2009-05-17 by Arthur David Olson.
     
     # This file provides links between current names for time zones
     # and their old names.  Many names changed in late 1993.
     
    +# Link	TARGET			LINK-NAME
     Link	Africa/Asmara		Africa/Asmera
    -Link	Africa/Bamako		Africa/Timbuktu
    +Link	Africa/Abidjan		Africa/Timbuktu
     Link	America/Argentina/Catamarca	America/Argentina/ComodRivadavia
     Link	America/Adak		America/Atka
     Link	America/Argentina/Buenos_Aires	America/Buenos_Aires
    @@ -50,8 +50,11 @@ Link	America/Port_of_Spain	America/Virgin
     Link	Pacific/Auckland	Antarctica/South_Pole
     Link	Asia/Ashgabat		Asia/Ashkhabad
     Link	Asia/Kolkata		Asia/Calcutta
    -Link	Asia/Chongqing		Asia/Chungking
    +Link	Asia/Shanghai		Asia/Chongqing
    +Link	Asia/Shanghai		Asia/Chungking
     Link	Asia/Dhaka		Asia/Dacca
    +Link	Asia/Shanghai		Asia/Harbin
    +Link	Asia/Urumqi		Asia/Kashgar
     Link	Asia/Kathmandu		Asia/Katmandu
     Link	Asia/Macau		Asia/Macao
     Link	Asia/Ho_Chi_Minh	Asia/Saigon
    diff --git a/jdk/test/sun/util/calendar/zi/tzdata/etcetera b/jdk/test/sun/util/calendar/zi/tzdata/etcetera
    index ebaa5fdfc04..d2fb91c9dd6 100644
    --- a/jdk/test/sun/util/calendar/zi/tzdata/etcetera
    +++ b/jdk/test/sun/util/calendar/zi/tzdata/etcetera
    @@ -21,7 +21,6 @@
     # or visit www.oracle.com if you need additional information or have any
     # questions.
     #
    -# 
     # This file is in the public domain, so clarified as of
     # 2009-05-17 by Arthur David Olson.
     
    @@ -37,7 +36,7 @@ Zone	Etc/UTC		0	-	UTC
     Zone	Etc/UCT		0	-	UCT
     
     # The following link uses older naming conventions,
    -# but it belongs here, not in the file `backward',
    +# but it belongs here, not in the file 'backward',
     # as functions like gmtime load the "GMT" file to handle leap seconds properly.
     # We want this to work even on installations that omit the other older names.
     Link	Etc/GMT				GMT
    diff --git a/jdk/test/sun/util/calendar/zi/tzdata/europe b/jdk/test/sun/util/calendar/zi/tzdata/europe
    index 226c393a0f2..0c5f5667da9 100644
    --- a/jdk/test/sun/util/calendar/zi/tzdata/europe
    +++ b/jdk/test/sun/util/calendar/zi/tzdata/europe
    @@ -21,15 +21,15 @@
     # or visit www.oracle.com if you need additional information or have any
     # questions.
     #
    -# 
     # This file is in the public domain, so clarified as of
     # 2009-05-17 by Arthur David Olson.
     
    -# This data is by no means authoritative; if you think you know better,
    +# This file is by no means authoritative; if you think you know better,
     # go ahead and edit the file (and please send any changes to
    -# tz@iana.org for general use in the future).
    +# tz@iana.org for general use in the future).  For more, please see
    +# the file CONTRIBUTING in the tz distribution.
     
    -# From Paul Eggert (2006-03-22):
    +# From Paul Eggert (2014-05-31):
     # A good source for time zone historical data outside the U.S. is
     # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
     # San Diego: ACS Publications, Inc. (2003).
    @@ -40,6 +40,9 @@
     # published semiannually.  Law sent in several helpful summaries
     # of the IATA's data after 1990.
     #
    +# A reliable and entertaining source about time zones is
    +# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
    +#
     # Except where otherwise noted, Shanks & Pottenger is the source for
     # entries through 1991, and IATA SSIM is the source for entries afterwards.
     #
    @@ -49,9 +52,9 @@
     #	Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated),
     #	which I found in the UCLA library.
     #
    -#	
     #	William Willett, The Waste of Daylight, 19th edition
    -#	 (1914-03)
    +#	
    +#	[PDF] (1914-03)
     #
     #	Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
     #	.  He writes:
    @@ -59,10 +62,20 @@
     #	may be sent to Mr. John Milne, Royal Geographical Society,
     #	Savile Row, London."  Nowadays please email them to tz@iana.org.
     #
    -#	Brazil's Departamento Servico da Hora (DSH),
    -#	
    +#	Byalokoz EL. New Counting of Time in Russia since July 1, 1919.
    +#	This Russian-language source was consulted by Vladimir Karpinsky; see
    +#	http://mm.icann.org/pipermail/tz/2014-August/021320.html
    +#	The full Russian citation is:
    +#	Бялокоз, Евгений Людвигович. Новый счет времени в течении суток
    +#	введенный декретом Совета народных комиссаров для всей России с 1-го
    +#	июля 1919 г. / Изд. 2-е Междуведомственной комиссии. - Петроград:
    +#	Десятая гос. тип., 1919.
    +#	http://resolver.gpntb.ru/purl?docushare/dsweb/Get/Resource-2011/Byalokoz__E.L.__Novyy__schet__vremeni__v__techenie__sutok__izd__2(1).pdf
    +#
    +#	Brazil's Divisão Serviço da Hora (DSHO),
     #	History of Summer Time
    -#	 (1998-09-21, in Portuguese)
    +#	
    +#	(1998-09-21, in Portuguese)
     
     #
     # I invented the abbreviations marked '*' in the following table;
    @@ -81,10 +94,8 @@
     #        1:00       CET CEST CEMT Central Europe
     #        1:00:14    SET           Swedish (1879-1899)*
     #        2:00       EET EEST      Eastern Europe
    -#        3:00       MSK MSD       Moscow
    -#
    -# A reliable and entertaining source about time zones, especially in Britain,
    -# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
    +#        3:00       FET           Further-eastern Europe*
    +#        3:00       MSK MSD  MSM* Moscow
     
     # From Peter Ilieve (1994-12-04),
     # The original six [EU members]: Belgium, France, (West) Germany, Italy,
    @@ -128,7 +139,7 @@
     # along the towpath within a few yards of it.'
     #
     # I have a one inch to one mile map of London and my estimate of the stone's
    -# position is 51 deg. 28' 30" N, 0 deg. 18' 45" W. The longitude should
    +# position is 51 degrees 28' 30" N, 0 degrees 18' 45" W. The longitude should
     # be within about +-2". The Ordnance Survey grid reference is TQ172761.
     #
     # [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.]
    @@ -160,8 +171,22 @@
     # transition date for London, namely 1847-12-01.  We don't know as much
     # about Dublin, so we use 1880-08-02, the legal transition time.
     
    -# From Paul Eggert (2003-09-27):
    -# Summer Time was first seriously proposed by William Willett (1857-1915),
    +# From Paul Eggert (2014-07-19):
    +# The ancients had no need for daylight saving, as they kept time
    +# informally or via hours whose length depended on the time of year.
    +# Daylight saving time in its modern sense was invented by the
    +# New Zealand entomologist George Vernon Hudson (1867-1946),
    +# whose day job as a postal clerk led him to value
    +# after-hours daylight in which to pursue his research.
    +# In 1895 he presented a paper to the Wellington Philosophical Society
    +# that proposed a two-hour daylight-saving shift.  See:
    +# Hudson GV. On seasonal time-adjustment in countries south of lat. 30 deg.
    +# Transactions and Proceedings of the New Zealand Institute. 1895;28:734
    +# http://rsnz.natlib.govt.nz/volume/rsnz_28/rsnz_28_00_006110.html
    +# Although some interest was expressed in New Zealand, his proposal
    +# did not find its way into law and eventually it was almost forgotten.
    +#
    +# In England, DST was independently reinvented by William Willett (1857-1915),
     # a London builder and member of the Royal Astronomical Society
     # who circulated a pamphlet "The Waste of Daylight" (1907)
     # that proposed advancing clocks 20 minutes on each of four Sundays in April,
    @@ -174,7 +199,7 @@
     # A monument to Willett was unveiled on 1927-05-21, in an open space in
     # a 45-acre wood near Chislehurst, Kent that was purchased by popular
     # subscription and open to the public.  On the south face of the monolith,
    -# designed by G. W. Miller, is the...William Willett Memorial Sundial,
    +# designed by G. W. Miller, is the William Willett Memorial Sundial,
     # which is permanently set to Summer Time.
     
     # From Winston Churchill (1934-04-28):
    @@ -183,9 +208,9 @@
     # between 160 and 170 hours more daylight leisure, to a war which
     # plunged Europe into darkness for four years, and shook the
     # foundations of civilization throughout the world.
    -#	-- 
    -#	"A Silent Toast to William Willett", Pictorial Weekly
    -#	
    +#	-- "A Silent Toast to William Willett", Pictorial Weekly;
    +#	republished in Finest Hour (Spring 2002) 1(114):26
    +#	http://www.winstonchurchill.org/images/finesthour/Vol.01%20No.114.pdf
     
     # From Paul Eggert (1996-09-03):
     # The OED Supplement says that the English originally said "Daylight Saving"
    @@ -194,7 +219,6 @@
     # proponents (who eventually won the argument) are quoted as using "Summer".
     
     # From Arthur David Olson (1989-01-19):
    -#
     # A source at the British Information Office in New York avers that it's
     # known as "British" Summer Time in all parts of the United Kingdom.
     
    @@ -221,8 +245,8 @@
     # official designation; the reply of the 21st was that there wasn't
     # but he couldn't think of anything better than the "Double British
     # Summer Time" that the BBC had been using informally.
    -# http://student.cusu.cam.ac.uk/~jsm28/british-time/bbc-19410418.png
    -# http://student.cusu.cam.ac.uk/~jsm28/british-time/ho-19410421.png
    +# http://www.polyomino.org.uk/british-time/bbc-19410418.png
    +# http://www.polyomino.org.uk/british-time/ho-19410421.png
     
     # From Sir Alexander Maxwell in the above-mentioned letter (1941-04-21):
     # [N]o official designation has as far as I know been adopted for the time
    @@ -239,23 +263,14 @@
     # the history of summer time legislation in the United Kingdom.
     # Since 1998 Joseph S. Myers has been updating
     # and extending this list, which can be found in
    -# http://student.cusu.cam.ac.uk/~jsm28/british-time/
    -# 
    -# History of legal time in Britain
    -# 
    -# Rob Crowther (2012-01-04) reports that that URL no longer
    -# exists, and the article can now be found at:
    -# 
     # http://www.polyomino.org.uk/british-time/
    -# 
     
     # From Joseph S. Myers (1998-01-06):
     #
     # The legal time in the UK outside of summer time is definitely GMT, not UTC;
     # see Lord Tanlaw's speech
    -# 
    -# (Lords Hansard 11 June 1997 columns 964 to 976)
    -# .
    +# http://www.publications.parliament.uk/pa/ld199798/ldhansrd/vo970611/text/70611-10.htm#70611-10_head0
    +# (Lords Hansard 11 June 1997 columns 964 to 976).
     
     # From Paul Eggert (2006-03-22):
     #
    @@ -295,8 +310,8 @@
     #   -- James Joyce, Ulysses
     
     # From Joseph S. Myers (2005-01-26):
    -# Irish laws are available online at www.irishstatutebook.ie.  These include
    -# various relating to legal time, for example:
    +# Irish laws are available online at .
    +# These include various relating to legal time, for example:
     #
     # ZZA13Y1923.html ZZA12Y1924.html ZZA8Y1925.html ZZSIV20PG1267.html
     #
    @@ -458,25 +473,27 @@ Rule	GB-Eire 1990	1995	-	Oct	Sun>=22	1:00u	0	GMT
     # Use Europe/London for Jersey, Guernsey, and the Isle of Man.
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Europe/London	-0:01:15 -	LMT	1847 Dec  1 0:00s
    +Zone	Europe/London	-0:01:15 -	LMT	1847 Dec  1  0:00s
     			 0:00	GB-Eire	%s	1968 Oct 27
    -			 1:00	-	BST	1971 Oct 31 2:00u
    +			 1:00	-	BST	1971 Oct 31  2:00u
     			 0:00	GB-Eire	%s	1996
     			 0:00	EU	GMT/BST
     Link	Europe/London	Europe/Jersey
     Link	Europe/London	Europe/Guernsey
     Link	Europe/London	Europe/Isle_of_Man
    +
    +# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Europe/Dublin	-0:25:00 -	LMT	1880 Aug  2
    -			-0:25:21 -	DMT	1916 May 21 2:00
    -			-0:25:21 1:00	IST	1916 Oct  1 2:00s
    +			-0:25:21 -	DMT	1916 May 21  2:00
    +			-0:25:21 1:00	IST	1916 Oct  1  2:00s
     			 0:00	GB-Eire	%s	1921 Dec  6 # independence
    -			 0:00	GB-Eire	GMT/IST	1940 Feb 25 2:00
    -			 0:00	1:00	IST	1946 Oct  6 2:00
    -			 0:00	-	GMT	1947 Mar 16 2:00
    -			 0:00	1:00	IST	1947 Nov  2 2:00
    -			 0:00	-	GMT	1948 Apr 18 2:00
    +			 0:00	GB-Eire	GMT/IST	1940 Feb 25  2:00
    +			 0:00	1:00	IST	1946 Oct  6  2:00
    +			 0:00	-	GMT	1947 Mar 16  2:00
    +			 0:00	1:00	IST	1947 Nov  2  2:00
    +			 0:00	-	GMT	1948 Apr 18  2:00
     			 0:00	GB-Eire	GMT/IST	1968 Oct 27
    -			 1:00	-	IST	1971 Oct 31 2:00u
    +			 1:00	-	IST	1971 Oct 31  2:00u
     			 0:00	GB-Eire	GMT/IST	1996
     			 0:00	EU	GMT/IST
     
    @@ -495,10 +512,9 @@ Rule	EU	1979	1995	-	Sep	lastSun	 1:00u	0	-
     Rule	EU	1981	max	-	Mar	lastSun	 1:00u	1:00	S
     Rule	EU	1996	max	-	Oct	lastSun	 1:00u	0	-
     # The most recent directive covers the years starting in 2002.  See:
    -# 
     # Directive 2000/84/EC of the European Parliament and of the Council
     # of 19 January 2001 on summer-time arrangements.
    -# 
    +# http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:32000L0084:EN:NOT
     
     # W-Eur differs from EU only in that W-Eur uses standard time.
     Rule	W-Eur	1977	1980	-	Apr	Sun>=1	 1:00s	1:00	S
    @@ -521,18 +537,18 @@ Rule	C-Eur	1943	only	-	Oct	 4	 2:00s	0	-
     Rule	C-Eur	1944	1945	-	Apr	Mon>=1	 2:00s	1:00	S
     # Whitman gives 1944 Oct 7; go with Shanks & Pottenger.
     Rule	C-Eur	1944	only	-	Oct	 2	 2:00s	0	-
    -# From Jesper Norgaard Welen (2008-07-13):
    +# From Jesper Nørgaard Welen (2008-07-13):
     #
     # I found what is probably a typo of 2:00 which should perhaps be 2:00s
     # in the C-Eur rule from tz database version 2008d (this part was
    -# corrected in version 2008d). The circumstancial evidence is simply the
    +# corrected in version 2008d). The circumstantial evidence is simply the
     # tz database itself, as seen below:
     #
     # Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15  0:01
     #    0:00 France WE%sT 1945 Sep 16  3:00
     #
     # Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
    -#    0:00 France WE%sT 1945 Sep 16 3:00
    +#    0:00 France WE%sT 1945 Sep 16  3:00
     #
     # Zone Europe/Belgrade 1:22:00 - LMT 1884
     #    1:00 1:00 CEST 1945 Sep 16  2:00s
    @@ -576,16 +592,16 @@ Rule	E-Eur	1981	max	-	Mar	lastSun	 0:00	1:00	S
     Rule	E-Eur	1996	max	-	Oct	lastSun	 0:00	0	-
     
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -Rule	Russia	1917	only	-	Jul	 1	23:00	1:00	MST	# Moscow Summer Time
    -Rule	Russia	1917	only	-	Dec	28	 0:00	0	MMT	# Moscow Mean Time
    -Rule	Russia	1918	only	-	May	31	22:00	2:00	MDST	# Moscow Double Summer Time
    +Rule	Russia	1917	only	-	Jul	 1	23:00	1:00	MST  # Moscow Summer Time
    +Rule	Russia	1917	only	-	Dec	28	 0:00	0	MMT  # Moscow Mean Time
    +Rule	Russia	1918	only	-	May	31	22:00	2:00	MDST # Moscow Double Summer Time
     Rule	Russia	1918	only	-	Sep	16	 1:00	1:00	MST
     Rule	Russia	1919	only	-	May	31	23:00	2:00	MDST
    -Rule	Russia	1919	only	-	Jul	 1	 2:00	1:00	S
    -Rule	Russia	1919	only	-	Aug	16	 0:00	0	-
    -Rule	Russia	1921	only	-	Feb	14	23:00	1:00	S
    -Rule	Russia	1921	only	-	Mar	20	23:00	2:00	M # Midsummer
    -Rule	Russia	1921	only	-	Sep	 1	 0:00	1:00	S
    +Rule	Russia	1919	only	-	Jul	 1	 2:00	1:00	MSD
    +Rule	Russia	1919	only	-	Aug	16	 0:00	0	MSK
    +Rule	Russia	1921	only	-	Feb	14	23:00	1:00	MSD
    +Rule	Russia	1921	only	-	Mar	20	23:00	2:00	MSM  # Midsummer
    +Rule	Russia	1921	only	-	Sep	 1	 0:00	1:00	MSD
     Rule	Russia	1921	only	-	Oct	 1	 0:00	0	-
     # Act No.925 of the Council of Ministers of the USSR (1980-10-24):
     Rule	Russia	1981	1984	-	Apr	 1	 0:00	1:00	S
    @@ -607,14 +623,10 @@ Rule	Russia	1996	2010	-	Oct	lastSun	 2:00s	0	-
     # According to the law Russia is abolishing daylight saving time.
     #
     # Medvedev signed a law "On the Calculation of Time" (in russian):
    -# 
     # http://bmockbe.ru/events/?ID=7583
    -# 
     #
     # Medvedev signed a law on the calculation of the time (in russian):
    -# 
     # http://www.regnum.ru/news/polit/1413906.html
    -# 
     
     # From Arthur David Olson (2011-06-15):
     # Take "abolishing daylight saving time" to mean that time is now considered
    @@ -634,10 +646,10 @@ Zone	EET		2:00	EU	EE%sT
     # From Markus Kuhn (1996-07-12):
     # The official German names ... are
     #
    -#	Mitteleuropaeische Zeit (MEZ)         = UTC+01:00
    -#	Mitteleuropaeische Sommerzeit (MESZ)  = UTC+02:00
    +#	Mitteleuropäische Zeit (MEZ)         = UTC+01:00
    +#	Mitteleuropäische Sommerzeit (MESZ)  = UTC+02:00
     #
    -# as defined in the German Time Act (Gesetz ueber die Zeitbestimmung (ZeitG),
    +# as defined in the German Time Act (Gesetz über die Zeitbestimmung (ZeitG),
     # 1978-07-25, Bundesgesetzblatt, Jahrgang 1978, Teil I, S. 1110-1111)....
     # I wrote ... to the German Federal Physical-Technical Institution
     #
    @@ -692,7 +704,7 @@ Zone	Europe/Tirane	1:19:20 -	LMT	1914
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Europe/Andorra	0:06:04 -	LMT	1901
     			0:00	-	WET	1946 Sep 30
    -			1:00	-	CET	1985 Mar 31 2:00
    +			1:00	-	CET	1985 Mar 31  2:00
     			1:00	EU	CE%sT
     
     # Austria
    @@ -718,9 +730,9 @@ Rule	Austria	1980	only	-	Sep	28	0:00	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Europe/Vienna	1:05:21 -	LMT	1893 Apr
     			1:00	C-Eur	CE%sT	1920
    -			1:00	Austria	CE%sT	1940 Apr  1 2:00s
    -			1:00	C-Eur	CE%sT	1945 Apr  2 2:00s
    -			1:00	1:00	CEST	1945 Apr 12 2:00s
    +			1:00	Austria	CE%sT	1940 Apr  1  2:00s
    +			1:00	C-Eur	CE%sT	1945 Apr  2  2:00s
    +			1:00	1:00	CEST	1945 Apr 12  2:00s
     			1:00	-	CET	1946
     			1:00	Austria	CE%sT	1981
     			1:00	EU	CE%sT
    @@ -731,38 +743,29 @@ Zone	Europe/Vienna	1:05:21 -	LMT	1893 Apr
     # GMT+3 without DST (was GMT+2 with DST).
     #
     # Sources (Russian language):
    -# 1.
    -# 
     # http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html
    -# 
    -# 2.
    -# 
     # http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/
    -# 
    -# 3.
    -# 
     # http://news.tut.by/society/250578.html
    -# 
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Europe/Minsk	1:50:16 -	LMT	1880
    -			1:50	-	MMT	1924 May 2 # Minsk Mean Time
    +			1:50	-	MMT	1924 May  2 # Minsk Mean Time
     			2:00	-	EET	1930 Jun 21
     			3:00	-	MSK	1941 Jun 28
     			1:00	C-Eur	CE%sT	1944 Jul  3
     			3:00	Russia	MSK/MSD	1990
    -			3:00	-	MSK	1991 Mar 31 2:00s
    -			2:00	1:00	EEST	1991 Sep 29 2:00s
    -			2:00	-	EET	1992 Mar 29 0:00s
    -			2:00	1:00	EEST	1992 Sep 27 0:00s
    -			2:00	Russia	EE%sT	2011 Mar 27 2:00s
    -			3:00	-	FET # Further-eastern European Time
    +			3:00	-	MSK	1991 Mar 31  2:00s
    +			2:00	1:00	EEST	1991 Sep 29  2:00s
    +			2:00	-	EET	1992 Mar 29  0:00s
    +			2:00	1:00	EEST	1992 Sep 27  0:00s
    +			2:00	Russia	EE%sT	2011 Mar 27  2:00s
    +			3:00	-	FET
     
     # Belgium
     #
     # From Paul Eggert (1997-07-02):
     # Entries from 1918 through 1991 are taken from:
     #	Annuaire de L'Observatoire Royal de Belgique,
    -#	Avenue Circulaire, 3, B-1180 BRUXELLES, CLVIIe annee, 1991
    +#	Avenue Circulaire, 3, B-1180 BRUXELLES, CLVIIe année, 1991
     #	(Imprimerie HAYEZ, s.p.r.l., Rue Fin, 4, 1080 BRUXELLES, MCMXC),
     #	pp 8-9.
     # LMT before 1892 was 0:17:30, according to the official journal of Belgium:
    @@ -812,7 +815,7 @@ Rule	Belgium	1946	only	-	May	19	 2:00s	1:00	S
     Rule	Belgium	1946	only	-	Oct	 7	 2:00s	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Europe/Brussels	0:17:30 -	LMT	1880
    -			0:17:30	-	BMT	1892 May  1 12:00 # Brussels MT
    +			0:17:30	-	BMT	1892 May  1 12:00  # Brussels MT
     			0:00	-	WET	1914 Nov  8
     			1:00	-	CET	1916 May  1  0:00
     			1:00	C-Eur	CE%sT	1918 Nov 11 11:00u
    @@ -828,8 +831,8 @@ Zone	Europe/Brussels	0:17:30 -	LMT	1880
     #
     # From Plamen Simenov via Steffen Thorsen (1999-09-09):
     # A document of Government of Bulgaria (No.94/1997) says:
    -# EET --> EETDST is in 03:00 Local time in last Sunday of March ...
    -# EETDST --> EET is in 04:00 Local time in last Sunday of October
    +# EET -> EETDST is in 03:00 Local time in last Sunday of March ...
    +# EETDST -> EET is in 04:00 Local time in last Sunday of October
     #
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
     Rule	Bulg	1979	only	-	Mar	31	23:00	1:00	S
    @@ -842,7 +845,7 @@ Zone	Europe/Sofia	1:33:16 -	LMT	1880
     			1:56:56	-	IMT	1894 Nov 30 # Istanbul MT?
     			2:00	-	EET	1942 Nov  2  3:00
     			1:00	C-Eur	CE%sT	1945
    -			1:00	-	CET	1945 Apr 2 3:00
    +			1:00	-	CET	1945 Apr  2  3:00
     			2:00	-	EET	1979 Mar 31 23:00
     			2:00	Bulg	EE%sT	1982 Sep 26  2:00
     			2:00	C-Eur	EE%sT	1991
    @@ -866,15 +869,15 @@ Rule	Czech	1948	only	-	Apr	18	2:00s	1:00	S
     Rule	Czech	1949	only	-	Apr	 9	2:00s	1:00	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Europe/Prague	0:57:44 -	LMT	1850
    -			0:57:44	-	PMT	1891 Oct     # Prague Mean Time
    -			1:00	C-Eur	CE%sT	1944 Sep 17 2:00s
    +			0:57:44	-	PMT	1891 Oct    # Prague Mean Time
    +			1:00	C-Eur	CE%sT	1944 Sep 17  2:00s
     			1:00	Czech	CE%sT	1979
     			1:00	EU	CE%sT
     # Use Europe/Prague also for Slovakia.
     
     # Denmark, Faroe Islands, and Greenland
     
    -# From Jesper Norgaard Welen (2005-04-26):
    +# From Jesper Nørgaard Welen (2005-04-26):
     # http://www.hum.aau.dk/~poe/tid/tine/DanskTid.htm says that the law
     # [introducing standard time] was in effect from 1894-01-01....
     # The page http://www.retsinfo.dk/_GETDOCI_/ACCN/A18930008330-REGL
    @@ -884,7 +887,7 @@ Zone	Europe/Prague	0:57:44 -	LMT	1850
     # http://www.retsinfo.dk/_GETDOCI_/ACCN/A19722110030-REGL
     #
     # This provoked a new law from 1974 to make possible summer time changes
    -# in subsequenet decrees with the law
    +# in subsequent decrees with the law
     # http://www.retsinfo.dk/_GETDOCI_/ACCN/A19740022330-REGL
     #
     # It seems however that no decree was set forward until 1980.  I have
    @@ -899,7 +902,7 @@ Zone	Europe/Prague	0:57:44 -	LMT	1850
     # was suspended on that night):
     # http://www.retsinfo.dk/_GETDOCI_/ACCN/C19801120554-REGL
     
    -# From Jesper Norgaard Welen (2005-06-11):
    +# From Jesper Nørgaard Welen (2005-06-11):
     # The Herning Folkeblad (1980-09-26) reported that the night between
     # Saturday and Sunday the clock is set back from three to two.
     
    @@ -923,11 +926,11 @@ Rule	Denmark	1948	only	-	Aug	 8	 2:00s	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Europe/Copenhagen	 0:50:20 -	LMT	1890
     			 0:50:20 -	CMT	1894 Jan  1 # Copenhagen MT
    -			 1:00	Denmark	CE%sT	1942 Nov  2 2:00s
    -			 1:00	C-Eur	CE%sT	1945 Apr  2 2:00
    +			 1:00	Denmark	CE%sT	1942 Nov  2  2:00s
    +			 1:00	C-Eur	CE%sT	1945 Apr  2  2:00
     			 1:00	Denmark	CE%sT	1980
     			 1:00	EU	CE%sT
    -Zone Atlantic/Faroe	-0:27:04 -	LMT	1908 Jan 11	# Torshavn
    +Zone Atlantic/Faroe	-0:27:04 -	LMT	1908 Jan 11 # Tórshavn
     			 0:00	-	WET	1981
     			 0:00	EU	WE%sT
     #
    @@ -939,11 +942,11 @@ Zone Atlantic/Faroe	-0:27:04 -	LMT	1908 Jan 11	# Torshavn
     # From Paul Eggert (2006-03-22):
     # Greenland joined the EU as part of Denmark, obtained home rule on 1979-05-01,
     # and left the EU on 1985-02-01.  It therefore should have been using EU
    -# rules at least through 1984.  Shanks & Pottenger say Scoresbysund and Godthab
    +# rules at least through 1984.  Shanks & Pottenger say Scoresbysund and Godthåb
     # used C-Eur rules after 1980, but IATA SSIM (1991/1996) says they use EU
     # rules since at least 1991.  Assume EU rules since 1980.
     
    -# From Gwillin Law (2001-06-06), citing
    +# From Gwillim Law (2001-06-06), citing
     #  (2001-03-15),
     # and with translations corrected by Steffen Thorsen:
     #
    @@ -978,16 +981,16 @@ Zone Atlantic/Faroe	-0:27:04 -	LMT	1908 Jan 11	# Torshavn
     # DPC research station at Zackenberg.
     #
     # Scoresbysund and two small villages nearby keep time UTC-1 and use
    -# the same daylight savings time period as in West Greenland (Godthab).
    +# the same daylight savings time period as in West Greenland (Godthåb).
     #
    -# The rest of Greenland, including Godthab (this area, although it
    +# The rest of Greenland, including Godthåb (this area, although it
     # includes central Greenland, is known as west Greenland), keeps time
     # UTC-3, with daylight savings methods according to European rules.
     #
     # It is common procedure to use UTC 0 in the wilderness of East and
     # North Greenland, because it is mainly Icelandic aircraft operators
     # maintaining traffic in these areas.  However, the official status of
    -# this area is that it sticks with Godthab time.  This area might be
    +# this area is that it sticks with Godthåb time.  This area might be
     # considered a dual time zone in some respects because of this.
     
     # From Rives McDow (2001-11-19):
    @@ -996,8 +999,8 @@ Zone Atlantic/Faroe	-0:27:04 -	LMT	1908 Jan 11	# Torshavn
     
     # From Paul Eggert (2006-03-22):
     # From 1997 on the CIA map shows Danmarkshavn on GMT;
    -# the 1995 map as like Godthab.
    -# For lack of better info, assume they were like Godthab before 1996.
    +# the 1995 map as like Godthåb.
    +# For lack of better info, assume they were like Godthåb before 1996.
     # startkart.no says Thule does not observe DST, but this is clearly an error,
     # so go with Shanks & Pottenger for Thule transitions until this year.
     # For 2007 on assume Thule will stay in sync with US DST rules.
    @@ -1012,15 +1015,15 @@ Rule	Thule	2007	max	-	Nov	Sun>=1	2:00	0	S
     #
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Danmarkshavn -1:14:40 -	LMT	1916 Jul 28
    -			-3:00	-	WGT	1980 Apr  6 2:00
    +			-3:00	-	WGT	1980 Apr  6  2:00
     			-3:00	EU	WG%sT	1996
     			0:00	-	GMT
     Zone America/Scoresbysund -1:27:52 -	LMT	1916 Jul 28 # Ittoqqortoormiit
    -			-2:00	-	CGT	1980 Apr  6 2:00
    +			-2:00	-	CGT	1980 Apr  6  2:00
     			-2:00	C-Eur	CG%sT	1981 Mar 29
     			-1:00	EU	EG%sT
     Zone America/Godthab	-3:26:56 -	LMT	1916 Jul 28 # Nuuk
    -			-3:00	-	WGT	1980 Apr  6 2:00
    +			-3:00	-	WGT	1980 Apr  6  2:00
     			-3:00	EU	WG%sT
     Zone America/Thule	-4:35:08 -	LMT	1916 Jul 28 # Pituffik air base
     			-4:00	Thule	A%sT
    @@ -1042,17 +1045,16 @@ Zone America/Thule	-4:35:08 -	LMT	1916 Jul 28 # Pituffik air base
     # summer time next spring."
     
     # From Peter Ilieve (1998-11-04), heavily edited:
    -# 
     # The 1998-09-22 Estonian time law
    -# 
    +# http://trip.rk.ee/cgi-bin/thw?${BASE}=akt&${OOHTML}=rtd&TA=1998&TO=1&AN=1390
     # refers to the Eighth Directive and cites the association agreement between
    -# the EU and Estonia, ratified by the Estonian law (RT II 1995, 22--27, 120).
    +# the EU and Estonia, ratified by the Estonian law (RT II 1995, 22-27, 120).
     #
     # I also asked [my relative] whether they use any standard abbreviation
     # for their standard and summer times. He says no, they use "suveaeg"
     # (summer time) and "talveaeg" (winter time).
     
    -# From The Baltic Times (1999-09-09)
    +# From The Baltic Times  (1999-09-09)
     # via Steffen Thorsen:
     # This year will mark the last time Estonia shifts to summer time,
     # a council of the ruling coalition announced Sept. 6....
    @@ -1070,19 +1072,19 @@ Zone America/Thule	-4:35:08 -	LMT	1916 Jul 28 # Pituffik air base
     # The Estonian government has changed once again timezone politics.
     # Now we are using again EU rules.
     #
    -# From Urmet Jaanes (2002-03-28):
    +# From Urmet Jänes (2002-03-28):
     # The legislative reference is Government decree No. 84 on 2002-02-21.
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Europe/Tallinn	1:39:00	-	LMT	1880
    -			1:39:00	-	TMT	1918 Feb # Tallinn Mean Time
    +			1:39:00	-	TMT	1918 Feb    # Tallinn Mean Time
     			1:00	C-Eur	CE%sT	1919 Jul
     			1:39:00	-	TMT	1921 May
     			2:00	-	EET	1940 Aug  6
     			3:00	-	MSK	1941 Sep 15
     			1:00	C-Eur	CE%sT	1944 Sep 22
    -			3:00	Russia	MSK/MSD	1989 Mar 26 2:00s
    -			2:00	1:00	EEST	1989 Sep 24 2:00s
    +			3:00	Russia	MSK/MSD	1989 Mar 26  2:00s
    +			2:00	1:00	EEST	1989 Sep 24  2:00s
     			2:00	C-Eur	EE%sT	1998 Sep 22
     			2:00	EU	EE%sT	1999 Nov  1
     			2:00	-	EET	2002 Feb 21
    @@ -1104,35 +1106,45 @@ Zone	Europe/Tallinn	1:39:00	-	LMT	1880
     # This is documented in Heikki Oja: Aikakirja 2007, published by The Almanac
     # Office of University of Helsinki, ISBN 952-10-3221-9, available online (in
     # Finnish) at
    -#
    -# 
     # http://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf
    -# 
     #
     # Page 105 (56 in PDF version) has a handy table of all past daylight savings
     # transitions. It is easy enough to interpret without Finnish skills.
     #
     # This is also confirmed by Finnish Broadcasting Company's archive at:
    -#
    -# 
     # http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401
    -# 
     #
     # The news clip from 1981 says that "the time between 2 and 3 o'clock does not
     # exist tonight."
     
    +# From Konstantin Hyppönen (2014-06-13):
    +# [Heikki Oja's book Aikakirja 2013]
    +# http://almanakka.helsinki.fi/images/aikakirja/Aikakirja2013kokonaan.pdf
    +# pages 104-105, including a scan from a newspaper published on Apr 2 1942
    +# say that ... [o]n Apr 2 1942, 24 o'clock (which means Apr 3 1942,
    +# 00:00), clocks were moved one hour forward. The newspaper
    +# mentions "on the night from Thursday to Friday"....
    +# On Oct 4 1942, clocks were moved at 1:00 one hour backwards.
    +#
    +# From Paul Eggert (2014-06-14):
    +# Go with Oja over Shanks.
    +
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -Rule	Finland	1942	only	-	Apr	3	0:00	1:00	S
    -Rule	Finland	1942	only	-	Oct	3	0:00	0	-
    +Rule	Finland	1942	only	-	Apr	2	24:00	1:00	S
    +Rule	Finland	1942	only	-	Oct	4	1:00	0	-
     Rule	Finland	1981	1982	-	Mar	lastSun	2:00	1:00	S
     Rule	Finland	1981	1982	-	Sep	lastSun	3:00	0	-
    +
    +# Milne says Helsinki (Helsingfors) time was 1:39:49.2 (official document);
    +# round to nearest.
    +
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Europe/Helsinki	1:39:52 -	LMT	1878 May 31
    -			1:39:52	-	HMT	1921 May    # Helsinki Mean Time
    +Zone	Europe/Helsinki	1:39:49 -	LMT	1878 May 31
    +			1:39:49	-	HMT	1921 May    # Helsinki Mean Time
     			2:00	Finland	EE%sT	1983
     			2:00	EU	EE%sT
     
    -# Aaland Is
    +# Åland Is
     Link	Europe/Helsinki	Europe/Mariehamn
     
     
    @@ -1140,14 +1152,14 @@ Link	Europe/Helsinki	Europe/Mariehamn
     
     # From Ciro Discepolo (2000-12-20):
     #
    -# Henri Le Corre, Regimes Horaires pour le monde entier, Editions
    +# Henri Le Corre, Régimes horaires pour le monde entier, Éditions
     # Traditionnelles - Paris 2 books, 1993
     #
    -# Gabriel, Traite de l'heure dans le monde, Guy Tredaniel editeur,
    +# Gabriel, Traité de l'heure dans le monde, Guy Trédaniel,
     # Paris, 1991
     #
    -# Francoise Gauquelin, Problemes de l'heure resolus en astrologie,
    -# Guy tredaniel, Paris 1987
    +# Françoise Gauquelin, Problèmes de l'heure résolus en astrologie,
    +# Guy Trédaniel, Paris 1987
     
     
     #
    @@ -1188,16 +1200,16 @@ Rule	France	1939	only	-	Nov	18	23:00s	0	-
     Rule	France	1940	only	-	Feb	25	 2:00	1:00	S
     # The French rules for 1941-1944 were not used in Paris, but Shanks & Pottenger
     # write that they were used in Monaco and in many French locations.
    -# Le Corre writes that the upper limit of the free zone was Arneguy, Orthez,
    -# Mont-de-Marsan, Bazas, Langon, Lamotte-Montravel, Marouil, La
    -# Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Descartes,
    +# Le Corre writes that the upper limit of the free zone was Arnéguy, Orthez,
    +# Mont-de-Marsan, Bazas, Langon, Lamothe-Montravel, Marœuil, La
    +# Rochefoucauld, Champagne-Mouton, La Roche-Posay, La Haye-Descartes,
     # Loches, Montrichard, Vierzon, Bourges, Moulins, Digoin,
    -# Paray-le-Monial, Montceau-les-Mines, Chalons-sur-Saone, Arbois,
    +# Paray-le-Monial, Montceau-les-Mines, Chalon-sur-Saône, Arbois,
     # Dole, Morez, St-Claude, and Collonges (Haute-Savoie).
     Rule	France	1941	only	-	May	 5	 0:00	2:00	M # Midsummer
     # Shanks & Pottenger say this transition occurred at Oct 6 1:00,
     # but go with Denis Excoffier (1997-12-12),
    -# who quotes the Ephemerides Astronomiques for 1998 from Bureau des Longitudes
    +# who quotes the Ephémérides astronomiques for 1998 from Bureau des Longitudes
     # as saying 5/10/41 22hUT.
     Rule	France	1941	only	-	Oct	 6	 0:00	1:00	S
     Rule	France	1942	only	-	Mar	 9	 0:00	2:00	M
    @@ -1218,7 +1230,7 @@ Rule	France	1976	only	-	Sep	26	 1:00	0	-
     # on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC.
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Europe/Paris	0:09:21 -	LMT	1891 Mar 15  0:01
    -			0:09:21	-	PMT	1911 Mar 11  0:01  # Paris MT
    +			0:09:21	-	PMT	1911 Mar 11  0:01 # Paris MT
     # Shanks & Pottenger give 1940 Jun 14 0:00; go with Excoffier and Le Corre.
     			0:00	France	WE%sT	1940 Jun 14 23:00
     # Le Corre says Paris stuck with occupied-France time after the liberation;
    @@ -1235,15 +1247,13 @@ Zone	Europe/Paris	0:09:21 -	LMT	1891 Mar 15  0:01
     # Bundesanstalt contains DST information back to 1916.
     # [See tz-link.htm for the URL.]
     
    -# From Joerg Schilling (2002-10-23):
    +# From Jörg Schilling (2002-10-23):
     # In 1945, Berlin was switched to Moscow Summer time (GMT+4) by
    -# 
    -# General [Nikolai] Bersarin.
    +# http://www.dhm.de/lemo/html/biografien/BersarinNikolai/
    +# General [Nikolai] Bersarin.
     
     # From Paul Eggert (2003-03-08):
    -# 
     # http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf
    -# 
     # says that Bersarin issued an order to use Moscow time on May 20.
     # However, Moscow did not observe daylight saving in 1945, so
     # this was equivalent to CEMT (GMT+3), not GMT+4.
    @@ -1268,23 +1278,23 @@ Rule SovietZone	1945	only	-	Nov	18	2:00s	0	-
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Europe/Berlin	0:53:28 -	LMT	1893 Apr
    -			1:00	C-Eur	CE%sT	1945 May 24 2:00
    +			1:00	C-Eur	CE%sT	1945 May 24  2:00
     			1:00 SovietZone	CE%sT	1946
     			1:00	Germany	CE%sT	1980
     			1:00	EU	CE%sT
     
     # From Tobias Conradi (2011-09-12):
    -# Busingen , surrounded by the Swiss canton
    +# Büsingen , surrounded by the Swiss canton
     # Schaffhausen, did not start observing DST in 1980 as the rest of DE
     # (West Germany at that time) and DD (East Germany at that time) did.
     # DD merged into DE, the area is currently covered by code DE in ISO 3166-1,
     # which in turn is covered by the zone Europe/Berlin.
     #
    -# Source for the time in Busingen 1980:
    +# Source for the time in Büsingen 1980:
     # http://www.srf.ch/player/video?id=c012c029-03b7-4c2b-9164-aa5902cd58d3
     
     # From Arthur David Olson (2012-03-03):
    -# Busingen and Zurich have shared clocks since 1970.
    +# Büsingen and Zurich have shared clocks since 1970.
     
     Link	Europe/Zurich	Europe/Busingen
     
    @@ -1295,8 +1305,8 @@ Link	Europe/Zurich	Europe/Busingen
     
     # Gibraltar
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Europe/Gibraltar	-0:21:24 -	LMT	1880 Aug  2 0:00s
    -			0:00	GB-Eire	%s	1957 Apr 14 2:00
    +Zone Europe/Gibraltar	-0:21:24 -	LMT	1880 Aug  2  0:00s
    +			0:00	GB-Eire	%s	1957 Apr 14  2:00
     			1:00	-	CET	1982
     			1:00	EU	CE%sT
     
    @@ -1327,7 +1337,7 @@ Rule	Greece	1980	only	-	Apr	 1	0:00	1:00	S
     Rule	Greece	1980	only	-	Sep	28	0:00	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Europe/Athens	1:34:52 -	LMT	1895 Sep 14
    -			1:34:52	-	AMT	1916 Jul 28 0:01     # Athens MT
    +			1:34:52	-	AMT	1916 Jul 28  0:01 # Athens MT
     			2:00	Greece	EE%sT	1941 Apr 30
     			1:00	Greece	CE%sT	1944 Apr  4
     			2:00	Greece	EE%sT	1981
    @@ -1336,15 +1346,20 @@ Zone	Europe/Athens	1:34:52 -	LMT	1895 Sep 14
     			2:00	EU	EE%sT
     
     # Hungary
    +# From Paul Eggert (2014-07-15):
    +# Dates for 1916-1945 are taken from:
    +# Oross A. Jelen a múlt jövője: a nyári időszámítás Magyarországon 1916-1945.
    +# National Archives of Hungary (2012-10-29).
    +# http://mnl.gov.hu/a_het_dokumentuma/a_nyari_idoszamitas_magyarorszagon_19161945.html
    +# This source does not always give times, which are taken from Shanks
    +# & Pottenger (which disagree about the dates).
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
     Rule	Hungary	1918	only	-	Apr	 1	 3:00	1:00	S
    -Rule	Hungary	1918	only	-	Sep	29	 3:00	0	-
    +Rule	Hungary	1918	only	-	Sep	16	 3:00	0	-
     Rule	Hungary	1919	only	-	Apr	15	 3:00	1:00	S
    -Rule	Hungary	1919	only	-	Sep	15	 3:00	0	-
    -Rule	Hungary	1920	only	-	Apr	 5	 3:00	1:00	S
    -Rule	Hungary	1920	only	-	Sep	30	 3:00	0	-
    +Rule	Hungary	1919	only	-	Nov	24	 3:00	0	-
     Rule	Hungary	1945	only	-	May	 1	23:00	1:00	S
    -Rule	Hungary	1945	only	-	Nov	 3	 0:00	0	-
    +Rule	Hungary	1945	only	-	Nov	 1	 0:00	0	-
     Rule	Hungary	1946	only	-	Mar	31	 2:00s	1:00	S
     Rule	Hungary	1946	1949	-	Oct	Sun>=1	 2:00s	0	-
     Rule	Hungary	1947	1949	-	Apr	Sun>=4	 2:00s	1:00	S
    @@ -1360,7 +1375,7 @@ Rule	Hungary	1980	only	-	Apr	 6	 1:00	1:00	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Europe/Budapest	1:16:20 -	LMT	1890 Oct
     			1:00	C-Eur	CE%sT	1918
    -			1:00	Hungary	CE%sT	1941 Apr  6  2:00
    +			1:00	Hungary	CE%sT	1941 Apr  8
     			1:00	C-Eur	CE%sT	1945
     			1:00	Hungary	CE%sT	1980 Sep 28  2:00s
     			1:00	EU	CE%sT
    @@ -1423,7 +1438,7 @@ Rule	Iceland	1967	only	-	Oct	29	 1:00s	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Atlantic/Reykjavik	-1:27:24 -	LMT	1837
     			-1:27:48 -	RMT	1908 # Reykjavik Mean Time?
    -			-1:00	Iceland	IS%sT	1968 Apr 7 1:00s
    +			-1:00	Iceland	IS%sT	1968 Apr  7  1:00s
     			 0:00	-	GMT
     
     # Italy
    @@ -1438,9 +1453,8 @@ Zone Atlantic/Reykjavik	-1:27:24 -	LMT	1837
     # From Paul Eggert (2006-03-22):
     # For Italian DST we have three sources: Shanks & Pottenger, Whitman, and
     # F. Pollastri
    -# 
     # Day-light Saving Time in Italy (2006-02-03)
    -# 
    +# http://toi.iriti.cnr.it/uk/ienitlt.html
     # ('FP' below), taken from an Italian National Electrotechnical Institute
     # publication. When the three sources disagree, guess who's right, as follows:
     #
    @@ -1500,8 +1514,8 @@ Rule	Italy	1978	only	-	Oct	 1	0:00s	0	-
     Rule	Italy	1979	only	-	Sep	30	0:00s	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Europe/Rome	0:49:56 -	LMT	1866 Sep 22
    -			0:49:56	-	RMT	1893 Nov  1 0:00s # Rome Mean
    -			1:00	Italy	CE%sT	1942 Nov  2 2:00s
    +			0:49:56	-	RMT	1893 Nov  1  0:00s # Rome Mean
    +			1:00	Italy	CE%sT	1942 Nov  2  2:00s
     			1:00	C-Eur	CE%sT	1944 Jul
     			1:00	Italy	CE%sT	1980
     			1:00	EU	CE%sT
    @@ -1548,18 +1562,18 @@ Link	Europe/Rome	Europe/San_Marino
     
     # From Andrei Ivanov (2000-03-06):
     # This year Latvia will not switch to Daylight Savings Time (as specified in
    -# 
     # The Regulations of the Cabinet of Ministers of the Rep. of Latvia of
    -# 29-Feb-2000 (#79), in Latvian for subscribers only).
    +# 29-Feb-2000 (#79) ,
    +# in Latvian for subscribers only).
     
    -# 
    -# From RFE/RL Newsline (2001-01-03), noted after a heads-up by Rives McDow:
    -# 
    +# From RFE/RL Newsline
    +# http://www.rferl.org/newsline/2001/01/3-CEE/cee-030101.html
    +# (2001-01-03), noted after a heads-up by Rives McDow:
     # The Latvian government on 2 January decided that the country will
     # institute daylight-saving time this spring, LETA reported.
     # Last February the three Baltic states decided not to turn back their
     # clocks one hour in the spring....
    -# Minister of Economy Aigars Kalvitis noted that Latvia had too few
    +# Minister of Economy Aigars Kalvītis noted that Latvia had too few
     # daylight hours and thus decided to comply with a draft European
     # Commission directive that provides for instituting daylight-saving
     # time in EU countries between 2002 and 2006. The Latvian government
    @@ -1569,18 +1583,23 @@ Link	Europe/Rome	Europe/San_Marino
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
     Rule	Latvia	1989	1996	-	Mar	lastSun	 2:00s	1:00	S
     Rule	Latvia	1989	1996	-	Sep	lastSun	 2:00s	0	-
    +
    +# Milne 1899 says Riga was 1:36:28 (Polytechnique House time).
    +# Byalokoz 1919 says Latvia was 1:36:34.
    +# Go with Byalokoz.
    +
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Europe/Riga	1:36:24	-	LMT	1880
    -			1:36:24	-	RMT	1918 Apr 15 2:00 #Riga Mean Time
    -			1:36:24	1:00	LST	1918 Sep 16 3:00 #Latvian Summer
    -			1:36:24	-	RMT	1919 Apr  1 2:00
    -			1:36:24	1:00	LST	1919 May 22 3:00
    -			1:36:24	-	RMT	1926 May 11
    +Zone	Europe/Riga	1:36:34	-	LMT	1880
    +			1:36:34	-	RMT	1918 Apr 15  2:00 # Riga MT
    +			1:36:34	1:00	LST	1918 Sep 16  3:00 # Latvian ST
    +			1:36:34	-	RMT	1919 Apr  1  2:00
    +			1:36:34	1:00	LST	1919 May 22  3:00
    +			1:36:34	-	RMT	1926 May 11
     			2:00	-	EET	1940 Aug  5
     			3:00	-	MSK	1941 Jul
     			1:00	C-Eur	CE%sT	1944 Oct 13
    -			3:00	Russia	MSK/MSD	1989 Mar lastSun 2:00s
    -			2:00	1:00	EEST	1989 Sep lastSun 2:00s
    +			3:00	Russia	MSK/MSD	1989 Mar lastSun  2:00s
    +			2:00	1:00	EEST	1989 Sep lastSun  2:00s
     			2:00	Latvia	EE%sT	1997 Jan 21
     			2:00	EU	EE%sT	2000 Feb 29
     			2:00	-	EET	2001 Jan  2
    @@ -1614,7 +1633,7 @@ Link Europe/Zurich Europe/Vaduz
     # I would like to inform that in this year Lithuanian time zone
     # (Europe/Vilnius) was changed.
     
    -# From ELTA No. 972 (2582) (1999-09-29),
    +# From ELTA No. 972 (2582) (1999-09-29) ,
     # via Steffen Thorsen:
     # Lithuania has shifted back to the second time zone (GMT plus two hours)
     # to be valid here starting from October 31,
    @@ -1623,9 +1642,9 @@ Link Europe/Zurich Europe/Vaduz
     # motion to give up shifting to summer time in spring, as it was
     # already done by Estonia.
     
    -# From the 
    -# Fact File, Lithuanian State Department of Tourism
    -#  (2000-03-27): Local time is GMT+2 hours ..., no daylight saving.
    +# From the Fact File, Lithuanian State Department of Tourism
    +#  (2000-03-27):
    +# Local time is GMT+2 hours ..., no daylight saving.
     
     # From a user via Klaus Marten (2003-02-07):
     # As a candidate for membership of the European Union, Lithuania will
    @@ -1638,18 +1657,18 @@ Link Europe/Zurich Europe/Vaduz
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Europe/Vilnius	1:41:16	-	LMT	1880
    -			1:24:00	-	WMT	1917	    # Warsaw Mean Time
    +			1:24:00	-	WMT	1917        # Warsaw Mean Time
     			1:35:36	-	KMT	1919 Oct 10 # Kaunas Mean Time
     			1:00	-	CET	1920 Jul 12
     			2:00	-	EET	1920 Oct  9
     			1:00	-	CET	1940 Aug  3
     			3:00	-	MSK	1941 Jun 24
     			1:00	C-Eur	CE%sT	1944 Aug
    -			3:00	Russia	MSK/MSD	1991 Mar 31 2:00s
    -			2:00	1:00	EEST	1991 Sep 29 2:00s
    +			3:00	Russia	MSK/MSD	1991 Mar 31  2:00s
    +			2:00	1:00	EEST	1991 Sep 29  2:00s
     			2:00	C-Eur	EE%sT	1998
    -			2:00	-	EET	1998 Mar 29 1:00u
    -			1:00	EU	CE%sT	1999 Oct 31 1:00u
    +			2:00	-	EET	1998 Mar 29  1:00u
    +			1:00	EU	CE%sT	1999 Oct 31  1:00u
     			2:00	-	EET	2003 Jan  1
     			2:00	EU	EE%sT
     
    @@ -1683,9 +1702,9 @@ Rule	Lux	1929	only	-	Apr	20	23:00	1:00	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Europe/Luxembourg	0:24:36 -	LMT	1904 Jun
     			1:00	Lux	CE%sT	1918 Nov 25
    -			0:00	Lux	WE%sT	1929 Oct  6 2:00s
    -			0:00	Belgium	WE%sT	1940 May 14 3:00
    -			1:00	C-Eur	WE%sT	1944 Sep 18 3:00
    +			0:00	Lux	WE%sT	1929 Oct  6  2:00s
    +			0:00	Belgium	WE%sT	1940 May 14  3:00
    +			1:00	C-Eur	WE%sT	1944 Sep 18  3:00
     			1:00	Belgium	CE%sT	1977
     			1:00	EU	CE%sT
     
    @@ -1702,9 +1721,9 @@ Rule	Malta	1975	1979	-	Apr	Sun>=15	2:00	1:00	S
     Rule	Malta	1975	1980	-	Sep	Sun>=15	2:00	0	-
     Rule	Malta	1980	only	-	Mar	31	2:00	1:00	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2 0:00s # Valletta
    -			1:00	Italy	CE%sT	1942 Nov  2 2:00s
    -			1:00	C-Eur	CE%sT	1945 Apr  2 2:00s
    +Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2  0:00s # Valletta
    +			1:00	Italy	CE%sT	1942 Nov  2  2:00s
    +			1:00	C-Eur	CE%sT	1945 Apr  2  2:00s
     			1:00	Italy	CE%sT	1973 Mar 31
     			1:00	Malta	CE%sT	1981
     			1:00	EU	CE%sT
    @@ -1719,7 +1738,7 @@ Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2 0:00s # Valletta
     # In early 1992 there was large-scale interethnic violence in the area
     # and it's possible that some Russophones continued to observe Moscow time.
     # But [two people] separately reported via
    -# Jesper Norgaard that as of 2001-01-24 Tiraspol was like Chisinau.
    +# Jesper Nørgaard that as of 2001-01-24 Tiraspol was like Chisinau.
     # The Tiraspol entry has therefore been removed for now.
     #
     # From Alexander Krivenyshev (2011-10-17):
    @@ -1728,13 +1747,8 @@ Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2 0:00s # Valletta
     # to the Winter Time).
     #
     # News (in Russian):
    -# 
     # http://www.kyivpost.ua/russia/news/pridnestrove-otkazalos-ot-perehoda-na-zimnee-vremya-30954.html
    -# 
    -#
    -# 
     # http://www.allmoldova.com/moldova-news/1249064116.html
    -# 
     #
     # The substance of this change (reinstatement of the Tiraspol entry)
     # is from a patch from Petr Machata (2011-10-17)
    @@ -1752,9 +1766,7 @@ Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2 0:00s # Valletta
     # Following Moldova and neighboring Ukraine- Transnistria (Pridnestrovie)-
     # Tiraspol will go back to winter time on October 30, 2011.
     # News from Moldova (in russian):
    -# 
     # http://ru.publika.md/link_317061.html
    -# 
     
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    @@ -1777,8 +1789,8 @@ Zone	Europe/Chisinau	1:55:20 -	LMT	1880
     # more precise 0:09:21.
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Europe/Monaco	0:29:32 -	LMT	1891 Mar 15
    -			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
    -			0:00	France	WE%sT	1945 Sep 16 3:00
    +			0:09:21	-	PMT	1911 Mar 11 # Paris Mean Time
    +			0:00	France	WE%sT	1945 Sep 16  3:00
     			1:00	France	CE%sT	1977
     			1:00	EU	CE%sT
     
    @@ -1822,8 +1834,8 @@ Zone	Europe/Monaco	0:29:32 -	LMT	1891 Mar 15
     # was not until 1866 when they were all required by law to observe
     # Amsterdam mean time.
     
    -# The data before 1945 are taken from
    -# .
    +# The data entries before 1945 are taken from
    +# http://www.phys.uu.nl/~vgent/wettijd/wettijd.htm
     
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
     Rule	Neth	1916	only	-	May	 1	0:00	1:00	NST	# Netherlands Summer Time
    @@ -1854,8 +1866,8 @@ Rule	Neth	1945	only	-	Sep	16	2:00s	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Europe/Amsterdam	0:19:32 -	LMT	1835
     			0:19:32	Neth	%s	1937 Jul  1
    -			0:20	Neth	NE%sT	1940 May 16 0:00 # Dutch Time
    -			1:00	C-Eur	CE%sT	1945 Apr  2 2:00
    +			0:20	Neth	NE%sT	1940 May 16  0:00 # Dutch Time
    +			1:00	C-Eur	CE%sT	1945 Apr  2  2:00
     			1:00	Neth	CE%sT	1977
     			1:00	EU	CE%sT
     
    @@ -1885,14 +1897,14 @@ Zone	Europe/Oslo	0:43:00 -	LMT	1895 Jan  1
     # time they were declared as parts of Norway.  Svalbard was declared
     # as a part of Norway by law of 1925-07-17 no 11, section 4 and Jan
     # Mayen by law of 1930-02-27 no 2, section 2. (From
    -# http://www.lovdata.no/all/nl-19250717-011.html and
    -# http://www.lovdata.no/all/nl-19300227-002.html).  The law/regulation
    +#  and
    +# ).  The law/regulation
     # for normal/standard time in Norway is from 1894-06-29 no 1 (came
     # into operation on 1895-01-01) and Svalbard/Jan Mayen seem to be a
     # part of this law since 1925/1930. (From
    -# http://www.lovdata.no/all/nl-18940629-001.html ) I have not been
    +# ) I have not been
     # able to find if Jan Mayen used a different time zone (e.g. -0100)
    -# before 1930. Jan Mayen has only been "inhabitated" since 1921 by
    +# before 1930. Jan Mayen has only been "inhabited" since 1921 by
     # Norwegian meteorologists and maybe used the same time as Norway ever
     # since 1921.  Svalbard (Arctic/Longyearbyen) has been inhabited since
     # before 1895, and therefore probably changed the local time somewhere
    @@ -1907,7 +1919,7 @@ Zone	Europe/Oslo	0:43:00 -	LMT	1895 Jan  1
     #  says that the meteorologists
     # burned down their station in 1940 and left the island, but returned in
     # 1941 with a small Norwegian garrison and continued operations despite
    -# frequent air ttacks from Germans.  In 1943 the Americans established a
    +# frequent air attacks from Germans.  In 1943 the Americans established a
     # radiolocating station on the island, called "Atlantic City".  Possibly
     # the UT offset changed during the war, but I think it unlikely that
     # Jan Mayen used German daylight-saving rules.
    @@ -1918,7 +1930,7 @@ Zone	Europe/Oslo	0:43:00 -	LMT	1895 Jan  1
     #  says that the Germans were
     # expelled on 1942-05-14.  However, small parties of Germans did return,
     # and according to Wilhelm Dege's book "War North of 80" (1954)
    -# 
    +# http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html
     # the German armed forces at the Svalbard weather station code-named
     # Haudegen did not surrender to the Allies until September 1945.
     #
    @@ -1927,6 +1939,10 @@ Zone	Europe/Oslo	0:43:00 -	LMT	1895 Jan  1
     Link	Europe/Oslo	Arctic/Longyearbyen
     
     # Poland
    +
    +# The 1919 dates and times can be found in Tygodnik Urzędowy nr 1 (1919-03-20),
    +#  pp 1-2.
    +
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
     Rule	Poland	1918	1919	-	Sep	16	2:00s	0	-
     Rule	Poland	1919	only	-	Apr	15	2:00s	1:00	S
    @@ -1937,9 +1953,9 @@ Rule	Poland	1944	only	-	Oct	 4	2:00	0	-
     Rule	Poland	1945	only	-	Apr	29	0:00	1:00	S
     Rule	Poland	1945	only	-	Nov	 1	0:00	0	-
     # For 1946 on the source is Kazimierz Borkowski,
    -# Torun Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U.,
    -# 
    -# Thanks to Przemyslaw Augustyniak (2005-05-28) for this reference.
    +# Toruń Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U.,
    +# http://www.astro.uni.torun.pl/~kb/Artykuly/U-PA/Czas2.htm#tth_tAb1
    +# Thanks to Przemysław Augustyniak (2005-05-28) for this reference.
     # He also gives these further references:
     # Mon Pol nr 13, poz 162 (1995) 
     # Druk nr 2180 (2003) 
    @@ -1959,10 +1975,10 @@ Rule	Poland	1961	1964	-	May	lastSun	1:00s	1:00	S
     Rule	Poland	1962	1964	-	Sep	lastSun	1:00s	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Europe/Warsaw	1:24:00 -	LMT	1880
    -			1:24:00	-	WMT	1915 Aug  5   # Warsaw Mean Time
    -			1:00	C-Eur	CE%sT	1918 Sep 16 3:00
    +			1:24:00	-	WMT	1915 Aug  5 # Warsaw Mean Time
    +			1:00	C-Eur	CE%sT	1918 Sep 16  3:00
     			2:00	Poland	EE%sT	1922 Jun
    -			1:00	Poland	CE%sT	1940 Jun 23 2:00
    +			1:00	Poland	CE%sT	1940 Jun 23  2:00
     			1:00	C-Eur	CE%sT	1944 Oct
     			1:00	Poland	CE%sT	1977
     			1:00	W-Eur	CE%sT	1988
    @@ -1970,6 +1986,14 @@ Zone	Europe/Warsaw	1:24:00 -	LMT	1880
     
     # Portugal
     #
    +# From Paul Eggert (2014-08-11), after a heads-up from Stephen Colebourne:
    +# According to a Portuguese decree (1911-05-26)
    +# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
    +# Lisbon was at -0:36:44.68, but switched to GMT on 1912-01-01 at 00:00.
    +# Round the old offset to -0:36:45.  This agrees with Willett but disagrees
    +# with Shanks, who says the transition occurred on 1911-05-24 at 00:00 for
    +# Europe/Lisbon, Atlantic/Azores, and Atlantic/Madeira.
    +#
     # From Rui Pedro Salgueiro (1992-11-12):
     # Portugal has recently (September, 27) changed timezone
     # (from WET to MET or CET) to harmonize with EEC.
    @@ -2049,35 +2073,34 @@ Rule	Port	1979	1982	-	Sep	lastSun	 1:00s	0	-
     Rule	Port	1980	only	-	Mar	lastSun	 0:00s	1:00	S
     Rule	Port	1981	1982	-	Mar	lastSun	 1:00s	1:00	S
     Rule	Port	1983	only	-	Mar	lastSun	 2:00s	1:00	S
    +#
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -# Shanks & Pottenger say the transition from LMT to WET occurred 1911-05-24;
    -# Willett says 1912-01-01.  Go with Willett.
    -Zone	Europe/Lisbon	-0:36:32 -	LMT	1884
    -			-0:36:32 -	LMT	1912 Jan  1  # Lisbon Mean Time
    -			 0:00	Port	WE%sT	1966 Apr  3 2:00
    -			 1:00	-	CET	1976 Sep 26 1:00
    -			 0:00	Port	WE%sT	1983 Sep 25 1:00s
    -			 0:00	W-Eur	WE%sT	1992 Sep 27 1:00s
    -			 1:00	EU	CE%sT	1996 Mar 31 1:00u
    +Zone	Europe/Lisbon	-0:36:45 -	LMT	1884
    +			-0:36:45 -	LMT	1912 Jan  1 # Lisbon Mean Time
    +			 0:00	Port	WE%sT	1966 Apr  3  2:00
    +			 1:00	-	CET	1976 Sep 26  1:00
    +			 0:00	Port	WE%sT	1983 Sep 25  1:00s
    +			 0:00	W-Eur	WE%sT	1992 Sep 27  1:00s
    +			 1:00	EU	CE%sT	1996 Mar 31  1:00u
     			 0:00	EU	WE%sT
    -Zone Atlantic/Azores	-1:42:40 -	LMT	1884		# Ponta Delgada
    -			-1:54:32 -	HMT	1911 May 24  # Horta Mean Time
    -			-2:00	Port	AZO%sT	1966 Apr  3 2:00 # Azores Time
    -			-1:00	Port	AZO%sT	1983 Sep 25 1:00s
    -			-1:00	W-Eur	AZO%sT	1992 Sep 27 1:00s
    -			 0:00	EU	WE%sT	1993 Mar 28 1:00u
    +Zone Atlantic/Azores	-1:42:40 -	LMT	1884        # Ponta Delgada
    +			-1:54:32 -	HMT	1912 Jan  1 # Horta Mean Time
    +			-2:00	Port	AZO%sT	1966 Apr  3  2:00  # Azores Time
    +			-1:00	Port	AZO%sT	1983 Sep 25  1:00s
    +			-1:00	W-Eur	AZO%sT	1992 Sep 27  1:00s
    +			 0:00	EU	WE%sT	1993 Mar 28  1:00u
     			-1:00	EU	AZO%sT
    -Zone Atlantic/Madeira	-1:07:36 -	LMT	1884		# Funchal
    -			-1:07:36 -	FMT	1911 May 24  # Funchal Mean Time
    -			-1:00	Port	MAD%sT	1966 Apr  3 2:00 # Madeira Time
    -			 0:00	Port	WE%sT	1983 Sep 25 1:00s
    +Zone Atlantic/Madeira	-1:07:36 -	LMT	1884        # Funchal
    +			-1:07:36 -	FMT	1912 Jan  1 # Funchal Mean Time
    +			-1:00	Port	MAD%sT	1966 Apr  3  2:00 # Madeira Time
    +			 0:00	Port	WE%sT	1983 Sep 25  1:00s
     			 0:00	EU	WE%sT
     
     # Romania
     #
     # From Paul Eggert (1999-10-07):
    -# 
    -# Nine O'clock (1998-10-23) reports that the switch occurred at
    +# Nine O'clock 
    +# (1998-10-23) reports that the switch occurred at
     # 04:00 local time in fall 1998.  For lack of better info,
     # assume that Romania and Moldova switched to EU rules in 1997,
     # the same year as Bulgaria.
    @@ -2094,32 +2117,28 @@ Rule	Romania	1991	1993	-	Mar	lastSun	 0:00s	1:00	S
     Rule	Romania	1991	1993	-	Sep	lastSun	 0:00s	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Europe/Bucharest	1:44:24 -	LMT	1891 Oct
    -			1:44:24	-	BMT	1931 Jul 24	# Bucharest MT
    -			2:00	Romania	EE%sT	1981 Mar 29 2:00s
    +			1:44:24	-	BMT	1931 Jul 24 # Bucharest MT
    +			2:00	Romania	EE%sT	1981 Mar 29  2:00s
     			2:00	C-Eur	EE%sT	1991
     			2:00	Romania	EE%sT	1994
     			2:00	E-Eur	EE%sT	1997
     			2:00	EU	EE%sT
     
    +
     # Russia
     
     # From Alexander Krivenyshev (2011-09-15):
     # Based on last Russian Government Decree # 725 on August 31, 2011
     # (Government document
    -# 
     # http://www.government.ru/gov/results/16355/print/
    -# 
     # in Russian)
     # there are few corrections have to be made for some Russian time zones...
     # All updated Russian Time Zones were placed in table and translated to English
     # by WorldTimeZone.com at the link below:
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_russia36.htm
    -# 
     
     # From Sanjeev Gupta (2011-09-27):
     # Scans of [Decree #23 of January 8, 1992] are available at:
    -# 
     # http://government.consultant.ru/page.aspx?1223966
     # They are in Cyrillic letters (presumably Russian).
     
    @@ -2128,16 +2147,12 @@ Zone Europe/Bucharest	1:44:24 -	LMT	1891 Oct
     # changed in September 2011:
     #
     # One source is
    -# < a href="http://government.ru/gov/results/16355/>
     # http://government.ru/gov/results/16355/
    -# 
     # which, according to translate.google.com, begins "Decree of August 31,
     # 2011 No 725" and contains no other dates or "effective date" information.
     #
     # Another source is
    -# 
     # http://www.rg.ru/2011/09/06/chas-zona-dok.html
    -# 
     # which, according to translate.google.com, begins "Resolution of the
     # Government of the Russian Federation on August 31, 2011 N 725" and also
     # contains "Date first official publication: September 6, 2011 Posted on:
    @@ -2145,28 +2160,45 @@ Zone Europe/Bucharest	1:44:24 -	LMT	1891 Oct
     # does not contain any "effective date" information.
     #
     # Another source is
    -# 
     # http://en.wikipedia.org/wiki/Oymyakonsky_District#cite_note-RuTime-7
    -# 
     # which, in note 8, contains "Resolution #725 of August 31, 2011...
     # Effective as of after 7 days following the day of the official publication"
     # but which does not contain any reference to September 6, 2011.
     #
     # The Wikipedia article refers to
    -# 
     # http://base.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=118896
    -# 
     # which seems to copy the text of the government.ru page.
     #
     # Tobias Conradi combines Wikipedia's
     # "as of after 7 days following the day of the official publication"
    -# with www.rg.ru's "Date of first official publication: September 6, 2011" to get
    -# September 13, 2011 as the cutover date (unusually, a Tuesday, as Tobias Conradi notes).
    +# with www.rg.ru's "Date of first official publication: September 6, 2011" to
    +# get September 13, 2011 as the cutover date (unusually, a Tuesday, as Tobias
    +# Conradi notes).
     #
     # None of the sources indicates a time of day for changing clocks.
     #
     # Go with 2011-09-13 0:00s.
     
    +# From Alexander Krivenyshev (2014-07-01):
    +# According to the Russian news (ITAR-TASS News Agency)
    +# http://en.itar-tass.com/russia/738562
    +# the State Duma has approved ... the draft bill on returning to
    +# winter time standard and return Russia 11 time zones.  The new
    +# regulations will come into effect on October 26, 2014 at 02:00 ...
    +# http://asozd2.duma.gov.ru/main.nsf/%28Spravka%29?OpenAgent&RN=431985-6&02
    +# Here is a link where we put together table (based on approved Bill N
    +# 431985-6) with proposed 11 Russian time zones and corresponding
    +# areas/cities/administrative centers in the Russian Federation (in English):
    +# http://www.worldtimezone.com/dst_news/dst_news_russia65.html
    +#
    +# From Alexander Krivenyshev (2014-07-22):
    +# Putin signed the Federal Law 431985-6 ... (in Russian)
    +# http://itar-tass.com/obschestvo/1333711
    +# http://www.pravo.gov.ru:8080/page.aspx?111660
    +# http://www.kremlin.ru/acts/46279
    +# From October 26, 2014 the new Russian time zone map will looks like this:
    +# http://www.worldtimezone.com/dst_news/dst_news_russia-map-2014-07.html
    +
     # From Paul Eggert (2006-03-22):
     # Except for Moscow after 1919-07-01, I invented the time zone abbreviations.
     # Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991,
    @@ -2193,9 +2225,9 @@ Zone Europe/Bucharest	1:44:24 -	LMT	1891 Oct
     #
     # For Grozny, Chechnya, we have the following story from
     # John Daniszewski, "Scavengers in the Rubble", Los Angeles Times (2001-02-07):
    -# News--often false--is spread by word of mouth.  A rumor that it was
    +# News - often false - is spread by word of mouth.  A rumor that it was
     # time to move the clocks back put this whole city out of sync with
    -# the rest of Russia for two weeks--even soldiers stationed here began
    +# the rest of Russia for two weeks - even soldiers stationed here began
     # enforcing curfew at the wrong time.
     #
     # From Gwillim Law (2001-06-05):
    @@ -2206,107 +2238,265 @@ Zone Europe/Bucharest	1:44:24 -	LMT	1891 Oct
     # since September 1997....  Although the Kuril Islands are
     # administratively part of Sakhalin oblast', they appear to have
     # remained on UTC+11 along with Magadan.
    -#
    +
    +# From Tim Parenti (2014-07-06):
    +# The comments detailing the coverage of each Russian zone are meant to assist
    +# with maintenance only and represent our best guesses as to which regions
    +# are covered by each zone.  They are not meant to be taken as an authoritative
    +# listing.  The region codes listed come from
    +# http://en.wikipedia.org/w/?title=Federal_subjects_of_Russia&oldid=611810498
    +# and are used for convenience only; no guarantees are made regarding their
    +# future stability.  ISO 3166-2:RU codes are also listed for first-level
    +# divisions where available.
    +
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -#
    -# Kaliningradskaya oblast'.
    +
    +
    +# From Tim Parenti (2014-07-03):
    +# Europe/Kaliningrad covers...
    +# 39	RU-KGD	Kaliningrad Oblast
    +
     Zone Europe/Kaliningrad	 1:22:00 -	LMT	1893 Apr
     			 1:00	C-Eur	CE%sT	1945
     			 2:00	Poland	CE%sT	1946
    -			 3:00	Russia	MSK/MSD	1991 Mar 31 2:00s
    -			 2:00	Russia	EE%sT	2011 Mar 27 2:00s
    -			 3:00	-	FET # Further-eastern European Time
    +			 3:00	Russia	MSK/MSD	1991 Mar 31  2:00s
    +			 2:00	Russia	EE%sT	2011 Mar 27  2:00s
    +			 3:00	-	FET	2014 Oct 26  2:00s
    +			 2:00	-	EET
    +
    +
    +# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
    +# Europe/Moscow covers...
    +# 01	RU-AD	Adygea, Republic of
    +# 05	RU-DA	Dagestan, Republic of
    +# 06	RU-IN	Ingushetia, Republic of
    +# 07	RU-KB	Kabardino-Balkar Republic
    +# 08	RU-KL	Kalmykia, Republic of
    +# 09	RU-KC	Karachay-Cherkess Republic
    +# 10	RU-KR	Karelia, Republic of
    +# 11	RU-KO	Komi Republic
    +# 12	RU-ME	Mari El Republic
    +# 13	RU-MO	Mordovia, Republic of
    +# 15	RU-SE	North Ossetia-Alania, Republic of
    +# 16	RU-TA	Tatarstan, Republic of
    +# 20	RU-CE	Chechen Republic
    +# 21	RU-CU	Chuvash Republic
    +# 23	RU-KDA	Krasnodar Krai
    +# 26	RU-STA	Stavropol Krai
    +# 29	RU-ARK	Arkhangelsk Oblast
    +# 31	RU-BEL	Belgorod Oblast
    +# 32	RU-BRY	Bryansk Oblast
    +# 33	RU-VLA	Vladimir Oblast
    +# 35	RU-VLG	Vologda Oblast
    +# 36	RU-VOR	Voronezh Oblast
    +# 37	RU-IVA	Ivanovo Oblast
    +# 40	RU-KLU	Kaluga Oblast
    +# 44	RU-KOS	Kostroma Oblast
    +# 46	RU-KRS	Kursk Oblast
    +# 47	RU-LEN	Leningrad Oblast
    +# 48	RU-LIP	Lipetsk Oblast
    +# 50	RU-MOS	Moscow Oblast
    +# 51	RU-MUR	Murmansk Oblast
    +# 52	RU-NIZ	Nizhny Novgorod Oblast
    +# 53	RU-NGR	Novgorod Oblast
    +# 57	RU-ORL	Oryol Oblast
    +# 58	RU-PNZ	Penza Oblast
    +# 60	RU-PSK	Pskov Oblast
    +# 61	RU-ROS	Rostov Oblast
    +# 62	RU-RYA	Ryazan Oblast
    +# 67	RU-SMO	Smolensk Oblast
    +# 68	RU-TAM	Tambov Oblast
    +# 69	RU-TVE	Tver Oblast
    +# 71	RU-TUL	Tula Oblast
    +# 73	RU-ULY	Ulyanovsk Oblast
    +# 76	RU-YAR	Yaroslavl Oblast
    +# 77	RU-MOW	Moscow
    +# 78	RU-SPE	Saint Petersburg
    +# 83	RU-NEN	Nenets Autonomous Okrug
    +
    +# From Vladimir Karpinsky (2014-07-08):
    +# LMT in Moscow (before Jul 3, 1916) is 2:30:17, that was defined by Moscow
    +# Observatory (coordinates: 55 deg. 45'29.70", 37 deg. 34'05.30")....
    +# LMT in Moscow since Jul 3, 1916 is 2:31:01 as a result of new standard.
    +# (The info is from the book by Byalokoz ... p. 18.)
    +# The time in St. Petersburg as capital of Russia was defined by
    +# Pulkov observatory, near St. Petersburg.  In 1916 LMT Moscow
    +# was synchronized with LMT St. Petersburg (+30 minutes), (Pulkov observatory
    +# coordinates: 59 deg. 46'18.70", 30 deg. 19'40.70") so 30 deg. 19'40.70" >
    +# 2h01m18.7s = 2:01:19.  LMT Moscow = LMT St.Petersburg + 30m 2:01:19 + 0:30 =
    +# 2:31:19 ...
     #
    -# From Oscar van Vlijmen (2001-08-25): [This region consists of]
    -# Respublika Adygeya, Arkhangel'skaya oblast',
    -# Belgorodskaya oblast', Bryanskaya oblast', Vladimirskaya oblast',
    -# Vologodskaya oblast', Voronezhskaya oblast',
    -# Respublika Dagestan, Ivanovskaya oblast', Respublika Ingushetiya,
    -# Kabarbino-Balkarskaya Respublika, Respublika Kalmykiya,
    -# Kalyzhskaya oblast', Respublika Karachaevo-Cherkessiya,
    -# Respublika Kareliya, Respublika Komi,
    -# Kostromskaya oblast', Krasnodarskij kraj, Kurskaya oblast',
    -# Leningradskaya oblast', Lipetskaya oblast', Respublika Marij El,
    -# Respublika Mordoviya, Moskva, Moskovskaya oblast',
    -# Murmanskaya oblast', Nenetskij avtonomnyj okrug,
    -# Nizhegorodskaya oblast', Novgorodskaya oblast', Orlovskaya oblast',
    -# Penzenskaya oblast', Pskovskaya oblast', Rostovskaya oblast',
    -# Ryazanskaya oblast', Sankt-Peterburg,
    -# Respublika Severnaya Osetiya, Smolenskaya oblast',
    -# Stavropol'skij kraj, Tambovskaya oblast', Respublika Tatarstan,
    -# Tverskaya oblast', Tyl'skaya oblast', Ul'yanovskaya oblast',
    -# Chechenskaya Respublika, Chuvashskaya oblast',
    -# Yaroslavskaya oblast'
    -Zone Europe/Moscow	 2:30:20 -	LMT	1880
    -			 2:30	-	MMT	1916 Jul  3 # Moscow Mean Time
    -			 2:30:48 Russia	%s	1919 Jul  1 2:00
    +# From Paul Eggert (2014-07-08):
    +# Milne does not list Moscow, but suggests that its time might be listed in
    +# Résumés mensuels et annuels des observations météorologiques (1895).
    +# Presumably this is OCLC 85825704, a journal published with parallel text in
    +# Russian and French.  This source has not been located; go with Karpinsky.
    +
    +Zone Europe/Moscow	 2:30:17 -	LMT	1880
    +			 2:30:17 -	MMT	1916 Jul  3 # Moscow Mean Time
    +			 2:31:19 Russia	%s	1919 Jul  1  2:00
    +			 3:00	Russia	%s	1921 Oct
     			 3:00	Russia	MSK/MSD	1922 Oct
     			 2:00	-	EET	1930 Jun 21
    -			 3:00	Russia	MSK/MSD	1991 Mar 31 2:00s
    -			 2:00	Russia	EE%sT	1992 Jan 19 2:00s
    -			 3:00	Russia	MSK/MSD	2011 Mar 27 2:00s
    -			 4:00	-	MSK
    +			 3:00	Russia	MSK/MSD	1991 Mar 31  2:00s
    +			 2:00	Russia	EE%sT	1992 Jan 19  2:00s
    +			 3:00	Russia	MSK/MSD	2011 Mar 27  2:00s
    +			 4:00	-	MSK	2014 Oct 26  2:00s
    +			 3:00	-	MSK
    +
    +
    +# From Tim Parenti (2014-07-03):
    +# Europe/Simferopol covers...
    +# **	****	Crimea, Republic of
    +# **	****	Sevastopol
    +
    +Zone Europe/Simferopol	 2:16:24 -	LMT	1880
    +			 2:16	-	SMT	1924 May  2 # Simferopol Mean T
    +			 2:00	-	EET	1930 Jun 21
    +			 3:00	-	MSK	1941 Nov
    +			 1:00	C-Eur	CE%sT	1944 Apr 13
    +			 3:00	Russia	MSK/MSD	1990
    +			 3:00	-	MSK	1990 Jul  1  2:00
    +			 2:00	-	EET	1992
    +# Central Crimea used Moscow time 1994/1997.
     #
    -# Astrakhanskaya oblast', Kirovskaya oblast', Saratovskaya oblast',
    -# Volgogradskaya oblast'.  Shanks & Pottenger say Kirov is still at +0400
    -# but Wikipedia (2006-05-09) says +0300.  Perhaps it switched after the
    -# others?  But we have no data.
    +# From Paul Eggert (2006-03-22):
    +# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
    +# from Kiev to Moscow time sometime after the January 1994 elections.
    +# Shanks (1999) says "date of change uncertain", but implies that it happened
    +# sometime between the 1994 DST switches.  Shanks & Pottenger simply say
    +# 1994-09-25 03:00, but that can't be right.  For now, guess it
    +# changed in May.
    +			 2:00	E-Eur	EE%sT	1994 May
    +# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.
    +			 3:00	E-Eur	MSK/MSD	1996 Mar 31  3:00s
    +			 3:00	1:00	MSD	1996 Oct 27  3:00s
    +# IATA SSIM (1997-09) says Crimea switched to EET/EEST.
    +# Assume it happened in March by not changing the clocks.
    +			 3:00	Russia	MSK/MSD	1997
    +			 3:00	-	MSK	1997 Mar lastSun  1:00u
    +# From Alexander Krivenyshev (2014-03-17):
    +# time change at 2:00 (2am) on March 30, 2014
    +# http://vz.ru/news/2014/3/17/677464.html
    +# From Paul Eggert (2014-03-30):
    +# Simferopol and Sevastopol reportedly changed their central town clocks
    +# late the previous day, but this appears to have been ceremonial
    +# and the discrepancies are small enough to not worry about.
    +			 2:00	EU	EE%sT	2014 Mar 30  2:00
    +			 4:00	-	MSK	2014 Oct 26  2:00s
    +			 3:00	-	MSK
    +
    +
    +# From Tim Parenti (2014-07-03):
    +# Europe/Volgograd covers...
    +# 30	RU-AST	Astrakhan Oblast
    +# 34	RU-VGG	Volgograd Oblast
    +# 43	RU-KIR	Kirov Oblast
    +# 64	RU-SAR	Saratov Oblast
    +
    +# From Paul Eggert (2006-05-09):
    +# Shanks & Pottenger say Kirov is still at +0400 but Wikipedia says +0300.
    +# Perhaps it switched after the others?  But we have no data.
    +
     Zone Europe/Volgograd	 2:57:40 -	LMT	1920 Jan  3
     			 3:00	-	TSAT	1925 Apr  6 # Tsaritsyn Time
     			 3:00	-	STAT	1930 Jun 21 # Stalingrad Time
     			 4:00	-	STAT	1961 Nov 11
    -			 4:00	Russia	VOL%sT	1989 Mar 26 2:00s # Volgograd T
    -			 3:00	Russia	VOL%sT	1991 Mar 31 2:00s
    -			 4:00	-	VOLT	1992 Mar 29 2:00s
    -			 3:00	Russia	VOL%sT	2011 Mar 27 2:00s
    -			 4:00	-	VOLT
    -#
    -# From Oscar van Vlijmen (2001-08-25): [This region consists of]
    -# Samarskaya oblast', Udmyrtskaya respublika
    -Zone Europe/Samara	 3:20:36 -	LMT	1919 Jul  1 2:00
    +			 4:00	Russia	VOL%sT	1989 Mar 26  2:00s # Volgograd T
    +			 3:00	Russia	VOL%sT	1991 Mar 31  2:00s
    +			 4:00	-	VOLT	1992 Mar 29  2:00s
    +			 3:00	Russia	MSK	2011 Mar 27  2:00s
    +			 4:00	-	MSK	2014 Oct 26  2:00s
    +			 3:00	-	MSK
    +
    +
    +# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
    +# Europe/Samara covers...
    +# 18	RU-UD	Udmurt Republic
    +# 63	RU-SAM	Samara Oblast
    +
    +# Byalokoz 1919 says Samara was 3:20:20.
    +
    +Zone Europe/Samara	 3:20:20 -	LMT	1919 Jul  1  2:00
     			 3:00	-	SAMT	1930 Jun 21
     			 4:00	-	SAMT	1935 Jan 27
    -			 4:00	Russia	KUY%sT	1989 Mar 26 2:00s # Kuybyshev
    -			 3:00	Russia	KUY%sT	1991 Mar 31 2:00s
    -			 2:00	Russia	KUY%sT	1991 Sep 29 2:00s
    -			 3:00	-	KUYT	1991 Oct 20 3:00
    -			 4:00	Russia	SAM%sT	2010 Mar 28 2:00s # Samara Time
    -			 3:00	Russia	SAM%sT	2011 Mar 27 2:00s
    +			 4:00	Russia	KUY%sT	1989 Mar 26  2:00s # Kuybyshev
    +			 3:00	Russia	MSK/MSD	1991 Mar 31  2:00s
    +			 2:00	Russia	EE%sT	1991 Sep 29  2:00s
    +			 3:00	-	KUYT	1991 Oct 20  3:00
    +			 4:00	Russia	SAM%sT	2010 Mar 28  2:00s # Samara Time
    +			 3:00	Russia	SAM%sT	2011 Mar 27  2:00s
     			 4:00	-	SAMT
     
    +
    +# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
    +# Asia/Yekaterinburg covers...
    +# 02	RU-BA	Bashkortostan, Republic of
    +# 90	RU-PER	Perm Krai
    +# 45	RU-KGN	Kurgan Oblast
    +# 56	RU-ORE	Orenburg Oblast
    +# 66	RU-SVE	Sverdlovsk Oblast
    +# 72	RU-TYU	Tyumen Oblast
    +# 74	RU-CHE	Chelyabinsk Oblast
    +# 86	RU-KHM	Khanty-Mansi Autonomous Okrug - Yugra
    +# 89	RU-YAN	Yamalo-Nenets Autonomous Okrug
     #
    -# From Oscar van Vlijmen (2001-08-25): [This region consists of]
    -# Respublika Bashkortostan, Komi-Permyatskij avtonomnyj okrug,
    -# Kurganskaya oblast', Orenburgskaya oblast', Permskaya oblast',
    -# Sverdlovskaya oblast', Tyumenskaya oblast',
    -# Khanty-Manskijskij avtonomnyj okrug, Chelyabinskaya oblast',
    -# Yamalo-Nenetskij avtonomnyj okrug.
    -Zone Asia/Yekaterinburg	 4:02:24 -	LMT	1919 Jul 15 4:00
    +# Note: Effective 2005-12-01, (59) Perm Oblast and (81) Komi-Permyak
    +# Autonomous Okrug merged to form (90, RU-PER) Perm Krai.
    +
    +# Milne says Yekaterinburg was 4:02:32.9; round to nearest.
    +# Byalokoz 1919 says its provincial time was based on Perm, at 3:45:05.
    +# Assume it switched on 1916-07-03, the time of the new standard.
    +# The 1919 and 1930 transitions are from Shanks.
    +
    +Zone Asia/Yekaterinburg	 4:02:33 -	LMT	1916 Jul  3
    +			 3:45:05 -	PMT	1919 Jul 15  4:00
     			 4:00	-	SVET	1930 Jun 21 # Sverdlovsk Time
    -			 5:00	Russia	SVE%sT	1991 Mar 31 2:00s
    -			 4:00	Russia	SVE%sT	1992 Jan 19 2:00s
    -			 5:00	Russia	YEK%sT	2011 Mar 27 2:00s
    -			 6:00	-	YEKT	# Yekaterinburg Time
    -#
    -# From Oscar van Vlijmen (2001-08-25): [This region consists of]
    -# Respublika Altaj, Altajskij kraj, Omskaya oblast'.
    -Zone Asia/Omsk		 4:53:36 -	LMT	1919 Nov 14
    -			 5:00	-	OMST	1930 Jun 21 # Omsk TIme
    -			 6:00	Russia	OMS%sT	1991 Mar 31 2:00s
    -			 5:00	Russia	OMS%sT	1992 Jan 19 2:00s
    -			 6:00	Russia	OMS%sT	2011 Mar 27 2:00s
    -			 7:00	-	OMST
    -#
    +			 5:00	Russia	SVE%sT	1991 Mar 31  2:00s
    +			 4:00	Russia	SVE%sT	1992 Jan 19  2:00s
    +			 5:00	Russia	YEK%sT	2011 Mar 27  2:00s
    +			 6:00	-	YEKT	2014 Oct 26  2:00s
    +			 5:00	-	YEKT
    +
    +
    +# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
    +# Asia/Omsk covers...
    +# 04	RU-AL	Altai Republic
    +# 22	RU-ALT	Altai Krai
    +# 55	RU-OMS	Omsk Oblast
    +
    +# Byalokoz 1919 says Omsk was 4:53:30.
    +
    +Zone Asia/Omsk		 4:53:30 -	LMT	1919 Nov 14
    +			 5:00	-	OMST	1930 Jun 21 # Omsk Time
    +			 6:00	Russia	OMS%sT	1991 Mar 31  2:00s
    +			 5:00	Russia	OMS%sT	1992 Jan 19  2:00s
    +			 6:00	Russia	OMS%sT	2011 Mar 27  2:00s
    +			 7:00	-	OMST	2014 Oct 26  2:00s
    +			 6:00	-	OMST
    +
    +
    +# From Tim Parenti (2014-07-03):
    +# Asia/Novosibirsk covers...
    +# 54	RU-NVS	Novosibirsk Oblast
    +# 70	RU-TOM	Tomsk Oblast
    +
     # From Paul Eggert (2006-08-19): I'm guessing about Tomsk here; it's
     # not clear when it switched from +7 to +6.
    -# Novosibirskaya oblast', Tomskaya oblast'.
    -Zone Asia/Novosibirsk	 5:31:40 -	LMT	1919 Dec 14 6:00
    +
    +Zone Asia/Novosibirsk	 5:31:40 -	LMT	1919 Dec 14  6:00
     			 6:00	-	NOVT	1930 Jun 21 # Novosibirsk Time
    -			 7:00	Russia	NOV%sT	1991 Mar 31 2:00s
    -			 6:00	Russia	NOV%sT	1992 Jan 19 2:00s
    +			 7:00	Russia	NOV%sT	1991 Mar 31  2:00s
    +			 6:00	Russia	NOV%sT	1992 Jan 19  2:00s
     			 7:00	Russia	NOV%sT	1993 May 23 # say Shanks & P.
    -			 6:00	Russia	NOV%sT	2011 Mar 27 2:00s
    -			 7:00	-	NOVT
    +			 6:00	Russia	NOV%sT	2011 Mar 27  2:00s
    +			 7:00	-	NOVT	2014 Oct 26  2:00s
    +			 6:00	-	NOVT
    +
    +
    +# From Tim Parenti (2014-07-03):
    +# Asia/Novokuznetsk covers...
    +# 42	RU-KEM	Kemerovo Oblast
     
     # From Alexander Krivenyshev (2009-10-13):
     # Kemerovo oblast' (Kemerovo region) in Russia will change current time zone on
    @@ -2319,14 +2509,10 @@ Zone Asia/Novosibirsk	 5:31:40 -	LMT	1919 Dec 14 6:00
     # time zone." ("Russia Zone 5" or old "USSR Zone 5" is GMT +0600)
     #
     # Russian Government web site (Russian language)
    -# 
     # http://www.government.ru/content/governmentactivity/rfgovernmentdecisions/archive/2009/09/14/991633.htm
    -# 
     # or Russian-English translation by WorldTimeZone.com with reference
     # map to local region and new Russia Time Zone map after March 28, 2010
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_russia03.html
    -# 
     #
     # Thus, when Russia will switch to DST on the night of March 28, 2010
     # Kemerovo region (Kemerovo oblast') will not change the clock.
    @@ -2334,152 +2520,319 @@ Zone Asia/Novosibirsk	 5:31:40 -	LMT	1919 Dec 14 6:00
     # As a result, Kemerovo oblast' will be in the same time zone as
     # Novosibirsk, Omsk, Tomsk, Barnaul and Altai Republic.
     
    +# From Tim Parenti (2014-07-02), per Alexander Krivenyshev (2014-07-02):
    +# The Kemerovo region will remain at UTC+7 through the 2014-10-26 change, thus
    +# realigning itself with KRAT.
    +
     Zone Asia/Novokuznetsk	 5:48:48 -	NMT	1920 Jan  6
     			 6:00	-	KRAT	1930 Jun 21 # Krasnoyarsk Time
    -			 7:00	Russia	KRA%sT	1991 Mar 31 2:00s
    -			 6:00	Russia	KRA%sT	1992 Jan 19 2:00s
    -			 7:00	Russia	KRA%sT	2010 Mar 28 2:00s
    -			 6:00	Russia	NOV%sT	2011 Mar 27 2:00s
    -			 7:00	-	NOVT # Novosibirsk/Novokuznetsk Time
    +			 7:00	Russia	KRA%sT	1991 Mar 31  2:00s
    +			 6:00	Russia	KRA%sT	1992 Jan 19  2:00s
    +			 7:00	Russia	KRA%sT	2010 Mar 28  2:00s
    +			 6:00	Russia	NOV%sT	2011 Mar 27  2:00s # Novosibirsk
    +			 7:00	-	NOVT	2014 Oct 26  2:00s
    +			 7:00	-	KRAT	# Krasnoyarsk Time
     
    +
    +# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
    +# Asia/Krasnoyarsk covers...
    +# 17	RU-TY	Tuva Republic
    +# 19	RU-KK	Khakassia, Republic of
    +# 24	RU-KYA	Krasnoyarsk Krai
     #
    -# From Oscar van Vlijmen (2001-08-25): [This region consists of]
    -# Krasnoyarskij kraj,
    -# Tajmyrskij (Dolgano-Nenetskij) avtonomnyj okrug,
    -# Respublika Tuva, Respublika Khakasiya, Evenkijskij avtonomnyj okrug.
    -Zone Asia/Krasnoyarsk	 6:11:20 -	LMT	1920 Jan  6
    +# Note: Effective 2007-01-01, (88) Evenk Autonomous Okrug and (84) Taymyr
    +# Autonomous Okrug were merged into (24, RU-KYA) Krasnoyarsk Krai.
    +
    +# Byalokoz 1919 says Krasnoyarsk was 6:11:26.
    +
    +Zone Asia/Krasnoyarsk	 6:11:26 -	LMT	1920 Jan  6
     			 6:00	-	KRAT	1930 Jun 21 # Krasnoyarsk Time
    -			 7:00	Russia	KRA%sT	1991 Mar 31 2:00s
    -			 6:00	Russia	KRA%sT	1992 Jan 19 2:00s
    -			 7:00	Russia	KRA%sT	2011 Mar 27 2:00s
    -			 8:00	-	KRAT
    +			 7:00	Russia	KRA%sT	1991 Mar 31  2:00s
    +			 6:00	Russia	KRA%sT	1992 Jan 19  2:00s
    +			 7:00	Russia	KRA%sT	2011 Mar 27  2:00s
    +			 8:00	-	KRAT	2014 Oct 26  2:00s
    +			 7:00	-	KRAT
    +
    +
    +# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
    +# Asia/Irkutsk covers...
    +# 03	RU-BU	Buryatia, Republic of
    +# 38	RU-IRK	Irkutsk Oblast
     #
    -# From Oscar van Vlijmen (2001-08-25): [This region consists of]
    -# Respublika Buryatiya, Irkutskaya oblast',
    -# Ust'-Ordynskij Buryatskij avtonomnyj okrug.
    -Zone Asia/Irkutsk	 6:57:20 -	LMT	1880
    -			 6:57:20 -	IMT	1920 Jan 25 # Irkutsk Mean Time
    +# Note: Effective 2008-01-01, (85) Ust-Orda Buryat Autonomous Okrug was
    +# merged into (38, RU-IRK) Irkutsk Oblast.
    +
    +# Milne 1899 says Irkutsk was 6:57:15.
    +# Byalokoz 1919 says Irkutsk was 6:57:05.
    +# Go with Byalokoz.
    +
    +Zone Asia/Irkutsk	 6:57:05 -	LMT	1880
    +			 6:57:05 -	IMT	1920 Jan 25 # Irkutsk Mean Time
     			 7:00	-	IRKT	1930 Jun 21 # Irkutsk Time
    -			 8:00	Russia	IRK%sT	1991 Mar 31 2:00s
    -			 7:00	Russia	IRK%sT	1992 Jan 19 2:00s
    -			 8:00	Russia	IRK%sT	2011 Mar 27 2:00s
    -			 9:00	-	IRKT
    +			 8:00	Russia	IRK%sT	1991 Mar 31  2:00s
    +			 7:00	Russia	IRK%sT	1992 Jan 19  2:00s
    +			 8:00	Russia	IRK%sT	2011 Mar 27  2:00s
    +			 9:00	-	IRKT	2014 Oct 26  2:00s
    +			 8:00	-	IRKT
    +
    +
    +# From Tim Parenti (2014-07-06):
    +# Asia/Chita covers...
    +# 92	RU-ZAB	Zabaykalsky Krai
     #
    -# From Oscar van Vlijmen (2003-10-18): [This region consists of]
    -# Aginskij Buryatskij avtonomnyj okrug, Amurskaya oblast',
    -# [parts of] Respublika Sakha (Yakutiya), Chitinskaya oblast'.
    +# Note: Effective 2008-03-01, (75) Chita Oblast and (80) Agin-Buryat
    +# Autonomous Okrug merged to form (92, RU-ZAB) Zabaykalsky Krai.
     
    -# From Oscar van Vlijmen (2009-11-29):
    -# ...some regions of [Russia] were merged with others since 2005...
    -# Some names were changed, no big deal, except for one instance: a new name.
    -# YAK/YAKST: UTC+9 Zabajkal'skij kraj.
    -
    -# From Oscar van Vlijmen (2009-11-29):
    -# The Sakha districts are: Aldanskij, Amginskij, Anabarskij,
    -# Verkhnevilyujskij, Vilyujskij, Gornyj,
    -# Zhiganskij, Kobyajskij, Lenskij, Megino-Kangalasskij, Mirninskij,
    -# Namskij, Nyurbinskij, Olenyokskij, Olyokminskij,
    -# Suntarskij, Tattinskij, Ust'-Aldanskij, Khangalasskij,
    -# Churapchinskij, Eveno-Bytantajskij Natsional'nij.
    -
    -Zone Asia/Yakutsk	 8:38:40 -	LMT	1919 Dec 15
    +Zone Asia/Chita	 7:33:52 -	LMT	1919 Dec 15
     			 8:00	-	YAKT	1930 Jun 21 # Yakutsk Time
    -			 9:00	Russia	YAK%sT	1991 Mar 31 2:00s
    -			 8:00	Russia	YAK%sT	1992 Jan 19 2:00s
    -			 9:00	Russia	YAK%sT	2011 Mar 27 2:00s
    -			 10:00	-	YAKT
    -#
    -# From Oscar van Vlijmen (2003-10-18): [This region consists of]
    -# Evrejskaya avtonomnaya oblast', Khabarovskij kraj, Primorskij kraj,
    -# [parts of] Respublika Sakha (Yakutiya).
    +			 9:00	Russia	YAK%sT	1991 Mar 31  2:00s
    +			 8:00	Russia	YAK%sT	1992 Jan 19  2:00s
    +			 9:00	Russia	YAK%sT	2011 Mar 27  2:00s
    +			10:00	-	YAKT	2014 Oct 26  2:00s
    +			 8:00	-	IRKT
     
    -# From Oscar van Vlijmen (2009-11-29):
    -# The Sakha districts are: Bulunskij, Verkhoyanskij, ... Ust'-Yanskij.
    -Zone Asia/Vladivostok	 8:47:44 -	LMT	1922 Nov 15
    +
    +# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
    +# Asia/Yakutsk covers...
    +# 28	RU-AMU	Amur Oblast
    +#
    +# ...and parts of (14, RU-SA) Sakha (Yakutia) Republic:
    +# 14-02	****	Aldansky District
    +# 14-04	****	Amginsky District
    +# 14-05	****	Anabarsky District
    +# 14-06	****	Bulunsky District
    +# 14-07	****	Verkhnevilyuysky District
    +# 14-10	****	Vilyuysky District
    +# 14-11	****	Gorny District
    +# 14-12	****	Zhigansky District
    +# 14-13	****	Kobyaysky District
    +# 14-14	****	Lensky District
    +# 14-15	****	Megino-Kangalassky District
    +# 14-16	****	Mirninsky District
    +# 14-18	****	Namsky District
    +# 14-19	****	Neryungrinsky District
    +# 14-21	****	Nyurbinsky District
    +# 14-23	****	Olenyoksky District
    +# 14-24	****	Olyokminsky District
    +# 14-26	****	Suntarsky District
    +# 14-27	****	Tattinsky District
    +# 14-29	****	Ust-Aldansky District
    +# 14-32	****	Khangalassky District
    +# 14-33	****	Churapchinsky District
    +# 14-34	****	Eveno-Bytantaysky National District
    +
    +# From Tim Parenti (2014-07-03):
    +# Our commentary seems to have lost mention of (14-19) Neryungrinsky District.
    +# Since the surrounding districts of Sakha are all YAKT, assume this is, too.
    +# Also assume its history has been the same as the rest of Asia/Yakutsk.
    +
    +# Byalokoz 1919 says Yakutsk was 8:38:58.
    +
    +Zone Asia/Yakutsk	 8:38:58 -	LMT	1919 Dec 15
    +			 8:00	-	YAKT	1930 Jun 21 # Yakutsk Time
    +			 9:00	Russia	YAK%sT	1991 Mar 31  2:00s
    +			 8:00	Russia	YAK%sT	1992 Jan 19  2:00s
    +			 9:00	Russia	YAK%sT	2011 Mar 27  2:00s
    +			10:00	-	YAKT	2014 Oct 26  2:00s
    +			 9:00	-	YAKT
    +
    +
    +# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
    +# Asia/Vladivostok covers...
    +# 25	RU-PRI	Primorsky Krai
    +# 27	RU-KHA	Khabarovsk Krai
    +# 79	RU-YEV	Jewish Autonomous Oblast
    +#
    +# ...and parts of (14, RU-SA) Sakha (Yakutia) Republic:
    +# 14-09	****	Verkhoyansky District
    +# 14-31	****	Ust-Yansky District
    +
    +# Milne 1899 says Vladivostok was 8:47:33.5.
    +# Byalokoz 1919 says Vladivostok was 8:47:31.
    +# Go with Byalokoz.
    +
    +Zone Asia/Vladivostok	 8:47:31 -	LMT	1922 Nov 15
     			 9:00	-	VLAT	1930 Jun 21 # Vladivostok Time
    -			10:00	Russia	VLA%sT	1991 Mar 31 2:00s
    -			 9:00	Russia	VLA%sST	1992 Jan 19 2:00s
    -			10:00	Russia	VLA%sT	2011 Mar 27 2:00s
    -			11:00	-	VLAT
    +			10:00	Russia	VLA%sT	1991 Mar 31  2:00s
    +			 9:00	Russia	VLA%sT	1992 Jan 19  2:00s
    +			10:00	Russia	VLA%sT	2011 Mar 27  2:00s
    +			11:00	-	VLAT	2014 Oct 26  2:00s
    +			10:00	-	VLAT
    +
    +
    +# From Tim Parenti (2014-07-03):
    +# Asia/Khandyga covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
    +# 14-28	****	Tomponsky District
    +# 14-30	****	Ust-Maysky District
     
     # From Arthur David Olson (2012-05-09):
     # Tomponskij and Ust'-Majskij switched from Vladivostok time to Yakutsk time
     # in 2011.
    -#
    +
     # From Paul Eggert (2012-11-25):
     # Shanks and Pottenger (2003) has Khandyga on Yakutsk time.
     # Make a wild guess that it switched to Vladivostok time in 2004.
     # This transition is no doubt wrong, but we have no better info.
    -#
    +
     Zone Asia/Khandyga	 9:02:13 -	LMT	1919 Dec 15
     			 8:00	-	YAKT	1930 Jun 21 # Yakutsk Time
    -			 9:00	Russia	YAK%sT	1991 Mar 31 2:00s
    -			 8:00	Russia	YAK%sT	1992 Jan 19 2:00s
    +			 9:00	Russia	YAK%sT	1991 Mar 31  2:00s
    +			 8:00	Russia	YAK%sT	1992 Jan 19  2:00s
     			 9:00	Russia	YAK%sT	2004
    -			10:00	Russia	VLA%sT	2011 Mar 27 2:00s
    -			11:00	-	VLAT	2011 Sep 13 0:00s # Decree 725?
    -			10:00	-	YAKT
    +			10:00	Russia	VLA%sT	2011 Mar 27  2:00s
    +			11:00	-	VLAT	2011 Sep 13  0:00s # Decree 725?
    +			10:00	-	YAKT	2014 Oct 26  2:00s
    +			 9:00	-	YAKT
     
    -#
    -# Sakhalinskaya oblast'.
    -# The Zone name should be Yuzhno-Sakhalinsk, but that's too long.
    +
    +# From Tim Parenti (2014-07-03):
    +# Asia/Sakhalin covers...
    +# 65	RU-SAK	Sakhalin Oblast
    +# ...with the exception of:
    +# 65-11	****	Severo-Kurilsky District (North Kuril Islands)
    +
    +# The Zone name should be Asia/Yuzhno-Sakhalinsk, but that's too long.
     Zone Asia/Sakhalin	 9:30:48 -	LMT	1905 Aug 23
    -			 9:00	-	CJT	1938
    +			 9:00	-	JCST	1937 Oct  1
     			 9:00	-	JST	1945 Aug 25
    -			11:00	Russia	SAK%sT	1991 Mar 31 2:00s # Sakhalin T.
    -			10:00	Russia	SAK%sT	1992 Jan 19 2:00s
    -			11:00	Russia	SAK%sT	1997 Mar lastSun 2:00s
    -			10:00	Russia	SAK%sT	2011 Mar 27 2:00s
    -			11:00	-	SAKT
    -#
    -# From Oscar van Vlijmen (2003-10-18): [This region consists of]
    -# Magadanskaya oblast', Respublika Sakha (Yakutiya).
    -# Probably also: Kuril Islands.
    +			11:00	Russia	SAK%sT	1991 Mar 31  2:00s # Sakhalin T
    +			10:00	Russia	SAK%sT	1992 Jan 19  2:00s
    +			11:00	Russia	SAK%sT	1997 Mar lastSun  2:00s
    +			10:00	Russia	SAK%sT	2011 Mar 27  2:00s
    +			11:00	-	SAKT	2014 Oct 26  2:00s
    +			10:00	-	SAKT
    +
    +
    +# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
    +# Asia/Magadan covers...
    +# 49	RU-MAG	Magadan Oblast
    +
    +# From Tim Parenti (2014-07-06), per Alexander Krivenyshev (2014-07-02):
    +# Magadan Oblast is moving from UTC+12 to UTC+10 on 2014-10-26; however,
    +# several districts of Sakha Republic as well as Severo-Kurilsky District of
    +# the Sakhalin Oblast (also known as the North Kuril Islands), represented
    +# until now by Asia/Magadan, will instead move to UTC+11.  These regions will
    +# need their own zone.
     
    -# From Oscar van Vlijmen (2009-11-29):
    -# The Sakha districts are: Abyjskij, Allaikhovskij, Verkhhhnekolymskij, Momskij,
    -# Nizhnekolymskij, ... Srednekolymskij.
     Zone Asia/Magadan	10:03:12 -	LMT	1924 May  2
     			10:00	-	MAGT	1930 Jun 21 # Magadan Time
    -			11:00	Russia	MAG%sT	1991 Mar 31 2:00s
    -			10:00	Russia	MAG%sT	1992 Jan 19 2:00s
    -			11:00	Russia	MAG%sT	2011 Mar 27 2:00s
    -			12:00	-	MAGT
    +			11:00	Russia	MAG%sT	1991 Mar 31  2:00s
    +			10:00	Russia	MAG%sT	1992 Jan 19  2:00s
    +			11:00	Russia	MAG%sT	2011 Mar 27  2:00s
    +			12:00	-	MAGT	2014 Oct 26  2:00s
    +			10:00	-	MAGT
    +
    +
    +# From Tim Parenti (2014-07-06):
    +# Asia/Srednekolymsk covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
    +# 14-01	****	Abyysky District
    +# 14-03	****	Allaikhovsky District
    +# 14-08	****	Verkhnekolymsky District
    +# 14-17	****	Momsky District
    +# 14-20	****	Nizhnekolymsky District
    +# 14-25	****	Srednekolymsky District
    +#
    +# ...and parts of (65, RU-SAK) Sakhalin Oblast:
    +# 65-11	****	Severo-Kurilsky District (North Kuril Islands)
    +
    +# From Tim Parenti (2014-07-02):
    +# Oymyakonsky District of Sakha Republic (represented by Ust-Nera), along with
    +# most of Sakhalin Oblast (represented by Sakhalin) will be moving to UTC+10 on
    +# 2014-10-26 to stay aligned with VLAT/SAKT; however, Severo-Kurilsky District
    +# of the Sakhalin Oblast (also known as the North Kuril Islands, represented by
    +# Severo-Kurilsk) will remain on UTC+11.
    +
    +# From Tim Parenti (2014-07-06):
    +# Assume North Kuril Islands have history like Magadan before 2011-03-27.
    +# There is a decent chance this is wrong, in which case a new zone
    +# Asia/Severo-Kurilsk would become necessary.
    +#
    +# Srednekolymsk and Zyryanka are the most populous places amongst these
    +# districts, but have very similar populations.  In fact, Wikipedia currently
    +# lists them both as having 3528 people, exactly 1668 males and 1860 females
    +# each!  (Yikes!)
    +# http://en.wikipedia.org/w/?title=Srednekolymsky_District&oldid=603435276
    +# http://en.wikipedia.org/w/?title=Verkhnekolymsky_District&oldid=594378493
    +# Assume this is a mistake, albeit an amusing one.
    +#
    +# Looking at censuses, the populations of the two municipalities seem to have
    +# fluctuated recently.  Zyryanka was more populous than Srednekolymsk in the
    +# 1989 and 2002 censuses, but Srednekolymsk was more populous in the most
    +# recent (2010) census, 3525 to 3170.  (See pages 195 and 197 of
    +# http://www.gks.ru/free_doc/new_site/perepis2010/croc/Documents/Vol1/pub-01-05.pdf
    +# in Russian.)  In addition, Srednekolymsk appears to be a much older
    +# settlement and the population of Zyryanka seems to be declining.
    +# Go with Srednekolymsk.
    +#
    +# Since Magadan Oblast moves to UTC+10 on 2014-10-26, we cannot keep using MAGT
    +# as the abbreviation.  Use SRET instead.
    +
    +Zone Asia/Srednekolymsk	10:14:52 -	LMT	1924 May  2
    +			10:00	-	MAGT	1930 Jun 21 # Magadan Time
    +			11:00	Russia	MAG%sT	1991 Mar 31  2:00s
    +			10:00	Russia	MAG%sT	1992 Jan 19  2:00s
    +			11:00	Russia	MAG%sT	2011 Mar 27  2:00s
    +			12:00	-	MAGT	2014 Oct 26  2:00s
    +			11:00	-	SRET	# Srednekolymsk Time
    +
    +
    +# From Tim Parenti (2014-07-03):
    +# Asia/Ust-Nera covers parts of (14, RU-SA) Sakha (Yakutia) Republic:
    +# 14-22	****	Oymyakonsky District
     
     # From Arthur David Olson (2012-05-09):
    -# Ojmyakonskij and the Kuril Islands switched from
    +# Ojmyakonskij [and the Kuril Islands] switched from
     # Magadan time to Vladivostok time in 2011.
    +#
    +# From Tim Parenti (2014-07-06), per Alexander Krivenyshev (2014-07-02):
    +# It's unlikely that any of the Kuril Islands were involved in such a switch,
    +# as the South and Middle Kurils have been on UTC+11 (SAKT) with the rest of
    +# Sakhalin Oblast since at least 2011-09, and the North Kurils have been on
    +# UTC+12 since at least then, too.
    +
     Zone Asia/Ust-Nera	 9:32:54 -	LMT	1919 Dec 15
     			 8:00	-	YAKT	1930 Jun 21 # Yakutsk Time
     			 9:00	Russia	YAKT	1981 Apr  1
    -			11:00	Russia	MAG%sT	1991 Mar 31 2:00s
    -			10:00	Russia	MAG%sT	1992 Jan 19 2:00s
    -			11:00	Russia	MAG%sT	2011 Mar 27 2:00s
    -			12:00	-	MAGT	2011 Sep 13 0:00s # Decree 725?
    -			11:00	-	VLAT
    +			11:00	Russia	MAG%sT	1991 Mar 31  2:00s
    +			10:00	Russia	MAG%sT	1992 Jan 19  2:00s
    +			11:00	Russia	MAG%sT	2011 Mar 27  2:00s
    +			12:00	-	MAGT	2011 Sep 13  0:00s # Decree 725?
    +			11:00	-	VLAT	2014 Oct 26  2:00s
    +			10:00	-	VLAT
     
    -# From Oscar van Vlijmen (2001-08-25): [This region consists of]
    -# Kamchatskaya oblast', Koryakskij avtonomnyj okrug.
    +
    +# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
    +# Asia/Kamchatka covers...
    +# 91	RU-KAM	Kamchatka Krai
     #
    -# The Zone name should be Asia/Petropavlovsk-Kamchatski, but that's too long.
    +# Note: Effective 2007-07-01, (41) Kamchatka Oblast and (82) Koryak
    +# Autonomous Okrug merged to form (91, RU-KAM) Kamchatka Krai.
    +
    +# The Zone name should be Asia/Petropavlovsk-Kamchatski or perhaps
    +# Asia/Petropavlovsk-Kamchatsky, but these are too long.
     Zone Asia/Kamchatka	10:34:36 -	LMT	1922 Nov 10
     			11:00	-	PETT	1930 Jun 21 # P-K Time
    -			12:00	Russia	PET%sT	1991 Mar 31 2:00s
    -			11:00	Russia	PET%sT	1992 Jan 19 2:00s
    -			12:00	Russia	PET%sT	2010 Mar 28 2:00s
    -			11:00	Russia	PET%sT	2011 Mar 27 2:00s
    +			12:00	Russia	PET%sT	1991 Mar 31  2:00s
    +			11:00	Russia	PET%sT	1992 Jan 19  2:00s
    +			12:00	Russia	PET%sT	2010 Mar 28  2:00s
    +			11:00	Russia	PET%sT	2011 Mar 27  2:00s
     			12:00	-	PETT
    -#
    -# Chukotskij avtonomnyj okrug
    +
    +
    +# From Tim Parenti (2014-07-03):
    +# Asia/Anadyr covers...
    +# 87	RU-CHU	Chukotka Autonomous Okrug
    +
     Zone Asia/Anadyr	11:49:56 -	LMT	1924 May  2
     			12:00	-	ANAT	1930 Jun 21 # Anadyr Time
    -			13:00	Russia	ANA%sT	1982 Apr  1 0:00s
    -			12:00	Russia	ANA%sT	1991 Mar 31 2:00s
    -			11:00	Russia	ANA%sT	1992 Jan 19 2:00s
    -			12:00	Russia	ANA%sT	2010 Mar 28 2:00s
    -			11:00	Russia	ANA%sT	2011 Mar 27 2:00s
    +			13:00	Russia	ANA%sT	1982 Apr  1  0:00s
    +			12:00	Russia	ANA%sT	1991 Mar 31  2:00s
    +			11:00	Russia	ANA%sT	1992 Jan 19  2:00s
    +			12:00	Russia	ANA%sT	2010 Mar 28  2:00s
    +			11:00	Russia	ANA%sT	2011 Mar 27  2:00s
     			12:00	-	ANAT
     
    +
     # San Marino
     # See Europe/Rome.
     
    @@ -2488,11 +2841,11 @@ Zone Asia/Anadyr	11:49:56 -	LMT	1924 May  2
     Zone	Europe/Belgrade	1:22:00	-	LMT	1884
     			1:00	-	CET	1941 Apr 18 23:00
     			1:00	C-Eur	CE%sT	1945
    -			1:00	-	CET	1945 May 8 2:00s
    +			1:00	-	CET	1945 May  8  2:00s
     			1:00	1:00	CEST	1945 Sep 16  2:00s
    -# Metod Kozelj reports that the legal date of
    +# Metod Koželj reports that the legal date of
     # transition to EU rules was 1982-11-27, for all of Yugoslavia at the time.
    -# Shanks & Pottenger don't give as much detail, so go with Kozelj.
    +# Shanks & Pottenger don't give as much detail, so go with Koželj.
     			1:00	-	CET	1982 Nov 27
     			1:00	EU	CE%sT
     Link Europe/Belgrade Europe/Ljubljana	# Slovenia
    @@ -2568,13 +2921,13 @@ Zone	Africa/Ceuta	-0:21:16 -	LMT	1901
     			 0:00	1:00	WEST	1918 Oct  7 23:00
     			 0:00	-	WET	1924
     			 0:00	Spain	WE%sT	1929
    -			 0:00 SpainAfrica WE%sT 1984 Mar 16
    +			 0:00 SpainAfrica WE%sT	1984 Mar 16
     			 1:00	-	CET	1986
     			 1:00	EU	CE%sT
     Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
    -			-1:00	-	CANT	1946 Sep 30 1:00 # Canaries Time
    -			 0:00	-	WET	1980 Apr  6 0:00s
    -			 0:00	1:00	WEST	1980 Sep 28 0:00s
    +			-1:00	-	CANT	1946 Sep 30  1:00 # Canaries T
    +			 0:00	-	WET	1980 Apr  6  0:00s
    +			 0:00	1:00	WEST	1980 Sep 28  0:00s
     			 0:00	EU	WE%sT
     # IATA SSIM (1996-09) says the Canaries switch at 2:00u, not 1:00u.
     # Ignore this for now, as the Canaries are part of the EU.
    @@ -2583,7 +2936,7 @@ Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
     
     # From Ivan Nilsson (2001-04-13), superseding Shanks & Pottenger:
     #
    -# The law "Svensk forfattningssamling 1878, no 14" about standard time in 1879:
    +# The law "Svensk författningssamling 1878, no 14" about standard time in 1879:
     # From the beginning of 1879 (that is 01-01 00:00) the time for all
     # places in the country is "the mean solar time for the meridian at
     # three degrees, or twelve minutes of time, to the west of the
    @@ -2594,7 +2947,7 @@ Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
     # national standard time as 01:00:14 ahead of GMT....
     #
     # About the beginning of CET in Sweden. The lawtext ("Svensk
    -# forfattningssamling 1899, no 44") states, that "from the beginning
    +# författningssamling 1899, no 44") states, that "from the beginning
     # of 1900... ... the same as the mean solar time for the meridian at
     # the distance of one hour of time from the meridian of the English
     # observatory at Greenwich, or at 12 minutes 14 seconds to the west
    @@ -2602,7 +2955,7 @@ Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
     # 1899-06-16.  In short: At 1900-01-01 00:00:00 the new standard time
     # in Sweden is 01:00:00 ahead of GMT.
     #
    -# 1916: The lawtext ("Svensk forfattningssamling 1916, no 124") states
    +# 1916: The lawtext ("Svensk författningssamling 1916, no 124") states
     # that "1916-05-15 is considered to begin one hour earlier". It is
     # pretty obvious that at 05-14 23:00 the clocks are set to 05-15 00:00....
     # Further the law says, that "1916-09-30 is considered to end one hour later".
    @@ -2612,7 +2965,7 @@ Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
     # not available on the site (to my knowledge they are only available
     # in Swedish):  (type
     # "sommartid" without the quotes in the field "Fritext" and then click
    -# the Sok-button).
    +# the Sök-button).
     #
     # (2001-05-13):
     #
    @@ -2627,9 +2980,9 @@ Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Europe/Stockholm	1:12:12 -	LMT	1879 Jan  1
    -			1:00:14	-	SET	1900 Jan  1	# Swedish Time
    +			1:00:14	-	SET	1900 Jan  1 # Swedish Time
     			1:00	-	CET	1916 May 14 23:00
    -			1:00	1:00	CEST	1916 Oct  1 01:00
    +			1:00	1:00	CEST	1916 Oct  1  1:00
     			1:00	-	CET	1980
     			1:00	EU	CE%sT
     
    @@ -2637,7 +2990,7 @@ Zone Europe/Stockholm	1:12:12 -	LMT	1879 Jan  1
     # From Howse:
     # By the end of the 18th century clocks and watches became commonplace
     # and their performance improved enormously.  Communities began to keep
    -# mean time in preference to apparent time -- Geneva from 1780 ....
    +# mean time in preference to apparent time - Geneva from 1780 ....
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
     # From Whitman (who writes "Midnight?"):
     # Rule	Swiss	1940	only	-	Nov	 2	0:00	1:00	S
    @@ -2653,7 +3006,7 @@ Zone Europe/Stockholm	1:12:12 -	LMT	1879 Jan  1
     # to be wrong. This is now verified.
     #
     # I have found copies of the original ruling by the Swiss Federal
    -# government, in 'Eidgen[o]ssische Gesetzessammlung 1941 and 1942' (Swiss
    +# government, in 'Eidgenössische Gesetzessammlung 1941 and 1942' (Swiss
     # federal law collection)...
     #
     # DST began on Monday 5 May 1941, 1:00 am by shifting the clocks to 2:00 am
    @@ -2672,7 +3025,7 @@ Zone Europe/Stockholm	1:12:12 -	LMT	1879 Jan  1
     # night as an absolute novelty, because this was the first time that such
     # a thing had happened in Switzerland.
     #
    -# I have also checked 1916, because one book source (Gabriel, Traite de
    +# I have also checked 1916, because one book source (Gabriel, Traité de
     # l'heure dans le monde) claims that Switzerland had DST in 1916. This is
     # false, no official document could be found. Probably Gabriel got misled
     # by references to Germany, which introduced DST in 1916 for the first time.
    @@ -2686,19 +3039,19 @@ Zone Europe/Stockholm	1:12:12 -	LMT	1879 Jan  1
     # One further detail for Switzerland, which is probably out of scope for
     # most users of tzdata: The [Europe/Zurich zone] ...
     # describes all of Switzerland correctly, with the exception of
    -# the Cantone Geneve (Geneva, Genf). Between 1848 and 1894 Geneve did not
    +# the Canton de Genève (Geneva, Genf). Between 1848 and 1894 Geneva did not
     # follow Bern Mean Time but kept its own local mean time.
     # To represent this, an extra zone would be needed.
     #
     # From Alois Treindl (2013-09-11):
     # The Federal regulations say
     # http://www.admin.ch/opc/de/classified-compilation/20071096/index.html
    -# ... the meridian for Bern mean time ... is 7 degrees 26'22.50".
    +# ... the meridian for Bern mean time ... is 7 degrees 26' 22.50".
     # Expressed in time, it is 0h29m45.5s.
     
     # From Pierre-Yves Berger (2013-09-11):
    -# the "Circulaire du conseil federal" (December 11 1893)
    -#  ...
    +# the "Circulaire du conseil fédéral" (December 11 1893)
    +# http://www.amtsdruckschriften.bar.admin.ch/viewOrigDoc.do?id=10071353
     # clearly states that the [1894-06-01] change should be done at midnight
     # but if no one is present after 11 at night, could be postponed until one
     # hour before the beginning of service.
    @@ -2709,14 +3062,14 @@ Zone Europe/Stockholm	1:12:12 -	LMT	1879 Jan  1
     # We can find no reliable source for Shanks's assertion that all of Switzerland
     # except Geneva switched to Bern Mean Time at 00:00 on 1848-09-12.  This book:
     #
    -#	Jakob Messerli. Gleichmassig, punktlich, schnell: Zeiteinteilung und
    +#	Jakob Messerli. Gleichmässig, pünktlich, schnell. Zeiteinteilung und
     #	Zeitgebrauch in der Schweiz im 19. Jahrhundert. Chronos, Zurich 1995,
     #	ISBN 3-905311-68-2, OCLC 717570797.
     #
     # suggests that the transition was more gradual, and that the Swiss did not
     # agree about civil time during the transition.  The timekeeping it gives the
     # most detail for is postal and telegraph time: here, federal legislation (the
    -# "Bundesgesetz uber die Erstellung von elektrischen Telegraphen") passed on
    +# "Bundesgesetz über die Erstellung von elektrischen Telegraphen") passed on
     # 1851-11-23, and an official implementation notice was published 1853-07-16
     # (Bundesblatt 1853, Bd. II, S. 859).  On p 72 Messerli writes that in
     # practice since July 1853 Bernese time was used in "all postal and telegraph
    @@ -2730,7 +3083,7 @@ Rule	Swiss	1941	1942	-	May	Mon>=1	1:00	1:00	S
     Rule	Swiss	1941	1942	-	Oct	Mon>=1	2:00	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	Europe/Zurich	0:34:08 -	LMT	1853 Jul 16 # See above comment.
    -			0:29:46	-	BMT	1894 Jun # Bern Mean Time
    +			0:29:46	-	BMT	1894 Jun    # Bern Mean Time
     			1:00	Swiss	CE%sT	1981
     			1:00	EU	CE%sT
     
    @@ -2738,7 +3091,7 @@ Zone	Europe/Zurich	0:34:08 -	LMT	1853 Jul 16 # See above comment.
     
     # From Amar Devegowda (2007-01-03):
     # The time zone rules for Istanbul, Turkey have not been changed for years now.
    -# ... The latest rules are available at -
    +# ... The latest rules are available at:
     # http://www.timeanddate.com/worldclock/timezone.html?n=107
     # From Steffen Thorsen (2007-01-03):
     # I have been able to find press records back to 1996 which all say that
    @@ -2763,8 +3116,7 @@ Zone	Europe/Zurich	0:34:08 -	LMT	1853 Jul 16 # See above comment.
     # (on a non-government server though) describing dates between 2002 and 2006:
     # http://www.alomaliye.com/bkk_2002_3769.htm
     
    -# From Gökdeniz Karadağ (2011-03-10):
    -#
    +# From Gökdeniz Karadağ (2011-03-10):
     # According to the articles linked below, Turkey will change into summer
     # time zone (GMT+3) on March 28, 2011 at 3:00 a.m. instead of March 27.
     # This change is due to a nationwide exam on 27th.
    @@ -2777,9 +3129,16 @@ Zone	Europe/Zurich	0:34:08 -	LMT	1853 Jul 16 # See above comment.
     # Turkish Local election....
     # http://www.sabah.com.tr/Ekonomi/2014/02/12/yaz-saatinde-onemli-degisiklik
     # ... so Turkey will move clocks forward one hour on March 31 at 3:00 a.m.
    -# From Paul Eggert (2014-02-17):
    -# Here is an English-language source:
    -# http://www.worldbulletin.net/turkey/129016/turkey-switches-to-daylight-saving-time-march-31
    +# From Randal L. Schwartz (2014-04-15):
    +# Having landed on a flight from the states to Istanbul (via AMS) on March 31,
    +# I can tell you that NOBODY (even the airlines) respected this timezone DST
    +# change delay.  Maybe the word just didn't get out in time.
    +# From Paul Eggert (2014-06-15):
    +# The press reported massive confusion, as election officials obeyed the rule
    +# change but cell phones (and airline baggage systems) did not.  See:
    +# Kostidis M. Eventful elections in Turkey. Balkan News Agency
    +# http://www.balkaneu.com/eventful-elections-turkey/ 2014-03-30.
    +# I guess the best we can do is document the official time.
     
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
     Rule	Turkey	1916	only	-	May	 1	0:00	1:00	S
    @@ -2846,10 +3205,10 @@ Zone	Europe/Istanbul	1:55:52 -	LMT	1880
     			2:00	Turkey	EE%sT	1978 Oct 15
     			3:00	Turkey	TR%sT	1985 Apr 20 # Turkey Time
     			2:00	Turkey	EE%sT	2007
    -			2:00	EU	EE%sT	2011 Mar 27 1:00u
    -			2:00	-	EET	2011 Mar 28 1:00u
    -			2:00	EU	EE%sT	2014 Mar 30 1:00u
    -			2:00	-	EET	2014 Mar 31 1:00u
    +			2:00	EU	EE%sT	2011 Mar 27  1:00u
    +			2:00	-	EET	2011 Mar 28  1:00u
    +			2:00	EU	EE%sT	2014 Mar 30  1:00u
    +			2:00	-	EET	2014 Mar 31  1:00u
     			2:00	EU	EE%sT
     Link	Europe/Istanbul	Asia/Istanbul	# Istanbul is in both continents.
     
    @@ -2870,7 +3229,7 @@ Link	Europe/Istanbul	Asia/Istanbul	# Istanbul is in both continents.
     # Bill number 8330 of MP from the Party of Regions Oleg Nadoshi got
     # approval from 266 deputies.
     #
    -# Ukraine abolishes transter back to the winter time (in Russian)
    +# Ukraine abolishes transfer back to the winter time (in Russian)
     # http://news.mail.ru/politics/6861560/
     #
     # The Ukrainians will no longer change the clock (in Russian)
    @@ -2931,12 +3290,12 @@ Zone Europe/Kiev	2:02:04 -	LMT	1880
     			2:00	-	EET	1930 Jun 21
     			3:00	-	MSK	1941 Sep 20
     			1:00	C-Eur	CE%sT	1943 Nov  6
    -			3:00	Russia	MSK/MSD	1990 Jul  1 2:00
    -			2:00	1:00	EEST	1991 Sep 29 3:00
    +			3:00	Russia	MSK/MSD	1990 Jul  1  2:00
    +			2:00	1:00	EEST	1991 Sep 29  3:00
     			2:00	E-Eur	EE%sT	1995
     			2:00	EU	EE%sT
     # Ruthenia used CET 1990/1991.
    -# "Uzhhorod" is the transliteration of the Ukrainian name, but
    +# "Uzhhorod" is the transliteration of the Rusyn/Ukrainian pronunciation, but
     # "Uzhgorod" is more common in English.
     Zone Europe/Uzhgorod	1:29:12 -	LMT	1890 Oct
     			1:00	-	CET	1940
    @@ -2944,8 +3303,8 @@ Zone Europe/Uzhgorod	1:29:12 -	LMT	1890 Oct
     			1:00	1:00	CEST	1944 Oct 26
     			1:00	-	CET	1945 Jun 29
     			3:00	Russia	MSK/MSD	1990
    -			3:00	-	MSK	1990 Jul  1 2:00
    -			1:00	-	CET	1991 Mar 31 3:00
    +			3:00	-	MSK	1990 Jul  1  2:00
    +			1:00	-	CET	1991 Mar 31  3:00
     			2:00	-	EET	1992
     			2:00	E-Eur	EE%sT	1995
     			2:00	EU	EE%sT
    @@ -2959,42 +3318,9 @@ Zone Europe/Zaporozhye	2:20:40 -	LMT	1880
     			2:00	-	EET	1930 Jun 21
     			3:00	-	MSK	1941 Aug 25
     			1:00	C-Eur	CE%sT	1943 Oct 25
    -			3:00	Russia	MSK/MSD	1991 Mar 31 2:00
    +			3:00	Russia	MSK/MSD	1991 Mar 31  2:00
     			2:00	E-Eur	EE%sT	1995
     			2:00	EU	EE%sT
    -# Central Crimea used Moscow time 1994/1997.
    -Zone Europe/Simferopol	2:16:24 -	LMT	1880
    -			2:16	-	SMT	1924 May  2 # Simferopol Mean T
    -			2:00	-	EET	1930 Jun 21
    -			3:00	-	MSK	1941 Nov
    -			1:00	C-Eur	CE%sT	1944 Apr 13
    -			3:00	Russia	MSK/MSD	1990
    -			3:00	-	MSK	1990 Jul  1 2:00
    -			2:00	-	EET	1992
    -# From Paul Eggert (2006-03-22):
    -# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
    -# from Kiev to Moscow time sometime after the January 1994 elections.
    -# Shanks (1999) says "date of change uncertain", but implies that it happened
    -# sometime between the 1994 DST switches.  Shanks & Pottenger simply say
    -# 1994-09-25 03:00, but that can't be right.  For now, guess it
    -# changed in May.
    -			2:00	E-Eur	EE%sT	1994 May
    -# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.
    -			3:00	E-Eur	MSK/MSD	1996 Mar 31 3:00s
    -			3:00	1:00	MSD	1996 Oct 27 3:00s
    -# IATA SSIM (1997-09) says Crimea switched to EET/EEST.
    -# Assume it happened in March by not changing the clocks.
    -			3:00	Russia	MSK/MSD	1997
    -			3:00	-	MSK	1997 Mar lastSun 1:00u
    -# From Alexander Krivenyshev (2014-03-17):
    -# time change at 2:00 (2am) on March 30, 2014
    -# http://vz.ru/news/2014/3/17/677464.html
    -# From Paul Eggert (2014-03-30):
    -# Simferopol and Sevastopol reportedly changed their central town clocks
    -# late the previous day, but this appears to have been ceremonial
    -# and the discrepancies are small enough to not worry about.
    -			2:00	EU	EE%sT	2014 Mar 30 2:00
    -			4:00	-	MSK
     
     # Vatican City
     # See Europe/Rome.
    @@ -3018,7 +3344,7 @@ Zone Europe/Simferopol	2:16:24 -	LMT	1880
     # ...
     #
     # ...the European time rules are...standardized since 1981, when
    -# most European coun[tr]ies started DST.  Before that year, only
    +# most European countries started DST.  Before that year, only
     # a few countries (UK, France, Italy) had DST, each according
     # to own national rules.  In 1981, however, DST started on
     # 'Apr firstSun', and not on 'Mar lastSun' as in the following
    @@ -3026,7 +3352,7 @@ Zone Europe/Simferopol	2:16:24 -	LMT	1880
     # But also since 1981 there are some more national exceptions
     # than listed in 'europe': Switzerland, for example, joined DST
     # one year later, Denmark ended DST on 'Oct 1' instead of 'Sep
    -# lastSun' in 1981---I don't know how they handle now.
    +# lastSun' in 1981 - I don't know how they handle now.
     #
     # Finally, DST ist always from 'Apr 1' to 'Oct 1' in the
     # Soviet Union (as far as I know).
    diff --git a/jdk/test/sun/util/calendar/zi/tzdata/factory b/jdk/test/sun/util/calendar/zi/tzdata/factory
    index 813d99a1f1f..0a6041db07e 100644
    --- a/jdk/test/sun/util/calendar/zi/tzdata/factory
    +++ b/jdk/test/sun/util/calendar/zi/tzdata/factory
    @@ -21,7 +21,6 @@
     # or visit www.oracle.com if you need additional information or have any
     # questions.
     #
    -# 
     # This file is in the public domain, so clarified as of
     # 2009-05-17 by Arthur David Olson.
     
    diff --git a/jdk/test/sun/util/calendar/zi/tzdata/iso3166.tab b/jdk/test/sun/util/calendar/zi/tzdata/iso3166.tab
    index 28fb64b647e..63eadcbd0c5 100644
    --- a/jdk/test/sun/util/calendar/zi/tzdata/iso3166.tab
    +++ b/jdk/test/sun/util/calendar/zi/tzdata/iso3166.tab
    @@ -26,21 +26,21 @@
     # This file is in the public domain, so clarified as of
     # 2009-05-17 by Arthur David Olson.
     #
    -# From Paul Eggert (2013-05-27):
    +# From Paul Eggert (2014-07-18):
    +# This file contains a table of two-letter country codes.  Columns are
    +# separated by a single tab.  Lines beginning with '#' are comments.
    +# Although all text currently uses ASCII encoding, this is planned to
    +# change to UTF-8 soon.  The columns of the table are as follows:
     #
    -# This file contains a table with the following columns:
     # 1.  ISO 3166-1 alpha-2 country code, current as of
    -#     ISO 3166-1 Newsletter VI-15 (2013-05-10).  See: Updates on ISO 3166
    +#     ISO 3166-1 Newsletter VI-16 (2013-07-11).  See: Updates on ISO 3166
     #   http://www.iso.org/iso/home/standards/country_codes/updates_on_iso_3166.htm
     # 2.  The usual English name for the coded region,
     #     chosen so that alphabetic sorting of subsets produces helpful lists.
     #     This is not the same as the English name in the ISO 3166 tables.
     #
    -# Columns are separated by a single tab.
     # The table is sorted by country code.
     #
    -# Lines beginning with `#' are comments.
    -#
     # This table is intended as an aid for users, to help them select time
     # zone data appropriate for their practical needs.  It is not intended
     # to take or endorse any position on legal or territorial claims.
    diff --git a/jdk/test/sun/util/calendar/zi/tzdata/leapseconds b/jdk/test/sun/util/calendar/zi/tzdata/leapseconds
    index b423135b942..d38abd6a4bd 100644
    --- a/jdk/test/sun/util/calendar/zi/tzdata/leapseconds
    +++ b/jdk/test/sun/util/calendar/zi/tzdata/leapseconds
    @@ -21,7 +21,7 @@
     # or visit www.oracle.com if you need additional information or have any
     # questions.
     #
    -# Allowance for leapseconds added to each timezone file.
    +# Allowance for leap seconds added to each time zone file.
     
     # This file is in the public domain.
     
    @@ -31,7 +31,7 @@
     # you should be able to pick up leap-seconds.list from a secondary NIST server.
     # For more about leap-seconds.list, please see
     # The NTP Timescale and Leap Seconds
    -# .
    +# http://www.eecis.udel.edu/~mills/leap.html
     
     # The International Earth Rotation Service periodically uses leap seconds
     # to keep UTC to within 0.9 s of UT1
    diff --git a/jdk/test/sun/util/calendar/zi/tzdata/northamerica b/jdk/test/sun/util/calendar/zi/tzdata/northamerica
    index dc0c2e92cff..0dc714aa92d 100644
    --- a/jdk/test/sun/util/calendar/zi/tzdata/northamerica
    +++ b/jdk/test/sun/util/calendar/zi/tzdata/northamerica
    @@ -21,15 +21,15 @@
     # or visit www.oracle.com if you need additional information or have any
     # questions.
     #
    -# 
     # This file is in the public domain, so clarified as of
     # 2009-05-17 by Arthur David Olson.
     
     # also includes Central America and the Caribbean
     
    -# This data is by no means authoritative; if you think you know better,
    +# This file is by no means authoritative; if you think you know better,
     # go ahead and edit the file (and please send any changes to
    -# tz@iana.org for general use in the future).
    +# tz@iana.org for general use in the future).  For more, please see
    +# the file CONTRIBUTING in the tz distribution.
     
     # From Paul Eggert (1999-03-22):
     # A reliable and entertaining source about time zones is
    @@ -78,13 +78,13 @@
     #	to push people into bed earlier, and get them up earlier, to make
     #	them healthy, wealthy and wise in spite of themselves.
     #
    -#	-- Robertson Davies, The diary of Samuel Marchbanks,
    +#	 -- Robertson Davies, The diary of Samuel Marchbanks,
     #	   Clarke, Irwin (1947), XIX, Sunday
     #
     # For more about the first ten years of DST in the United States, see
    -# Robert Garland's 
    -# Ten years of daylight saving from the Pittsburgh standpoint
    -# (Carnegie Library of Pittsburgh, 1927).
    +# Robert Garland, Ten years of daylight saving from the Pittsburgh standpoint
    +# (Carnegie Library of Pittsburgh, 1927).
    +# http://www.clpgh.org/exhibit/dst.html
     #
     # Shanks says that DST was called "War Time" in the US in 1918 and 1919.
     # However, DST was imposed by the Standard Time Act of 1918, which
    @@ -103,11 +103,11 @@
     # From Arthur David Olson (2000-09-25):
     # Last night I heard part of a rebroadcast of a 1945 Arch Oboler radio drama.
     # In the introduction, Oboler spoke of "Eastern Peace Time."
    -# An AltaVista search turned up
    -# :
    +# An AltaVista search turned up:
    +# http://rowayton.org/rhs/hstaug45.html
     # "When the time is announced over the radio now, it is 'Eastern Peace
     # Time' instead of the old familiar 'Eastern War Time.'  Peace is wonderful."
    -#  (August 1945) by way of confirmation.
    +# (August 1945) by way of confirmation.
     
     # From Joseph Gallant citing
     # George H. Douglas, _The Early Days of Radio Broadcasting_ (1987):
    @@ -205,7 +205,7 @@ Zone	PST8PDT		 -8:00	US	P%sT
     # USA  ALASKA STD    9 H  BEHIND UTC    MOST OF ALASKA     (AKST)
     # USA  ALASKA STD    8 H  BEHIND UTC    APR 3 - OCT 30 (AKDT)
     # USA  ALEUTIAN     10 H  BEHIND UTC    ISLANDS WEST OF 170W
    -# USA  - " -         9 H  BEHIND UTC    APR 3 - OCT 30
    +# USA    "           9 H  BEHIND UTC    APR 3 - OCT 30
     # USA  HAWAII       10 H  BEHIND UTC
     # USA  BERING       11 H  BEHIND UTC    SAMOA, MIDWAY
     
    @@ -258,19 +258,19 @@ Zone	PST8PDT		 -8:00	US	P%sT
     # The following was signed into law on 2005-08-08.
     #
     # H.R. 6, Energy Policy Act of 2005, SEC. 110. DAYLIGHT SAVINGS.
    -#   (a) Amendment- Section 3(a) of the Uniform Time Act of 1966 (15
    +#   (a) Amendment.--Section 3(a) of the Uniform Time Act of 1966 (15
     #   U.S.C. 260a(a)) is amended--
    -#     (1) by striking 'first Sunday of April' and inserting 'second
    -#     Sunday of March'; and
    -#     (2) by striking 'last Sunday of October' and inserting 'first
    +#     (1) by striking "first Sunday of April" and inserting "second
    +#     Sunday of March"; and
    +#     (2) by striking "last Sunday of October" and inserting "first
     #     Sunday of November'.
    -#   (b) Effective Date- Subsection (a) shall take effect 1 year after the
    +#   (b) Effective Date.--Subsection (a) shall take effect 1 year after the
     #   date of enactment of this Act or March 1, 2007, whichever is later.
    -#   (c) Report to Congress- Not later than 9 months after the effective
    +#   (c) Report to Congress.--Not later than 9 months after the effective
     #   date stated in subsection (b), the Secretary shall report to Congress
     #   on the impact of this section on energy consumption in the United
     #   States.
    -#   (d) Right to Revert- Congress retains the right to revert the
    +#   (d) Right to Revert.--Congress retains the right to revert the
     #   Daylight Saving Time back to the 2005 time schedules once the
     #   Department study is complete.
     
    @@ -292,7 +292,7 @@ Zone	PST8PDT		 -8:00	US	P%sT
     
     # From Paul Eggert (2005-08-26):
     # According to today's Huntsville Times
    -# 
    +# http://www.al.com/news/huntsvilletimes/index.ssf?/base/news/1125047783228320.xml&coll=1
     # a few towns on Alabama's "eastern border with Georgia, such as Phenix City
     # in Russell County, Lanett in Chambers County and some towns in Lee County,
     # set their watches and clocks on Eastern time."  It quotes H.H. "Bubba"
    @@ -347,15 +347,15 @@ Rule	Chicago	1955	1966	-	Oct	lastSun	2:00	0	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Chicago	-5:50:36 -	LMT	1883 Nov 18 12:09:24
     			-6:00	US	C%sT	1920
    -			-6:00	Chicago	C%sT	1936 Mar  1 2:00
    -			-5:00	-	EST	1936 Nov 15 2:00
    +			-6:00	Chicago	C%sT	1936 Mar  1  2:00
    +			-5:00	-	EST	1936 Nov 15  2:00
     			-6:00	Chicago	C%sT	1942
     			-6:00	US	C%sT	1946
     			-6:00	Chicago	C%sT	1967
     			-6:00	US	C%sT
     # Oliver County, ND switched from mountain to central time on 1992-10-25.
     Zone America/North_Dakota/Center -6:45:12 - LMT	1883 Nov 18 12:14:48
    -			-7:00	US	M%sT	1992 Oct 25 02:00
    +			-7:00	US	M%sT	1992 Oct 25  2:00
     			-6:00	US	C%sT
     # Morton County, ND, switched from mountain to central time on
     # 2003-10-26, except for the area around Mandan which was already central time.
    @@ -364,29 +364,26 @@ Zone America/North_Dakota/Center -6:45:12 - LMT	1883 Nov 18 12:14:48
     # Jones, Mellette, and Todd Counties in South Dakota;
     # but in practice these other counties were already observing central time.
     # See .
    -Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
    -			-7:00	US	M%sT	2003 Oct 26 02:00
    +Zone America/North_Dakota/New_Salem -6:45:39 - LMT	1883 Nov 18 12:14:21
    +			-7:00	US	M%sT	2003 Oct 26  2:00
     			-6:00	US	C%sT
     
     # From Josh Findley (2011-01-21):
     # ...it appears that Mercer County, North Dakota, changed from the
     # mountain time zone to the central time zone at the last transition from
     # daylight-saving to standard time (on Nov. 7, 2010):
    -# 
     # http://www.gpo.gov/fdsys/pkg/FR-2010-09-29/html/2010-24376.htm
    -# 
    -# 
     # http://www.bismarcktribune.com/news/local/article_1eb1b588-c758-11df-b472-001cc4c03286.html
    -# 
     
     # From Andy Lipscomb (2011-01-24):
     # ...according to the Census Bureau, the largest city is Beulah (although
     # it's commonly referred to as Beulah-Hazen, with Hazen being the next
     # largest city in Mercer County).  Google Maps places Beulah's city hall
    -# at 4715'51" north, 10146'40" west, which yields an offset of 6h47'07".
    +# at 47 degrees 15' 51" N, 101 degrees 46' 40" W, which yields an offset
    +# of 6h47'07".
     
    -Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53
    -			-7:00	US	M%sT	2010 Nov  7 2:00
    +Zone America/North_Dakota/Beulah -6:47:07 - LMT	1883 Nov 18 12:12:53
    +			-7:00	US	M%sT	2010 Nov  7  2:00
     			-6:00	US	C%sT
     
     # US mountain time, represented by Denver
    @@ -448,15 +445,18 @@ Zone America/Los_Angeles -7:52:58 -	LMT	1883 Nov 18 12:07:02
     # was destroyed in 1805 by a Yakutat-kon war party.)  However, there
     # were nearby inhabitants in some cases and for our purposes perhaps
     # it's best to simply use the official transition.
    -#
     
    -# From Steve Ferguson (2011-01-31):
    -# The author lives in Alaska and many of the references listed are only
    -# available to Alaskan residents.
    +# From Paul Eggert (2014-07-18):
    +# One opinion of the early-1980s turmoil in Alaska over time zones and
    +# daylight saving time appeared as graffiti on a Juneau airport wall:
    +# "Welcome to Juneau.  Please turn your watch back to the 19th century."
    +# See: Turner W. Alaska's four time zones now two. NY Times 1983-11-01.
    +# http://www.nytimes.com/1983/11/01/us/alaska-s-four-time-zones-now-two.html
     #
    -# 
    -# http://www.alaskahistoricalsociety.org/index.cfm?section=discover%20alaska&page=Glimpses%20of%20the%20Past&viewpost=2&ContentId=98
    -# 
    +# Steve Ferguson (2011-01-31) referred to the following source:
    +# Norris F. Keeping time in Alaska: national directives, local response.
    +# Alaska History 2001;16(1-2).
    +# http://alaskahistoricalsociety.org/discover-alaska/glimpses-of-the-past/keeping-time-in-alaska/
     
     # From Arthur David Olson (2011-02-01):
     # Here's database-relevant material from the 2001 "Alaska History" article:
    @@ -482,12 +482,10 @@ Zone America/Los_Angeles -7:52:58 -	LMT	1883 Nov 18 12:07:02
     # From Arthur David Olson (2011-02-09):
     # I just spoke by phone with a staff member at the Metlakatla Indian
     # Community office (using contact information available at
    -# 
     # http://www.commerce.state.ak.us/dca/commdb/CIS.cfm?Comm_Boro_name=Metlakatla
    -# ).
     # It's shortly after 1:00 here on the east coast of the United States;
     # the staffer said it was shortly after 10:00 there. When I asked whether
    -# that meant they were on Pacific time, they said no--they were on their
    +# that meant they were on Pacific time, they said no - they were on their
     # own time. I asked about daylight saving; they said it wasn't used. I
     # did not inquire about practices in the past.
     
    @@ -501,9 +499,9 @@ Zone America/Juneau	 15:02:19 -	LMT	1867 Oct 18
     			 -8:00	-	PST	1942
     			 -8:00	US	P%sT	1946
     			 -8:00	-	PST	1969
    -			 -8:00	US	P%sT	1980 Apr 27 2:00
    -			 -9:00	US	Y%sT	1980 Oct 26 2:00
    -			 -8:00	US	P%sT	1983 Oct 30 2:00
    +			 -8:00	US	P%sT	1980 Apr 27  2:00
    +			 -9:00	US	Y%sT	1980 Oct 26  2:00
    +			 -8:00	US	P%sT	1983 Oct 30  2:00
     			 -9:00	US	Y%sT	1983 Nov 30
     			 -9:00	US	AK%sT
     Zone America/Sitka	 14:58:47 -	LMT	1867 Oct 18
    @@ -511,7 +509,7 @@ Zone America/Sitka	 14:58:47 -	LMT	1867 Oct 18
     			 -8:00	-	PST	1942
     			 -8:00	US	P%sT	1946
     			 -8:00	-	PST	1969
    -			 -8:00	US	P%sT	1983 Oct 30 2:00
    +			 -8:00	US	P%sT	1983 Oct 30  2:00
     			 -9:00	US	Y%sT	1983 Nov 30
     			 -9:00	US	AK%sT
     Zone America/Metlakatla	 15:13:42 -	LMT	1867 Oct 18
    @@ -519,8 +517,8 @@ Zone America/Metlakatla	 15:13:42 -	LMT	1867 Oct 18
     			 -8:00	-	PST	1942
     			 -8:00	US	P%sT	1946
     			 -8:00	-	PST	1969
    -			 -8:00	US	P%sT	1983 Oct 30 2:00
    -			 -8:00	-	MeST
    +			 -8:00	US	P%sT	1983 Oct 30  2:00
    +			 -8:00	-	PST
     Zone America/Yakutat	 14:41:05 -	LMT	1867 Oct 18
     			 -9:18:55 -	LMT	1900 Aug 20 12:00
     			 -9:00	-	YST	1942
    @@ -535,7 +533,7 @@ Zone America/Anchorage	 14:00:24 -	LMT	1867 Oct 18
     			-10:00	US	CAT/CAPT 1946 # Peace
     			-10:00	-	CAT	1967 Apr
     			-10:00	-	AHST	1969
    -			-10:00	US	AH%sT	1983 Oct 30 2:00
    +			-10:00	US	AH%sT	1983 Oct 30  2:00
     			 -9:00	US	Y%sT	1983 Nov 30
     			 -9:00	US	AK%sT
     Zone America/Nome	 12:58:21 -	LMT	1867 Oct 18
    @@ -544,7 +542,7 @@ Zone America/Nome	 12:58:21 -	LMT	1867 Oct 18
     			-11:00	US	N%sT	1946
     			-11:00	-	NST	1967 Apr
     			-11:00	-	BST	1969
    -			-11:00	US	B%sT	1983 Oct 30 2:00
    +			-11:00	US	B%sT	1983 Oct 30  2:00
     			 -9:00	US	Y%sT	1983 Nov 30
     			 -9:00	US	AK%sT
     Zone America/Adak	 12:13:21 -	LMT	1867 Oct 18
    @@ -553,7 +551,7 @@ Zone America/Adak	 12:13:21 -	LMT	1867 Oct 18
     			-11:00	US	N%sT	1946
     			-11:00	-	NST	1967 Apr
     			-11:00	-	BST	1969
    -			-11:00	US	B%sT	1983 Oct 30 2:00
    +			-11:00	US	B%sT	1983 Oct 30  2:00
     			-10:00	US	AH%sT	1983 Nov 30
     			-10:00	US	HA%sT
     # The following switches don't quite make our 1970 cutoff.
    @@ -571,7 +569,7 @@ Zone America/Adak	 12:13:21 -	LMT	1867 Oct 18
     #  Minutes of the Unalaska City Council Meeting, January 10, 1967:
     #  "Except for St. Paul and Akutan, Unalaska is the only important
     #  location not on Alaska Standard Time.  The following resolution was
    -#  made by William Robinson and seconded by Henry Swanson:  Be it
    +#  made by William Robinson and seconded by Henry Swanson: Be it
     #  resolved that the City of Unalaska hereby goes to Alaska Standard
     #  Time as of midnight Friday, January 13, 1967 (1 A.M. Saturday,
     #  January 14, Alaska Standard Time.)  This resolution was passed with
    @@ -583,9 +581,7 @@ Zone America/Adak	 12:13:21 -	LMT	1867 Oct 18
     # "Hawaiian Time" by Robert C. Schmitt and Doak C. Cox appears on pages 207-225
     # of volume 26 of The Hawaiian Journal of History (1992). As of 2010-12-09,
     # the article is available at
    -# 
     # http://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf
    -# 
     # and indicates that standard time was adopted effective noon, January
     # 13, 1896 (page 218), that in "1933, the Legislature decreed daylight
     # saving for the period between the last Sunday of each April and the
    @@ -606,7 +602,7 @@ Zone America/Adak	 12:13:21 -	LMT	1867 Oct 18
     # year, the standard time of this Territory shall be advanced one
     # hour...This Act shall take effect upon its approval. Approved this 26th
     # day of April, A. D. 1933. LAWRENCE M JUDD, Governor of the Territory of
    -# Hawaii." Page 172:  "Act 163...Act 90 of the Session Laws of 1933 is
    +# Hawaii." Page 172: "Act 163...Act 90 of the Session Laws of 1933 is
     # hereby repealed...This Act shall take effect upon its approval, upon
     # which date the standard time of this Territory shall be restored to
     # that existing immediately prior to the taking effect of said Act 90.
    @@ -616,14 +612,14 @@ Zone America/Adak	 12:13:21 -	LMT	1867 Oct 18
     # Note that 1933-05-21 was a Sunday.
     # We're left to guess the time of day when Act 163 was approved; guess noon.
     
    -Zone Pacific/Honolulu	-10:31:26 -	LMT	1896 Jan 13 12:00 #Schmitt&Cox
    -			-10:30	-	HST	1933 Apr 30 2:00 #Laws 1933
    -			-10:30	1:00	HDT	1933 May 21 12:00 #Laws 1933+12
    -			-10:30	-	HST	1942 Feb 09 2:00 #Schmitt&Cox+2
    -			-10:30	1:00	HDT	1945 Sep 30 2:00 #Schmitt&Cox+2
    -			-10:30	-	HST	1947 Jun  8 2:00 #Schmitt&Cox+2
    +# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    +Zone Pacific/Honolulu	-10:31:26 -	LMT	1896 Jan 13 12:00
    +			-10:30	-	HST	1933 Apr 30  2:00
    +			-10:30	1:00	HDT	1933 May 21 12:00
    +			-10:30	-	HST	1942 Feb  9  2:00
    +			-10:30	1:00	HDT	1945 Sep 30  2:00
    +			-10:30	-	HST	1947 Jun  8  2:00
     			-10:00	-	HST
    -
     Link Pacific/Honolulu Pacific/Johnston
     
     # Now we turn to US areas that have diverged from the consensus since 1970.
    @@ -633,9 +629,9 @@ Link Pacific/Honolulu Pacific/Johnston
     # From Paul Eggert (2002-10-20):
     #
     # The information in the rest of this paragraph is derived from the
    -# 
    -# Daylight Saving Time web page (2002-01-23) maintained by the
    -# Arizona State Library, Archives and Public Records.
    +# Daylight Saving Time web page
    +#  (2002-01-23)
    +# maintained by the Arizona State Library, Archives and Public Records.
     # Between 1944-01-01 and 1944-04-01 the State of Arizona used standard
     # time, but by federal law railroads, airlines, bus lines, military
     # personnel, and some engaged in interstate commerce continued to
    @@ -649,10 +645,11 @@ Link Pacific/Honolulu Pacific/Johnston
     # Shanks says the 1944 experiment came to an end on 1944-03-17.
     # Go with the Arizona State Library instead.
     
    +# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Phoenix	-7:28:18 -	LMT	1883 Nov 18 11:31:42
    -			-7:00	US	M%sT	1944 Jan  1 00:01
    -			-7:00	-	MST	1944 Apr  1 00:01
    -			-7:00	US	M%sT	1944 Oct  1 00:01
    +			-7:00	US	M%sT	1944 Jan  1  0:01
    +			-7:00	-	MST	1944 Apr  1  0:01
    +			-7:00	US	M%sT	1944 Oct  1  0:01
     			-7:00	-	MST	1967
     			-7:00	US	M%sT	1968 Mar 21
     			-7:00	-	MST
    @@ -676,24 +673,22 @@ Zone America/Phoenix	-7:28:18 -	LMT	1883 Nov 18 11:31:42
     #
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Boise	-7:44:49 -	LMT	1883 Nov 18 12:15:11
    -			-8:00	US	P%sT	1923 May 13 2:00
    +			-8:00	US	P%sT	1923 May 13  2:00
     			-7:00	US	M%sT	1974
    -			-7:00	-	MST	1974 Feb  3 2:00
    +			-7:00	-	MST	1974 Feb  3  2:00
     			-7:00	US	M%sT
     
     # Indiana
     #
     # For a map of Indiana's time zone regions, see:
    -# 
    -# What time is it in Indiana?
    -#  (2006-03-01)
    +# http://en.wikipedia.org/wiki/Time_in_Indiana
     #
     # From Paul Eggert (2007-08-17):
     # Since 1970, most of Indiana has been like America/Indiana/Indianapolis,
     # with the following exceptions:
     #
     # - Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer,
    -#   Vandenburgh, and Warrick counties have been like America/Chicago.
    +#   Vanderburgh, and Warrick counties have been like America/Chicago.
     #
     # - Dearborn and Ohio counties have been like America/New_York.
     #
    @@ -712,22 +707,16 @@ Zone America/Boise	-7:44:49 -	LMT	1883 Nov 18 12:15:11
     # that they would be ambiguous if we left them at the 'America' level.
     # So we reluctantly put them all in a subdirectory 'America/Indiana'.
     
    -# From Paul Eggert (2005-08-16):
    -# http://www.mccsc.edu/time.html says that Indiana will use DST starting 2006.
    -
    -# From Nathan Stratton Treadway (2006-03-30):
    -# http://www.dot.gov/affairs/dot0406.htm [3705 B]
    -# From Deborah Goldsmith (2006-01-18):
    -# http://dmses.dot.gov/docimages/pdf95/382329_web.pdf [2.9 MB]
    -# From Paul Eggert (2006-01-20):
    -# It says "DOT is relocating the time zone boundary in Indiana to move Starke,
    +# From Paul Eggert (2014-06-26):
    +# https://www.federalregister.gov/articles/2006/01/20/06-563/standard-time-zone-boundary-in-the-state-of-indiana
    +# says "DOT is relocating the time zone boundary in Indiana to move Starke,
     # Pulaski, Knox, Daviess, Martin, Pike, Dubois, and Perry Counties from the
     # Eastern Time Zone to the Central Time Zone.... The effective date of
    -# this rule is 2:OO a.m. EST Sunday, April 2, 2006, which is the
    +# this rule is 2 a.m. EST Sunday, April 2, 2006, which is the
     # changeover date from standard time to Daylight Saving Time."
    -# Strictly speaking, this means the affected counties will change their
    -# clocks twice that night, but this obviously is in error.  The intent
    -# is that 01:59:59 EST be followed by 02:00:00 CDT.
    +# Strictly speaking, this meant the affected counties changed their
    +# clocks twice that night, but this obviously was in error.  The intent
    +# was that 01:59:59 EST be followed by 02:00:00 CDT.
     
     # From Gwillim Law (2007-02-10):
     # The Associated Press has been reporting that Pulaski County, Indiana is
    @@ -739,13 +728,13 @@ Rule Indianapolis 1941	only	-	Jun	22	2:00	1:00	D
     Rule Indianapolis 1941	1954	-	Sep	lastSun	2:00	0	S
     Rule Indianapolis 1946	1954	-	Apr	lastSun	2:00	1:00	D
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
    +Zone America/Indiana/Indianapolis -5:44:38 - LMT	1883 Nov 18 12:15:22
     			-6:00	US	C%sT	1920
     			-6:00 Indianapolis C%sT	1942
     			-6:00	US	C%sT	1946
    -			-6:00 Indianapolis C%sT	1955 Apr 24 2:00
    -			-5:00	-	EST	1957 Sep 29 2:00
    -			-6:00	-	CST	1958 Apr 27 2:00
    +			-6:00 Indianapolis C%sT	1955 Apr 24  2:00
    +			-5:00	-	EST	1957 Sep 29  2:00
    +			-6:00	-	CST	1958 Apr 27  2:00
     			-5:00	-	EST	1969
     			-5:00	US	E%sT	1971
     			-5:00	-	EST	2006
    @@ -761,10 +750,10 @@ Rule	Marengo	1954	1960	-	Sep	lastSun	2:00	0	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Indiana/Marengo -5:45:23 -	LMT	1883 Nov 18 12:14:37
     			-6:00	US	C%sT	1951
    -			-6:00	Marengo	C%sT	1961 Apr 30 2:00
    +			-6:00	Marengo	C%sT	1961 Apr 30  2:00
     			-5:00	-	EST	1969
    -			-5:00	US	E%sT	1974 Jan  6 2:00
    -			-6:00	1:00	CDT	1974 Oct 27 2:00
    +			-5:00	US	E%sT	1974 Jan  6  2:00
    +			-6:00	1:00	CDT	1974 Oct 27  2:00
     			-5:00	US	E%sT	1976
     			-5:00	-	EST	2006
     			-5:00	US	E%sT
    @@ -785,11 +774,11 @@ Rule Vincennes	1962	1963	-	Oct	lastSun	2:00	0	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Indiana/Vincennes -5:50:07 - LMT	1883 Nov 18 12:09:53
     			-6:00	US	C%sT	1946
    -			-6:00 Vincennes	C%sT	1964 Apr 26 2:00
    +			-6:00 Vincennes	C%sT	1964 Apr 26  2:00
     			-5:00	-	EST	1969
     			-5:00	US	E%sT	1971
    -			-5:00	-	EST	2006 Apr  2 2:00
    -			-6:00	US	C%sT	2007 Nov  4 2:00
    +			-5:00	-	EST	2006 Apr  2  2:00
    +			-6:00	US	C%sT	2007 Nov  4  2:00
     			-5:00	US	E%sT
     #
     # Perry County, Indiana, switched from eastern to central time in April 2006.
    @@ -806,10 +795,10 @@ Rule Perry	1962	1963	-	Oct	lastSun	2:00	0	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Indiana/Tell_City -5:47:03 - LMT	1883 Nov 18 12:12:57
     			-6:00	US	C%sT	1946
    -			-6:00 Perry	C%sT	1964 Apr 26 2:00
    +			-6:00 Perry	C%sT	1964 Apr 26  2:00
     			-5:00	-	EST	1969
     			-5:00	US	E%sT	1971
    -			-5:00	-	EST	2006 Apr  2 2:00
    +			-5:00	-	EST	2006 Apr  2  2:00
     			-6:00	US	C%sT
     #
     # Pike County, Indiana moved from central to eastern time in 1977,
    @@ -822,11 +811,11 @@ Rule	Pike	1961	1964	-	Oct	lastSun	2:00	0	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Indiana/Petersburg -5:49:07 - LMT	1883 Nov 18 12:10:53
     			-6:00	US	C%sT	1955
    -			-6:00	Pike	C%sT	1965 Apr 25 2:00
    -			-5:00	-	EST	1966 Oct 30 2:00
    -			-6:00	US	C%sT	1977 Oct 30 2:00
    -			-5:00	-	EST	2006 Apr  2 2:00
    -			-6:00	US	C%sT	2007 Nov  4 2:00
    +			-6:00	Pike	C%sT	1965 Apr 25  2:00
    +			-5:00	-	EST	1966 Oct 30  2:00
    +			-6:00	US	C%sT	1977 Oct 30  2:00
    +			-5:00	-	EST	2006 Apr  2  2:00
    +			-6:00	US	C%sT	2007 Nov  4  2:00
     			-5:00	US	E%sT
     #
     # Starke County, Indiana moved from central to eastern time in 1991,
    @@ -844,10 +833,10 @@ Rule	Starke	1959	1961	-	Oct	lastSun	2:00	0	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Indiana/Knox -5:46:30 -	LMT	1883 Nov 18 12:13:30
     			-6:00	US	C%sT	1947
    -			-6:00	Starke	C%sT	1962 Apr 29 2:00
    -			-5:00	-	EST	1963 Oct 27 2:00
    -			-6:00	US	C%sT	1991 Oct 27 2:00
    -			-5:00	-	EST	2006 Apr  2 2:00
    +			-6:00	Starke	C%sT	1962 Apr 29  2:00
    +			-5:00	-	EST	1963 Oct 27  2:00
    +			-6:00	US	C%sT	1991 Oct 27  2:00
    +			-5:00	-	EST	2006 Apr  2  2:00
     			-6:00	US	C%sT
     #
     # Pulaski County, Indiana, switched from eastern to central time in
    @@ -860,17 +849,17 @@ Rule	Pulaski	1957	1960	-	Sep	lastSun	2:00	0	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Indiana/Winamac -5:46:25 - LMT	1883 Nov 18 12:13:35
     			-6:00	US	C%sT	1946
    -			-6:00	Pulaski	C%sT	1961 Apr 30 2:00
    +			-6:00	Pulaski	C%sT	1961 Apr 30  2:00
     			-5:00	-	EST	1969
     			-5:00	US	E%sT	1971
    -			-5:00	-	EST	2006 Apr  2 2:00
    -			-6:00	US	C%sT	2007 Mar 11 2:00
    +			-5:00	-	EST	2006 Apr  2  2:00
    +			-6:00	US	C%sT	2007 Mar 11  2:00
     			-5:00	US	E%sT
     #
     # Switzerland County, Indiana, did not observe DST from 1973 through 2005.
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Indiana/Vevay -5:40:16 -	LMT	1883 Nov 18 12:19:44
    -			-6:00	US	C%sT	1954 Apr 25 2:00
    +			-6:00	US	C%sT	1954 Apr 25  2:00
     			-5:00	-	EST	1969
     			-5:00	US	E%sT	1973
     			-5:00	-	EST	2006
    @@ -891,18 +880,17 @@ Zone America/Kentucky/Louisville -5:43:02 -	LMT	1883 Nov 18 12:16:58
     			-6:00	US	C%sT	1921
     			-6:00 Louisville C%sT	1942
     			-6:00	US	C%sT	1946
    -			-6:00 Louisville C%sT	1961 Jul 23 2:00
    +			-6:00 Louisville C%sT	1961 Jul 23  2:00
     			-5:00	-	EST	1968
    -			-5:00	US	E%sT	1974 Jan  6 2:00
    -			-6:00	1:00	CDT	1974 Oct 27 2:00
    +			-5:00	US	E%sT	1974 Jan  6  2:00
    +			-6:00	1:00	CDT	1974 Oct 27  2:00
     			-5:00	US	E%sT
     #
     # Wayne County, Kentucky
     #
    -# From
    -# 
    -# Lake Cumberland LIFE
    -#  (1999-01-29) via WKYM-101.7:
    +# From Lake Cumberland LIFE
    +# http://www.lake-cumberland.com/life/archive/news990129time.shtml
    +# (1999-01-29) via WKYM-101.7:
     # Clinton County has joined Wayne County in asking the DoT to change from
     # the Central to the Eastern time zone....  The Wayne County government made
     # the same request in December.  And while Russell County officials have not
    @@ -919,9 +907,8 @@ Zone America/Kentucky/Louisville -5:43:02 -	LMT	1883 Nov 18 12:16:58
     #
     # From Paul Eggert (2001-07-16):
     # The final rule was published in the
    -# 
    -# Federal Register 65, 160 (2000-08-17), page 50154-50158.
    -# 
    +# Federal Register 65, 160 (2000-08-17), pp 50154-50158.
    +# http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=2000_register&docid=fr17au00-22
     #
     Zone America/Kentucky/Monticello -5:39:24 - LMT	1883 Nov 18 12:20:36
     			-6:00	US	C%sT	1946
    @@ -946,9 +933,8 @@ Zone America/Kentucky/Monticello -5:39:24 - LMT	1883 Nov 18 12:20:36
     # See America/North_Dakota/Center for the Oliver County, ND change.
     # West Wendover, NV officially switched from Pacific to mountain time on
     # 1999-10-31.  See the
    -# 
    -# Federal Register 64, 203 (1999-10-21), page 56705-56707.
    -# 
    +# Federal Register 64, 203 (1999-10-21), pp 56705-56707.
    +# http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=1999_register&docid=fr21oc99-15
     # However, the Federal Register says that West Wendover already operated
     # on mountain time, and the rule merely made this official;
     # hence a separate tz entry is not needed.
    @@ -986,12 +972,12 @@ Rule	Detroit	1967	only	-	Jun	14	2:00	1:00	D
     Rule	Detroit	1967	only	-	Oct	lastSun	2:00	0	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Detroit	-5:32:11 -	LMT	1905
    -			-6:00	-	CST	1915 May 15 2:00
    +			-6:00	-	CST	1915 May 15  2:00
     			-5:00	-	EST	1942
     			-5:00	US	E%sT	1946
     			-5:00	Detroit	E%sT	1973
     			-5:00	US	E%sT	1975
    -			-5:00	-	EST	1975 Apr 27 2:00
    +			-5:00	-	EST	1975 Apr 27  2:00
     			-5:00	US	E%sT
     #
     # Dickinson, Gogebic, Iron, and Menominee Counties, Michigan,
    @@ -1004,8 +990,8 @@ Rule Menominee	1966	only	-	Oct	lastSun	2:00	0	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
     			-6:00	US	C%sT	1946
    -			-6:00 Menominee	C%sT	1969 Apr 27 2:00
    -			-5:00	-	EST	1973 Apr 29 2:00
    +			-6:00 Menominee	C%sT	1969 Apr 27  2:00
    +			-5:00	-	EST	1973 Apr 29  2:00
     			-6:00	US	C%sT
     
     # Navassa
    @@ -1042,9 +1028,9 @@ Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
     #	Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated),
     #	which I found in the UCLA library.
     #
    -#	
     #	William Willett, The Waste of Daylight, 19th edition
    -#	 (1914-03)
    +#	
    +#	[PDF] (1914-03)
     #
     #	Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
     #	.
    @@ -1053,11 +1039,11 @@ Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
     
     # Canada
     
    -# From Alain LaBont (1994-11-14):
    +# From Alain LaBonté (1994-11-14):
     # I post here the time zone abbreviations standardized in Canada
     # for both English and French in the CAN/CSA-Z234.4-89 standard....
     #
    -#	UTC	Standard time	Daylight savings time
    +#	UTC	Standard time	Daylight saving time
     #	offset	French	English	French	English
     #	-2:30	-	-	HAT	NDT
     #	-3	-	-	HAA	ADT
    @@ -1070,7 +1056,7 @@ Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
     #	-9	HNY	YST	-	-
     #
     #	HN: Heure Normale	ST: Standard Time
    -#	HA: Heure Avance	DT: Daylight saving Time
    +#	HA: Heure Avancée	DT: Daylight saving Time
     #
     #	A: de l'Atlantique	Atlantic
     #	C: du Centre		Central
    @@ -1085,7 +1071,7 @@ Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
     # From Paul Eggert (1994-11-22):
     # Alas, this sort of thing must be handled by localization software.
     
    -# Unless otherwise specified, the data for Canada are all from Shanks
    +# Unless otherwise specified, the data entries for Canada are all from Shanks
     # & Pottenger.
     
     # From Chris Walton (2006-04-01, 2006-04-25, 2006-06-26, 2007-01-31,
    @@ -1134,15 +1120,15 @@ Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
     
     # From Paul Eggert (2006-04-25):
     # H. David Matthews and Mary Vincent's map
    -# 
     # "It's about TIME", _Canadian Geographic_ (September-October 1998)
    -#  contains detailed boundaries for regions observing nonstandard
    +# http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp
    +# contains detailed boundaries for regions observing nonstandard
     # time and daylight saving time arrangements in Canada circa 1998.
     #
    -# INMS, the Institute for National Measurement Standards in Ottawa, has 
    +# INMS, the Institute for National Measurement Standards in Ottawa, has
     # information about standard and daylight saving time zones in Canada.
    -#  (updated periodically).
    +# http://inms-ienm.nrc-cnrc.gc.ca/en/time_services/daylight_saving_e.php
    +# (updated periodically).
     # Its unofficial information is often taken from Matthews and Vincent.
     
     # From Paul Eggert (2006-06-27):
    @@ -1151,9 +1137,7 @@ Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
     
     # From Chris Walton (2011-12-01)
     # In the first of Tammy Hardwick's articles
    -# 
     # http://www.ilovecreston.com/?p=articles&t=spec&ar=260
    -# 
     # she quotes the Friday November 1/1918 edition of the Creston Review.
     # The quote includes these two statements:
     # 'Sunday the CPR went back to the old system of time...'
    @@ -1221,9 +1205,7 @@ Rule	StJohns	1960	1986	-	Oct	lastSun	2:00	0	S
     # Time to Standard Time and from Standard Time to Daylight Savings Time
     # now occurs at 2:00AM.
     # ...
    -# 
     # http://www.assembly.nl.ca/legislation/sr/annualstatutes/2011/1106.chp.htm
    -# 
     # ...
     # MICHAEL PELLEY  |  Manager of Enterprise Architecture - Solution Delivery
     # Office of the Chief Information Officer
    @@ -1259,7 +1241,7 @@ Zone America/Goose_Bay	-4:01:40 -	LMT	1884 # Happy Valley-Goose Bay
     			-3:30	-	NST	1936
     			-3:30	StJohns	N%sT	1942 May 11
     			-3:30	Canada	N%sT	1946
    -			-3:30	StJohns	N%sT	1966 Mar 15 2:00
    +			-3:30	StJohns	N%sT	1966 Mar 15  2:00
     			-4:00	StJohns	A%sT	2011 Nov
     			-4:00	Canada	A%sT
     
    @@ -1320,7 +1302,7 @@ Rule	Halifax	1962	1973	-	Oct	lastSun	2:00	0	S
     Zone America/Halifax	-4:14:24 -	LMT	1902 Jun 15
     			-4:00	Halifax	A%sT	1918
     			-4:00	Canada	A%sT	1919
    -			-4:00	Halifax	A%sT	1942 Feb  9 2:00s
    +			-4:00	Halifax	A%sT	1942 Feb  9  2:00s
     			-4:00	Canada	A%sT	1946
     			-4:00	Halifax	A%sT	1974
     			-4:00	Canada	A%sT
    @@ -1379,7 +1361,7 @@ Zone America/Moncton	-4:19:08 -	LMT	1883 Dec  9
     # meridian is supposed to observe AST, but residents as far east as
     # Natashquan use EST/EDT, and residents east of Natashquan use AST.
     # The Quebec department of justice writes in
    -# "The situation in Minganie and Basse-Cote-Nord"
    +# "The situation in Minganie and Basse-Côte-Nord"
     # http://www.justice.gouv.qc.ca/english/publications/generale/temps-minganie-a.htm
     # that the coastal strip from just east of Natashquan to Blanc-Sablon
     # observes Atlantic standard time all year round.
    @@ -1387,7 +1369,6 @@ Zone America/Moncton	-4:19:08 -	LMT	1883 Dec  9
     # says this common practice was codified into law as of 2007.
     # For lack of better info, guess this practice began around 1970, contra to
     # Shanks & Pottenger who have this region observing AST/ADT.
    -# for post-1970 data America/Puerto_Rico.
     
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
     Rule	Mont	1917	only	-	Mar	25	2:00	1:00	D
    @@ -1401,18 +1382,10 @@ Rule	Mont	1922	only	-	Apr	30	2:00	1:00	D
     Rule	Mont	1924	only	-	May	17	2:00	1:00	D
     Rule	Mont	1924	1926	-	Sep	lastSun	2:30	0	S
     Rule	Mont	1925	1926	-	May	Sun>=1	2:00	1:00	D
    -# The 1927-to-1937 rules can be expressed more simply as
    -# Rule	Mont	1927	1937	-	Apr	lastSat	24:00	1:00	D
    -# Rule	Mont	1927	1937	-	Sep	lastSat	24:00	0	S
    -# The rules below avoid use of 24:00
    -# (which pre-1998 versions of zic cannot handle).
    -Rule	Mont	1927	only	-	May	1	0:00	1:00	D
    -Rule	Mont	1927	1932	-	Sep	lastSun	0:00	0	S
    -Rule	Mont	1928	1931	-	Apr	lastSun	0:00	1:00	D
    -Rule	Mont	1932	only	-	May	1	0:00	1:00	D
    -Rule	Mont	1933	1940	-	Apr	lastSun	0:00	1:00	D
    -Rule	Mont	1933	only	-	Oct	1	0:00	0	S
    -Rule	Mont	1934	1939	-	Sep	lastSun	0:00	0	S
    +Rule	Mont	1927	1937	-	Apr	lastSat	24:00	1:00	D
    +Rule	Mont	1927	1937	-	Sep	lastSat	24:00	0	S
    +Rule	Mont	1938	1940	-	Apr	lastSun	0:00	1:00	D
    +Rule	Mont	1938	1939	-	Sep	lastSun	0:00	0	S
     Rule	Mont	1946	1973	-	Apr	lastSun	2:00	1:00	D
     Rule	Mont	1945	1948	-	Sep	lastSun	2:00	0	S
     Rule	Mont	1949	1950	-	Oct	lastSun	2:00	0	S
    @@ -1426,7 +1399,7 @@ Zone America/Blanc-Sablon -3:48:28 -	LMT	1884
     Zone America/Montreal	-4:54:16 -	LMT	1884
     			-5:00	Mont	E%sT	1918
     			-5:00	Canada	E%sT	1919
    -			-5:00	Mont	E%sT	1942 Feb  9 2:00s
    +			-5:00	Mont	E%sT	1942 Feb  9  2:00s
     			-5:00	Canada	E%sT	1946
     			-5:00	Mont	E%sT	1974
     			-5:00	Canada	E%sT
    @@ -1448,7 +1421,7 @@ Zone America/Montreal	-4:54:16 -	LMT	1884
     # have already done so.  In Orillia DST was to run until Saturday,
     # 1912-08-31 (no time mentioned), but it was met with considerable
     # hostility from certain segments of the public, and was revoked after
    -# only two weeks -- I copied it as Saturday, 1912-07-07, 22:00, but
    +# only two weeks - I copied it as Saturday, 1912-07-07, 22:00, but
     # presumably that should be -07-06.  (1912-06-19, -07-12; also letters
     # earlier in June).
     #
    @@ -1458,10 +1431,8 @@ Zone America/Montreal	-4:54:16 -	LMT	1884
     # Mark Brader writes that an article in the 1997-10-14 Toronto Star
     # says that Atikokan, Ontario currently does not observe DST,
     # but will vote on 11-10 whether to use EST/EDT.
    -# He also writes that the
    -# 
    -# Ontario Time Act (1990, Chapter T.9)
    -# 
    +# He also writes that the Ontario Time Act (1990, Chapter T.9)
    +# http://www.gov.on.ca/MBS/english/publications/statregs/conttext.html
     # says that Ontario east of 90W uses EST/EDT, and west of 90W uses CST/CDT.
     # Officially Atikokan is therefore on CST/CDT, and most likely this report
     # concerns a non-official time observed as a matter of local practice.
    @@ -1540,9 +1511,7 @@ Zone America/Montreal	-4:54:16 -	LMT	1884
     # The Journal of The Royal Astronomical Society of Canada,
     # volume 26, number 2 (February 1932) and, as of 2010-07-17,
     # was available at
    -# 
     # http://adsabs.harvard.edu/full/1932JRASC..26...49S
    -# 
     #
     # It includes the text below (starting on page 57):
     #
    @@ -1553,26 +1522,26 @@ Zone America/Montreal	-4:54:16 -	LMT	1884
     # ing in 1930. The information for the province of Quebec is definite,
     # for the other provinces only approximate:
     #
    -# 	Province	Daylight saving time used
    +#	Province	Daylight saving time used
     # Prince Edward Island	Not used.
     # Nova Scotia		In Halifax only.
     # New Brunswick		In St. John only.
     # Quebec		In the following places:
    -# 			Montreal	Lachine
    -# 			Quebec		Mont-Royal
    -# 			Levis		Iberville
    -# 			St. Lambert	Cap de la Madeleine
    -# 			Verdun		Loretteville
    -# 			Westmount	Richmond
    -# 			Outremont	St. Jerome
    -# 			Longueuil	Greenfield Park
    -# 			Arvida		Waterloo
    -# 			Chambly-Canton	Beaulieu
    -# 			Melbourne	La Tuque
    -# 			St. Theophile	Buckingham
    +#			Montreal	Lachine
    +#			Quebec		Mont-Royal
    +#			Lévis		Iberville
    +#			St. Lambert	Cap de la Madelèine
    +#			Verdun		Loretteville
    +#			Westmount	Richmond
    +#			Outremont	St. Jérôme
    +#			Longueuil	Greenfield Park
    +#			Arvida		Waterloo
    +#			Chambly-Canton	Beaulieu
    +#			Melbourne	La Tuque
    +#			St. Théophile	Buckingham
     # Ontario		Used generally in the cities and towns along
    -# 			the southerly part of the province. Not
    -# 			used in the northwesterlhy part.
    +#			the southerly part of the province. Not
    +#			used in the northwesterly part.
     # Manitoba		Not used.
     # Saskatchewan		In Regina only.
     # Alberta		Not used.
    @@ -1641,7 +1610,7 @@ Rule	Toronto	1957	1973	-	Oct	lastSun	2:00	0	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Toronto	-5:17:32 -	LMT	1895
     			-5:00	Canada	E%sT	1919
    -			-5:00	Toronto	E%sT	1942 Feb  9 2:00s
    +			-5:00	Toronto	E%sT	1942 Feb  9  2:00s
     			-5:00	Canada	E%sT	1946
     			-5:00	Toronto	E%sT	1974
     			-5:00	Canada	E%sT
    @@ -1654,16 +1623,16 @@ Zone America/Thunder_Bay -5:57:00 -	LMT	1895
     			-5:00	Canada	E%sT
     Zone America/Nipigon	-5:53:04 -	LMT	1895
     			-5:00	Canada	E%sT	1940 Sep 29
    -			-5:00	1:00	EDT	1942 Feb  9 2:00s
    +			-5:00	1:00	EDT	1942 Feb  9  2:00s
     			-5:00	Canada	E%sT
     Zone America/Rainy_River -6:18:16 -	LMT	1895
     			-6:00	Canada	C%sT	1940 Sep 29
    -			-6:00	1:00	CDT	1942 Feb  9 2:00s
    +			-6:00	1:00	CDT	1942 Feb  9  2:00s
     			-6:00	Canada	C%sT
     Zone America/Atikokan	-6:06:28 -	LMT	1895
     			-6:00	Canada	C%sT	1940 Sep 29
    -			-6:00	1:00	CDT	1942 Feb  9 2:00s
    -			-6:00	Canada	C%sT	1945 Sep 30 2:00
    +			-6:00	1:00	CDT	1942 Feb  9  2:00s
    +			-6:00	Canada	C%sT	1945 Sep 30  2:00
     			-5:00	-	EST
     
     
    @@ -1676,7 +1645,7 @@ Zone America/Atikokan	-6:06:28 -	LMT	1895
     # the first Sunday of April of each year and two o'clock Central
     # Standard Time in the morning of the last Sunday of October next
     # following, one hour in advance of Central Standard Time."...
    -# I believe that the English legislation [of the old time act] had =
    +# I believe that the English legislation [of the old time act] had
     # been assented to (March 22, 1967)....
     # Also, as far as I can tell, there was no order-in-council varying
     # the time of Daylight Saving Time for 2005 and so the provisions of
    @@ -1799,12 +1768,12 @@ Rule	Swift	1959	only	-	Oct	lastSun	2:00	0	S
     Rule	Swift	1960	1961	-	Sep	lastSun	2:00	0	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Regina	-6:58:36 -	LMT	1905 Sep
    -			-7:00	Regina	M%sT	1960 Apr lastSun 2:00
    +			-7:00	Regina	M%sT	1960 Apr lastSun  2:00
     			-6:00	-	CST
     Zone America/Swift_Current -7:11:20 -	LMT	1905 Sep
    -			-7:00	Canada	M%sT	1946 Apr lastSun 2:00
    +			-7:00	Canada	M%sT	1946 Apr lastSun  2:00
     			-7:00	Regina	M%sT	1950
    -			-7:00	Swift	M%sT	1972 Apr lastSun 2:00
    +			-7:00	Swift	M%sT	1972 Apr lastSun  2:00
     			-6:00	-	CST
     
     
    @@ -1854,9 +1823,7 @@ Zone America/Edmonton	-7:33:52 -	LMT	1906 Sep
     # Earlier this year I stumbled across a detailed article about the time
     # keeping history of Creston; it was written by Tammy Hardwick who is the
     # manager of the Creston & District Museum. The article was written in May 2009.
    -# 
     # http://www.ilovecreston.com/?p=articles&t=spec&ar=260
    -# 
     # According to the article, Creston has not changed its clocks since June 1918.
     # i.e. Creston has been stuck on UTC-7 for 93 years.
     # Dawson Creek, on the other hand, changed its clocks as recently as April 1972.
    @@ -1864,18 +1831,16 @@ Zone America/Edmonton	-7:33:52 -	LMT	1906 Sep
     # Unfortunately the exact date for the time change in June 1918 remains
     # unknown and will be difficult to ascertain.  I e-mailed Tammy a few months
     # ago to ask if Sunday June 2 was a reasonable guess.  She said it was just
    -# as plausible as any other date (in June).  She also said that after writing the
    -# article she had discovered another time change in 1916; this is the subject
    -# of another article which she wrote in October 2010.
    -# 
    +# as plausible as any other date (in June).  She also said that after writing
    +# the article she had discovered another time change in 1916; this is the
    +# subject of another article which she wrote in October 2010.
     # http://www.creston.museum.bc.ca/index.php?module=comments&uop=view_comment&cm+id=56
    -# 
     
     # Here is a summary of the three clock change events in Creston's history:
     # 1. 1884 or 1885: adoption of Mountain Standard Time (GMT-7)
     # Exact date unknown
     # 2. Oct 1916: switch to Pacific Standard Time (GMT-8)
    -# Exact date in October unknown;  Sunday October 1 is a reasonable guess.
    +# Exact date in October unknown; Sunday October 1 is a reasonable guess.
     # 3. June 1918: switch to Pacific Daylight Time (GMT-7)
     # Exact date in June unknown; Sunday June 2 is a reasonable guess.
     # note#1:
    @@ -1888,9 +1853,7 @@ Zone America/Edmonton	-7:33:52 -	LMT	1906 Sep
     # There is no guarantee that Creston will remain on Mountain Standard Time
     # (UTC-7) forever.
     # The subject was debated at least once this year by the town Council.
    -# 
     # http://www.bclocalnews.com/kootenay_rockies/crestonvalleyadvance/news/116760809.html
    -# 
     
     # During a period WWII, summer time (Daylight saying) was mandatory in Canada.
     # In Creston, that was handled by shifting the area to PST (-8:00) then applying
    @@ -1917,7 +1880,7 @@ Zone America/Vancouver	-8:12:28 -	LMT	1884
     			-8:00	Canada	P%sT
     Zone America/Dawson_Creek -8:00:56 -	LMT	1884
     			-8:00	Canada	P%sT	1947
    -			-8:00	Vanc	P%sT	1972 Aug 30 2:00
    +			-8:00	Vanc	P%sT	1972 Aug 30  2:00
     			-7:00	-	MST
     Zone America/Creston	-7:46:04 -	LMT	1884
     			-7:00	-	MST	1916 Oct 1
    @@ -1944,18 +1907,17 @@ Zone America/Creston	-7:46:04 -	LMT	1884
     
     # From Rives McDow (1999-09-04):
     # Nunavut ... moved ... to incorporate the whole territory into one time zone.
    -# 
     # Nunavut moves to single time zone Oct. 31
    -# 
    +# http://www.nunatsiaq.com/nunavut/nvt90903_13.html
     #
     # From Antoine Leca (1999-09-06):
     # We then need to create a new timezone for the Kitikmeot region of Nunavut
     # to differentiate it from the Yellowknife region.
     
     # From Paul Eggert (1999-09-20):
    -# 
     # Basic Facts: The New Territory
    -#  (1999) reports that Pangnirtung operates on eastern time,
    +# http://www.nunavut.com/basicfacts/english/basicfacts_1territory.html
    +# (1999) reports that Pangnirtung operates on eastern time,
     # and that Coral Harbour does not observe DST.  We don't know when
     # Pangnirtung switched to eastern time; we'll guess 1995.
     
    @@ -1983,8 +1945,8 @@ Zone America/Creston	-7:46:04 -	LMT	1884
     # the current state of affairs.
     
     # From Michaela Rodrigue, writing in the
    -# 
    -# Nunatsiaq News (1999-11-19):
    +# Nunatsiaq News (1999-11-19):
    +# http://www.nunatsiaq.com/archives/nunavut991130/nvt91119_17.html
     # Clyde River, Pangnirtung and Sanikiluaq now operate with two time zones,
     # central - or Nunavut time - for government offices, and eastern time
     # for municipal offices and schools....  Igloolik [was similar but then]
    @@ -2002,10 +1964,8 @@ Zone America/Creston	-7:46:04 -	LMT	1884
     # Central Time and Southampton Island [in the Central zone] is not
     # required to use daylight savings.
     
    -# From
    -# 
    -# Nunavut now has two time zones
    -#  (2000-11-10):
    +# From 
    +# Nunavut now has two time zones (2000-11-10):
     # The Nunavut government would allow its employees in Kugluktuk and
     # Cambridge Bay to operate on central time year-round, putting them
     # one hour behind the rest of Nunavut for six months during the winter.
    @@ -2096,9 +2056,7 @@ Zone America/Creston	-7:46:04 -	LMT	1884
     # used to be the mayor of Resolute Bay and he apparently owns half the
     # businesses including "South Camp Inn." This website has some info on
     # Aziz:
    -# 
     # http://www.uphere.ca/node/493
    -# 
     #
     # I sent Aziz an e-mail asking when Resolute Bay had stopped using
     # Eastern Standard Time.
    @@ -2136,47 +2094,47 @@ Rule	NT_YK	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     # aka Panniqtuuq
     Zone America/Pangnirtung 0	-	zzz	1921 # trading post est.
    -			-4:00	NT_YK	A%sT	1995 Apr Sun>=1 2:00
    -			-5:00	Canada	E%sT	1999 Oct 31 2:00
    -			-6:00	Canada	C%sT	2000 Oct 29 2:00
    +			-4:00	NT_YK	A%sT	1995 Apr Sun>=1  2:00
    +			-5:00	Canada	E%sT	1999 Oct 31  2:00
    +			-6:00	Canada	C%sT	2000 Oct 29  2:00
     			-5:00	Canada	E%sT
     # formerly Frobisher Bay
     Zone America/Iqaluit	0	-	zzz	1942 Aug # Frobisher Bay est.
    -			-5:00	NT_YK	E%sT	1999 Oct 31 2:00
    -			-6:00	Canada	C%sT	2000 Oct 29 2:00
    +			-5:00	NT_YK	E%sT	1999 Oct 31  2:00
    +			-6:00	Canada	C%sT	2000 Oct 29  2:00
     			-5:00	Canada	E%sT
     # aka Qausuittuq
     Zone America/Resolute	0	-	zzz	1947 Aug 31 # Resolute founded
    -			-6:00	NT_YK	C%sT	2000 Oct 29 2:00
    -			-5:00	-	EST	2001 Apr  1 3:00
    -			-6:00	Canada	C%sT	2006 Oct 29 2:00
    -			-5:00	-	EST	2007 Mar 11 3:00
    +			-6:00	NT_YK	C%sT	2000 Oct 29  2:00
    +			-5:00	-	EST	2001 Apr  1  3:00
    +			-6:00	Canada	C%sT	2006 Oct 29  2:00
    +			-5:00	-	EST	2007 Mar 11  3:00
     			-6:00	Canada	C%sT
     # aka Kangiqiniq
     Zone America/Rankin_Inlet 0	-	zzz	1957 # Rankin Inlet founded
    -			-6:00	NT_YK	C%sT	2000 Oct 29 2:00
    -			-5:00	-	EST	2001 Apr  1 3:00
    +			-6:00	NT_YK	C%sT	2000 Oct 29  2:00
    +			-5:00	-	EST	2001 Apr  1  3:00
     			-6:00	Canada	C%sT
     # aka Iqaluktuuttiaq
     Zone America/Cambridge_Bay 0	-	zzz	1920 # trading post est.?
    -			-7:00	NT_YK	M%sT	1999 Oct 31 2:00
    -			-6:00	Canada	C%sT	2000 Oct 29 2:00
    -			-5:00	-	EST	2000 Nov  5 0:00
    -			-6:00	-	CST	2001 Apr  1 3:00
    +			-7:00	NT_YK	M%sT	1999 Oct 31  2:00
    +			-6:00	Canada	C%sT	2000 Oct 29  2:00
    +			-5:00	-	EST	2000 Nov  5  0:00
    +			-6:00	-	CST	2001 Apr  1  3:00
     			-7:00	Canada	M%sT
     Zone America/Yellowknife 0	-	zzz	1935 # Yellowknife founded?
     			-7:00	NT_YK	M%sT	1980
     			-7:00	Canada	M%sT
     Zone America/Inuvik	0	-	zzz	1953 # Inuvik founded
    -			-8:00	NT_YK	P%sT	1979 Apr lastSun 2:00
    +			-8:00	NT_YK	P%sT	1979 Apr lastSun  2:00
     			-7:00	NT_YK	M%sT	1980
     			-7:00	Canada	M%sT
     Zone America/Whitehorse	-9:00:12 -	LMT	1900 Aug 20
    -			-9:00	NT_YK	Y%sT	1966 Jul 1 2:00
    +			-9:00	NT_YK	Y%sT	1966 Jul  1  2:00
     			-8:00	NT_YK	P%sT	1980
     			-8:00	Canada	P%sT
     Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
    -			-9:00	NT_YK	Y%sT	1973 Oct 28 0:00
    +			-9:00	NT_YK	Y%sT	1973 Oct 28  0:00
     			-8:00	NT_YK	P%sT	1980
     			-8:00	Canada	P%sT
     
    @@ -2188,9 +2146,8 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
     # From Paul Eggert (2001-03-05):
     # The Investigation and Analysis Service of the
     # Mexican Library of Congress (MLoC) has published a
    -# 
     # history of Mexican local time (in Spanish)
    -# .
    +# http://www.cddhcu.gob.mx/bibliot/publica/inveyana/polisoc/horver/
     #
     # Here are the discrepancies between Shanks & Pottenger (S&P) and the MLoC.
     # (In all cases we go with the MLoC.)
    @@ -2235,9 +2192,8 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
     # -------------- End Forwarded Message --------------
     # From Paul Eggert (1996-06-12):
     # For an English translation of the decree, see
    -# 
     # "Diario Oficial: Time Zone Changeover" (1996-01-04).
    -# 
    +# http://mexico-travel.com/extra/timezone_eng.html
     
     # From Rives McDow (1998-10-08):
     # The State of Quintana Roo has reverted back to central STD and DST times
    @@ -2249,7 +2205,7 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
     # savings time so as to stay on the same time zone as the southern part of
     # Arizona year round.
     
    -# From Jesper Norgaard, translating
    +# From Jesper Nørgaard, translating
     #  (2001-01-17):
     # In Oaxaca, the 55.000 teachers from the Section 22 of the National
     # Syndicate of Education Workers, refuse to apply daylight saving each
    @@ -2262,7 +2218,7 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
     # January 17, 2000 - The Energy Secretary, Ernesto Martens, announced
     # that Summer Time will be reduced from seven to five months, starting
     # this year....
    -# 
    +# http://www.publico.com.mx/scripts/texto3.asp?action=pagina&pag=21&pos=p&secc=naci&date=01/17/2001
     # [translated], says "summer time will ... take effect on the first Sunday
     # in May, and end on the last Sunday of September.
     
    @@ -2270,23 +2226,22 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
     # The 2001-01-24 traditional Washington Post contained the page one
     # story "Timely Issue Divides Mexicans."...
     # http://www.washingtonpost.com/wp-dyn/articles/A37383-2001Jan23.html
    -# ... Mexico City Mayor Lopez Obrador "...is threatening to keep
    +# ... Mexico City Mayor López Obrador "...is threatening to keep
     # Mexico City and its 20 million residents on a different time than
    -# the rest of the country..." In particular, Lopez Obrador would abolish
    +# the rest of the country..." In particular, López Obrador would abolish
     # observation of Daylight Saving Time.
     
    -# 
     # Official statute published by the Energy Department
    -#  (2001-02-01) shows Baja and Chihauhua as still using US DST rules,
    -# and Sonora with no DST.  This was reported by Jesper Norgaard (2001-02-03).
    +# http://www.conae.gob.mx/ahorro/decretohorver2001.html#decre
    +# (2001-02-01) shows Baja and Chihauhua as still using US DST rules,
    +# and Sonora with no DST.  This was reported by Jesper Nørgaard (2001-02-03).
     
     # From Paul Eggert (2001-03-03):
     #
    -# 
    +# http://www.latimes.com/news/nation/20010303/t000018766.html
     # James F. Smith writes in today's LA Times
    -# 
     # * Sonora will continue to observe standard time.
    -# * Last week Mexico City's mayor Andres Manuel Lopez Obrador decreed that
    +# * Last week Mexico City's mayor Andrés Manuel López Obrador decreed that
     #   the Federal District will not adopt DST.
     # * 4 of 16 district leaders announced they'll ignore the decree.
     # * The decree does not affect federal-controlled facilities including
    @@ -2294,7 +2249,7 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
     #
     # For now we'll assume that the Federal District will bow to federal rules.
     
    -# From Jesper Norgaard (2001-04-01):
    +# From Jesper Nørgaard (2001-04-01):
     # I found some references to the Mexican application of daylight
     # saving, which modifies what I had already sent you, stating earlier
     # that a number of northern Mexican states would go on daylight
    @@ -2303,7 +2258,7 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
     # saving all year) will follow the original decree of president
     # Vicente Fox, starting daylight saving May 6, 2001 and ending
     # September 30, 2001.
    -# References: "Diario de Monterrey" 
    +# References: "Diario de Monterrey" 
     # Palabra  (2001-03-31)
     
     # From Reuters (2001-09-04):
    @@ -2315,7 +2270,7 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
     # standard time. "This is so residents of the Federal District are not
     # subject to unexpected time changes," a statement from the court said.
     
    -# From Jesper Norgaard Welen (2002-03-12):
    +# From Jesper Nørgaard Welen (2002-03-12):
     # ... consulting my local grocery store(!) and my coworkers, they all insisted
     # that a new decision had been made to reinstate US style DST in Mexico....
     # http://www.conae.gob.mx/ahorro/horaver2001_m1_2002.html (2002-02-20)
    @@ -2329,48 +2284,36 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
     # > the United States.
     # Now this has passed both the Congress and the Senate, so starting from
     # 2010, some border regions will be the same:
    -# 
     # http://www.signonsandiego.com/news/2009/dec/28/clocks-will-match-both-sides-border/
    -# 
    -# 
     # http://www.elmananarey.com/diario/noticia/nacional/noticias/empatan_horario_de_frontera_con_eu/621939
    -# 
     # (Spanish)
     #
     # Could not find the new law text, but the proposed law text changes are here:
    -# 
     # http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/20091210-V.pdf
    -# 
     # (Gaceta Parlamentaria)
     #
     # There is also a list of the votes here:
    -# 
     # http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/V2-101209.html
    -# 
     #
     # Our page:
    -# 
     # http://www.timeanddate.com/news/time/north-mexico-dst-change.html
    -# 
     
     # From Arthur David Olson (2010-01-20):
     # The page
    -# 
     # http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010
    -# 
     # includes this text:
     # En los municipios fronterizos de Tijuana y Mexicali en Baja California;
    -# Juárez y Ojinaga en Chihuahua; Acuña y Piedras Negras en Coahuila;
    -# Anáhuac en Nuevo León; y Nuevo Laredo, Reynosa y Matamoros en
    -# Tamaulipas, la aplicación de este horario estacional surtirá efecto
    -# desde las dos horas del segundo domingo de marzo y concluirá a las dos
    +# Juárez y Ojinaga en Chihuahua; Acuña y Piedras Negras en Coahuila;
    +# Anáhuac en Nuevo León; y Nuevo Laredo, Reynosa y Matamoros en
    +# Tamaulipas, la aplicación de este horario estacional surtirá efecto
    +# desde las dos horas del segundo domingo de marzo y concluirá a las dos
     # horas del primer domingo de noviembre.
     # En los municipios fronterizos que se encuentren ubicados en la franja
    -# fronteriza norte en el territorio comprendido entre la línea
    -# internacional y la línea paralela ubicada a una distancia de veinte
    -# kilómetros, así como la Ciudad de Ensenada, Baja California, hacia el
    -# interior del país, la aplicación de este horario estacional surtirá
    -# efecto desde las dos horas del segundo domingo de marzo y concluirá a
    +# fronteriza norte en el territorio comprendido entre la línea
    +# internacional y la línea paralela ubicada a una distancia de veinte
    +# kilómetros, así como la Ciudad de Ensenada, Baja California, hacia el
    +# interior del país, la aplicación de este horario estacional surtirá
    +# efecto desde las dos horas del segundo domingo de marzo y concluirá a
     # las dos horas del primer domingo de noviembre.
     
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    @@ -2389,39 +2332,39 @@ Rule	Mexico	2001	only	-	Sep	lastSun	2:00	0	S
     Rule	Mexico	2002	max	-	Apr	Sun>=1	2:00	1:00	D
     Rule	Mexico	2002	max	-	Oct	lastSun	2:00	0	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -# Quintana Roo
    +# Quintana Roo; represented by Cancún
     Zone America/Cancun	-5:47:04 -	LMT	1922 Jan  1  0:12:56
     			-6:00	-	CST	1981 Dec 23
     			-5:00	Mexico	E%sT	1998 Aug  2  2:00
     			-6:00	Mexico	C%sT
    -# Campeche, Yucatan
    +# Campeche, Yucatán; represented by Mérida
     Zone America/Merida	-5:58:28 -	LMT	1922 Jan  1  0:01:32
     			-6:00	-	CST	1981 Dec 23
     			-5:00	-	EST	1982 Dec  2
     			-6:00	Mexico	C%sT
    -# Coahuila, Durango, Nuevo Leon, Tamaulipas (near US border)
    +# Coahuila, Durango, Nuevo León, Tamaulipas (near US border)
     Zone America/Matamoros	-6:40:00 -	LMT	1921 Dec 31 23:20:00
     			-6:00	-	CST	1988
     			-6:00	US	C%sT	1989
     			-6:00	Mexico	C%sT	2010
     			-6:00	US	C%sT
    -# Coahuila, Durango, Nuevo Leon, Tamaulipas (away from US border)
    +# Coahuila, Durango, Nuevo León, Tamaulipas (away from US border)
     Zone America/Monterrey	-6:41:16 -	LMT	1921 Dec 31 23:18:44
     			-6:00	-	CST	1988
     			-6:00	US	C%sT	1989
     			-6:00	Mexico	C%sT
     # Central Mexico
    -Zone America/Mexico_City -6:36:36 -	LMT	1922 Jan  1 0:23:24
    +Zone America/Mexico_City -6:36:36 -	LMT	1922 Jan  1  0:23:24
     			-7:00	-	MST	1927 Jun 10 23:00
     			-6:00	-	CST	1930 Nov 15
     			-7:00	-	MST	1931 May  1 23:00
     			-6:00	-	CST	1931 Oct
     			-7:00	-	MST	1932 Apr  1
    -			-6:00	Mexico	C%sT	2001 Sep 30 02:00
    +			-6:00	Mexico	C%sT	2001 Sep 30  2:00
     			-6:00	-	CST	2002 Feb 20
     			-6:00	Mexico	C%sT
     # Chihuahua (near US border)
    -Zone America/Ojinaga	-6:57:40 -	LMT	1922 Jan 1 0:02:20
    +Zone America/Ojinaga	-6:57:40 -	LMT	1922 Jan  1  0:02:20
     			-7:00	-	MST	1927 Jun 10 23:00
     			-6:00	-	CST	1930 Nov 15
     			-7:00	-	MST	1931 May  1 23:00
    @@ -2429,7 +2372,7 @@ Zone America/Ojinaga	-6:57:40 -	LMT	1922 Jan 1 0:02:20
     			-7:00	-	MST	1932 Apr  1
     			-6:00	-	CST	1996
     			-6:00	Mexico	C%sT	1998
    -			-6:00	-	CST	1998 Apr Sun>=1 3:00
    +			-6:00	-	CST	1998 Apr Sun>=1  3:00
     			-7:00	Mexico	M%sT	2010
     			-7:00	US	M%sT
     # Chihuahua (away from US border)
    @@ -2441,7 +2384,7 @@ Zone America/Chihuahua	-7:04:20 -	LMT	1921 Dec 31 23:55:40
     			-7:00	-	MST	1932 Apr  1
     			-6:00	-	CST	1996
     			-6:00	Mexico	C%sT	1998
    -			-6:00	-	CST	1998 Apr Sun>=1 3:00
    +			-6:00	-	CST	1998 Apr Sun>=1  3:00
     			-7:00	Mexico	M%sT
     # Sonora
     Zone America/Hermosillo	-7:23:52 -	LMT	1921 Dec 31 23:36:08
    @@ -2457,42 +2400,33 @@ Zone America/Hermosillo	-7:23:52 -	LMT	1921 Dec 31 23:36:08
     			-7:00	-	MST
     
     # From Alexander Krivenyshev (2010-04-21):
    -# According to news, Bahía de Banderas (Mexican state of Nayarit)
    +# According to news, Bahía de Banderas (Mexican state of Nayarit)
     # changed time zone UTC-7 to new time zone UTC-6 on April 4, 2010 (to
     # share the same time zone as nearby city Puerto Vallarta, Jalisco).
     #
     # (Spanish)
    -# Bahía de Banderas homologa su horario al del centro del
    -# país, a partir de este domingo
    -# 
    +# Bahía de Banderas homologa su horario al del centro del
    +# país, a partir de este domingo
     # http://www.nayarit.gob.mx/notes.asp?id=20748
    -# 
     #
    -# Bahía de Banderas homologa su horario con el del Centro del
    -# País
    -# 
    -# http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50"
    -# 
    +# Bahía de Banderas homologa su horario con el del Centro del
    +# País
    +# http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50
     #
     # (English)
    -# Puerto Vallarta and Bahía de Banderas: One Time Zone
    -# 
    +# Puerto Vallarta and Bahía de Banderas: One Time Zone
     # http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml
    -# 
    -#
    -# or
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_mexico08.html
    -# 
     #
     # "Mexico's Senate approved the amendments to the Mexican Schedule System that
    -# will allow Bahía de Banderas and Puerto Vallarta to share the same time
    +# will allow Bahía de Banderas and Puerto Vallarta to share the same time
     # zone ..."
     # Baja California Sur, Nayarit, Sinaloa
     
     # From Arthur David Olson (2010-05-01):
     # Use "Bahia_Banderas" to keep the name to fourteen characters.
     
    +# Mazatlán
     Zone America/Mazatlan	-7:05:40 -	LMT	1921 Dec 31 23:54:20
     			-7:00	-	MST	1927 Jun 10 23:00
     			-6:00	-	CST	1930 Nov 15
    @@ -2504,6 +2438,7 @@ Zone America/Mazatlan	-7:05:40 -	LMT	1921 Dec 31 23:54:20
     			-8:00	-	PST	1970
     			-7:00	Mexico	M%sT
     
    +# Bahía de Banderas
     Zone America/Bahia_Banderas	-7:01:00 -	LMT	1921 Dec 31 23:59:00
     			-7:00	-	MST	1927 Jun 10 23:00
     			-6:00	-	CST	1930 Nov 15
    @@ -2513,7 +2448,7 @@ Zone America/Bahia_Banderas	-7:01:00 -	LMT	1921 Dec 31 23:59:00
     			-6:00	-	CST	1942 Apr 24
     			-7:00	-	MST	1949 Jan 14
     			-8:00	-	PST	1970
    -			-7:00	Mexico	M%sT	2010 Apr 4 2:00
    +			-7:00	Mexico	M%sT	2010 Apr  4  2:00
     			-6:00	Mexico	C%sT
     
     # Baja California (near US border)
    @@ -2560,7 +2495,7 @@ Zone America/Santa_Isabel	-7:39:28 -	LMT	1922 Jan  1  0:20:32
     # America/Tijuana only in that it did not observe DST from 1976
     # through 1995.  This was as per Shanks (1999).  But Shanks & Pottenger say
     # Ensenada did not observe DST from 1948 through 1975.  Guy Harris reports
    -# that the 1987 OAG says "Only Ensenada, Mexicale, San Felipe and
    +# that the 1987 OAG says "Only Ensenada, Mexicali, San Felipe and
     # Tijuana observe DST," which agrees with Shanks & Pottenger but implies that
     # DST-observance was a town-by-town matter back then.  This concerns
     # data after 1970 so most likely there should be at least one Zone
    @@ -2573,7 +2508,7 @@ Zone America/Santa_Isabel	-7:39:28 -	LMT	1922 Jan  1  0:20:32
     ###############################################################################
     
     # Anguilla
    -# See 'southamerica'.
    +# See America/Port_of_Spain.
     
     # Antigua and Barbuda
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    @@ -2609,8 +2544,8 @@ Rule	Barb	1978	1980	-	Apr	Sun>=15	2:00	1:00	D
     Rule	Barb	1979	only	-	Sep	30	2:00	0	S
     Rule	Barb	1980	only	-	Sep	25	2:00	0	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone America/Barbados	-3:58:29 -	LMT	1924		# Bridgetown
    -			-3:58:29 -	BMT	1932	  # Bridgetown Mean Time
    +Zone America/Barbados	-3:58:29 -	LMT	1924 # Bridgetown
    +			-3:58:29 -	BMT	1932 # Bridgetown Mean Time
     			-4:00	Barb	A%sT
     
     # Belize
    @@ -2640,20 +2575,20 @@ Zone	America/Belize	-5:52:48 -	LMT	1912 Apr
     # http://www.theroyalgazette.com/apps/pbcs.dll/article?AID=/20060529/NEWS/105290135
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Atlantic/Bermuda	-4:19:18 -	LMT	1930 Jan  1 2:00    # Hamilton
    -			-4:00	-	AST	1974 Apr 28 2:00
    +Zone Atlantic/Bermuda	-4:19:18 -	LMT	1930 Jan  1  2:00 # Hamilton
    +			-4:00	-	AST	1974 Apr 28  2:00
     			-4:00	Canada	A%sT	1976
     			-4:00	US	A%sT
     
     # Cayman Is
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	America/Cayman	-5:25:32 -	LMT	1890		# Georgetown
    -			-5:07:11 -	KMT	1912 Feb    # Kingston Mean Time
    +Zone	America/Cayman	-5:25:32 -	LMT	1890     # Georgetown
    +			-5:07:11 -	KMT	1912 Feb # Kingston Mean Time
     			-5:00	-	EST
     
     # Costa Rica
     
    -# Milne gives -5:36:13.3 as San Jose mean time; round to nearest.
    +# Milne gives -5:36:13.3 as San José mean time; round to nearest.
     
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
     Rule	CR	1979	1980	-	Feb	lastSun	0:00	1:00	D
    @@ -2663,10 +2598,10 @@ Rule	CR	1991	1992	-	Jan	Sat>=15	0:00	1:00	D
     # go with Shanks & Pottenger.
     Rule	CR	1991	only	-	Jul	 1	0:00	0	S
     Rule	CR	1992	only	-	Mar	15	0:00	0	S
    -# There are too many San Joses elsewhere, so we'll use 'Costa Rica'.
    +# There are too many San Josés elsewhere, so we'll use 'Costa Rica'.
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
    -			-5:36:13 -	SJMT	1921 Jan 15 # San Jose Mean Time
    +Zone America/Costa_Rica	-5:36:13 -	LMT	1890        # San José
    +			-5:36:13 -	SJMT	1921 Jan 15 # San José Mean Time
     			-6:00	CR	C%sT
     # Coco
     # no information; probably like America/Costa_Rica
    @@ -2685,8 +2620,8 @@ Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
     # During the game, play-by-play announcer Jim Hunter noted that
     # "We'll be losing two hours of sleep...Cuba switched to Daylight Saving
     # Time today."  (The "two hour" remark referred to losing one hour of
    -# sleep on 1999-03-28--when the announcers were in Cuba as it switched
    -# to DST--and one more hour on 1999-04-04--when the announcers will have
    +# sleep on 1999-03-28 - when the announcers were in Cuba as it switched
    +# to DST - and one more hour on 1999-04-04 - when the announcers will have
     # returned to Baltimore, which switches on that date.)
     
     # From Steffen Thorsen (2013-11-11):
    @@ -2708,16 +2643,16 @@ Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
     # adjustment in Cuba.  We will stay in daylight saving time:
     # http://www.granma.cu/espanol/2005/noviembre/mier9/horario.html
     
    -# From Jesper Norgaard Welen (2006-10-21):
    +# From Jesper Nørgaard Welen (2006-10-21):
     # An article in GRANMA INTERNACIONAL claims that Cuba will end
     # the 3 years of permanent DST next weekend, see
     # http://www.granma.cu/ingles/2006/octubre/lun16/43horario.html
     # "On Saturday night, October 28 going into Sunday, October 29, at 01:00,
    -# watches should be set back one hour -- going back to 00:00 hours -- returning
    +# watches should be set back one hour - going back to 00:00 hours - returning
     # to the normal schedule....
     
     # From Paul Eggert (2007-03-02):
    -# http://www.granma.cubaweb.cu/english/news/art89.html, dated yesterday,
    +# , dated yesterday,
     # says Cuban clocks will advance at midnight on March 10.
     # For lack of better information, assume Cuba will use US rules,
     # except that it switches at midnight standard time as usual.
    @@ -2731,10 +2666,10 @@ Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
     # http://www.prensalatina.com.mx/article.asp?ID=%7B4CC32C1B-A9F7-42FB-8A07-8631AFC923AF%7D&language=ES
     # http://actualidad.terra.es/sociedad/articulo/cuba_llama_ahorrar_energia_cambio_1957044.htm
     #
    -# From Alex Kryvenishev (2007-10-25):
    +# From Alex Krivenyshev (2007-10-25):
     # Here is also article from Granma (Cuba):
     #
    -# [Regira] el Horario Normal desde el [proximo] domingo 28 de octubre
    +# Regirá el Horario Normal desde el próximo domingo 28 de octubre
     # http://www.granma.cubaweb.cu/2007/10/24/nacional/artic07.html
     #
     # http://www.worldtimezone.com/dst_news/dst_news_cuba03.html
    @@ -2742,23 +2677,18 @@ Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
     # From Arthur David Olson (2008-03-09):
     # I'm in Maryland which is now observing United States Eastern Daylight
     # Time. At 9:44 local time I used RealPlayer to listen to
    -# 
     # http://media.enet.cu/radioreloj
    -# , a Cuban information station, and heard
    +# a Cuban information station, and heard
     # the time announced as "ocho cuarenta y cuatro" ("eight forty-four"),
     # indicating that Cuba is still on standard time.
     
     # From Steffen Thorsen (2008-03-12):
     # It seems that Cuba will start DST on Sunday, 2007-03-16...
     # It was announced yesterday, according to this source (in Spanish):
    -# 
     # http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm
    -# 
     #
     # Some more background information is posted here:
    -# 
     # http://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html
    -# 
     #
     # The article also says that Cuba has been observing DST since 1963,
     # while Shanks (and tzdata) has 1965 as the first date (except in the
    @@ -2768,18 +2698,14 @@ Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
     # change some historic records as well.
     #
     # One example:
    -# 
     # http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm
    -# 
     
    -# From Jesper Norgaard Welen (2008-03-13):
    +# From Jesper Nørgaard Welen (2008-03-13):
     # The Cuban time change has just been confirmed on the most authoritative
     # web site, the Granma.  Please check out
    -# 
     # http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html
    -# 
     #
    -# Basically as expected after Steffen Thorsens information, the change
    +# Basically as expected after Steffen Thorsen's information, the change
     # will take place midnight between Saturday and Sunday.
     
     # From Arthur David Olson (2008-03-12):
    @@ -2790,18 +2716,14 @@ Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
     # midnight between Saturday, March 07, 2009 and Sunday, March 08, 2009-
     # not on midnight March 14 / March 15 as previously thought.
     #
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_cuba05.html
     # (in Spanish)
    -# 
     
     # From Arthur David Olson (2009-03-09)
     # I listened over the Internet to
    -# 
     # http://media.enet.cu/readioreloj
    -# 
     # this morning; when it was 10:05 a. m. here in Bethesda, Maryland the
    -# the time was announced as "diez cinco"--the same time as here, indicating
    +# the time was announced as "diez cinco" - the same time as here, indicating
     # that has indeed switched to DST. Assume second Sunday from 2009 forward.
     
     # From Steffen Thorsen (2011-03-08):
    @@ -2810,42 +2732,30 @@ Zone America/Costa_Rica	-5:36:13 -	LMT	1890		# San Jose
     # changed at all).
     #
     # Source:
    -# 
     # http://granma.co.cu/2011/03/08/nacional/artic01.html
    -# 
     #
     # Our info:
    -# 
     # http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html
    -# 
     #
     # From Steffen Thorsen (2011-10-30)
     # Cuba will end DST two weeks later this year. Instead of going back
     # tonight, it has been delayed to 2011-11-13 at 01:00.
     #
     # One source (Spanish)
    -# 
     # http://www.radioangulo.cu/noticias/cuba/17105-cuba-restablecera-el-horario-del-meridiano-de-greenwich.html
    -# 
     #
     # Our page:
    -# 
     # http://www.timeanddate.com/news/time/cuba-time-changes-2011.html
    -# 
     #
     # From Steffen Thorsen (2012-03-01)
     # According to Radio Reloj, Cuba will start DST on Midnight between March
     # 31 and April 1.
     #
     # Radio Reloj has the following info (Spanish):
    -# 
     # http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril
    -# 
     #
     # Our info on it:
    -# 
     # http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html
    -# 
     
     # From Steffen Thorsen (2012-11-03):
     # Radio Reloj and many other sources report that Cuba is changing back
    @@ -2901,7 +2811,7 @@ Zone	America/Havana	-5:29:28 -	LMT	1890
     			-5:00	Cuba	C%sT
     
     # Dominica
    -# See 'southamerica'.
    +# See America/Port_of_Spain.
     
     # Dominican Republic
     
    @@ -2934,8 +2844,8 @@ Rule	DR	1972	1974	-	Jan	21	0:00	0	S
     Zone America/Santo_Domingo -4:39:36 -	LMT	1890
     			-4:40	-	SDMT	1933 Apr  1 12:00 # S. Dom. MT
     			-5:00	DR	E%sT	1974 Oct 27
    -			-4:00	-	AST	2000 Oct 29 02:00
    -			-5:00	US	E%sT	2000 Dec  3 01:00
    +			-4:00	-	AST	2000 Oct 29  2:00
    +			-5:00	US	E%sT	2000 Dec  3  1:00
     			-4:00	-	AST
     
     # El Salvador
    @@ -2946,20 +2856,20 @@ Rule	Salv	1987	1988	-	Sep	lastSun	0:00	0	S
     # There are too many San Salvadors elsewhere, so use America/El_Salvador
     # instead of America/San_Salvador.
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone America/El_Salvador -5:56:48 -	LMT	1921		# San Salvador
    +Zone America/El_Salvador -5:56:48 -	LMT	1921 # San Salvador
     			-6:00	Salv	C%sT
     
     # Grenada
     # Guadeloupe
    -# St Barthelemy
    +# St Barthélemy
     # St Martin (French part)
    -# See 'southamerica'.
    +# See America/Port_of_Spain.
     
     # Guatemala
     #
     # From Gwillim Law (2006-04-22), after a heads-up from Oscar van Vlijmen:
     # Diario Co Latino, at
    -# http://www.diariocolatino.com/internacionales/detalles.asp?NewsID=8079,
    +# ,
     # says in an article dated 2006-04-19 that the Guatemalan government had
     # decided on that date to advance official time by 60 minutes, to lessen the
     # impact of the elevated cost of oil....  Daylight saving time will last from
    @@ -2967,7 +2877,7 @@ Zone America/El_Salvador -5:56:48 -	LMT	1921		# San Salvador
     # From Paul Eggert (2006-06-22):
     # The Ministry of Energy and Mines, press release CP-15/2006
     # (2006-04-19), says DST ends at 24:00.  See
    -# .
    +# http://www.sieca.org.gt/Sitio_publico/Energeticos/Doc/Medidas/Cambio_Horario_Nac_190406.pdf
     
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
     Rule	Guat	1973	only	-	Nov	25	0:00	1:00	D
    @@ -2984,11 +2894,10 @@ Zone America/Guatemala	-6:02:04 -	LMT	1918 Oct 5
     
     # Haiti
     # From Gwillim Law (2005-04-15):
    -# Risto O. Nykanen wrote me that Haiti is now on DST.
    -# I searched for confirmation, and I found a
    -#  press release
    +# Risto O. Nykänen wrote me that Haiti is now on DST.
    +# I searched for confirmation, and I found a press release
     # on the Web page of the Haitian Consulate in Chicago (2005-03-31),
    -# .  Translated from French, it says:
    +# .  Translated from French, it says:
     #
     #  "The Prime Minister's Communication Office notifies the public in general
     #   and the press in particular that, following a decision of the Interior
    @@ -3065,14 +2974,14 @@ Zone America/Port-au-Prince -4:49:20 -	LMT	1890
     #  that Manuel Zelaya, the president
     # of Honduras, refused to back down on this.
     
    -# From Jesper Norgaard Welen (2006-08-08):
    +# From Jesper Nørgaard Welen (2006-08-08):
     # It seems that Honduras has returned from DST to standard time this Monday at
     # 00:00 hours (prolonging Sunday to 25 hours duration).
     # http://www.worldtimezone.com/dst_news/dst_news_honduras04.html
     
     # From Paul Eggert (2006-08-08):
    -# Also see Diario El Heraldo, The country returns to standard time (2006-08-08)
    -# .
    +# Also see Diario El Heraldo, The country returns to standard time (2006-08-08).
    +# http://www.elheraldo.hn/nota.php?nid=54941&sec=12
     # It mentions executive decree 18-2006.
     
     # From Steffen Thorsen (2006-08-17):
    @@ -3100,22 +3009,22 @@ Zone America/Tegucigalpa -5:48:52 -	LMT	1921 Apr
     # unspecified official document, and says "This time is used throughout the
     # island".  Go with Milne.  Round to the nearest second as required by zic.
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	America/Jamaica	-5:07:11 -	LMT	1890		# Kingston
    +Zone	America/Jamaica	-5:07:11 -	LMT	1890        # Kingston
     			-5:07:11 -	KMT	1912 Feb    # Kingston Mean Time
    -			-5:00	-	EST	1974 Apr 28 2:00
    +			-5:00	-	EST	1974 Apr 28  2:00
     			-5:00	US	E%sT	1984
     			-5:00	-	EST
     
     # Martinique
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone America/Martinique	-4:04:20 -      LMT	1890		# Fort-de-France
    -			-4:04:20 -	FFMT	1911 May     # Fort-de-France MT
    +Zone America/Martinique	-4:04:20 -      LMT	1890        # Fort-de-France
    +			-4:04:20 -	FFMT	1911 May    # Fort-de-France MT
     			-4:00	-	AST	1980 Apr  6
     			-4:00	1:00	ADT	1980 Sep 28
     			-4:00	-	AST
     
     # Montserrat
    -# See 'southamerica'.
    +# See America/Port_of_Spain.
     
     # Nicaragua
     #
    @@ -3138,27 +3047,27 @@ Zone America/Martinique	-4:04:20 -      LMT	1890		# Fort-de-France
     # From Gwillim Law (2005-04-21):
     # The Associated Press story on the time change, which can be found at
     # http://www.lapalmainteractivo.com/guias/content/gen/ap/America_Latina/AMC_GEN_NICARAGUA_HORA.html
    -# and elsewhere, says (fifth paragraph, translated from Spanish):  "The last
    +# and elsewhere, says (fifth paragraph, translated from Spanish): "The last
     # time that a change of clocks was applied to save energy was in the year 2000
    -# during the Arnoldo Aleman administration."...
    +# during the Arnoldo Alemán administration."...
     # The northamerica file says that Nicaragua has been on UTC-6 continuously
     # since December 1998.  I wasn't able to find any details of Nicaraguan time
     # changes in 2000.  Perhaps a note could be added to the northamerica file, to
     # the effect that we have indirect evidence that DST was observed in 2000.
     #
    -# From Jesper Norgaard Welen (2005-11-02):
    +# From Jesper Nørgaard Welen (2005-11-02):
     # Nicaragua left DST the 2005-10-02 at 00:00 (local time).
     # http://www.presidencia.gob.ni/presidencia/files_index/secretaria/comunicados/2005/septiembre/26septiembre-cambio-hora.htm
     # (2005-09-26)
     #
    -# From Jesper Norgaard Welen (2006-05-05):
    +# From Jesper Nørgaard Welen (2006-05-05):
     # http://www.elnuevodiario.com.ni/2006/05/01/nacionales/18410
     # (my informal translation)
    -# By order of the president of the republic, Enrique Bolanos, Nicaragua
    +# By order of the president of the republic, Enrique Bolaños, Nicaragua
     # advanced by sixty minutes their official time, yesterday at 2 in the
    -# morning, and will stay that way until 30.th. of september.
    +# morning, and will stay that way until 30th of September.
     #
    -# From Jesper Norgaard Welen (2006-09-30):
    +# From Jesper Nørgaard Welen (2006-09-30):
     # http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2006/D-063-2006P-PRN-Cambio-Hora.pdf
     # My informal translation runs:
     # The natural sun time is restored in all the national territory, in that the
    @@ -3176,7 +3085,7 @@ Zone	America/Managua	-5:45:08 -	LMT	1890
     			-5:45:12 -	MMT	1934 Jun 23 # Managua Mean Time?
     			-6:00	-	CST	1973 May
     			-5:00	-	EST	1975 Feb 16
    -			-6:00	Nic	C%sT	1992 Jan  1 4:00
    +			-6:00	Nic	C%sT	1992 Jan  1  4:00
     			-5:00	-	EST	1992 Sep 24
     			-6:00	-	CST	1993
     			-5:00	-	EST	1997
    @@ -3185,36 +3094,36 @@ Zone	America/Managua	-5:45:08 -	LMT	1890
     # Panama
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	America/Panama	-5:18:08 -	LMT	1890
    -			-5:19:36 -	CMT	1908 Apr 22   # Colon Mean Time
    +			-5:19:36 -	CMT	1908 Apr 22 # Colón Mean Time
     			-5:00	-	EST
     
     # Puerto Rico
     # There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'.
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone America/Puerto_Rico -4:24:25 -	LMT	1899 Mar 28 12:00    # San Juan
    +Zone America/Puerto_Rico -4:24:25 -	LMT	1899 Mar 28 12:00 # San Juan
     			-4:00	-	AST	1942 May  3
     			-4:00	US	A%sT	1946
     			-4:00	-	AST
     
     # St Kitts-Nevis
     # St Lucia
    -# See 'southamerica'.
    +# See America/Port_of_Spain.
     
     # St Pierre and Miquelon
     # There are too many St Pierres elsewhere, so we'll use 'Miquelon'.
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone America/Miquelon	-3:44:40 -	LMT	1911 May 15	# St Pierre
    +Zone America/Miquelon	-3:44:40 -	LMT	1911 May 15 # St Pierre
     			-4:00	-	AST	1980 May
     			-3:00	-	PMST	1987 # Pierre & Miquelon Time
     			-3:00	Canada	PM%sT
     
     # St Vincent and the Grenadines
    -# See 'southamerica'.
    +# See America/Port_of_Spain.
     
     # Turks and Caicos
     #
     # From Chris Dunn in
    -# 
    +# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=415007
     # (2007-03-15): In the Turks & Caicos Islands (America/Grand_Turk) the
     # daylight saving dates for time changes have been adjusted to match
     # the recent U.S. change of dates.
    @@ -3227,21 +3136,23 @@ Zone America/Miquelon	-3:44:40 -	LMT	1911 May 15	# St Pierre
     # Clocks are set back one hour at 2:00 a.m. local Daylight Saving Time"
     # indicating that the normal ET rules are followed.
     #
    -# From Paul Eggert (2006-05-01):
    -# Shanks & Pottenger say they use US DST rules, but IATA SSIM (1991/1998)
    -# says they switch at midnight.  Go with Shanks & Pottenger.
    +# From Paul Eggert (2014-08-19):
    +# The 2014-08-13 Cabinet meeting decided to stay on UTC-4 year-round.  See:
    +# http://tcweeklynews.com/daylight-savings-time-to-be-maintained-p5353-127.htm
    +# Model this as a switch from EST/EDT to AST on 2014-11-02 at 02:00.
     #
    -# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -Rule	TC	1979	1986	-	Apr	lastSun	2:00	1:00	D
    -Rule	TC	1979	2006	-	Oct	lastSun	2:00	0	S
    -Rule	TC	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
    -Rule	TC	2007	max	-	Mar	Sun>=8	2:00	1:00	D
    -Rule	TC	2007	max	-	Nov	Sun>=1	2:00	0	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Grand_Turk	-4:44:32 -	LMT	1890
    -			-5:07:11 -	KMT	1912 Feb    # Kingston Mean Time
    -			-5:00	TC	E%sT
    +			-5:07:11 -	KMT	1912 Feb # Kingston Mean Time
    +			-5:00	-	EST	1979
    +			-5:00	US	E%sT	2014 Nov  2  2:00
    +			-4:00	-	AST
     
     # British Virgin Is
     # Virgin Is
    -# See 'southamerica'.
    +# See America/Port_of_Spain.
    +
    +
    +# Local Variables:
    +# coding: utf-8
    +# End:
    diff --git a/jdk/test/sun/util/calendar/zi/tzdata/pacificnew b/jdk/test/sun/util/calendar/zi/tzdata/pacificnew
    index 09000c3457a..9b9257a45fe 100644
    --- a/jdk/test/sun/util/calendar/zi/tzdata/pacificnew
    +++ b/jdk/test/sun/util/calendar/zi/tzdata/pacificnew
    @@ -21,7 +21,6 @@
     # or visit www.oracle.com if you need additional information or have any
     # questions.
     #
    -# 
     # This file is in the public domain, so clarified as of
     # 2009-05-17 by Arthur David Olson.
     
    diff --git a/jdk/test/sun/util/calendar/zi/tzdata/southamerica b/jdk/test/sun/util/calendar/zi/tzdata/southamerica
    index 02bf3bb6332..398ec0e4f06 100644
    --- a/jdk/test/sun/util/calendar/zi/tzdata/southamerica
    +++ b/jdk/test/sun/util/calendar/zi/tzdata/southamerica
    @@ -21,13 +21,13 @@
     # or visit www.oracle.com if you need additional information or have any
     # questions.
     #
    -# 
     # This file is in the public domain, so clarified as of
     # 2009-05-17 by Arthur David Olson.
     
    -# This data is by no means authoritative; if you think you know better,
    +# This file is by no means authoritative; if you think you know better,
     # go ahead and edit the file (and please send any changes to
    -# tz@iana.org for general use in the future).
    +# tz@iana.org for general use in the future).  For more, please see
    +# the file CONTRIBUTING in the tz distribution.
     
     # From Paul Eggert (2006-03-22):
     # A good source for time zone historical data outside the U.S. is
    @@ -35,8 +35,8 @@
     # San Diego: ACS Publications, Inc. (2003).
     #
     # For data circa 1899, a common source is:
    -# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
    -# .
    +# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
    +# http://www.jstor.org/stable/1774359
     #
     # Gwillim Law writes that a good source
     # for recent time zone data is the International Air Transport
    @@ -53,24 +53,24 @@
     #	I suggest the use of _Summer time_ instead of the more cumbersome
     #	_daylight-saving time_.  _Summer time_ seems to be in general use
     #	in Europe and South America.
    -#	-- E O Cutler, _New York Times_ (1937-02-14), quoted in
    +#	-- E O Cutler, _New York Times_ (1937-02-14), quoted in
     #	H L Mencken, _The American Language: Supplement I_ (1960), p 466
     #
     # Earlier editions of these tables also used the North American style
     # for time zones in Brazil, but this was incorrect, as Brazilians say
    -# "summer time".  Reinaldo Goulart, a Sao Paulo businessman active in
    +# "summer time".  Reinaldo Goulart, a São Paulo businessman active in
     # the railroad sector, writes (1999-07-06):
     #	The subject of time zones is currently a matter of discussion/debate in
    -#	Brazil.  Let's say that "the Brasilia time" is considered the
    -#	"official time" because Brasilia is the capital city.
    -#	The other three time zones are called "Brasilia time "minus one" or
    +#	Brazil.  Let's say that "the Brasília time" is considered the
    +#	"official time" because Brasília is the capital city.
    +#	The other three time zones are called "Brasília time "minus one" or
     #	"plus one" or "plus two".  As far as I know there is no such
     #	name/designation as "Eastern Time" or "Central Time".
     # So I invented the following (English-language) abbreviations for now.
     # Corrections are welcome!
     #		std	dst
     #	-2:00	FNT	FNST	Fernando de Noronha
    -#	-3:00	BRT	BRST	Brasilia
    +#	-3:00	BRT	BRST	Brasília
     #	-4:00	AMT	AMST	Amazon
     #	-5:00	ACT	ACST	Acre
     
    @@ -84,7 +84,7 @@
     # Argentina: first Sunday in October to first Sunday in April since 1976.
     # Double Summer time from 1969 to 1974.  Switches at midnight.
     
    -# From U. S. Naval Observatory (1988-01-199):
    +# From U. S. Naval Observatory (1988-01-19):
     # ARGENTINA           3 H BEHIND   UTC
     
     # From Hernan G. Otero (1995-06-26):
    @@ -118,7 +118,7 @@ Rule	Arg	1988	only	-	Dec	 1	0:00	1:00	S
     # From Hernan G. Otero (1995-06-26):
     # These corrections were contributed by InterSoft Argentina S.A.,
     # obtaining the data from the:
    -# Talleres de Hidrografia Naval Argentina
    +# Talleres de Hidrografía Naval Argentina
     # (Argentine Naval Hydrography Institute)
     Rule	Arg	1989	1993	-	Mar	Sun>=1	0:00	0	-
     Rule	Arg	1989	1992	-	Oct	Sun>=15	0:00	1:00	S
    @@ -140,13 +140,13 @@ Rule	Arg	1999	only	-	Oct	Sun>=1	0:00	1:00	S
     Rule	Arg	2000	only	-	Mar	3	0:00	0	-
     #
     # From Peter Gradelski via Steffen Thorsen (2000-03-01):
    -# We just checked with our Sao Paulo office and they say the government of
    +# We just checked with our São Paulo office and they say the government of
     # Argentina decided not to become one of the countries that go on or off DST.
     # So Buenos Aires should be -3 hours from GMT at all times.
     #
    -# From Fabian L. Arce Jofre (2000-04-04):
    +# From Fabián L. Arce Jofré (2000-04-04):
     # The law that claimed DST for Argentina was derogated by President Fernando
    -# de la Rua on March 2, 2000, because it would make people spend more energy
    +# de la Rúa on March 2, 2000, because it would make people spend more energy
     # in the winter time, rather than less.  The change took effect on March 3.
     #
     # From Mariano Absatz (2001-06-06):
    @@ -179,15 +179,13 @@ Rule	Arg	2000	only	-	Mar	3	0:00	0	-
     # that Argentina will use DST next year as well, from October to
     # March, although exact rules are not given.
     #
    -# From Jesper Norgaard Welen (2007-12-26)
    +# From Jesper Nørgaard Welen (2007-12-26)
     # The last hurdle of Argentina DST is over, the proposal was approved in
    -# the lower chamber too (Deputados) with a vote 192 for and 2 against.
    +# the lower chamber too (Diputados) with a vote 192 for and 2 against.
     # By the way thanks to Mariano Absatz and Daniel Mario Vega for the link to
     # the original scanned proposal, where the dates and the zero hours are
     # clear and unambiguous...This is the article about final approval:
    -# 
     # http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996
    -# 
     #
     # From Paul Eggert (2007-12-22):
     # For dates after mid-2008, the following rules are my guesses and
    @@ -197,13 +195,8 @@ Rule	Arg	2000	only	-	Mar	3	0:00	0	-
     # As per message from Carlos Alberto Fonseca Arauz (Nicaragua),
     # Argentina will start DST on Sunday October 19, 2008.
     #
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_argentina03.html
    -# 
    -# OR
    -# 
     # http://www.impulsobaires.com.ar/nota.php?id=57832 (in spanish)
    -# 
     
     # From Rodrigo Severo (2008-10-06):
     # Here is some info available at a Gentoo bug related to TZ on Argentina's DST:
    @@ -212,48 +205,39 @@ Rule	Arg	2000	only	-	Mar	3	0:00	0	-
     # Hi, there is a problem with timezone-data-2008e and maybe with
     # timezone-data-2008f
     # Argentinian law [Number] 25.155 is no longer valid.
    -# 
     # http://www.infoleg.gov.ar/infolegInternet/anexos/60000-64999/60036/norma.htm
    -# 
     # The new one is law [Number] 26.350
    -# 
     # http://www.infoleg.gov.ar/infolegInternet/anexos/135000-139999/136191/norma.htm
    -# 
     # So there is no summer time in Argentina for now.
     
     # From Mariano Absatz (2008-10-20):
    -# Decree 1693/2008 applies Law 26.350 for the summer 2008/2009 establishing DST in Argentina
    -# From 2008-10-19 until 2009-03-15
    -# 
    +# Decree 1693/2008 applies Law 26.350 for the summer 2008/2009 establishing DST
    +# in Argentina from 2008-10-19 until 2009-03-15.
     # http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=16102008&pi=3&pf=4&s=0&sec=01
    -# 
     #
    -# Decree 1705/2008 excepting 12 Provinces from applying DST in the summer 2008/2009:
    -# Catamarca, La Rioja, Mendoza, Salta, San Juan, San Luis, La Pampa, Neuquen, Rio Negro, Chubut, Santa Cruz
    -# and Tierra del Fuego
    -# 
    +
    +# Decree 1705/2008 excepting 12 Provinces from applying DST in the summer
    +# 2008/2009: Catamarca, La Rioja, Mendoza, Salta, San Juan, San Luis, La
    +# Pampa, Neuquén, Rio Negro, Chubut, Santa Cruz and Tierra del Fuego
     # http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=17102008&pi=1&pf=1&s=0&sec=01
    -# 
     #
    -# Press release 235 dated Saturday October 18th, from the Government of the Province of Jujuy saying
    -# it will not apply DST either (even when it was not included in Decree 1705/2008)
    -# 
    +# Press release 235 dated Saturday October 18th, from the Government of the
    +# Province of Jujuy saying it will not apply DST either (even when it was not
    +# included in Decree 1705/2008).
     # http://www.jujuy.gov.ar/index2/partes_prensa/18_10_08/235-181008.doc
    -# 
     
     # From fullinet (2009-10-18):
     # As announced in
    -# 
     # http://www.argentina.gob.ar/argentina/portal/paginas.dhtml?pagina=356
    -# 
    -# (an official .gob.ar) under title: "Sin Cambio de Hora" (english: "No hour change")
    +# (an official .gob.ar) under title: "Sin Cambio de Hora"
    +# (English: "No hour change").
     #
    -# "Por el momento, el Gobierno Nacional resolvio no modificar la hora
    -# oficial, decision que estaba en estudio para su implementacion el
    -# domingo 18 de octubre. Desde el Ministerio de Planificacion se anuncio
    -# que la Argentina hoy, en estas condiciones meteorologicas, no necesita
    -# la modificacion del huso horario, ya que 2009 nos encuentra con
    -# crecimiento en la produccion y distribucion energetica."
    +# "Por el momento, el Gobierno Nacional resolvió no modificar la hora
    +# oficial, decisión que estaba en estudio para su implementación el
    +# domingo 18 de octubre. Desde el Ministerio de Planificación se anunció
    +# que la Argentina hoy, en estas condiciones meteorológicas, no necesita
    +# la modificación del huso horario, ya que 2009 nos encuentra con
    +# crecimiento en la producción y distribución energética."
     
     Rule	Arg	2007	only	-	Dec	30	0:00	1:00	S
     Rule	Arg	2008	2009	-	Mar	Sun>=15	0:00	0	-
    @@ -267,10 +251,10 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
     # It's Law No. 7,210.  This change is due to a public power emergency, so for
     # now we'll assume it's for this year only.
     #
    -# From Paul Eggert (2006-03-22):
    -# 
    -# Hora de verano para la Republica Argentina (2003-06-08)
    -#  says that standard time in Argentina from 1894-10-31
    +# From Paul Eggert (2014-08-09):
    +# Hora de verano para la República Argentina
    +# http://buenasiembra.com.ar/esoterismo/astrologia/hora-de-verano-de-la-republica-argentina-27.html
    +# says that standard time in Argentina from 1894-10-31
     # to 1920-05-01 was -4:16:48.25.  Go with this more-precise value
     # over Shanks & Pottenger.
     #
    @@ -285,10 +269,10 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
     # time in October 17th.
     #
     # Catamarca, Chubut, La Rioja, San Juan, San Luis, Santa Cruz,
    -# Tierra del Fuego, Tucuman.
    +# Tierra del Fuego, Tucumán.
     #
     # From Mariano Absatz (2004-06-14):
    -# ... this weekend, the Province of Tucuman decided it'd go back to UTC-03:00
    +# ... this weekend, the Province of Tucumán decided it'd go back to UTC-03:00
     # yesterday midnight (that is, at 24:00 Saturday 12th), since the people's
     # annoyance with the change is much higher than the power savings obtained....
     #
    @@ -323,49 +307,38 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
     # Here are articles that Argentina Province San Luis is planning to end DST
     # as earlier as upcoming Monday January 21, 2008 or February 2008:
     #
    -# Provincia argentina retrasa reloj y marca diferencia con resto del pais
    +# Provincia argentina retrasa reloj y marca diferencia con resto del país
     # (Argentine Province delayed clock and mark difference with the rest of the
     # country)
    -# 
     # http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel
    -# 
     #
     # Es inminente que en San Luis atrasen una hora los relojes
     # (It is imminent in San Luis clocks one hour delay)
    -# 
    -# http://www.lagaceta.com.ar/vernotae.asp?id_nota=253414
    -# 
    -#
    -# 
    +# http://www.lagaceta.com.ar/nota/253414/Economia/Es-inminente-que-en-San-Luis-atrasen-una-hora-los-relojes.html
     # http://www.worldtimezone.net/dst_news/dst_news_argentina02.html
    -# 
     
    -# From Jesper Norgaard Welen (2008-01-18):
    +# From Jesper Nørgaard Welen (2008-01-18):
     # The page of the San Luis provincial government
    -# 
     # http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812
    -# 
     # confirms what Alex Krivenyshev has earlier sent to the tz
     # emailing list about that San Luis plans to return to standard
     # time much earlier than the rest of the country. It also
     # confirms that upon request the provinces San Juan and Mendoza
     # refused to follow San Luis in this change.
     #
    -# The change is supposed to take place Monday the 21.st at 0:00
    +# The change is supposed to take place Monday the 21st at 0:00
     # hours. As far as I understand it if this goes ahead, we need
     # a new timezone for San Luis (although there are also documented
     # independent changes in the southamerica file of San Luis in
     # 1990 and 1991 which has not been confirmed).
     
    -# From Jesper Norgaard Welen (2008-01-25):
    +# From Jesper Nørgaard Welen (2008-01-25):
     # Unfortunately the below page has become defunct, about the San Luis
     # time change. Perhaps because it now is part of a group of pages "Most
     # important pages of 2008."
     #
     # You can use
    -# 
     # http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834
    -# 
     # instead it seems. Or use "Buscador" from the main page of the San Luis
     # government, and fill in "huso" and click OK, and you will get 3 pages
     # from which the first one is identical to the above.
    @@ -385,9 +358,9 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
     # back in 2004, when these provinces changed to UTC-4 for a few days, I
     # mailed them personally and never got an answer).
     
    -# From Paul Eggert (2008-06-30):
    -# Unless otherwise specified, data are from Shanks & Pottenger through 1992,
    -# from the IATA otherwise.  As noted below, Shanks & Pottenger say that
    +# From Paul Eggert (2014-08-12):
    +# Unless otherwise specified, data entries are from Shanks & Pottenger through
    +# 1992, from the IATA otherwise.  As noted below, Shanks & Pottenger say that
     # America/Cordoba split into 6 subregions during 1991/1992, one of which
     # was America/San_Luis, but we haven't verified this yet so for now we'll
     # keep America/Cordoba a single region rather than splitting it into the
    @@ -399,14 +372,9 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
     # to utc-04:00 until the second Saturday in October...
     #
     # The press release is at
    -# 
     # http://www.sanluis.gov.ar/SL/Paginas/NoticiaDetalle.asp?TemaId=1&InfoPrensaId=3102
    -# 
    -# (I couldn't find the decree, but
    -# 
    -# www.sanluis.gov.ar
    -# 
    -# is the official page for the Province Government).
    +# (I couldn't find the decree, but www.sanluis.gov.ar
    +# is the official page for the Province Government.)
     #
     # There's also a note in only one of the major national papers ...
     # http://www.lanacion.com.ar/nota.asp?nota_id=1107912
    @@ -423,9 +391,7 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
     # ...the Province of San Luis is a case in itself.
     #
     # The Law at
    -# 
     # is ambiguous because establishes a calendar from the 2nd Sunday in
     # October at 0:00 thru the 2nd Saturday in March at 24:00 and the
     # complement of that starting on the 2nd Sunday of March at 0:00 and
    @@ -454,19 +420,15 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
     # ...
     
     # From Alexander Krivenyshev (2010-04-09):
    -# According to news reports from El Diario de la Republica Province San
    +# According to news reports from El Diario de la República Province San
     # Luis, Argentina (standard time UTC-04) will keep Daylight Saving Time
    -# after April 11, 2010--will continue to have same time as rest of
    +# after April 11, 2010 - will continue to have same time as rest of
     # Argentina (UTC-3) (no DST).
     #
    -# Confirmaron la prórroga del huso horario de verano (Spanish)
    -# 
    +# Confirmaron la prórroga del huso horario de verano (Spanish)
     # http://www.eldiariodelarepublica.com/index.php?option=com_content&task=view&id=29383&Itemid=9
    -# 
     # or (some English translation):
    -# 
     # http://www.worldtimezone.com/dst_news/dst_news_argentina08.html
    -# 
     
     # From Mariano Absatz (2010-04-12):
     # yes...I can confirm this...and given that San Luis keeps calling
    @@ -478,7 +440,7 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
     # Perhaps San Luis operates on the legal fiction that it is at UTC-4
     # with perpetual summer time, but ordinary usage typically seems to
     # just say it's at UTC-3; see, for example,
    -# .
    +# http://es.wikipedia.org/wiki/Hora_oficial_argentina
     # We've documented similar situations as being plain changes to
     # standard time, so let's do that here too.  This does not change UTC
     # offsets, only tm_isdst and the time zone abbreviations.  One minor
    @@ -486,20 +448,20 @@ Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
     # setting for time stamps past 2038.
     
     # From Paul Eggert (2013-02-21):
    -# Milne says Cordoba time was -4:16:48.2.  Round to the nearest second.
    +# Milne says Córdoba time was -4:16:48.2.  Round to the nearest second.
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     #
     # Buenos Aires (BA), Capital Federal (CF),
    -Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
    -			-4:16:48 -	CMT	1920 May # Cordoba Mean Time
    +Zone America/Argentina/Buenos_Aires -3:53:48 - LMT	1894 Oct 31
    +			-4:16:48 -	CMT	1920 May    # Córdoba Mean Time
     			-4:00	-	ART	1930 Dec
     			-4:00	Arg	AR%sT	1969 Oct  5
     			-3:00	Arg	AR%sT	1999 Oct  3
     			-4:00	Arg	AR%sT	2000 Mar  3
     			-3:00	Arg	AR%sT
     #
    -# Cordoba (CB), Santa Fe (SF), Entre Rios (ER), Corrientes (CN), Misiones (MN),
    +# Córdoba (CB), Santa Fe (SF), Entre Ríos (ER), Corrientes (CN), Misiones (MN),
     # Chaco (CC), Formosa (FM), Santiago del Estero (SE)
     #
     # Shanks & Pottenger also make the following claims, which we haven't verified:
    @@ -519,7 +481,7 @@ Zone America/Argentina/Cordoba -4:16:48 - LMT	1894 Oct 31
     			-4:00	Arg	AR%sT	2000 Mar  3
     			-3:00	Arg	AR%sT
     #
    -# Salta (SA), La Pampa (LP), Neuquen (NQ), Rio Negro (RN)
    +# Salta (SA), La Pampa (LP), Neuquén (NQ), Rio Negro (RN)
     Zone America/Argentina/Salta -4:21:40 - LMT	1894 Oct 31
     			-4:16:48 -	CMT	1920 May
     			-4:00	-	ART	1930 Dec
    @@ -531,7 +493,7 @@ Zone America/Argentina/Salta -4:21:40 - LMT	1894 Oct 31
     			-3:00	Arg	AR%sT	2008 Oct 18
     			-3:00	-	ART
     #
    -# Tucuman (TM)
    +# Tucumán (TM)
     Zone America/Argentina/Tucuman -4:20:52 - LMT	1894 Oct 31
     			-4:16:48 -	CMT	1920 May
     			-4:00	-	ART	1930 Dec
    @@ -642,8 +604,8 @@ Zone America/Argentina/San_Luis -4:25:24 - LMT	1894 Oct 31
     			-3:00	-	ART
     #
     # Santa Cruz (SC)
    -Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
    -			-4:16:48 -	CMT	1920 May # Cordoba Mean Time
    +Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT	1894 Oct 31
    +			-4:16:48 -	CMT	1920 May    # Córdoba Mean Time
     			-4:00	-	ART	1930 Dec
     			-4:00	Arg	AR%sT	1969 Oct  5
     			-3:00	Arg	AR%sT	1999 Oct  3
    @@ -653,9 +615,9 @@ Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
     			-3:00	Arg	AR%sT	2008 Oct 18
     			-3:00	-	ART
     #
    -# Tierra del Fuego, Antartida e Islas del Atlantico Sur (TF)
    -Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
    -			-4:16:48 -	CMT	1920 May # Cordoba Mean Time
    +# Tierra del Fuego, Antártida e Islas del Atlántico Sur (TF)
    +Zone America/Argentina/Ushuaia -4:33:12 - LMT	1894 Oct 31
    +			-4:16:48 -	CMT	1920 May    # Córdoba Mean Time
     			-4:00	-	ART	1930 Dec
     			-4:00	Arg	AR%sT	1969 Oct  5
     			-3:00	Arg	AR%sT	1999 Oct  3
    @@ -686,13 +648,13 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
     
     # From IATA SSIM (1996-02):
     # _Only_ the following states in BR1 observe DST: Rio Grande do Sul (RS),
    -# Santa Catarina (SC), Parana (PR), Sao Paulo (SP), Rio de Janeiro (RJ),
    -# Espirito Santo (ES), Minas Gerais (MG), Bahia (BA), Goias (GO),
    +# Santa Catarina (SC), Paraná (PR), São Paulo (SP), Rio de Janeiro (RJ),
    +# Espírito Santo (ES), Minas Gerais (MG), Bahia (BA), Goiás (GO),
     # Distrito Federal (DF), Tocantins (TO), Sergipe [SE] and Alagoas [AL].
     # [The last three states are new to this issue of the IATA SSIM.]
     
     # From Gwillim Law (1996-10-07):
    -# Geography, history (Tocantins was part of Goias until 1989), and other
    +# Geography, history (Tocantins was part of Goiás until 1989), and other
     # sources of time zone information lead me to believe that AL, SE, and TO were
     # always in BR1, and so the only change was whether or not they observed DST....
     # The earliest issue of the SSIM I have is 2/91.  Each issue from then until
    @@ -706,16 +668,14 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
     # However, some conclusions can be drawn from another IATA manual: the Airline
     # Coding Directory, which lists close to 400 airports in Brazil.  For each
     # airport it gives a time zone which is coded to the SSIM.  From that
    -# information, I'm led to conclude that the states of Amapa (AP), Ceara (CE),
    -# Maranhao (MA), Paraiba (PR), Pernambuco (PE), Piaui (PI), and Rio Grande do
    -# Norte (RN), and the eastern part of Para (PA) are all in BR1 without DST.
    +# information, I'm led to conclude that the states of Amapá (AP), Ceará (CE),
    +# Maranhão (MA), Paraíba (PR), Pernambuco (PE), Piauí (PI), and Rio Grande do
    +# Norte (RN), and the eastern part of Pará (PA) are all in BR1 without DST.
     
     # From Marcos Tadeu (1998-09-27):
    -# 
    -# Brazilian official page
    -# 
    +# Brazilian official page 
     
    -# From Jesper Norgaard (2000-11-03):
    +# From Jesper Nørgaard (2000-11-03):
     # [For an official list of which regions in Brazil use which time zones, see:]
     # http://pcdsh01.on.br/Fusbr.htm
     # http://pcdsh01.on.br/Fusbrhv.htm
    @@ -748,13 +708,13 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
     
     # From Paul Schulze (2008-06-24):
     # ...by law number 11.662 of April 24, 2008 (published in the "Diario
    -# Oficial da Uniao"...) in Brazil there are changes in the timezones,
    +# Oficial da União"...) in Brazil there are changes in the timezones,
     # effective today (00:00am at June 24, 2008) as follows:
     #
    -# a) The timezone UTC+5 is e[x]tinguished, with all the Acre state and the
    +# a) The timezone UTC+5 is extinguished, with all the Acre state and the
     # part of the Amazonas state that had this timezone now being put to the
     # timezone UTC+4
    -# b) The whole Para state now is put at timezone UTC+3, instead of just
    +# b) The whole Pará state now is put at timezone UTC+3, instead of just
     # part of it, as was before.
     #
     # This change follows a proposal of senator Tiao Viana of Acre state, that
    @@ -767,13 +727,11 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
     
     # From Rodrigo Severo (2008-06-24):
     # Just correcting the URL:
    -# 
     # https://www.in.gov.br/imprensa/visualiza/index.jsp?jornal=do&secao=1&pagina=1&data=25/04/2008
    -# 
     #
     # As a result of the above Decree I believe the America/Rio_Branco
     # timezone shall be modified from UTC-5 to UTC-4 and a new timezone shall
    -# be created to represent the...west side of the Para State. I
    +# be created to represent the...west side of the Pará State. I
     # suggest this new timezone be called Santarem as the most
     # important/populated city in the affected area.
     #
    @@ -782,19 +740,16 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
     
     # From Alex Krivenyshev (2008-06-24):
     # This is a quick reference page for New and Old Brazil Time Zones map.
    -# 
     # http://www.worldtimezone.com/brazil-time-new-old.php
    -# 
     #
    -# - 4 time zones replaced by 3 time zones-eliminating time zone UTC- 05
    -# (state Acre and the part of the Amazonas will be UTC/GMT- 04) - western
    -# part of Par state is moving to one timezone UTC- 03 (from UTC -04).
    +# - 4 time zones replaced by 3 time zones - eliminating time zone UTC-05
    +# (state Acre and the part of the Amazonas will be UTC/GMT-04) - western
    +# part of Par state is moving to one timezone UTC-03 (from UTC-04).
     
     # From Paul Eggert (2002-10-10):
     # The official decrees referenced below are mostly taken from
    -# 
    -# Decretos sobre o Horario de Verao no Brasil
    -# .
    +# Decretos sobre o Horário de Verão no Brasil.
    +# http://pcdsh01.on.br/DecHV.html
     
     # From Steffen Thorsen (2008-08-29):
     # As announced by the government and many newspapers in Brazil late
    @@ -806,25 +761,17 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
     # It has not yet been posted to http://pcdsh01.on.br/DecHV.html
     #
     # An official page about it:
    -# 
     # http://www.mme.gov.br/site/news/detail.do?newsId=16722
    -# 
     # Note that this link does not always work directly, but must be accessed
     # by going to
    -# 
     # http://www.mme.gov.br/first
    -# 
     #
     # One example link that works directly:
    -# 
     # http://jornale.com.br/index.php?option=com_content&task=view&id=13530&Itemid=54
     # (Portuguese)
    -# 
     #
     # We have a written a short article about it as well:
    -# 
     # http://www.timeanddate.com/news/time/brazil-dst-2008-2009.html
    -# 
     #
     # From Alexander Krivenyshev (2011-10-04):
     # State Bahia will return to Daylight savings time this year after 8 years off.
    @@ -832,17 +779,12 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
     # television station in Salvador.
     
     # In Portuguese:
    -# 
     # http://g1.globo.com/bahia/noticia/2011/10/governador-jaques-wagner-confirma-horario-de-verao-na-bahia.html
    -#  and
    -# 
     # http://noticias.terra.com.br/brasil/noticias/0,,OI5390887-EI8139,00-Bahia+volta+a+ter+horario+de+verao+apos+oito+anos.html
    -# 
     
     # From Guilherme Bernardes Rodrigues (2011-10-07):
     # There is news in the media, however there is still no decree about it.
    -# I just send a e-mail to Zulmira Brandao at
    -# http://pcdsh01.on.br/ the
    +# I just send a e-mail to Zulmira Brandao at http://pcdsh01.on.br/ the
     # official agency about time in Brazil, and she confirmed that the old rule is
     # still in force.
     
    @@ -854,9 +796,7 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
     #
     # DECRETO No- 7.584, DE 13 DE OUTUBRO DE 2011
     # Link :
    -# 
     # http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6
    -# 
     
     # From Kelley Cook (2012-10-16):
     # The governor of state of Bahia in Brazil announced on Thursday that
    @@ -884,42 +824,42 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
     # For now, assume western Amazonas will change as well.
     
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    -# Decree 20,466 (1931-10-01)
    -# Decree 21,896 (1932-01-10)
    +# Decree 20,466  (1931-10-01)
    +# Decree 21,896  (1932-01-10)
     Rule	Brazil	1931	only	-	Oct	 3	11:00	1:00	S
     Rule	Brazil	1932	1933	-	Apr	 1	 0:00	0	-
     Rule	Brazil	1932	only	-	Oct	 3	 0:00	1:00	S
    -# Decree 23,195 (1933-10-10)
    +# Decree 23,195  (1933-10-10)
     # revoked DST.
    -# Decree 27,496 (1949-11-24)
    -# Decree 27,998 (1950-04-13)
    +# Decree 27,496  (1949-11-24)
    +# Decree 27,998  (1950-04-13)
     Rule	Brazil	1949	1952	-	Dec	 1	 0:00	1:00	S
     Rule	Brazil	1950	only	-	Apr	16	 1:00	0	-
     Rule	Brazil	1951	1952	-	Apr	 1	 0:00	0	-
    -# Decree 32,308 (1953-02-24)
    +# Decree 32,308  (1953-02-24)
     Rule	Brazil	1953	only	-	Mar	 1	 0:00	0	-
    -# Decree 34,724 (1953-11-30)
    +# Decree 34,724  (1953-11-30)
     # revoked DST.
    -# Decree 52,700 (1963-10-18)
    +# Decree 52,700  (1963-10-18)
     # established DST from 1963-10-23 00:00 to 1964-02-29 00:00
     # in SP, RJ, GB, MG, ES, due to the prolongation of the drought.
    -# Decree 53,071 (1963-12-03)
    +# Decree 53,071  (1963-12-03)
     # extended the above decree to all of the national territory on 12-09.
     Rule	Brazil	1963	only	-	Dec	 9	 0:00	1:00	S
    -# Decree 53,604 (1964-02-25)
    +# Decree 53,604  (1964-02-25)
     # extended summer time by one day to 1964-03-01 00:00 (start of school).
     Rule	Brazil	1964	only	-	Mar	 1	 0:00	0	-
    -# Decree 55,639 (1965-01-27)
    +# Decree 55,639  (1965-01-27)
     Rule	Brazil	1965	only	-	Jan	31	 0:00	1:00	S
     Rule	Brazil	1965	only	-	Mar	31	 0:00	0	-
    -# Decree 57,303 (1965-11-22)
    +# Decree 57,303  (1965-11-22)
     Rule	Brazil	1965	only	-	Dec	 1	 0:00	1:00	S
    -# Decree 57,843 (1966-02-18)
    +# Decree 57,843  (1966-02-18)
     Rule	Brazil	1966	1968	-	Mar	 1	 0:00	0	-
     Rule	Brazil	1966	1967	-	Nov	 1	 0:00	1:00	S
    -# Decree 63,429 (1968-10-15)
    +# Decree 63,429  (1968-10-15)
     # revoked DST.
    -# Decree 91,698 (1985-09-27)
    +# Decree 91,698  (1985-09-27)
     Rule	Brazil	1985	only	-	Nov	 2	 0:00	1:00	S
     # Decree 92,310 (1986-01-21)
     # Decree 92,463 (1986-03-13)
    @@ -927,42 +867,42 @@ Rule	Brazil	1986	only	-	Mar	15	 0:00	0	-
     # Decree 93,316 (1986-10-01)
     Rule	Brazil	1986	only	-	Oct	25	 0:00	1:00	S
     Rule	Brazil	1987	only	-	Feb	14	 0:00	0	-
    -# Decree 94,922 (1987-09-22)
    +# Decree 94,922  (1987-09-22)
     Rule	Brazil	1987	only	-	Oct	25	 0:00	1:00	S
     Rule	Brazil	1988	only	-	Feb	 7	 0:00	0	-
    -# Decree 96,676 (1988-09-12)
    +# Decree 96,676  (1988-09-12)
     # except for the states of AC, AM, PA, RR, RO, and AP (then a territory)
     Rule	Brazil	1988	only	-	Oct	16	 0:00	1:00	S
     Rule	Brazil	1989	only	-	Jan	29	 0:00	0	-
    -# Decree 98,077 (1989-08-21)
    +# Decree 98,077  (1989-08-21)
     # with the same exceptions
     Rule	Brazil	1989	only	-	Oct	15	 0:00	1:00	S
     Rule	Brazil	1990	only	-	Feb	11	 0:00	0	-
    -# Decree 99,530 (1990-09-17)
    +# Decree 99,530  (1990-09-17)
     # adopted by RS, SC, PR, SP, RJ, ES, MG, GO, MS, DF.
     # Decree 99,629 (1990-10-19) adds BA, MT.
     Rule	Brazil	1990	only	-	Oct	21	 0:00	1:00	S
     Rule	Brazil	1991	only	-	Feb	17	 0:00	0	-
    -# Unnumbered decree (1991-09-25)
    +# Unnumbered decree  (1991-09-25)
     # adopted by RS, SC, PR, SP, RJ, ES, MG, BA, GO, MT, MS, DF.
     Rule	Brazil	1991	only	-	Oct	20	 0:00	1:00	S
     Rule	Brazil	1992	only	-	Feb	 9	 0:00	0	-
    -# Unnumbered decree (1992-10-16)
    +# Unnumbered decree  (1992-10-16)
     # adopted by same states.
     Rule	Brazil	1992	only	-	Oct	25	 0:00	1:00	S
     Rule	Brazil	1993	only	-	Jan	31	 0:00	0	-
    -# Decree 942 (1993-09-28)
    +# Decree 942  (1993-09-28)
     # adopted by same states, plus AM.
    -# Decree 1,252 (1994-09-22;
    +# Decree 1,252  (1994-09-22;
     # web page corrected 2004-01-07) adopted by same states, minus AM.
    -# Decree 1,636 (1995-09-14)
    +# Decree 1,636  (1995-09-14)
     # adopted by same states, plus MT and TO.
    -# Decree 1,674 (1995-10-13)
    +# Decree 1,674  (1995-10-13)
     # adds AL, SE.
     Rule	Brazil	1993	1995	-	Oct	Sun>=11	 0:00	1:00	S
     Rule	Brazil	1994	1995	-	Feb	Sun>=15	 0:00	0	-
     Rule	Brazil	1996	only	-	Feb	11	 0:00	0	-
    -# Decree 2,000 (1996-09-04)
    +# Decree 2,000  (1996-09-04)
     # adopted by same states, minus AL, SE.
     Rule	Brazil	1996	only	-	Oct	 6	 0:00	1:00	S
     Rule	Brazil	1997	only	-	Feb	16	 0:00	0	-
    @@ -975,53 +915,51 @@ Rule	Brazil	1997	only	-	Feb	16	 0:00	0	-
     #
     # Decree 2,317 (1997-09-04), adopted by same states.
     Rule	Brazil	1997	only	-	Oct	 6	 0:00	1:00	S
    -# Decree 2,495
    +# Decree 2,495 
     # (1998-02-10)
     Rule	Brazil	1998	only	-	Mar	 1	 0:00	0	-
    -# Decree 2,780 (1998-09-11)
    +# Decree 2,780  (1998-09-11)
     # adopted by the same states as before.
     Rule	Brazil	1998	only	-	Oct	11	 0:00	1:00	S
     Rule	Brazil	1999	only	-	Feb	21	 0:00	0	-
    -# Decree 3,150
    +# Decree 3,150 
     # (1999-08-23) adopted by same states.
    -# Decree 3,188 (1999-09-30)
    +# Decree 3,188  (1999-09-30)
     # adds SE, AL, PB, PE, RN, CE, PI, MA and RR.
     Rule	Brazil	1999	only	-	Oct	 3	 0:00	1:00	S
     Rule	Brazil	2000	only	-	Feb	27	 0:00	0	-
    -# Decree 3,592 (2000-09-06)
    +# Decree 3,592  (2000-09-06)
     # adopted by the same states as before.
    -# Decree 3,630 (2000-10-13)
    +# Decree 3,630  (2000-10-13)
     # repeals DST in PE and RR, effective 2000-10-15 00:00.
    -# Decree 3,632 (2000-10-17)
    +# Decree 3,632  (2000-10-17)
     # repeals DST in SE, AL, PB, RN, CE, PI and MA, effective 2000-10-22 00:00.
    -# Decree 3,916
    +# Decree 3,916 
     # (2001-09-13) reestablishes DST in AL, CE, MA, PB, PE, PI, RN, SE.
     Rule	Brazil	2000	2001	-	Oct	Sun>=8	 0:00	1:00	S
     Rule	Brazil	2001	2006	-	Feb	Sun>=15	 0:00	0	-
     # Decree 4,399 (2002-10-01) repeals DST in AL, CE, MA, PB, PE, PI, RN, SE.
    -# 4,399
    +# 4,399 
     Rule	Brazil	2002	only	-	Nov	 3	 0:00	1:00	S
     # Decree 4,844 (2003-09-24; corrected 2003-09-26) repeals DST in BA, MT, TO.
    -# 4,844
    +# 4,844 
     Rule	Brazil	2003	only	-	Oct	19	 0:00	1:00	S
     # Decree 5,223 (2004-10-01) reestablishes DST in MT.
    -# 5,223
    +# 5,223 
     Rule	Brazil	2004	only	-	Nov	 2	 0:00	1:00	S
    -# Decree 5,539 (2005-09-19),
    +# Decree 5,539  (2005-09-19),
     # adopted by the same states as before.
     Rule	Brazil	2005	only	-	Oct	16	 0:00	1:00	S
    -# Decree 5,920 (2006-10-03),
    +# Decree 5,920  (2006-10-03),
     # adopted by the same states as before.
     Rule	Brazil	2006	only	-	Nov	 5	 0:00	1:00	S
     Rule	Brazil	2007	only	-	Feb	25	 0:00	0	-
    -# Decree 6,212 (2007-09-26),
    +# Decree 6,212  (2007-09-26),
     # adopted by the same states as before.
     Rule	Brazil	2007	only	-	Oct	Sun>=8	 0:00	1:00	S
     # From Frederico A. C. Neves (2008-09-10):
     # According to this decree
    -# 
     # http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm
    -# 
     # [t]he DST period in Brazil now on will be from the 3rd Oct Sunday to the
     # 3rd Feb Sunday. There is an exception on the return date when this is
     # the Carnival Sunday then the return date will be the next Sunday...
    @@ -1056,29 +994,29 @@ Zone America/Noronha	-2:09:40 -	LMT	1914
     			-2:00	Brazil	FN%sT	2002 Oct  1
     			-2:00	-	FNT
     # Other Atlantic islands have no permanent settlement.
    -# These include Trindade and Martin Vaz (administratively part of ES),
    -# Atol das Rocas (RN), and Penedos de Sao Pedro e Sao Paulo (PE).
    +# These include Trindade and Martim Vaz (administratively part of ES),
    +# Rocas Atoll (RN), and the St Peter and St Paul Archipelago (PE).
     # Fernando de Noronha was a separate territory from 1942-09-02 to 1989-01-01;
     # it also included the Penedos.
     #
    -# Amapa (AP), east Para (PA)
    -# East Para includes Belem, Maraba, Serra Norte, and Sao Felix do Xingu.
    -# The division between east and west Para is the river Xingu.
    +# Amapá (AP), east Pará (PA)
    +# East Pará includes Belém, Marabá, Serra Norte, and São Félix do Xingu.
    +# The division between east and west Pará is the river Xingu.
     # In the north a very small part from the river Javary (now Jari I guess,
    -# the border with Amapa) to the Amazon, then to the Xingu.
    +# the border with Amapá) to the Amazon, then to the Xingu.
     Zone America/Belem	-3:13:56 -	LMT	1914
     			-3:00	Brazil	BR%sT	1988 Sep 12
     			-3:00	-	BRT
     #
    -# west Para (PA)
    -# West Para includes Altamira, Oribidos, Prainha, Oriximina, and Santarem.
    +# west Pará (PA)
    +# West Pará includes Altamira, Óbidos, Prainha, Oriximiná, and Santarém.
     Zone America/Santarem	-3:38:48 -	LMT	1914
     			-4:00	Brazil	AM%sT	1988 Sep 12
    -			-4:00	-	AMT	2008 Jun 24 00:00
    +			-4:00	-	AMT	2008 Jun 24  0:00
     			-3:00	-	BRT
     #
    -# Maranhao (MA), Piaui (PI), Ceara (CE), Rio Grande do Norte (RN),
    -# Paraiba (PB)
    +# Maranhão (MA), Piauí (PI), Ceará (CE), Rio Grande do Norte (RN),
    +# Paraíba (PB)
     Zone America/Fortaleza	-2:34:00 -	LMT	1914
     			-3:00	Brazil	BR%sT	1990 Sep 17
     			-3:00	-	BRT	1999 Sep 30
    @@ -1125,11 +1063,11 @@ Zone America/Bahia	-2:34:04 -	LMT	1914
     			-3:00	Brazil	BR%sT	2012 Oct 21
     			-3:00	-	BRT
     #
    -# Goias (GO), Distrito Federal (DF), Minas Gerais (MG),
    -# Espirito Santo (ES), Rio de Janeiro (RJ), Sao Paulo (SP), Parana (PR),
    +# Goiás (GO), Distrito Federal (DF), Minas Gerais (MG),
    +# Espírito Santo (ES), Rio de Janeiro (RJ), São Paulo (SP), Paraná (PR),
     # Santa Catarina (SC), Rio Grande do Sul (RS)
     Zone America/Sao_Paulo	-3:06:28 -	LMT	1914
    -			-3:00	Brazil	BR%sT	1963 Oct 23 00:00
    +			-3:00	Brazil	BR%sT	1963 Oct 23  0:00
     			-3:00	1:00	BRST	1964
     			-3:00	Brazil	BR%sT
     #
    @@ -1143,7 +1081,7 @@ Zone America/Cuiaba	-3:44:20 -	LMT	1914
     			-4:00	-	AMT	2004 Oct  1
     			-4:00	Brazil	AM%sT
     #
    -# Rondonia (RO)
    +# Rondônia (RO)
     Zone America/Porto_Velho -4:15:36 -	LMT	1914
     			-4:00	Brazil	AM%sT	1988 Sep 12
     			-4:00	-	AMT
    @@ -1155,7 +1093,7 @@ Zone America/Boa_Vista	-4:02:40 -	LMT	1914
     			-4:00	Brazil	AM%sT	2000 Oct 15
     			-4:00	-	AMT
     #
    -# east Amazonas (AM): Boca do Acre, Jutai, Manaus, Floriano Peixoto
    +# east Amazonas (AM): Boca do Acre, Jutaí, Manaus, Floriano Peixoto
     # The great circle line from Tabatinga to Porto Acre divides
     # east from west Amazonas.
     Zone America/Manaus	-4:00:04 -	LMT	1914
    @@ -1165,19 +1103,19 @@ Zone America/Manaus	-4:00:04 -	LMT	1914
     			-4:00	-	AMT
     #
     # west Amazonas (AM): Atalaia do Norte, Boca do Maoco, Benjamin Constant,
    -#	Eirunepe, Envira, Ipixuna
    +#	Eirunepé, Envira, Ipixuna
     Zone America/Eirunepe	-4:39:28 -	LMT	1914
     			-5:00	Brazil	AC%sT	1988 Sep 12
     			-5:00	-	ACT	1993 Sep 28
     			-5:00	Brazil	AC%sT	1994 Sep 22
    -			-5:00	-	ACT	2008 Jun 24 00:00
    +			-5:00	-	ACT	2008 Jun 24  0:00
     			-4:00	-	AMT	2013 Nov 10
     			-5:00	-	ACT
     #
     # Acre (AC)
     Zone America/Rio_Branco	-4:31:12 -	LMT	1914
     			-5:00	Brazil	AC%sT	1988 Sep 12
    -			-5:00	-	ACT	2008 Jun 24 00:00
    +			-5:00	-	ACT	2008 Jun 24  0:00
     			-4:00	-	AMT	2013 Nov 10
     			-5:00	-	ACT
     
    @@ -1198,66 +1136,54 @@ Zone America/Rio_Branco	-4:31:12 -	LMT	1914
     # From Oscar van Vlijmen (2006-10-08):
     # http://www.horaoficial.cl/cambio.htm
     
    -# From Jesper Norgaard Welen (2006-10-08):
    +# From Jesper Nørgaard Welen (2006-10-08):
     # I think that there are some obvious mistakes in the suggested link
     # from Oscar van Vlijmen,... for instance entry 66 says that GMT-4
     # ended 1990-09-12 while entry 67 only begins GMT-3 at 1990-09-15
     # (they should have been 1990-09-15 and 1990-09-16 respectively), but
     # anyhow it clears up some doubts too.
     
    -# From Paul Eggert (2006-12-27):
    -# The following data for Chile and America/Santiago are from
    +# From Paul Eggert (2014-08-12):
    +# The following data entries for Chile and America/Santiago are from
     #  (2006-09-20), transcribed by
    -# Jesper Norgaard Welen.  The data for Pacific/Easter are from Shanks
    +# Jesper Nørgaard Welen.  The data entries for Pacific/Easter are from Shanks
     # & Pottenger, except with DST transitions after 1932 cloned from
    -# America/Santiago.  The pre-1980 Pacific/Easter data are dubious,
    +# America/Santiago.  The pre-1980 Pacific/Easter data entries are dubious,
     # but we have no other source.
     
    -# From German Poo-Caaman~o (2008-03-03):
    +# From Germán Poo-Caamaño (2008-03-03):
     # Due to drought, Chile extends Daylight Time in three weeks.  This
     # is one-time change (Saturday 3/29 at 24:00 for America/Santiago
     # and Saturday 3/29 at 22:00 for Pacific/Easter)
     # The Supreme Decree is located at
    -# 
     # http://www.shoa.cl/servicios/supremo316.pdf
    -# 
     # and the instructions for 2008 are located in:
    -# 
     # http://www.horaoficial.cl/cambio.htm
    -# .
     
    -# From Jose Miguel Garrido (2008-03-05):
    +# From José Miguel Garrido (2008-03-05):
     # ...
     # You could see the announces of the change on
    -# 
     # http://www.shoa.cl/noticias/2008/04hora/hora.htm
    -# .
     
     # From Angel Chiang (2010-03-04):
     # Subject: DST in Chile exceptionally extended to 3 April due to earthquake
    -# 
     # http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098
    -# 
     # (in Spanish, last paragraph).
     #
     # This is breaking news. There should be more information available later.
     
    -# From Arthur Daivd Olson (2010-03-06):
    +# From Arthur David Olson (2010-03-06):
     # Angel Chiang's message confirmed by Julio Pacheco; Julio provided a patch.
     
    -# From Glenn Eychaner (2011-03-02): [geychaner@mac.com]
    +# From Glenn Eychaner (2011-03-02):
     # It appears that the Chilean government has decided to postpone the
     # change from summer time to winter time again, by three weeks to April
     # 2nd:
    -# 
     # http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651
    -# 
     #
     # This is not yet reflected in the official "cambio de hora" site, but
     # probably will be soon:
    -# 
     # http://www.horaoficial.cl/cambio.htm
    -# 
     
     # From Arthur David Olson (2011-03-02):
     # The emol.com article mentions a water shortage as the cause of the
    @@ -1265,9 +1191,7 @@ Zone America/Rio_Branco	-4:31:12 -	LMT	1914
     
     # From Glenn Eychaner (2011-03-28):
     # The article:
    -# 
     # http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E}
    -# 
     #
     # In English:
     # Chile's clocks will go back an hour this year on the 7th of May instead
    @@ -1298,7 +1222,7 @@ Zone America/Rio_Branco	-4:31:12 -	LMT	1914
     # start date is 2013-09-08 00:00....
     # http://www.gob.cl/informa/2013/02/15/gobierno-anuncia-fechas-de-cambio-de-hora-para-el-ano-2013.htm
     
    -# From Jose Miguel Garrido (2014-02-19):
    +# From José Miguel Garrido (2014-02-19):
     # Today appeared in the Diario Oficial a decree amending the time change
     # dates to 2014.
     # DST End: last Saturday of April 2014 (Sun 27 Apr 2014 03:00 UTC)
    @@ -1352,7 +1276,7 @@ Rule	Chile	2012	max	-	Sep	Sun>=2	4:00u	1:00	S
     # (1996-09) says 1998-03-08.  Ignore these.
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Santiago	-4:42:46 -	LMT	1890
    -			-4:42:46 -	SMT	1910 	    # Santiago Mean Time
    +			-4:42:46 -	SMT	1910        # Santiago Mean Time
     			-5:00	-	CLT	1916 Jul  1 # Chile Time
     			-4:42:46 -	SMT	1918 Sep  1 # Santiago Mean Time
     			-4:00	-	CLT	1919 Jul  1 # Chile Time
    @@ -1361,16 +1285,16 @@ Zone America/Santiago	-4:42:46 -	LMT	1890
     			-4:00	Chile	CL%sT
     Zone Pacific/Easter	-7:17:44 -	LMT	1890
     			-7:17:28 -	EMT	1932 Sep    # Easter Mean Time
    -			-7:00	Chile	EAS%sT	1982 Mar 13 21:00 # Easter I Time
    +			-7:00	Chile	EAS%sT	1982 Mar 13 21:00 # Easter Time
     			-6:00	Chile	EAS%sT
     #
    -# Sala y Gomez Island is like Pacific/Easter.
    -# Other Chilean locations, including Juan Fernandez Is, San Ambrosio,
    -# San Felix, and Antarctic bases, are like America/Santiago.
    +# Salas y Gómez Island is uninhabited.
    +# Other Chilean locations, including Juan Fernández Is, Desventuradas Is,
    +# and Antarctic bases, are like America/Santiago.
     
     # Colombia
     
    -# Milne gives 4:56:16.4 for Bogota time in 1899; round to nearest.  He writes,
    +# Milne gives 4:56:16.4 for Bogotá time in 1899; round to nearest.  He writes,
     # "A variation of fifteen minutes in the public clocks of Bogota is not rare."
     
     # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    @@ -1378,37 +1302,37 @@ Rule	CO	1992	only	-	May	 3	0:00	1:00	S
     Rule	CO	1993	only	-	Apr	 4	0:00	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	America/Bogota	-4:56:16 -	LMT	1884 Mar 13
    -			-4:56:16 -	BMT	1914 Nov 23 # Bogota Mean Time
    +			-4:56:16 -	BMT	1914 Nov 23 # Bogotá Mean Time
     			-5:00	CO	CO%sT	# Colombia Time
     # Malpelo, Providencia, San Andres
     # no information; probably like America/Bogota
     
    -# Curacao
    +# Curaçao
     
    -# Milne gives 4:35:46.9 for Curacao mean time; round to nearest.
    +# Milne gives 4:35:46.9 for Curaçao mean time; round to nearest.
     #
     # From Paul Eggert (2006-03-22):
     # Shanks & Pottenger say that The Bottom and Philipsburg have been at
     # -4:00 since standard time was introduced on 1912-03-02; and that
     # Kralendijk and Rincon used Kralendijk Mean Time (-4:33:08) from
     # 1912-02-02 to 1965-01-01.  The former is dubious, since S&P also say
    -# Saba Island has been like Curacao.
    +# Saba Island has been like Curaçao.
     # This all predates our 1970 cutoff, though.
     #
    -# By July 2007 Curacao and St Maarten are planned to become
    +# By July 2007 Curaçao and St Maarten are planned to become
     # associated states within the Netherlands, much like Aruba;
     # Bonaire, Saba and St Eustatius would become directly part of the
     # Netherlands as Kingdom Islands.  This won't affect their time zones
     # though, as far as we know.
     #
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	America/Curacao	-4:35:47 -	LMT	1912 Feb 12	# Willemstad
    +Zone	America/Curacao	-4:35:47 -	LMT	1912 Feb 12 # Willemstad
     			-4:30	-	ANT	1965 # Netherlands Antilles Time
     			-4:00	-	AST
     
     # From Arthur David Olson (2011-06-15):
     # use links for places with new iso3166 codes.
    -# The name "Lower Prince's Quarter" is both longer than fourteen charaters
    +# The name "Lower Prince's Quarter" is both longer than fourteen characters
     # and contains an apostrophe; use "Lower_Princes" below.
     
     Link	America/Curacao	America/Lower_Princes	# Sint Maarten
    @@ -1416,7 +1340,7 @@ Link	America/Curacao	America/Kralendijk	# Caribbean Netherlands
     
     # Ecuador
     #
    -# Milne says the Sentral and South American Telegraph Company used -5:24:15.
    +# Milne says the Central and South American Telegraph Company used -5:24:15.
     #
     # From Paul Eggert (2007-03-04):
     # Apparently Ecuador had a failed experiment with DST in 1992.
    @@ -1427,10 +1351,10 @@ Link	America/Curacao	America/Kralendijk	# Caribbean Netherlands
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Guayaquil	-5:19:20 -	LMT	1890
     			-5:14:00 -	QMT	1931 # Quito Mean Time
    -			-5:00	-	ECT	     # Ecuador Time
    +			-5:00	-	ECT	# Ecuador Time
     Zone Pacific/Galapagos	-5:58:24 -	LMT	1931 # Puerto Baquerizo Moreno
     			-5:00	-	ECT	1986
    -			-6:00	-	GALT	     # Galapagos Time
    +			-6:00	-	GALT	# Galápagos Time
     
     # Falklands
     
    @@ -1439,7 +1363,7 @@ Zone Pacific/Galapagos	-5:58:24 -	LMT	1931 # Puerto Baquerizo Moreno
     # the IATA gives 1996-09-08.  Go with Shanks & Pottenger.
     
     # From Falkland Islands Government Office, London (2001-01-22)
    -# via Jesper Norgaard:
    +# via Jesper Nørgaard:
     # ... the clocks revert back to Local Mean Time at 2 am on Sunday 15
     # April 2001 and advance one hour to summer time at 2 am on Sunday 2
     # September.  It is anticipated that the clocks will revert back at 2
    @@ -1488,9 +1412,7 @@ Zone Pacific/Galapagos	-5:58:24 -	LMT	1931 # Puerto Baquerizo Moreno
     # daylight saving time.
     #
     # One source:
    -# 
     # http://www.falklandnews.com/public/story.cfm?get=5914&source=3
    -# 
     #
     # We have gotten this confirmed by a clerk of the legislative assembly:
     # Normally the clocks revert to Local Mean Time (UTC/GMT -4 hours) on the
    @@ -1531,10 +1453,10 @@ Rule	Falk	2001	2010	-	Apr	Sun>=15	2:00	0	-
     Rule	Falk	2001	2010	-	Sep	Sun>=1	2:00	1:00	S
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone Atlantic/Stanley	-3:51:24 -	LMT	1890
    -			-3:51:24 -	SMT	1912 Mar 12  # Stanley Mean Time
    -			-4:00	Falk	FK%sT	1983 May     # Falkland Is Time
    +			-3:51:24 -	SMT	1912 Mar 12 # Stanley Mean Time
    +			-4:00	Falk	FK%sT	1983 May    # Falkland Is Time
     			-3:00	Falk	FK%sT	1985 Sep 15
    -			-4:00	Falk	FK%sT	2010 Sep 5 02:00
    +			-4:00	Falk	FK%sT	2010 Sep  5  2:00
     			-3:00	-	FKST
     
     # French Guiana
    @@ -1545,7 +1467,7 @@ Zone America/Cayenne	-3:29:20 -	LMT	1911 Jul
     
     # Guyana
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone	America/Guyana	-3:52:40 -	LMT	1915 Mar	# Georgetown
    +Zone	America/Guyana	-3:52:40 -	LMT	1915 Mar    # Georgetown
     			-3:45	-	GBGT	1966 May 26 # Br Guiana Time
     			-3:45	-	GYT	1975 Jul 31 # Guyana Time
     			-3:00	-	GYT	1991
    @@ -1555,8 +1477,8 @@ Zone	America/Guyana	-3:52:40 -	LMT	1915 Mar	# Georgetown
     # Paraguay
     #
     # From Paul Eggert (2006-03-22):
    -# Shanks & Pottenger say that spring transitions are from 01:00 -> 02:00,
    -# and autumn transitions are from 00:00 -> 23:00.  Go with pre-1999
    +# Shanks & Pottenger say that spring transitions are 01:00 -> 02:00,
    +# and autumn transitions are 00:00 -> 23:00.  Go with pre-1999
     # editions of Shanks, and with the IATA, who say transitions occur at 00:00.
     #
     # From Waldemar Villamayor-Venialbo (2013-09-20):
    @@ -1582,9 +1504,8 @@ Rule	Para	1996	only	-	Mar	 1	0:00	0	-
     # (10-01).
     #
     # Translated by Gwillim Law (2001-02-27) from
    -# 
    -# Noticias, a daily paper in Asuncion, Paraguay (2000-10-01)
    -# :
    +# Noticias, a daily paper in Asunción, Paraguay (2000-10-01):
    +# http://www.diarionoticias.com.py/011000/nacional/naciona1.htm
     # Starting at 0:00 today, the clock will be set forward 60 minutes, in
     # fulfillment of Decree No. 7,273 of the Executive Power....  The time change
     # system has been operating for several years.  Formerly there was a separate
    @@ -1605,21 +1526,18 @@ Rule	Para	1998	2001	-	Mar	Sun>=1	0:00	0	-
     Rule	Para	2002	2004	-	Apr	Sun>=1	0:00	0	-
     Rule	Para	2002	2003	-	Sep	Sun>=1	0:00	1:00	S
     #
    -# From Jesper Norgaard Welen (2005-01-02):
    +# From Jesper Nørgaard Welen (2005-01-02):
     # There are several sources that claim that Paraguay made
     # a timezone rule change in autumn 2004.
     # From Steffen Thorsen (2005-01-05):
     # Decree 1,867 (2004-03-05)
    -# From Carlos Raul Perasso via Jesper Norgaard Welen (2006-10-13)
    -# 
    +# From Carlos Raúl Perasso via Jesper Nørgaard Welen (2006-10-13)
    +# http://www.presidencia.gov.py/decretos/D1867.pdf
     Rule	Para	2004	2009	-	Oct	Sun>=15	0:00	1:00	S
     Rule	Para	2005	2009	-	Mar	Sun>=8	0:00	0	-
    -# From Carlos Raul Perasso (2010-02-18):
    -# By decree number 3958 issued yesterday (
    -# 
    +# From Carlos Raúl Perasso (2010-02-18):
    +# By decree number 3958 issued yesterday
     # http://www.presidencia.gov.py/v1/wp-content/uploads/2010/02/decreto3958.pdf
    -# 
    -# )
     # Paraguay changes its DST schedule, postponing the March rule to April and
     # modifying the October date. The decree reads:
     # ...
    @@ -1635,25 +1553,25 @@ Rule	Para	2010	2012	-	Apr	Sun>=8	0:00	0	-
     # Paraguay will end DST on 2013-03-24 00:00....
     # http://www.ande.gov.py/interna.php?id=1075
     #
    -# From Carlos Raul Perasso (2013-03-15):
    +# From Carlos Raúl Perasso (2013-03-15):
     # The change in Paraguay is now final.  Decree number 10780
     # http://www.presidencia.gov.py/uploads/pdf/presidencia-3b86ff4b691c79d4f5927ca964922ec74772ce857c02ca054a52a37b49afc7fb.pdf
    -# From Carlos Raul Perasso (2014-02-28):
    +# From Carlos Raúl Perasso (2014-02-28):
     # Decree 1264 can be found at:
     # http://www.presidencia.gov.py/archivos/documentos/DECRETO1264_ey9r8zai.pdf
     Rule	Para	2013	max	-	Mar	Sun>=22	0:00	0	-
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Asuncion	-3:50:40 -	LMT	1890
    -			-3:50:40 -	AMT	1931 Oct 10 # Asuncion Mean Time
    -			-4:00	-	PYT	1972 Oct # Paraguay Time
    +			-3:50:40 -	AMT	1931 Oct 10 # Asunción Mean Time
    +			-4:00	-	PYT	1972 Oct    # Paraguay Time
     			-3:00	-	PYT	1974 Apr
     			-4:00	Para	PY%sT
     
     # Peru
     #
    -# 
    -# From Evelyn C. Leeper via Mark Brader (2003-10-26):
    +# From Evelyn C. Leeper via Mark Brader (2003-10-26)
    +# :
     # When we were in Peru in 1985-1986, they apparently switched over
     # sometime between December 29 and January 3 while we were on the Amazon.
     #
    @@ -1679,7 +1597,7 @@ Zone	America/Lima	-5:08:12 -	LMT	1890
     
     # South Georgia
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
    -Zone Atlantic/South_Georgia -2:26:08 -	LMT	1890		# Grytviken
    +Zone Atlantic/South_Georgia -2:26:08 -	LMT	1890 # Grytviken
     			-2:00	-	GST	# South Georgia Time
     
     # South Sandwich Is
    @@ -1689,9 +1607,9 @@ Zone Atlantic/South_Georgia -2:26:08 -	LMT	1890		# Grytviken
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Paramaribo	-3:40:40 -	LMT	1911
     			-3:40:52 -	PMT	1935     # Paramaribo Mean Time
    -			-3:40:36 -	PMT	1945 Oct # The capital moved?
    +			-3:40:36 -	PMT	1945 Oct    # The capital moved?
     			-3:30	-	NEGT	1975 Nov 20 # Dutch Guiana Time
    -			-3:30	-	SRT	1984 Oct # Suriname Time
    +			-3:30	-	SRT	1984 Oct    # Suriname Time
     			-3:00	-	SRT
     
     # Trinidad and Tobago
    @@ -1706,7 +1624,7 @@ Link America/Port_of_Spain America/Grenada
     Link America/Port_of_Spain America/Guadeloupe
     Link America/Port_of_Spain America/Marigot	# St Martin (French part)
     Link America/Port_of_Spain America/Montserrat
    -Link America/Port_of_Spain America/St_Barthelemy
    +Link America/Port_of_Spain America/St_Barthelemy # St Barthélemy
     Link America/Port_of_Spain America/St_Kitts	# St Kitts & Nevis
     Link America/Port_of_Spain America/St_Lucia
     Link America/Port_of_Spain America/St_Thomas	# Virgin Islands (US)
    @@ -1765,7 +1683,7 @@ Rule	Uruguay	1990	1991	-	Oct	Sun>=21	 0:00	1:00	S
     Rule	Uruguay	1992	only	-	Oct	18	 0:00	1:00	S
     Rule	Uruguay	1993	only	-	Feb	28	 0:00	0	-
     # From Eduardo Cota (2004-09-20):
    -# The uruguayan government has decreed a change in the local time....
    +# The Uruguayan government has decreed a change in the local time....
     # http://www.presidencia.gub.uy/decretos/2004091502.htm
     Rule	Uruguay	2004	only	-	Sep	19	 0:00	1:00	S
     # From Steffen Thorsen (2005-03-11):
    @@ -1779,14 +1697,14 @@ Rule	Uruguay	2005	only	-	Mar	27	 2:00	0	-
     # 02:00 local time, official time in Uruguay will be at GMT -2.
     Rule	Uruguay	2005	only	-	Oct	 9	 2:00	1:00	S
     Rule	Uruguay	2006	only	-	Mar	12	 2:00	0	-
    -# From Jesper Norgaard Welen (2006-09-06):
    +# From Jesper Nørgaard Welen (2006-09-06):
     # http://www.presidencia.gub.uy/_web/decretos/2006/09/CM%20210_08%2006%202006_00001.PDF
     Rule	Uruguay	2006	max	-	Oct	Sun>=1	 2:00	1:00	S
     Rule	Uruguay	2007	max	-	Mar	Sun>=8	 2:00	0	-
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone America/Montevideo	-3:44:44 -	LMT	1898 Jun 28
    -			-3:44:44 -	MMT	1920 May  1	# Montevideo MT
    -			-3:30	Uruguay	UY%sT	1942 Dec 14	# Uruguay Time
    +			-3:44:44 -	MMT	1920 May  1 # Montevideo MT
    +			-3:30	Uruguay	UY%sT	1942 Dec 14 # Uruguay Time
     			-3:00	Uruguay	UY%sT
     
     # Venezuela
    @@ -1794,14 +1712,14 @@ Zone America/Montevideo	-3:44:44 -	LMT	1898 Jun 28
     # From John Stainforth (2007-11-28):
     # ... the change for Venezuela originally expected for 2007-12-31 has
     # been brought forward to 2007-12-09.  The official announcement was
    -# published today in the "Gaceta Oficial de la Republica Bolivariana
    -# de Venezuela, numero 38.819" (official document for all laws or
    +# published today in the "Gaceta Oficial de la República Bolivariana
    +# de Venezuela, número 38.819" (official document for all laws or
     # resolution publication)
     # http://www.globovision.com/news.php?nid=72208
     
     # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
     Zone	America/Caracas	-4:27:44 -	LMT	1890
     			-4:27:40 -	CMT	1912 Feb 12 # Caracas Mean Time?
    -			-4:30	-	VET	1965	     # Venezuela Time
    -			-4:00	-	VET	2007 Dec  9 03:00
    +			-4:30	-	VET	1965        # Venezuela Time
    +			-4:00	-	VET	2007 Dec  9  3:00
     			-4:30	-	VET
    diff --git a/jdk/test/sun/util/calendar/zi/tzdata/systemv b/jdk/test/sun/util/calendar/zi/tzdata/systemv
    index f909f9c76db..c7b9a888e88 100644
    --- a/jdk/test/sun/util/calendar/zi/tzdata/systemv
    +++ b/jdk/test/sun/util/calendar/zi/tzdata/systemv
    @@ -21,7 +21,6 @@
     # or visit www.oracle.com if you need additional information or have any
     # questions.
     #
    -# 
     # This file is in the public domain, so clarified as of
     # 2009-05-17 by Arthur David Olson.
     
    diff --git a/jdk/test/sun/util/calendar/zi/tzdata/zone.tab b/jdk/test/sun/util/calendar/zi/tzdata/zone.tab
    index 7cec627fd95..45351ca8486 100644
    --- a/jdk/test/sun/util/calendar/zi/tzdata/zone.tab
    +++ b/jdk/test/sun/util/calendar/zi/tzdata/zone.tab
    @@ -21,39 +21,27 @@
     # or visit www.oracle.com if you need additional information or have any
     # questions.
     #
    -# TZ zone descriptions
    +# tz zone descriptions (deprecated version)
     #
     # This file is in the public domain, so clarified as of
     # 2009-05-17 by Arthur David Olson.
     #
    -# From Paul Eggert (2013-08-14):
    +# From Paul Eggert (2014-07-31):
    +# This file is intended as a backward-compatibility aid for older programs.
    +# New programs should use zone1970.tab.  This file is like zone1970.tab (see
    +# zone1970.tab's comments), but with the following additional restrictions:
     #
    -# This file contains a table where each row stands for an area that is
    -# the intersection of a region identified by a country code and of a
    -# zone where civil clocks have agreed since 1970.  The columns of the
    -# table are as follows:
    +# 1.  This file contains only ASCII characters.
    +# 2.  The first data column contains exactly one country code.
     #
    -# 1.  ISO 3166 2-character country code.  See the file 'iso3166.tab'.
    -# 2.  Latitude and longitude of the area's principal location
    -#     in ISO 6709 sign-degrees-minutes-seconds format,
    -#     either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
    -#     first latitude (+ is north), then longitude (+ is east).
    -# 3.  Zone name used in value of TZ environment variable.
    -#     Please see the 'Theory' file for how zone names are chosen.
    -#     If multiple zones overlap a country, each has a row in the
    -#     table, with column 1 being duplicated.
    -# 4.  Comments; present if and only if the country has multiple rows.
    -#
    -# Columns are separated by a single tab.
    -# The table is sorted first by country, then an order within the country that
    -# (1) makes some geographical sense, and
    -# (2) puts the most populous areas first, where that does not contradict (1).
    -#
    -# Lines beginning with '#' are comments.
    +# Because of (2), each row stands for an area that is the intersection
    +# of a region identified by a country code and of a zone where civil
    +# clocks have agreed since 1970; this is a narrower definition than
    +# that of zone1970.tab.
     #
     # This table is intended as an aid for users, to help them select time
    -# zone data appropriate for their practical needs.  It is not intended
    -# to take or endorse any position on legal or territorial claims.
    +# zone data entries appropriate for their practical needs.  It is not
    +# intended to take or endorse any position on legal or territorial claims.
     #
     #country-
     #code	coordinates	TZ			comments
    @@ -72,7 +60,7 @@ AQ	-6736+06253	Antarctica/Mawson	Mawson Station, Holme Bay
     AQ	-6835+07758	Antarctica/Davis	Davis Station, Vestfold Hills
     AQ	-6617+11031	Antarctica/Casey	Casey Station, Bailey Peninsula
     AQ	-7824+10654	Antarctica/Vostok	Vostok Station, Lake Vostok
    -AQ	-6640+14001	Antarctica/DumontDUrville	Dumont-d'Urville Station, Terre Adelie
    +AQ	-6640+14001	Antarctica/DumontDUrville	Dumont-d'Urville Station, Adelie Land
     AQ	-690022+0393524	Antarctica/Syowa	Syowa Station, E Ongul I
     AQ	-720041+0023206	Antarctica/Troll	Troll Station, Queen Maud Land
     AR	-3436-05827	America/Argentina/Buenos_Aires	Buenos Aires (BA, CF)
    @@ -151,7 +139,7 @@ CA	+4901-08816	America/Nipigon	Eastern Time - Ontario & Quebec - places that did
     CA	+4823-08915	America/Thunder_Bay	Eastern Time - Thunder Bay, Ontario
     CA	+6344-06828	America/Iqaluit	Eastern Time - east Nunavut - most locations
     CA	+6608-06544	America/Pangnirtung	Eastern Time - Pangnirtung, Nunavut
    -CA	+744144-0944945	America/Resolute	Central Standard Time - Resolute, Nunavut
    +CA	+744144-0944945	America/Resolute	Central Time - Resolute, Nunavut
     CA	+484531-0913718	America/Atikokan	Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
     CA	+624900-0920459	America/Rankin_Inlet	Central Time - central Nunavut
     CA	+4953-09709	America/Winnipeg	Central Time - Manitoba & west Ontario
    @@ -176,13 +164,10 @@ CH	+4723+00832	Europe/Zurich
     CI	+0519-00402	Africa/Abidjan
     CK	-2114-15946	Pacific/Rarotonga
     CL	-3327-07040	America/Santiago	most locations
    -CL	-2709-10926	Pacific/Easter	Easter Island & Sala y Gomez
    +CL	-2709-10926	Pacific/Easter	Easter Island
     CM	+0403+00942	Africa/Douala
    -CN	+3114+12128	Asia/Shanghai	east China - Beijing, Guangdong, Shanghai, etc.
    -CN	+4545+12641	Asia/Harbin	Heilongjiang (except Mohe), Jilin
    -CN	+2934+10635	Asia/Chongqing	central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.
    -CN	+4348+08735	Asia/Urumqi	most of Tibet & Xinjiang
    -CN	+3929+07559	Asia/Kashgar	west Tibet & Xinjiang
    +CN	+3114+12128	Asia/Shanghai	Beijing Time
    +CN	+4348+08735	Asia/Urumqi	Xinjiang Time
     CO	+0436-07405	America/Bogota
     CR	+0956-08405	America/Costa_Rica
     CU	+2308-08222	America/Havana
    @@ -364,24 +349,26 @@ RE	-2052+05528	Indian/Reunion
     RO	+4426+02606	Europe/Bucharest
     RS	+4450+02030	Europe/Belgrade
     RU	+5443+02030	Europe/Kaliningrad	Moscow-01 - Kaliningrad
    -RU	+5545+03735	Europe/Moscow	Moscow+00 - west Russia
    -RU	+4844+04425	Europe/Volgograd	Moscow+00 - Caspian Sea
    -RU	+5312+05009	Europe/Samara	Moscow+00 - Samara, Udmurtia
    +RU	+554521+0373704	Europe/Moscow	Moscow+00 - west Russia
     RU	+4457+03406	Europe/Simferopol	Moscow+00 - Crimea
    +RU	+4844+04425	Europe/Volgograd	Moscow+00 - Caspian Sea
    +RU	+5312+05009	Europe/Samara	Moscow+00 (Moscow+01 after 2014-10-26) - Samara, Udmurtia
     RU	+5651+06036	Asia/Yekaterinburg	Moscow+02 - Urals
     RU	+5500+07324	Asia/Omsk	Moscow+03 - west Siberia
     RU	+5502+08255	Asia/Novosibirsk	Moscow+03 - Novosibirsk
    -RU	+5345+08707	Asia/Novokuznetsk	Moscow+03 - Novokuznetsk
    +RU	+5345+08707	Asia/Novokuznetsk	Moscow+03 (Moscow+04 after 2014-10-26) - Kemerovo
     RU	+5601+09250	Asia/Krasnoyarsk	Moscow+04 - Yenisei River
     RU	+5216+10420	Asia/Irkutsk	Moscow+05 - Lake Baikal
    +RU	+5203+11328	Asia/Chita	Moscow+06 (Moscow+05 after 2014-10-26) - Zabaykalsky
     RU	+6200+12940	Asia/Yakutsk	Moscow+06 - Lena River
     RU	+623923+1353314	Asia/Khandyga	Moscow+06 - Tomponsky, Ust-Maysky
     RU	+4310+13156	Asia/Vladivostok	Moscow+07 - Amur River
     RU	+4658+14242	Asia/Sakhalin	Moscow+07 - Sakhalin Island
     RU	+643337+1431336	Asia/Ust-Nera	Moscow+07 - Oymyakonsky
    -RU	+5934+15048	Asia/Magadan	Moscow+08 - Magadan
    -RU	+5301+15839	Asia/Kamchatka	Moscow+08 - Kamchatka
    -RU	+6445+17729	Asia/Anadyr	Moscow+08 - Bering Sea
    +RU	+5934+15048	Asia/Magadan	Moscow+08 (Moscow+07 after 2014-10-26) - Magadan
    +RU	+6728+15343	Asia/Srednekolymsk	Moscow+08 - E Sakha, N Kuril Is
    +RU	+5301+15839	Asia/Kamchatka	Moscow+08 (Moscow+09 after 2014-10-26) - Kamchatka
    +RU	+6445+17729	Asia/Anadyr	Moscow+08 (Moscow+09 after 2014-10-26) - Bering Sea
     RW	-0157+03004	Africa/Kigali
     SA	+2438+04643	Asia/Riyadh
     SB	-0932+16012	Pacific/Guadalcanal
    @@ -448,13 +435,13 @@ US	+394421-1045903	America/Denver	Mountain Time
     US	+433649-1161209	America/Boise	Mountain Time - south Idaho & east Oregon
     US	+332654-1120424	America/Phoenix	Mountain Standard Time - Arizona (except Navajo)
     US	+340308-1181434	America/Los_Angeles	Pacific Time
    +US	+550737-1313435	America/Metlakatla	Pacific Standard Time - Annette Island, Alaska
     US	+611305-1495401	America/Anchorage	Alaska Time
     US	+581807-1342511	America/Juneau	Alaska Time - Alaska panhandle
     US	+571035-1351807	America/Sitka	Alaska Time - southeast Alaska panhandle
     US	+593249-1394338	America/Yakutat	Alaska Time - Alaska panhandle neck
     US	+643004-1652423	America/Nome	Alaska Time - west Alaska
     US	+515248-1763929	America/Adak	Aleutian Islands
    -US	+550737-1313435	America/Metlakatla	Metlakatla Time - Annette Island
     US	+211825-1575130	Pacific/Honolulu	Hawaii
     UY	-3453-05611	America/Montevideo
     UZ	+3940+06648	Asia/Samarkand	west Uzbekistan
    diff --git a/jdk/test/sun/util/locale/provider/Bug8038436.java b/jdk/test/sun/util/locale/provider/Bug8038436.java
    new file mode 100644
    index 00000000000..d224190c995
    --- /dev/null
    +++ b/jdk/test/sun/util/locale/provider/Bug8038436.java
    @@ -0,0 +1,218 @@
    +/*
    + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
    + * 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.
    + *
    + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    + * or visit www.oracle.com if you need additional information or have any
    + * questions.
    + */
    +
    +/*
    + * @test
    + * @bug 8038436
    + * @summary Test for changes in 8038436
    + * @compile -XDignore.symbol.file Bug8038436.java
    + * @run main/othervm Bug8038436 -Djava.ext.dirs=foo security
    + * @run main/othervm Bug8038436 -Djava.locale.providers=JRE availlocs
    + */
    +
    +import java.security.*;
    +import java.text.*;
    +import java.util.*;
    +import java.util.stream.*;
    +import sun.util.locale.provider.*;
    +
    +public class Bug8038436 {
    +    public static void main(String[] args) {
    +        switch (args[1]) {
    +        case "security":
    +            securityTests();
    +            break;
    +        case "availlocs":
    +            availableLocalesTests();
    +            break;
    +        default:
    +            throw new RuntimeException("no test was specified.");
    +        }
    +    }
    +
    +    private static void securityTests() {
    +        Policy.setPolicy(new MyPolicy());
    +        System.setSecurityManager(new SecurityManager());
    +
    +        /*
    +         * Test for AccessClassInPackage security exception. Confirms that
    +         * exeption won't be thrown if an application sets a Permission that
    +         * does not allow any RuntimePermission, on loading LocaleDataMetaInfo
    +         * from jdk.localedata module.
    +         */
    +        System.out.println(new Formatter(Locale.JAPAN).format("%1$tB %1$te, %1$tY",
    +                           new GregorianCalendar()));
    +
    +        /*
    +         * Check only English/ROOT locales are returned if the jdk.localedata
    +         * module is not installed (implied by "java.ext.dirs" set to "foo").
    +         */
    +        if (Arrays.asList(Locale.getAvailableLocales())
    +                .stream()
    +                .anyMatch(l -> l != Locale.ROOT && l.getLanguage() != "en")) {
    +            throw new RuntimeException("non English locale(s) included in available locales");
    +        }
    +    }
    +
    +
    +    static class MyPolicy extends Policy {
    +        final PermissionCollection perms = new Permissions();
    +
    +        MyPolicy() {
    +            // allows no RuntimePermission
    +        }
    +
    +        public PermissionCollection getPermissions(ProtectionDomain domain) {
    +            return perms;
    +        }
    +
    +        public PermissionCollection getPermissions(CodeSource codesource) {
    +            return perms;
    +        }
    +
    +        public boolean implies(ProtectionDomain domain, Permission perm) {
    +            return perms.implies(perm);
    +        }
    +    }
    +
    +    static final String[] bipLocs = ("ar, ar-JO, ar-LB, ar-SY, be, be-BY, bg, " +
    +        "bg-BG, ca, ca-ES, cs, cs-CZ, da, da-DK, de, de-AT, de-CH, de-DE, " +
    +        "de-LU, el, el-CY, el-GR, en, en-AU, en-CA, en-GB, en-IE, en-IN, " +
    +        "en-MT, en-NZ, en-PH, en-SG, en-US, en-ZA, es, es-AR, es-BO, es-CL, " +
    +        "es-CO, es-CR, es-DO, es-EC, es-ES, es-GT, es-HN, es-MX, es-NI, " +
    +        "es-PA, es-PE, es-PR, es-PY, es-SV, es-US, es-UY, es-VE, et, et-EE, " +
    +        "fi, fi-FI, fr, fr-BE, fr-CA, fr-CH, fr-FR, ga, ga-IE, he, he-IL, " +
    +        "hi-IN, hr, hr-HR, hu, hu-HU, id, id-ID, is, is-IS, it, it-CH, it-IT, " +
    +        "ja, ja-JP, ko, ko-KR, lt, lt-LT, lv, lv-LV, mk, mk-MK, ms, ms-MY, mt, " +
    +        "mt-MT, nl, nl-BE, nl-NL, no, no-NO, no-NO, pl, pl-PL, pt, pt-BR, " +
    +        "pt-PT, ro, ro-RO, ru, ru-RU, sk, sk-SK, sl, sl-SI, sq, sq-AL, sr, " +
    +        "sr-BA, sr-CS, sr-Latn, sr-Latn-ME, sr-ME, sr-RS, sv, sv-SE, th, th-TH, " +
    +        "tr, tr-TR, uk, uk-UA, und, vi, vi-VN, zh, zh-CN, zh-HK, zh-Hans-CN, " +
    +        "zh-Hans-SG, zh-Hant-HK, zh-Hant-TW, zh-SG, zh-TW, ").split(",\\s*");
    +    static final String[] dfpLocs = bipLocs;
    +    static final String[] datefspLocs = bipLocs;
    +    static final String[] decimalfspLocs = bipLocs;
    +    static final String[] calnpLocs = bipLocs;
    +    static final String[] cpLocs = ("ar, be, bg, ca, cs, da, el, es, et, fi, " +
    +        "fr, he, hi, hr, hu, is, ja, ko, lt, lv, mk, no, pl, ro, ru, sk, sl, " +
    +        "sq, sr, sr-Latn, sv, th, tr, uk, und, vi, zh, zh-HK, zh-Hant-HK, " +
    +        "zh-Hant-TW, zh-TW, ").split(",\\s*");
    +    static final String[] nfpLocs = ("ar, ar-AE, ar-BH, ar-DZ, ar-EG, ar-IQ, " +
    +        "ar-JO, ar-KW, ar-LB, ar-LY, ar-MA, ar-OM, ar-QA, ar-SA, ar-SD, ar-SY, " +
    +        "ar-TN, ar-YE, be, be-BY, bg, bg-BG, ca, ca-ES, cs, cs-CZ, da, da-DK, " +
    +        "de, de-AT, de-CH, de-DE, de-GR, de-LU, el, el-CY, el-GR, en, en-AU, " +
    +        "en-CA, en-GB, en-IE, en-IN, en-MT, en-NZ, en-PH, en-SG, en-US, en-ZA, " +
    +        "es, es-AR, es-BO, es-CL, es-CO, es-CR, es-CU, es-DO, es-EC, es-ES, " +
    +        "es-GT, es-HN, es-MX, es-NI, es-PA, es-PE, es-PR, es-PY, es-SV, es-US, " +
    +        "es-UY, es-VE, et, et-EE, fi, fi-FI, fr, fr-BE, fr-CA, fr-CH, fr-FR, " +
    +        "fr-LU, ga, ga-IE, he, he-IL, hi, hi-IN, hr, hr-HR, hu, hu-HU, id, " +
    +        "id-ID, is, is-IS, it, it-CH, it-IT, ja, ja-JP, " +
    +        "ja-JP-u-ca-japanese-x-lvariant-JP, ko, ko-KR, lt, lt-LT, lv, lv-LV, " +
    +        "mk, mk-MK, ms, ms-MY, mt, mt-MT, nb-NO, nl, nl-BE, nl-NL, nn-NO, " +
    +        "nn-NO, no, no-NO, pl, pl-PL, pt, pt-BR, pt-PT, ro, ro-RO, ru, ru-RU, " +
    +        "sk, sk-SK, sl, sl-SI, sq, sq-AL, sr, sr-BA, sr-CS, sr-Latn, " +
    +        "sr-Latn-BA, sr-Latn-ME, sr-Latn-RS, sr-ME, sr-RS, sv, sv-SE, th, " +
    +        "th-TH, th-TH-u-nu-thai-x-lvariant-TH, tr, tr-TR, uk, uk-UA, und, vi, " +
    +        "vi-VN, zh, zh-CN, zh-HK, zh-Hans-CN, zh-Hans-SG, zh-Hant-HK, " +
    +        "zh-Hant-TW, zh-SG, zh-TW, ").split(",\\s*");
    +    static final String[] currencynpLocs = ("ar-AE, ar-BH, ar-DZ, ar-EG, ar-IQ, " +
    +        "ar-JO, ar-KW, ar-LB, ar-LY, ar-MA, ar-OM, ar-QA, ar-SA, ar-SD, ar-SY, " +
    +        "ar-TN, ar-YE, be-BY, bg-BG, ca-ES, cs-CZ, da-DK, de, de-AT, de-CH, " +
    +        "de-DE, de-GR, de-LU, el-CY, el-GR, en-AU, en-CA, en-GB, en-IE, en-IN, " +
    +        "en-MT, en-NZ, en-PH, en-SG, en-US, en-ZA, es, es-AR, es-BO, es-CL, " +
    +        "es-CO, es-CR, es-CU, es-DO, es-EC, es-ES, es-GT, es-HN, es-MX, es-NI, " +
    +        "es-PA, es-PE, es-PR, es-PY, es-SV, es-US, es-UY, es-VE, et-EE, fi-FI, " +
    +        "fr, fr-BE, fr-CA, fr-CH, fr-FR, fr-LU, ga-IE, he-IL, hi-IN, hr-HR, " +
    +        "hu-HU, id-ID, is-IS, it, it-CH, it-IT, ja, ja-JP, ko, ko-KR, lt-LT, " +
    +        "lv-LV, mk-MK, ms-MY, mt-MT, nl-BE, nl-NL, no-NO, pl-PL, pt, pt-BR, " +
    +        "pt-PT, ro-RO, ru-RU, sk-SK, sl-SI, sq-AL, sr-BA, sr-CS, sr-Latn-BA, " +
    +        "sr-Latn-ME, sr-Latn-RS, sr-ME, sr-RS, sv, sv-SE, th-TH, tr-TR, uk-UA, " +
    +        "und, vi-VN, zh-CN, zh-HK, zh-Hans-CN, zh-Hans-SG, zh-Hant-HK, " +
    +        "zh-Hant-TW, zh-SG, zh-TW, ").split(",\\s*");
    +    static final String[] lnpLocs = ("ar, be, bg, ca, cs, da, de, el, el-CY, " +
    +        "en, en-MT, en-PH, en-SG, es, es-US, et, fi, fr, ga, he, hi, hr, hu, " +
    +        "id, is, it, ja, ko, lt, lv, mk, ms, mt, nl, no, no-NO, pl, pt, pt-BR, " +
    +        "pt-PT, ro, ru, sk, sl, sq, sr, sr-Latn, sv, th, tr, uk, und, vi, zh, " +
    +        "zh-HK, zh-Hans-SG, zh-Hant-HK, zh-Hant-TW, zh-SG, zh-TW, ").split(",\\s*");
    +    static final String[] tznpLocs = ("de, en, en-CA, en-GB, en-IE, es, fr, hi, " +
    +        "it, ja, ko, pt-BR, sv, und, zh-CN, zh-HK, zh-Hans-CN, zh-Hant-HK, " +
    +        "zh-Hant-TW, zh-TW, ").split(",\\s*");
    +    static final String[] caldpLocs = ("ar, be, bg, ca, cs, da, de, el, el-CY, " +
    +        "en, en-GB, en-IE, en-MT, es, es-ES, es-US, et, fi, fr, fr-CA, he, hi, " +
    +        "hr, hu, id-ID, is, it, ja, ko, lt, lv, mk, ms-MY, mt, mt-MT, nl, no, " +
    +        "pl, pt, pt-BR, pt-PT, ro, ru, sk, sl, sq, sr, sr-Latn-BA, sr-Latn-ME, " +
    +        "sr-Latn-RS, sv, th, tr, uk, und, vi, zh, ").split(",\\s*");
    +    static final String[] calpLocs = caldpLocs;
    +
    +    /*
    +     * Validate whether JRE's *Providers return supported locales list based on
    +     * their actual resource bundle exsistence. The above golden data
    +     * are manually extracted, so they need to be updated if new locale
    +     * data resource bundle were added.
    +     */
    +    private static void availableLocalesTests() {
    +        LocaleProviderAdapter jre = LocaleProviderAdapter.forJRE();
    +
    +        checkAvailableLocales("BreakIteratorProvider",
    +            jre.getBreakIteratorProvider().getAvailableLocales(), bipLocs);
    +        checkAvailableLocales("CollatorProvider",
    +            jre.getCollatorProvider().getAvailableLocales(), cpLocs);
    +        checkAvailableLocales("DateFormatProvider",
    +            jre.getDateFormatProvider().getAvailableLocales(), dfpLocs);
    +        checkAvailableLocales("DateFormatSymbolsProvider",
    +            jre.getDateFormatSymbolsProvider().getAvailableLocales(), datefspLocs);
    +        checkAvailableLocales("DecimalFormatSymbolsProvider",
    +            jre.getDecimalFormatSymbolsProvider().getAvailableLocales(), decimalfspLocs);
    +        checkAvailableLocales("NumberFormatProvider",
    +            jre.getNumberFormatProvider().getAvailableLocales(), nfpLocs);
    +        checkAvailableLocales("CurrencyNameProvider",
    +            jre.getCurrencyNameProvider().getAvailableLocales(), currencynpLocs);
    +        checkAvailableLocales("LocaleNameProvider",
    +            jre.getLocaleNameProvider().getAvailableLocales(), lnpLocs);
    +        checkAvailableLocales("TimeZoneNameProvider",
    +            jre.getTimeZoneNameProvider().getAvailableLocales(), tznpLocs);
    +        checkAvailableLocales("CalendarDataProvider",
    +            jre.getCalendarDataProvider().getAvailableLocales(), caldpLocs);
    +        checkAvailableLocales("CalendarNameProvider",
    +            jre.getCalendarNameProvider().getAvailableLocales(), calnpLocs);
    +        checkAvailableLocales("CalendarProvider",
    +            jre.getCalendarProvider().getAvailableLocales(), calpLocs);
    +    }
    +
    +    private static void checkAvailableLocales(String testName, Locale[] got, String[] expected) {
    +        System.out.println("Testing available locales for " + testName);
    +        List gotList = Arrays.asList(got).stream()
    +            .map(Locale::toLanguageTag)
    +            .sorted()
    +            .map(Locale::forLanguageTag)
    +            .collect(Collectors.toList());
    +        List expectedList = Arrays.asList(expected).stream()
    +            .map(Locale::forLanguageTag)
    +            .collect(Collectors.toList());
    +
    +        if (!gotList.equals(expectedList)) {
    +            throw new RuntimeException("\n" + gotList.toString() + "\n is not equal to \n" +
    +                                       expectedList.toString());
    +        }
    +    }
    +}
    diff --git a/jdk/test/sun/util/resources/TimeZone/Bug6317929.java b/jdk/test/sun/util/resources/TimeZone/Bug6317929.java
    index 4b047c5e4e1..1c59896f2a9 100644
    --- a/jdk/test/sun/util/resources/TimeZone/Bug6317929.java
    +++ b/jdk/test/sun/util/resources/TimeZone/Bug6317929.java
    @@ -122,11 +122,11 @@ public class Bug6317929 {
             TimeZone Currie = TimeZone.getTimeZone("Australia/Currie");
             tzLocale = locales2Test[0];
             if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals
    -           ("Eastern Standard Time (New South Wales)"))
    +           ("Australian Eastern Standard Time (New South Wales)"))
                 throw new RuntimeException("\n" + tzLocale + ": LONG, " +
                                            "non-daylight saving name for " +
                                            "Australia/Currie should be " +
    -                                       "\"Eastern Standard Time " +
    +                                       "\"Australian Eastern Standard Time " +
                                            "(New South Wales)\"");
             tzLocale = locales2Test[1];
             if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals