--- a/make/CompileToolsJdk.gmk Thu Jul 25 17:27:53 2019 -0400
+++ b/make/CompileToolsJdk.gmk Fri Jul 26 19:11:34 2019 -0400
@@ -41,6 +41,7 @@
BUILD_TOOLS_SRC_DIRS += \
$(TOPDIR)/make/jdk/src/classes \
$(BUILDTOOLS_OUTPUTDIR)/interim_cldrconverter_classes \
+ $(BUILDTOOLS_OUTPUTDIR)/interim_tzdb_classes \
#
$(eval $(call SetupJavaCompilation,BUILD_TOOLS_JDK, \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/make/CopyInterimTZDB.gmk Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,50 @@
+#
+# Copyright (c) 2019, 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.
+#
+
+default: all
+
+include $(SPEC)
+include MakeBase.gmk
+
+##########################################################################################
+
+### TZDB tool needs files from java.time.zone package
+
+define tzdb_copyfiles
+ $(call MakeTargetDir)
+ $(RM) '$@'
+ $(SED) -e "s/package java.time.zone/package build.tools.tzdb/" \
+ < $(<) > $@
+endef
+
+$(eval $(call SetupCopyFiles,COPY_INTERIM_TZDB, \
+ SRC := $(TOPDIR)/src/java.base/share/classes/java/time/zone, \
+ DEST := $(BUILDTOOLS_OUTPUTDIR)/interim_tzdb_classes/build/tools/tzdb, \
+ FILES := ZoneRules.java ZoneOffsetTransition.java ZoneOffsetTransitionRule.java Ser.java, \
+ MACRO := tzdb_copyfiles))
+
+##########################################################################################
+
+all: $(COPY_INTERIM_TZDB)
--- a/make/Main.gmk Thu Jul 25 17:27:53 2019 -0400
+++ b/make/Main.gmk Fri Jul 26 19:11:34 2019 -0400
@@ -77,6 +77,10 @@
interim-cldrconverter:
+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CopyInterimCLDRConverter.gmk)
+
+interim-tzdb:
+ +($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CopyInterimTZDB.gmk)
+
buildtools-jdk:
+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileToolsJdk.gmk)
@@ -88,7 +92,7 @@
+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileToolsHotspot.gmk)
ALL_TARGETS += buildtools-langtools interim-langtools \
- interim-rmic interim-cldrconverter buildtools-jdk buildtools-modules \
+ interim-rmic interim-cldrconverter interim-tzdb buildtools-jdk buildtools-modules \
buildtools-hotspot
################################################################################
@@ -648,7 +652,7 @@
interim-langtools: $(INTERIM_LANGTOOLS_GENSRC_TARGETS)
- buildtools-jdk: interim-langtools interim-cldrconverter
+ buildtools-jdk: interim-langtools interim-cldrconverter interim-tzdb
buildtools-hotspot: interim-langtools
--- a/make/data/tzdata/africa Thu Jul 25 17:27:53 2019 -0400
+++ b/make/data/tzdata/africa Fri Jul 26 19:11:34 2019 -0400
@@ -941,7 +941,7 @@
Rule Morocco 2012 only - Sep 30 3:00 0 -
Rule Morocco 2013 only - Jul 7 3:00 0 -
Rule Morocco 2013 only - Aug 10 2:00 1:00 -
-Rule Morocco 2013 2017 - Oct lastSun 3:00 0 -
+Rule Morocco 2013 2018 - Oct lastSun 3:00 0 -
Rule Morocco 2014 2018 - Mar lastSun 2:00 1:00 -
Rule Morocco 2014 only - Jun 28 3:00 0 -
Rule Morocco 2014 only - Aug 2 2:00 1:00 -
@@ -953,53 +953,53 @@
Rule Morocco 2017 only - Jul 2 2:00 1:00 -
Rule Morocco 2018 only - May 13 3:00 0 -
Rule Morocco 2018 only - Jun 17 2:00 1:00 -
-Rule Morocco 2019 only - May 5 3:00 0 -
-Rule Morocco 2019 only - Jun 9 2:00 1:00 -
-Rule Morocco 2020 only - Apr 19 3:00 0 -
-Rule Morocco 2020 only - May 24 2:00 1:00 -
-Rule Morocco 2021 only - Apr 11 3:00 0 -
-Rule Morocco 2021 only - May 16 2:00 1:00 -
-Rule Morocco 2022 only - Mar 27 3:00 0 -
-Rule Morocco 2022 only - May 8 2:00 1:00 -
-Rule Morocco 2023 only - Mar 19 3:00 0 -
-Rule Morocco 2023 only - Apr 23 2:00 1:00 -
-Rule Morocco 2024 only - Mar 10 3:00 0 -
-Rule Morocco 2024 only - Apr 14 2:00 1:00 -
-Rule Morocco 2025 only - Feb 23 3:00 0 -
-Rule Morocco 2025 only - Apr 6 2:00 1:00 -
-Rule Morocco 2026 only - Feb 15 3:00 0 -
-Rule Morocco 2026 only - Mar 22 2:00 1:00 -
-Rule Morocco 2027 only - Feb 7 3:00 0 -
-Rule Morocco 2027 only - Mar 14 2:00 1:00 -
-Rule Morocco 2028 only - Jan 23 3:00 0 -
-Rule Morocco 2028 only - Feb 27 2:00 1:00 -
-Rule Morocco 2029 only - Jan 14 3:00 0 -
-Rule Morocco 2029 only - Feb 18 2:00 1:00 -
-Rule Morocco 2029 only - Dec 30 3:00 0 -
-Rule Morocco 2030 only - Feb 10 2:00 1:00 -
-Rule Morocco 2030 only - Dec 22 3:00 0 -
-Rule Morocco 2031 only - Jan 26 2:00 1:00 -
-Rule Morocco 2031 only - Dec 14 3:00 0 -
-Rule Morocco 2032 only - Jan 18 2:00 1:00 -
-Rule Morocco 2032 only - Nov 28 3:00 0 -
-Rule Morocco 2033 only - Jan 9 2:00 1:00 -
-Rule Morocco 2033 only - Nov 20 3:00 0 -
-Rule Morocco 2033 only - Dec 25 2:00 1:00 -
-Rule Morocco 2034 only - Nov 5 3:00 0 -
-Rule Morocco 2034 only - Dec 17 2:00 1:00 -
-Rule Morocco 2035 only - Oct 28 3:00 0 -
-Rule Morocco 2035 only - Dec 2 2:00 1:00 -
-Rule Morocco 2036 only - Oct 19 3:00 0 -
-Rule Morocco 2036 only - Nov 23 2:00 1:00 -
-Rule Morocco 2037 only - Oct 4 3:00 0 -
-Rule Morocco 2037 only - Nov 15 2:00 1:00 -
+Rule Morocco 2019 only - May 5 3:00 -1:00 -
+Rule Morocco 2019 only - Jun 9 2:00 0 -
+Rule Morocco 2020 only - Apr 19 3:00 -1:00 -
+Rule Morocco 2020 only - May 24 2:00 0 -
+Rule Morocco 2021 only - Apr 11 3:00 -1:00 -
+Rule Morocco 2021 only - May 16 2:00 0 -
+Rule Morocco 2022 only - Mar 27 3:00 -1:00 -
+Rule Morocco 2022 only - May 8 2:00 0 -
+Rule Morocco 2023 only - Mar 19 3:00 -1:00 -
+Rule Morocco 2023 only - Apr 23 2:00 0 -
+Rule Morocco 2024 only - Mar 10 3:00 -1:00 -
+Rule Morocco 2024 only - Apr 14 2:00 0 -
+Rule Morocco 2025 only - Feb 23 3:00 -1:00 -
+Rule Morocco 2025 only - Apr 6 2:00 0 -
+Rule Morocco 2026 only - Feb 15 3:00 -1:00 -
+Rule Morocco 2026 only - Mar 22 2:00 0 -
+Rule Morocco 2027 only - Feb 7 3:00 -1:00 -
+Rule Morocco 2027 only - Mar 14 2:00 0 -
+Rule Morocco 2028 only - Jan 23 3:00 -1:00 -
+Rule Morocco 2028 only - Feb 27 2:00 0 -
+Rule Morocco 2029 only - Jan 14 3:00 -1:00 -
+Rule Morocco 2029 only - Feb 18 2:00 0 -
+Rule Morocco 2029 only - Dec 30 3:00 -1:00 -
+Rule Morocco 2030 only - Feb 10 2:00 0 -
+Rule Morocco 2030 only - Dec 22 3:00 -1:00 -
+Rule Morocco 2031 only - Jan 26 2:00 0 -
+Rule Morocco 2031 only - Dec 14 3:00 -1:00 -
+Rule Morocco 2032 only - Jan 18 2:00 0 -
+Rule Morocco 2032 only - Nov 28 3:00 -1:00 -
+Rule Morocco 2033 only - Jan 9 2:00 0 -
+Rule Morocco 2033 only - Nov 20 3:00 -1:00 -
+Rule Morocco 2033 only - Dec 25 2:00 0 -
+Rule Morocco 2034 only - Nov 5 3:00 -1:00 -
+Rule Morocco 2034 only - Dec 17 2:00 0 -
+Rule Morocco 2035 only - Oct 28 3:00 -1:00 -
+Rule Morocco 2035 only - Dec 2 2:00 0 -
+Rule Morocco 2036 only - Oct 19 3:00 -1:00 -
+Rule Morocco 2036 only - Nov 23 2:00 0 -
+Rule Morocco 2037 only - Oct 4 3:00 -1:00 -
+Rule Morocco 2037 only - Nov 15 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
0:00 Morocco +00/+01 1984 Mar 16
1:00 - +01 1986
0:00 Morocco +00/+01 2018 Oct 28 3:00
- 0:00 Morocco +00/+01
+ 1:00 Morocco +01/+00
# Western Sahara
#
@@ -1015,7 +1015,7 @@
Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan # El AaiĂșn
-1:00 - -01 1976 Apr 14
0:00 Morocco +00/+01 2018 Oct 28 3:00
- 0:00 Morocco +00/+01
+ 1:00 Morocco +01/+00
# Mozambique
#
@@ -1087,13 +1087,13 @@
# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S
# Vanguard section, for zic and other parsers that support negative DST.
-#Rule Namibia 1994 only - Mar 21 0:00 -1:00 WAT
-#Rule Namibia 1994 2017 - Sep Sun>=1 2:00 0 CAT
-#Rule Namibia 1995 2017 - Apr Sun>=1 2:00 -1:00 WAT
+Rule Namibia 1994 only - Mar 21 0:00 -1:00 WAT
+Rule Namibia 1994 2017 - Sep Sun>=1 2:00 0 CAT
+Rule Namibia 1995 2017 - Apr Sun>=1 2:00 -1:00 WAT
# Rearguard section, for parsers that do not support negative DST.
-Rule Namibia 1994 only - Mar 21 0:00 0 WAT
-Rule Namibia 1994 2017 - Sep Sun>=1 2:00 1:00 CAT
-Rule Namibia 1995 2017 - Apr Sun>=1 2:00 0 WAT
+#Rule Namibia 1994 only - Mar 21 0:00 0 WAT
+#Rule Namibia 1994 2017 - Sep Sun>=1 2:00 1:00 CAT
+#Rule Namibia 1995 2017 - Apr Sun>=1 2:00 0 WAT
# End of rearguard section.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1103,14 +1103,14 @@
2:00 1:00 SAST 1943 Mar 21 2:00
2:00 - SAST 1990 Mar 21 # independence
# Vanguard section, for zic and other parsers that support negative DST.
-# 2:00 Namibia %s
+ 2:00 Namibia %s
# Rearguard section, for parsers that do not support negative DST.
- 2:00 - CAT 1994 Mar 21 0:00
+# 2:00 - CAT 1994 Mar 21 0:00
# From Paul Eggert (2017-04-07):
# The official date of the 2017 rule change was 2017-10-24. See:
# http://www.lac.org.na/laws/annoSTAT/Namibian%20Time%20Act%209%20of%202017.pdf
- 1:00 Namibia %s 2017 Oct 24
- 2:00 - CAT
+# 1:00 Namibia %s 2017 Oct 24
+# 2:00 - CAT
# End of rearguard section.
# Niger
--- a/make/data/tzdata/asia Thu Jul 25 17:27:53 2019 -0400
+++ b/make/data/tzdata/asia Fri Jul 26 19:11:34 2019 -0400
@@ -1881,7 +1881,7 @@
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Japan 1948 only - May Sat>=1 24:00 1:00 D
-Rule Japan 1948 1951 - Sep Sun>=9 1:00 0 S
+Rule Japan 1948 1951 - Sep Sat>=8 25:00 0 S
Rule Japan 1949 only - Apr Sat>=1 24:00 1:00 D
Rule Japan 1950 1951 - May Sat>=1 24:00 1:00 D
--- a/make/data/tzdata/europe Thu Jul 25 17:27:53 2019 -0400
+++ b/make/data/tzdata/europe Fri Jul 26 19:11:34 2019 -0400
@@ -553,13 +553,13 @@
# summer and negative daylight saving time in winter. It is for when
# negative SAVE values are used.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-#Rule Eire 1971 only - Oct 31 2:00u -1:00 -
-#Rule Eire 1972 1980 - Mar Sun>=16 2:00u 0 -
-#Rule Eire 1972 1980 - Oct Sun>=23 2:00u -1:00 -
-#Rule Eire 1981 max - Mar lastSun 1:00u 0 -
-#Rule Eire 1981 1989 - Oct Sun>=23 1:00u -1:00 -
-#Rule Eire 1990 1995 - Oct Sun>=22 1:00u -1:00 -
-#Rule Eire 1996 max - Oct lastSun 1:00u -1:00 -
+Rule Eire 1971 only - Oct 31 2:00u -1:00 -
+Rule Eire 1972 1980 - Mar Sun>=16 2:00u 0 -
+Rule Eire 1972 1980 - Oct Sun>=23 2:00u -1:00 -
+Rule Eire 1981 max - Mar lastSun 1:00u 0 -
+Rule Eire 1981 1989 - Oct Sun>=23 1:00u -1:00 -
+Rule Eire 1990 1995 - Oct Sun>=22 1:00u -1:00 -
+Rule Eire 1996 max - Oct lastSun 1:00u -1:00 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2
@@ -573,11 +573,11 @@
0:00 - GMT 1948 Apr 18 2:00s
0:00 GB-Eire GMT/IST 1968 Oct 27
# The next line is for when negative SAVE values are used.
-# 1:00 Eire IST/GMT
+ 1:00 Eire IST/GMT
# These three lines are for when SAVE values are always nonnegative.
- 1:00 - IST 1971 Oct 31 2:00u
- 0:00 GB-Eire GMT/IST 1996
- 0:00 EU GMT/IST
+# 1:00 - IST 1971 Oct 31 2:00u
+# 0:00 GB-Eire GMT/IST 1996
+# 0:00 EU GMT/IST
###############################################################################
@@ -1015,9 +1015,9 @@
1:00 C-Eur CE%sT 1945 May 9
1:00 Czech CE%sT 1946 Dec 1 3:00
# Vanguard section, for zic and other parsers that support negative DST.
-# 1:00 -1:00 GMT 1947 Feb 23 2:00
+ 1:00 -1:00 GMT 1947 Feb 23 2:00
# Rearguard section, for parsers that do not support negative DST.
- 0:00 - GMT 1947 Feb 23 2:00
+# 0:00 - GMT 1947 Feb 23 2:00
# End of rearguard section.
1:00 Czech CE%sT 1979
1:00 EU CE%sT
--- a/make/jdk/src/classes/build/tools/tzdb/TzdbZoneRulesCompiler.java Thu Jul 25 17:27:53 2019 -0400
+++ b/make/jdk/src/classes/build/tools/tzdb/TzdbZoneRulesCompiler.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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
@@ -264,7 +264,7 @@
for (ZoneRules rules : rulesList) {
baos.reset();
DataOutputStream dataos = new DataOutputStream(baos);
- rules.writeExternal(dataos);
+ Ser.write(rules, dataos);
dataos.close();
byte[] bytes = baos.toByteArray();
out.writeShort(bytes.length);
--- a/make/jdk/src/classes/build/tools/tzdb/TzdbZoneRulesProvider.java Thu Jul 25 17:27:53 2019 -0400
+++ b/make/jdk/src/classes/build/tools/tzdb/TzdbZoneRulesProvider.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -31,24 +31,14 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.Map.Entry;
-import java.util.NavigableMap;
-import java.util.Objects;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
import java.util.concurrent.ConcurrentSkipListMap;
import java.time.*;
import java.time.Year;
import java.time.chrono.IsoChronology;
import java.time.temporal.TemporalAdjusters;
-import java.time.zone.ZoneOffsetTransition;
-import java.time.zone.ZoneOffsetTransitionRule;
-import java.time.zone.ZoneOffsetTransitionRule.TimeDefinition;
+import build.tools.tzdb.ZoneOffsetTransitionRule.TimeDefinition;
import java.time.zone.ZoneRulesException;
/**
@@ -272,8 +262,8 @@
/** Whether this is midnight end of day. */
boolean endOfDay;
- /** The time of the cutover. */
+ /** The time definition of the cutover. */
TimeDefinition timeDefinition = TimeDefinition.WALL;
void adjustToForwards(int year) {
@@ -343,6 +333,20 @@
// time must be midnight when end of day flag is true
endOfDay = true;
secsOfDay = 0;
+ } else if (secsOfDay < 0 || secsOfDay > 86400) {
+ // beyond 0:00-24:00 range. Adjust the cutover date.
+ int beyondDays = secsOfDay / 86400;
+ secsOfDay %= 86400;
+ if (secsOfDay < 0) {
+ secsOfDay = 86400 + secsOfDay;
+ beyondDays -= 1;
+ }
+ LocalDate date = LocalDate.of(2004, month, dayOfMonth).plusDays(beyondDays); // leap-year
+ month = date.getMonth();
+ dayOfMonth = date.getDayOfMonth();
+ if (dayOfWeek != null) {
+ dayOfWeek = dayOfWeek.plus(beyondDays);
+ }
}
timeDefinition = parseTimeDefinition(timeStr.charAt(timeStr.length() - 1));
}
@@ -497,9 +501,11 @@
*
* @param standardOffset the active standard offset, not null
* @param savingsBeforeSecs the active savings before the transition in seconds
+ * @param negativeSavings minimum savings in the rule, usually zero, but negative if negative DST is
+ * in effect.
* @return the transition, not null
*/
- ZoneOffsetTransitionRule toTransitionRule(ZoneOffset stdOffset, int savingsBefore) {
+ ZoneOffsetTransitionRule toTransitionRule(ZoneOffset stdOffset, int savingsBefore, int negativeSavings) {
// rule shared by different zones, so don't change it
Month month = this.month;
int dayOfMonth = this.dayOfMonth;
@@ -522,6 +528,7 @@
}
endOfDay = false;
}
+
// build rule
return ZoneOffsetTransitionRule.of(
//month, dayOfMonth, dayOfWeek, time, endOfDay, timeDefinition,
@@ -529,7 +536,7 @@
LocalTime.ofSecondOfDay(secsOfDay), endOfDay, timeDefinition,
stdOffset,
ZoneOffset.ofTotalSeconds(stdOffset.getTotalSeconds() + savingsBefore),
- ZoneOffset.ofTotalSeconds(stdOffset.getTotalSeconds() + savingsAmount));
+ ZoneOffset.ofTotalSeconds(stdOffset.getTotalSeconds() + savingsAmount - negativeSavings));
}
RuleLine parse(String[] tokens) {
@@ -643,12 +650,12 @@
this.ldtSecs = ldt.toEpochSecond(ZoneOffset.UTC);
}
- ZoneOffsetTransition toTransition(ZoneOffset standardOffset, int savingsBeforeSecs) {
+ ZoneOffsetTransition toTransition(ZoneOffset standardOffset, int savingsBeforeSecs, int negativeSavings) {
// copy of code in ZoneOffsetTransitionRule to avoid infinite loop
ZoneOffset wallOffset = ZoneOffset.ofTotalSeconds(
standardOffset.getTotalSeconds() + savingsBeforeSecs);
ZoneOffset offsetAfter = ZoneOffset.ofTotalSeconds(
- standardOffset.getTotalSeconds() + rule.savingsAmount);
+ standardOffset.getTotalSeconds() + rule.savingsAmount - negativeSavings);
LocalDateTime dt = rule.timeDefinition
.createDateTime(ldt, standardOffset, wallOffset);
return ZoneOffsetTransition.of(dt, wallOffset, offsetAfter);
@@ -666,10 +673,12 @@
* Tests if this a real transition with the active savings in seconds
*
* @param savingsBefore the active savings in seconds
+ * @param negativeSavings minimum savings in the rule, usually zero, but negative if negative DST is
+ * in effect.
* @return true, if savings changes
*/
- boolean isTransition(int savingsBefore) {
- return rule.savingsAmount != savingsBefore;
+ boolean isTransition(int savingsBefore, int negativeSavings) {
+ return rule.savingsAmount - negativeSavings != savingsBefore;
}
public int compareTo(TransRule other) {
@@ -697,12 +706,22 @@
// start ldt of each zone window
LocalDateTime zoneStart = LocalDateTime.MIN;
- // first stanard offset
+ // first standard offset
ZoneOffset firstStdOffset = stdOffset;
// first wall offset
ZoneOffset firstWallOffset = wallOffset;
for (ZoneLine zone : zones) {
+ // Adjust stdOffset, if negative DST is observed. It should be either
+ // fixed amount, or expressed in the named Rules.
+ int negativeSavings = Math.min(zone.fixedSavingsSecs, findNegativeSavings(zoneStart, zone));
+ if (negativeSavings < 0) {
+ zone.stdOffsetSecs += negativeSavings;
+ if (zone.fixedSavingsSecs < 0) {
+ zone.fixedSavingsSecs = 0;
+ }
+ }
+
// check if standard offset changed, update it if yes
ZoneOffset stdOffsetPrev = stdOffset; // for effectiveSavings check
if (zone.stdOffsetSecs != stdOffset.getTotalSeconds()) {
@@ -791,7 +810,7 @@
// sort the merged rules
Collections.sort(trules);
- effectiveSavings = 0;
+ effectiveSavings = -negativeSavings;
for (TransRule rule : trules) {
if (rule.toEpochSecond(stdOffsetPrev, savings) >
zoneStart.toEpochSecond(wallOffset)) {
@@ -800,7 +819,7 @@
// (hence isAfter)
break;
}
- effectiveSavings = rule.rule.savingsAmount;
+ effectiveSavings = rule.rule.savingsAmount - negativeSavings;
}
}
// check if the start of the window represents a transition
@@ -817,21 +836,21 @@
if (trules != null) {
long zoneStartEpochSecs = zoneStart.toEpochSecond(wallOffset);
for (TransRule trule : trules) {
- if (trule.isTransition(savings)) {
+ if (trule.isTransition(savings, negativeSavings)) {
long epochSecs = trule.toEpochSecond(stdOffset, savings);
if (epochSecs < zoneStartEpochSecs ||
epochSecs >= zone.toDateTimeEpochSecond(savings)) {
continue;
}
- transitionList.add(trule.toTransition(stdOffset, savings));
- savings = trule.rule.savingsAmount;
+ transitionList.add(trule.toTransition(stdOffset, savings, negativeSavings));
+ savings = trule.rule.savingsAmount - negativeSavings;
}
}
}
if (lastRules != null) {
for (TransRule trule : lastRules) {
- lastTransitionRuleList.add(trule.rule.toTransitionRule(stdOffset, savings));
- savings = trule.rule.savingsAmount;
+ lastTransitionRuleList.add(trule.rule.toTransitionRule(stdOffset, savings, negativeSavings));
+ savings = trule.rule.savingsAmount - negativeSavings;
}
}
@@ -848,4 +867,38 @@
lastTransitionRuleList);
}
+ /**
+ * Find the minimum negative savings in named Rules for a Zone. Savings are only
+ * looked at for the period of the subject Zone.
+ *
+ * @param zoneStart start LDT of the zone
+ * @param zl ZoneLine to look at
+ */
+ private int findNegativeSavings(LocalDateTime zoneStart, ZoneLine zl) {
+ int negativeSavings = 0;
+ LocalDateTime zoneEnd = zl.toDateTime();
+
+ if (zl.savingsRule != null) {
+ List<RuleLine> rlines = rules.get(zl.savingsRule);
+ if (rlines == null) {
+ throw new IllegalArgumentException("<Rule> not found: " +
+ zl.savingsRule);
+ }
+
+ negativeSavings = Math.min(0, rlines.stream()
+ .filter(l -> windowOverlap(l, zoneStart.getYear(), zoneEnd.getYear()))
+ .map(l -> l.savingsAmount)
+ .min(Comparator.naturalOrder())
+ .orElse(0));
+ }
+
+ return negativeSavings;
+ }
+
+ private boolean windowOverlap(RuleLine ruleLine, int zoneStartYear, int zoneEndYear) {
+ boolean overlap = zoneStartYear <= ruleLine.startYear && zoneEndYear >= ruleLine.startYear ||
+ zoneStartYear <= ruleLine.endYear && zoneEndYear >= ruleLine.endYear;
+
+ return overlap;
+ }
}
--- a/make/jdk/src/classes/build/tools/tzdb/ZoneRules.java Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,317 +0,0 @@
-/*
- * Copyright (c) 2012, 2016, 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.
- */
-
-/*
- * This file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Copyright (c) 2011-2012, Stephen Colebourne & Michael Nascimento Santos
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * * Neither the name of JSR-310 nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package build.tools.tzdb;
-
-import java.io.DataOutput;
-import java.io.IOException;
-import java.io.ObjectOutput;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.ZoneOffset;
-import java.time.zone.ZoneOffsetTransition;
-import java.time.zone.ZoneOffsetTransitionRule;
-import java.time.zone.ZoneOffsetTransitionRule.TimeDefinition;
-import java.util.Arrays;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Duplicated code of javax.time.zone.ZoneRules, ZoneOffsetTransitionRule
- * and Ser to generate the serialization form output of ZoneRules for
- * tzdb.jar.
- *
- * Implementation here is the copy/paste of ZoneRules, ZoneOffsetTransitionRule
- * and Ser in javax.time.zone package. Make sure the code here is synchrionozed
- * with the serialization implementation there.
- *
- * @since 1.8
- */
-
-final class ZoneRules {
-
- /**
- * The transitions between standard offsets (epoch seconds), sorted.
- */
- private final long[] standardTransitions;
- /**
- * The standard offsets.
- */
- private final ZoneOffset[] standardOffsets;
- /**
- * The transitions between instants (epoch seconds), sorted.
- */
- private final long[] savingsInstantTransitions;
-
- /**
- * The wall offsets.
- */
- private final ZoneOffset[] wallOffsets;
- /**
- * The last rule.
- */
- private final ZoneOffsetTransitionRule[] lastRules;
-
- /**
- * Creates an instance.
- *
- * @param baseStandardOffset the standard offset to use before legal rules were set, not null
- * @param baseWallOffset the wall offset to use before legal rules were set, not null
- * @param standardOffsetTransitionList the list of changes to the standard offset, not null
- * @param transitionList the list of transitions, not null
- * @param lastRules the recurring last rules, size 16 or less, not null
- */
- ZoneRules(ZoneOffset baseStandardOffset,
- ZoneOffset baseWallOffset,
- List<ZoneOffsetTransition> standardOffsetTransitionList,
- List<ZoneOffsetTransition> transitionList,
- List<ZoneOffsetTransitionRule> lastRules) {
-
- this.standardTransitions = new long[standardOffsetTransitionList.size()];
-
- this.standardOffsets = new ZoneOffset[standardOffsetTransitionList.size() + 1];
- this.standardOffsets[0] = baseStandardOffset;
- for (int i = 0; i < standardOffsetTransitionList.size(); i++) {
- this.standardTransitions[i] = standardOffsetTransitionList.get(i).toEpochSecond();
- this.standardOffsets[i + 1] = standardOffsetTransitionList.get(i).getOffsetAfter();
- }
-
- // convert savings transitions to locals
- List<ZoneOffset> localTransitionOffsetList = new ArrayList<>();
- localTransitionOffsetList.add(baseWallOffset);
- for (ZoneOffsetTransition trans : transitionList) {
- localTransitionOffsetList.add(trans.getOffsetAfter());
- }
-
- this.wallOffsets = localTransitionOffsetList.toArray(new ZoneOffset[localTransitionOffsetList.size()]);
-
- // convert savings transitions to instants
- this.savingsInstantTransitions = new long[transitionList.size()];
- for (int i = 0; i < transitionList.size(); i++) {
- this.savingsInstantTransitions[i] = transitionList.get(i).toEpochSecond();
- }
-
- // last rules
- if (lastRules.size() > 16) {
- throw new IllegalArgumentException("Too many transition rules");
- }
- this.lastRules = lastRules.toArray(new ZoneOffsetTransitionRule[lastRules.size()]);
- }
-
- /** Type for ZoneRules. */
- static final byte ZRULES = 1;
-
- /**
- * Writes the state to the stream.
- *
- * @param out the output stream, not null
- * @throws IOException if an error occurs
- */
- void writeExternal(DataOutput out) throws IOException {
- out.writeByte(ZRULES);
- out.writeInt(standardTransitions.length);
- for (long trans : standardTransitions) {
- writeEpochSec(trans, out);
- }
- for (ZoneOffset offset : standardOffsets) {
- writeOffset(offset, out);
- }
- out.writeInt(savingsInstantTransitions.length);
- for (long trans : savingsInstantTransitions) {
- writeEpochSec(trans, out);
- }
- for (ZoneOffset offset : wallOffsets) {
- writeOffset(offset, out);
- }
- out.writeByte(lastRules.length);
- for (ZoneOffsetTransitionRule rule : lastRules) {
- writeRule(rule, out);
- }
- }
-
- /**
- * Writes the state the ZoneOffset to the stream.
- *
- * @param offset the offset, not null
- * @param out the output stream, not null
- * @throws IOException if an error occurs
- */
- static void writeOffset(ZoneOffset offset, DataOutput out) throws IOException {
- final int offsetSecs = offset.getTotalSeconds();
- int offsetByte = offsetSecs % 900 == 0 ? offsetSecs / 900 : 127; // compress to -72 to +72
- out.writeByte(offsetByte);
- if (offsetByte == 127) {
- out.writeInt(offsetSecs);
- }
- }
-
- /**
- * Writes the epoch seconds to the stream.
- *
- * @param epochSec the epoch seconds, not null
- * @param out the output stream, not null
- * @throws IOException if an error occurs
- */
- static void writeEpochSec(long epochSec, DataOutput out) throws IOException {
- if (epochSec >= -4575744000L && epochSec < 10413792000L && epochSec % 900 == 0) { // quarter hours between 1825 and 2300
- int store = (int) ((epochSec + 4575744000L) / 900);
- out.writeByte((store >>> 16) & 255);
- out.writeByte((store >>> 8) & 255);
- out.writeByte(store & 255);
- } else {
- out.writeByte(255);
- out.writeLong(epochSec);
- }
- }
-
- /**
- * Writes the state of the transition rule to the stream.
- *
- * @param rule the transition rule, not null
- * @param out the output stream, not null
- * @throws IOException if an error occurs
- */
- static void writeRule(ZoneOffsetTransitionRule rule, DataOutput out) throws IOException {
- int month = rule.getMonth().getValue();
- byte dom = (byte)rule.getDayOfMonthIndicator();
- int dow = (rule.getDayOfWeek() == null ? -1 : rule.getDayOfWeek().getValue());
- LocalTime time = rule.getLocalTime();
- boolean timeEndOfDay = rule.isMidnightEndOfDay();
- TimeDefinition timeDefinition = rule.getTimeDefinition();
- ZoneOffset standardOffset = rule.getStandardOffset();
- ZoneOffset offsetBefore = rule.getOffsetBefore();
- ZoneOffset offsetAfter = rule.getOffsetAfter();
-
- int timeSecs = (timeEndOfDay ? 86400 : time.toSecondOfDay());
- int stdOffset = standardOffset.getTotalSeconds();
- int beforeDiff = offsetBefore.getTotalSeconds() - stdOffset;
- int afterDiff = offsetAfter.getTotalSeconds() - stdOffset;
- int timeByte = (timeSecs % 3600 == 0 ? (timeEndOfDay ? 24 : time.getHour()) : 31);
- int stdOffsetByte = (stdOffset % 900 == 0 ? stdOffset / 900 + 128 : 255);
- int beforeByte = (beforeDiff == 0 || beforeDiff == 1800 || beforeDiff == 3600 ? beforeDiff / 1800 : 3);
- int afterByte = (afterDiff == 0 || afterDiff == 1800 || afterDiff == 3600 ? afterDiff / 1800 : 3);
- int dowByte = (dow == -1 ? 0 : dow);
- int b = (month << 28) + // 4 bytes
- ((dom + 32) << 22) + // 6 bytes
- (dowByte << 19) + // 3 bytes
- (timeByte << 14) + // 5 bytes
- (timeDefinition.ordinal() << 12) + // 2 bytes
- (stdOffsetByte << 4) + // 8 bytes
- (beforeByte << 2) + // 2 bytes
- afterByte; // 2 bytes
- out.writeInt(b);
- if (timeByte == 31) {
- out.writeInt(timeSecs);
- }
- if (stdOffsetByte == 255) {
- out.writeInt(stdOffset);
- }
- if (beforeByte == 3) {
- out.writeInt(offsetBefore.getTotalSeconds());
- }
- if (afterByte == 3) {
- out.writeInt(offsetAfter.getTotalSeconds());
- }
- }
-
- /**
- * Checks if this set of rules equals another.
- * <p>
- * Two rule sets are equal if they will always result in the same output
- * for any given input instant or local date-time.
- * Rules from two different groups may return false even if they are in fact the same.
- * <p>
- * This definition should result in implementations comparing their entire state.
- *
- * @param otherRules the other rules, null returns false
- * @return true if this rules is the same as that specified
- */
- @Override
- public boolean equals(Object otherRules) {
- if (this == otherRules) {
- return true;
- }
- if (otherRules instanceof ZoneRules) {
- ZoneRules other = (ZoneRules) otherRules;
- return Arrays.equals(standardTransitions, other.standardTransitions) &&
- Arrays.equals(standardOffsets, other.standardOffsets) &&
- Arrays.equals(savingsInstantTransitions, other.savingsInstantTransitions) &&
- Arrays.equals(wallOffsets, other.wallOffsets) &&
- Arrays.equals(lastRules, other.lastRules);
- }
- return false;
- }
-
- /**
- * Returns a suitable hash code given the definition of {@code #equals}.
- *
- * @return the hash code
- */
- @Override
- public int hashCode() {
- return Arrays.hashCode(standardTransitions) ^
- Arrays.hashCode(standardOffsets) ^
- Arrays.hashCode(savingsInstantTransitions) ^
- Arrays.hashCode(wallOffsets) ^
- Arrays.hashCode(lastRules);
- }
-
-}
--- a/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp Thu Jul 25 17:27:53 2019 -0400
+++ b/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp Fri Jul 26 19:11:34 2019 -0400
@@ -415,6 +415,26 @@
}
+void ShenandoahBarrierSetAssembler::try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env,
+ Register obj, Register tmp, Label& slowpath) {
+ Label done;
+ // Resolve jobject
+ BarrierSetAssembler::try_resolve_jobject_in_native(masm, jni_env, obj, tmp, slowpath);
+
+ // Check for null.
+ __ cbz(obj, done);
+
+ assert(obj != rscratch2, "need rscratch2");
+ Address gc_state(rthread, in_bytes(ShenandoahThreadLocalData::gc_state_offset()));
+ __ ldrb(rscratch2, gc_state);
+
+ // Check for heap in evacuation phase
+ __ tbnz(rscratch2, ShenandoahHeap::EVACUATION_BITPOS, slowpath);
+
+ __ bind(done);
+}
+
+
void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm, Register addr, Register expected, Register new_val,
bool acquire, bool release, bool weak, bool is_cae,
Register result) {
--- a/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.hpp Thu Jul 25 17:27:53 2019 -0400
+++ b/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.hpp Fri Jul 26 19:11:34 2019 -0400
@@ -81,6 +81,8 @@
Register dst, Address src, Register tmp1, Register tmp_thread);
virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
Address dst, Register val, Register tmp1, Register tmp2);
+ virtual void try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env,
+ Register obj, Register tmp, Label& slowpath);
void cmpxchg_oop(MacroAssembler* masm, Register addr, Register expected, Register new_val,
bool acquire, bool release, bool weak, bool is_cae, Register result);
--- a/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp Thu Jul 25 17:27:53 2019 -0400
+++ b/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp Fri Jul 26 19:11:34 2019 -0400
@@ -621,6 +621,22 @@
}
}
+void ShenandoahBarrierSetAssembler::try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env,
+ Register obj, Register tmp, Label& slowpath) {
+ Label done;
+ // Resolve jobject
+ BarrierSetAssembler::try_resolve_jobject_in_native(masm, jni_env, obj, tmp, slowpath);
+
+ // Check for null.
+ __ testptr(obj, obj);
+ __ jcc(Assembler::zero, done);
+
+ Address gc_state(jni_env, ShenandoahThreadLocalData::gc_state_offset() - JavaThread::jni_environment_offset());
+ __ testb(gc_state, ShenandoahHeap::EVACUATION);
+ __ jccb(Assembler::notZero, slowpath);
+ __ bind(done);
+}
+
// Special Shenandoah CAS implementation that handles false negatives
// due to concurrent evacuation.
void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm,
--- a/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.hpp Thu Jul 25 17:27:53 2019 -0400
+++ b/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.hpp Fri Jul 26 19:11:34 2019 -0400
@@ -91,6 +91,8 @@
Register dst, Address src, Register tmp1, Register tmp_thread);
virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
Address dst, Register val, Register tmp1, Register tmp2);
+ virtual void try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env,
+ Register obj, Register tmp, Label& slowpath);
virtual void barrier_stubs_init();
--- a/src/java.base/macosx/native/libosxsecurity/KeystoreImpl.m Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.base/macosx/native/libosxsecurity/KeystoreImpl.m Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, 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
@@ -562,6 +562,9 @@
err = SecKeychainItemImport(cfDataToImport, NULL, &dataFormat, NULL,
0, ¶mBlock, defaultKeychain, &createdItems);
+ if (cfDataToImport != NULL) {
+ CFRelease(cfDataToImport);
+ }
if (err == noErr) {
SecKeychainItemRef anItem = (SecKeychainItemRef)CFArrayGetValueAtIndex(createdItems, 0);
--- a/src/java.base/share/classes/com/sun/crypto/provider/CipherCore.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.base/share/classes/com/sun/crypto/provider/CipherCore.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, 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
@@ -271,7 +271,9 @@
padding = null;
} else if (paddingScheme.equalsIgnoreCase("ISO10126Padding")) {
padding = new ISO10126Padding(blockSize);
- } else if (!paddingScheme.equalsIgnoreCase("PKCS5Padding")) {
+ } else if (paddingScheme.equalsIgnoreCase("PKCS5Padding")) {
+ padding = new PKCS5Padding(blockSize);
+ } else {
throw new NoSuchPaddingException("Padding: " + paddingScheme
+ " not implemented");
}
--- a/src/java.base/share/classes/java/time/zone/Ser.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.base/share/classes/java/time/zone/Ser.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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
@@ -91,7 +91,7 @@
static final byte ZRULES = 1;
/** Type for ZoneOffsetTransition. */
static final byte ZOT = 2;
- /** Type for ZoneOffsetTransition. */
+ /** Type for ZoneOffsetTransitionRule. */
static final byte ZOTRULE = 3;
/** The type being serialized. */
--- a/src/java.base/share/classes/java/time/zone/ZoneOffsetTransitionRule.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.base/share/classes/java/time/zone/ZoneOffsetTransitionRule.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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
@@ -256,7 +256,7 @@
* for the encoding of epoch seconds and offsets.
* <pre style="font-size:1.0em">{@code
*
- * out.writeByte(3); // identifies a ZoneOffsetTransition
+ * out.writeByte(3); // identifies a ZoneOffsetTransitionRule
* final int timeSecs = (timeEndOfDay ? 86400 : time.toSecondOfDay());
* final int stdOffset = standardOffset.getTotalSeconds();
* final int beforeDiff = offsetBefore.getTotalSeconds() - stdOffset;
--- a/src/java.base/share/classes/java/util/Calendar.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.base/share/classes/java/util/Calendar.java Fri Jul 26 19:11:34 2019 -0400
@@ -2205,7 +2205,8 @@
}
String calendarType = getCalendarType();
- if (style == ALL_STYLES || isStandaloneStyle(style) || isNarrowFormatStyle(style)) {
+ if (style == ALL_STYLES || isStandaloneStyle(style) || isNarrowFormatStyle(style) ||
+ field == ERA && (style & SHORT) == SHORT) {
Map<String, Integer> map;
map = CalendarDataUtility.retrieveFieldValueNames(calendarType, field, style, locale);
--- a/src/java.base/share/classes/javax/crypto/Cipher.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.base/share/classes/javax/crypto/Cipher.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, 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
@@ -559,16 +559,16 @@
// does not support mode or padding we need, ignore
continue;
}
- if (canuse == S_YES) {
+ // S_YES, S_MAYBE
+ // even when mode and padding are both supported, they
+ // may not be used together, try out and see if it works
+ try {
+ CipherSpi spi = (CipherSpi)s.newInstance(null);
+ tr.setModePadding(spi);
+ // specify null instead of spi for delayed provider selection
return new Cipher(null, s, t, transformation, transforms);
- } else { // S_MAYBE, try out if it works
- try {
- CipherSpi spi = (CipherSpi)s.newInstance(null);
- tr.setModePadding(spi);
- return new Cipher(spi, s, t, transformation, transforms);
- } catch (Exception e) {
- failure = e;
- }
+ } catch (Exception e) {
+ failure = e;
}
}
throw new NoSuchAlgorithmException
--- a/src/java.base/share/classes/sun/util/calendar/ZoneInfo.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.base/share/classes/sun/util/calendar/ZoneInfo.java Fri Jul 26 19:11:34 2019 -0400
@@ -273,7 +273,7 @@
}
// beyond the transitions, delegate to SimpleTimeZone if there
- // is a rule; otherwise, return rawOffset.
+ // is a rule; otherwise, return the offset of the last transition.
SimpleTimeZone tz = getLastRule();
if (tz != null) {
int rawoffset = tz.getRawOffset();
@@ -293,13 +293,18 @@
offsets[1] = dstoffset;
}
return rawoffset + dstoffset;
+ } else {
+ // use the last transition
+ long val = transitions[transitions.length - 1];
+ int offset = this.offsets[(int)(val & OFFSET_MASK)] + rawOffsetDiff;
+ if (offsets != null) {
+ int dst = (int)((val >>> DST_NSHIFT) & 0xfL);
+ int save = (dst == 0) ? 0 : this.offsets[dst];
+ offsets[0] = offset - save;
+ offsets[1] = save;
+ }
+ return offset;
}
- int offset = getLastRawOffset();
- if (offsets != null) {
- offsets[0] = offset;
- offsets[1] = 0;
- }
- return offset;
}
private int getTransitionIndex(long date, int type) {
@@ -502,8 +507,10 @@
SimpleTimeZone tz = getLastRule();
if (tz != null) {
return tz.inDaylightTime(date);
- }
- return false;
+ } else {
+ // use the last transition
+ return (transitions[transitions.length - 1] & DST_MASK) != 0;
+ }
}
/**
--- a/src/java.sql/share/classes/java/sql/PreparedStatement.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.sql/share/classes/java/sql/PreparedStatement.java Fri Jul 26 19:11:34 2019 -0400
@@ -47,12 +47,13 @@
* <P>
* In the following example of setting a parameter, <code>con</code> represents
* an active connection:
- * <PRE>
+ * <pre>{@code
+ * BigDecimal sal = new BigDecimal("153833.00");
* PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
* SET SALARY = ? WHERE ID = ?");
- * pstmt.setBigDecimal(1, 153833.00)
- * pstmt.setInt(2, 110592)
- * </PRE>
+ * pstmt.setBigDecimal(1, sal);
+ * pstmt.setInt(2, 110592);
+ * }</pre>
*
* @see Connection#prepareStatement
* @see ResultSet
--- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/SubstitutionGroupHandler.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/SubstitutionGroupHandler.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
@@ -30,6 +30,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
/**
* To store and validate information about substitutionGroup
@@ -38,7 +39,7 @@
*
* @author Sandy Gao, IBM
*
- * @LastModified: Nov 2017
+ * @LastModified: July 2019
*/
public class SubstitutionGroupHandler {
@@ -57,8 +58,8 @@
// 3.9.4 Element Sequence Locally Valid (Particle) 2.3.3
// check whether one element decl matches an element with the given qname
public XSElementDecl getMatchingElemDecl(QName element, XSElementDecl exemplar) {
- if (element.localpart == exemplar.fName &&
- element.uri == exemplar.fTargetNamespace) {
+ if (Objects.equals(element.localpart, exemplar.fName) &&
+ Objects.equals(element.uri, exemplar.fTargetNamespace)) {
return exemplar;
}
--- a/src/jdk.internal.vm.compiler.management/share/classes/org.graalvm.compiler.hotspot.management/src/org/graalvm/compiler/hotspot/management/HotSpotGraalManagement.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler.management/share/classes/org.graalvm.compiler.hotspot.management/src/org/graalvm/compiler/hotspot/management/HotSpotGraalManagement.java Fri Jul 26 19:11:34 2019 -0400
@@ -156,9 +156,10 @@
platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
process();
}
- } catch (SecurityException e) {
+ } catch (SecurityException | UnsatisfiedLinkError | NoClassDefFoundError | UnsupportedOperationException e) {
// Without permission to find or create the MBeanServer,
// we cannot process any Graal mbeans.
+ // Various other errors can occur in the ManagementFactory (JDK-8076557)
deferred = null;
}
} else {
--- a/src/jdk.internal.vm.compiler/share/classes/jdk.internal.vm.compiler.libgraal/src/jdk/internal/vm/compiler/libgraal/OptionsEncoder.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/jdk.internal.vm.compiler.libgraal/src/jdk/internal/vm/compiler/libgraal/OptionsEncoder.java Fri Jul 26 19:11:34 2019 -0400
@@ -171,4 +171,3 @@
return res;
}
}
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.api.directives.test/src/org/graalvm/compiler/api/directives/test/ConstantProbablityBranchFoldingTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2019, 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 org.graalvm.compiler.api.directives.test;
+
+import org.graalvm.compiler.api.directives.GraalDirectives;
+import org.graalvm.compiler.core.test.GraalCompilerTest;
+import org.graalvm.compiler.graph.iterators.NodeIterable;
+import org.graalvm.compiler.nodes.IfNode;
+import org.graalvm.compiler.nodes.StructuredGraph;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class ConstantProbablityBranchFoldingTest extends GraalCompilerTest {
+
+ public static int branchFoldingSnippet1() {
+ if (GraalDirectives.injectBranchProbability(0.5, true)) {
+ return 1;
+ } else {
+ return 2;
+ }
+ }
+
+ public static int branchFoldingSnippet2() {
+ if (GraalDirectives.injectBranchProbability(0.5, false)) {
+ return 1;
+ } else {
+ return 2;
+ }
+ }
+
+ @Test
+ public void testEarlyFolding1() {
+ test("branchFoldingSnippet1");
+ }
+
+ @Test
+ public void testEarlyFolding2() {
+ test("branchFoldingSnippet2");
+ }
+
+ @Override
+ protected void checkLowTierGraph(StructuredGraph graph) {
+ NodeIterable<IfNode> ifNodes = graph.getNodes(IfNode.TYPE);
+ Assert.assertEquals("IfNode count", 0, ifNodes.count());
+ }
+}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64.test/src/org/graalvm/compiler/asm/aarch64/test/AArch64BitCountAssemblerTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64.test/src/org/graalvm/compiler/asm/aarch64/test/AArch64BitCountAssemblerTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -75,6 +75,9 @@
AArch64MacroAssembler masm = new AArch64MacroAssembler(target);
Register dst = registerConfig.getReturnRegister(JavaKind.Int);
Register src = asRegister(cc.getArgument(0));
+ // Generate a nop first as AArch64 Hotspot requires instruction at nmethod verified
+ // entry to be a jump or nop. (See https://github.com/oracle/graal/issues/1439)
+ masm.nop();
RegisterArray registers = registerConfig.filterAllocatableRegisters(AArch64Kind.V64_BYTE, registerConfig.getAllocatableRegisters());
masm.popcnt(size, dst, src, registers.get(registers.size() - 1));
masm.ret(AArch64.lr);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64LoweringProviderMixin.java Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2019, 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 org.graalvm.compiler.core.aarch64;
+
+import org.graalvm.compiler.nodes.spi.LoweringProvider;
+
+public interface AArch64LoweringProviderMixin extends LoweringProvider {
+
+ @Override
+ default Integer smallestCompareWidth() {
+ return 32;
+ }
+
+ @Override
+ default boolean supportBulkZeroing() {
+ return false;
+ }
+}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64ReadNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64ReadNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -80,9 +80,9 @@
*/
public static void replace(ReadNode readNode) {
assert readNode.getUsageCount() == 1;
- assert readNode.getUsageAt(0) instanceof ZeroExtendNode || readNode.getUsageAt(0) instanceof SignExtendNode;
+ assert readNode.usages().first() instanceof ZeroExtendNode || readNode.usages().first() instanceof SignExtendNode;
- ValueNode usage = (ValueNode) readNode.getUsageAt(0);
+ ValueNode usage = (ValueNode) readNode.usages().first();
boolean isSigned = usage instanceof SignExtendNode;
IntegerStamp accessStamp = ((IntegerStamp) readNode.getAccessStamp());
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64ReadReplacementPhase.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64ReadReplacementPhase.java Fri Jul 26 19:11:34 2019 -0400
@@ -49,7 +49,7 @@
if (node instanceof ReadNode) {
ReadNode readNode = (ReadNode) node;
if (readNode.hasExactlyOneUsage()) {
- Node usage = readNode.getUsageAt(0);
+ Node usage = readNode.usages().first();
if (usage instanceof ZeroExtendNode || usage instanceof SignExtendNode) {
AArch64ReadNode.replace(readNode);
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64SuitesCreator.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64SuitesCreator.java Fri Jul 26 19:11:34 2019 -0400
@@ -24,8 +24,10 @@
package org.graalvm.compiler.core.aarch64;
+import java.util.List;
import java.util.ListIterator;
+import org.graalvm.compiler.debug.GraalError;
import org.graalvm.compiler.java.DefaultSuitesCreator;
import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
import org.graalvm.compiler.options.OptionValues;
@@ -37,24 +39,33 @@
import org.graalvm.compiler.phases.tiers.Suites;
public class AArch64SuitesCreator extends DefaultSuitesCreator {
- private final Class<? extends Phase> insertReadReplacementBefore;
+ private final List<Class<? extends Phase>> insertReadReplacementBeforePositions;
- public AArch64SuitesCreator(CompilerConfiguration compilerConfiguration, Plugins plugins, Class<? extends Phase> insertReadReplacementBefore) {
+ public AArch64SuitesCreator(CompilerConfiguration compilerConfiguration, Plugins plugins, List<Class<? extends Phase>> insertReadReplacementBeforePositions) {
super(compilerConfiguration, plugins);
- this.insertReadReplacementBefore = insertReadReplacementBefore;
+ this.insertReadReplacementBeforePositions = insertReadReplacementBeforePositions;
}
@Override
public Suites createSuites(OptionValues options) {
Suites suites = super.createSuites(options);
-
- ListIterator<BasePhase<? super LowTierContext>> findPhase = suites.getLowTier().findPhase(insertReadReplacementBefore);
- // Put AArch64ReadReplacementPhase right before the SchedulePhase
- while (PhaseSuite.findNextPhase(findPhase, insertReadReplacementBefore)) {
- // Search for last occurrence of SchedulePhase
+ ListIterator<BasePhase<? super LowTierContext>> findPhase = null;
+ for (Class<? extends Phase> phase : insertReadReplacementBeforePositions) {
+ findPhase = suites.getLowTier().findPhase(phase);
+ if (findPhase != null) {
+ // Put AArch64ReadReplacementPhase right before the requested phase
+ while (PhaseSuite.findNextPhase(findPhase, phase)) {
+ // Search for last occurrence of SchedulePhase
+ }
+ findPhase.previous();
+ break;
+ }
}
- findPhase.previous();
- findPhase.add(new AArch64ReadReplacementPhase());
+ if (findPhase != null) {
+ findPhase.add(new AArch64ReadReplacementPhase());
+ } else {
+ throw GraalError.shouldNotReachHere("Cannot find phase to insert AArch64ReadReplacementPhase");
+ }
return suites;
}
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64.test/src/org/graalvm/compiler/core/amd64/test/ConstantStackMoveTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64.test/src/org/graalvm/compiler/core/amd64/test/ConstantStackMoveTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -143,7 +143,7 @@
}
@Test
- public void runByte() throws Throwable {
+ public void runByte() {
runTest("testByte");
}
@@ -157,7 +157,7 @@
}
@Test
- public void runShort() throws Throwable {
+ public void runShort() {
runTest("testShort");
}
@@ -171,7 +171,7 @@
}
@Test
- public void runInt() throws Throwable {
+ public void runInt() {
runTest("testInt");
}
@@ -185,7 +185,7 @@
}
@Test
- public void runLong() throws Throwable {
+ public void runLong() {
runTest("testLong");
}
@@ -199,7 +199,7 @@
}
@Test
- public void runFloat() throws Throwable {
+ public void runFloat() {
runTest("testFloat");
}
@@ -213,7 +213,7 @@
}
@Test
- public void runDouble() throws Throwable {
+ public void runDouble() {
runTest("testDouble");
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64.test/src/org/graalvm/compiler/core/amd64/test/StackStoreTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64.test/src/org/graalvm/compiler/core/amd64/test/StackStoreTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -113,7 +113,7 @@
}
@Test
- public void run0() throws Throwable {
+ public void run0() {
runTest("test0", 0xDEADDEAD);
}
@@ -122,7 +122,7 @@
}
@Test
- public void run1() throws Throwable {
+ public void run1() {
runTest("test1", 0xDEADDEAD);
}
@@ -131,7 +131,7 @@
}
@Test
- public void run2() throws Throwable {
+ public void run2() {
runTest("test2", 0xDEADDEAD);
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64/src/org/graalvm/compiler/core/amd64/AMD64ArithmeticLIRGenerator.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64/src/org/graalvm/compiler/core/amd64/AMD64ArithmeticLIRGenerator.java Fri Jul 26 19:11:34 2019 -0400
@@ -126,6 +126,7 @@
import org.graalvm.compiler.lir.amd64.AMD64Unary;
import org.graalvm.compiler.lir.amd64.AMD64ZeroMemoryOp;
import org.graalvm.compiler.lir.amd64.vector.AMD64VectorBinary;
+import org.graalvm.compiler.lir.amd64.vector.AMD64VectorBinary.AVXBinaryConstFloatOp;
import org.graalvm.compiler.lir.amd64.vector.AMD64VectorBinary.AVXBinaryOp;
import org.graalvm.compiler.lir.amd64.vector.AMD64VectorUnary;
import org.graalvm.compiler.lir.gen.ArithmeticLIRGenerator;
@@ -1360,9 +1361,13 @@
}
}
- private Variable emitBinary(LIRKind resultKind, VexRVMOp op, Value a, Value b) {
+ protected Variable emitBinary(LIRKind resultKind, VexRVMOp op, Value a, Value b) {
Variable result = getLIRGen().newVariable(resultKind);
- getLIRGen().append(new AVXBinaryOp(op, getRegisterSize(result), result, asAllocatable(a), asAllocatable(b)));
+ if (b instanceof ConstantValue && (b.getPlatformKind() == AMD64Kind.SINGLE || b.getPlatformKind() == AMD64Kind.DOUBLE)) {
+ getLIRGen().append(new AVXBinaryConstFloatOp(op, getRegisterSize(result), result, asAllocatable(a), (ConstantValue) b));
+ } else {
+ getLIRGen().append(new AVXBinaryOp(op, getRegisterSize(result), result, asAllocatable(a), asAllocatable(b)));
+ }
return result;
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64/src/org/graalvm/compiler/core/amd64/AMD64LIRGenerator.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64/src/org/graalvm/compiler/core/amd64/AMD64LIRGenerator.java Fri Jul 26 19:11:34 2019 -0400
@@ -47,8 +47,8 @@
import org.graalvm.compiler.asm.amd64.AMD64Assembler.AMD64MIOp;
import org.graalvm.compiler.asm.amd64.AMD64Assembler.AMD64RMOp;
import org.graalvm.compiler.asm.amd64.AMD64Assembler.ConditionFlag;
+import org.graalvm.compiler.asm.amd64.AMD64Assembler.SSEOp;
import org.graalvm.compiler.asm.amd64.AMD64BaseAssembler.OperandSize;
-import org.graalvm.compiler.asm.amd64.AMD64Assembler.SSEOp;
import org.graalvm.compiler.core.common.LIRKind;
import org.graalvm.compiler.core.common.NumUtil;
import org.graalvm.compiler.core.common.calc.Condition;
@@ -80,10 +80,10 @@
import org.graalvm.compiler.lir.amd64.AMD64ControlFlow.FloatBranchOp;
import org.graalvm.compiler.lir.amd64.AMD64ControlFlow.FloatCondMoveOp;
import org.graalvm.compiler.lir.amd64.AMD64ControlFlow.FloatCondSetOp;
+import org.graalvm.compiler.lir.amd64.AMD64ControlFlow.HashTableSwitchOp;
import org.graalvm.compiler.lir.amd64.AMD64ControlFlow.ReturnOp;
import org.graalvm.compiler.lir.amd64.AMD64ControlFlow.StrategySwitchOp;
import org.graalvm.compiler.lir.amd64.AMD64ControlFlow.TableSwitchOp;
-import org.graalvm.compiler.lir.amd64.AMD64ControlFlow.HashTableSwitchOp;
import org.graalvm.compiler.lir.amd64.AMD64LFenceOp;
import org.graalvm.compiler.lir.amd64.AMD64Move;
import org.graalvm.compiler.lir.amd64.AMD64Move.CompareAndSwapOp;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64/src/org/graalvm/compiler/core/amd64/AMD64LoweringProviderMixin.java Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2019, 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 org.graalvm.compiler.core.amd64;
+
+import org.graalvm.compiler.nodes.spi.LoweringProvider;
+
+public interface AMD64LoweringProviderMixin extends LoweringProvider {
+
+ @Override
+ default Integer smallestCompareWidth() {
+ return 8;
+ }
+
+ @Override
+ default boolean supportBulkZeroing() {
+ return true;
+ }
+}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64/src/org/graalvm/compiler/core/amd64/AMD64MoveFactory.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64/src/org/graalvm/compiler/core/amd64/AMD64MoveFactory.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -50,6 +50,7 @@
import jdk.vm.ci.meta.AllocatableValue;
import jdk.vm.ci.meta.Constant;
import jdk.vm.ci.meta.JavaConstant;
+import jdk.vm.ci.meta.PrimitiveConstant;
import jdk.vm.ci.meta.Value;
public abstract class AMD64MoveFactory extends AMD64MoveFactoryBase {
@@ -65,6 +66,9 @@
switch (c.getJavaKind()) {
case Long:
return NumUtil.isInt(c.asLong());
+ case Float:
+ case Double:
+ return false;
case Object:
return c.isNull();
default:
@@ -75,6 +79,12 @@
}
@Override
+ public boolean mayEmbedConstantLoad(Constant constant) {
+ // Only consider not inlineable constants here.
+ return constant instanceof PrimitiveConstant && ((PrimitiveConstant) constant).getJavaKind().isNumericFloat();
+ }
+
+ @Override
public boolean allowConstantToStackMove(Constant constant) {
if (constant instanceof DataPointerConstant) {
return false;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/GraalOptions.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/GraalOptions.java Fri Jul 26 19:11:34 2019 -0400
@@ -289,4 +289,6 @@
@Option(help = "If applicable, use bulk zeroing instructions when the zeroing size in bytes exceeds this threshold.", type = OptionType.Expert)
public static final OptionKey<Integer> MinimalBulkZeroingSize = new OptionKey<>(2048);
+ @Option(help = "Alignment in bytes for loop header blocks.", type = OptionType.Expert)
+ public static final OptionKey<Integer> LoopHeaderAlignment = new OptionKey<>(16);
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/util/UnsafeArrayTypeWriter.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/util/UnsafeArrayTypeWriter.java Fri Jul 26 19:11:34 2019 -0400
@@ -32,6 +32,8 @@
import static org.graalvm.compiler.core.common.util.TypeConversion.asU4;
import static org.graalvm.compiler.serviceprovider.GraalUnsafeAccess.getUnsafe;
+import java.nio.ByteBuffer;
+
import org.graalvm.compiler.core.common.calc.UnsignedMath;
import sun.misc.Unsafe;
@@ -103,6 +105,17 @@
return result;
}
+ /** Copies the buffer into the provided ByteBuffer at its current position. */
+ public final ByteBuffer toByteBuffer(ByteBuffer buffer) {
+ assert buffer.remaining() <= totalSize;
+ int initialPos = buffer.position();
+ for (Chunk cur = firstChunk; cur != null; cur = cur.next) {
+ buffer.put(cur.data, 0, cur.size);
+ }
+ assert buffer.position() - initialPos == totalSize;
+ return buffer;
+ }
+
@Override
public final void putS1(long value) {
long offset = writeOffset(Byte.BYTES);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.sparc/src/org/graalvm/compiler/core/sparc/SPARCArithmeticLIRGenerator.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.sparc/src/org/graalvm/compiler/core/sparc/SPARCArithmeticLIRGenerator.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2019, 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.sparc/src/org/graalvm/compiler/core/sparc/SparcLoweringProviderMixin.java Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2019, 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 org.graalvm.compiler.core.sparc;
+
+import org.graalvm.compiler.nodes.spi.LoweringProvider;
+
+public interface SparcLoweringProviderMixin extends LoweringProvider {
+
+ @Override
+ default Integer smallestCompareWidth() {
+ return 32;
+ }
+
+ @Override
+ default boolean supportBulkZeroing() {
+ return false;
+ }
+}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/ConditionalEliminationPiTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/ConditionalEliminationPiTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -63,4 +63,3 @@
test("testSnippet1", 1);
}
}
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/ConditionalNodeTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/ConditionalNodeTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -24,6 +24,7 @@
package org.graalvm.compiler.core.test;
+import org.graalvm.compiler.nodes.CallTargetNode.InvokeKind;
import org.junit.Test;
public class ConditionalNodeTest extends GraalCompilerTest {
@@ -106,4 +107,23 @@
sink0 = 1;
return Math.min(-1, value);
}
+
+ @Test
+ public void test4() {
+ test("conditionalTest4", this, 0);
+ test("conditionalTest4", this, 1);
+ }
+
+ int a;
+ InvokeKind b;
+
+ public static int conditionalTest4(ConditionalNodeTest node, int a) {
+ if (a == 1) {
+ node.b = InvokeKind.Virtual;
+ } else {
+ node.b = InvokeKind.Special;
+ }
+ node.a = a;
+ return a;
+ }
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/DumpPathTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/DumpPathTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -53,17 +53,18 @@
String[] extensions = new String[]{".cfg", ".bgv", ".graph-strings"};
EconomicMap<OptionKey<?>, Object> overrides = OptionValues.newOptionMap();
overrides.put(DebugOptions.DumpPath, dumpDirectoryPath.toString());
+ overrides.put(DebugOptions.PrintCFG, true);
overrides.put(DebugOptions.PrintGraph, PrintGraphTarget.File);
overrides.put(DebugOptions.PrintCanonicalGraphStrings, true);
overrides.put(DebugOptions.Dump, "*");
// Generate dump files.
test(new OptionValues(getInitialOptions(), overrides), "snippet");
- // Check that Ideal files got created, in the right place.
+ // Check that IGV files got created, in the right place.
checkForFiles(dumpDirectoryPath, extensions);
// Clean up the generated files.
- scrubDirectory(dumpDirectoryPath);
+ removeDirectory(dumpDirectoryPath);
}
/**
@@ -92,24 +93,4 @@
assertTrue(paths[0].equals(paths[i]), paths[0] + " != " + paths[i]);
}
}
-
- /**
- * Remove the temporary directory.
- */
- private static void scrubDirectory(Path directoryPath) {
- try {
- try (DirectoryStream<Path> stream = Files.newDirectoryStream(directoryPath)) {
- for (Path filePath : stream) {
- if (Files.isRegularFile(filePath)) {
- Files.delete(filePath);
- } else if (Files.isDirectory(filePath)) {
- scrubDirectory(filePath);
- }
- }
- }
- Files.delete(directoryPath);
- } catch (IOException ioe) {
- ioe.printStackTrace();
- }
- }
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/FindUniqueConcreteMethodBugTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/FindUniqueConcreteMethodBugTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -29,7 +29,6 @@
import jdk.vm.ci.meta.ResolvedJavaType;
import org.junit.Assert;
-import org.junit.Ignore;
import org.junit.Test;
public class FindUniqueConcreteMethodBugTest extends GraalCompilerTest {
@@ -44,7 +43,6 @@
* {@link PersonImpl#getName()} and {@link Tenant#getName()}).
*/
@Test
- @Ignore("fix HotSpotResolvedObjectTypeImpl.findUniqueConcreteMethod")
public void test() throws NoSuchMethodException {
ResolvedJavaMethod ifaceMethod = getMetaAccess().lookupJavaMethod(Person.class.getDeclaredMethod("getName"));
@@ -64,9 +62,8 @@
// this causes a VM crash as getLabelLength() directly invokes PersonImpl.getName().
test("getLabelLength", tenant);
- ResolvedJavaMethod expected = null;
AssumptionResult<ResolvedJavaMethod> actual = getMetaAccess().lookupJavaType(AbstractPerson.class).findUniqueConcreteMethod(ifaceMethod);
- Assert.assertEquals(expected, actual.getResult());
+ Assert.assertNull(String.valueOf(actual), actual);
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/GraalCompilerTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/GraalCompilerTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -1116,8 +1116,14 @@
return graph;
}
+ @SuppressWarnings("try")
protected void applyFrontEnd(StructuredGraph graph) {
- GraalCompiler.emitFrontEnd(getProviders(), getBackend(), graph, getDefaultGraphBuilderSuite(), getOptimisticOptimizations(), graph.getProfilingInfo(), createSuites(graph.getOptions()));
+ DebugContext debug = graph.getDebug();
+ try (DebugContext.Scope s = debug.scope("FrontEnd", graph)) {
+ GraalCompiler.emitFrontEnd(getProviders(), getBackend(), graph, getDefaultGraphBuilderSuite(), getOptimisticOptimizations(), graph.getProfilingInfo(), createSuites(graph.getOptions()));
+ } catch (Throwable e) {
+ throw debug.handle(e);
+ }
}
protected StructuredGraph lastCompiledGraph;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/SwitchFoldingTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,491 @@
+/*
+ * Copyright (c) 2019, 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 org.graalvm.compiler.core.test;
+
+import org.graalvm.compiler.debug.DebugContext;
+import org.graalvm.compiler.nodes.StructuredGraph;
+import org.graalvm.compiler.phases.common.CanonicalizerPhase;
+import org.junit.Test;
+
+public class SwitchFoldingTest extends GraalCompilerTest {
+
+ private static final String REFERENCE_SNIPPET = "referenceSnippet";
+ private static final String REFERENCE_SNIPPET_2 = "reference2Snippet";
+ private static final String REFERENCE_SNIPPET_3 = "reference3Snippet";
+ private static final String REFERENCE_SNIPPET_4 = "reference4Snippet";
+ private static final String REFERENCE_SNIPPET_5 = "reference5Snippet";
+
+ public static int referenceSnippet(int a) {
+ switch (a) {
+ case 0:
+ return 10;
+ case 1:
+ return 5;
+ case 2:
+ return 3;
+ case 3:
+ return 11;
+ case 4:
+ return 14;
+ case 5:
+ return 2;
+ case 6:
+ return 1;
+ case 7:
+ return 0;
+ case 8:
+ return 7;
+ default:
+ return 6;
+ }
+ }
+
+ public static int reference2Snippet(int a) {
+ switch (a) {
+ case 0:
+ return 4;
+ case 1:
+ case 2:
+ return 1;
+ case 3:
+ return 6;
+ default:
+ return 7;
+ }
+ }
+
+ public static int reference3Snippet(int a) {
+ switch (a) {
+ case 0:
+ return 4;
+ case 1:
+ case 2:
+ case 4:
+ return 6;
+ case 6:
+ case 7:
+ default:
+ return 7;
+ }
+ }
+
+ public static int test1Snippet(int a) {
+ if (a == 0) {
+ return 10;
+ } else if (a == 1) {
+ return 5;
+ } else if (a == 2) {
+ return 3;
+ } else if (a == 3) {
+ return 11;
+ } else if (a == 4) {
+ return 14;
+ } else if (a == 5) {
+ return 2;
+ } else if (a == 6) {
+ return 1;
+ } else if (a == 7) {
+ return 0;
+ } else if (a == 8) {
+ return 7;
+ } else {
+ return 6;
+ }
+ }
+
+ @Test
+ public void test1() {
+ test1("test1Snippet");
+ }
+
+ public static int test2Snippet(int a) {
+ switch (a) {
+ case 0:
+ return 10;
+ case 1:
+ return 5;
+ case 2:
+ return 3;
+ case 3:
+ return 11;
+ case 4:
+ return 14;
+ default:
+ switch (a) {
+ case 5:
+ return 2;
+ case 6:
+ return 1;
+ case 7:
+ return 0;
+ case 8:
+ return 7;
+ default:
+ return 6;
+ }
+ }
+ }
+
+ @Test
+ public void test2() {
+ test1("test2Snippet");
+ }
+
+ public static int test3Snippet(int a) {
+ switch (a) {
+ case 0:
+ return 10;
+ default:
+ switch (a) {
+ case 1:
+ return 5;
+ default:
+ switch (a) {
+ case 2:
+ return 3;
+ default:
+ switch (a) {
+ case 3:
+ return 11;
+ default:
+ switch (a) {
+ case 4:
+ return 14;
+ default:
+ switch (a) {
+ case 5:
+ return 2;
+ default:
+ switch (a) {
+ case 6:
+ return 1;
+ default:
+ switch (a) {
+ case 7:
+ return 0;
+ default:
+ switch (a) {
+ case 8:
+ return 7;
+ default:
+ return 6;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ public void test3() {
+ test1("test3Snippet");
+ }
+
+ public static int test4Snippet(int a) {
+ switch (a) {
+ case 0:
+ return 10;
+ case 1:
+ return 5;
+ case 2:
+ return 3;
+ case 3:
+ return 11;
+ case 4:
+ return 14;
+ case 5:
+ return 2;
+ case 6:
+ return 1;
+ default:
+ if (a == 7) {
+ return 0;
+ } else if (a == 8) {
+ return 7;
+ } else {
+ return 6;
+ }
+ }
+ }
+
+ @Test
+ public void test4() {
+ test1("test4Snippet");
+ }
+
+ public static int test5Snippet(int a) {
+ switch (a) {
+ case 0:
+ return 10;
+ default:
+ switch (a) {
+ case 1:
+ return 5;
+ default:
+ switch (a) {
+ case 2:
+ return 3;
+ default:
+ switch (a) {
+ case 3:
+ return 11;
+ default:
+ switch (a) {
+ case 4:
+ return 14;
+ default:
+ switch (a) {
+ case 5:
+ return 2;
+ default:
+ switch (a) {
+ case 6:
+ return 1;
+ default:
+ if (a == 7) {
+ return 0;
+ } else if (a == 8) {
+ return 7;
+ } else {
+ return 6;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ public void test5() {
+ test1("test5Snippet");
+ }
+
+ public static int test6Snippet(int a) {
+ if (a == 0) {
+ return 10;
+ } else {
+ switch (a) {
+ case 1:
+ return 5;
+ default:
+ if (a == 2) {
+ return 3;
+ } else if (a == 3) {
+ return 11;
+ } else {
+ switch (a) {
+ case 4:
+ return 14;
+ case 5:
+ return 2;
+ case 6:
+ return 1;
+ default:
+ if (a == 7) {
+ return 0;
+ } else if (a == 8) {
+ return 7;
+ } else {
+ return 6;
+ }
+ }
+ }
+
+ }
+ }
+ }
+
+ @Test
+ public void test6() {
+ test1("test6Snippet");
+ }
+
+ public static int test7Snippet(int a) {
+ if (a == 0) {
+ return 4;
+ } else {
+ switch (a) {
+ case 1:
+ case 2:
+ return 1;
+ case 3:
+ return 6;
+ default:
+ return 7;
+ }
+ }
+ }
+
+ @Test
+ public void test7() {
+ test2("test7Snippet");
+ }
+
+ public static int test8Snippet(int a) {
+ switch (a) {
+ case 0:
+ return 4;
+ case 1:
+ case 2:
+ case 7:
+ default:
+ switch (a) {
+ case 2:
+ case 6:
+ default:
+ switch (a) {
+ case 1:
+ case 2:
+ case 4:
+ return 6;
+ default:
+ return 7;
+ }
+ }
+ }
+ }
+
+ @Test
+ public void test8() {
+ test3("test8Snippet");
+ }
+
+ public static int reference4Snippet(int a) {
+ switch (a) {
+ case 0:
+ return 4;
+ case 1:
+ case 2:
+ case 4:
+ return 6;
+ case 6:
+ return 7;
+ case 7:
+ return 7;
+ default:
+ return 7;
+ }
+ }
+
+ public static int test9Snippet(int a) {
+ switch (a) {
+ case 0:
+ return 4;
+ case 1:
+ case 2:
+ case 4:
+ return 6;
+ case 6:
+ case 7:
+ default:
+ if (a == 6) {
+ return 7;
+ } else if (a == 7) {
+ return 7;
+ } else {
+ return 7;
+ }
+ }
+ }
+
+ @Test
+ public void test9() {
+ test4("test9Snippet");
+ }
+
+ public static int reference5Snippet(int a) {
+ switch (a) {
+ case 0:
+ return 4;
+ case 1:
+ return 1;
+ case 2:
+ return 1;
+ case 3:
+ return 6;
+ default:
+ return 7;
+ }
+ }
+
+ public static int test10Snippet(int a) {
+ if (a == 0) {
+ return 4;
+ } else {
+ if (a == 1 || a == 2) {
+ return 1;
+ } else {
+ switch (a) {
+ case 3:
+ return 6;
+ default:
+ return 7;
+ }
+ }
+ }
+ }
+
+ @Test
+ public void test10() {
+ test5("test10Snippet");
+ }
+
+ private void test1(String snippet) {
+ test(snippet, REFERENCE_SNIPPET);
+ }
+
+ private void test2(String snippet) {
+ test(snippet, REFERENCE_SNIPPET_2);
+ }
+
+ private void test3(String snippet) {
+ test(snippet, REFERENCE_SNIPPET_3);
+ }
+
+ private void test4(String snippet) {
+ test(snippet, REFERENCE_SNIPPET_4);
+ }
+
+ private void test5(String snippet) {
+ test(snippet, REFERENCE_SNIPPET_5);
+ }
+
+ private void test(String snippet, String ref) {
+ StructuredGraph graph = parseEager(snippet, StructuredGraph.AllowAssumptions.YES);
+ DebugContext debug = graph.getDebug();
+ debug.dump(DebugContext.BASIC_LEVEL, graph, "Graph");
+ new CanonicalizerPhase().apply(graph, getProviders());
+ StructuredGraph referenceGraph = parseEager(ref, StructuredGraph.AllowAssumptions.YES);
+ assertEquals(referenceGraph, graph);
+ }
+}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/backend/BackendTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/backend/BackendTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -45,10 +45,10 @@
}
@SuppressWarnings("try")
- protected LIRGenerationResult getLIRGenerationResult(final StructuredGraph graph) {
+ protected LIRGenerationResult getLIRGenerationResult(final StructuredGraph graph, OptimisticOptimizations optimizations) {
DebugContext debug = graph.getDebug();
try (DebugContext.Scope s = debug.scope("FrontEnd")) {
- GraalCompiler.emitFrontEnd(getProviders(), getBackend(), graph, getDefaultGraphBuilderSuite(), OptimisticOptimizations.NONE, graph.getProfilingInfo(), createSuites(graph.getOptions()));
+ GraalCompiler.emitFrontEnd(getProviders(), getBackend(), graph, getDefaultGraphBuilderSuite(), optimizations, graph.getProfilingInfo(), createSuites(graph.getOptions()));
} catch (Throwable e) {
throw debug.handle(e);
}
@@ -57,4 +57,7 @@
return lirGen;
}
+ protected LIRGenerationResult getLIRGenerationResult(final StructuredGraph graph) {
+ return getLIRGenerationResult(graph, OptimisticOptimizations.NONE);
+ }
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/CompilationWrapper.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/CompilationWrapper.java Fri Jul 26 19:11:34 2019 -0400
@@ -302,10 +302,16 @@
}
}
+ /**
+ * Calls {@link System#exit(int)} in the runtime embedding the Graal compiler. This will be a
+ * different runtime than Graal's runtime in the case of libgraal.
+ */
+ protected abstract void exitHostVM(int status);
+
private void maybeExitVM(ExceptionAction action) {
if (action == ExitVM) {
TTY.println("Exiting VM after retry compilation of " + this);
- System.exit(-1);
+ exitHostVM(-1);
}
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/gen/DebugInfoBuilder.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/gen/DebugInfoBuilder.java Fri Jul 26 19:11:34 2019 -0400
@@ -156,10 +156,6 @@
}
assert checkValues(vobjValue.getType(), values, slotKinds);
vobjValue.setValues(values, slotKinds);
-
- if (vobjNode instanceof VirtualBoxingNode) {
- GraalServices.markVirtualObjectAsAutoBox(vobjValue);
- }
}
virtualObjectsArray = new VirtualObject[virtualObjects.size()];
@@ -323,7 +319,8 @@
assert obj.entryCount() == 0 || state instanceof VirtualObjectState;
VirtualObject vobject = virtualObjects.get(obj);
if (vobject == null) {
- vobject = VirtualObject.get(obj.type(), virtualObjects.size());
+ boolean isAutoBox = obj instanceof VirtualBoxingNode;
+ vobject = GraalServices.createVirtualObject(obj.type(), virtualObjects.size(), isAutoBox);
virtualObjects.put(obj, vobject);
pendingVirtualObjects.add(obj);
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/gen/NodeLIRBuilder.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/gen/NodeLIRBuilder.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2019, 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
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/target/Backend.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/target/Backend.java Fri Jul 26 19:11:34 2019 -0400
@@ -257,7 +257,6 @@
* @throws BailoutException if the code installation failed
*/
public InstalledCode createDefaultInstalledCode(DebugContext debug, ResolvedJavaMethod method, CompilationResult compilationResult) {
- System.out.println(compilationResult.getSpeculationLog());
return createInstalledCode(debug, method, compilationResult, null, true);
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/Node.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/Node.java Fri Jul 26 19:11:34 2019 -0400
@@ -818,22 +818,24 @@
private void replaceAtMatchingUsages(Node other, Predicate<Node> filter, Node toBeDeleted) {
if (filter == null) {
- fail("filter cannot be null");
+ throw fail("filter cannot be null");
}
checkReplaceWith(other);
int i = 0;
- while (i < this.getUsageCount()) {
+ int usageCount = this.getUsageCount();
+ while (i < usageCount) {
Node usage = this.getUsageAt(i);
if (filter.test(usage)) {
replaceAtUsage(other, toBeDeleted, usage);
this.movUsageFromEndTo(i);
+ usageCount--;
} else {
++i;
}
}
}
- public Node getUsageAt(int index) {
+ private Node getUsageAt(int index) {
if (index == 0) {
return this.usage0;
} else if (index == 1) {
@@ -848,14 +850,35 @@
replaceAtMatchingUsages(other, usagePredicate, null);
}
+ private void replaceAtUsagePos(Node other, Node usage, Position pos) {
+ pos.initialize(usage, other);
+ maybeNotifyInputChanged(usage);
+ if (other != null) {
+ other.addUsage(usage);
+ }
+ }
+
public void replaceAtUsages(InputType type, Node other) {
checkReplaceWith(other);
- for (Node usage : usages().snapshot()) {
+ int i = 0;
+ int usageCount = this.getUsageCount();
+ if (usageCount == 0) {
+ return;
+ }
+ usages: while (i < usageCount) {
+ Node usage = this.getUsageAt(i);
for (Position pos : usage.inputPositions()) {
if (pos.getInputType() == type && pos.get(usage) == this) {
- pos.set(usage, other);
+ replaceAtUsagePos(other, usage, pos);
+ this.movUsageFromEndTo(i);
+ usageCount--;
+ continue usages;
}
}
+ i++;
+ }
+ if (hasNoUsages()) {
+ maybeNotifyZeroUsages(this);
}
}
@@ -913,6 +936,14 @@
}
}
+ public void replaceFirstInput(Node oldInput, Node newInput, InputType type) {
+ for (Position pos : inputPositions()) {
+ if (pos.getInputType() == type && pos.get(this) == oldInput) {
+ pos.set(this, newInput);
+ }
+ }
+ }
+
public void clearInputs() {
assert assertFalse(isDeleted(), "cannot clear inputs of deleted node");
getNodeClass().unregisterAtInputsAsUsage(this);
@@ -1059,6 +1090,8 @@
assertFalse(input.isDeleted(), "input was deleted %s", input);
assertTrue(input.isAlive(), "input is not alive yet, i.e., it was not yet added to the graph");
assertTrue(pos.getInputType() == InputType.Unchecked || input.isAllowedUsageType(pos.getInputType()), "invalid usage type %s %s", input, pos.getInputType());
+ Class<?> expectedType = pos.getType();
+ assertTrue(expectedType.isAssignableFrom(input.getClass()), "Invalid input type for %s: expected a %s but was a %s", pos, expectedType, input.getClass());
}
}
return true;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/NodeClass.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/NodeClass.java Fri Jul 26 19:11:34 2019 -0400
@@ -126,7 +126,7 @@
field.setAccessible(true);
return (NodeClass<T>) field.get(null);
} catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) {
- throw new RuntimeException(e);
+ throw new RuntimeException("Could not load Graal NodeClass TYPE field for " + clazz, e);
}
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/NodeMap.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/NodeMap.java Fri Jul 26 19:11:34 2019 -0400
@@ -127,6 +127,7 @@
private boolean check(Node node) {
assert node.graph() == graph : String.format("%s is not part of the graph", node);
assert !isNew(node) : "this node was added to the graph after creating the node map : " + node;
+ assert node.isAlive() : "this node is not alive: " + node;
return true;
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/Position.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/Position.java Fri Jul 26 19:11:34 2019 -0400
@@ -146,4 +146,12 @@
public int getIndex() {
return index;
}
+
+ public Class<?> getType() {
+ if (index < edges.getDirectCount()) {
+ return edges.getType(index);
+ } else {
+ return Node.class;
+ }
+ }
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotBackend.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotBackend.java Fri Jul 26 19:11:34 2019 -0400
@@ -49,6 +49,7 @@
import org.graalvm.compiler.core.common.alloc.RegisterAllocationConfig;
import org.graalvm.compiler.core.common.spi.ForeignCallLinkage;
import org.graalvm.compiler.core.gen.LIRGenerationProvider;
+import org.graalvm.compiler.debug.DebugContext;
import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
import org.graalvm.compiler.hotspot.HotSpotDataBuilder;
import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider;
@@ -72,12 +73,16 @@
import org.graalvm.compiler.lir.gen.LIRGeneratorTool;
import org.graalvm.compiler.nodes.StructuredGraph;
import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
+import org.graalvm.compiler.serviceprovider.GraalUnsafeAccess;
import jdk.vm.ci.aarch64.AArch64Kind;
import jdk.vm.ci.code.CallingConvention;
+import jdk.vm.ci.code.CompilationRequest;
+import jdk.vm.ci.code.InstalledCode;
import jdk.vm.ci.code.Register;
import jdk.vm.ci.code.RegisterConfig;
import jdk.vm.ci.code.StackSlot;
+import jdk.vm.ci.code.site.Mark;
import jdk.vm.ci.hotspot.HotSpotCallingConventionType;
import jdk.vm.ci.hotspot.HotSpotSentinelConstant;
import jdk.vm.ci.hotspot.aarch64.AArch64HotSpotRegisterConfig;
@@ -85,6 +90,8 @@
import jdk.vm.ci.meta.JavaType;
import jdk.vm.ci.meta.ResolvedJavaMethod;
+import sun.misc.Unsafe;
+
/**
* HotSpot AArch64 specific backend.
*/
@@ -126,6 +133,46 @@
}
}
+ @Override
+ public InstalledCode createInstalledCode(DebugContext debug,
+ ResolvedJavaMethod method,
+ CompilationRequest compilationRequest,
+ CompilationResult compilationResult,
+ InstalledCode predefinedInstalledCode,
+ boolean isDefault,
+ Object[] context) {
+ boolean isStub = (method == null);
+ boolean isAOT = compilationResult.isImmutablePIC();
+ if (!isStub && !isAOT) {
+ // Non-stub compilation results are installed into HotSpot as nmethods. As AArch64 has
+ // a constraint that the instruction at nmethod verified entry point should be a nop or
+ // jump, AArch64HotSpotBackend always generate a nop placeholder before the code body
+ // for non-AOT compilations. See AArch64HotSpotBackend.emitInvalidatePlaceholder(). This
+ // assert checks if the nop placeholder is generated at all required places, including
+ // in manually assembled code in CodeGenTest cases.
+ assert hasInvalidatePlaceholder(compilationResult);
+ }
+ return super.createInstalledCode(debug, method, compilationRequest, compilationResult, predefinedInstalledCode, isDefault, context);
+ }
+
+ private boolean hasInvalidatePlaceholder(CompilationResult compilationResult) {
+ byte[] targetCode = compilationResult.getTargetCode();
+ int verifiedEntryOffset = 0;
+ for (Mark mark : compilationResult.getMarks()) {
+ Object markId = mark.id;
+ if (markId instanceof Integer && (int) markId == config.MARKID_VERIFIED_ENTRY) {
+ // The nmethod verified entry is located at some pc offset.
+ verifiedEntryOffset = mark.pcOffset;
+ break;
+ }
+ }
+ Unsafe unsafe = GraalUnsafeAccess.getUnsafe();
+ int instruction = unsafe.getIntVolatile(targetCode, unsafe.arrayBaseOffset(byte[].class) + verifiedEntryOffset);
+ AArch64MacroAssembler masm = new AArch64MacroAssembler(getTarget());
+ masm.nop();
+ return instruction == masm.getInt(0);
+ }
+
private class HotSpotFrameContext implements FrameContext {
final boolean isStub;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotBackendFactory.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotBackendFactory.java Fri Jul 26 19:11:34 2019 -0400
@@ -29,6 +29,7 @@
import static jdk.vm.ci.common.InitTimer.timer;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import org.graalvm.compiler.bytecode.BytecodeProvider;
@@ -193,7 +194,7 @@
protected HotSpotSuitesProvider createSuites(GraalHotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, CompilerConfiguration compilerConfiguration, Plugins plugins,
@SuppressWarnings("unused") Replacements replacements) {
- AArch64SuitesCreator suitesCreator = new AArch64SuitesCreator(compilerConfiguration, plugins, SchedulePhase.class);
+ AArch64SuitesCreator suitesCreator = new AArch64SuitesCreator(compilerConfiguration, plugins, Arrays.asList(SchedulePhase.class));
Phase addressLoweringPhase = new AddressLoweringByUsePhase(new AArch64AddressLoweringByUse(new AArch64LIRKindTool()));
return new AddressLoweringHotSpotSuitesProvider(suitesCreator, config, runtime, addressLoweringPhase);
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotLoweringProvider.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotLoweringProvider.java Fri Jul 26 19:11:34 2019 -0400
@@ -25,6 +25,7 @@
package org.graalvm.compiler.hotspot.aarch64;
+import org.graalvm.compiler.core.aarch64.AArch64LoweringProviderMixin;
import org.graalvm.compiler.core.common.spi.ForeignCallsProvider;
import org.graalvm.compiler.debug.DebugHandlersFactory;
import org.graalvm.compiler.graph.Node;
@@ -45,7 +46,7 @@
import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider;
import jdk.vm.ci.meta.MetaAccessProvider;
-public class AArch64HotSpotLoweringProvider extends DefaultHotSpotLoweringProvider {
+public class AArch64HotSpotLoweringProvider extends DefaultHotSpotLoweringProvider implements AArch64LoweringProviderMixin {
private AArch64IntegerArithmeticSnippets integerArithmeticSnippets;
private AArch64FloatArithmeticSnippets floatArithmeticSnippets;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotLoweringProvider.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotLoweringProvider.java Fri Jul 26 19:11:34 2019 -0400
@@ -27,6 +27,7 @@
import static org.graalvm.compiler.hotspot.HotSpotBackend.Options.GraalArithmeticStubs;
import org.graalvm.compiler.api.replacements.Snippet;
+import org.graalvm.compiler.core.amd64.AMD64LoweringProviderMixin;
import org.graalvm.compiler.core.common.spi.ForeignCallsProvider;
import org.graalvm.compiler.debug.DebugHandlersFactory;
import org.graalvm.compiler.graph.Node;
@@ -53,7 +54,7 @@
import jdk.vm.ci.meta.MetaAccessProvider;
import jdk.vm.ci.meta.ResolvedJavaMethod;
-public class AMD64HotSpotLoweringProvider extends DefaultHotSpotLoweringProvider {
+public class AMD64HotSpotLoweringProvider extends DefaultHotSpotLoweringProvider implements AMD64LoweringProviderMixin {
private AMD64ConvertSnippets.Templates convertSnippets;
private ProbabilisticProfileSnippets.Templates profileSnippets;
@@ -135,14 +136,4 @@
ForeignCallNode call = graph.add(new ForeignCallNode(foreignCalls, dispatchNode.getStubCallDescriptor(), dispatchNode.getStubCallArgs()));
graph.replaceFixed(dispatchNode, call);
}
-
- @Override
- public Integer smallestCompareWidth() {
- return 8;
- }
-
- @Override
- public boolean supportBulkZeroing() {
- return true;
- }
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotStrategySwitchOp.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotStrategySwitchOp.java Fri Jul 26 19:11:34 2019 -0400
@@ -34,7 +34,7 @@
import jdk.vm.ci.code.Register;
import jdk.vm.ci.code.ValueUtil;
-import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant;
+import jdk.vm.ci.hotspot.HotSpotConstant;
import jdk.vm.ci.meta.Constant;
import jdk.vm.ci.meta.Value;
@@ -58,8 +58,8 @@
@Override
protected void emitComparison(Constant c) {
- if (c instanceof HotSpotMetaspaceConstant) {
- HotSpotMetaspaceConstant meta = (HotSpotMetaspaceConstant) c;
+ if (c instanceof HotSpotConstant) {
+ HotSpotConstant meta = (HotSpotConstant) c;
if (meta.isCompressed()) {
crb.recordInlineDataInCode(meta);
masm.cmpl(keyRegister, 0xDEADDEAD);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.lir.test/src/org/graalvm/compiler/hotspot/lir/test/BenchmarkCounterOverflowTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.lir.test/src/org/graalvm/compiler/hotspot/lir/test/BenchmarkCounterOverflowTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -28,6 +28,7 @@
import static org.graalvm.compiler.test.SubprocessUtil.withoutDebuggerArguments;
import java.io.File;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -100,7 +101,7 @@
}
@Test
- public void spawnSubprocess() throws Throwable {
+ public void spawnSubprocess() throws IOException, InterruptedException {
Assume.assumeFalse("subprocess already spawned -> skip", Boolean.getBoolean(SUBPROCESS_PROPERTY));
List<String> vmArgs = withoutDebuggerArguments(getVMCommandLine());
vmArgs.add("-XX:JVMCICounterSize=1");
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.lir.test/src/org/graalvm/compiler/hotspot/lir/test/ExceedMaxOopMapStackOffset.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.lir.test/src/org/graalvm/compiler/hotspot/lir/test/ExceedMaxOopMapStackOffset.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -120,7 +120,7 @@
}
@Test
- public void runStackObjects() throws Throwable {
+ public void runStackObjects() {
int max = ((HotSpotBackend) getBackend()).getRuntime().getVMConfig().maxOopMapStackOffset;
if (max == Integer.MAX_VALUE) {
max = 16 * 1024 - 64;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.lir.test/src/org/graalvm/compiler/hotspot/lir/test/MitigateExceedingMaxOopMapStackOffsetTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.lir.test/src/org/graalvm/compiler/hotspot/lir/test/MitigateExceedingMaxOopMapStackOffsetTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -153,7 +153,7 @@
}
@Test
- public void runStackObjects() throws Throwable {
+ public void runStackObjects() {
int max = ((HotSpotBackend) getBackend()).getRuntime().getVMConfig().maxOopMapStackOffset;
Assume.assumeFalse("no limit on oop map size", max == Integer.MAX_VALUE);
numPrimitiveSlots = (max / 8) * 2;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.sparc/src/org/graalvm/compiler/hotspot/sparc/SPARCHotSpotLoweringProvider.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.sparc/src/org/graalvm/compiler/hotspot/sparc/SPARCHotSpotLoweringProvider.java Fri Jul 26 19:11:34 2019 -0400
@@ -25,6 +25,7 @@
package org.graalvm.compiler.hotspot.sparc;
import org.graalvm.compiler.core.common.spi.ForeignCallsProvider;
+import org.graalvm.compiler.core.sparc.SparcLoweringProviderMixin;
import org.graalvm.compiler.graph.Node;
import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider;
import org.graalvm.compiler.hotspot.meta.DefaultHotSpotLoweringProvider;
@@ -36,7 +37,7 @@
import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider;
import jdk.vm.ci.meta.MetaAccessProvider;
-public class SPARCHotSpotLoweringProvider extends DefaultHotSpotLoweringProvider {
+public class SPARCHotSpotLoweringProvider extends DefaultHotSpotLoweringProvider implements SparcLoweringProviderMixin {
public SPARCHotSpotLoweringProvider(HotSpotGraalRuntimeProvider runtime, MetaAccessProvider metaAccess, ForeignCallsProvider foreignCalls, HotSpotRegistersProvider registers,
HotSpotConstantReflectionProvider constantReflection, TargetDescription target) {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/BoxDeoptimizationTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/BoxDeoptimizationTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -24,85 +24,97 @@
package org.graalvm.compiler.hotspot.test;
+import static org.graalvm.compiler.serviceprovider.JavaVersionUtil.JAVA_SPEC;
+
import org.graalvm.compiler.api.directives.GraalDirectives;
import org.graalvm.compiler.core.test.GraalCompilerTest;
-import org.graalvm.compiler.serviceprovider.JavaVersionUtil;
import org.junit.Assert;
import org.junit.Assume;
import org.junit.Test;
public class BoxDeoptimizationTest extends GraalCompilerTest {
- private static boolean isJDK13OrLater = JavaVersionUtil.JAVA_SPEC >= 13;
- public static void testInteger() {
- Object[] values = {42, new Exception()};
+ private static void checkJDK() {
+ Assume.assumeTrue(JAVA_SPEC == 8 || JAVA_SPEC >= 13);
+ }
+
+ public static void testIntegerSnippet() {
+ Object[] values = {42, -42, new Exception()};
GraalDirectives.deoptimize();
Assert.assertSame(values[0], Integer.valueOf(42));
+ Assert.assertSame(values[1], Integer.valueOf(-42));
}
@Test
- public void test1() {
- Assume.assumeTrue(isJDK13OrLater);
- test("testInteger");
+ public void testInteger() {
+ checkJDK();
+ test("testIntegerSnippet");
}
- public static void testLong() {
- Object[] values = {42L, new Exception()};
+ public static void testLongSnippet() {
+ long highBitsOnly = 2L << 40;
+ Object[] values = {42L, -42L, highBitsOnly, new Exception()};
GraalDirectives.deoptimize();
Assert.assertSame(values[0], Long.valueOf(42));
+ Assert.assertSame(values[1], Long.valueOf(-42));
+ Assert.assertNotSame(values[2], highBitsOnly);
}
@Test
- public void test2() {
- Assume.assumeTrue(isJDK13OrLater);
- test("testLong");
+ public void testLong() {
+ checkJDK();
+ test("testLongSnippet");
}
- public static void testChar() {
- Object[] values = {'a', new Exception()};
+ public static void testCharSnippet() {
+ Object[] values = {'a', 'Z', new Exception()};
GraalDirectives.deoptimize();
Assert.assertSame(values[0], Character.valueOf('a'));
+ Assert.assertSame(values[1], Character.valueOf('Z'));
}
@Test
- public void test3() {
- Assume.assumeTrue(isJDK13OrLater);
- test("testChar");
+ public void testChar() {
+ checkJDK();
+ test("testCharSnippet");
}
- public static void testShort() {
- Object[] values = {(short) 42, new Exception()};
+ public static void testShortSnippet() {
+ Object[] values = {(short) 42, (short) -42, new Exception()};
GraalDirectives.deoptimize();
Assert.assertSame(values[0], Short.valueOf((short) 42));
+ Assert.assertSame(values[1], Short.valueOf((short) -42));
}
@Test
- public void test4() {
- Assume.assumeTrue(isJDK13OrLater);
- test("testShort");
+ public void testShort() {
+ checkJDK();
+ test("testShortSnippet");
}
- public static void testByte() {
- Object[] values = {(byte) 42, new Exception()};
+ public static void testByteSnippet() {
+ Object[] values = {(byte) 42, (byte) -42, new Exception()};
GraalDirectives.deoptimize();
Assert.assertSame(values[0], Byte.valueOf((byte) 42));
+ Assert.assertSame(values[1], Byte.valueOf((byte) -42));
}
@Test
- public void test5() {
- Assume.assumeTrue(isJDK13OrLater);
- test("testByte");
+ public void testByte() {
+ checkJDK();
+ test("testByteSnippet");
}
- public static void testBoolean() {
- Object[] values = {true, new Exception()};
+ public static void testBooleanSnippet() {
+ Object[] values = {true, false, new Exception()};
GraalDirectives.deoptimize();
Assert.assertSame(values[0], Boolean.valueOf(true));
+ Assert.assertSame(values[1], Boolean.valueOf(false));
}
@Test
- public void test6() {
- Assume.assumeTrue(isJDK13OrLater);
- test("testBoolean");
+ public void testBoolean() {
+ checkJDK();
+ test("testBooleanSnippet");
}
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CheckGraalIntrinsics.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CheckGraalIntrinsics.java Fri Jul 26 19:11:34 2019 -0400
@@ -24,6 +24,9 @@
package org.graalvm.compiler.hotspot.test;
+import static org.graalvm.compiler.hotspot.meta.HotSpotGraphBuilderPlugins.aesDecryptName;
+import static org.graalvm.compiler.hotspot.meta.HotSpotGraphBuilderPlugins.aesEncryptName;
+
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
@@ -41,6 +44,7 @@
import org.graalvm.compiler.api.test.Graal;
import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider;
+import org.graalvm.compiler.hotspot.meta.HotSpotGraphBuilderPlugins;
import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin;
@@ -501,21 +505,17 @@
"java/util/zip/CRC32C.updateDirectByteBuffer(IJII)I");
}
+ boolean implNames = HotSpotGraphBuilderPlugins.cbcUsesImplNames(config);
+ String cbcEncryptName = implNames ? "implEncrypt" : "encrypt";
+ String cbcDecryptName = implNames ? "implDecrypt" : "decrypt";
+
// AES intrinsics
if (!config.useAESIntrinsics) {
- if (isJDK9OrHigher()) {
- add(ignore,
- "com/sun/crypto/provider/AESCrypt.implDecryptBlock([BI[BI)V",
- "com/sun/crypto/provider/AESCrypt.implEncryptBlock([BI[BI)V",
- "com/sun/crypto/provider/CipherBlockChaining.implDecrypt([BII[BI)I",
- "com/sun/crypto/provider/CipherBlockChaining.implEncrypt([BII[BI)I");
- } else {
- add(ignore,
- "com/sun/crypto/provider/AESCrypt.decryptBlock([BI[BI)V",
- "com/sun/crypto/provider/AESCrypt.encryptBlock([BI[BI)V",
- "com/sun/crypto/provider/CipherBlockChaining.decrypt([BII[BI)I",
- "com/sun/crypto/provider/CipherBlockChaining.encrypt([BII[BI)I");
- }
+ add(ignore,
+ "com/sun/crypto/provider/AESCrypt." + aesDecryptName + "([BI[BI)V",
+ "com/sun/crypto/provider/AESCrypt." + aesEncryptName + "([BI[BI)V",
+ "com/sun/crypto/provider/CipherBlockChaining." + cbcDecryptName + "([BII[BI)I",
+ "com/sun/crypto/provider/CipherBlockChaining." + cbcEncryptName + "([BII[BI)I");
}
// BigInteger intrinsics
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CompilationWrapperTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CompilationWrapperTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -29,6 +29,7 @@
import java.io.File;
import java.io.IOException;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -209,10 +210,9 @@
System.out.println(proc);
}
- List<Probe> probes = new ArrayList<>(initialProbes);
- Probe diagnosticProbe = null;
- if (!extraVmArgs.contains("-Dgraal.TruffleCompilationExceptionsAreFatal=true")) {
- diagnosticProbe = new Probe("Graal diagnostic output saved in ", 1);
+ try {
+ List<Probe> probes = new ArrayList<>(initialProbes);
+ Probe diagnosticProbe = new Probe("Graal diagnostic output saved in ", 1);
probes.add(diagnosticProbe);
probes.add(new Probe("Forced crash after compiling", Integer.MAX_VALUE) {
@Override
@@ -220,22 +220,20 @@
return actualOccurrences > 0 ? null : "expected at least 1 occurrence";
}
});
- }
- for (String line : proc.output) {
- for (Probe probe : probes) {
- if (probe.matches(line)) {
- break;
+ for (String line : proc.output) {
+ for (Probe probe : probes) {
+ if (probe.matches(line)) {
+ break;
+ }
}
}
- }
- for (Probe probe : probes) {
- String error = probe.test();
- if (error != null) {
- Assert.fail(String.format("Did not find expected occurences of '%s' in output of command: %s%n%s", probe.substring, error, proc));
+ for (Probe probe : probes) {
+ String error = probe.test();
+ if (error != null) {
+ Assert.fail(String.format("Did not find expected occurences of '%s' in output of command: %s%n%s", probe.substring, error, proc));
+ }
}
- }
- if (diagnosticProbe != null) {
String line = diagnosticProbe.lastMatchingLine;
int substringStart = line.indexOf(diagnosticProbe.substring);
int substringLength = diagnosticProbe.substring.length();
@@ -263,8 +261,10 @@
}
} finally {
zip.delete();
- dumpPath.delete();
}
+ } finally {
+ Path directory = dumpPath.toPath();
+ removeDirectory(directory);
}
}
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CompressedOopTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CompressedOopTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -313,8 +313,8 @@
Assert.assertTrue(buffer.length() == 28);
String a = new String("TestTestTestTestTestTestTest");
installedBenchmarkCode.executeVarargs(buffer, a.toCharArray());
- Assert.assertTrue(buffer.length() == 56);
- Assert.assertTrue(buffer.toString().equals("TestTestTestTestTestTestTestTestTestTestTestTestTestTest"));
+ Assert.assertEquals(56, buffer.length());
+ Assert.assertEquals("TestTestTestTestTestTestTestTestTestTestTestTestTestTest", buffer.toString());
}
public static void stringBuilderTest(Object c1, Object c2) {
@@ -339,8 +339,8 @@
for (int i = 0; i < add.length; i++) {
buffer.append(add[i]);
}
- Assert.assertTrue(buffer.length() == 56);
- Assert.assertTrue(buffer.toString().equals("TestTestTestTestTestTestTestTestTestTestTestTestTestTest"));
+ Assert.assertEquals(56, buffer.length());
+ Assert.assertEquals("TestTestTestTestTestTestTestTestTestTestTestTestTestTest", buffer.toString());
}
@Test
@@ -356,8 +356,8 @@
char[] dst = new char[buffer.length() * 2];
System.arraycopy(buffer.toString().toCharArray(), 0, dst, 0, buffer.length());
System.arraycopy(a.toCharArray(), 0, dst, buffer.length(), buffer.length());
- Assert.assertTrue(dst.length == 56);
- Assert.assertTrue(new String(dst).equals("TestTestTestTestTestTestTestTestTestTestTestTestTestTest"));
+ Assert.assertEquals(56, dst.length);
+ Assert.assertEquals("TestTestTestTestTestTestTestTestTestTestTestTestTestTest", new String(dst));
}
@Test
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/HotSpotCryptoSubstitutionTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/HotSpotCryptoSubstitutionTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -35,12 +35,11 @@
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
-import org.junit.Assert;
-import org.junit.Test;
-
import org.graalvm.compiler.code.CompilationResult;
import org.graalvm.compiler.debug.DebugContext;
import org.graalvm.compiler.hotspot.meta.HotSpotGraphBuilderPlugins;
+import org.junit.Assert;
+import org.junit.Test;
import jdk.vm.ci.code.InstalledCode;
import jdk.vm.ci.meta.ResolvedJavaMethod;
@@ -91,7 +90,10 @@
@Test
public void testCipherBlockChainingIntrinsics() throws Exception {
- if (compileAndInstall("com.sun.crypto.provider.CipherBlockChaining", HotSpotGraphBuilderPlugins.cbcEncryptName, HotSpotGraphBuilderPlugins.cbcDecryptName)) {
+ boolean implNames = HotSpotGraphBuilderPlugins.cbcUsesImplNames(runtime().getVMConfig());
+ String cbcEncryptName = implNames ? "implEncrypt" : "encrypt";
+ String cbcDecryptName = implNames ? "implDecrypt" : "decrypt";
+ if (compileAndInstall("com.sun.crypto.provider.CipherBlockChaining", cbcEncryptName, cbcDecryptName)) {
ByteArrayOutputStream actual = new ByteArrayOutputStream();
actual.write(runEncryptDecrypt(aesKey, "AES/CBC/NoPadding"));
actual.write(runEncryptDecrypt(aesKey, "AES/CBC/PKCS5Padding"));
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/HotSpotGraalManagementTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/HotSpotGraalManagementTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -378,12 +378,15 @@
MBeanAttributeInfo dumpPath = findAttributeInfo("DumpPath", info);
MBeanAttributeInfo printGraphFile = findAttributeInfo("PrintGraphFile", info);
MBeanAttributeInfo showDumpFiles = findAttributeInfo("ShowDumpFiles", info);
+ MBeanAttributeInfo methodFilter = findAttributeInfo("MethodFilter", info);
Object originalDumpPath = server.getAttribute(mbeanName, dumpPath.getName());
Object originalPrintGraphFile = server.getAttribute(mbeanName, printGraphFile.getName());
Object originalShowDumpFiles = server.getAttribute(mbeanName, showDumpFiles.getName());
+ Object originalMethodFilter = server.getAttribute(mbeanName, methodFilter.getName());
final File tmpDir = new File(HotSpotGraalManagementTest.class.getSimpleName() + "_" + System.currentTimeMillis()).getAbsoluteFile();
server.setAttribute(mbeanName, new Attribute(dumpPath.getName(), quoted(tmpDir)));
+ server.setAttribute(mbeanName, new Attribute(methodFilter.getName(), ""));
// Force output to a file even if there's a running IGV instance available.
server.setAttribute(mbeanName, new Attribute(printGraphFile.getName(), true));
server.setAttribute(mbeanName, new Attribute(showDumpFiles.getName(), false));
@@ -392,6 +395,7 @@
server.invoke(mbeanName, "dumpMethod", params, null);
boolean found = false;
String expectedIgvDumpSuffix = "[Arrays.asList(Object[])List].bgv";
+ Assert.assertTrue(tmpDir.toString() + " was not created or is not a directory", tmpDir.isDirectory());
List<String> dumpPathEntries = Arrays.asList(tmpDir.list());
for (String entry : dumpPathEntries) {
if (entry.endsWith(expectedIgvDumpSuffix)) {
@@ -403,8 +407,11 @@
dumpPathEntries.stream().collect(Collectors.joining(System.lineSeparator()))));
}
} finally {
- deleteDirectory(tmpDir.toPath());
+ if (tmpDir.isDirectory()) {
+ deleteDirectory(tmpDir.toPath());
+ }
server.setAttribute(mbeanName, new Attribute(dumpPath.getName(), originalDumpPath));
+ server.setAttribute(mbeanName, new Attribute(methodFilter.getName(), originalMethodFilter));
server.setAttribute(mbeanName, new Attribute(printGraphFile.getName(), originalPrintGraphFile));
server.setAttribute(mbeanName, new Attribute(showDumpFiles.getName(), originalShowDumpFiles));
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/JVMCIVersionCheckTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/JVMCIVersionCheckTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -27,9 +27,13 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
+import java.util.Random;
import org.graalvm.compiler.core.test.GraalCompilerTest;
import org.graalvm.compiler.hotspot.JVMCIVersionCheck;
+import org.graalvm.compiler.hotspot.JVMCIVersionCheck.Version;
+import org.graalvm.compiler.hotspot.JVMCIVersionCheck.Version2;
+import org.graalvm.compiler.hotspot.JVMCIVersionCheck.Version3;
import org.junit.Assert;
import org.junit.Test;
@@ -43,24 +47,37 @@
props.put(name, sprops.getProperty(name));
}
- for (int i = 0; i < 100; i++) {
+ long seed = Long.getLong("test.seed", System.nanoTime());
+ Random random = new Random(seed);
+
+ for (int i = 0; i < 50; i++) {
int minMajor = i;
- int minMinor = 100 - i;
- for (int j = 0; j < 100; j++) {
+ int minMinor = 50 - i;
+ for (int j = 0; j < 50; j++) {
int major = j;
- int minor = 100 - j;
+ int minor = 50 - j;
+
+ for (int k = 0; k < 30; k++) {
+ int minBuild = random.nextInt(100);
+ int build = random.nextInt(100);
- boolean ok = (major > minMajor) || (major == minMajor && minor >= minMinor);
- for (String sep : new String[]{".", "-b"}) {
- String javaVmVersion = String.format("prefix-jvmci-%03d%s%03d-suffix", major, sep, minor);
- if (ok) {
- JVMCIVersionCheck.check(props, minMajor, minMinor, "1.8", javaVmVersion, false);
- } else {
- try {
- JVMCIVersionCheck.check(props, minMajor, minMinor, "1.8", javaVmVersion, false);
- Assert.fail("expected to fail checking " + javaVmVersion + " against " + minMajor + "." + minMinor);
- } catch (InternalError e) {
- // pass
+ for (Version version : new Version[]{new Version2(major, minor), new Version3(major, minor, build)}) {
+ for (Version minVersion : new Version[]{new Version2(minMajor, minMinor), new Version3(minMajor, minMinor, minBuild)}) {
+ String javaVmVersion = String.format("prefix-jvmci-%s-suffix", version);
+ if (!version.isLessThan(minVersion)) {
+ try {
+ JVMCIVersionCheck.check(props, minVersion, "1.8", javaVmVersion, false);
+ } catch (InternalError e) {
+ throw new AssertionError("Failed " + JVMCIVersionCheckTest.class.getSimpleName() + " with -Dtest.seed=" + seed, e);
+ }
+ } else {
+ try {
+ JVMCIVersionCheck.check(props, minVersion, "1.8", javaVmVersion, false);
+ Assert.fail("expected to fail checking " + javaVmVersion + " against " + minVersion + " (-Dtest.seed=" + seed + ")");
+ } catch (InternalError e) {
+ // pass
+ }
+ }
}
}
}
@@ -72,8 +89,9 @@
for (String version : new String[]{"0" + sep + Long.MAX_VALUE, Long.MAX_VALUE + sep + 0}) {
String javaVmVersion = String.format("prefix-jvmci-%s-suffix", version);
try {
- JVMCIVersionCheck.check(props, 0, 59, "1.8", javaVmVersion, false);
- Assert.fail("expected to fail checking " + javaVmVersion + " against 0.59");
+ Version2 minVersion = new Version2(0, 59);
+ JVMCIVersionCheck.check(props, minVersion, "1.8", javaVmVersion, false);
+ Assert.fail("expected to fail checking " + javaVmVersion + " against " + minVersion);
} catch (InternalError e) {
// pass
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/NodeCostDumpUtil.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/NodeCostDumpUtil.java Fri Jul 26 19:11:34 2019 -0400
@@ -234,4 +234,3 @@
}
}
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilationContext.java Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2019, 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 org.graalvm.compiler.hotspot;
+
+import org.graalvm.compiler.debug.GraalError;
+
+import jdk.vm.ci.meta.JavaConstant;
+
+/**
+ * A context for scoping the lifetime of foreign objects.
+ *
+ * The need for this mechanism is best explained with an example. When folding a GETFIELD bytecode
+ * denoting a {@code final static} non-primitive field, libgraal can create a {@link JavaConstant}
+ * wrapping a handle to the field's value in the HotSpot heap. This handle must be released before
+ * HotSpot can reclaim the object it references. Performing a compilation in the scope of a
+ * {@linkplain HotSpotGraalServices#openLocalCompilationContext local} context ensures the handle is
+ * released once the compilation completes, allowing the HotSpot GC to subsequently reclaim the
+ * HotSpot object. When libgraal creates data structures that outlive a single compilation and may
+ * contain foreign object references (e.g. snippet graphs), it must enter the
+ * {@linkplain HotSpotGraalServices#enterGlobalCompilationContext global} context. Foreign object
+ * handles created in the global context are only released once their {@link JavaConstant} wrappers
+ * are reclaimed by the libgraal GC.
+ *
+ * {@link CompilationContext}s have no impact on {@link JavaConstant}s that do not encapsulate a
+ * foreign object reference.
+ *
+ * The object returned by {@link HotSpotGraalServices#enterGlobalCompilationContext} or
+ * {@link HotSpotGraalServices#openLocalCompilationContext} should be used in a try-with-resources
+ * statement. Failure to close a context will almost certainly result in foreign objects being
+ * leaked.
+ */
+public class CompilationContext implements AutoCloseable {
+ private final AutoCloseable impl;
+
+ CompilationContext(AutoCloseable impl) {
+ this.impl = impl;
+ }
+
+ @Override
+ public void close() {
+ try {
+ impl.close();
+ } catch (Exception e) {
+ GraalError.shouldNotReachHere(e);
+ }
+ }
+}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilationCounters.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilationCounters.java Fri Jul 26 19:11:34 2019 -0400
@@ -26,6 +26,7 @@
import static org.graalvm.compiler.hotspot.HotSpotGraalCompiler.fmt;
import static org.graalvm.compiler.hotspot.HotSpotGraalCompiler.str;
+
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
@@ -35,9 +36,10 @@
import org.graalvm.compiler.debug.TTY;
import org.graalvm.compiler.options.Option;
+import org.graalvm.compiler.options.OptionKey;
import org.graalvm.compiler.options.OptionType;
import org.graalvm.compiler.options.OptionValues;
-import org.graalvm.compiler.options.OptionKey;
+
import jdk.vm.ci.code.CompilationRequest;
import jdk.vm.ci.meta.ResolvedJavaMethod;
@@ -85,7 +87,7 @@
}
}
TTY.flush();
- System.exit(-1);
+ HotSpotGraalServices.exit(-1);
}
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilationTask.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilationTask.java Fri Jul 26 19:11:34 2019 -0400
@@ -97,8 +97,13 @@
}
@Override
+ protected void exitHostVM(int status) {
+ HotSpotGraalServices.exit(status);
+ }
+
+ @Override
public String toString() {
- return getMethod().format("%H.%n(%p)");
+ return getMethod().format("%H.%n(%p) @ " + getEntryBCI());
}
@Override
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilationWatchDog.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilationWatchDog.java Fri Jul 26 19:11:34 2019 -0400
@@ -238,7 +238,7 @@
TTY.printf("======================= WATCH DOG THREAD =======================%n" +
"%s took %d identical stack traces, which indicates a stuck compilation (id=%d) of %s%n%sExiting VM%n", this,
numberOfIdenticalStackTraces, currentId, fmt(currentMethod), fmt(lastStackTrace));
- System.exit(-1);
+ HotSpotGraalServices.exit(-1);
}
} else if (newStackTrace) {
synchronized (CompilationWatchDog.class) {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilerConfigurationFactory.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompilerConfigurationFactory.java Fri Jul 26 19:11:34 2019 -0400
@@ -200,7 +200,7 @@
for (CompilerConfigurationFactory candidate : getAllCandidates()) {
System.out.println(" " + candidate.name);
}
- System.exit(0);
+ HotSpotGraalServices.exit(0);
} else if (value != null) {
for (CompilerConfigurationFactory candidate : GraalServices.load(CompilerConfigurationFactory.class)) {
if (candidate.name.equals(value)) {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalCompiler.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalCompiler.java Fri Jul 26 19:11:34 2019 -0400
@@ -111,39 +111,41 @@
@SuppressWarnings("try")
CompilationRequestResult compileMethod(CompilationRequest request, boolean installAsDefault, OptionValues initialOptions) {
- if (graalRuntime.isShutdown()) {
- return HotSpotCompilationRequestResult.failure(String.format("Shutdown entered"), true);
- }
+ try (CompilationContext scope = HotSpotGraalServices.openLocalCompilationContext(request)) {
+ if (graalRuntime.isShutdown()) {
+ return HotSpotCompilationRequestResult.failure(String.format("Shutdown entered"), true);
+ }
- ResolvedJavaMethod method = request.getMethod();
+ ResolvedJavaMethod method = request.getMethod();
- if (graalRuntime.isBootstrapping()) {
- if (DebugOptions.BootstrapInitializeOnly.getValue(initialOptions)) {
- return HotSpotCompilationRequestResult.failure(String.format("Skip compilation because %s is enabled", DebugOptions.BootstrapInitializeOnly.getName()), true);
- }
- if (bootstrapWatchDog != null) {
- if (bootstrapWatchDog.hitCriticalCompilationRateOrTimeout()) {
- // Drain the compilation queue to expedite completion of the bootstrap
- return HotSpotCompilationRequestResult.failure("hit critical bootstrap compilation rate or timeout", true);
+ if (graalRuntime.isBootstrapping()) {
+ if (DebugOptions.BootstrapInitializeOnly.getValue(initialOptions)) {
+ return HotSpotCompilationRequestResult.failure(String.format("Skip compilation because %s is enabled", DebugOptions.BootstrapInitializeOnly.getName()), true);
+ }
+ if (bootstrapWatchDog != null) {
+ if (bootstrapWatchDog.hitCriticalCompilationRateOrTimeout()) {
+ // Drain the compilation queue to expedite completion of the bootstrap
+ return HotSpotCompilationRequestResult.failure("hit critical bootstrap compilation rate or timeout", true);
+ }
}
}
- }
- HotSpotCompilationRequest hsRequest = (HotSpotCompilationRequest) request;
- CompilationTask task = new CompilationTask(jvmciRuntime, this, hsRequest, true, shouldRetainLocalVariables(hsRequest.getJvmciEnv()), installAsDefault);
- OptionValues options = task.filterOptions(initialOptions);
- try (CompilationWatchDog w1 = CompilationWatchDog.watch(method, hsRequest.getId(), options);
- BootstrapWatchDog.Watch w2 = bootstrapWatchDog == null ? null : bootstrapWatchDog.watch(request);
- CompilationAlarm alarm = CompilationAlarm.trackCompilationPeriod(options);) {
- if (compilationCounters != null) {
- compilationCounters.countCompilation(method);
+ HotSpotCompilationRequest hsRequest = (HotSpotCompilationRequest) request;
+ CompilationTask task = new CompilationTask(jvmciRuntime, this, hsRequest, true, shouldRetainLocalVariables(hsRequest.getJvmciEnv()), installAsDefault);
+ OptionValues options = task.filterOptions(initialOptions);
+ try (CompilationWatchDog w1 = CompilationWatchDog.watch(method, hsRequest.getId(), options);
+ BootstrapWatchDog.Watch w2 = bootstrapWatchDog == null ? null : bootstrapWatchDog.watch(request);
+ CompilationAlarm alarm = CompilationAlarm.trackCompilationPeriod(options);) {
+ if (compilationCounters != null) {
+ compilationCounters.countCompilation(method);
+ }
+ CompilationRequestResult r = null;
+ try (DebugContext debug = graalRuntime.openDebugContext(options, task.getCompilationIdentifier(), method, getDebugHandlersFactories(), DebugContext.DEFAULT_LOG_STREAM);
+ Activation a = debug.activate()) {
+ r = task.runCompilation(debug);
+ }
+ assert r != null;
+ return r;
}
- CompilationRequestResult r = null;
- try (DebugContext debug = graalRuntime.openDebugContext(options, task.getCompilationIdentifier(), method, getDebugHandlersFactories(), DebugContext.DEFAULT_LOG_STREAM);
- Activation a = debug.activate()) {
- r = task.runCompilation(debug);
- }
- assert r != null;
- return r;
}
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalServices.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalServices.java Fri Jul 26 19:11:34 2019 -0400
@@ -26,6 +26,9 @@
import jdk.vm.ci.hotspot.HotSpotMetaData;
+/**
+ * JDK 13 version of {@code HotSpotGraalServices}.
+ */
public class HotSpotGraalServices {
/**
@@ -35,4 +38,17 @@
public static byte[] getImplicitExceptionBytes(HotSpotMetaData metaData) {
return metaData.implicitExceptionBytes();
}
+
+ public static CompilationContext enterGlobalCompilationContext() {
+ return null;
+ }
+
+ @SuppressWarnings("unused")
+ public static CompilationContext openLocalCompilationContext(Object description) {
+ return null;
+ }
+
+ public static void exit(int status) {
+ System.exit(status);
+ }
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotReplacementsImpl.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotReplacementsImpl.java Fri Jul 26 19:11:34 2019 -0400
@@ -208,6 +208,7 @@
return super.getSnippet(method, recursiveEntry, args, trackNodeSourcePosition, replaceePosition, options);
}
+ @SuppressWarnings("try")
private StructuredGraph getEncodedSnippet(ResolvedJavaMethod method, Object[] args, StructuredGraph.AllowAssumptions allowAssumptions, OptionValues options) {
boolean useEncodedGraphs = UseEncodedGraphs.getValue(options);
if (IS_IN_NATIVE_IMAGE || useEncodedGraphs) {
@@ -219,11 +220,15 @@
if (getEncodedSnippets() == null) {
throw GraalError.shouldNotReachHere("encoded snippets not found");
}
- StructuredGraph graph = getEncodedSnippets().getEncodedSnippet(method, this, args, allowAssumptions, options);
- if (graph == null) {
- throw GraalError.shouldNotReachHere("snippet not found: " + method.format("%H.%n(%p)"));
+ // Snippets graphs can contain foreign object reference and
+ // outlive a single compilation.
+ try (CompilationContext scope = HotSpotGraalServices.enterGlobalCompilationContext()) {
+ StructuredGraph graph = getEncodedSnippets().getEncodedSnippet(method, this, args, allowAssumptions, options);
+ if (graph == null) {
+ throw GraalError.shouldNotReachHere("snippet not found: " + method.format("%H.%n(%p)"));
+ }
+ return graph;
}
- return graph;
}
} else {
assert registeredSnippets == null || registeredSnippets.contains(method) : "Asking for snippet method that was never registered: " + method.format("%H.%n(%p)");
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotTTYStreamProvider.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotTTYStreamProvider.java Fri Jul 26 19:11:34 2019 -0400
@@ -42,6 +42,7 @@
import org.graalvm.compiler.serviceprovider.GraalServices;
import org.graalvm.compiler.serviceprovider.ServiceProvider;
+import jdk.vm.ci.common.NativeImageReinitialize;
import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime;
import jdk.vm.ci.services.Services;
@@ -96,7 +97,7 @@
* initialization.
*/
class DelayedOutputStream extends OutputStream {
- private volatile OutputStream lazy;
+ @NativeImageReinitialize private volatile OutputStream lazy;
private OutputStream lazy() {
if (lazy == null) {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/IsGraalPredicateBase.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/IsGraalPredicateBase.java Fri Jul 26 19:11:34 2019 -0400
@@ -43,4 +43,3 @@
return HotSpotJVMCICompilerFactory.CompilationLevelAdjustment.ByHolder;
}
}
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/JVMCIVersionCheck.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/JVMCIVersionCheck.java Fri Jul 26 19:11:34 2019 -0400
@@ -28,6 +28,8 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* Mechanism for checking that the current Java runtime environment supports the minimum JVMCI API
@@ -41,8 +43,107 @@
*/
public final class JVMCIVersionCheck {
- private static final int JVMCI8_MIN_MAJOR_VERSION = 19;
- private static final int JVMCI8_MIN_MINOR_VERSION = 1;
+ private static final Version JVMCI8_MIN_VERSION = new Version3(19, 2, 1);
+
+ public interface Version {
+ boolean isLessThan(Version other);
+
+ static Version parse(String vmVersion) {
+ Matcher m = Pattern.compile(".*-jvmci-(\\d+)\\.(\\d+)-b(\\d+).*").matcher(vmVersion);
+ if (m.matches()) {
+ try {
+ int major = Integer.parseInt(m.group(1));
+ int minor = Integer.parseInt(m.group(2));
+ int build = Integer.parseInt(m.group(3));
+ return new Version3(major, minor, build);
+ } catch (NumberFormatException e) {
+ // ignore
+ }
+ }
+ m = Pattern.compile(".*-jvmci-(\\d+)(?:\\.|-b)(\\d+).*").matcher(vmVersion);
+ if (m.matches()) {
+ try {
+ int major = Integer.parseInt(m.group(1));
+ int minor = Integer.parseInt(m.group(2));
+ return new Version2(major, minor);
+ } catch (NumberFormatException e) {
+ // ignore
+ }
+ }
+ return null;
+ }
+ }
+
+ public static class Version2 implements Version {
+ private final int major;
+ private final int minor;
+
+ public Version2(int major, int minor) {
+ this.major = major;
+ this.minor = minor;
+ }
+
+ @Override
+ public boolean isLessThan(Version other) {
+ if (other.getClass() == Version3.class) {
+ return true;
+ }
+ Version2 o = (Version2) other;
+ if (this.major < o.major) {
+ return true;
+ }
+ if (this.major == o.major && this.minor < o.minor) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ if (major >= 19) {
+ return String.format("%d-b%02d", major, minor);
+ } else {
+ return String.format("%d.%d", major, minor);
+ }
+ }
+ }
+
+ public static class Version3 implements Version {
+ private final int major;
+ private final int minor;
+ private final int build;
+
+ public Version3(int major, int minor, int build) {
+ this.major = major;
+ this.minor = minor;
+ this.build = build;
+ }
+
+ @Override
+ public boolean isLessThan(Version other) {
+ if (other.getClass() == Version2.class) {
+ return false;
+ }
+ Version3 o = (Version3) other;
+ if (this.major < o.major) {
+ return true;
+ }
+ if (this.major == o.major) {
+ if (this.minor < o.minor) {
+ return true;
+ }
+ if (this.minor == o.minor && this.build < o.build) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return String.format("%d.%d-b%02d", major, minor, build);
+ }
+ }
private static void failVersionCheck(Map<String, String> props, boolean exit, String reason, Object... args) {
Formatter errorMessage = new Formatter().format(reason, args);
@@ -53,9 +154,7 @@
errorMessage.format("Currently used Java home directory is %s.%n", javaHome);
errorMessage.format("Currently used VM configuration is: %s%n", vmName);
if (props.get("java.specification.version").compareTo("1.9") < 0) {
- errorMessage.format("Download the latest JVMCI JDK 8 from " +
- "https://www.oracle.com/technetwork/graalvm/downloads/index.html or " +
- "https://github.com/graalvm/openjdk8-jvmci-builder/releases");
+ errorMessage.format("Download the latest JVMCI JDK 8 from https://github.com/graalvm/openjdk8-jvmci-builder/releases");
} else {
errorMessage.format("Download JDK 11 or later.");
}
@@ -74,7 +173,6 @@
private final String javaSpecVersion;
private final String vmVersion;
- private int cursor;
private final Map<String, String> props;
private JVMCIVersionCheck(Map<String, String> props, String javaSpecVersion, String vmVersion) {
@@ -85,112 +183,28 @@
static void check(Map<String, String> props, boolean exitOnFailure) {
JVMCIVersionCheck checker = new JVMCIVersionCheck(props, props.get("java.specification.version"), props.get("java.vm.version"));
- checker.run(exitOnFailure, JVMCI8_MIN_MAJOR_VERSION, JVMCI8_MIN_MINOR_VERSION);
+ checker.run(exitOnFailure, JVMCI8_MIN_VERSION);
}
/**
* Entry point for testing.
*/
public static void check(Map<String, String> props,
- int jvmci8MinMajorVersion,
- int jvmci8MinMinorVersion,
+ Version minVersion,
String javaSpecVersion,
- String javaVmVersion,
- boolean exitOnFailure) {
+ String javaVmVersion, boolean exitOnFailure) {
JVMCIVersionCheck checker = new JVMCIVersionCheck(props, javaSpecVersion, javaVmVersion);
- checker.run(exitOnFailure, jvmci8MinMajorVersion, jvmci8MinMinorVersion);
- }
-
- /**
- * Parses a positive decimal number at {@link #cursor}.
- *
- * @return -1 if there is no positive decimal number at {@link #cursor}
- */
- private int parseNumber() {
- int result = -1;
- while (cursor < vmVersion.length()) {
- int digit = vmVersion.charAt(cursor) - '0';
- if (digit >= 0 && digit <= 9) {
- if (result == -1) {
- result = digit;
- } else {
- long r = (long) result * (long) 10;
- if ((int) r != r) {
- // Overflow
- return -1;
- }
- result = (int) r + digit;
- }
- cursor++;
- } else {
- break;
- }
- }
- return result;
+ checker.run(exitOnFailure, minVersion);
}
- /**
- * Parse {@code "."} or {@code "-b"} at {@link #cursor}.
- *
- * @return {@code true} iff there was an expected separator at {@link #cursor}
- */
- private boolean parseSeparator() {
- if (cursor < vmVersion.length()) {
- char ch = vmVersion.charAt(cursor);
- if (ch == '.') {
- cursor++;
- return true;
- }
- if (ch == '-') {
- cursor++;
- if (cursor < vmVersion.length()) {
- if (vmVersion.charAt(cursor) == 'b') {
- cursor++;
- return true;
- }
+ private void run(boolean exitOnFailure, Version minVersion) {
+ if (javaSpecVersion.compareTo("1.9") < 0) {
+ Version v = Version.parse(vmVersion);
+ if (v != null) {
+ if (v.isLessThan(minVersion)) {
+ failVersionCheck(props, exitOnFailure, "The VM does not support the minimum JVMCI API version required by Graal: %s < %s.%n", v, minVersion);
}
- return false;
- }
- }
- return false;
- }
-
- private static String getJVMCIVersionString(int major, int minor) {
- if (major >= 19) {
- return String.format("%d-b%02d", major, minor);
- } else {
- return String.format("%d.%d", major, minor);
- }
- }
-
- private void run(boolean exitOnFailure, int jvmci8MinMajorVersion, int jvmci8MinMinorVersion) {
- // Don't use regular expressions to minimize Graal startup time
- if (javaSpecVersion.compareTo("1.9") < 0) {
- cursor = vmVersion.indexOf("-jvmci-");
- if (cursor >= 0) {
- cursor += "-jvmci-".length();
- int major = parseNumber();
- if (major == -1) {
- failVersionCheck(props, exitOnFailure, "The VM does not support the minimum JVMCI API version required by Graal.%n" +
- "Cannot read JVMCI major version from java.vm.version property: %s.%n", vmVersion);
- return;
- }
-
- if (parseSeparator()) {
- int minor = parseNumber();
- if (minor == -1) {
- failVersionCheck(props, exitOnFailure, "The VM does not support the minimum JVMCI API version required by Graal.%n" +
- "Cannot read JVMCI minor version from java.vm.version property: %s.%n", vmVersion);
- return;
- }
-
- if (major > jvmci8MinMajorVersion || (major >= jvmci8MinMajorVersion && minor >= jvmci8MinMinorVersion)) {
- return;
- }
- failVersionCheck(props, exitOnFailure, "The VM does not support the minimum JVMCI API version required by Graal: %s < %s.%n",
- getJVMCIVersionString(major, minor), getJVMCIVersionString(jvmci8MinMajorVersion, jvmci8MinMinorVersion));
- return;
- }
+ return;
}
failVersionCheck(props, exitOnFailure, "The VM does not support the minimum JVMCI API version required by Graal.%n" +
"Cannot read JVMCI version from java.vm.version property: %s.%n", vmVersion);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/DefaultHotSpotLoweringProvider.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/DefaultHotSpotLoweringProvider.java Fri Jul 26 19:11:34 2019 -0400
@@ -182,7 +182,7 @@
/**
* HotSpot implementation of {@link LoweringProvider}.
*/
-public class DefaultHotSpotLoweringProvider extends DefaultJavaLoweringProvider implements HotSpotLoweringProvider {
+public abstract class DefaultHotSpotLoweringProvider extends DefaultJavaLoweringProvider implements HotSpotLoweringProvider {
protected final HotSpotGraalRuntimeProvider runtime;
protected final HotSpotRegistersProvider registers;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java Fri Jul 26 19:11:34 2019 -0400
@@ -44,6 +44,7 @@
import org.graalvm.compiler.core.common.type.ObjectStamp;
import org.graalvm.compiler.core.common.type.StampFactory;
import org.graalvm.compiler.core.common.type.TypeReference;
+import org.graalvm.compiler.debug.GraalError;
import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
import org.graalvm.compiler.hotspot.nodes.CurrentJavaThreadNode;
import org.graalvm.compiler.hotspot.replacements.AESCryptSubstitutions;
@@ -106,6 +107,7 @@
import jdk.internal.vm.compiler.word.LocationIdentity;
import jdk.vm.ci.code.CodeUtil;
+import jdk.vm.ci.hotspot.VMIntrinsicMethod;
import jdk.vm.ci.meta.ConstantReflectionProvider;
import jdk.vm.ci.meta.DeoptimizationAction;
import jdk.vm.ci.meta.JavaKind;
@@ -429,8 +431,6 @@
r.registerMethodSubstitution(ThreadSubstitutions.class, "isInterrupted", Receiver.class, boolean.class);
}
- public static final String cbcEncryptName;
- public static final String cbcDecryptName;
public static final String aesEncryptName;
public static final String aesDecryptName;
@@ -439,15 +439,11 @@
static {
if (JavaVersionUtil.JAVA_SPEC <= 8) {
- cbcEncryptName = "encrypt";
- cbcDecryptName = "decrypt";
aesEncryptName = "encryptBlock";
aesDecryptName = "decryptBlock";
reflectionClass = "sun.reflect.Reflection";
constantPoolClass = "sun.reflect.ConstantPool";
} else {
- cbcEncryptName = "implEncrypt";
- cbcDecryptName = "implDecrypt";
aesEncryptName = "implEncryptBlock";
aesDecryptName = "implDecryptBlock";
reflectionClass = "jdk.internal.reflect.Reflection";
@@ -455,6 +451,19 @@
}
}
+ public static boolean cbcUsesImplNames(GraalHotSpotVMConfig config) {
+ for (VMIntrinsicMethod intrinsic : config.getStore().getIntrinsics()) {
+ if ("com/sun/crypto/provider/CipherBlockChaining".equals(intrinsic.declaringClass)) {
+ if ("encrypt".equals(intrinsic.name)) {
+ return false;
+ } else if ("implEncrypt".equals(intrinsic.name)) {
+ return true;
+ }
+ }
+ }
+ throw GraalError.shouldNotReachHere();
+ }
+
private static void registerAESPlugins(InvocationPlugins plugins, GraalHotSpotVMConfig config, BytecodeProvider bytecodeProvider) {
if (config.useAESIntrinsics) {
assert config.aescryptEncryptBlockStub != 0L;
@@ -464,9 +473,15 @@
String arch = config.osArch;
String decryptSuffix = arch.equals("sparc") ? "WithOriginalKey" : "";
Registration r = new Registration(plugins, "com.sun.crypto.provider.CipherBlockChaining", bytecodeProvider);
+
+ boolean implNames = cbcUsesImplNames(config);
+ String cbcEncryptName = implNames ? "implEncrypt" : "encrypt";
+ String cbcDecryptName = implNames ? "implDecrypt" : "decrypt";
+
r.registerMethodSubstitution(CipherBlockChainingSubstitutions.class, cbcEncryptName, Receiver.class, byte[].class, int.class, int.class, byte[].class, int.class);
r.registerMethodSubstitution(CipherBlockChainingSubstitutions.class, cbcDecryptName, cbcDecryptName + decryptSuffix, Receiver.class, byte[].class, int.class, int.class, byte[].class,
int.class);
+
r = new Registration(plugins, "com.sun.crypto.provider.AESCrypt", bytecodeProvider);
r.registerMethodSubstitution(AESCryptSubstitutions.class, aesEncryptName, Receiver.class, byte[].class, int.class, byte[].class, int.class);
r.registerMethodSubstitution(AESCryptSubstitutions.class, aesDecryptName, aesDecryptName + decryptSuffix, Receiver.class, byte[].class, int.class, byte[].class, int.class);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotNodePlugin.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotNodePlugin.java Fri Jul 26 19:11:34 2019 -0400
@@ -244,4 +244,3 @@
private static final LocationIdentity JAVA_THREAD_SHOULD_POST_ON_EXCEPTIONS_FLAG_LOCATION = NamedLocationIdentity.mutable("JavaThread::_should_post_on_exceptions_flag");
}
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/nodes/VMErrorNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/nodes/VMErrorNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/phases/OnStackReplacementPhase.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/phases/OnStackReplacementPhase.java Fri Jul 26 19:11:34 2019 -0400
@@ -41,7 +41,6 @@
import org.graalvm.compiler.loop.phases.LoopTransformations;
import org.graalvm.compiler.nodeinfo.InputType;
import org.graalvm.compiler.nodeinfo.Verbosity;
-import org.graalvm.compiler.nodes.AbstractBeginNode;
import org.graalvm.compiler.nodes.EntryMarkerNode;
import org.graalvm.compiler.nodes.EntryProxyNode;
import org.graalvm.compiler.nodes.FixedGuardNode;
@@ -159,11 +158,8 @@
LoopEx loop = loops.loop(l);
loop.loopBegin().markOsrLoop();
LoopTransformations.peel(loop);
- osr.replaceAtUsages(InputType.Guard, AbstractBeginNode.prevBegin((FixedNode) osr.predecessor()));
- for (Node usage : osr.usages().snapshot()) {
- EntryProxyNode proxy = (EntryProxyNode) usage;
- proxy.replaceAndDelete(proxy.value());
- }
+
+ osr.prepareDelete();
GraphUtil.removeFixedWithUnusedInputs(osr);
debug.dump(DebugContext.DETAILED_LEVEL, graph, "OnStackReplacement loop peeling result");
} while (true);
@@ -228,6 +224,7 @@
}
osr.replaceAtUsages(InputType.Guard, osrStart);
+ osr.replaceAtUsages(InputType.Anchor, osrStart);
}
debug.dump(DebugContext.DETAILED_LEVEL, graph, "OnStackReplacement after replacing entry proxies");
GraphUtil.killCFG(start);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/Log.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/Log.java Fri Jul 26 19:11:34 2019 -0400
@@ -191,4 +191,3 @@
println("");
}
}
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/NewObjectSnippets.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/NewObjectSnippets.java Fri Jul 26 19:11:34 2019 -0400
@@ -212,14 +212,27 @@
}
@Snippet
- public static Object allocateInstance(@ConstantParameter long size, KlassPointer hub, Word prototypeMarkWord, @ConstantParameter boolean fillContents,
- @ConstantParameter Register threadRegister, @ConstantParameter boolean constantSize, @ConstantParameter String typeContext,
+ public static Object allocateInstance(@ConstantParameter long size,
+ KlassPointer hub,
+ Word prototypeMarkWord,
+ @ConstantParameter boolean fillContents,
+ @ConstantParameter boolean emitMemoryBarrier,
+ @ConstantParameter Register threadRegister,
+ @ConstantParameter boolean constantSize,
+ @ConstantParameter String typeContext,
@ConstantParameter Counters counters) {
- return piCastToSnippetReplaceeStamp(allocateInstanceHelper(size, hub, prototypeMarkWord, fillContents, threadRegister, constantSize, typeContext, counters));
+ return piCastToSnippetReplaceeStamp(allocateInstanceHelper(size, hub, prototypeMarkWord, fillContents, emitMemoryBarrier, threadRegister, constantSize, typeContext, counters));
}
- public static Object allocateInstanceHelper(long size, KlassPointer hub, Word prototypeMarkWord, boolean fillContents,
- Register threadRegister, boolean constantSize, String typeContext, Counters counters) {
+ public static Object allocateInstanceHelper(long size,
+ KlassPointer hub,
+ Word prototypeMarkWord,
+ boolean fillContents,
+ boolean emitMemoryBarrier,
+ Register threadRegister,
+ boolean constantSize,
+ String typeContext,
+ Counters counters) {
Object result;
Word thread = registerAsWord(threadRegister);
Word top = readTlabTop(thread);
@@ -228,7 +241,7 @@
if (useTLAB(INJECTED_VMCONFIG) && probability(FAST_PATH_PROBABILITY, newTop.belowOrEqual(end))) {
writeTlabTop(thread, newTop);
emitPrefetchAllocate(newTop, false);
- result = formatObject(hub, size, top, prototypeMarkWord, fillContents, constantSize, counters);
+ result = formatObject(hub, size, top, prototypeMarkWord, fillContents, emitMemoryBarrier, constantSize, counters);
} else {
Counters theCounters = counters;
if (theCounters != null && theCounters.stub != null) {
@@ -255,18 +268,27 @@
private static native Object newInstanceOrNull(@ConstantNodeParameter ForeignCallDescriptor descriptor, KlassPointer hub);
@Snippet
- public static Object allocateInstancePIC(@ConstantParameter long size, KlassPointer hub, Word prototypeMarkWord, @ConstantParameter boolean fillContents,
- @ConstantParameter Register threadRegister, @ConstantParameter boolean constantSize, @ConstantParameter String typeContext,
+ public static Object allocateInstancePIC(@ConstantParameter long size,
+ KlassPointer hub,
+ Word prototypeMarkWord,
+ @ConstantParameter boolean fillContents,
+ @ConstantParameter boolean emitMemoryBarrier,
+ @ConstantParameter Register threadRegister,
+ @ConstantParameter boolean constantSize,
+ @ConstantParameter String typeContext,
@ConstantParameter Counters counters) {
// Klass must be initialized by the time the first instance is allocated, therefore we can
// just load it from the corresponding cell and avoid the resolution check. We have to use a
// fixed load though, to prevent it from floating above the initialization.
KlassPointer picHub = LoadConstantIndirectlyFixedNode.loadKlass(hub);
- return piCastToSnippetReplaceeStamp(allocateInstanceHelper(size, picHub, prototypeMarkWord, fillContents, threadRegister, constantSize, typeContext, counters));
+ return piCastToSnippetReplaceeStamp(allocateInstanceHelper(size, picHub, prototypeMarkWord, fillContents, emitMemoryBarrier, threadRegister, constantSize, typeContext, counters));
}
@Snippet
- public static Object allocateInstanceDynamic(Class<?> type, Class<?> classClass, @ConstantParameter boolean fillContents, @ConstantParameter Register threadRegister,
+ public static Object allocateInstanceDynamic(Class<?> type, Class<?> classClass,
+ @ConstantParameter boolean fillContents,
+ @ConstantParameter boolean emitMemoryBarrier,
+ @ConstantParameter Register threadRegister,
@ConstantParameter Counters counters) {
if (probability(SLOW_PATH_PROBABILITY, type == null)) {
DeoptimizeNode.deopt(None, RuntimeConstraint);
@@ -277,10 +299,15 @@
DeoptimizeNode.deopt(None, RuntimeConstraint);
}
- return PiNode.piCastToSnippetReplaceeStamp(allocateInstanceDynamicHelper(type, fillContents, threadRegister, counters, nonNullType));
+ return PiNode.piCastToSnippetReplaceeStamp(allocateInstanceDynamicHelper(type, fillContents, emitMemoryBarrier, threadRegister, counters, nonNullType));
}
- private static Object allocateInstanceDynamicHelper(Class<?> type, boolean fillContents, Register threadRegister, Counters counters, Class<?> nonNullType) {
+ private static Object allocateInstanceDynamicHelper(Class<?> type,
+ boolean fillContents,
+ boolean emitMemoryBarrier,
+ Register threadRegister,
+ Counters counters,
+ Class<?> nonNullType) {
KlassPointer hub = ClassGetHubNode.readClass(nonNullType);
if (probability(FAST_PATH_PROBABILITY, !hub.isNull())) {
KlassPointer nonNullHub = ClassGetHubNode.piCastNonNull(hub, SnippetAnchorNode.anchor());
@@ -299,7 +326,7 @@
* FIXME(je,ds): we should actually pass typeContext instead of "" but late
* binding of parameters is not yet supported by the GraphBuilderPlugin system.
*/
- return allocateInstanceHelper(layoutHelper, nonNullHub, prototypeMarkWord, fillContents, threadRegister, false, "", counters);
+ return allocateInstanceHelper(layoutHelper, nonNullHub, prototypeMarkWord, fillContents, emitMemoryBarrier, threadRegister, false, "", counters);
}
} else {
DeoptimizeNode.deopt(None, RuntimeConstraint);
@@ -320,6 +347,7 @@
@ConstantParameter int headerSize,
@ConstantParameter int log2ElementSize,
@ConstantParameter boolean fillContents,
+ @ConstantParameter boolean emitMemoryBarrier,
@ConstantParameter Register threadRegister,
@ConstantParameter boolean maybeUnroll,
@ConstantParameter String typeContext,
@@ -328,7 +356,7 @@
// Primitive array types are eagerly pre-resolved. We can use a floating load.
KlassPointer picHub = LoadConstantIndirectlyNode.loadKlass(hub);
return allocateArrayImpl(picHub, length, prototypeMarkWord, headerSize, log2ElementSize, fillContents,
- threadRegister, maybeUnroll, typeContext, useBulkZeroing, counters);
+ emitMemoryBarrier, threadRegister, maybeUnroll, typeContext, useBulkZeroing, counters);
}
@Snippet
@@ -338,6 +366,7 @@
@ConstantParameter int headerSize,
@ConstantParameter int log2ElementSize,
@ConstantParameter boolean fillContents,
+ @ConstantParameter boolean emitMemoryBarrier,
@ConstantParameter Register threadRegister,
@ConstantParameter boolean maybeUnroll,
@ConstantParameter String typeContext,
@@ -346,7 +375,7 @@
// Array type would be resolved by dominating resolution.
KlassPointer picHub = LoadConstantIndirectlyFixedNode.loadKlass(hub);
return allocateArrayImpl(picHub, length, prototypeMarkWord, headerSize, log2ElementSize, fillContents,
- threadRegister, maybeUnroll, typeContext, useBulkZeroing, counters);
+ emitMemoryBarrier, threadRegister, maybeUnroll, typeContext, useBulkZeroing, counters);
}
@Snippet
@@ -356,6 +385,7 @@
@ConstantParameter int headerSize,
@ConstantParameter int log2ElementSize,
@ConstantParameter boolean fillContents,
+ @ConstantParameter boolean emitMemoryBarrier,
@ConstantParameter Register threadRegister,
@ConstantParameter boolean maybeUnroll,
@ConstantParameter String typeContext,
@@ -367,7 +397,7 @@
headerSize,
log2ElementSize,
fillContents,
- threadRegister,
+ emitMemoryBarrier, threadRegister,
maybeUnroll,
typeContext,
useBulkZeroing,
@@ -384,8 +414,18 @@
return config.areNullAllocationStubsAvailable();
}
- private static Object allocateArrayImpl(KlassPointer hub, int length, Word prototypeMarkWord, int headerSize, int log2ElementSize, boolean fillContents, Register threadRegister,
- boolean maybeUnroll, String typeContext, boolean useBulkZeroing, Counters counters) {
+ private static Object allocateArrayImpl(KlassPointer hub,
+ int length,
+ Word prototypeMarkWord,
+ int headerSize,
+ int log2ElementSize,
+ boolean fillContents,
+ boolean emitMemoryBarrier,
+ Register threadRegister,
+ boolean maybeUnroll,
+ String typeContext,
+ boolean useBulkZeroing,
+ Counters counters) {
Object result;
long allocationSize = arrayAllocationSize(length, headerSize, log2ElementSize);
Word thread = registerAsWord(threadRegister);
@@ -400,7 +440,7 @@
if (theCounters != null && theCounters.arrayLoopInit != null) {
theCounters.arrayLoopInit.inc();
}
- result = formatArray(hub, allocationSize, length, headerSize, top, prototypeMarkWord, fillContents, maybeUnroll, useBulkZeroing, counters);
+ result = formatArray(hub, allocationSize, length, headerSize, top, prototypeMarkWord, fillContents, emitMemoryBarrier, maybeUnroll, useBulkZeroing, counters);
} else {
result = newArrayStub(hub, length);
}
@@ -461,19 +501,29 @@
Class<?> voidClass,
int length,
@ConstantParameter boolean fillContents,
+ @ConstantParameter boolean emitMemoryBarrier,
@ConstantParameter Register threadRegister,
@ConstantParameter JavaKind knownElementKind,
@ConstantParameter int knownLayoutHelper,
@ConstantParameter boolean useBulkZeroing,
Word prototypeMarkWord,
@ConstantParameter Counters counters) {
- Object result = allocateArrayDynamicImpl(elementType, voidClass, length, fillContents, threadRegister, knownElementKind,
+ Object result = allocateArrayDynamicImpl(elementType, voidClass, length, fillContents, emitMemoryBarrier, threadRegister, knownElementKind,
knownLayoutHelper, useBulkZeroing, prototypeMarkWord, counters);
return result;
}
- private static Object allocateArrayDynamicImpl(Class<?> elementType, Class<?> voidClass, int length, boolean fillContents, Register threadRegister, JavaKind knownElementKind,
- int knownLayoutHelper, boolean useBulkZeroing, Word prototypeMarkWord, Counters counters) {
+ private static Object allocateArrayDynamicImpl(Class<?> elementType,
+ Class<?> voidClass,
+ int length,
+ boolean fillContents,
+ boolean emitMemoryBarrier,
+ Register threadRegister,
+ JavaKind knownElementKind,
+ int knownLayoutHelper,
+ boolean useBulkZeroing,
+ Word prototypeMarkWord,
+ Counters counters) {
/*
* We only need the dynamic check for void when we have no static information from
* knownElementKind.
@@ -516,7 +566,7 @@
int log2ElementSize = (layoutHelper >> layoutHelperLog2ElementSizeShift(INJECTED_VMCONFIG)) & layoutHelperLog2ElementSizeMask(INJECTED_VMCONFIG);
Object result = allocateArrayImpl(nonNullKlass, length, prototypeMarkWord, headerSize, log2ElementSize, fillContents,
- threadRegister, false, "dynamic type", useBulkZeroing, counters);
+ emitMemoryBarrier, threadRegister, false, "dynamic type", useBulkZeroing, counters);
return piArrayCastToSnippetReplaceeStamp(verifyOop(result), length);
}
@@ -650,7 +700,14 @@
/**
* Formats some allocated memory with an object header and zeroes out the rest.
*/
- private static Object formatObject(KlassPointer hub, long size, Word memory, Word compileTimePrototypeMarkWord, boolean fillContents, boolean constantSize, Counters counters) {
+ private static Object formatObject(KlassPointer hub,
+ long size,
+ Word memory,
+ Word compileTimePrototypeMarkWord,
+ boolean fillContents,
+ boolean emitMemoryBarrier,
+ boolean constantSize,
+ Counters counters) {
Word prototypeMarkWord = useBiasedLocking(INJECTED_VMCONFIG) ? hub.readWord(prototypeMarkWordOffset(INJECTED_VMCONFIG), PROTOTYPE_MARK_WORD_LOCATION) : compileTimePrototypeMarkWord;
initializeObjectHeader(memory, prototypeMarkWord, hub);
if (fillContents) {
@@ -658,7 +715,9 @@
} else if (REPLACEMENTS_ASSERTIONS_ENABLED) {
fillWithGarbage(size, memory, constantSize, instanceHeaderSize(INJECTED_VMCONFIG), false, counters);
}
- MembarNode.memoryBarrier(MemoryBarriers.STORE_STORE, LocationIdentity.init());
+ if (emitMemoryBarrier) {
+ MembarNode.memoryBarrier(MemoryBarriers.STORE_STORE, LocationIdentity.init());
+ }
return memory.toObjectNonNull();
}
@@ -677,8 +736,17 @@
/**
* Formats some allocated memory with an object header and zeroes out the rest.
*/
- private static Object formatArray(KlassPointer hub, long allocationSize, int length, int headerSize, Word memory, Word prototypeMarkWord, boolean fillContents, boolean maybeUnroll,
- boolean useBulkZeroing, Counters counters) {
+ private static Object formatArray(KlassPointer hub,
+ long allocationSize,
+ int length,
+ int headerSize,
+ Word memory,
+ Word prototypeMarkWord,
+ boolean fillContents,
+ boolean emitMemoryBarrier,
+ boolean maybeUnroll,
+ boolean useBulkZeroing,
+ Counters counters) {
memory.writeInt(arrayLengthOffset(INJECTED_VMCONFIG), length, LocationIdentity.init());
/*
* store hub last as the concurrent garbage collectors assume length is valid if hub field
@@ -690,7 +758,9 @@
} else if (REPLACEMENTS_ASSERTIONS_ENABLED) {
fillWithGarbage(allocationSize, memory, false, headerSize, maybeUnroll, counters);
}
- MembarNode.memoryBarrier(MemoryBarriers.STORE_STORE, LocationIdentity.init());
+ if (emitMemoryBarrier) {
+ MembarNode.memoryBarrier(MemoryBarriers.STORE_STORE, LocationIdentity.init());
+ }
return memory.toObjectNonNull();
}
@@ -756,6 +826,7 @@
args.add("hub", hub);
args.add("prototypeMarkWord", type.prototypeMarkWord());
args.addConst("fillContents", newInstanceNode.fillContents());
+ args.addConst("emitMemoryBarrier", newInstanceNode.emitMemoryBarrier());
args.addConst("threadRegister", registers.getThreadRegister());
args.addConst("constantSize", true);
args.addConst("typeContext", ProfileAllocations.getValue(localOptions) ? type.toJavaName(false) : "");
@@ -799,6 +870,7 @@
args.addConst("headerSize", headerSize);
args.addConst("log2ElementSize", log2ElementSize);
args.addConst("fillContents", newArrayNode.fillContents());
+ args.addConst("emitMemoryBarrier", newArrayNode.emitMemoryBarrier());
args.addConst("threadRegister", registers.getThreadRegister());
args.addConst("maybeUnroll", length.isConstant());
args.addConst("typeContext", ProfileAllocations.getValue(localOptions) ? arrayType.toJavaName(false) : "");
@@ -816,6 +888,7 @@
assert classClass != null;
args.add("classClass", classClass);
args.addConst("fillContents", newInstanceNode.fillContents());
+ args.addConst("emitMemoryBarrier", newInstanceNode.emitMemoryBarrier());
args.addConst("threadRegister", registers.getThreadRegister());
args.addConst("counters", counters);
@@ -833,6 +906,7 @@
ValueNode length = newArrayNode.length();
args.add("length", length.isAlive() ? length : graph.addOrUniqueWithInputs(length));
args.addConst("fillContents", newArrayNode.fillContents());
+ args.addConst("emitMemoryBarrier", newArrayNode.emitMemoryBarrier());
args.addConst("threadRegister", registers.getThreadRegister());
/*
* We use Kind.Illegal as a marker value instead of null because constant snippet
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java Fri Jul 26 19:11:34 2019 -0400
@@ -391,7 +391,6 @@
import org.graalvm.compiler.nodes.extended.LoadHubNode;
import org.graalvm.compiler.nodes.extended.MembarNode;
import org.graalvm.compiler.nodes.extended.StateSplitProxyNode;
-import org.graalvm.compiler.nodes.extended.ValueAnchorNode;
import org.graalvm.compiler.nodes.graphbuilderconf.ClassInitializationPlugin;
import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration;
import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.BytecodeExceptionMode;
@@ -624,7 +623,6 @@
}
static class IntrinsicScope extends InliningScope {
- StateSplit returnStateSplit;
ArrayList<StateSplit> invalidStateUsers;
IntrinsicScope(BytecodeParser parser) {
@@ -635,6 +633,7 @@
super(parser, callee, args);
}
+ @SuppressWarnings("unlikely-arg-type")
@Override
public void close() {
IntrinsicContext intrinsic = parser.intrinsicContext;
@@ -1405,7 +1404,7 @@
if (profile == null || profile.getNotRecordedProbability() > 0.0) {
return null;
} else {
- return append(new ValueAnchorNode(null));
+ return BeginNode.prevBegin(lastInstr);
}
}
@@ -4794,6 +4793,9 @@
}
}
+ private static final int SWITCH_DEOPT_UNSEEN = -2;
+ private static final int SWITCH_DEOPT_SEEN = -1;
+
private void genSwitch(BytecodeSwitch bs) {
int bci = bci();
ValueNode value = frameState.pop(JavaKind.Int);
@@ -4811,20 +4813,16 @@
ArrayList<BciBlock> actualSuccessors = new ArrayList<>();
int[] keys = new int[nofCases];
int[] keySuccessors = new int[nofCasesPlusDefault];
- int deoptSuccessorIndex = -1;
+ int deoptSuccessorIndex = SWITCH_DEOPT_UNSEEN;
int nextSuccessorIndex = 0;
boolean constantValue = value.isConstant();
for (int i = 0; i < nofCasesPlusDefault; i++) {
if (i < nofCases) {
keys[i] = bs.keyAt(i);
}
-
if (!constantValue && isNeverExecutedCode(keyProbabilities[i])) {
- if (deoptSuccessorIndex < 0) {
- deoptSuccessorIndex = nextSuccessorIndex++;
- actualSuccessors.add(null);
- }
- keySuccessors[i] = deoptSuccessorIndex;
+ deoptSuccessorIndex = SWITCH_DEOPT_SEEN;
+ keySuccessors[i] = SWITCH_DEOPT_SEEN;
} else {
int targetBci = i < nofCases ? bs.targetAt(i) : bs.defaultTarget();
SuccessorInfo info = bciToBlockSuccessorIndex.get(targetBci);
@@ -4859,20 +4857,31 @@
*
* The following code rewires deoptimization stub to existing resolved branch target if
* the target is connected by more than 1 cases.
+ *
+ * If this operation rewires every deoptimization seen to an existing branch, care is
+ * taken that we do not spawn a branch that will never be taken.
*/
- if (deoptSuccessorIndex >= 0) {
- int[] connectedCases = new int[nextSuccessorIndex];
+ if (deoptSuccessorIndex == SWITCH_DEOPT_SEEN) {
+ int[] connectedCases = new int[nextSuccessorIndex + 1];
for (int i = 0; i < nofCasesPlusDefault; i++) {
- connectedCases[keySuccessors[i]]++;
+ connectedCases[keySuccessors[i] + 1]++;
}
for (int i = 0; i < nofCasesPlusDefault; i++) {
- if (keySuccessors[i] == deoptSuccessorIndex) {
+ if (keySuccessors[i] == SWITCH_DEOPT_SEEN) {
int targetBci = i < nofCases ? bs.targetAt(i) : bs.defaultTarget();
SuccessorInfo info = bciToBlockSuccessorIndex.get(targetBci);
int rewiredIndex = info.actualIndex;
- if (rewiredIndex >= 0 && connectedCases[rewiredIndex] > 1) {
+ if (rewiredIndex >= 0 && connectedCases[rewiredIndex + 1] > 1) {
+ // Rewire
keySuccessors[i] = info.actualIndex;
+ } else {
+ if (deoptSuccessorIndex == SWITCH_DEOPT_SEEN) {
+ // Spawn deopt successor if needed.
+ deoptSuccessorIndex = nextSuccessorIndex++;
+ actualSuccessors.add(null);
+ }
+ keySuccessors[i] = deoptSuccessorIndex;
}
}
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.aarch64/src/org/graalvm/compiler/lir/aarch64/AArch64Move.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.aarch64/src/org/graalvm/compiler/lir/aarch64/AArch64Move.java Fri Jul 26 19:11:34 2019 -0400
@@ -528,8 +528,8 @@
break;
case Object:
if (input.isNull()) {
- if (crb.mustReplaceWithNullRegister(input)) {
- masm.mov(64, dst, crb.nullRegister);
+ if (crb.mustReplaceWithUncompressedNullRegister(input)) {
+ masm.mov(64, dst, crb.uncompressedNullRegister);
} else {
masm.mov(dst, 0);
}
@@ -725,7 +725,7 @@
@Override
public void emitCode(CompilationResultBuilder crb, AArch64MacroAssembler masm) {
- Register nullRegister = crb.nullRegister;
+ Register nullRegister = crb.uncompressedNullRegister;
if (!nullRegister.equals(Register.None)) {
emitConversion(asRegister(result), asRegister(input), nullRegister, masm);
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64ArrayIndexOfOp.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64ArrayIndexOfOp.java Fri Jul 26 19:11:34 2019 -0400
@@ -645,4 +645,3 @@
return ((AMD64) tool.target().arch).getFeatures().contains(cpuFeature);
}
}
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64ControlFlow.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64ControlFlow.java Fri Jul 26 19:11:34 2019 -0400
@@ -213,7 +213,7 @@
masm.cmpq(keyRegister, (AMD64Address) crb.asLongConstRef(jc));
break;
case Object:
- AMD64Move.const2reg(crb, masm, asRegister(scratch), jc);
+ AMD64Move.const2reg(crb, masm, asRegister(scratch), jc, AMD64Kind.QWORD);
masm.cmpptr(keyRegister, asRegister(scratch));
break;
default:
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64Move.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64Move.java Fri Jul 26 19:11:34 2019 -0400
@@ -156,7 +156,7 @@
@Override
public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
if (isRegister(result)) {
- const2reg(crb, masm, asRegister(result), input);
+ const2reg(crb, masm, asRegister(result), input, (AMD64Kind) result.getPlatformKind());
} else {
assert isStackSlot(result);
const2stack(crb, masm, result, input);
@@ -557,7 +557,7 @@
}
} else if (isJavaConstant(input)) {
if (isRegister(result)) {
- const2reg(crb, masm, asRegister(result), asJavaConstant(input));
+ const2reg(crb, masm, asRegister(result), asJavaConstant(input), moveKind);
} else if (isStackSlot(result)) {
const2stack(crb, masm, result, asJavaConstant(input));
} else {
@@ -645,7 +645,7 @@
}
}
- public static void const2reg(CompilationResultBuilder crb, AMD64MacroAssembler masm, Register result, JavaConstant input) {
+ public static void const2reg(CompilationResultBuilder crb, AMD64MacroAssembler masm, Register result, JavaConstant input, AMD64Kind moveKind) {
/*
* Note: we use the kind of the input operand (and not the kind of the result operand)
* because they don't match in all cases. For example, an object constant can be loaded to a
@@ -691,20 +691,34 @@
}
break;
case Object:
+ assert moveKind != null : "a nun-null moveKind is required for loading an object constant";
// Do not optimize with an XOR as this instruction may be between
// a CMP and a Jcc in which case the XOR will modify the condition
// flags and interfere with the Jcc.
if (input.isNull()) {
- if (crb.mustReplaceWithNullRegister(input)) {
- masm.movq(result, crb.nullRegister);
+ if (moveKind == AMD64Kind.QWORD && crb.mustReplaceWithUncompressedNullRegister(input)) {
+ masm.movq(result, crb.uncompressedNullRegister);
} else {
+ // Upper bits will be zeroed so this also works for narrow oops
masm.movslq(result, 0);
}
- } else if (crb.target.inlineObjects) {
- crb.recordInlineDataInCode(input);
- masm.movq(result, 0xDEADDEADDEADDEADL, true);
} else {
- masm.movq(result, (AMD64Address) crb.recordDataReferenceInCode(input, 0));
+ if (crb.target.inlineObjects) {
+ crb.recordInlineDataInCode(input);
+ if (moveKind == AMD64Kind.DWORD) {
+ // Support for narrow oops
+ masm.movl(result, 0xDEADDEAD, true);
+ } else {
+ masm.movq(result, 0xDEADDEADDEADDEADL, true);
+ }
+ } else {
+ if (moveKind == AMD64Kind.DWORD) {
+ // Support for narrow oops
+ masm.movl(result, (AMD64Address) crb.recordDataReferenceInCode(input, 0));
+ } else {
+ masm.movq(result, (AMD64Address) crb.recordDataReferenceInCode(input, 0));
+ }
+ }
}
break;
default:
@@ -752,13 +766,13 @@
break;
case Object:
if (input.isNull()) {
- if (crb.mustReplaceWithNullRegister(input)) {
- masm.movq(dest, crb.nullRegister);
+ if (crb.mustReplaceWithUncompressedNullRegister(input)) {
+ masm.movq(dest, crb.uncompressedNullRegister);
return;
}
imm = 0;
} else {
- throw GraalError.shouldNotReachHere("Non-null object constants must be in register");
+ throw GraalError.shouldNotReachHere("Non-null object constants must be in a register");
}
break;
default:
@@ -941,7 +955,7 @@
@Override
public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
- Register nullRegister = crb.nullRegister;
+ Register nullRegister = crb.uncompressedNullRegister;
if (!nullRegister.equals(Register.None)) {
emitConversion(asRegister(result), asRegister(input), nullRegister, masm);
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64ZapRegistersOp.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64ZapRegistersOp.java Fri Jul 26 19:11:34 2019 -0400
@@ -34,6 +34,7 @@
import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
import org.graalvm.compiler.lir.framemap.FrameMap;
+import jdk.vm.ci.amd64.AMD64Kind;
import jdk.vm.ci.code.Register;
import jdk.vm.ci.code.RegisterSaveLayout;
import jdk.vm.ci.meta.JavaConstant;
@@ -66,7 +67,7 @@
for (int i = 0; i < zappedRegisters.length; i++) {
Register reg = zappedRegisters[i];
if (reg != null) {
- AMD64Move.const2reg(crb, masm, reg, zapValues[i]);
+ AMD64Move.const2reg(crb, masm, reg, zapValues[i], AMD64Kind.QWORD);
}
}
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/vector/AMD64VectorBinary.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/vector/AMD64VectorBinary.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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,6 +35,7 @@
import org.graalvm.compiler.asm.amd64.AMD64Assembler.VexRVMOp;
import org.graalvm.compiler.asm.amd64.AMD64MacroAssembler;
import org.graalvm.compiler.asm.amd64.AVXKind;
+import org.graalvm.compiler.lir.ConstantValue;
import org.graalvm.compiler.lir.LIRFrameState;
import org.graalvm.compiler.lir.LIRInstructionClass;
import org.graalvm.compiler.lir.Opcode;
@@ -42,6 +43,7 @@
import org.graalvm.compiler.lir.amd64.AMD64LIRInstruction;
import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
+import jdk.vm.ci.amd64.AMD64Kind;
import jdk.vm.ci.meta.AllocatableValue;
public class AMD64VectorBinary {
@@ -102,6 +104,38 @@
}
}
+ public static final class AVXBinaryConstFloatOp extends AMD64LIRInstruction {
+
+ public static final LIRInstructionClass<AVXBinaryConstFloatOp> TYPE = LIRInstructionClass.create(AVXBinaryConstFloatOp.class);
+
+ @Opcode private final VexRVMOp opcode;
+ private final AVXKind.AVXSize size;
+
+ @Def({REG}) protected AllocatableValue result;
+ @Use({REG}) protected AllocatableValue x;
+ protected ConstantValue y;
+
+ public AVXBinaryConstFloatOp(VexRVMOp opcode, AVXKind.AVXSize size, AllocatableValue result, AllocatableValue x, ConstantValue y) {
+ super(TYPE);
+ assert y.getPlatformKind() == AMD64Kind.SINGLE || y.getPlatformKind() == AMD64Kind.DOUBLE;
+ this.opcode = opcode;
+ this.size = size;
+ this.result = result;
+ this.x = x;
+ this.y = y;
+ }
+
+ @Override
+ public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
+ if (y.getPlatformKind() == AMD64Kind.SINGLE) {
+ opcode.emit(masm, size, asRegister(result), asRegister(x), (AMD64Address) crb.asFloatConstRef(y.getJavaConstant()));
+ } else {
+ assert y.getPlatformKind() == AMD64Kind.DOUBLE;
+ opcode.emit(masm, size, asRegister(result), asRegister(x), (AMD64Address) crb.asDoubleConstRef(y.getJavaConstant()));
+ }
+ }
+ }
+
public static final class AVXBinaryMemoryOp extends AMD64LIRInstruction {
public static final LIRInstructionClass<AVXBinaryMemoryOp> TYPE = LIRInstructionClass.create(AVXBinaryMemoryOp.class);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/ConstantStackCastTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/ConstantStackCastTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -99,7 +99,7 @@
}
@Test
- public void runByte() throws Throwable {
+ public void runByte() {
runTest("testByte", (byte) 0);
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/LIRTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/LIRTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -254,7 +254,7 @@
@java.lang.annotation.Retention(RetentionPolicy.RUNTIME)
@java.lang.annotation.Target(ElementType.METHOD)
- public static @interface LIRIntrinsic {
+ public @interface LIRIntrinsic {
}
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/LIRTestTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/LIRTestTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -54,7 +54,7 @@
}
@Test
- public void runInt() throws Throwable {
+ public void runInt() {
runTest("testGetOutput", Integer.MIN_VALUE, 0, supply(() -> new int[3]));
runTest("testGetOutput", -1, Integer.MAX_VALUE, supply(() -> new int[3]));
runTest("testGetOutput", 0, 42, supply(() -> new int[3]));
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/StackMoveTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/StackMoveTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -98,7 +98,7 @@
}
@Test
- public void runInt() throws Throwable {
+ public void runInt() {
runTest("testInt", Integer.MIN_VALUE, supply(() -> new int[4]));
runTest("testInt", -1, supply(() -> new int[4]));
runTest("testInt", 0, supply(() -> new int[4]));
@@ -125,7 +125,7 @@
}
@Test
- public void runLong() throws Throwable {
+ public void runLong() {
runTest("testLong", Long.MIN_VALUE, supply(() -> new long[3]));
runTest("testLong", -1L, supply(() -> new long[3]));
runTest("testLong", 0L, supply(() -> new long[3]));
@@ -152,7 +152,7 @@
}
@Test
- public void runFloat() throws Throwable {
+ public void runFloat() {
runTest("testFloat", Float.MIN_VALUE, supply(() -> new float[3]));
runTest("testFloat", -1f, supply(() -> new float[3]));
runTest("testFloat", -0.1f, supply(() -> new float[3]));
@@ -217,7 +217,7 @@
}
@Test
- public void runShort() throws Throwable {
+ public void runShort() {
runTest("testShort", Short.MIN_VALUE, supply(() -> new short[3]));
runTest("testShort", (short) -1, supply(() -> new short[3]));
runTest("testShort", (short) 0, supply(() -> new short[3]));
@@ -251,7 +251,7 @@
}
@Test
- public void runByte() throws Throwable {
+ public void runByte() {
runTest("testByte", Byte.MIN_VALUE, supply(() -> new byte[3]));
runTest("testByte", (byte) -1, supply(() -> new byte[3]));
runTest("testByte", (byte) 0, supply(() -> new byte[3]));
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/StackStoreLoadTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.jtt/src/org/graalvm/compiler/lir/jtt/StackStoreLoadTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2017, Red Hat Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -139,7 +139,7 @@
}
@Test
- public void runByte() throws Throwable {
+ public void runByte() {
runTest("testByte", Byte.MIN_VALUE, supply(() -> new byte[3]));
runTest("testByte", (byte) -1, supply(() -> new byte[3]));
runTest("testByte", (byte) 0, supply(() -> new byte[3]));
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/LIRVerifier.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/LIRVerifier.java Fri Jul 26 19:11:34 2019 -0400
@@ -25,7 +25,7 @@
package org.graalvm.compiler.lir;
import static org.graalvm.compiler.lir.LIRValueUtil.asVariable;
-import static org.graalvm.compiler.lir.LIRValueUtil.isJavaConstant;
+import static org.graalvm.compiler.lir.LIRValueUtil.isConstantValue;
import static org.graalvm.compiler.lir.LIRValueUtil.isStackSlotValue;
import static org.graalvm.compiler.lir.LIRValueUtil.isVariable;
import static jdk.vm.ci.code.ValueUtil.asRegister;
@@ -242,7 +242,7 @@
if ((isVariable(value) && flags.contains(OperandFlag.REG)) ||
(isRegister(value) && flags.contains(OperandFlag.REG)) ||
(isStackSlotValue(value) && flags.contains(OperandFlag.STACK)) ||
- (isJavaConstant(value) && flags.contains(OperandFlag.CONST) && mode != OperandMode.DEF) ||
+ (isConstantValue(value) && flags.contains(OperandFlag.CONST) && mode != OperandMode.DEF) ||
(isIllegal(value) && flags.contains(OperandFlag.ILLEGAL))) {
return;
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/StandardOp.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/StandardOp.java Fri Jul 26 19:11:34 2019 -0400
@@ -35,6 +35,7 @@
import jdk.internal.vm.compiler.collections.EconomicSet;
import org.graalvm.compiler.asm.Label;
+import org.graalvm.compiler.core.common.GraalOptions;
import org.graalvm.compiler.core.common.cfg.AbstractBlockBase;
import org.graalvm.compiler.debug.GraalError;
import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
@@ -154,7 +155,7 @@
@Override
public void emitCode(CompilationResultBuilder crb) {
if (align) {
- crb.asm.align(crb.target.wordSize * 2);
+ crb.asm.align(GraalOptions.LoopHeaderAlignment.getValue(crb.getOptions()));
}
crb.asm.bind(label);
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/asm/CompilationResultBuilder.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/asm/CompilationResultBuilder.java Fri Jul 26 19:11:34 2019 -0400
@@ -127,7 +127,7 @@
public final Assembler asm;
public final DataBuilder dataBuilder;
public final CompilationResult compilationResult;
- public final Register nullRegister;
+ public final Register uncompressedNullRegister;
public final TargetDescription target;
public final CodeCacheProvider codeCache;
public final ForeignCallsProvider foreignCalls;
@@ -171,17 +171,44 @@
*/
private boolean conservativeLabelOffsets = false;
- public final boolean mustReplaceWithNullRegister(JavaConstant nullConstant) {
- return !nullRegister.equals(Register.None) && JavaConstant.NULL_POINTER.equals(nullConstant);
+ public final boolean mustReplaceWithUncompressedNullRegister(JavaConstant nullConstant) {
+ return !uncompressedNullRegister.equals(Register.None) && JavaConstant.NULL_POINTER.equals(nullConstant);
}
- public CompilationResultBuilder(CodeCacheProvider codeCache, ForeignCallsProvider foreignCalls, FrameMap frameMap, Assembler asm, DataBuilder dataBuilder, FrameContext frameContext,
- OptionValues options, DebugContext debug, CompilationResult compilationResult, Register nullRegister) {
- this(codeCache, foreignCalls, frameMap, asm, dataBuilder, frameContext, options, debug, compilationResult, nullRegister, EconomicMap.create(Equivalence.DEFAULT));
+ public CompilationResultBuilder(CodeCacheProvider codeCache,
+ ForeignCallsProvider foreignCalls,
+ FrameMap frameMap,
+ Assembler asm,
+ DataBuilder dataBuilder,
+ FrameContext frameContext,
+ OptionValues options,
+ DebugContext debug,
+ CompilationResult compilationResult,
+ Register uncompressedNullRegister) {
+ this(codeCache,
+ foreignCalls,
+ frameMap,
+ asm,
+ dataBuilder,
+ frameContext,
+ options,
+ debug,
+ compilationResult,
+ uncompressedNullRegister,
+ EconomicMap.create(Equivalence.DEFAULT));
}
- public CompilationResultBuilder(CodeCacheProvider codeCache, ForeignCallsProvider foreignCalls, FrameMap frameMap, Assembler asm, DataBuilder dataBuilder, FrameContext frameContext,
- OptionValues options, DebugContext debug, CompilationResult compilationResult, Register nullRegister, EconomicMap<Constant, Data> dataCache) {
+ public CompilationResultBuilder(CodeCacheProvider codeCache,
+ ForeignCallsProvider foreignCalls,
+ FrameMap frameMap,
+ Assembler asm,
+ DataBuilder dataBuilder,
+ FrameContext frameContext,
+ OptionValues options,
+ DebugContext debug,
+ CompilationResult compilationResult,
+ Register uncompressedNullRegister,
+ EconomicMap<Constant, Data> dataCache) {
this.target = codeCache.getTarget();
this.codeCache = codeCache;
this.foreignCalls = foreignCalls;
@@ -189,7 +216,7 @@
this.asm = asm;
this.dataBuilder = dataBuilder;
this.compilationResult = compilationResult;
- this.nullRegister = nullRegister;
+ this.uncompressedNullRegister = uncompressedNullRegister;
this.frameContext = frameContext;
this.options = options;
this.debug = debug;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/asm/CompilationResultBuilderFactory.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/asm/CompilationResultBuilderFactory.java Fri Jul 26 19:11:34 2019 -0400
@@ -52,8 +52,8 @@
@Override
public CompilationResultBuilder createBuilder(CodeCacheProvider codeCache, ForeignCallsProvider foreignCalls, FrameMap frameMap, Assembler asm, DataBuilder dataBuilder,
- FrameContext frameContext, OptionValues options, DebugContext debug, CompilationResult compilationResult, Register nullRegister) {
- return new CompilationResultBuilder(codeCache, foreignCalls, frameMap, asm, dataBuilder, frameContext, options, debug, compilationResult, nullRegister);
+ FrameContext frameContext, OptionValues options, DebugContext debug, CompilationResult compilationResult, Register uncompressedNullRegister) {
+ return new CompilationResultBuilder(codeCache, foreignCalls, frameMap, asm, dataBuilder, frameContext, options, debug, compilationResult, uncompressedNullRegister);
}
};
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/gen/LIRGenerator.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/gen/LIRGenerator.java Fri Jul 26 19:11:34 2019 -0400
@@ -60,9 +60,9 @@
import org.graalvm.compiler.lir.StandardOp.BlockEndOp;
import org.graalvm.compiler.lir.StandardOp.LabelOp;
import org.graalvm.compiler.lir.StandardOp.SaveRegistersOp;
-import org.graalvm.compiler.lir.hashing.Hasher;
import org.graalvm.compiler.lir.SwitchStrategy;
import org.graalvm.compiler.lir.Variable;
+import org.graalvm.compiler.lir.hashing.Hasher;
import org.graalvm.compiler.options.Option;
import org.graalvm.compiler.options.OptionKey;
import org.graalvm.compiler.options.OptionType;
@@ -230,11 +230,31 @@
}
@Override
+ public Variable emitReadRegister(Register register, ValueKind<?> kind) {
+ return emitMove(register.asValue(kind));
+ }
+
+ @Override
+ public void emitWriteRegister(Register dst, Value src, ValueKind<?> kind) {
+ emitMove(dst.asValue(kind), src);
+ }
+
+ @Override
public void emitMoveConstant(AllocatableValue dst, Constant src) {
append(moveFactory.createLoad(dst, src));
}
@Override
+ public boolean canInlineConstant(Constant constant) {
+ return moveFactory.canInlineConstant(constant);
+ }
+
+ @Override
+ public boolean mayEmbedConstantLoad(Constant constant) {
+ return moveFactory.mayEmbedConstantLoad(constant);
+ }
+
+ @Override
public Value emitConstant(LIRKind kind, Constant constant) {
if (moveFactory.canInlineConstant(constant)) {
return new ConstantValue(toRegisterKind(kind), constant);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/gen/LIRGeneratorTool.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/gen/LIRGeneratorTool.java Fri Jul 26 19:11:34 2019 -0400
@@ -65,14 +65,22 @@
interface MoveFactory {
/**
+ * Checks whether the loading of the supplied constant can be deferred until usage.
+ */
+ @SuppressWarnings("unused")
+ default boolean mayEmbedConstantLoad(Constant constant) {
+ return false;
+ }
+
+ /**
* Checks whether the supplied constant can be used without loading it into a register for
* most operations, i.e., for commonly used arithmetic, logical, and comparison operations.
*
- * @param c The constant to check.
+ * @param constant The constant to check.
* @return True if the constant can be used directly, false if the constant needs to be in a
* register.
*/
- boolean canInlineConstant(Constant c);
+ boolean canInlineConstant(Constant constant);
/**
* @param constant The constant that might be moved to a stack slot.
@@ -130,6 +138,10 @@
BlockScope getBlockScope(AbstractBlockBase<?> block);
+ boolean canInlineConstant(Constant constant);
+
+ boolean mayEmbedConstantLoad(Constant constant);
+
Value emitConstant(LIRKind kind, Constant constant);
Value emitJavaConstant(JavaConstant constant);
@@ -192,6 +204,10 @@
void emitMove(AllocatableValue dst, Value src);
+ Variable emitReadRegister(Register register, ValueKind<?> kind);
+
+ void emitWriteRegister(Register dst, Value src, ValueKind<?> wordStamp);
+
void emitMoveConstant(AllocatableValue dst, Constant src);
Variable emitAddress(AllocatableValue stackslot);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/ssa/SSAVerifier.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/ssa/SSAVerifier.java Fri Jul 26 19:11:34 2019 -0400
@@ -26,7 +26,7 @@
package org.graalvm.compiler.lir.ssa;
import static jdk.vm.ci.code.ValueUtil.isRegister;
-import static org.graalvm.compiler.lir.LIRValueUtil.isJavaConstant;
+import static org.graalvm.compiler.lir.LIRValueUtil.isConstantValue;
import static org.graalvm.compiler.lir.LIRValueUtil.isStackSlotValue;
import java.util.BitSet;
@@ -137,7 +137,7 @@
}
private static boolean shouldProcess(Value value) {
- return !value.equals(Value.ILLEGAL) && !isJavaConstant(value) && !isRegister(value) && !isStackSlotValue(value);
+ return !value.equals(Value.ILLEGAL) && !isConstantValue(value) && !isRegister(value) && !isStackSlotValue(value);
}
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop.test/src/org/graalvm/compiler/loop/test/LoopPartialUnrollTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop.test/src/org/graalvm/compiler/loop/test/LoopPartialUnrollTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -26,7 +26,9 @@
import java.util.ListIterator;
+import org.graalvm.compiler.api.directives.GraalDirectives;
import org.graalvm.compiler.core.common.CompilationIdentifier;
+import org.graalvm.compiler.core.common.GraalOptions;
import org.graalvm.compiler.core.test.GraalCompilerTest;
import org.graalvm.compiler.debug.DebugContext;
import org.graalvm.compiler.graph.iterators.NodeIterable;
@@ -216,6 +218,25 @@
test("testSignExtensionSnippet", 9L);
}
+ public static Object objectPhi(int n) {
+ Integer v = Integer.valueOf(200);
+ GraalDirectives.blackhole(v); // Prevents PEA
+ Integer r = 1;
+
+ for (int i = 0; iterationCount(100, i < n); i++) {
+ GraalDirectives.blackhole(r); // Create a phi of two loop invariants
+ r = v;
+ }
+
+ return r;
+ }
+
+ @Test
+ public void testObjectPhi() {
+ OptionValues options = new OptionValues(getInitialOptions(), GraalOptions.LoopPeeling, false);
+ test(options, "objectPhi", 1);
+ }
+
@Override
protected Suites createSuites(OptionValues opts) {
Suites suites = super.createSuites(opts).copy();
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopEx.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopEx.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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
@@ -344,7 +344,7 @@
}
}
}
- LoopFragment.computeNodes(branchNodes, branch.graph(), blocks, exits);
+ LoopFragment.computeNodes(branchNodes, branch.graph(), this, blocks, exits);
}
public EconomicMap<Node, InductionVariable> getInductionVariables() {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopFragment.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopFragment.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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
@@ -25,12 +25,11 @@
package org.graalvm.compiler.loop;
import java.util.ArrayDeque;
-import java.util.Collections;
import java.util.Deque;
import java.util.Iterator;
import jdk.internal.vm.compiler.collections.EconomicMap;
-import org.graalvm.compiler.debug.GraalError;
+import org.graalvm.compiler.core.common.cfg.AbstractControlFlowGraph;
import org.graalvm.compiler.graph.Graph;
import org.graalvm.compiler.graph.Graph.DuplicationReplacement;
import org.graalvm.compiler.graph.Node;
@@ -42,18 +41,15 @@
import org.graalvm.compiler.nodes.FixedNode;
import org.graalvm.compiler.nodes.FrameState;
import org.graalvm.compiler.nodes.GuardNode;
-import org.graalvm.compiler.nodes.GuardPhiNode;
import org.graalvm.compiler.nodes.GuardProxyNode;
import org.graalvm.compiler.nodes.Invoke;
+import org.graalvm.compiler.nodes.LoopBeginNode;
import org.graalvm.compiler.nodes.LoopExitNode;
import org.graalvm.compiler.nodes.MergeNode;
-import org.graalvm.compiler.nodes.NodeView;
import org.graalvm.compiler.nodes.PhiNode;
import org.graalvm.compiler.nodes.ProxyNode;
import org.graalvm.compiler.nodes.StructuredGraph;
import org.graalvm.compiler.nodes.ValueNode;
-import org.graalvm.compiler.nodes.ValuePhiNode;
-import org.graalvm.compiler.nodes.ValueProxyNode;
import org.graalvm.compiler.nodes.VirtualState;
import org.graalvm.compiler.nodes.cfg.Block;
import org.graalvm.compiler.nodes.cfg.ControlFlowGraph;
@@ -199,17 +195,7 @@
}
}
- protected static NodeBitMap computeNodes(Graph graph, Iterable<AbstractBeginNode> blocks) {
- return computeNodes(graph, blocks, Collections.emptyList());
- }
-
- protected static NodeBitMap computeNodes(Graph graph, Iterable<AbstractBeginNode> blocks, Iterable<AbstractBeginNode> earlyExits) {
- final NodeBitMap nodes = graph.createNodeBitMap();
- computeNodes(nodes, graph, blocks, earlyExits);
- return nodes;
- }
-
- protected static void computeNodes(NodeBitMap nodes, Graph graph, Iterable<AbstractBeginNode> blocks, Iterable<AbstractBeginNode> earlyExits) {
+ protected static void computeNodes(NodeBitMap nodes, Graph graph, LoopEx loop, Iterable<AbstractBeginNode> blocks, Iterable<AbstractBeginNode> earlyExits) {
for (AbstractBeginNode b : blocks) {
if (b.isDeleted()) {
continue;
@@ -261,11 +247,11 @@
for (Node n : b.getBlockNodes()) {
if (n instanceof CommitAllocationNode) {
for (VirtualObjectNode obj : ((CommitAllocationNode) n).getVirtualObjects()) {
- markFloating(worklist, obj, nodes, nonLoopNodes);
+ markFloating(worklist, loop, obj, nodes, nonLoopNodes);
}
}
if (n instanceof MonitorEnterNode) {
- markFloating(worklist, ((MonitorEnterNode) n).getMonitorId(), nodes, nonLoopNodes);
+ markFloating(worklist, loop, ((MonitorEnterNode) n).getMonitorId(), nodes, nonLoopNodes);
}
if (n instanceof AbstractMergeNode) {
/*
@@ -274,12 +260,12 @@
*/
for (PhiNode phi : ((AbstractMergeNode) n).phis()) {
for (Node usage : phi.usages()) {
- markFloating(worklist, usage, nodes, nonLoopNodes);
+ markFloating(worklist, loop, usage, nodes, nonLoopNodes);
}
}
}
for (Node usage : n.usages()) {
- markFloating(worklist, usage, nodes, nonLoopNodes);
+ markFloating(worklist, loop, usage, nodes, nonLoopNodes);
}
}
}
@@ -331,10 +317,14 @@
workList.push(entry);
}
- private static void markFloating(Deque<WorkListEntry> workList, Node start, NodeBitMap loopNodes, NodeBitMap nonLoopNodes) {
+ private static void markFloating(Deque<WorkListEntry> workList, LoopEx loop, Node start, NodeBitMap loopNodes, NodeBitMap nonLoopNodes) {
if (isLoopNode(start, loopNodes, nonLoopNodes).isKnown()) {
return;
}
+
+ LoopBeginNode loopBeginNode = loop.loopBegin();
+ ControlFlowGraph cfg = loop.loopsData().getCFG();
+
pushWorkList(workList, start, loopNodes);
while (!workList.isEmpty()) {
WorkListEntry currentEntry = workList.peek();
@@ -352,13 +342,27 @@
workList.pop();
boolean isLoopNode = currentEntry.isLoopNode;
Node current = currentEntry.n;
- if (!isLoopNode && current instanceof GuardNode) {
- /*
- * (gd) this is only OK if we are not going to make loop transforms based on
- * this
- */
- assert !((GuardNode) current).graph().hasValueProxies();
- isLoopNode = true;
+ if (!isLoopNode && current instanceof GuardNode && !current.hasUsages()) {
+ GuardNode guard = (GuardNode) current;
+ if (isLoopNode(guard.getCondition(), loopNodes, nonLoopNodes) != TriState.FALSE) {
+ ValueNode anchor = guard.getAnchor().asNode();
+ TriState isAnchorInLoop = isLoopNode(anchor, loopNodes, nonLoopNodes);
+ if (isAnchorInLoop != TriState.FALSE) {
+ if (!(anchor instanceof LoopExitNode && ((LoopExitNode) anchor).loopBegin() == loopBeginNode)) {
+ /*
+ * (gd) this is wrong in general, it's completely avoidable while we
+ * are doing loop transforms using ValueProxies. If it happens after
+ * it could still cause problem.
+ */
+ assert !((GuardNode) current).graph().hasValueProxies();
+ isLoopNode = true;
+ }
+ } else if (AbstractControlFlowGraph.strictlyDominates(cfg.blockFor(anchor), cfg.blockFor(loopBeginNode))) {
+ // The anchor is above the loop. The no-usage guard can potentially be
+ // scheduled inside the loop.
+ isLoopNode = true;
+ }
+ }
}
if (isLoopNode) {
loopNodes.mark(current);
@@ -467,14 +471,7 @@
final ValueNode replaceWith;
ValueNode newVpn = prim(newEarlyExitIsLoopExit ? vpn : vpn.value());
if (newVpn != null) {
- PhiNode phi;
- if (vpn instanceof ValueProxyNode) {
- phi = graph.addWithoutUnique(new ValuePhiNode(vpn.stamp(NodeView.DEFAULT), merge));
- } else if (vpn instanceof GuardProxyNode) {
- phi = graph.addWithoutUnique(new GuardPhiNode(merge));
- } else {
- throw GraalError.shouldNotReachHere();
- }
+ PhiNode phi = vpn.createPhi(merge);
phi.addInput(vpn);
phi.addInput(newVpn);
replaceWith = phi;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopFragmentInside.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopFragmentInside.java Fri Jul 26 19:11:34 2019 -0400
@@ -169,12 +169,13 @@
LoopBeginNode mainLoopBegin = loop.loopBegin();
ArrayList<ValueNode> backedgeValues = new ArrayList<>();
for (PhiNode mainPhiNode : mainLoopBegin.phis()) {
- ValueNode duplicatedNode = getDuplicatedNode(mainPhiNode.valueAt(1));
+ ValueNode originalNode = mainPhiNode.valueAt(1);
+ ValueNode duplicatedNode = getDuplicatedNode(originalNode);
if (duplicatedNode == null) {
- if (mainLoopBegin.isPhiAtMerge(mainPhiNode.valueAt(1))) {
- duplicatedNode = ((PhiNode) (mainPhiNode.valueAt(1))).valueAt(1);
+ if (mainLoopBegin.isPhiAtMerge(originalNode)) {
+ duplicatedNode = ((PhiNode) (originalNode)).valueAt(1);
} else {
- assert mainPhiNode.valueAt(1).isConstant() : mainPhiNode.valueAt(1);
+ assert originalNode.isConstant() || loop.isOutsideLoop(originalNode) : "Not duplicated node " + originalNode;
}
}
backedgeValues.add(duplicatedNode);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopFragmentWhole.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopFragmentWhole.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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
@@ -64,7 +64,9 @@
public NodeBitMap nodes() {
if (nodes == null) {
Loop<Block> loop = loop().loop();
- nodes = LoopFragment.computeNodes(graph(), LoopFragment.toHirBlocks(loop.getBlocks()), LoopFragment.toHirBlocks(loop.getLoopExits()));
+ NodeBitMap loopNodes = graph().createNodeBitMap();
+ LoopFragment.computeNodes(loopNodes, graph(), loop(), LoopFragment.toHirBlocks(loop.getBlocks()), LoopFragment.toHirBlocks(loop.getLoopExits()));
+ nodes = loopNodes;
}
return nodes;
}
@@ -110,7 +112,6 @@
@Override
public void insertBefore(LoopEx loop) {
- // TODO Auto-generated method stub
-
+ // nothing to do
}
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/AbstractBeginNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/AbstractBeginNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -59,21 +59,20 @@
Node next = from;
while (next != null) {
if (next instanceof AbstractBeginNode) {
- AbstractBeginNode begin = (AbstractBeginNode) next;
- return begin;
+ return (AbstractBeginNode) next;
}
next = next.predecessor();
}
return null;
}
- private void evacuateGuards(FixedNode evacuateFrom) {
+ private void evacuateAnchored(FixedNode evacuateFrom) {
if (!hasNoUsages()) {
AbstractBeginNode prevBegin = prevBegin(evacuateFrom);
assert prevBegin != null;
- for (Node anchored : anchored().snapshot()) {
- anchored.replaceFirstInput(this, prevBegin);
- }
+ replaceAtUsages(InputType.Anchor, prevBegin);
+ replaceAtUsages(InputType.Guard, prevBegin);
+ assert anchored().isEmpty() : anchored().snapshot();
}
}
@@ -82,7 +81,7 @@
}
public void prepareDelete(FixedNode evacuateFrom) {
- evacuateGuards(evacuateFrom);
+ evacuateAnchored(evacuateFrom);
}
@Override
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/ConstantNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/ConstantNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2019, 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
@@ -38,11 +38,14 @@
import org.graalvm.compiler.debug.GraalError;
import org.graalvm.compiler.graph.Node;
import org.graalvm.compiler.graph.NodeClass;
+import org.graalvm.compiler.graph.NodeMap;
import org.graalvm.compiler.graph.iterators.NodeIterable;
import org.graalvm.compiler.lir.ConstantValue;
+import org.graalvm.compiler.lir.gen.LIRGeneratorTool;
import org.graalvm.compiler.nodeinfo.NodeInfo;
import org.graalvm.compiler.nodeinfo.Verbosity;
import org.graalvm.compiler.nodes.calc.FloatingNode;
+import org.graalvm.compiler.nodes.cfg.Block;
import org.graalvm.compiler.nodes.spi.ArrayLengthProvider;
import org.graalvm.compiler.nodes.spi.LIRLowerable;
import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
@@ -143,14 +146,32 @@
@Override
public void generate(NodeLIRBuilderTool gen) {
- LIRKind kind = gen.getLIRGeneratorTool().getLIRKind(stamp(NodeView.DEFAULT));
+ LIRGeneratorTool lirTool = gen.getLIRGeneratorTool();
+ LIRKind kind = lirTool.getLIRKind(stamp(NodeView.DEFAULT));
if (onlyUsedInVirtualState()) {
gen.setResult(this, new ConstantValue(kind, value));
+ } else if (lirTool.canInlineConstant(value) || (lirTool.mayEmbedConstantLoad(value) && hasExactlyOneUsage() && onlyUsedInCurrentBlock())) {
+ gen.setResult(this, new ConstantValue(lirTool.toRegisterKind(kind), value));
} else {
gen.setResult(this, gen.getLIRGeneratorTool().emitConstant(kind, value));
}
}
+ /**
+ * Expecting false for loop invariant.
+ */
+ private boolean onlyUsedInCurrentBlock() {
+ assert graph().getLastSchedule() != null;
+ NodeMap<Block> nodeBlockMap = graph().getLastSchedule().getNodeToBlockMap();
+ Block currentBlock = nodeBlockMap.get(this);
+ for (Node usage : usages()) {
+ if (currentBlock != nodeBlockMap.get(usage)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
private boolean onlyUsedInVirtualState() {
for (Node n : this.usages()) {
if (n instanceof VirtualState) {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/EntryMarkerNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/EntryMarkerNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -30,7 +30,9 @@
import org.graalvm.compiler.debug.GraalError;
import org.graalvm.compiler.graph.IterableNodeType;
+import org.graalvm.compiler.graph.Node;
import org.graalvm.compiler.graph.NodeClass;
+import org.graalvm.compiler.graph.iterators.NodeIterable;
import org.graalvm.compiler.nodeinfo.NodeInfo;
import org.graalvm.compiler.nodes.spi.LIRLowerable;
import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
@@ -51,4 +53,24 @@
public void generate(NodeLIRBuilderTool gen) {
throw new GraalError("OnStackReplacementNode should not survive");
}
+
+ @Override
+ public NodeIterable<Node> anchored() {
+ return super.anchored().filter(n -> {
+ if (n instanceof EntryProxyNode) {
+ EntryProxyNode proxyNode = (EntryProxyNode) n;
+ return proxyNode.proxyPoint != this;
+ }
+ return true;
+ });
+ }
+
+ @Override
+ public void prepareDelete(FixedNode evacuateFrom) {
+ for (Node usage : usages().filter(EntryProxyNode.class).snapshot()) {
+ EntryProxyNode proxy = (EntryProxyNode) usage;
+ proxy.replaceAndDelete(proxy.value());
+ }
+ super.prepareDelete(evacuateFrom);
+ }
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/FixedGuardNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/FixedGuardNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -30,19 +30,22 @@
import org.graalvm.compiler.debug.DebugCloseable;
import org.graalvm.compiler.graph.IterableNodeType;
+import org.graalvm.compiler.graph.Node;
import org.graalvm.compiler.graph.NodeClass;
import org.graalvm.compiler.graph.NodeSourcePosition;
import org.graalvm.compiler.graph.spi.SimplifierTool;
import org.graalvm.compiler.nodeinfo.NodeInfo;
+import org.graalvm.compiler.nodes.calc.IntegerEqualsNode;
import org.graalvm.compiler.nodes.spi.Lowerable;
import org.graalvm.compiler.nodes.spi.LoweringTool;
+import org.graalvm.compiler.nodes.spi.SwitchFoldable;
import jdk.vm.ci.meta.DeoptimizationAction;
import jdk.vm.ci.meta.DeoptimizationReason;
import jdk.vm.ci.meta.SpeculationLog;
@NodeInfo(nameTemplate = "FixedGuard(!={p#negated}) {p#reason/s}", allowedUsageTypes = Guard, size = SIZE_2, cycles = CYCLES_2)
-public final class FixedGuardNode extends AbstractFixedGuardNode implements Lowerable, IterableNodeType {
+public final class FixedGuardNode extends AbstractFixedGuardNode implements Lowerable, IterableNodeType, SwitchFoldable {
public static final NodeClass<FixedGuardNode> TYPE = NodeClass.create(FixedGuardNode.class);
public FixedGuardNode(LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action) {
@@ -115,4 +118,92 @@
public boolean canDeoptimize() {
return true;
}
+
+ @Override
+ public Node getNextSwitchFoldableBranch() {
+ return next();
+ }
+
+ @Override
+ public boolean isInSwitch(ValueNode switchValue) {
+ return hasNoUsages() && isNegated() && SwitchFoldable.maybeIsInSwitch(condition()) && SwitchFoldable.sameSwitchValue(condition(), switchValue);
+ }
+
+ @Override
+ public void cutOffCascadeNode() {
+ /* nop */
+ }
+
+ @Override
+ public void cutOffLowestCascadeNode() {
+ setNext(null);
+ }
+
+ @Override
+ public boolean isDefaultSuccessor(AbstractBeginNode beginNode) {
+ return beginNode.next() == next();
+ }
+
+ @Override
+ public AbstractBeginNode getDefault() {
+ FixedNode defaultNode = next();
+ setNext(null);
+ return BeginNode.begin(defaultNode);
+ }
+
+ @Override
+ public ValueNode switchValue() {
+ if (SwitchFoldable.maybeIsInSwitch(condition())) {
+ return ((IntegerEqualsNode) condition()).getX();
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isNonInitializedProfile() {
+ // @formatter:off
+ // Checkstyle: stop
+ /*
+ * These nodes can appear in non initialized cascades. Though they are technically profiled
+ * nodes, their presence does not really prevent us from constructing a uniform distribution
+ * for the new switch, while keeping these to probability 0. Furthermore, these can be the
+ * result of the pattern:
+ * if (c) {
+ * CompilerDirectives.transferToInterpreter();
+ * }
+ * Since we cannot differentiate this case from, say, a guard created because profiling
+ * determined that the branch was never taken, and given what we saw before, we will
+ * consider all fixedGuards as nodes with no profiles for switch folding purposes.
+ */
+ // Checkstyle: resume
+ // @formatter:on
+ return true;
+ }
+
+ @Override
+ public int intKeyAt(int i) {
+ assert i == 0;
+ return ((IntegerEqualsNode) condition()).getY().asJavaConstant().asInt();
+ }
+
+ @Override
+ public double keyProbability(int i) {
+ return 0;
+ }
+
+ @Override
+ public AbstractBeginNode keySuccessor(int i) {
+ DeoptimizeNode deopt = new DeoptimizeNode(getAction(), getReason(), getSpeculation());
+ deopt.setNodeSourcePosition(getNodeSourcePosition());
+ AbstractBeginNode begin = new BeginNode();
+ // Link the two nodes, but do not add them to the graph yet, so we do not need to remove
+ // them on an abort.
+ begin.next = deopt;
+ return begin;
+ }
+
+ @Override
+ public double defaultProbability() {
+ return 1.0d;
+ }
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/GraphDecoder.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/GraphDecoder.java Fri Jul 26 19:11:34 2019 -0400
@@ -319,7 +319,7 @@
public static final NodeClass<ProxyPlaceholder> TYPE = NodeClass.create(ProxyPlaceholder.class);
@Input ValueNode value;
- @Input(InputType.Unchecked) Node proxyPoint;
+ @Input(InputType.Association) Node proxyPoint;
public ProxyPlaceholder(ValueNode value, MergeNode proxyPoint) {
super(TYPE, value.stamp(NodeView.DEFAULT));
@@ -884,14 +884,7 @@
if (!merge.isPhiAtMerge(existing)) {
/* Now we have two different values, so we need to create a phi node. */
- PhiNode phi;
- if (proxy instanceof ValueProxyNode) {
- phi = graph.addWithoutUnique(new ValuePhiNode(proxy.stamp(NodeView.DEFAULT), merge));
- } else if (proxy instanceof GuardProxyNode) {
- phi = graph.addWithoutUnique(new GuardPhiNode(merge));
- } else {
- throw GraalError.shouldNotReachHere();
- }
+ PhiNode phi = proxy.createPhi(merge);
/* Add the inputs from all previous exits. */
for (int j = 0; j < merge.phiPredecessorCount() - 1; j++) {
phi.addInput(existing);
@@ -1336,6 +1329,11 @@
* @param methodScope The current method.
*/
protected void cleanupGraph(MethodScope methodScope) {
+ for (MergeNode merge : graph.getNodes(MergeNode.TYPE)) {
+ for (ProxyPlaceholder placeholder : merge.usages().filter(ProxyPlaceholder.class).snapshot()) {
+ placeholder.replaceAndDelete(placeholder.value);
+ }
+ }
assert verifyEdges();
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/GuardProxyNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/GuardProxyNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -62,6 +62,11 @@
}
@Override
+ public PhiNode createPhi(AbstractMergeNode merge) {
+ return graph().addWithoutUnique(new GuardPhiNode(merge));
+ }
+
+ @Override
public Node getOriginalNode() {
return (value == null ? null : value.asNode());
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/IfNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/IfNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -42,6 +42,7 @@
import org.graalvm.compiler.core.common.calc.Condition;
import org.graalvm.compiler.core.common.type.FloatStamp;
import org.graalvm.compiler.core.common.type.IntegerStamp;
+import org.graalvm.compiler.core.common.type.PrimitiveStamp;
import org.graalvm.compiler.core.common.type.Stamp;
import org.graalvm.compiler.core.common.type.StampFactory;
import org.graalvm.compiler.debug.CounterKey;
@@ -71,8 +72,10 @@
import org.graalvm.compiler.nodes.java.LoadFieldNode;
import org.graalvm.compiler.nodes.spi.LIRLowerable;
import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
+import org.graalvm.compiler.nodes.spi.SwitchFoldable;
import org.graalvm.compiler.nodes.util.GraphUtil;
+import jdk.vm.ci.code.CodeUtil;
import jdk.vm.ci.meta.Constant;
import jdk.vm.ci.meta.JavaConstant;
import jdk.vm.ci.meta.JavaKind;
@@ -87,7 +90,7 @@
* of a comparison.
*/
@NodeInfo(cycles = CYCLES_1, size = SIZE_2, sizeRationale = "2 jmps")
-public final class IfNode extends ControlSplitNode implements Simplifiable, LIRLowerable {
+public final class IfNode extends ControlSplitNode implements Simplifiable, LIRLowerable, SwitchFoldable {
public static final NodeClass<IfNode> TYPE = NodeClass.create(IfNode.class);
private static final CounterKey CORRECTED_PROBABILITIES = DebugContext.counter("CorrectedProbabilities");
@@ -297,6 +300,10 @@
return;
}
+ if (switchTransformationOptimization(tool)) {
+ return;
+ }
+
if (falseSuccessor().hasNoUsages() && (!(falseSuccessor() instanceof LoopExitNode)) && falseSuccessor().next() instanceof IfNode &&
!(((IfNode) falseSuccessor().next()).falseSuccessor() instanceof LoopExitNode)) {
AbstractBeginNode intermediateBegin = falseSuccessor();
@@ -454,6 +461,70 @@
return true;
}
+ // SwitchFoldable implementation.
+
+ @Override
+ public Node getNextSwitchFoldableBranch() {
+ return falseSuccessor();
+ }
+
+ @Override
+ public boolean isInSwitch(ValueNode switchValue) {
+ return SwitchFoldable.maybeIsInSwitch(condition()) && SwitchFoldable.sameSwitchValue(condition(), switchValue);
+ }
+
+ @Override
+ public void cutOffCascadeNode() {
+ setTrueSuccessor(null);
+ }
+
+ @Override
+ public void cutOffLowestCascadeNode() {
+ setFalseSuccessor(null);
+ setTrueSuccessor(null);
+ }
+
+ @Override
+ public AbstractBeginNode getDefault() {
+ return falseSuccessor();
+ }
+
+ @Override
+ public ValueNode switchValue() {
+ if (SwitchFoldable.maybeIsInSwitch(condition())) {
+ return ((IntegerEqualsNode) condition()).getX();
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isNonInitializedProfile() {
+ return getTrueSuccessorProbability() == 0.5d;
+ }
+
+ @Override
+ public int intKeyAt(int i) {
+ assert i == 0;
+ return ((IntegerEqualsNode) condition()).getY().asJavaConstant().asInt();
+ }
+
+ @Override
+ public double keyProbability(int i) {
+ assert i == 0;
+ return getTrueSuccessorProbability();
+ }
+
+ @Override
+ public AbstractBeginNode keySuccessor(int i) {
+ assert i == 0;
+ return trueSuccessor();
+ }
+
+ @Override
+ public double defaultProbability() {
+ return 1.0d - getTrueSuccessorProbability();
+ }
+
/**
* Try to optimize this as if it were a {@link ConditionalNode}.
*/
@@ -606,6 +677,50 @@
}
}
}
+ } else if (y instanceof PrimitiveConstant && ((PrimitiveConstant) y).asLong() < 0 && falseSuccessor().next() instanceof IfNode) {
+ IfNode ifNode2 = (IfNode) falseSuccessor().next();
+ AbstractBeginNode falseSucc = ifNode2.falseSuccessor();
+ AbstractBeginNode trueSucc = ifNode2.trueSuccessor();
+ IntegerBelowNode below = null;
+ if (ifNode2.condition() instanceof IntegerLessThanNode) {
+ ValueNode x = lessThan.getX();
+ IntegerLessThanNode lessThan2 = (IntegerLessThanNode) ifNode2.condition();
+ /*
+ * Convert x >= -C1 && x < C2, represented as !(x < -C1) && x < C2, into an
+ * unsigned compare. This condition is equivalent to x + C1 |<| C1 + C2 if C1 +
+ * C2 does not overflow.
+ */
+ Constant c2 = lessThan2.getY().stamp(view).asConstant();
+ if (lessThan2.getX() == x && c2 instanceof PrimitiveConstant && ((PrimitiveConstant) c2).asLong() > 0 &&
+ x.stamp(view).isCompatible(lessThan.getY().stamp(view)) &&
+ x.stamp(view).isCompatible(lessThan2.getY().stamp(view)) &&
+ sameDestination(trueSuccessor(), ifNode2.falseSuccessor)) {
+ long newLimitValue = -((PrimitiveConstant) y).asLong() + ((PrimitiveConstant) c2).asLong();
+ // Make sure the limit fits into the target type without overflow.
+ if (newLimitValue > 0 && newLimitValue <= CodeUtil.maxValue(PrimitiveStamp.getBits(x.stamp(view)))) {
+ ConstantNode newLimit = ConstantNode.forIntegerStamp(x.stamp(view), newLimitValue, graph());
+ ConstantNode c1 = ConstantNode.forIntegerStamp(x.stamp(view), -((PrimitiveConstant) y).asLong(), graph());
+ ValueNode addNode = graph().addOrUniqueWithInputs(AddNode.create(x, c1, view));
+ below = graph().unique(new IntegerBelowNode(addNode, newLimit));
+ }
+ }
+ }
+ if (below != null) {
+ try (DebugCloseable position = ifNode2.withNodeSourcePosition()) {
+ ifNode2.setTrueSuccessor(null);
+ ifNode2.setFalseSuccessor(null);
+
+ IfNode newIfNode = graph().add(new IfNode(below, trueSucc, falseSucc, trueSuccessorProbability));
+ // Remove the < -C1 test.
+ tool.deleteBranch(trueSuccessor);
+ graph().removeSplit(this, falseSuccessor);
+
+ // Replace the second test with the new one.
+ ifNode2.predecessor().replaceFirstSuccessor(ifNode2, newIfNode);
+ ifNode2.safeDelete();
+ return true;
+ }
+ }
}
}
return false;
@@ -1268,8 +1383,7 @@
private MergeNode insertMerge(AbstractBeginNode begin, FrameState stateAfter) {
MergeNode merge = graph().add(new MergeNode());
if (!begin.anchored().isEmpty()) {
- Object before = null;
- before = begin.anchored().snapshot();
+ Object before = begin.anchored().snapshot();
begin.replaceAtUsages(InputType.Guard, merge);
begin.replaceAtUsages(InputType.Anchor, merge);
assert begin.anchored().isEmpty() : before + " " + begin.anchored().snapshot();
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/ProxyNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/ProxyNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -75,4 +75,6 @@
public static GuardProxyNode forGuard(GuardingNode value, LoopExitNode exit, StructuredGraph graph) {
return graph.unique(new GuardProxyNode(value, exit));
}
+
+ public abstract PhiNode createPhi(AbstractMergeNode merge);
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/ValueProxyNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/ValueProxyNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -54,6 +54,11 @@
}
@Override
+ public PhiNode createPhi(AbstractMergeNode merge) {
+ return graph().addWithoutUnique(new ValuePhiNode(stamp(NodeView.DEFAULT), merge));
+ }
+
+ @Override
public boolean inferStamp() {
return updateStamp(value.stamp(NodeView.DEFAULT));
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/SignedRemNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/SignedRemNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -117,10 +117,7 @@
return false;
}
- int compareAgainstZero = 0;
- int usageCount = self.getUsageCount();
- for (int i = 0; i < usageCount; i++) {
- Node usage = self.getUsageAt(i);
+ for (Node usage : self.usages()) {
if (usage instanceof IntegerEqualsNode) {
IntegerEqualsNode equalsNode = (IntegerEqualsNode) usage;
ValueNode node = equalsNode.getY();
@@ -131,12 +128,13 @@
ConstantNode constantNode = (ConstantNode) node;
Constant constant = constantNode.asConstant();
if (constant instanceof PrimitiveConstant && ((PrimitiveConstant) constant).asLong() == 0) {
- compareAgainstZero++;
+ continue;
}
}
}
+ return false;
}
- return compareAgainstZero == usageCount;
+ return true;
}
@Override
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/BranchProbabilityNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/BranchProbabilityNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -32,8 +32,11 @@
import org.graalvm.compiler.core.common.type.IntegerStamp;
import org.graalvm.compiler.core.common.type.StampFactory;
import org.graalvm.compiler.debug.GraalError;
+import org.graalvm.compiler.graph.Node;
import org.graalvm.compiler.graph.NodeClass;
import org.graalvm.compiler.graph.iterators.NodePredicates;
+import org.graalvm.compiler.graph.spi.Canonicalizable;
+import org.graalvm.compiler.graph.spi.CanonicalizerTool;
import org.graalvm.compiler.graph.spi.Simplifiable;
import org.graalvm.compiler.graph.spi.SimplifierTool;
import org.graalvm.compiler.nodeinfo.NodeInfo;
@@ -56,7 +59,7 @@
* intended primarily for snippets, so that they can define their fast and slow paths.
*/
@NodeInfo(cycles = CYCLES_0, cyclesRationale = "Artificial Node", size = SIZE_0)
-public final class BranchProbabilityNode extends FloatingNode implements Simplifiable, Lowerable {
+public final class BranchProbabilityNode extends FloatingNode implements Simplifiable, Lowerable, Canonicalizable {
public static final NodeClass<BranchProbabilityNode> TYPE = NodeClass.create(BranchProbabilityNode.class);
public static final double LIKELY_PROBABILITY = 0.6;
@@ -98,6 +101,15 @@
}
@Override
+ public Node canonical(CanonicalizerTool tool) {
+ if (condition.isConstant()) {
+ // fold constant conditions early during PE
+ return condition;
+ }
+ return this;
+ }
+
+ @Override
public void simplify(SimplifierTool tool) {
if (!hasUsages()) {
return;
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/IntegerSwitchNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/IntegerSwitchNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -36,6 +36,7 @@
import org.graalvm.compiler.core.common.type.PrimitiveStamp;
import org.graalvm.compiler.core.common.type.Stamp;
import org.graalvm.compiler.core.common.type.StampFactory;
+import org.graalvm.compiler.graph.Node;
import org.graalvm.compiler.graph.NodeClass;
import org.graalvm.compiler.graph.spi.Simplifiable;
import org.graalvm.compiler.graph.spi.SimplifierTool;
@@ -51,6 +52,7 @@
import org.graalvm.compiler.nodes.java.LoadIndexedNode;
import org.graalvm.compiler.nodes.spi.LIRLowerable;
import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
+import org.graalvm.compiler.nodes.spi.SwitchFoldable;
import org.graalvm.compiler.nodes.util.GraphUtil;
import jdk.vm.ci.meta.DeoptimizationAction;
@@ -63,7 +65,7 @@
* values. The actual implementation of the switch will be decided by the backend.
*/
@NodeInfo
-public final class IntegerSwitchNode extends SwitchNode implements LIRLowerable, Simplifiable {
+public final class IntegerSwitchNode extends SwitchNode implements LIRLowerable, Simplifiable, SwitchFoldable {
public static final NodeClass<IntegerSwitchNode> TYPE = NodeClass.create(IntegerSwitchNode.class);
protected final int[] keys;
@@ -75,6 +77,7 @@
this.keys = keys;
assert value.stamp(NodeView.DEFAULT) instanceof PrimitiveStamp && value.stamp(NodeView.DEFAULT).getStackKind().isNumericInteger();
assert assertSorted();
+ assert assertNoUntargettedSuccessor();
}
private boolean assertSorted() {
@@ -84,6 +87,18 @@
return true;
}
+ private boolean assertNoUntargettedSuccessor() {
+ boolean[] checker = new boolean[successors.size()];
+ for (int successorIndex : keySuccessors) {
+ checker[successorIndex] = true;
+ }
+ checker[defaultSuccessorIndex()] = true;
+ for (boolean b : checker) {
+ assert b;
+ }
+ return true;
+ }
+
public IntegerSwitchNode(ValueNode value, int successorCount, int[] keys, double[] keyProbabilities, int[] keySuccessors) {
this(value, new AbstractBeginNode[successorCount], keys, keyProbabilities, keySuccessors);
}
@@ -104,6 +119,14 @@
return JavaConstant.forInt(keys[i]);
}
+ /**
+ * Gets the key at the specified index, as a java int.
+ */
+ @Override
+ public int intKeyAt(int i) {
+ return keys[i];
+ }
+
@Override
public int keyCount() {
return keys.length;
@@ -148,9 +171,63 @@
return;
} else if (tryRemoveUnreachableKeys(tool, value().stamp(view))) {
return;
+ } else if (switchTransformationOptimization(tool)) {
+ return;
}
}
+ private void addSuccessorForDeletion(AbstractBeginNode defaultNode) {
+ successors.add(defaultNode);
+ }
+
+ @Override
+ public Node getNextSwitchFoldableBranch() {
+ return defaultSuccessor();
+ }
+
+ @Override
+ public boolean isInSwitch(ValueNode switchValue) {
+ return value == switchValue;
+ }
+
+ @Override
+ public void cutOffCascadeNode() {
+ AbstractBeginNode toKill = defaultSuccessor();
+ clearSuccessors();
+ addSuccessorForDeletion(toKill);
+ }
+
+ @Override
+ public void cutOffLowestCascadeNode() {
+ clearSuccessors();
+ }
+
+ @Override
+ public AbstractBeginNode getDefault() {
+ return defaultSuccessor();
+ }
+
+ @Override
+ public ValueNode switchValue() {
+ return value();
+ }
+
+ @Override
+ public boolean isNonInitializedProfile() {
+ int nbSuccessors = getSuccessorCount();
+ double prob = 0.0d;
+ for (int i = 0; i < nbSuccessors; i++) {
+ if (keyProbabilities[i] > 0.0d) {
+ if (prob == 0.0d) {
+ prob = keyProbabilities[i];
+ } else if (keyProbabilities[i] != prob) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
static final class KeyData {
final int key;
final double keyProbability;
@@ -208,7 +285,7 @@
* because {@link Enum#ordinal()} can change when recompiling an enum, it cannot be used
* directly as the value that is switched on. An intermediate int[] array, which is initialized
* once at run time based on the actual {@link Enum#ordinal()} values, is used.
- *
+ * <p>
* The {@link ConstantFieldProvider} of Graal already detects the int[] arrays and marks them as
* {@link ConstantNode#isDefaultStable() stable}, i.e., the array elements are constant. The
* code in this method detects array loads from such a stable array and re-wires the switch to
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/SwitchNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/SwitchNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -198,6 +198,13 @@
}
/**
+ * Returns the probability of taking the default branch.
+ */
+ public double defaultProbability() {
+ return keyProbabilities[keyProbabilities.length - 1];
+ }
+
+ /**
* Returns the index of the default (fall through) successor of this switch.
*/
public int defaultSuccessorIndex() {
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/gc/ObjectWriteBarrier.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/gc/ObjectWriteBarrier.java Fri Jul 26 19:11:34 2019 -0400
@@ -50,4 +50,3 @@
return precise;
}
}
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/gc/SerialArrayRangeWriteBarrier.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/gc/SerialArrayRangeWriteBarrier.java Fri Jul 26 19:11:34 2019 -0400
@@ -41,4 +41,3 @@
}
}
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/gc/SerialWriteBarrier.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/gc/SerialWriteBarrier.java Fri Jul 26 19:11:34 2019 -0400
@@ -53,4 +53,3 @@
return verifyOnly;
}
}
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/gc/WriteBarrier.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/gc/WriteBarrier.java Fri Jul 26 19:11:34 2019 -0400
@@ -54,4 +54,3 @@
return address;
}
}
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/graphbuilderconf/NodePlugin.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/graphbuilderconf/NodePlugin.java Fri Jul 26 19:11:34 2019 -0400
@@ -243,4 +243,3 @@
return false;
}
}
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/AbstractNewObjectNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/AbstractNewObjectNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -32,9 +32,12 @@
import org.graalvm.compiler.nodeinfo.NodeInfo;
import org.graalvm.compiler.nodes.DeoptimizingFixedWithNextNode;
import org.graalvm.compiler.nodes.FrameState;
+import org.graalvm.compiler.nodes.extended.MembarNode;
import org.graalvm.compiler.nodes.spi.Lowerable;
import org.graalvm.compiler.nodes.spi.LoweringTool;
+import jdk.vm.ci.code.MemoryBarriers;
+
/**
* The {@code AbstractNewObjectNode} is the base class for the new instance and new array nodes.
*/
@@ -44,6 +47,12 @@
public static final NodeClass<AbstractNewObjectNode> TYPE = NodeClass.create(AbstractNewObjectNode.class);
protected final boolean fillContents;
+ /**
+ * Controls whether this allocation emits a {@link MembarNode} with
+ * {@link MemoryBarriers#STORE_STORE} as part of the object initialization.
+ */
+ protected boolean emitMemoryBarrier = true;
+
protected AbstractNewObjectNode(NodeClass<? extends AbstractNewObjectNode> c, Stamp stamp, boolean fillContents, FrameState stateBefore) {
super(c, stamp, stateBefore);
this.fillContents = fillContents;
@@ -65,4 +74,12 @@
public boolean canDeoptimize() {
return true;
}
+
+ public boolean emitMemoryBarrier() {
+ return emitMemoryBarrier;
+ }
+
+ public void clearEmitMemoryBarrier() {
+ this.emitMemoryBarrier = false;
+ }
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/LogicCompareAndSwapNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/LogicCompareAndSwapNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/MethodCallTargetNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/MethodCallTargetNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -35,6 +35,7 @@
import org.graalvm.compiler.graph.spi.SimplifierTool;
import org.graalvm.compiler.nodeinfo.NodeInfo;
import org.graalvm.compiler.nodeinfo.Verbosity;
+import org.graalvm.compiler.nodes.BeginNode;
import org.graalvm.compiler.nodes.CallTargetNode;
import org.graalvm.compiler.nodes.FixedGuardNode;
import org.graalvm.compiler.nodes.Invoke;
@@ -43,7 +44,7 @@
import org.graalvm.compiler.nodes.PiNode;
import org.graalvm.compiler.nodes.StructuredGraph;
import org.graalvm.compiler.nodes.ValueNode;
-import org.graalvm.compiler.nodes.extended.ValueAnchorNode;
+import org.graalvm.compiler.nodes.extended.AnchoringNode;
import org.graalvm.compiler.nodes.spi.UncheckedInterfaceProvider;
import org.graalvm.compiler.nodes.type.StampTool;
@@ -232,11 +233,7 @@
* an assumption but as we need an instanceof check anyway we can verify both
* properties by checking of the receiver is an instance of the single implementor.
*/
- ValueAnchorNode anchor = new ValueAnchorNode(null);
- if (anchor != null) {
- graph().add(anchor);
- graph().addBeforeFixed(invoke().asNode(), anchor);
- }
+ AnchoringNode anchor = BeginNode.prevBegin(invoke().asNode());
LogicNode condition = graph().addOrUniqueWithInputs(InstanceOfNode.create(speculatedType, receiver, getProfile(), anchor));
FixedGuardNode guard = graph().add(new FixedGuardNode(condition, DeoptimizationReason.OptimizedTypeCheckViolated, DeoptimizationAction.InvalidateRecompile, false));
graph().addBeforeFixed(invoke().asNode(), guard);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/spi/LoweringProvider.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/spi/LoweringProvider.java Fri Jul 26 19:11:34 2019 -0400
@@ -50,15 +50,10 @@
/**
* Indicates the smallest width for comparing an integer value on the target platform.
*/
- default Integer smallestCompareWidth() {
- // most platforms only support 32 and 64 bit compares
- return 32;
- }
+ Integer smallestCompareWidth();
/**
* Indicates whether the target platform supports bulk zeroing instruction.
*/
- default boolean supportBulkZeroing() {
- return false;
- }
+ boolean supportBulkZeroing();
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/spi/SwitchFoldable.java Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,507 @@
+/*
+ * Copyright (c) 2019, 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 org.graalvm.compiler.nodes.spi;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+
+import jdk.internal.vm.compiler.collections.EconomicMap;
+import jdk.internal.vm.compiler.collections.Equivalence;
+import org.graalvm.compiler.core.common.SuppressFBWarnings;
+import org.graalvm.compiler.core.common.type.IntegerStamp;
+import org.graalvm.compiler.core.common.type.PrimitiveStamp;
+import org.graalvm.compiler.core.common.type.Stamp;
+import org.graalvm.compiler.graph.Node;
+import org.graalvm.compiler.graph.spi.SimplifierTool;
+import org.graalvm.compiler.nodes.AbstractBeginNode;
+import org.graalvm.compiler.nodes.BeginNode;
+import org.graalvm.compiler.nodes.FixedNode;
+import org.graalvm.compiler.nodes.LogicNode;
+import org.graalvm.compiler.nodes.NodeView;
+import org.graalvm.compiler.nodes.StructuredGraph;
+import org.graalvm.compiler.nodes.ValueNode;
+import org.graalvm.compiler.nodes.ValueNodeInterface;
+import org.graalvm.compiler.nodes.calc.IntegerEqualsNode;
+import org.graalvm.compiler.nodes.calc.SignExtendNode;
+import org.graalvm.compiler.nodes.extended.IntegerSwitchNode;
+import org.graalvm.compiler.nodes.util.GraphUtil;
+
+/**
+ * Nodes that implement this interface can be collapsed to a single IntegerSwitch when they are seen
+ * in a cascade.
+ */
+@SuppressFBWarnings(value = {"UCF"}, justification = "javac spawns useless control flow in static initializer when using assert(asNode().isAlive())")
+public interface SwitchFoldable extends ValueNodeInterface {
+ Comparator<KeyData> SORTER = Comparator.comparingInt((KeyData k) -> k.key);
+
+ /**
+ * Returns the direct successor in the branch to check for SwitchFoldability.
+ */
+ Node getNextSwitchFoldableBranch();
+
+ /**
+ * Returns the value that will be used as the switch input. This value should be an int.
+ */
+ ValueNode switchValue();
+
+ /**
+ * Returns the branch that will close this switch folding, assuming this is called on the lowest
+ * node of the cascade.
+ */
+ AbstractBeginNode getDefault();
+
+ /**
+ * Determines whether the node should be folded in the current folding attempt.
+ *
+ * @param switchValue the value of the switch that will spawn through this folding attempt.
+ * @return true if this node should be folded in the current folding attempt, false otherwise.
+ * @see SwitchFoldable#maybeIsInSwitch(LogicNode)
+ * @see SwitchFoldable#sameSwitchValue(LogicNode, ValueNode)
+ */
+ boolean isInSwitch(ValueNode switchValue);
+
+ /**
+ * Removes the successors of this node, while keeping it linked to the rest of the cascade.
+ */
+ void cutOffCascadeNode();
+
+ /**
+ * Completely removes all successors from this node.
+ */
+ void cutOffLowestCascadeNode();
+
+ /**
+ * Returns the value of the i-th key of this node.
+ */
+ int intKeyAt(int i);
+
+ /**
+ * Returns the probability of seeing the i-th key of this node.
+ */
+ double keyProbability(int i);
+
+ /**
+ * Returns the branch to follow when seeing the i-th key of this node.
+ */
+ AbstractBeginNode keySuccessor(int i);
+
+ /**
+ * Returns the probability of going to the default branch.
+ */
+ double defaultProbability();
+
+ /**
+ * @return The number of keys the SwitchFoldable node will try to add.
+ */
+ default int keyCount() {
+ return 1;
+ }
+
+ /**
+ * Should be overridden if getDefault() has side effects.
+ */
+ default boolean isDefaultSuccessor(AbstractBeginNode successor) {
+ return successor == getDefault();
+ }
+
+ /**
+ * Heuristics that tries to determine whether or not a foldable node was profiled.
+ */
+ default boolean isNonInitializedProfile() {
+ return false;
+ }
+
+ static boolean maybeIsInSwitch(LogicNode condition) {
+ return condition instanceof IntegerEqualsNode && ((IntegerEqualsNode) condition).getY().isJavaConstant();
+ }
+
+ static boolean sameSwitchValue(LogicNode condition, ValueNode switchValue) {
+ return ((IntegerEqualsNode) condition).getX() == switchValue;
+ }
+
+ // Helper data structures
+
+ class Helper {
+ private Helper() {
+ }
+
+ private static boolean isDuplicateKey(int key, QuickQueryKeyData keyData) {
+ return keyData.contains(key);
+ }
+
+ private static int duplicateIndex(AbstractBeginNode begin, QuickQueryList<AbstractBeginNode> successors) {
+ return successors.indexOf(begin);
+ }
+
+ private static Node skipUpBegins(Node node) {
+ Node result = node;
+ while (result instanceof BeginNode && result.hasNoUsages()) {
+ result = result.predecessor();
+ }
+ return result;
+ }
+
+ private static Node skipDownBegins(Node node) {
+ Node result = node;
+ while (result instanceof BeginNode && result.hasNoUsages()) {
+ result = ((BeginNode) result).next();
+ }
+ return result;
+ }
+
+ private static SwitchFoldable getParentSwitchNode(SwitchFoldable node, ValueNode switchValue) {
+ Node result = skipUpBegins(node.asNode().predecessor());
+ if (result instanceof SwitchFoldable && ((SwitchFoldable) result).isInSwitch(switchValue)) {
+ return (SwitchFoldable) result;
+ }
+ return null;
+ }
+
+ private static SwitchFoldable getChildSwitchNode(SwitchFoldable node, ValueNode switchValue) {
+ Node result = skipDownBegins(node.getNextSwitchFoldableBranch());
+ if (result instanceof SwitchFoldable && ((SwitchFoldable) result).isInSwitch(switchValue)) {
+ return (SwitchFoldable) result;
+ }
+ return null;
+ }
+
+ private static int addDefault(SwitchFoldable node, QuickQueryList<AbstractBeginNode> successors) {
+ AbstractBeginNode defaultBranch = node.getDefault();
+ int index = successors.indexOf(defaultBranch);
+ if (index == -1) {
+ index = successors.size();
+ successors.add(defaultBranch);
+ }
+ return index;
+ }
+
+ private static int countNonDeoptSuccessors(QuickQueryKeyData keyData) {
+ int result = 0;
+ for (KeyData key : keyData.list) {
+ if (key.keyProbability > 0.0d) {
+ result++;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Updates the current state of the IntegerSwitch that will be spawned. That means:
+ * <p>
+ * - Checking for duplicate keys: add the duplicate key's branch to duplicates
+ * <p>
+ * - For branches of non-duplicate keys: add them to successors and update the keyData
+ * accordingly
+ * <p>
+ * - Update the value of the cumulative probability, ie, multiply it by the probability of
+ * taking the next branch (according to {@link SwitchFoldable#getNextSwitchFoldableBranch})
+ * <p>
+ * </p>
+ *
+ * @see QuickQueryList
+ * @see QuickQueryKeyData
+ */
+ private static void updateSwitchData(SwitchFoldable node, QuickQueryKeyData keyData, QuickQueryList<AbstractBeginNode> newSuccessors, double[] cumulative, double[] totalProbabilities,
+ QuickQueryList<AbstractBeginNode> duplicates) {
+ for (int i = 0; i < node.keyCount(); i++) {
+ int key = node.intKeyAt(i);
+ double keyProbability = cumulative[0] * node.keyProbability(i);
+ KeyData data;
+ AbstractBeginNode keySuccessor = node.keySuccessor(i);
+ if (isDuplicateKey(key, keyData)) {
+ // Key was already seen
+ data = keyData.fromKey(key);
+ if (data.keySuccessor != KeyData.KEY_UNKNOWN) {
+ // Unreachable key: kill it manually at the end
+ if (!newSuccessors.contains(keySuccessor) && !duplicates.contains(keySuccessor) && keySuccessor.isAlive()) {
+ // This might be a false alert, if one of the next keys points to it.
+ duplicates.add(keySuccessor);
+ }
+ continue;
+ }
+ /*
+ * A key might not be able to immediately link to its target, if it is shared
+ * with the default target. In that case, we will need to resolve the target at
+ * a later time, either by seeing this key going to a known target in later
+ * cascade nodes, or by linking it to the overall default target at the very end
+ * of the folding.
+ */
+ } else {
+ data = new KeyData(key, keyProbability, KeyData.KEY_UNKNOWN);
+ totalProbabilities[0] += keyProbability;
+ keyData.add(data);
+ }
+ if (keySuccessor.isUnregistered()) {
+ // Shortcut map check if uninitialized node.
+ data.keySuccessor = newSuccessors.size();
+ newSuccessors.addUnique(keySuccessor);
+ } else {
+ int pos = duplicateIndex(keySuccessor, newSuccessors);
+ if (pos != -1) {
+ // Target is already known
+ data.keySuccessor = pos;
+ } else if (!node.isDefaultSuccessor(keySuccessor)) {
+ data.keySuccessor = newSuccessors.size();
+ newSuccessors.add(keySuccessor);
+ }
+ }
+ }
+ cumulative[0] *= node.defaultProbability();
+ }
+ }
+
+ final class KeyData {
+ private static final int KEY_UNKNOWN = -2;
+
+ private final int key;
+ private final double keyProbability;
+ private int keySuccessor;
+
+ KeyData(int key, double keyProbability, int keySuccessor) {
+ this.key = key;
+ this.keyProbability = keyProbability;
+ this.keySuccessor = keySuccessor;
+ }
+ }
+
+ /**
+ * Supports O(1) addition to the list, fast {@code contains} and {@code indexOf} queries
+ * (usually O(1), worst case O(n)), and O(1) random access.
+ */
+ final class QuickQueryList<T> {
+ private final List<T> list = new ArrayList<>();
+ private final EconomicMap<T, Integer> map = EconomicMap.create(Equivalence.IDENTITY);
+
+ private int indexOf(T begin) {
+ return map.get(begin, -1);
+ }
+
+ private boolean contains(T o) {
+ return map.containsKey(o);
+ }
+
+ @SuppressWarnings("unused")
+ private T get(int index) {
+ return list.get(index);
+ }
+
+ private boolean add(T item) {
+ map.put(item, list.size());
+ return list.add(item);
+ }
+
+ /**
+ * Adds an object, known to be unique beforehand.
+ */
+ private void addUnique(T item) {
+ list.add(item);
+ }
+
+ private int size() {
+ return list.size();
+ }
+ }
+
+ final class QuickQueryKeyData {
+ private final List<KeyData> list = new ArrayList<>();
+ private final EconomicMap<Integer, KeyData> map = EconomicMap.create();
+
+ private void add(KeyData key) {
+ assert !map.containsKey(key.key);
+ list.add(key);
+ map.put(key.key, key);
+ }
+
+ private boolean contains(int key) {
+ return map.containsKey(key);
+ }
+
+ private KeyData get(int index) {
+ return list.get(index);
+ }
+
+ private int size() {
+ return list.size();
+ }
+
+ private KeyData fromKey(int key) {
+ assert contains(key);
+ return map.get(key);
+ }
+
+ private void sort() {
+ list.sort(SORTER);
+ }
+
+ }
+
+ /**
+ * Collapses a cascade of foldables (IfNode, FixedGuard and IntegerSwitch) into a single switch.
+ */
+ default boolean switchTransformationOptimization(SimplifierTool tool) {
+ ValueNode switchValue = switchValue();
+ assert asNode().isAlive();
+ if (switchValue == null || !isInSwitch(switchValue) || (Helper.getParentSwitchNode(this, switchValue) == null && Helper.getChildSwitchNode(this, switchValue) == null)) {
+ // Don't bother trying if there is nothing to do.
+ return false;
+ }
+ Stamp switchStamp = switchValue.stamp(NodeView.DEFAULT);
+
+ // Abort if we do not have an int
+ if (!(switchStamp instanceof IntegerStamp)) {
+ return false;
+ }
+ if (PrimitiveStamp.getBits(switchStamp) > 32) {
+ return false;
+ }
+
+ // PlaceHolder for cascade traversal.
+ SwitchFoldable iteratingNode = this;
+ SwitchFoldable topMostSwitchNode = this;
+
+ // Find top-most foldable.
+ while (iteratingNode != null) {
+ topMostSwitchNode = iteratingNode;
+ iteratingNode = Helper.getParentSwitchNode(iteratingNode, switchValue);
+ }
+ QuickQueryKeyData keyData = new QuickQueryKeyData();
+ QuickQueryList<AbstractBeginNode> successors = new QuickQueryList<>();
+ QuickQueryList<AbstractBeginNode> potentiallyUnreachable = new QuickQueryList<>();
+ double[] cumulative = {1.0d};
+ double[] totalProbability = {0.0d};
+
+ iteratingNode = topMostSwitchNode;
+ SwitchFoldable lowestSwitchNode = topMostSwitchNode;
+
+ // If this stays true, we will need to spawn an uniform distribution.
+ boolean uninitializedProfiles = true;
+
+ // Go down the if cascade, collecting necessary data
+ while (iteratingNode != null) {
+ lowestSwitchNode = iteratingNode;
+ Helper.updateSwitchData(iteratingNode, keyData, successors, cumulative, totalProbability, potentiallyUnreachable);
+ if (!iteratingNode.isNonInitializedProfile()) {
+ uninitializedProfiles = false;
+ }
+ iteratingNode = Helper.getChildSwitchNode(iteratingNode, switchValue);
+ }
+
+ if (keyData.size() < 4 || lowestSwitchNode == topMostSwitchNode) {
+ // Abort if it's not worth the hassle
+ return false;
+ }
+
+ // At that point, we will commit the optimization.
+ StructuredGraph graph = asNode().graph();
+
+ // Sort the keys
+ keyData.sort();
+
+ /*
+ * The total probability might be different than 1 if there was a duplicate key which was
+ * erased by another branch whose probability was different (/ex: in the case where a method
+ * constituted of only a switch is inlined after a guard for a particular value of that
+ * switch). In that case, we need to re-normalize the probabilities. A more "correct" way
+ * would be to only re-normalize the probabilities of the switch after the guard, but this
+ * cannot be done without an additional overhead.
+ */
+ totalProbability[0] += cumulative[0];
+ assert totalProbability[0] > 0.0d;
+ double normalizationFactor = 1 / totalProbability[0];
+
+ // Spawn the required data structures
+ int newKeyCount = keyData.list.size();
+ int[] keys = new int[newKeyCount];
+ double[] keyProbabilities = new double[newKeyCount + 1];
+ int[] keySuccessors = new int[newKeyCount + 1];
+ int nonDeoptSuccessorCount = Helper.countNonDeoptSuccessors(keyData) + (cumulative[0] > 0.0d ? 1 : 0);
+ double uniform = (uninitializedProfiles && nonDeoptSuccessorCount > 0 ? 1 / (double) nonDeoptSuccessorCount : 1.0d);
+
+ // Add default
+ keyProbabilities[newKeyCount] = uninitializedProfiles && cumulative[0] > 0.0d ? uniform : normalizationFactor * cumulative[0];
+ keySuccessors[newKeyCount] = Helper.addDefault(lowestSwitchNode, successors);
+
+ // Add branches.
+ for (int i = 0; i < newKeyCount; i++) {
+ SwitchFoldable.KeyData data = keyData.get(i);
+ keys[i] = data.key;
+ keyProbabilities[i] = uninitializedProfiles && data.keyProbability > 0.0d ? uniform : normalizationFactor * data.keyProbability;
+ keySuccessors[i] = data.keySuccessor != KeyData.KEY_UNKNOWN ? data.keySuccessor : keySuccessors[newKeyCount];
+ }
+
+ // Spin an adapter if the value is narrower than an int
+ ValueNode adapter = null;
+ if (((IntegerStamp) switchStamp).getBits() < 32) {
+ adapter = graph.addOrUnique(new SignExtendNode(switchValue, 32));
+ } else {
+ adapter = switchValue;
+ }
+
+ // Spawn the switch node
+ IntegerSwitchNode toInsert = new IntegerSwitchNode(adapter, successors.size(), keys, keyProbabilities, keySuccessors);
+ graph.add(toInsert);
+
+ // Detach the cascade from the graph
+ lowestSwitchNode.cutOffLowestCascadeNode();
+ iteratingNode = lowestSwitchNode;
+ while (iteratingNode != null) {
+ if (iteratingNode != lowestSwitchNode) {
+ iteratingNode.cutOffCascadeNode();
+ }
+ iteratingNode = Helper.getParentSwitchNode(iteratingNode, switchValue);
+ }
+
+ // Place the new Switch node
+ topMostSwitchNode.asNode().replaceAtPredecessor(toInsert);
+ topMostSwitchNode.asNode().replaceAtUsages(toInsert);
+
+ // Attach the branches to the switch.
+ int pos = 0;
+ for (AbstractBeginNode begin : successors.list) {
+ if (begin.isUnregistered()) {
+ graph.add(begin.next());
+ graph.add(begin);
+ begin.setNext(begin.next());
+ }
+ toInsert.setBlockSuccessor(pos++, begin);
+ }
+
+ // Remove the cascade and unreachable code
+ GraphUtil.killCFG((FixedNode) topMostSwitchNode);
+ for (AbstractBeginNode duplicate : potentiallyUnreachable.list) {
+ if (duplicate.predecessor() == null) {
+ // Make sure the duplicate is not reachable.
+ assert duplicate.isAlive();
+ GraphUtil.killCFG(duplicate);
+ }
+ }
+
+ tool.addToWorkList(toInsert);
+
+ return true;
+ }
+}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.options.processor/src/org/graalvm/compiler/options/processor/OptionProcessor.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.options.processor/src/org/graalvm/compiler/options/processor/OptionProcessor.java Fri Jul 26 19:11:34 2019 -0400
@@ -224,6 +224,14 @@
}
}
+ String optionStabilityName = getAnnotationValue(annotation, "stability", VariableElement.class).getSimpleName().toString();
+ if (optionStabilityName.equals("STABLE")) {
+ if (help.length() == 0) {
+ processingEnv.getMessager().printMessage(Kind.ERROR, "A stable option must have non-empty help text", element);
+ return;
+ }
+ }
+
String optionTypeName = getAnnotationValue(annotation, "type", VariableElement.class).getSimpleName().toString();
info.options.add(new OptionInfo(optionName, optionTypeName, help, extraHelp, optionType, declaringClass, field.getSimpleName().toString()));
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/ConditionalEliminationPhase.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/ConditionalEliminationPhase.java Fri Jul 26 19:11:34 2019 -0400
@@ -175,14 +175,9 @@
AbstractBeginNode beginNode = b.getBeginNode();
if (beginNode instanceof AbstractMergeNode && anchorBlock != b) {
AbstractMergeNode mergeNode = (AbstractMergeNode) beginNode;
- for (GuardNode guard : mergeNode.guards().snapshot()) {
- try (DebugCloseable closeable = guard.withNodeSourcePosition()) {
- GuardNode newlyCreatedGuard = new GuardNode(guard.getCondition(), anchorBlock.getBeginNode(), guard.getReason(), guard.getAction(), guard.isNegated(), guard.getSpeculation(),
- guard.getNoDeoptSuccessorPosition());
- GuardNode newGuard = mergeNode.graph().unique(newlyCreatedGuard);
- guard.replaceAndDelete(newGuard);
- }
- }
+ mergeNode.replaceAtUsages(InputType.Anchor, anchorBlock.getBeginNode());
+ mergeNode.replaceAtUsages(InputType.Guard, anchorBlock.getBeginNode());
+ assert mergeNode.anchored().isEmpty();
}
FixedNode endNode = b.getEndNode();
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/WriteBarrierAdditionPhase.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/WriteBarrierAdditionPhase.java Fri Jul 26 19:11:34 2019 -0400
@@ -48,4 +48,3 @@
return false;
}
}
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/BinaryGraphPrinter.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/BinaryGraphPrinter.java Fri Jul 26 19:11:34 2019 -0400
@@ -42,7 +42,6 @@
import org.graalvm.compiler.bytecode.Bytecode;
import org.graalvm.compiler.core.common.cfg.BlockMap;
import org.graalvm.compiler.debug.DebugContext;
-import org.graalvm.compiler.debug.DebugOptions;
import org.graalvm.compiler.graph.CachedGraph;
import org.graalvm.compiler.graph.Edges;
import org.graalvm.compiler.graph.Graph;
@@ -66,7 +65,6 @@
import org.graalvm.compiler.nodes.cfg.Block;
import org.graalvm.compiler.nodes.cfg.ControlFlowGraph;
import org.graalvm.compiler.nodes.util.JavaConstantFormattable;
-import org.graalvm.compiler.phases.schedule.SchedulePhase;
import org.graalvm.graphio.GraphBlocks;
import org.graalvm.graphio.GraphElements;
import org.graalvm.graphio.GraphLocations;
@@ -591,22 +589,8 @@
this.graph = graph;
StructuredGraph.ScheduleResult scheduleResult = null;
if (graph instanceof StructuredGraph) {
-
StructuredGraph structuredGraph = (StructuredGraph) graph;
- scheduleResult = structuredGraph.getLastSchedule();
- if (scheduleResult == null) {
-
- // Also provide a schedule when an error occurs
- if (DebugOptions.PrintGraphWithSchedule.getValue(graph.getOptions()) || debug.contextLookup(Throwable.class) != null) {
- try {
- SchedulePhase schedule = new SchedulePhase(graph.getOptions());
- schedule.apply(structuredGraph);
- scheduleResult = structuredGraph.getLastSchedule();
- } catch (Throwable t) {
- }
- }
-
- }
+ scheduleResult = GraalDebugHandlersFactory.tryGetSchedule(debug, structuredGraph);
}
cfg = scheduleResult == null ? debug.contextLookup(ControlFlowGraph.class) : scheduleResult.getCFG();
blockToNodes = scheduleResult == null ? null : scheduleResult.getBlockToNodesMap();
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/CFGPrinterObserver.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/CFGPrinterObserver.java Fri Jul 26 19:11:34 2019 -0400
@@ -211,12 +211,14 @@
} else if (object instanceof StructuredGraph) {
if (cfgPrinter.cfg == null) {
StructuredGraph graph = (StructuredGraph) object;
- cfgPrinter.cfg = ControlFlowGraph.compute(graph, true, true, true, false);
- cfgPrinter.printCFG(message, cfgPrinter.cfg.getBlocks(), true);
- } else {
+ ScheduleResult scheduleResult = GraalDebugHandlersFactory.tryGetSchedule(debug, graph);
+ if (scheduleResult != null) {
+ cfgPrinter.cfg = scheduleResult.getCFG();
+ }
+ }
+ if (cfgPrinter.cfg != null) {
cfgPrinter.printCFG(message, cfgPrinter.cfg.getBlocks(), true);
}
-
} else if (object instanceof CompilationResult) {
final CompilationResult compResult = (CompilationResult) object;
cfgPrinter.printMachineCode(disassemble(codeCache, compResult, null), message);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/GraalDebugHandlersFactory.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/GraalDebugHandlersFactory.java Fri Jul 26 19:11:34 2019 -0400
@@ -28,16 +28,19 @@
import java.util.List;
import org.graalvm.compiler.api.replacements.SnippetReflectionProvider;
+import org.graalvm.compiler.debug.DebugCloseable;
import org.graalvm.compiler.debug.DebugContext;
import org.graalvm.compiler.debug.DebugDumpHandler;
import org.graalvm.compiler.debug.DebugHandler;
import org.graalvm.compiler.debug.DebugHandlersFactory;
import org.graalvm.compiler.debug.DebugOptions;
-import org.graalvm.compiler.debug.TTY;
import org.graalvm.compiler.graph.Node;
import org.graalvm.compiler.nodeinfo.Verbosity;
+import org.graalvm.compiler.nodes.StructuredGraph;
+import org.graalvm.compiler.nodes.StructuredGraph.ScheduleResult;
import org.graalvm.compiler.nodes.util.GraphUtil;
import org.graalvm.compiler.options.OptionValues;
+import org.graalvm.compiler.phases.schedule.SchedulePhase;
import org.graalvm.compiler.serviceprovider.ServiceProvider;
@ServiceProvider(DebugHandlersFactory.class)
@@ -62,9 +65,6 @@
}
handlers.add(new NodeDumper());
if (DebugOptions.PrintCFG.getValue(options) || DebugOptions.PrintBackendCFG.getValue(options)) {
- if (DebugOptions.PrintCFG.getValue(options)) {
- TTY.out.println("Complete C1Visualizer dumping slows down PrintBinaryGraphs: use -Dgraal.PrintCFG=false to disable it");
- }
handlers.add(new CFGPrinterObserver());
}
handlers.add(new NoDeadCodeVerifyHandler());
@@ -91,4 +91,20 @@
return new CanonicalStringGraphPrinter(snippetReflection);
}
+ @SuppressWarnings("try")
+ static ScheduleResult tryGetSchedule(DebugContext debug, StructuredGraph graph) {
+ ScheduleResult scheduleResult = graph.getLastSchedule();
+ if (scheduleResult == null) {
+ // Also provide a schedule when an error occurs
+ if (DebugOptions.PrintGraphWithSchedule.getValue(graph.getOptions()) || debug.contextLookup(Throwable.class) != null) {
+ try (DebugCloseable noIntercept = debug.disableIntercept()) {
+ SchedulePhase schedule = new SchedulePhase(graph.getOptions());
+ schedule.apply(graph);
+ scheduleResult = graph.getLastSchedule();
+ } catch (Throwable t) {
+ }
+ }
+ }
+ return scheduleResult;
+ }
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/GraphPrinterDumpHandler.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.printer/src/org/graalvm/compiler/printer/GraphPrinterDumpHandler.java Fri Jul 26 19:11:34 2019 -0400
@@ -136,36 +136,26 @@
// Get all current JavaMethod instances in the context.
List<String> inlineContext = getInlineContext(graph);
- if (inlineContext != previousInlineContext) {
+ if (!inlineContext.equals(previousInlineContext)) {
Map<Object, Object> properties = new HashMap<>();
properties.put("graph", graph.toString());
addCompilationId(properties, graph);
- if (inlineContext.equals(previousInlineContext)) {
- /*
- * two different graphs have the same inline context, so make sure they appear
- * in different folders by closing and reopening the top scope.
- */
- int inlineDepth = previousInlineContext.size() - 1;
- closeScope(debug, inlineDepth);
- openScope(debug, inlineContext.get(inlineDepth), inlineDepth, properties);
- } else {
- // Check for method scopes that must be closed since the previous dump.
- for (int i = 0; i < previousInlineContext.size(); ++i) {
- if (i >= inlineContext.size() || !inlineContext.get(i).equals(previousInlineContext.get(i))) {
- for (int inlineDepth = previousInlineContext.size() - 1; inlineDepth >= i; --inlineDepth) {
- closeScope(debug, inlineDepth);
- }
- break;
+ // Check for method scopes that must be closed since the previous dump.
+ for (int i = 0; i < previousInlineContext.size(); ++i) {
+ if (i >= inlineContext.size() || !inlineContext.get(i).equals(previousInlineContext.get(i))) {
+ for (int inlineDepth = previousInlineContext.size() - 1; inlineDepth >= i; --inlineDepth) {
+ closeScope(debug, inlineDepth);
}
+ break;
}
- // Check for method scopes that must be opened since the previous dump.
- for (int i = 0; i < inlineContext.size(); ++i) {
- if (i >= previousInlineContext.size() || !inlineContext.get(i).equals(previousInlineContext.get(i))) {
- for (int inlineDepth = i; inlineDepth < inlineContext.size(); ++inlineDepth) {
- openScope(debug, inlineContext.get(inlineDepth), inlineDepth, inlineDepth == inlineContext.size() - 1 ? properties : null);
- }
- break;
+ }
+ // Check for method scopes that must be opened since the previous dump.
+ for (int i = 0; i < inlineContext.size(); ++i) {
+ if (i >= previousInlineContext.size() || !inlineContext.get(i).equals(previousInlineContext.get(i))) {
+ for (int inlineDepth = i; inlineDepth < inlineContext.size(); ++inlineDepth) {
+ openScope(debug, inlineContext.get(inlineDepth), inlineDepth, inlineDepth == inlineContext.size() - 1 ? properties : null);
}
+ break;
}
}
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements.amd64/src/org/graalvm/compiler/replacements/amd64/AMD64ArrayIndexOfDispatchNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements.amd64/src/org/graalvm/compiler/replacements/amd64/AMD64ArrayIndexOfDispatchNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -307,4 +307,3 @@
return optimizedArrayIndexOf(descriptor, JavaKind.Char, JavaKind.Char, true, array, arrayLength, fromIndex, values);
}
}
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/DefaultJavaLoweringProvider.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/DefaultJavaLoweringProvider.java Fri Jul 26 19:11:34 2019 -0400
@@ -766,6 +766,8 @@
} else {
newObject = graph.add(createNewArrayFromVirtual(virtual, ConstantNode.forInt(entryCount, graph)));
}
+ // The final STORE_STORE barrier will be emitted by finishAllocatedObjects
+ newObject.clearEmitMemoryBarrier();
recursiveLowerings.add(newObject);
graph.addBeforeFixed(commit, newObject);
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/arraycopy/ArrayCopyWithDelayedLoweringNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/arraycopy/ArrayCopyWithDelayedLoweringNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -60,4 +60,3 @@
this.bci = bci;
}
}
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/nodes/ReadRegisterNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/nodes/ReadRegisterNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -91,7 +91,7 @@
generator.getLIRGeneratorTool().emitIncomingValues(new Value[]{result});
}
if (!directUse) {
- result = generator.getLIRGeneratorTool().emitMove(result);
+ result = generator.getLIRGeneratorTool().emitReadRegister(register, kind);
}
generator.setResult(this, result);
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/nodes/WriteRegisterNode.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/nodes/WriteRegisterNode.java Fri Jul 26 19:11:34 2019 -0400
@@ -65,7 +65,7 @@
@Override
public void generate(NodeLIRBuilderTool generator) {
Value val = generator.operand(value);
- generator.getLIRGeneratorTool().emitMove(register.asValue(val.getValueKind()), val);
+ generator.getLIRGeneratorTool().emitWriteRegister(register, val, val.getValueKind());
}
@Override
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.serviceprovider/src/org/graalvm/compiler/serviceprovider/GraalServices.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.serviceprovider/src/org/graalvm/compiler/serviceprovider/GraalServices.java Fri Jul 26 19:11:34 2019 -0400
@@ -531,11 +531,7 @@
return Math.fma(a, b, c);
}
- /**
- * Set the flag in the {@link VirtualObject} that indicates that it is a boxed primitive that
- * was produced as a result of a call to a {@code valueOf} method.
- */
- public static void markVirtualObjectAsAutoBox(VirtualObject virtualObject) {
- virtualObject.setIsAutoBox(true);
+ public static VirtualObject createVirtualObject(ResolvedJavaType type, int id, boolean isAutoBox) {
+ return VirtualObject.get(type, id, isAutoBox);
}
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.serviceprovider/src/org/graalvm/compiler/serviceprovider/GraalUnsafeAccess.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.serviceprovider/src/org/graalvm/compiler/serviceprovider/GraalUnsafeAccess.java Fri Jul 26 19:11:34 2019 -0400
@@ -67,4 +67,3 @@
return UNSAFE;
}
}
-
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.test/src/org/graalvm/compiler/test/GraalTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.test/src/org/graalvm/compiler/test/GraalTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -27,10 +27,16 @@
import static org.graalvm.compiler.debug.DebugContext.DEFAULT_LOG_STREAM;
import static org.graalvm.compiler.debug.DebugContext.NO_DESCRIPTION;
+import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -499,4 +505,31 @@
public static TestRule createTimeoutMillis(long milliseconds) {
return createTimeout(milliseconds, TimeUnit.MILLISECONDS);
}
+
+ /**
+ * Tries to recursively remove {@code directory}. If it fails with an {@link IOException}, the
+ * exception's {@code toString()} is printed to {@link System#err} and the exception is
+ * returned.
+ */
+ public static IOException removeDirectory(Path directory) {
+ try {
+ Files.walkFileTree(directory, new SimpleFileVisitor<Path>() {
+ @Override
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+ Files.delete(file);
+ return FileVisitResult.CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
+ Files.delete(dir);
+ return FileVisitResult.CONTINUE;
+ }
+ });
+ } catch (IOException e) {
+ System.err.println(e);
+ return e;
+ }
+ return null;
+ }
}
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.virtual/src/org/graalvm/compiler/virtual/phases/ea/PEReadEliminationClosure.java Thu Jul 25 17:27:53 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.virtual/src/org/graalvm/compiler/virtual/phases/ea/PEReadEliminationClosure.java Fri Jul 26 19:11:34 2019 -0400
@@ -217,7 +217,11 @@
long offset = store.offset().asJavaConstant().asLong();
boolean overflowAccess = isOverflowAccess(accessKind, componentKind);
int index = overflowAccess ? -1 : VirtualArrayNode.entryIndexForOffset(tool.getMetaAccess(), offset, accessKind, type.getComponentType(), Integer.MAX_VALUE);
- return processStore(store, store.object(), location, index, accessKind, overflowAccess, store.value(), state, effects);
+ if (index != -1) {
+ return processStore(store, store.object(), location, index, accessKind, overflowAccess, store.value(), state, effects);
+ } else {
+ state.killReadCache(location, index);
+ }
} else {
processIdentity(state, location);
}
--- a/test/jaxp/javax/xml/jaxp/unittest/validation/ValidationTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jaxp/javax/xml/jaxp/unittest/validation/ValidationTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -25,19 +25,27 @@
import java.io.File;
-import java.net.URL;
-
+import java.io.FileInputStream;
import javax.xml.XMLConstants;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.events.XMLEvent;
+import javax.xml.transform.Source;
+import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.testng.annotations.DataProvider;
-
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
+import org.xml.sax.XMLFilter;
+import org.xml.sax.helpers.XMLFilterImpl;
/*
* @test
@@ -106,6 +114,50 @@
validate(xsd, xml);
}
+ /**
+ * @bug 8068376
+ * Verifies that validation performs normally with externally provided string
+ * parameters.
+ * @throws Exception if the test fails
+ */
+ @Test
+ public void testJDK8068376() throws Exception {
+
+ String xsdFile = getClass().getResource(FILE_PATH + "JDK8068376.xsd").getFile();
+ String xmlFile = getClass().getResource(FILE_PATH + "JDK8068376.xml").getFile();
+ String targetNamespace = getTargetNamespace(xsdFile);
+
+ XMLFilter namespaceFilter = new XMLFilterImpl(SAXParserFactory.newDefaultNSInstance().newSAXParser().getXMLReader()) {
+ @Override
+ public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
+ uri = targetNamespace; // overwriting the uri with our own choice
+ super.startElement(uri, localName, qName, atts);
+ }
+ };
+
+ Source xmlSource = new SAXSource(namespaceFilter, new InputSource(xmlFile));
+ Source schemaSource = new StreamSource(xsdFile);
+ validate(schemaSource, xmlSource);
+
+ }
+
+ private static String getTargetNamespace(String xsdFile) throws Exception {
+ XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(new FileInputStream(xsdFile));
+ while (reader.hasNext()) {
+ int event = reader.next();
+
+ // Get the root element's "targetNamespace" attribute
+ if (event == XMLEvent.START_ELEMENT) {
+ // validation fails before patch
+ String value = reader.getAttributeValue(null, "targetNamespace"); // fails validation
+ // validation passes due to a reference comparison in the original code
+ // String value = "mynamespace";
+ return value;
+ }
+ }
+ return null;
+ }
+
private void validate(String xsd, String xml) throws Exception {
final SchemaFactory schemaFactory = SchemaFactory.newInstance(
XMLConstants.W3C_XML_SCHEMA_NS_URI);
@@ -116,4 +168,12 @@
new File(getClass().getResource(FILE_PATH + xml).getFile())));
}
+ private void validate(Source xsd, Source xml) throws Exception {
+ final SchemaFactory schemaFactory = SchemaFactory.newInstance(
+ XMLConstants.W3C_XML_SCHEMA_NS_URI);
+ final Schema schema = schemaFactory.newSchema(xsd);
+ final Validator validator = schema.newValidator();
+ validator.validate(xml);
+ }
+
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8068376.xml Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,1 @@
+<root><childtag></childtag></root>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8068376.xsd Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,11 @@
+<xs:schema xmlns="mynamespace" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="mynamespace" elementFormDefault="qualified">
+ <xs:element name="root">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="childtag" minOccurs="0" maxOccurs="1">
+ <xs:complexType></xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
\ No newline at end of file
--- a/test/jdk/com/sun/crypto/provider/Cipher/AES/Padding.java Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jdk/com/sun/crypto/provider/Cipher/AES/Padding.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -48,19 +48,24 @@
private static final String ALGORITHM = "AES";
private static final String PROVIDER = "SunJCE";
- private static final String[] MODES = { "ECb", "CbC", "PCBC", "OFB",
+ private static final String[] MODES_PKCS5PAD = {
+ "ECb", "CbC", "PCBC", "OFB",
"OFB150", "cFB", "CFB7", "cFB8", "cFB16", "cFB24", "cFB32",
"Cfb40", "cfB48", "cfB56", "cfB64", "cfB72", "cfB80", "cfB88",
"cfB96", "cfb104", "cfB112", "cfB120", "OFB8", "OFB16", "OFB24",
"OFB32", "OFB40", "OFB48", "OFB56", "OFB64", "OFB72", "OFB80",
- "OFB88", "OFB96", "OFB104", "OFB112", "OFB120", "GCM" };
- private static final String PADDING = "PKCS5Padding";
+ "OFB88", "OFB96", "OFB104", "OFB112", "OFB120" };
+ private static final String[] MODES_NOPAD = { "CTR", "CTS", "GCM" };
+
private static final int KEY_LENGTH = 128;
public static void main(String argv[]) throws Exception {
Padding test = new Padding();
- for (String mode : MODES) {
- test.runTest(ALGORITHM, mode, PADDING);
+ for (String mode : MODES_PKCS5PAD) {
+ test.runTest(ALGORITHM, mode, "PKCS5Padding");
+ }
+ for (String mode : MODES_NOPAD) {
+ test.runTest(ALGORITHM, mode, "NoPadding");
}
}
@@ -92,7 +97,6 @@
int offset = ci.update(plainText, 0, plainText.length,
cipherText, 0);
ci.doFinal(cipherText, offset);
-
if (!mo.equalsIgnoreCase("ECB")) {
iv = ci.getIV();
aps = new IvParameterSpec(iv);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/com/sun/crypto/provider/Cipher/AES/TestNoPaddingModes.java Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2019, 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 8180392
+ * @summary Ensure SunJCE provider throws exception for unsupported modes
+ * and padding combinations
+ */
+import java.security.*;
+import java.security.spec.AlgorithmParameterSpec;
+import javax.crypto.*;
+
+public class TestNoPaddingModes {
+
+ // SunJCE only supports NoPadding with following modes
+ private static final String[] MODES = {
+ "CTR", "CTS", "GCM"
+ };
+ private static final String[] PADDINGS = {
+ "PKCS5Padding", "ISO10126Padding"
+ };
+
+ public static void main(String[] args) throws Exception {
+ Provider p = Security.getProvider("SunJCE");
+ String transformation;
+ for (String mode : MODES) {
+ for (String padding : PADDINGS) {
+ transformation = "AES/" + mode + "/" + padding;
+
+ System.out.println("Test using " + transformation);
+ try {
+ Cipher c = Cipher.getInstance(transformation, "SunJCE");
+ throw new RuntimeException("=> Fail, no exception thrown");
+ } catch (NoSuchAlgorithmException | NoSuchPaddingException ex) {
+ System.out.println("=> Expected ex: " + ex);
+ }
+ try {
+ Cipher c = Cipher.getInstance(transformation, p);
+ throw new RuntimeException("=> Fail, no exception thrown");
+ } catch (NoSuchAlgorithmException | NoSuchPaddingException ex) {
+ System.out.println("=> Expected ex: " + ex);
+ }
+ }
+ }
+ System.out.println("Test Passed");
+ }
+
+ public static class MyCipImpl extends CipherSpi {
+ public MyCipImpl() {
+ super();
+ System.out.println("MyCipImpl is created");
+ }
+ protected void engineSetMode(String mode)
+ throws NoSuchAlgorithmException {};
+ protected void engineSetPadding(String padding)
+ throws NoSuchPaddingException {};
+ protected int engineGetBlockSize() { return 16; }
+ protected int engineGetOutputSize(int inputLen) { return 0; }
+ protected byte[] engineGetIV() { return null; }
+ protected AlgorithmParameters engineGetParameters() { return null; }
+ protected void engineInit(int opmode, Key key, SecureRandom random)
+ throws InvalidKeyException {};
+ protected void engineInit(int opmode, Key key,
+ AlgorithmParameterSpec params,
+ SecureRandom random)
+ throws InvalidKeyException, InvalidAlgorithmParameterException {};
+ protected void engineInit(int opmode, Key key,
+ AlgorithmParameters params,
+ SecureRandom random)
+ throws InvalidKeyException, InvalidAlgorithmParameterException {};
+ protected byte[] engineUpdate(byte[] input, int inputOffset,
+ int inputLen) { return null; }
+ protected int engineUpdate(byte[] input, int inputOffset,
+ int inputLen, byte[] output,
+ int outputOffset)
+ throws ShortBufferException { return 0; };
+ protected byte[] engineDoFinal(byte[] input, int inputOffset,
+ int inputLen)
+ throws IllegalBlockSizeException, BadPaddingException {
+ return null;
+ }
+ protected int engineDoFinal(byte[] input, int inputOffset,
+ int inputLen, byte[] output,
+ int outputOffset)
+ throws ShortBufferException, IllegalBlockSizeException,
+ BadPaddingException { return 0; }
+ }
+}
--- a/test/jdk/com/sun/crypto/provider/Cipher/Blowfish/TestCipherBlowfish.java Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jdk/com/sun/crypto/provider/Cipher/Blowfish/TestCipherBlowfish.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -32,20 +32,20 @@
public class TestCipherBlowfish extends TestCipher {
- TestCipherBlowfish() throws NoSuchAlgorithmException {
- super("Blowfish",
- new String[]{"CBC", "CTR", "CTS", "ECB", "PCBC",
- //CFBx
- "CFB", "CFB8", "CFB16", "CFB24", "CFB32", "CFB40", "CFB48", "CFB56",
- "CFB64",
- //OFBx
- "OFB", "OFB8", "OFB16", "OFB24", "OFB32", "OFB40", "OFB48", "OFB56",
- "OFB64"},
- new String[]{"NoPaDDing", "PKCS5Padding"},
- 32, 448);
+ TestCipherBlowfish(String[] modes, String[] paddings) throws NoSuchAlgorithmException {
+ super("Blowfish", modes, paddings, 32, 448);
}
public static void main(String[] args) throws Exception {
- new TestCipherBlowfish().runAll();
+ new TestCipherBlowfish(new String[]{ "CBC", "ECB", "PCBC",
+ //CFBx
+ "CFB", "CFB8", "CFB16", "CFB24", "CFB32", "CFB40",
+ "CFB48", "CFB56", "CFB64",
+ //OFBx
+ "OFB", "OFB8", "OFB16", "OFB24", "OFB32", "OFB40",
+ "OFB48", "OFB56", "OFB64"},
+ new String[]{ "NoPaDDing", "PKCS5Padding"}).runAll();
+ new TestCipherBlowfish(new String[]{ "CTR", "CTS" },
+ new String[]{ "NoPaDDing" }).runAll();
}
}
--- a/test/jdk/com/sun/crypto/provider/Cipher/DES/TestCipherDES.java Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jdk/com/sun/crypto/provider/Cipher/DES/TestCipherDES.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -30,19 +30,20 @@
public class TestCipherDES extends TestCipher {
- TestCipherDES() {
- super("DES",
- new String[]{"CBC", "CTR", "CTS", "ECB", "PCBC",
- //CFBx
- "CFB", "CFB8", "CFB16", "CFB24", "CFB32", "CFB40", "CFB48", "CFB56",
- "CFB64",
- //OFBx
- "OFB", "OFB8", "OFB16", "OFB24", "OFB32", "OFB40", "OFB48", "OFB56",
- "OFB64"},
- new String[]{"NoPaDDing", "PKCS5Padding"});
+ TestCipherDES(String[] modes, String[] paddings) {
+ super("DES", modes, paddings);
}
public static void main(String[] args) throws Exception {
- new TestCipherDES().runAll();
+ new TestCipherDES(new String[]{ "CBC", "ECB", "PCBC",
+ //CFBx
+ "CFB", "CFB8", "CFB16", "CFB24", "CFB32", "CFB40",
+ "CFB48", "CFB56", "CFB64",
+ //OFBx
+ "OFB", "OFB8", "OFB16", "OFB24", "OFB32", "OFB40",
+ "OFB48", "OFB56", "OFB64" },
+ new String[]{ "NoPaDDing", "PKCS5Padding" }).runAll();
+ new TestCipherDES(new String[]{ "CTR", "CTS" },
+ new String[]{ "NoPaDDing" }).runAll();
}
}
--- a/test/jdk/com/sun/crypto/provider/Cipher/DES/TestCipherDESede.java Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jdk/com/sun/crypto/provider/Cipher/DES/TestCipherDESede.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -30,19 +30,22 @@
public class TestCipherDESede extends TestCipher {
- TestCipherDESede() {
- super("DESede",
- new String[]{"CBC", "CTR", "CTS", "ECB", "PCBC",
- //CFBx
- "CFB", "CFB8", "CFB16", "CFB24", "CFB32", "CFB40", "CFB48", "CFB56",
- "CFB64",
- //OFBx
- "OFB", "OFB8", "OFB16", "OFB24", "OFB32", "OFB40", "OFB48", "OFB56",
- "OFB64"},
- new String[]{"NoPaDDing", "PKCS5Padding"});
+ TestCipherDESede(String[] modes, String[] paddings) {
+ super("DESede", modes, paddings);
}
public static void main(String[] args) throws Exception {
- new TestCipherDESede().runAll();
+ new TestCipherDESede(
+ new String[]{ "CBC", "ECB", "PCBC",
+ //CFBx
+ "CFB", "CFB8", "CFB16", "CFB24", "CFB32", "CFB40",
+ "CFB48", "CFB56", "CFB64",
+ //OFBx
+ "OFB", "OFB8", "OFB16", "OFB24", "OFB32", "OFB40",
+ "OFB48", "OFB56", "OFB64"},
+ new String[]{ "NoPaDDing", "PKCS5Padding" }).runAll();
+ new TestCipherDESede(
+ new String[]{ "CTR", "CTS" },
+ new String[]{ "NoPaDDing" }).runAll();
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/time/test/java/time/zone/TestZoneRules.java Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2019, 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.java.time.zone;
+
+import static org.testng.Assert.assertEquals;
+
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZonedDateTime;
+import java.time.ZoneId;
+import java.time.ZoneOffset;
+import java.time.zone.ZoneOffsetTransition;
+import java.time.zone.ZoneRules;
+
+import org.testng.annotations.Test;
+import org.testng.annotations.DataProvider;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+/**
+ * @summary Test ZoneRules whether the savings are positive in time zones that have
+ * negative savings in the source TZ files. Also, check the transition cutover
+ * time beyond 24:00, which should translate into the next day.
+ *
+ * @bug 8212970
+ */
+@Test
+public class TestZoneRules {
+
+ private static final ZoneId DUBLIN = ZoneId.of("Europe/Dublin");
+ private static final ZoneId PRAGUE = ZoneId.of("Europe/Prague");
+ private static final ZoneId WINDHOEK = ZoneId.of("Africa/Windhoek");
+ private static final ZoneId CASABLANCA = ZoneId.of("Africa/Casablanca");
+
+ private static final ZoneId TOKYO = ZoneId.of("Asia/Tokyo");
+ private static final LocalTime ONE_AM = LocalTime.of(1, 0);
+
+ @DataProvider
+ private Object[][] negativeDST () {
+ return new Object[][] {
+ // ZoneId, localDate, offset, standard offset, isDaylightSavings
+ // Europe/Dublin for the Rule "Eire"
+ {DUBLIN, LocalDate.of(1970, 6, 23), ZoneOffset.ofHours(1), ZoneOffset.ofHours(0), true},
+ {DUBLIN, LocalDate.of(1971, 6, 23), ZoneOffset.ofHours(1), ZoneOffset.ofHours(0), true},
+ {DUBLIN, LocalDate.of(1971, 11, 1), ZoneOffset.ofHours(0), ZoneOffset.ofHours(0), false},
+ {DUBLIN, LocalDate.of(2019, 6, 23), ZoneOffset.ofHours(1), ZoneOffset.ofHours(0), true},
+ {DUBLIN, LocalDate.of(2019, 12, 23), ZoneOffset.ofHours(0), ZoneOffset.ofHours(0), false},
+
+ // Europe/Prague which contains fixed negative savings (not a named Rule)
+ {PRAGUE, LocalDate.of(1946, 9, 30), ZoneOffset.ofHours(2), ZoneOffset.ofHours(1), true},
+ {PRAGUE, LocalDate.of(1946, 10, 10), ZoneOffset.ofHours(1), ZoneOffset.ofHours(1), false},
+ {PRAGUE, LocalDate.of(1946, 12, 3), ZoneOffset.ofHours(0), ZoneOffset.ofHours(0), false},
+ {PRAGUE, LocalDate.of(1947, 2, 25), ZoneOffset.ofHours(1), ZoneOffset.ofHours(1), false},
+ {PRAGUE, LocalDate.of(1947, 4, 30), ZoneOffset.ofHours(2), ZoneOffset.ofHours(1), true},
+
+ // Africa/Windhoek for the Rule "Namibia"
+ {WINDHOEK, LocalDate.of(1994, 3, 23), ZoneOffset.ofHours(1), ZoneOffset.ofHours(1), false},
+ {WINDHOEK, LocalDate.of(2016, 9, 23), ZoneOffset.ofHours(2), ZoneOffset.ofHours(1), true},
+
+ // Africa/Casablanca for the Rule "Morocco" Defines negative DST till 2037 as of 2019a.
+ {CASABLANCA, LocalDate.of(1939, 9, 13), ZoneOffset.ofHours(1), ZoneOffset.ofHours(0), true},
+ {CASABLANCA, LocalDate.of(1939, 11, 20), ZoneOffset.ofHours(0), ZoneOffset.ofHours(0), false},
+ {CASABLANCA, LocalDate.of(2018, 6, 18), ZoneOffset.ofHours(1), ZoneOffset.ofHours(0), true},
+ {CASABLANCA, LocalDate.of(2019, 1, 1), ZoneOffset.ofHours(1), ZoneOffset.ofHours(0), true},
+ {CASABLANCA, LocalDate.of(2019, 5, 6), ZoneOffset.ofHours(0), ZoneOffset.ofHours(0), false},
+ {CASABLANCA, LocalDate.of(2037, 10, 5), ZoneOffset.ofHours(0), ZoneOffset.ofHours(0), false},
+ {CASABLANCA, LocalDate.of(2037, 11, 16), ZoneOffset.ofHours(1), ZoneOffset.ofHours(0), true},
+ {CASABLANCA, LocalDate.of(2038, 11, 1), ZoneOffset.ofHours(1), ZoneOffset.ofHours(0), true},
+ };
+ }
+
+ @DataProvider
+ private Object[][] transitionBeyondDay() {
+ return new Object[][] {
+ // ZoneId, LocalDateTime, beforeOffset, afterOffset
+
+ // Asserts that the rule:
+ // Rule Japan 1948 1951 - Sep Sat>=8 25:00 0 S
+ // translates to the next day.
+ {TOKYO, LocalDateTime.of(LocalDate.of(1948, 9, 12), ONE_AM), ZoneOffset.ofHours(10), ZoneOffset.ofHours(9)},
+ {TOKYO, LocalDateTime.of(LocalDate.of(1949, 9, 11), ONE_AM), ZoneOffset.ofHours(10), ZoneOffset.ofHours(9)},
+ {TOKYO, LocalDateTime.of(LocalDate.of(1950, 9, 10), ONE_AM), ZoneOffset.ofHours(10), ZoneOffset.ofHours(9)},
+ {TOKYO, LocalDateTime.of(LocalDate.of(1951, 9, 9), ONE_AM), ZoneOffset.ofHours(10), ZoneOffset.ofHours(9)},
+ };
+ }
+
+ @Test(dataProvider="negativeDST")
+ public void test_NegativeDST(ZoneId zid, LocalDate ld, ZoneOffset offset, ZoneOffset stdOffset, boolean isDST) {
+ Instant i = Instant.from(ZonedDateTime.of(ld, LocalTime.MIN, zid));
+ ZoneRules zr = zid.getRules();
+ assertEquals(zr.getOffset(i), offset);
+ assertEquals(zr.getStandardOffset(i), stdOffset);
+ assertEquals(zr.isDaylightSavings(i), isDST);
+ }
+
+ @Test(dataProvider="transitionBeyondDay")
+ public void test_TransitionBeyondDay(ZoneId zid, LocalDateTime ldt, ZoneOffset before, ZoneOffset after) {
+ ZoneOffsetTransition zot = ZoneOffsetTransition.of(ldt, before, after);
+ ZoneRules zr = zid.getRules();
+ assertTrue(zr.getTransitions().contains(zot));
+ }
+}
--- a/test/jdk/java/util/Locale/LocaleProviders.java Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jdk/java/util/Locale/LocaleProviders.java Fri Jul 26 19:11:34 2019 -0400
@@ -28,6 +28,8 @@
public class LocaleProviders {
+ private static final boolean IS_WINDOWS = System.getProperty("os.name").startsWith("Windows");
+
public static void main(String[] args) {
String methodName = args[0];
@@ -76,6 +78,10 @@
bug8220227Test();
break;
+ case "bug8228465Test":
+ bug8228465Test();
+ break;
+
default:
throw new RuntimeException("Test method '"+methodName+"' not found.");
}
@@ -106,7 +112,7 @@
static void bug7198834Test() {
LocaleProviderAdapter lda = LocaleProviderAdapter.getAdapter(DateFormatProvider.class, Locale.US);
LocaleProviderAdapter.Type type = lda.getAdapterType();
- if (type == LocaleProviderAdapter.Type.HOST && System.getProperty("os.name").startsWith("Windows")) {
+ if (type == LocaleProviderAdapter.Type.HOST && IS_WINDOWS) {
DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, Locale.US);
String date = df.format(new Date());
if (date.charAt(date.length()-1) == ' ') {
@@ -133,7 +139,7 @@
// This test assumes Windows localized language/country display names.
static void bug8010666Test() {
- if (System.getProperty("os.name").startsWith("Windows")) {
+ if (IS_WINDOWS) {
NumberFormat nf = NumberFormat.getInstance(Locale.US);
try {
double ver = nf.parse(System.getProperty("os.version"))
@@ -215,7 +221,7 @@
}
static void bug8013903Test() {
- if (System.getProperty("os.name").startsWith("Windows")) {
+ if (IS_WINDOWS) {
Date sampleDate = new Date(0x10000000000L);
String hostResult = "\u5e73\u6210 16.11.03 (Wed) AM 11:53:47";
String jreResult = "\u5e73\u6210 16.11.03 (\u6c34) \u5348\u524d 11:53:47";
@@ -241,7 +247,7 @@
}
static void bug8027289Test(String expectedCodePoint) {
- if (System.getProperty("os.name").startsWith("Windows")) {
+ if (IS_WINDOWS) {
char[] expectedSymbol = Character.toChars(Integer.valueOf(expectedCodePoint, 16));
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.CHINA);
char formatted = nf.format(7000).charAt(0);
@@ -255,7 +261,7 @@
}
static void bug8220227Test() {
- if (System.getProperty("os.name").startsWith("Windows")) {
+ if (IS_WINDOWS) {
Locale l = new Locale("xx","XX");
String country = l.getDisplayCountry();
if (country.endsWith("(XX)")) {
@@ -264,4 +270,20 @@
}
}
}
+
+ static void bug8228465Test() {
+ LocaleProviderAdapter lda = LocaleProviderAdapter.getAdapter(CalendarNameProvider.class, Locale.US);
+ LocaleProviderAdapter.Type type = lda.getAdapterType();
+ if (type == LocaleProviderAdapter.Type.HOST && IS_WINDOWS) {
+ var names = new GregorianCalendar()
+ .getDisplayNames(Calendar.ERA, Calendar.SHORT_FORMAT, Locale.US);
+ if (!names.keySet().contains("AD") ||
+ names.get("AD").intValue() != 1) {
+ throw new RuntimeException(
+ "Short Era name for 'AD' is missing or incorrect");
+ } else {
+ System.out.println("bug8228465Test succeeded.");
+ }
+ }
+ }
}
--- a/test/jdk/java/util/Locale/LocaleProvidersRun.java Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jdk/java/util/Locale/LocaleProvidersRun.java Fri Jul 26 19:11:34 2019 -0400
@@ -25,7 +25,7 @@
* @test
* @bug 6336885 7196799 7197573 7198834 8000245 8000615 8001440 8008577
* 8010666 8013086 8013233 8013903 8015960 8028771 8054482 8062006
- * 8150432 8215913 8220227
+ * 8150432 8215913 8220227 8228465
* @summary tests for "java.locale.providers" system property
* @library /test/lib
* @build LocaleProviders
@@ -154,6 +154,8 @@
testRun("HOST", "bug8220227Test", "", "", "");
}
+ //testing 8228465 fix. (Windows only)
+ testRun("HOST", "bug8228465Test", "", "", "");
}
private static void testRun(String prefList, String methodName,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/TimeZone/NegativeDSTTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2019, 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 org.testng.Assert.assertEquals;
+
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.time.ZonedDateTime;
+import java.time.ZoneId;
+import java.util.Date;
+import java.util.TimeZone;
+
+import org.testng.annotations.Test;
+import org.testng.annotations.DataProvider;
+import static org.testng.Assert.assertEquals;
+
+/**
+ * @test
+ * @bug 8212970
+ * @summary Test whether the savings are positive in time zones that have
+ * negative savings in the source TZ files.
+ * @run testng NegativeDSTTest
+ */
+@Test
+public class NegativeDSTTest {
+
+ private static final TimeZone DUBLIN = TimeZone.getTimeZone("Europe/Dublin");
+ private static final TimeZone PRAGUE = TimeZone.getTimeZone("Europe/Prague");
+ private static final TimeZone WINDHOEK = TimeZone.getTimeZone("Africa/Windhoek");
+ private static final TimeZone CASABLANCA = TimeZone.getTimeZone("Africa/Casablanca");
+ private static final int ONE_HOUR = 3600_000;
+
+ @DataProvider
+ private Object[][] negativeDST () {
+ return new Object[][] {
+ // TimeZone, localDate, offset, isDaylightSavings
+ // Europe/Dublin for the Rule "Eire"
+ {DUBLIN, LocalDate.of(1970, 6, 23), ONE_HOUR, true},
+ {DUBLIN, LocalDate.of(1971, 6, 23), ONE_HOUR, true},
+ {DUBLIN, LocalDate.of(1971, 11, 1), 0, false},
+ {DUBLIN, LocalDate.of(2019, 6, 23), ONE_HOUR, true},
+ {DUBLIN, LocalDate.of(2019, 12, 23), 0, false},
+
+ // Europe/Prague which contains fixed negative savings (not a named Rule)
+ {PRAGUE, LocalDate.of(1946, 9, 30), 2 * ONE_HOUR, true},
+ {PRAGUE, LocalDate.of(1946, 10, 10), ONE_HOUR, false},
+ {PRAGUE, LocalDate.of(1946, 12, 3), 0, false},
+ {PRAGUE, LocalDate.of(1947, 2, 25), ONE_HOUR, false},
+ {PRAGUE, LocalDate.of(1947, 4, 30), 2 * ONE_HOUR, true},
+
+ // Africa/Windhoek for the Rule "Namibia"
+ {WINDHOEK, LocalDate.of(1994, 3, 23), ONE_HOUR, false},
+ {WINDHOEK, LocalDate.of(2016, 9, 23), 2 * ONE_HOUR, true},
+
+ // Africa/Casablanca for the Rule "Morocco" Defines negative DST till 2037 as of 2019a.
+ {CASABLANCA, LocalDate.of(1939, 9, 13), ONE_HOUR, true},
+ {CASABLANCA, LocalDate.of(1939, 11, 20), 0, false},
+ {CASABLANCA, LocalDate.of(2018, 6, 18), ONE_HOUR, true},
+ {CASABLANCA, LocalDate.of(2019, 1, 1), ONE_HOUR, true},
+ {CASABLANCA, LocalDate.of(2019, 5, 6), 0, false},
+ {CASABLANCA, LocalDate.of(2037, 10, 5), 0, false},
+ {CASABLANCA, LocalDate.of(2037, 11, 16), ONE_HOUR, true},
+ {CASABLANCA, LocalDate.of(2038, 11, 1), ONE_HOUR, true},
+ };
+ }
+
+ @Test(dataProvider="negativeDST")
+ public void test_NegativeDST(TimeZone tz, LocalDate ld, int offset, boolean isDST) {
+ Date d = Date.from(Instant.from(ZonedDateTime.of(ld, LocalTime.MIN, tz.toZoneId())));
+ assertEquals(tz.getOffset(d.getTime()), offset);
+ assertEquals(tz.inDaylightTime(d), isDST);
+ }
+}
--- a/test/jdk/javax/crypto/Cipher/CipherInputStreamExceptions.java Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jdk/javax/crypto/Cipher/CipherInputStreamExceptions.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, 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
@@ -55,7 +55,7 @@
/* Full read stream, check that getMoreData() is throwing an exception
* This test
- * 1) Encrypt 100 bytes with AES/GCM/PKCS5Padding
+ * 1) Encrypt 100 bytes with AES/GCM/NoPadding
* 2) Changes the last byte to invalidate the authetication tag.
* 3) Fully reads CipherInputStream to decrypt the message and closes
*/
@@ -66,7 +66,7 @@
System.out.println("Running gcm_AEADBadTag");
- // Encrypt 100 bytes with AES/GCM/PKCS5Padding
+ // Encrypt 100 bytes with AES/GCM/NoPadding
byte[] ct = encryptedText("GCM", 100);
// Corrupt the encrypted message
ct = corruptGCM(ct);
@@ -92,7 +92,7 @@
/* Short read stream,
* This test
- * 1) Encrypt 100 bytes with AES/GCM/PKCS5Padding
+ * 1) Encrypt 100 bytes with AES/GCM/NoPadding
* 2) Reads 100 bytes from stream to decrypt the message and closes
* 3) Make sure no value is returned by read()
* 4) Make sure no exception is thrown
@@ -106,7 +106,7 @@
byte[] pt = new byte[600];
pt[0] = 1;
- // Encrypt provided 600 bytes with AES/GCM/PKCS5Padding
+ // Encrypt provided 600 bytes with AES/GCM/NoPadding
byte[] ct = encryptedText("GCM", pt);
// Create stream for decryption
CipherInputStream in = getStream("GCM", ct);
@@ -134,7 +134,7 @@
* Verify doFinal() exception is suppressed when input stream is not
* read before it is closed.
* This test:
- * 1) Encrypt 100 bytes with AES/GCM/PKCS5Padding
+ * 1) Encrypt 100 bytes with AES/GCM/NoPadding
* 2) Changes the last byte to invalidate the authetication tag.
* 3) Opens a CipherInputStream and the closes it. Never reads from it.
*
@@ -146,7 +146,7 @@
System.out.println("Running supressUnreadCorrupt test");
- // Encrypt 100 bytes with AES/GCM/PKCS5Padding
+ // Encrypt 100 bytes with AES/GCM/NoPadding
byte[] ct = encryptedText("GCM", 100);
// Corrupt the encrypted message
ct = corruptGCM(ct);
@@ -166,7 +166,7 @@
* Verify noexception thrown when 1 byte is read from a GCM stream
* and then closed
* This test:
- * 1) Encrypt 100 bytes with AES/GCM/PKCS5Padding
+ * 1) Encrypt 100 bytes with AES/GCM/NoPadding
* 2) Read one byte from the stream, expect no exception thrown.
* 4) Close stream,expect no exception thrown.
*/
@@ -174,7 +174,7 @@
System.out.println("Running gcm_oneReadByte test");
- // Encrypt 100 bytes with AES/GCM/PKCS5Padding
+ // Encrypt 100 bytes with AES/GCM/NoPadding
byte[] ct = encryptedText("GCM", 100);
// Create stream for decryption
CipherInputStream in = getStream("GCM", ct);
@@ -192,7 +192,7 @@
* Verify exception thrown when 1 byte is read from a corrupted GCM stream
* and then closed
* This test:
- * 1) Encrypt 100 bytes with AES/GCM/PKCS5Padding
+ * 1) Encrypt 100 bytes with AES/GCM/NoPadding
* 2) Changes the last byte to invalidate the authetication tag.
* 3) Read one byte from the stream, expect exception thrown.
* 4) Close stream,expect no exception thrown.
@@ -201,7 +201,7 @@
System.out.println("Running gcm_oneReadByteCorrupt test");
- // Encrypt 100 bytes with AES/GCM/PKCS5Padding
+ // Encrypt 100 bytes with AES/GCM/NoPadding
byte[] ct = encryptedText("GCM", 100);
// Corrupt the encrypted message
ct = corruptGCM(ct);
@@ -357,7 +357,7 @@
static byte[] encryptedText(String mode, byte[] pt) throws Exception{
Cipher c;
if (mode.compareTo("GCM") == 0) {
- c = Cipher.getInstance("AES/GCM/PKCS5Padding", "SunJCE");
+ c = Cipher.getInstance("AES/GCM/NoPadding", "SunJCE");
c.init(Cipher.ENCRYPT_MODE, key, gcmspec);
} else if (mode.compareTo("CBC") == 0) {
c = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE");
@@ -380,7 +380,7 @@
Cipher c;
if (mode.compareTo("GCM") == 0) {
- c = Cipher.getInstance("AES/GCM/PKCS5Padding", "SunJCE");
+ c = Cipher.getInstance("AES/GCM/NoPadding", "SunJCE");
c.init(Cipher.DECRYPT_MODE, key, gcmspec);
} else if (mode.compareTo("CBC") == 0) {
c = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE");
--- a/test/jdk/sun/util/calendar/zi/TestZoneInfo310.java Thu Jul 25 17:27:53 2019 -0400
+++ b/test/jdk/sun/util/calendar/zi/TestZoneInfo310.java Fri Jul 26 19:11:34 2019 -0400
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8007572 8008161 8157792 8224560
+ * @bug 8007572 8008161 8157792 8212970 8224560
* @summary Test whether the TimeZone generated from JSR310 tzdb is the same
* as the one from the tz data from javazic
* @modules java.base/sun.util.calendar:+open
@@ -46,18 +46,18 @@
public static void main(String[] args) throws Throwable {
String TESTDIR = System.getProperty("test.dir", ".");
- String SRCDIR = System.getProperty("test.src", ".");
- String tzdir = SRCDIR + File.separator + "tzdata";
- String tzfiles = "africa antarctica asia australasia europe northamerica pacificnew southamerica backward etcetera systemv";
- String jdk_tzdir = SRCDIR + File.separator + "tzdata_jdk";
- String jdk_tzfiles = "gmt jdk11_backward";
+ Path tzdir = Paths.get(System.getProperty("test.root"),
+ "..", "..", "make", "data", "tzdata");
+ String tzfiles = "africa antarctica asia australasia europe northamerica pacificnew southamerica backward etcetera systemv gmt";
+ Path jdk_tzdir = Paths.get(System.getProperty("test.src"), "tzdata_jdk");
+ String jdk_tzfiles = "jdk11_backward";
String zidir = TESTDIR + File.separator + "zi";
File fZidir = new File(zidir);
if (!fZidir.exists()) {
fZidir.mkdirs();
}
Matcher m = Pattern.compile("tzdata(?<ver>[0-9]{4}[A-z])")
- .matcher(new String(Files.readAllBytes(Paths.get(tzdir, "VERSION")), "ascii"));
+ .matcher(new String(Files.readAllBytes(tzdir.resolve("VERSION")), "ascii"));
String ver = m.find() ? m.group("ver") : "NULL";
ArrayList<String> alist = new ArrayList<>();
@@ -66,10 +66,10 @@
alist.add("-d");
alist.add(zidir);
for (String f : tzfiles.split(" ")) {
- alist.add(tzdir + File.separator + f);
+ alist.add(tzdir.resolve(f).toString());
}
for (String f : jdk_tzfiles.split(" ")) {
- alist.add(jdk_tzdir + File.separator + f);
+ alist.add(jdk_tzdir.resolve(f).toString());
}
System.out.println("Compiling tz files!");
Main.main(alist.toArray(new String[alist.size()]));
@@ -174,10 +174,30 @@
* Temporary ignoring the failing TimeZones which are having zone
* rules defined till year 2037 and/or above and have negative DST
* save time in IANA tzdata. This bug is tracked via JDK-8223388.
+ *
+ * These are the zones/rules that employ negative DST in vanguard
+ * format (as of 2019a):
+ *
+ * - Rule "Eire"
+ * - Rule "Morocco"
+ * - Rule "Namibia"
+ * - Zone "Europe/Prague"
+ *
+ * Tehran/Iran rule has rules beyond 2037, in which javazic assumes
+ * to be the last year. Thus javazic's rule is based on year 2037
+ * (Mar 20th/Sep 20th are the cutover dates), while the real rule
+ * has year 2087 where Mar 21st/Sep 21st are the cutover dates.
*/
- if (zid.equals("Africa/Casablanca") || zid.equals("Africa/El_Aaiun")
- || zid.equals("Asia/Tehran") || zid.equals("Iran")) {
- continue;
+ if (zid.equals("Africa/Casablanca") || // uses "Morocco" rule
+ zid.equals("Africa/El_Aaiun") || // uses "Morocco" rule
+ zid.equals("Africa/Windhoek") || // uses "Namibia" rule
+ zid.equals("Eire") ||
+ zid.equals("Europe/Bratislava") || // link to "Europe/Prague"
+ zid.equals("Europe/Dublin") || // uses "Eire" rule
+ zid.equals("Europe/Prague") ||
+ zid.equals("Asia/Tehran") || // last rule mismatch
+ zid.equals("Iran")) { // last rule mismatch
+ continue;
}
if (! zi.equalsTo(ziOLD)) {
System.out.println(zi.diffsTo(ziOLD));
--- a/test/jdk/sun/util/calendar/zi/tzdata/VERSION Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-tzdata2019a
--- a/test/jdk/sun/util/calendar/zi/tzdata/africa Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1370 +0,0 @@
-#
-# 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.
-#
-# tzdb data for Africa and environs
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# 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). For more, please see
-# the file CONTRIBUTING in the tz distribution.
-
-# From Paul Eggert (2018-05-27):
-#
-# Unless otherwise specified, the source for data through 1990 is:
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
-# Unfortunately this book contains many errors and cites no sources.
-#
-# Many years ago Gwillim Law wrote that a good source
-# for time zone data was the International Air Transport
-# Association's Standard Schedules Information Manual (IATA SSIM),
-# published semiannually. Law sent in several helpful summaries
-# of the IATA's data after 1990. Except where otherwise noted,
-# IATA SSIM is the source for entries after 1990.
-#
-# Another source occasionally used is Edward W. Whitman, World Time Differences,
-# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
-# I found in the UCLA library.
-#
-# For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
-# https://www.jstor.org/stable/1774359
-#
-# A reliable and entertaining source about time zones is
-# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
-#
-# European-style abbreviations are commonly used along the Mediterranean.
-# For sub-Saharan Africa abbreviations were less standardized.
-# Previous editions of this database used WAT, CAT, SAT, and EAT
-# for UT +00 through +03, respectively,
-# but in 1997 Mark R V Murray reported that
-# 'SAST' is the official abbreviation for +02 in the country of South Africa,
-# 'CAT' is commonly used for +02 in countries north of South Africa, and
-# 'WAT' is probably the best name for +01, as the common phrase for
-# the area that includes Nigeria is "West Africa".
-#
-# To summarize, the following abbreviations seemed to have some currency:
-# +00 GMT Greenwich Mean Time
-# +02 CAT Central Africa Time
-# +02 SAST South Africa Standard Time
-# and Murray suggested the following abbreviation:
-# +01 WAT West Africa Time
-# Murray's suggestion seems to have caught on in news reports and the like.
-# I vaguely recall 'WAT' also being used for -01 in the past but
-# cannot now come up with solid citations.
-#
-# I invented the following abbreviations in the 1990s:
-# +02 WAST West Africa Summer Time
-# +03 CAST Central Africa Summer Time
-# +03 SAST South Africa Summer Time
-# +03 EAT East Africa Time
-# 'EAT' seems to have caught on and is in current timestamps, and though
-# the other abbreviations are rarer and are only in past timestamps,
-# they are paired with better-attested non-DST abbreviations.
-# Corrections are welcome.
-
-# Algeria
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Algeria 1916 only - Jun 14 23:00s 1:00 S
-Rule Algeria 1916 1919 - Oct Sun>=1 23:00s 0 -
-Rule Algeria 1917 only - Mar 24 23:00s 1:00 S
-Rule Algeria 1918 only - Mar 9 23:00s 1:00 S
-Rule Algeria 1919 only - Mar 1 23:00s 1:00 S
-Rule Algeria 1920 only - Feb 14 23:00s 1:00 S
-Rule Algeria 1920 only - Oct 23 23:00s 0 -
-Rule Algeria 1921 only - Mar 14 23:00s 1:00 S
-Rule Algeria 1921 only - Jun 21 23:00s 0 -
-Rule Algeria 1939 only - Sep 11 23:00s 1:00 S
-Rule Algeria 1939 only - Nov 19 1:00 0 -
-Rule Algeria 1944 1945 - Apr Mon>=1 2:00 1:00 S
-Rule Algeria 1944 only - Oct 8 2:00 0 -
-Rule Algeria 1945 only - Sep 16 1:00 0 -
-Rule Algeria 1971 only - Apr 25 23:00s 1:00 S
-Rule Algeria 1971 only - Sep 26 23:00s 0 -
-Rule Algeria 1977 only - May 6 0:00 1:00 S
-Rule Algeria 1977 only - Oct 21 0:00 0 -
-Rule Algeria 1978 only - Mar 24 1:00 1:00 S
-Rule Algeria 1978 only - Sep 22 3:00 0 -
-Rule Algeria 1980 only - Apr 25 0:00 1:00 S
-Rule Algeria 1980 only - Oct 31 2:00 0 -
-# Shanks & 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
- 1:00 Algeria CE%sT 1946 Oct 7
- 0:00 - WET 1956 Jan 29
- 1:00 - CET 1963 Apr 14
- 0:00 Algeria WE%sT 1977 Oct 21
- 1:00 Algeria CE%sT 1979 Oct 26
- 0:00 Algeria WE%sT 1981 May
- 1:00 - CET
-
-# Angola
-# Benin
-# See Africa/Lagos.
-
-# Botswana
-# See Africa/Maputo.
-
-# Burkina Faso
-# See Africa/Abidjan.
-
-# Burundi
-# See Africa/Maputo.
-
-# Cameroon
-# See Africa/Lagos.
-
-# Cape Verde / Cabo Verde
-#
-# From Paul Eggert (2018-02-16):
-# Shanks gives 1907 for the transition to +02.
-# For now, ignore that and follow the 1911-05-26 Portuguese decree
-# (see Europe/Lisbon).
-#
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Atlantic/Cape_Verde -1:34:04 - LMT 1912 Jan 01 2:00u # Praia
- -2:00 - -02 1942 Sep
- -2:00 1:00 -01 1945 Oct 15
- -2:00 - -02 1975 Nov 25 2:00
- -1:00 - -01
-
-# Central African Republic
-# See Africa/Lagos.
-
-# Chad
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-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
-# See Africa/Nairobi.
-
-# Democratic Republic of the Congo
-# See Africa/Lagos for the western part and Africa/Maputo for the eastern.
-
-# Republic of the Congo
-# See Africa/Lagos.
-
-# 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 Atlantic/St_Helena # St Helena
-
-# Djibouti
-# See Africa/Nairobi.
-
-###############################################################################
-
-# Egypt
-
-# Milne says Cairo used 2:05:08.9, the local mean time of the Abbasizeh
-# observatory; round to nearest. Milne also says that the official time for
-# Egypt was mean noon at the Great Pyramid, 2:04:30.5, but apparently this
-# did not apply to Cairo, Alexandria, or Port Said.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Egypt 1940 only - Jul 15 0:00 1:00 S
-Rule Egypt 1940 only - Oct 1 0:00 0 -
-Rule Egypt 1941 only - Apr 15 0:00 1:00 S
-Rule Egypt 1941 only - Sep 16 0:00 0 -
-Rule Egypt 1942 1944 - Apr 1 0:00 1:00 S
-Rule Egypt 1942 only - Oct 27 0:00 0 -
-Rule Egypt 1943 1945 - Nov 1 0:00 0 -
-Rule Egypt 1945 only - Apr 16 0:00 1:00 S
-Rule Egypt 1957 only - May 10 0:00 1:00 S
-Rule Egypt 1957 1958 - Oct 1 0:00 0 -
-Rule Egypt 1958 only - May 1 0:00 1:00 S
-Rule Egypt 1959 1981 - May 1 1:00 1:00 S
-Rule Egypt 1959 1965 - Sep 30 3:00 0 -
-Rule Egypt 1966 1994 - Oct 1 3:00 0 -
-Rule Egypt 1982 only - Jul 25 1:00 1:00 S
-Rule Egypt 1983 only - Jul 12 1:00 1:00 S
-Rule Egypt 1984 1988 - May 1 1:00 1:00 S
-Rule Egypt 1989 only - May 6 1:00 1:00 S
-Rule Egypt 1990 1994 - May 1 1:00 1:00 S
-# IATA (after 1990) says transitions are at 0:00.
-# Go with IATA starting in 1995, except correct 1995 entry from 09-30 to 09-29.
-
-# From Alexander Krivenyshev (2011-04-20):
-# "...Egypt's interim cabinet decided on Wednesday to cancel daylight
-# saving time after a poll posted on its website showed the majority of
-# 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 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 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 NĂžrgaard Welen (2007-08-15): [The following agree:]
-# http://www.nentjes.info/Bill/bill5.htm
-# https://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 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
-# year. This year it will be observed September 13 (September is quite
-# hot in Egypt), and the idea is to make fasting easier for workers by
-# shifting business hours one hour out of daytime heat. Consequently,
-# unless discontinued, next DST may end Thursday 28 August 2008.
-# From Paul Eggert (2007-08-17):
-# For lack of better info, assume the new rule is last Thursday in August.
-
-# From Petr Machata (2009-04-06):
-# The following appeared in Red Hat bugzilla[1] (edited):
-#
-# > $ zdump -v /usr/share/zoneinfo/Africa/Cairo | grep 2009
-# > /usr/share/zoneinfo/Africa/Cairo Thu Apr 23 21:59:59 2009 UTC = Thu =
-# Apr 23
-# > 23:59:59 2009 EET isdst=0 gmtoff=7200
-# > /usr/share/zoneinfo/Africa/Cairo Thu Apr 23 22:00:00 2009 UTC = Fri =
-# Apr 24
-# > 01:00:00 2009 EEST isdst=1 gmtoff=10800
-# > /usr/share/zoneinfo/Africa/Cairo Thu Aug 27 20:59:59 2009 UTC = Thu =
-# Aug 27
-# > 23:59:59 2009 EEST isdst=1 gmtoff=10800
-# > /usr/share/zoneinfo/Africa/Cairo Thu Aug 27 21:00:00 2009 UTC = Thu =
-# Aug 27
-# > 23:00:00 2009 EET isdst=0 gmtoff=7200
-#
-# > end date should be Thu Sep 24 2009 (Last Thursday in September at 23:59=
-# :59)
-# > http://support.microsoft.com/kb/958729/
-#
-# timeanddate[2] and another site I've found[3] also support that.
-#
-# [1] https://bugzilla.redhat.com/show_bug.cgi?id=492263
-# [2] https://www.timeanddate.com/worldclock/clockchange.html?n=53
-# [3] https://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
-# Thursday in September; Egypt is expected to revert to the last Thursday
-# in September.
-
-# From Steffen Thorsen (2009-08-11):
-# We have been able to confirm the August change with the Egyptian Cabinet
-# Information and Decision Support Center:
-# https://www.timeanddate.com/news/time/egypt-dst-ends-2009.html
-#
-# The Middle East News Agency
-# https://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,
-# and can be found by searching for "winter" in their search engine
-# (at least today).
-
-# From Alexander Krivenyshev (2010-07-20):
-# 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"
-# http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again
-# 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
-# http://english.ahram.org.eg/NewsContent/1/64/100735/Egypt/Politics-/Egypts-government-to-reapply-daylight-saving-time-.aspx
-
-# From Gunther Vermier (2014-05-13):
-# our Egypt office confirms that the change will be at 15 May "midnight" (24:00)
-
-# 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. There is
-# no information about when DST will end this fall. See:
-# http://abcnews.go.com/International/wireStory/el-sissi-pushes-egyptians-line-23614833
-
-# From Steffen Thorsen (2015-04-08):
-# Egypt will start DST on midnight after Thursday, April 30, 2015.
-# This is based on a law (no 35) from May 15, 2014 saying it starts the last
-# Thursday of April.... Clocks will still be turned back for Ramadan, but
-# dates not yet announced....
-# http://almogaz.com/news/weird-news/2015/04/05/1947105 ...
-# https://www.timeanddate.com/news/time/egypt-starts-dst-2015.html
-
-# From Ahmed Nazmy (2015-04-20):
-# Egypt's ministers cabinet just announced ... that it will cancel DST at
-# least for 2015.
-#
-# From Tim Parenti (2015-04-20):
-# http://english.ahram.org.eg/WriterArticles/NewsContentP/1/128195/Egypt/No-daylight-saving-this-summer-Egypts-prime-minist.aspx
-# "Egypt's cabinet agreed on Monday not to switch clocks for daylight saving
-# time this summer, and carry out studies on the possibility of canceling the
-# practice altogether in future years."
-#
-# From Paul Eggert (2015-04-24):
-# Yesterday the office of Egyptian President El-Sisi announced his
-# decision to abandon DST permanently. See Ahram Online 2015-04-24.
-# http://english.ahram.org.eg/NewsContent/1/64/128509/Egypt/Politics-/Sisi-cancels-daylight-saving-time-in-Egypt.aspx
-
-# From Steffen Thorsen (2016-04-29):
-# Egypt will have DST from July 7 until the end of October....
-# http://english.ahram.org.eg/NewsContentP/1/204655/Egypt/Daylight-savings-time-returning-to-Egypt-on--July.aspx
-# From Mina Samuel (2016-07-04):
-# Egyptian government took the decision to cancel the DST,
-
-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 26 24:00 0 -
-Rule Egypt 2014 only - Jul 31 24:00 1:00 S
-Rule Egypt 2014 only - Sep lastThu 24:00 0 -
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Cairo 2:05:09 - LMT 1900 Oct
- 2:00 Egypt EE%sT
-
-# Equatorial Guinea
-# See Africa/Lagos.
-
-# Eritrea
-# See Africa/Nairobi.
-
-# Eswatini (formerly Swaziland)
-# See Africa/Johannesburg.
-
-# Ethiopia
-# See Africa/Nairobi.
-#
-# Unfortunately tzdb records only Western clock time in use in Ethiopia,
-# as the tzdb format is not up to properly recording a common Ethiopian
-# timekeeping practice that is based on solar time. See:
-# Mortada D. If you have a meeting in Ethiopia, you'd better double
-# check the time. PRI's The World. 2015-01-30 15:15 -05.
-# https://www.pri.org/stories/2015-01-30/if-you-have-meeting-ethiopia-you-better-double-check-time
-
-# Gabon
-# See Africa/Lagos.
-
-# Gambia
-# See Africa/Abidjan.
-
-# Ghana
-
-# From Paul Eggert (2018-01-30):
-# Whitman says DST was observed from 1931 to "the present";
-# Shanks & Pottenger say 1936 to 1942 with 20 minutes of DST,
-# with transitions on 09-01 and 12-31 at 00:00.
-# Page 33 of Parish GCB, Colonial Reports - Annual. No. 1066. Gold
-# Coast. Report for 1919. (March 1921), OCLC 784024077
-# http://libsysdigi.library.illinois.edu/ilharvest/africana/books2011-05/5530214/5530214_1919/5530214_1919_opt.pdf
-# lists the Determination of the Time Ordinance, 1919, No. 18,
-# "to advance the time observed locally by the space of twenty minutes
-# during the last four months of each year; the object in view being
-# to extend during those months the period of daylight-time available
-# for evening recreation after office hours."
-# Vanessa Ogle, The Global Transformation of Time, 1870-1950 (2015), p 33,
-# writes "In 1919, the Gold Coast (Ghana as of 1957) made Greenwich
-# time its legal time and simultaneously legalized a summer time of
-# UTC - 00:20 minutes from March to October."; a footnote lists
-# the ordinance as being dated 1919-11-24.
-# The Crown Colonist, Volume 12 (1942), p 176, says "the Government
-# intend advancing Gold Coast time half an hour ahead of G.M.T.
-# The actual date of the alteration has not yet been announced."
-# These sources are incomplete and contradictory. Possibly what is
-# now Ghana observed different DST regimes in different years. For
-# lack of better info, use Shanks except treat the minus sign as a
-# typo, and assume DST started in 1920 not 1936.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Ghana 1920 1942 - Sep 1 0:00 0:20 -
-Rule Ghana 1920 1942 - Dec 31 0:00 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Accra -0:00:52 - LMT 1918
- 0:00 Ghana GMT/+0020
-
-# Guinea
-# See Africa/Abidjan.
-
-# Guinea-Bissau
-#
-# From Paul Eggert (2018-02-16):
-# Shanks gives 1911-05-26 for the transition to WAT,
-# evidently confusing the date of the Portuguese decree
-# (see Europe/Lisbon) with the date that it took effect.
-#
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1 1:00u
- -1:00 - -01 1975
- 0:00 - GMT
-
-# Kenya
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Nairobi 2:27:16 - LMT 1928 Jul
- 3:00 - EAT 1930
- 2:30 - +0230 1940
- 2:45 - +0245 1960
- 3:00 - EAT
-Link Africa/Nairobi Africa/Addis_Ababa # Ethiopia
-Link Africa/Nairobi Africa/Asmara # Eritrea
-Link Africa/Nairobi Africa/Dar_es_Salaam # Tanzania
-Link Africa/Nairobi Africa/Djibouti
-Link Africa/Nairobi Africa/Kampala # Uganda
-Link Africa/Nairobi Africa/Mogadishu # Somalia
-Link Africa/Nairobi Indian/Antananarivo # Madagascar
-Link Africa/Nairobi Indian/Comoro
-Link Africa/Nairobi Indian/Mayotte
-
-# Lesotho
-# See Africa/Johannesburg.
-
-# Liberia
-#
-# From Paul Eggert (2017-03-02):
-#
-# The Nautical Almanac for the Year 1970, p 264, is the source for -0:44:30.
-#
-# In 1972 Liberia was the last country to switch from a UT offset
-# that was not a multiple of 15 or 20 minutes. The 1972 change was on
-# 1972-01-07, according to an entry dated 1972-01-04 on p 330 of:
-# Presidential Papers: First year of the administration of
-# President William R. Tolbert, Jr., July 23, 1971-July 31, 1972.
-# Monrovia: Executive Mansion.
-#
-# Use the abbreviation "MMT" before 1972, as the more-accurate numeric
-# abbreviation "-004430" would be one byte over the POSIX limit.
-#
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Monrovia -0:43:08 - LMT 1882
- -0:43:08 - MMT 1919 Mar # Monrovia Mean Time
- -0:44:30 - MMT 1972 Jan 7 # approximately MMT
- 0:00 - GMT
-
-###############################################################################
-
-# Libya
-
-# From Even Scharning (2012-11-10):
-# Libya set their time one hour back at 02:00 on Saturday November 10.
-# https://www.libyaherald.com/2012/11/04/clocks-to-go-back-an-hour-on-saturday/
-# Here is an official source [in Arabic]: http://ls.ly/fb6Yc
-#
-# Steffen Thorsen forwarded a translation (2012-11-10) in
-# https://mm.icann.org/pipermail/tz/2012-November/018451.html
-#
-# From Tim Parenti (2012-11-11):
-# Treat the 2012-11-10 change as a zone change from UTC+2 to UTC+1.
-# The DST rules planned for 2013 and onward roughly mirror those of Europe
-# (either two days before them or five days after them, so as to fall on
-# lastFri instead of lastSun).
-
-# From Even Scharning (2013-10-25):
-# The scheduled end of DST in Libya on Friday, October 25, 2013 was
-# cancelled yesterday....
-# https://www.libyaherald.com/2013/10/24/correction-no-time-change-tomorrow/
-#
-# From Paul Eggert (2013-10-25):
-# For now, assume they're reverting to the pre-2012 rules of permanent UT +02.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Libya 1951 only - Oct 14 2:00 1:00 S
-Rule Libya 1952 only - Jan 1 0:00 0 -
-Rule Libya 1953 only - Oct 9 2:00 1:00 S
-Rule Libya 1954 only - Jan 1 0:00 0 -
-Rule Libya 1955 only - Sep 30 0:00 1:00 S
-Rule Libya 1956 only - Jan 1 0:00 0 -
-Rule Libya 1982 1984 - Apr 1 0:00 1:00 S
-Rule Libya 1982 1985 - Oct 1 0:00 0 -
-Rule Libya 1985 only - Apr 6 0:00 1:00 S
-Rule Libya 1986 only - Apr 4 0:00 1:00 S
-Rule Libya 1986 only - Oct 3 0:00 0 -
-Rule Libya 1987 1989 - Apr 1 0:00 1:00 S
-Rule Libya 1987 1989 - Oct 1 0:00 0 -
-Rule Libya 1997 only - Apr 4 0:00 1:00 S
-Rule Libya 1997 only - Oct 4 0:00 0 -
-Rule Libya 2013 only - Mar lastFri 1:00 1:00 S
-Rule Libya 2013 only - Oct lastFri 2:00 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Tripoli 0:52:44 - LMT 1920
- 1:00 Libya CE%sT 1959
- 2:00 - EET 1982
- 1:00 Libya CE%sT 1990 May 4
-# The 1996 and 1997 entries are from Shanks & Pottenger;
-# 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
-
-# Madagascar
-# See Africa/Nairobi.
-
-# Malawi
-# See Africa/Maputo.
-
-# Mali
-# Mauritania
-# See Africa/Abidjan.
-
-# Mauritius
-
-# From Steffen Thorsen (2008-06-25):
-# Mauritius plans to observe DST from 2008-11-01 to 2009-03-31 on a trial
-# basis....
-# It seems that Mauritius observed daylight saving time from 1982-10-10 to
-# 1983-03-20 as well, but that was not successful....
-# https://www.timeanddate.com/news/time/mauritius-daylight-saving-time.html
-
-# From Alex Krivenyshev (2008-06-25):
-# http://economicdevelopment.gov.mu/portal/site/Mainhomepage/menuitem.a42b24128104d9845dabddd154508a0c/?content_id=0a7cee8b5d69a110VgnVCM1000000a04a8c0RCRD
-
-# From Arthur David Olson (2008-06-30):
-# The www.timeanddate.com article cited by Steffen Thorsen notes that "A
-# final decision has yet to be made on the times that daylight saving
-# would begin and end on these dates." As a place holder, use midnight.
-
-# From Paul Eggert (2008-06-30):
-# Follow Thorsen on DST in 1982/1983, instead of Shanks & Pottenger.
-
-# 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
-# given, but it is probably at either 2 or 3 wall clock time).
-#
-# A little strange though, since the article says that they moved the date
-# to align itself with Europe and USA which also change time on that date,
-# but that means they have not paid attention to what happened in
-# USA/Canada last year (DST ends first Sunday in November). I also wonder
-# why that they end on a Friday, instead of aligning with Europe which
-# changes two days later.
-
-# 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
-# published on Monday, June 30, 2008...
-#
-# I guess that article in French "Le gouvernement avance l'introduction
-# 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
-# of the Time Bill which provides for the introduction of summer time in
-# Mauritius. The summer time period which will be of one hour ahead of
-# the standard time, will be aligned with that in Europe and the United
-# 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
-# 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:
-# https://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:
-# "The trial ended on March 29, 2009, when the clocks moved back by one hour
-# at 2am (or 02:00) local time..."
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Mauritius 1982 only - Oct 10 0:00 1:00 -
-Rule Mauritius 1983 only - Mar 21 0:00 0 -
-Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 -
-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
- 4:00 Mauritius +04/+05
-# Agalega Is, Rodriguez
-# no information; probably like Indian/Mauritius
-
-# Mayotte
-# See Africa/Nairobi.
-
-# Morocco
-# 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
-# 1 June, 2008 and 27 September, 2008.
-#
-# "... 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 Government Spokesman, Khalid Naciri...."
-#
-# http://www.worldtimezone.com/dst_news/dst_news_morocco01.html
-# 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:
-# 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:
-# https://www.avmaroc.com/actualite/heure-dete-comment-a127896.html
-# (and republished here: <http://www.actu.ma/heure-dete-comment_i127896_0.html>)
-# the changes occur at midnight:
-#
-# Saturday night May 31st at midnight (which in French is to be
-# interpreted as the night between Saturday and Sunday)
-# Sunday night the 28th at midnight
-#
-# Seeing that the 28th is Monday, I am guessing that she intends to say
-# the midnight of the 28th which is the midnight between Sunday and
-# Monday, which jives with other sources that say that it's inclusive
-# June 1st to Sept 27th.
-#
-# The decision was taken by decree *2-08-224 *but I can't find the decree
-# published on the web.
-#
-# It's also confirmed here:
-# 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).
-#
-# The following Google query will generate many relevant hits:
-# https://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
-# and September 1. They originally planned to observe DST to near the end
-# 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:
-# https://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:
-# https://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,
-# 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
-# of Public Sectors has announced that Morocco will have DST from
-# 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:
-# https://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 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
-# https://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
-
-# 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
-# wall clock time (i.e. 11pm UTC), but that's what I would assume. It has
-# 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é
-# 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
-# effect every year. It gives 03H00 as the "fall back" time of day;
-# it lacks a "spring forward" time of day; assume 2:00 XXX.
-# Wait on specifying the Ramadan exception for details about
-# start date, start time of day, end date, and end time of day XXX.
-
-# From Christophe Tropamer (2012-03-16):
-# Seen Morocco change again:
-# http://www.le2uminutes.com/actualite.php
-# "...Ă 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)
-# Pursuant to Decree No. 2-12-126 issued on 26 Jumada (I) 1433 (April 18,
-# 2012) and in accordance with the order of Mr. President of the
-# Government No. 3-47-12 issued on 24 Sha'ban (11 July 2012), the Ministry
-# of Public Service and Administration Modernization announces the return
-# of the legal time of the Kingdom (GMT) from Friday, July 20, 2012 until
-# Monday, August 20, 2012. So the time will be delayed by 60 minutes from
-# 3:00 am Friday, July 20, 2012 and will again be advanced by 60 minutes
-# August 20, 2012 from 2:00 am.
-
-# From Paul Eggert (2013-03-06):
-# Morocco's daylight-saving transitions due to Ramadan seem to be
-# 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
-# transitions would be 2013-07-07 and 2013-08-10; see:
-# http://www.maroc.ma/en/news/morocco-suspends-daylight-saving-time-july-7-aug10
-
-# From Steffen Thorsen (2013-09-28):
-# Morocco extends DST by one month, on very short notice, just 1 day
-# before it was going to end. There is a new decree (2.13.781) for
-# this, where DST from now on goes from last Sunday of March at 02:00
-# to last Sunday of October at 03:00, similar to EU rules. Official
-# source (French):
-# http://www.maroc.gov.ma/fr/actualites/lhoraire-dete-gmt1-maintenu-jusquau-27-octobre-2013
-# Another source (specifying the time for start and end in the decree):
-# http://www.lemag.ma/Heure-d-ete-au-Maroc-jusqu-au-27-octobre_a75620.html
-
-# From Sebastien Willemijns (2014-03-18):
-# http://www.afriquinfos.com/articles/2014/3/18/maroc-heure-dete-avancez-tous-horloges-247891.asp
-
-# 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 Milamber (2015-06-08):
-# (Google Translation) The hour will thus be delayed 60 minutes
-# Sunday, June 14 at 3:00, the ministry said in a statement, adding
-# that the time will be advanced again 60 minutes Sunday, July 19,
-# 2015 at 2:00. The move comes under 2.12.126 Decree of 26 Jumada I
-# 1433 (18 April 2012) and the decision of the Head of Government of
-# 16 N. 3-29-15 Chaaban 1435 (4 June 2015).
-# Source (french):
-# https://lnt.ma/le-maroc-reculera-dune-heure-le-dimanche-14-juin/
-#
-# From Milamber (2015-06-09):
-# http://www.mmsp.gov.ma/fr/actualites.aspx?id=863
-#
-# From Michael Deckers (2015-06-09):
-# [The gov.ma announcement] would (probably) make the switch on 2015-07-19 go
-# from 03:00 to 04:00 rather than from 02:00 to 03:00, as in the patch....
-# I think the patch is correct and the quoted text is wrong; the text in
-# <https://lnt.ma/le-maroc-reculera-dune-heure-le-dimanche-14-juin/> agrees
-# with the patch.
-
-# From Mohamed Essedik Najd (2018-10-26):
-# Today, a Moroccan government council approved the perpetual addition
-# of 60 minutes to the regular Moroccan timezone.
-# From Matt Johnson (2018-10-28):
-# http://www.sgg.gov.ma/Portals/1/BO/2018/BO_6720-bis_Ar.pdf
-#
-# From Maamar Abdelkader (2018-11-01):
-# We usually move clocks back the previous week end and come back to the +1
-# the week end after.... The government does not announce yet the decision
-# about this temporary change. But it s 99% sure that it will be the case,
-# as in previous years. An unofficial survey was done these days, showing
-# that 64% of asked peopke are ok for moving from +1 to +0 during Ramadan.
-# https://leconomiste.com/article/1035870-enquete-l-economiste-sunergia-64-des-marocains-plebiscitent-le-gmt-pendant-ramadan
-#
-# From Paul Eggert (2018-11-01):
-# For now, guess that Morocco will fall back at 03:00 the last Sunday
-# before Ramadan, and spring forward at 02:00 the first Sunday after
-# Ramadan, as this has been the practice since 2012. To implement this,
-# transition dates for 2019 through 2037 were determined by running the
-# following program under GNU Emacs 26.1.
-# (let ((islamic-year 1440))
-# (require 'cal-islam)
-# (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)))
-# (sunday 0))
-# (while (/= sunday (mod (setq a (1- a)) 7)))
-# (while (/= sunday (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\t-1:00\t-\n"
-# "Rule\tMorocco\t%d\tonly\t-\t%s\t%2d\t 2:00\t0\t-\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 NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Morocco 1939 only - Sep 12 0:00 1:00 -
-Rule Morocco 1939 only - Nov 19 0:00 0 -
-Rule Morocco 1940 only - Feb 25 0:00 1:00 -
-Rule Morocco 1945 only - Nov 18 0:00 0 -
-Rule Morocco 1950 only - Jun 11 0:00 1:00 -
-Rule Morocco 1950 only - Oct 29 0:00 0 -
-Rule Morocco 1967 only - Jun 3 12:00 1:00 -
-Rule Morocco 1967 only - Oct 1 0:00 0 -
-Rule Morocco 1974 only - Jun 24 0:00 1:00 -
-Rule Morocco 1974 only - Sep 1 0:00 0 -
-Rule Morocco 1976 1977 - May 1 0:00 1:00 -
-Rule Morocco 1976 only - Aug 1 0:00 0 -
-Rule Morocco 1977 only - Sep 28 0:00 0 -
-Rule Morocco 1978 only - Jun 1 0:00 1:00 -
-Rule Morocco 1978 only - Aug 4 0:00 0 -
-Rule Morocco 2008 only - Jun 1 0:00 1:00 -
-Rule Morocco 2008 only - Sep 1 0:00 0 -
-Rule Morocco 2009 only - Jun 1 0:00 1:00 -
-Rule Morocco 2009 only - Aug 21 0:00 0 -
-Rule Morocco 2010 only - May 2 0:00 1:00 -
-Rule Morocco 2010 only - Aug 8 0:00 0 -
-Rule Morocco 2011 only - Apr 3 0:00 1:00 -
-Rule Morocco 2011 only - Jul 31 0:00 0 -
-Rule Morocco 2012 2013 - Apr lastSun 2:00 1:00 -
-Rule Morocco 2012 only - Jul 20 3:00 0 -
-Rule Morocco 2012 only - Aug 20 2:00 1:00 -
-Rule Morocco 2012 only - Sep 30 3:00 0 -
-Rule Morocco 2013 only - Jul 7 3:00 0 -
-Rule Morocco 2013 only - Aug 10 2:00 1:00 -
-Rule Morocco 2013 2017 - Oct lastSun 3:00 0 -
-Rule Morocco 2014 2018 - Mar lastSun 2:00 1:00 -
-Rule Morocco 2014 only - Jun 28 3:00 0 -
-Rule Morocco 2014 only - Aug 2 2:00 1:00 -
-Rule Morocco 2015 only - Jun 14 3:00 0 -
-Rule Morocco 2015 only - Jul 19 2:00 1:00 -
-Rule Morocco 2016 only - Jun 5 3:00 0 -
-Rule Morocco 2016 only - Jul 10 2:00 1:00 -
-Rule Morocco 2017 only - May 21 3:00 0 -
-Rule Morocco 2017 only - Jul 2 2:00 1:00 -
-Rule Morocco 2018 only - May 13 3:00 0 -
-Rule Morocco 2018 only - Jun 17 2:00 1:00 -
-Rule Morocco 2019 only - May 5 3:00 0 -
-Rule Morocco 2019 only - Jun 9 2:00 1:00 -
-Rule Morocco 2020 only - Apr 19 3:00 0 -
-Rule Morocco 2020 only - May 24 2:00 1:00 -
-Rule Morocco 2021 only - Apr 11 3:00 0 -
-Rule Morocco 2021 only - May 16 2:00 1:00 -
-Rule Morocco 2022 only - Mar 27 3:00 0 -
-Rule Morocco 2022 only - May 8 2:00 1:00 -
-Rule Morocco 2023 only - Mar 19 3:00 0 -
-Rule Morocco 2023 only - Apr 23 2:00 1:00 -
-Rule Morocco 2024 only - Mar 10 3:00 0 -
-Rule Morocco 2024 only - Apr 14 2:00 1:00 -
-Rule Morocco 2025 only - Feb 23 3:00 0 -
-Rule Morocco 2025 only - Apr 6 2:00 1:00 -
-Rule Morocco 2026 only - Feb 15 3:00 0 -
-Rule Morocco 2026 only - Mar 22 2:00 1:00 -
-Rule Morocco 2027 only - Feb 7 3:00 0 -
-Rule Morocco 2027 only - Mar 14 2:00 1:00 -
-Rule Morocco 2028 only - Jan 23 3:00 0 -
-Rule Morocco 2028 only - Feb 27 2:00 1:00 -
-Rule Morocco 2029 only - Jan 14 3:00 0 -
-Rule Morocco 2029 only - Feb 18 2:00 1:00 -
-Rule Morocco 2029 only - Dec 30 3:00 0 -
-Rule Morocco 2030 only - Feb 10 2:00 1:00 -
-Rule Morocco 2030 only - Dec 22 3:00 0 -
-Rule Morocco 2031 only - Jan 26 2:00 1:00 -
-Rule Morocco 2031 only - Dec 14 3:00 0 -
-Rule Morocco 2032 only - Jan 18 2:00 1:00 -
-Rule Morocco 2032 only - Nov 28 3:00 0 -
-Rule Morocco 2033 only - Jan 9 2:00 1:00 -
-Rule Morocco 2033 only - Nov 20 3:00 0 -
-Rule Morocco 2033 only - Dec 25 2:00 1:00 -
-Rule Morocco 2034 only - Nov 5 3:00 0 -
-Rule Morocco 2034 only - Dec 17 2:00 1:00 -
-Rule Morocco 2035 only - Oct 28 3:00 0 -
-Rule Morocco 2035 only - Dec 2 2:00 1:00 -
-Rule Morocco 2036 only - Oct 19 3:00 0 -
-Rule Morocco 2036 only - Nov 23 2:00 1:00 -
-Rule Morocco 2037 only - Oct 4 3:00 0 -
-Rule Morocco 2037 only - Nov 15 2:00 1:00 -
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
- 0:00 Morocco +00/+01 1984 Mar 16
- 1:00 - +01 1986
- 0:00 Morocco +00/+01 2018 Oct 28 3:00
- 0:00 Morocco +00/+01
-
-# Western Sahara
-#
-# From Gwillim Law (2013-10-22):
-# A correspondent who is usually well informed about time zone matters
-# ... says that Western Sahara observes daylight saving time, just as
-# Morocco does.
-#
-# From Paul Eggert (2013-10-23):
-# 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 # El AaiĂșn
- -1:00 - -01 1976 Apr 14
- 0:00 Morocco +00/+01 2018 Oct 28 3:00
- 0:00 Morocco +00/+01
-
-# Mozambique
-#
-# Shanks gives 1903-03-01 for the transition to CAT.
-# Perhaps the 1911-05-26 Portuguese decree
-# https://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
-Link Africa/Maputo Africa/Blantyre # Malawi
-Link Africa/Maputo Africa/Bujumbura # Burundi
-Link Africa/Maputo Africa/Gaborone # Botswana
-Link Africa/Maputo Africa/Harare # Zimbabwe
-Link Africa/Maputo Africa/Kigali # Rwanda
-Link Africa/Maputo Africa/Lubumbashi # E Dem. Rep. of Congo
-Link Africa/Maputo Africa/Lusaka # Zambia
-
-
-# Namibia
-
-# From Arthur David Olson (2017-08-09):
-# The text of the "Namibia Time Act, 1994" is available online at
-# www.lac.org.na/laws/1994/811.pdf
-# and includes this nugget:
-# Notwithstanding the provisions of subsection (2) of section 1, the
-# first winter period after the commencement of this Act shall
-# commence at OOhOO on Monday 21 March 1994 and shall end at 02h00 on
-# Sunday 4 September 1994.
-
-# From Michael Deckers (2017-04-06):
-# ... both summer and winter time are called "standard"
-# (which differs from the use in Ireland) ...
-
-# 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
-# Forecasting Riaan van Zyl explained that the far eastern parts of
-# the country are close to 40 minutes earlier in sunrise than the rest
-# of the country.
-#
-# From Paul Eggert (2017-02-22):
-# Although the Zambezi Region (formerly known as Caprivi) informally
-# observes Botswana time, we have no details about historical practice.
-# In the meantime people there can use Africa/Gaborone.
-# See: Immanuel S. The Namibian. 2017-02-23.
-# https://www.namibian.com.na/51480/read/Time-change-divides-lawmakers
-
-# From Steffen Thorsen (2017-08-09):
-# Namibia is going to change their time zone to what is now their DST:
-# https://www.newera.com.na/2017/02/23/namibias-winter-time-might-be-repealed/
-# This video is from the government decision:
-# https://www.nbc.na/news/na-passes-namibia-time-bill-repealing-1994-namibia-time-act.8665
-# We have made the assumption so far that they will change their time zone at
-# the same time they would normally start DST, the first Sunday in September:
-# https://www.timeanddate.com/news/time/namibia-new-time-zone.html
-
-# From Paul Eggert (2017-04-09):
-# Before the change, summer and winter time were both standard time legally.
-# However in common parlance, winter time was considered to be DST. See, e.g.:
-# http://www.nbc.na/news/namibias-winter-time-could-be-scrapped.2706
-# https://zone.my.na/news/times-are-changing-in-namibia
-# https://www.newera.com.na/2017/02/23/namibias-winter-time-might-be-repealed/
-# Use plain "WAT" and "CAT" for the time zone abbreviations, to be compatible
-# with Namibia's neighbors.
-
-# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# Vanguard section, for zic and other parsers that support negative DST.
-#Rule Namibia 1994 only - Mar 21 0:00 -1:00 WAT
-#Rule Namibia 1994 2017 - Sep Sun>=1 2:00 0 CAT
-#Rule Namibia 1995 2017 - Apr Sun>=1 2:00 -1:00 WAT
-# Rearguard section, for parsers that do not support negative DST.
-Rule Namibia 1994 only - Mar 21 0:00 0 WAT
-Rule Namibia 1994 2017 - Sep Sun>=1 2:00 1:00 CAT
-Rule Namibia 1995 2017 - Apr Sun>=1 2:00 0 WAT
-# End of rearguard section.
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
- 1:30 - +0130 1903 Mar
- 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
-# Vanguard section, for zic and other parsers that support negative DST.
-# 2:00 Namibia %s
-# Rearguard section, for parsers that do not support negative DST.
- 2:00 - CAT 1994 Mar 21 0:00
-# From Paul Eggert (2017-04-07):
-# The official date of the 2017 rule change was 2017-10-24. See:
-# http://www.lac.org.na/laws/annoSTAT/Namibian%20Time%20Act%209%20of%202017.pdf
- 1:00 Namibia %s 2017 Oct 24
- 2:00 - CAT
-# End of rearguard section.
-
-# Niger
-# 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
-
-# RĂ©union
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
- 4:00 - +04
-#
-# 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
-# Ăles Ăparses (<http://www.outre-mer.gouv.fr/domtom/ile.htm>, 1997-07-22,
-# in French; no longer available as of 1999-08-17).
-# We have no info about their time zone histories.
-#
-# Bassas da India - uninhabited
-# Europa Island - inhabited from 1905 to 1910 by two families
-# Glorioso Is - inhabited until at least 1958
-# Juan de Nova - uninhabited
-# Tromelin - inhabited until at least 1958
-
-# Rwanda
-# See Africa/Maputo.
-
-# St Helena
-# 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, say the USNO (1995-12-21) and the CIA
-# Gough (scientific station since 1955; sealers wintered previously):
-# on GMT, says the CIA
-# Inaccessible, Nightingale: uninhabited
-
-# SĂŁo TomĂ© and PrĂncipe
-
-# See Europe/Lisbon for info about the 1912 transition.
-
-# From Steffen Thorsen (2018-01-08):
-# Multiple sources tell that São Tomé changed from UTC to UTC+1 as
-# they entered the year 2018.
-# From Michael Deckers (2018-01-08):
-# the switch is from 01:00 to 02:00 ... [Decree No. 25/2017]
-# http://www.mnec.gov.st/index.php/publicacoes/documentos/file/90-decreto-lei-n-25-2017
-
-# From Vadim Nasardinov (2018-12-29):
-# SĂŁo TomĂ© and PrĂncipe is about to do the following on Jan 1, 2019:
-# https://www.stp-press.st/2018/12/05/governo-jesus-ja-decidiu-repor-hora-legal-sao-tomense/
-#
-# From Michael Deckers (2018-12-30):
-# https://www.legis-palop.org/download.jsp?idFile=102818
-# ... [The legal time of the country, which coincides with universal
-# coordinated time, will be restituted at 2 o'clock on day 1 of January, 2019.]
-
-Zone Africa/Sao_Tome 0:26:56 - LMT 1884
- -0:36:45 - LMT 1912 Jan 1 00:00u # Lisbon MT
- 0:00 - GMT 2018 Jan 1 01:00
- 1:00 - WAT 2019 Jan 1 02:00
- 0:00 - GMT
-
-# Senegal
-# See Africa/Abidjan.
-
-# Seychelles
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
- 4:00 - +04
-# From Paul Eggert (2001-05-30):
-# Aldabra, Farquhar, and Desroches, originally dependencies of the
-# Seychelles, were transferred to the British Indian Ocean Territory
-# in 1965 and returned to Seychelles control in 1976. We don't know
-# whether this affected their time zone, so omit this for now.
-# Possibly the islands were uninhabited.
-
-# Sierra Leone
-# See Africa/Abidjan.
-
-# Somalia
-# See Africa/Nairobi.
-
-# South Africa
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule SA 1942 1943 - Sep Sun>=15 2:00 1:00 -
-Rule SA 1943 1944 - Mar Sun>=15 2:00 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Johannesburg 1:52:00 - LMT 1892 Feb 8
- 1:30 - SAST 1903 Mar
- 2:00 SA SAST
-Link Africa/Johannesburg Africa/Maseru # Lesotho
-Link Africa/Johannesburg Africa/Mbabane # Eswatini
-#
-# Marion and Prince Edward Is
-# scientific station since 1947
-# no information
-
-# Sudan
-
-# From <http://www.sunanews.net/sn13jane.html>
-# Sudan News Agency (2000-01-13),
-# also reported by Michaël De Beukelaer-Dossche via Steffen Thorsen:
-# Clocks will be moved ahead for 60 minutes all over the Sudan as of noon
-# Saturday.... This was announced Thursday by Caretaker State Minister for
-# Manpower Abdul-Rahman Nur-Eddin.
-
-# From Ahmed Atyya, National Telecommunications Corp. (NTC), Sudan (2017-10-17):
-# ... the Republic of Sudan is going to change the time zone from (GMT+3:00)
-# to (GMT+ 2:00) starting from Wednesday 1 November 2017.
-#
-# From Paul Eggert (2017-10-18):
-# A scanned copy (in Arabic) of Cabinet Resolution No. 352 for the
-# year 2017 can be found as an attachment in email today from Yahia
-# Abdalla of NTC, archived at:
-# https://mm.icann.org/pipermail/tz/2017-October/025333.html
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Sudan 1970 only - May 1 0:00 1:00 S
-Rule Sudan 1970 1985 - Oct 15 0:00 0 -
-Rule Sudan 1971 only - Apr 30 0:00 1:00 S
-Rule Sudan 1972 1985 - Apr lastSun 0:00 1:00 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Khartoum 2:10:08 - LMT 1931
- 2:00 Sudan CA%sT 2000 Jan 15 12:00
- 3:00 - EAT 2017 Nov 1
- 2:00 - CAT
-
-# South Sudan
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Juba 2:06:28 - LMT 1931
- 2:00 Sudan CA%sT 2000 Jan 15 12:00
- 3:00 - EAT
-
-# Tanzania
-# See Africa/Nairobi.
-
-# Togo
-# See Africa/Abidjan.
-
-# Tunisia
-
-# From Gwillim Law (2005-04-30):
-# My correspondent, Risto NykÀnen, has alerted me to another adoption of DST,
-# this time in Tunisia. According to Yahoo France News
-# <http://fr.news.yahoo.com/050426/5/4dumk.html>, in a story attributed to AP
-# and dated 2005-04-26, "Tunisia has decided to advance its official time by
-# one hour, starting on Sunday, May 1. Henceforth, Tunisian time will be
-# UTC+2 instead of UTC+1. The change will take place at 23:00 UTC next
-# Saturday." (My translation)
-#
-# From Oscar van Vlijmen (2005-05-02):
-# 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.
-#
-# From Atef Loukil (2006-03-28):
-# The daylight saving time will be the same each year:
-# Beginning : the last Sunday of March at 02:00
-# Ending : the last Sunday of October at 03:00 ...
-# http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=1188&Itemid=50
-
-# 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
-# https://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:
-# https://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
-#
-# 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-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
-#
-# (translation):
-# "The Tunisian government has decided to abandon DST, which was scheduled on
-# Sunday...
-# Tunisian authorities had suspended the DST for the first time last year also
-# 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
-# http://www.worldtimezone.com/dst_news/dst_news_tunis02.html
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Tunisia 1939 only - Apr 15 23:00s 1:00 S
-Rule Tunisia 1939 only - Nov 18 23:00s 0 -
-Rule Tunisia 1940 only - Feb 25 23:00s 1:00 S
-Rule Tunisia 1941 only - Oct 6 0:00 0 -
-Rule Tunisia 1942 only - Mar 9 0:00 1:00 S
-Rule Tunisia 1942 only - Nov 2 3:00 0 -
-Rule Tunisia 1943 only - Mar 29 2:00 1:00 S
-Rule Tunisia 1943 only - Apr 17 2:00 0 -
-Rule Tunisia 1943 only - Apr 25 2:00 1:00 S
-Rule Tunisia 1943 only - Oct 4 2:00 0 -
-Rule Tunisia 1944 1945 - Apr Mon>=1 2:00 1:00 S
-Rule Tunisia 1944 only - Oct 8 0:00 0 -
-Rule Tunisia 1945 only - Sep 16 0:00 0 -
-Rule Tunisia 1977 only - Apr 30 0:00s 1:00 S
-Rule Tunisia 1977 only - Sep 24 0:00s 0 -
-Rule Tunisia 1978 only - May 1 0:00s 1:00 S
-Rule Tunisia 1978 only - Oct 1 0:00s 0 -
-Rule Tunisia 1988 only - Jun 1 0:00s 1:00 S
-Rule Tunisia 1988 1990 - Sep lastSun 0:00s 0 -
-Rule Tunisia 1989 only - Mar 26 0:00s 1:00 S
-Rule Tunisia 1990 only - May 1 0:00s 1:00 S
-Rule Tunisia 2005 only - May 1 0:00s 1:00 S
-Rule Tunisia 2005 only - Sep 30 1:00s 0 -
-Rule Tunisia 2006 2008 - Mar lastSun 2:00s 1:00 S
-Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 -
-
-# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
-# more precise 0:09:21.
-# Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11.
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Tunis 0:40:44 - LMT 1881 May 12
- 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
- 1:00 Tunisia CE%sT
-
-# Uganda
-# See Africa/Nairobi.
-
-# Zambia
-# Zimbabwe
-# See Africa/Maputo.
--- a/test/jdk/sun/util/calendar/zi/tzdata/antarctica Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,364 +0,0 @@
-#
-# 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.
-#
-# tzdb data for Antarctica and environs
-
-# 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.
-
-# FORMAT is '-00' and GMTOFF is 0 for locations while uninhabited.
-
-# Argentina - year-round bases
-# Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
-# 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 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
-# https://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html
-# (1999-09-30) that they're UT +05, with no DST;
-# presumably this is when they have visitors.
-#
-# year-round bases
-# Casey, Bailey Peninsula, -6617+11032, since 1969
-# Davis, Vestfold Hills, -6835+07759, since 1957-01-13
-# (except 1964-11 - 1969-02)
-# Mawson, Holme Bay, -6736+06253, since 1954-02-13
-
-# From Steffen Thorsen (2009-03-11):
-# Three Australian stations in Antarctica have changed their time zone:
-# Casey moved from UTC+8 to UTC+11
-# Davis moved from UTC+7 to UTC+5
-# Mawson moved from UTC+6 to UTC+5
-# 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:
-# https://www.timeanddate.com/news/time/antarctica-new-times.html
-
-# From Steffen Thorsen (2010-03-10):
-# We got these changes from the Australian Antarctic Division: ...
-#
-# - Casey station reverted to its normal time of UTC+8 on 5 March 2010.
-# The change to UTC+11 is being considered as a regular summer thing but
-# has not been decided yet.
-#
-# - Davis station will revert to its normal time of UTC+7 at 10 March 2010
-# 20:00 UTC.
-#
-# - Mawson station stays on UTC+5.
-#
-# Background:
-# https://www.timeanddate.com/news/time/antartica-time-changes-2010.html
-
-# From Steffen Thorsen (2016-10-28):
-# Australian Antarctica Division informed us that Casey changed time
-# zone to UTC+11 in "the morning of 22nd October 2016".
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Antarctica/Casey 0 - -00 1969
- 8:00 - +08 2009 Oct 18 2:00
- 11:00 - +11 2010 Mar 5 2:00
- 8:00 - +08 2011 Oct 28 2:00
- 11:00 - +11 2012 Feb 21 17:00u
- 8:00 - +08 2016 Oct 22
- 11:00 - +11 2018 Mar 11 4:00
- 8:00 - +08
-Zone Antarctica/Davis 0 - -00 1957 Jan 13
- 7:00 - +07 1964 Nov
- 0 - -00 1969 Feb
- 7:00 - +07 2009 Oct 18 2:00
- 5:00 - +05 2010 Mar 10 20:00u
- 7:00 - +07 2011 Oct 28 2:00
- 5:00 - +05 2012 Feb 21 20:00u
- 7:00 - +07
-Zone Antarctica/Mawson 0 - -00 1954 Feb 13
- 6:00 - +06 2009 Oct 18 2:00
- 5:00 - +05
-# 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
-# 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
-# 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 employ Region of Magallanes time; use
-# TZ='America/Punta_Arenas'.
-
-# China - year-round bases
-# 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 (also see "France & Italy")
-#
-# From Antoine Leca (1997-01-20):
-# 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 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
-#
-# 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 - -00 1950 # Port-aux-Français
- 5:00 - +05
-#
-# year-round base in the main continent
-# Dumont d'Urville, Ăle des PĂ©trels, -6640+14001, since 1956-11
-# <https://en.wikipedia.org/wiki/Dumont_d'Urville_Station> (2005-12-05)
-#
-# Another base at Port-Martin, 50km east, began operation in 1947.
-# It was destroyed by fire on 1952-01-14.
-#
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Antarctica/DumontDUrville 0 - -00 1947
- 10:00 - +10 1952 Jan 14
- 0 - -00 1956 Nov
- 10:00 - +10
-
-# France & Italy - year-round base
-# Concordia, -750600+1232000, since 2005
-
-# Germany - year-round base
-# Neumayer III, -704080-0081602, since 2009
-
-# 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
-# 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.
-#
-# Syowa station, which is the first antarctic station of Japan,
-# was established on 1957-01-29. Since Syowa station is still the main
-# station of Japan, it's appropriate for the principal location.
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Antarctica/Syowa 0 - -00 1957 Jan 29
- 3:00 - +03
-# 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
-# Balleny Islands (never inhabited)
-# Scott Island (never inhabited)
-#
-# year-round base
-# Scott Base, Ross Island, since 1957-01.
-# See Pacific/Auckland.
-
-# Norway - territories
-# Bouvet (never inhabited)
-#
-# claims
-# Peter I Island (never inhabited)
-#
-# year-round base
-# Troll, Queen Maud Land, -720041+0023206, since 2005-02-12
-#
-# From Paul-Inge Flakstad (2014-03-10):
-# I recently had a long dialog about this with the developer of timegenie.com.
-# In the absence of specific dates, he decided to choose some likely ones:
-# GMT +1 - From March 1 to the last Sunday in March
-# GMT +2 - From the last Sunday in March until the last Sunday in October
-# GMT +1 - From the last Sunday in October until November 7
-# GMT +0 - From November 7 until March 1
-# The dates for switching to and from UTC+0 will probably not be absolutely
-# correct, but they should be quite close to the actual dates.
-#
-# From Paul Eggert (2014-03-21):
-# The CET-switching Troll rules require zic from tz 2014b or later, so as
-# suggested by Bengt-Inge Larsson comment them out for now, and approximate
-# with only UTC and CEST. Uncomment them when 2014b is more prevalent.
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-#Rule Troll 2005 max - Mar 1 1:00u 1:00 +01
-Rule Troll 2005 max - Mar lastSun 1:00u 2:00 +02
-#Rule Troll 2005 max - Oct lastSun 1:00u 1:00 +01
-#Rule Troll 2004 max - Nov 7 1:00u 0:00 +00
-# Remove the following line when uncommenting the above '#Rule' lines.
-Rule Troll 2004 max - Oct lastSun 1:00u 0:00 +00
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Antarctica/Troll 0 - -00 2005 Feb 12
- 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
-# Molodezhnaya, Alasheyev Bay, -6740+04551,
-# year-round from 1962-02 to 1999-07-01
-# Novolazarevskaya, Queen Maud Land, -7046+01150,
-# year-round from 1960/61 to 1992
-
-# Vostok, since 1957-12-16, temporarily closed 1994-02/1994-11
-# 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.
-#
-# From Lee Hotz (2001-03-08):
-# I queried the folks at Columbia who spent the summer at Vostok and this is
-# what they had to say about time there:
-# "in the US Camp (East Camp) we have been on New Zealand (McMurdo)
-# time, which is 12 hours ahead of GMT. The Russian Station Vostok was
-# 6 hours behind that (although only 2 miles away, i.e. 6 hours ahead
-# of GMT). This is a time zone I think two hours east of Moscow. The
-# natural time zone is in between the two: 8 hours ahead of GMT."
-#
-# 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 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
-# happened to be during their visit. So we still don't really know what time
-# it is at Vostok. But we'll guess +06.
-#
-Zone Antarctica/Vostok 0 - -00 1957 Dec 16
- 6:00 - +06
-
-# S Africa - year-round bases
-# Marion Island, -4653+03752
-# SANAE IV, Vesleskarvet, Queen Maud Land, -714022-0025026, since 1997
-
-# Ukraine - year-round base
-# Vernadsky (formerly Faraday), Galindez Island, -651445-0641526, since 1954
-
-# United Kingdom
-#
-# British Antarctic Territories (BAT) claims
-# South Orkney Islands
-# scientific station from 1903
-# whaling station at Signy I 1920/1926
-# South Shetland Islands
-#
-# year-round bases
-# Bird Island, South Georgia, -5400-03803, since 1983
-# Deception Island, -6259-06034, whaling station 1912/1931,
-# scientific station 1943/1967,
-# previously sealers and a scientific expedition wintered by accident,
-# and a garrison was deployed briefly
-# Halley, Coates Land, -7535-02604, since 1956-01-06
-# Halley is on a moving ice shelf and is periodically relocated
-# so that it is never more than 10km from its nominal location.
-# Rothera, Adelaide Island, -6734-6808, since 1976-12-01
-#
-# From Paul Eggert (2002-10-22)
-# <http://webexhibits.org/daylightsaving/g.html> says Rothera is -03 all year.
-#
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Antarctica/Rothera 0 - -00 1976 Dec 1
- -3:00 - -03
-
-# Uruguay - year round base
-# Artigas, King George Island, -621104-0585107
-
-# USA - year-round bases
-#
-# Palmer, Anvers Island, since 1965 (moved 2 miles in 1968)
-# See 'southamerica' for Antarctica/Palmer, since it uses South American DST.
-#
-# McMurdo Station, Ross Island, since 1955-12
-# Amundsen-Scott South Pole Station, continuously occupied since 1956-11-20
-#
-# From Chris Carrier (1996-06-27):
-# Siple, the first commander of the South Pole station,
-# stated that he would have liked to have kept GMT at the station,
-# 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.)
-#
-# From Susan Smith
-# http://www.cybertours.com/whs/pole10.html
-# (1995-11-13 16:24:56 +1300, no longer available):
-# We use the same time as McMurdo does.
-# And they use the same time as Christchurch, NZ does....
-# One last quirk about South Pole time.
-# All the electric clocks are usually wrong.
-# Something about the generators running at 60.1hertz or something
-# makes all of the clocks run fast. So every couple of days,
-# we have to go around and set them back 5 minutes or so.
-# Maybe if we let them run fast all of the time, we'd get to leave here sooner!!
-#
-# See 'australasia' for Antarctica/McMurdo.
--- a/test/jdk/sun/util/calendar/zi/tzdata/asia Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3657 +0,0 @@
-#
-# 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.
-#
-# tzdb data for Asia and environs
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# 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). For more, please see
-# the file CONTRIBUTING in the tz distribution.
-
-# From Paul Eggert (2018-06-19):
-#
-# Unless otherwise specified, the source for data through 1990 is:
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
-# Unfortunately this book contains many errors and cites no sources.
-#
-# Many years ago Gwillim Law wrote that a good source
-# for time zone data was the International Air Transport
-# Association's Standard Schedules Information Manual (IATA SSIM),
-# published semiannually. Law sent in several helpful summaries
-# of the IATA's data after 1990. Except where otherwise noted,
-# IATA SSIM is the source for entries after 1990.
-#
-# Another source occasionally used is Edward W. Whitman, World Time Differences,
-# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
-# I found in the UCLA library.
-#
-# For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
-# https://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).
-#
-# The following alphabetic abbreviations appear in these tables
-# (corrections are welcome):
-# std dst
-# LMT Local Mean Time
-# 2:00 EET EEST Eastern European Time
-# 2:00 IST IDT Israel
-# 5:30 IST India
-# 7:00 WIB west Indonesia (Waktu Indonesia Barat)
-# 8:00 WITA central Indonesia (Waktu Indonesia Tengah)
-# 8:00 CST China
-# 8:00 PST PDT* Philippine Standard Time
-# 8:30 KST KDT Korea when at +0830
-# 9:00 WIT east Indonesia (Waktu Indonesia Timur)
-# 9:00 JST JDT Japan
-# 9:00 KST KDT Korea when at +09
-# 9:30 ACST Australian Central Standard Time
-# *I invented the abbreviation PDT; see "Philippines" below.
-# Otherwise, these tables typically use numeric abbreviations like +03
-# and +0330 for integer hour and minute UT offsets. Although earlier
-# editions invented alphabetic time zone abbreviations for every
-# offset, this did not reflect common practice.
-#
-# 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
-# additional information from Tom Yap, Sun Microsystems Intercontinental
-# Technical Support (including a page from the Official Airline Guide -
-# Worldwide Edition).
-
-###############################################################################
-
-# These rules are stolen from the 'europe' file.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S
-Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 -
-Rule EUAsia 1996 max - Oct lastSun 1:00u 0 -
-Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 -
-Rule E-EurAsia 1979 1995 - Sep lastSun 0:00 0 -
-Rule E-EurAsia 1996 max - Oct lastSun 0:00 0 -
-Rule RussiaAsia 1981 1984 - Apr 1 0:00 1:00 -
-Rule RussiaAsia 1981 1983 - Oct 1 0:00 0 -
-Rule RussiaAsia 1984 1995 - Sep lastSun 2:00s 0 -
-Rule RussiaAsia 1985 2010 - Mar lastSun 2:00s 1:00 -
-Rule RussiaAsia 1996 2010 - Oct lastSun 2:00s 0 -
-
-# Afghanistan
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Kabul 4:36:48 - LMT 1890
- 4:00 - +04 1945
- 4:30 - +0430
-
-# Armenia
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger have Yerevan switching to 3:00 (with Russian DST)
-# in spring 1991, then to 4:00 with no DST in fall 1995, then
-# readopting Russian DST in 1997. Go with Shanks & Pottenger, even
-# when they disagree with others. Edgar Der-Danieliantz
-# reported (1996-05-04) that Yerevan probably wouldn't use DST
-# in 1996, though it did use DST in 1995. IATA SSIM (1991/1998) reports that
-# Armenia switched from 3:00 to 4:00 in 1998 and observed DST after 1991,
-# but started switching at 3:00s in 1998.
-
-# From Arthur David Olson (2011-06-15):
-# While Russia abandoned DST in 2011, Armenia may choose to
-# follow Russia's "old" rules.
-
-# From Alexander Krivenyshev (2012-02-10):
-# According to News Armenia, on Feb 9, 2012,
-# http://newsarmenia.ru/society/20120209/42609695.html
-#
-# The Armenia National Assembly adopted final reading of Amendments to the
-# Law "On procedure of calculation time on the territory of the Republic of
-# Armenia" according to which Armenia [is] abolishing Daylight Saving Time.
-# or
-# (brief)
-# http://www.worldtimezone.com/dst_news/dst_news_armenia03.html
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 -
-Rule Armenia 2011 only - Oct lastSun 2:00s 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
- 3:00 - +03 1957 Mar
- 4:00 RussiaAsia +04/+05 1991 Mar 31 2:00s
- 3:00 RussiaAsia +03/+04 1995 Sep 24 2:00s
- 4:00 - +04 1997
- 4:00 RussiaAsia +04/+05 2011
- 4:00 Armenia +04/+05
-
-# Azerbaijan
-
-# From Rustam Aliyev of the Azerbaijan Internet Forum (2005-10-23):
-# According to the resolution of Cabinet of Ministers, 1997
-# From Paul Eggert (2015-09-17): It was Resolution No. 21 (1997-03-17).
-# http://code.az/files/daylight_res.pdf
-
-# From Steffen Thorsen (2016-03-17):
-# ... the Azerbaijani Cabinet of Ministers has cancelled switching to
-# daylight saving time....
-# https://www.azernews.az/azerbaijan/94137.html
-# http://vestnikkavkaza.net/news/Azerbaijani-Cabinet-of-Ministers-cancels-daylight-saving-time.html
-# http://en.apa.az/xeber_azerbaijan_abolishes_daylight_savings_ti_240862.html
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 -
-Rule Azer 1997 2015 - Oct lastSun 5:00 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Baku 3:19:24 - LMT 1924 May 2
- 3:00 - +03 1957 Mar
- 4:00 RussiaAsia +04/+05 1991 Mar 31 2:00s
- 3:00 RussiaAsia +03/+04 1992 Sep lastSun 2:00s
- 4:00 - +04 1996
- 4:00 EUAsia +04/+05 1997
- 4:00 Azer +04/+05
-
-# Bahrain
-# See Asia/Qatar.
-
-# Bangladesh
-# From Alexander Krivenyshev (2009-05-13):
-# According to newspaper Asian Tribune (May 6, 2009) Bangladesh may introduce
-# 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
-# http://www.worldtimezone.com/dst_news/dst_news_bangladesh02.html
-#
-# "... Bangladesh government has decided to switch daylight saving time from
-# June
-# 16 till September 30 in a bid to ensure maximum use of daylight to cope with
-# crippling power crisis. "
-#
-# The switch will remain in effect from June 16 to Sept 30 (2009) but if
-# implemented the next year, it will come in force from April 1, 2010
-
-# From Steffen Thorsen (2009-06-02):
-# They have finally decided now, but changed the start date to midnight between
-# the 19th and 20th, and they have not set the end date yet.
-#
-# Some sources:
-# https://in.reuters.com/article/southAsiaNews/idINIndia-40017620090601
-# http://bdnews24.com/details.php?id=85889&cid=2
-#
-# Our wrap-up:
-# https://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
-# time is mentioned as Jun 19 2009, 23:00 from BTRC (Bangladesh
-# Telecommunication Regulatory Commission).
-#
-# No DST end date has been announced yet.
-
-# From Alexander Krivenyshev (2009-09-25):
-# Bangladesh won't go back to Standard Time from October 1, 2009,
-# instead it will continue DST measure till the cabinet makes a fresh decision.
-#
-# 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
-# http://www.worldtimezone.com/dst_news/dst_news_bangladesh04.html
-
-# From Steffen Thorsen (2009-10-13):
-# IANS (Indo-Asian News Service) now reports:
-# Bangladesh has decided that the clock advanced by an hour to make
-# maximum use of daylight hours as an energy saving measure would
-# "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
-# 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,
-# 2010 midnight. The decision came at a cabinet meeting at the Prime
-# Minister's Office last night..."
-
-# 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
-# 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 -
-Rule Dhaka 2009 only - Dec 31 24:00 0 -
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Dhaka 6:01:40 - LMT 1890
- 5:53:20 - HMT 1941 Oct # Howrah Mean Time?
- 6:30 - +0630 1942 May 15
- 5:30 - +0530 1942 Sep
- 6:30 - +0630 1951 Sep 30
- 6:00 - +06 2009
- 6:00 Dhaka +06/+07
-
-# Bhutan
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Thimphu 5:58:36 - LMT 1947 Aug 15 # or Thimbu
- 5:30 - +0530 1987 Oct
- 6:00 - +06
-
-# British Indian Ocean Territory
-# Whitman and the 1995 CIA time zone map say 5:00, but the
-# 1997 and later maps say 6:00. Assume the switch occurred in 1996.
-# We have no information as to when standard time was introduced;
-# assume it occurred in 1907, the same year as Mauritius (which
-# then contained the Chagos Archipelago).
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Chagos 4:49:40 - LMT 1907
- 5:00 - +05 1996
- 6:00 - +06
-
-# Brunei
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan
- 7:30 - +0730 1933
- 8:00 - +08
-
-# Burma / Myanmar
-
-# Milne says 6:24:40 was the meridian of the time ball observatory at Rangoon.
-
-# From Paul Eggert (2017-04-20):
-# Page 27 of Reed & Low (cited for Asia/Kolkata) says "Rangoon local time is
-# used upon the railways and telegraphs of Burma, and is 6h. 24m. 47s. ahead
-# of Greenwich." This refers to the period before Burma's transition to +0630,
-# a transition for which Shanks is the only source.
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Yangon 6:24:47 - LMT 1880 # or Rangoon
- 6:24:47 - RMT 1920 # Rangoon local time
- 6:30 - +0630 1942 May
- 9:00 - +09 1945 May 3
- 6:30 - +0630
-
-# Cambodia
-# See Asia/Bangkok.
-
-
-# China
-
-# From Paul Eggert (2018-10-02):
-# The following comes from Table 1 of:
-# Li Yu. Research on the daylight saving movement in 1940s Shanghai.
-# Nanjing Journal of Social Sciences. 2014;(2):144-50.
-# http://oversea.cnki.net/kns55/detail.aspx?dbname=CJFD2014&filename=NJSH201402020
-# The table lists dates only; I am guessing 00:00 and 24:00 transition times.
-# Also, the table lists the planned end of DST in 1949, but the corresponding
-# zone line cuts this off on May 28, when the Communists took power.
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Shang 1940 only - Jun 1 0:00 1:00 D
-Rule Shang 1940 only - Oct 12 24:00 0 S
-Rule Shang 1941 only - Mar 15 0:00 1:00 D
-Rule Shang 1941 only - Nov 1 24:00 0 S
-Rule Shang 1942 only - Jan 31 0:00 1:00 D
-Rule Shang 1945 only - Sep 1 24:00 0 S
-Rule Shang 1946 only - May 15 0:00 1:00 D
-Rule Shang 1946 only - Sep 30 24:00 0 S
-Rule Shang 1947 only - Apr 15 0:00 1:00 D
-Rule Shang 1947 only - Oct 31 24:00 0 S
-Rule Shang 1948 1949 - May 1 0:00 1:00 D
-Rule Shang 1948 1949 - Sep 30 24:00 0 S #plan
-
-# From Guy Harris:
-# People's Republic of China. Yes, they really have only one time zone.
-
-# 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 (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
-# DST start/end dates for Peking's time zone (info from AP):
-#
-# 1986 May 4 - Sept 14
-# 1987 mid-April - ??
-
-# From U. S. Naval Observatory (1989-01-19):
-# CHINA 8 H AHEAD OF UTC ALL OF CHINA, INCL TAIWAN
-# CHINA 9 H AHEAD OF UTC APR 17 - SEP 10
-
-# 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 P Chan (2018-05-07):
-# The start and end time of DST in China [from 1986 on] should be 2:00
-# (i.e. 2:00 to 3:00 at the start and 2:00 to 1:00 at the end)....
-# Government notices about summer time:
-#
-# 1986-04-12 http://www.zj.gov.cn/attach/zfgb/198608.pdf p.21-22
-# (To establish summer time from 1986. On 4 May, set the clocks ahead one hour
-# at 2 am. On 14 September, set the clocks backward one hour at 2 am.)
-#
-# 1987-02-15 http://www.gov.cn/gongbao/shuju/1987/gwyb198703.pdf p.114
-# (Summer time in 1987 to start from 12 April until 13 September)
-#
-# 1987-09-09 http://www.gov.cn/gongbao/shuju/1987/gwyb198721.pdf p.709
-# (From 1988, summer time to start from 2 am of the first Sunday of mid-April
-# until 2 am of the first Sunday of mid-September)
-#
-# 1992-03-03 http://www.gov.cn/gongbao/shuju/1992/gwyb199205.pdf p.152
-# (To suspend summer time from 1992)
-#
-# The first page of People's Daily on 12 April 1988 stating that summer time
-# to begin on 17 April.
-# http://data.people.com.cn/pic/101p/1988/04/1988041201.jpg
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule PRC 1986 only - May 4 2:00 1:00 D
-Rule PRC 1986 1991 - Sep Sun>=11 2:00 0 S
-Rule PRC 1987 1991 - Apr Sun>=11 2:00 1:00 D
-
-# From Anthony Fok (2001-12-20):
-# BTW, I did some research on-line and found some info regarding these five
-# historic timezones from some Taiwan websites. And yes, there are official
-# Chinese names for these locales (before 1949).
-#
-# From Jesper NĂžrgaard Welen (2006-07-14):
-# I have investigated the timezones around 1970 on the
-# https://www.astro.com/atlas site [with provinces and county
-# boundaries summarized below].... A few other exceptions were two
-# counties on the Sichuan side of the Xizang-Sichuan border,
-# counties Dege and Baiyu which lies on the Sichuan side and are
-# therefore supposed to be GMT+7, Xizang region being GMT+6, but Dege
-# county is GMT+8 according to astro.com while Baiyu county is GMT+6
-# (could be true), for the moment I am assuming that those two
-# counties are mistakes in the astro.com data.
-
-# From Paul Eggert (2017-01-05):
-# Alois Treindl kindly sent me translations of the following two sources:
-#
-# (1)
-# Guo Qing-sheng (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, äžćœç§æćČæ). 2003;24(1):5-9.
-# http://oversea.cnki.net/kcms/detail/detail.aspx?filename=ZGKS200301000&dbname=CJFD2003
-# It gives evidence that at the beginning of the PRC, Beijing time was
-# officially apparent solar time! However, Guo also says that the
-# evidence is dubious, as the relevant institute of astronomy had not
-# been taken over by the PRC yet. It's plausible that apparent solar
-# time was announced but never implemented, and that people continued
-# to use UT+8. As the Shanghai radio station (and I presume the
-# observatory) was still under control of French missionaries, it
-# could well have ignored any such mandate.
-#
-# (2)
-# Guo Qing-sheng (Shaanxi Astronomical Observatory, CAS, Xi'an 710600, China)
-# A Study on the Standard Time Changes for the Past 100 Years in China
-# [undated and unknown publication location]
-# It says several things:
-# * The Qing dynasty used local apparent solar time throughout China.
-# * The Republic of China instituted Beijing mean solar time effective
-# the official calendar book of 1914.
-# * The French Concession in Shanghai set up signal stations in
-# French docks in the 1890s, controlled by Xujiahui (Zikawei)
-# Observatory and set to local mean time.
-# * "From the end of the 19th century" it changed to UT+8.
-# * Chinese Customs (by then reduced to a tool of foreign powers)
-# eventually standardized on this time for all ports, and it
-# became used by railways as well.
-# * In 1918 the Central Observatory proposed dividing China into
-# five time zones (see below for details). This caught on
-# at first only in coastal areas observing UT+8.
-# * During WWII all of China was in theory was at UT+7. In practice
-# this was ignored in the west, and I presume was ignored in
-# Japanese-occupied territory.
-# * Japanese-occupied Manchuria was at UT+9, i.e., Japan time.
-# * The five-zone plan was resurrected after WWII and officially put into
-# place (with some modifications) in March 1948. It's not clear
-# how well it was observed in areas under Nationalist control.
-# * The People's Liberation Army used UT+8 during the civil war.
-#
-# An AP article "Shanghai Internat'l Area Little Changed" in the
-# Lewiston (ME) Daily Sun (1939-05-29), p 17, said "Even the time is
-# different - the occupied districts going by Tokyo time, an hour
-# ahead of that prevailing in the rest of Shanghai." Guess that the
-# Xujiahui Observatory was under French control and stuck with UT +08.
-#
-# 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 +08:30
-# Now part of Asia/Shanghai; its pre-1970 times are not recorded here.
-# Heilongjiang (except Mohe county), Jilin
-#
-# Zhongyuan Time ("Central plain Time") UT +08
-# Now part of Asia/Shanghai.
-# most of China
-# Milne gives 8:05:43.2 for Xujiahui Observatory time; round to nearest.
-# Guo says Shanghai switched to UT +08 "from the end of the 19th century".
-#
-# Long-shu Time (probably as Long and Shu were two names of the area) UT +07
-# Now part of Asia/Shanghai; its pre-1970 times are not recorded here.
-# Guangxi, Guizhou, Hainan, Ningxia, Sichuan, Shaanxi, and Yunnan;
-# most of Gansu; west Inner Mongolia; east Qinghai; and the Guangdong
-# counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing,
-# Yangchun, Yangjiang, Yu'nan, and Yunfu.
-#
-# Xin-zang Time ("Xinjiang-Tibet Time") UT +06
-# This region is now part of either Asia/Urumqi or Asia/Shanghai with
-# current boundaries uncertain; times before 1970 for areas that
-# disagree with ĂrĂŒmqi or Shanghai are not recorded here.
-# 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 Ă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.
-#
-# Kunlun Time UT +05:30
-# This region is now in the same status as Xin-zang Time (see above).
-# 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,
-# and Yarkand.
-
-# From Luther Ma (2009-10-17):
-# Almost all (>99.9%) ethnic Chinese (properly ethnic Han) living in
-# Xinjiang use Chinese Standard Time. Some are aware of Xinjiang time,
-# but have no need of it. All planes, trains, and schools function on
-# what is called "Beijing time." When Han make an appointment in Chinese
-# they implicitly use Beijing time.
-#
-# On the other hand, ethnic Uyghurs, who make up about half the
-# population of Xinjiang, typically use "Xinjiang time" which is two
-# hours behind Beijing time, or UT +06. The government of the Xinjiang
-# Uyghur Autonomous Region, (XAUR, or just Xinjiang for short) as well as
-# local governments such as the ĂrĂŒmqi city government use both times in
-# publications, referring to what is popularly called Xinjiang time as
-# "Ă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
-# widespread use, however, because so extremely few of them are fluent in
-# Uyghur, comparable to the number of Anglo-Americans fluent in Navajo.)
-#
-# (...As with the rest of China there was a brief interval ending in 1990
-# or 1991 when summer time was in use. The confusion was severe, with
-# 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.)
-
-# From Luther Ma (2009-11-19):
-# With the risk of being redundant to previous answers these are the most common
-# English "transliterations" (w/o using non-English symbols):
-#
-# 1. Wulumuqi...
-# 2. Kashi...
-# 3. Urumqi...
-# 4. Kashgar...
-# ...
-# 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.
-#
-# 6. Likewise for Kashgar and the rest of south Xinjiang I don't know of any
-# start date for Xinjiang time.
-#
-# Without having access to local historical records, nor the ability to legally
-# publish them, I would go with October 1, 1949, when Xinjiang became the Uyghur
-# Autonomous Region under the PRC. (Before that Uyghurs, of course, would also
-# not be using Beijing time, but some local time.)
-
-# From David Cochrane (2014-03-26):
-# Just a confirmation that ĂrĂŒmqi time was implemented in ĂrĂŒmqi on 1 Feb 1986:
-# https://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 +06)
-# but this was withdrawn in 1959 and never reinstated; see Tubten Khétsun,
-# Memories of life in Lhasa under Chinese Rule, Columbia U Press, ISBN
-# 978-0231142861 (2008), translator's introduction by Matthew Akester, p x.
-# As this is before our 1970 cutoff, Tibet doesn't need a separate zone.
-#
-# Xinjiang Time is well-documented as being officially recognized. E.g., see
-# "The Working-Calendar for The Xinjiang Uygur Autonomous Region Government"
-# <http://www.sinkiang.gov.cn/service/ourworking/> (2014-04-22).
-# Unfortunately, we have no good records of time in Xinjiang before 1986.
-# During the 20th century parts of Xinjiang were ruled by the Qing dynasty,
-# the Republic of China, various warlords, the First and Second East Turkestan
-# Republics, the Soviet Union, the Kuomintang, and the People's Republic of
-# China, and tracking down all these organizations' timekeeping rules would be
-# quite a trick. Approximate this lost history by a transition from LMT to
-# UT +06 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 +08 before
-# 1986-02-01 under the theory that the transition date to +08 is unknown and
-# that the sort of users who prefer Asia/Urumqi now typically ignored the
-# +08 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 May 28
- 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 - +06
-
-
-# Hong Kong (Xianggang)
-
-# Milne gives 7:36:41.7; round this.
-
-# From Lee Yiu Chung (2009-10-24):
-# I found there are some mistakes for the...DST rule for Hong
-# Kong. [According] to the DST record from Hong Kong Observatory (actually,
-# it is not [an] observatory, but the official meteorological agency of HK,
-# and also serves as the official timing agency), there are some missing
-# 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 Phake Nick (2018-10-27):
-# According to Singaporean newspaper
-# http://eresources.nlb.gov.sg/newspapers/Digitised/Article/singfreepresswk19041102-1.2.37
-# the day that Hong Kong start using GMT+8 should be Oct 30, 1904.
-#
-# From Paul Eggert (2018-11-17):
-# Hong Kong had a time ball near the Marine Police Station, Tsim Sha Tsui.
-# "The ball was raised manually each day and dropped at exactly 1pm
-# (except on Sundays and Government holidays)."
-# Dyson AD. From Time Ball to Atomic Clock. Hong Kong Government. 1983.
-# <https://www.hko.gov.hk/publica/gen_pub/timeball_atomic_clock.pdf>
-# "From 1904 October 30 the time-ball at Hong Kong has been dropped by order
-# of the Governor of the Colony at 17h 0m 0s G.M.T., which is 23m 18s.14 in
-# advance of 1h 0m 0s of Hong Kong mean time."
-# Hollis HP. Universal Time, Longitudes, and Geodesy. Mon Not R Astron Soc.
-# 1905-02-10;65(4):405-6. https://doi.org/10.1093/mnras/65.4.382
-#
-# From Joseph Myers (2018-11-18):
-# An astronomer before 1925 referring to GMT would have been using the old
-# astronomical convention where the day started at noon, not midnight.
-#
-# From Steve Allen (2018-11-17):
-# Meteorological Observations made at the Hongkong Observatory in the year 1904
-# page 4 <https://books.google.com/books?id=kgw5AQAAMAAJ&pg=RA4-PA4>
-# ... the log of drop times in Table II shows that on Sunday 1904-10-30 the
-# ball was dropped. So that looks like a special case drop for the sake
-# of broadcasting the new local time.
-#
-# From Phake Nick (2018-11-18):
-# According to The Hong Kong Weekly Press, 1904-10-29, p.324, the
-# governor of Hong Kong at the time stated that "We are further desired to
-# make it known that the change will be effected by firing the gun and by the
-# dropping of the Ball at 23min. 18sec. before one."
-# From Paul Eggert (2018-11-18):
-# See <https://mmis.hkpl.gov.hk> for this; unfortunately Flash is required.
-
-# From Phake Nick (2018-10-26):
-# I went to check microfilm records stored at Hong Kong Public Library....
-# on September 30 1941, according to Ta Kung Pao (Hong Kong edition), it was
-# stated that fallback would occur on the next day (the 1st)'s "03:00 am (Hong
-# Kong Time 04:00 am)" and the clock will fall back for a half hour. (03:00
-# probably refer to the time commonly used in mainland China at the time given
-# the paper's background) ... the sunrise/sunset time given by South China
-# Morning Post for October 1st was indeed moved by half an hour compares to
-# before. After that, in December, the battle to capture Hong Kong started and
-# the library doesn't seems to have any record stored about press during that
-# period of time. Some media resumed publication soon after that within the
-# same month, but there were not much information about time there. Later they
-# started including a radio program guide when they restored radio service,
-# explicitly mentioning it use Tokyo standard time, and later added a note
-# saying it's half an hour ahead of the old Hong Kong standard time, and it
-# also seems to indicate that Hong Kong was not using GMT+8 when it was
-# captured by Japan.
-#
-# Image of related sections on newspaper:
-# * 1941-09-30, Ta Kung Pao (Hong Kong), "Winter Time start tomorrow".
-# https://i.imgur.com/6waY51Z.jpg (Chinese)
-# * 1941-09-29, South China Morning Post, Information on sunrise/sunset
-# time and other things for September 30 and October 1.
-# https://i.imgur.com/kCiUR78.jpg
-# * 1942-02-05. The Hong Kong News, Radio Program Guide.
-# https://i.imgur.com/eVvDMzS.jpg
-# * 1941-06-14. Hong Kong Daily Press, Daylight Saving from 3am Tomorrow.
-# https://i.imgur.com/05KkvtC.png
-# * 1941-09-30, Hong Kong Daily Press, Winter Time Warning.
-# https://i.imgur.com/dge4kFJ.png
-# Also, the Liberation day of Hong Kong after WWII which British rule
-# over the territory resumed was August 30, 1945, which I think should
-# be the termination date for the use of JST in the territory....
-
-# From Paul Eggert (2018-11-17):
-# Here are the dates given at
-# https://www.hko.gov.hk/gts/time/Summertime.htm
-# as of 2014-06-19:
-# Year Period
-# 1941 15 Jun to 30 Sep
-# 1942 Whole year
-# 1943 Whole year
-# 1944 Whole year
-# 1945 Whole year
-# 1946 20 Apr to 1 Dec
-# 1947 13 Apr to 30 Dec
-# 1948 2 May to 31 Oct
-# 1949 3 Apr to 30 Oct
-# 1950 2 Apr to 29 Oct
-# 1951 1 Apr to 28 Oct
-# 1952 6 Apr to 2 Nov
-# 1953 5 Apr to 1 Nov
-# 1954 21 Mar to 31 Oct
-# 1955 20 Mar to 6 Nov
-# 1956 18 Mar to 4 Nov
-# 1957 24 Mar to 3 Nov
-# 1958 23 Mar to 2 Nov
-# 1959 22 Mar to 1 Nov
-# 1960 20 Mar to 6 Nov
-# 1961 19 Mar to 5 Nov
-# 1962 18 Mar to 4 Nov
-# 1963 24 Mar to 3 Nov
-# 1964 22 Mar to 1 Nov
-# 1965 18 Apr to 17 Oct
-# 1966 17 Apr to 16 Oct
-# 1967 16 Apr to 22 Oct
-# 1968 21 Apr to 20 Oct
-# 1969 20 Apr to 19 Oct
-# 1970 19 Apr to 18 Oct
-# 1971 18 Apr to 17 Oct
-# 1972 16 Apr to 22 Oct
-# 1973 22 Apr to 21 Oct
-# 1973/74 30 Dec 73 to 20 Oct 74
-# 1975 20 Apr to 19 Oct
-# 1976 18 Apr to 17 Oct
-# 1977 Nil
-# 1978 Nil
-# 1979 13 May to 21 Oct
-# 1980 to Now Nil
-# The page does not give times of day for transitions,
-# or dates for the 1942 and 1945 transitions.
-# The Japanese occupation of Hong Kong began 1941-12-25.
-# The Japanese surrender of Hong Kong was signed 1945-09-16; see:
-# Heaver S. The days after the Pacific war ended: unsettling times
-# in Hong Kong. Post Magazine. 2016-06-13.
-# https://www.scmp.com/magazines/post-magazine/article/1852990/days-after-pacific-war-ended-unsettling-times-hong-kong
-# For lack of anything better, use start of those days as the
-# transition times.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule HK 1946 only - Apr 20 3:30 1:00 S
-Rule HK 1946 only - Dec 1 3:30 0 -
-Rule HK 1947 only - Apr 13 3:30 1:00 S
-Rule HK 1947 only - Dec 30 3:30 0 -
-Rule HK 1948 only - May 2 3:30 1:00 S
-Rule HK 1948 1951 - Oct lastSun 3:30 0 -
-Rule HK 1952 1953 - Nov Sun>=1 3:30 0 -
-Rule HK 1949 1953 - Apr Sun>=1 3:30 1:00 S
-Rule HK 1954 1964 - Mar Sun>=18 3:30 1:00 S
-Rule HK 1954 only - Oct 31 3:30 0 -
-Rule HK 1955 1964 - Nov Sun>=1 3:30 0 -
-Rule HK 1965 1976 - Apr Sun>=16 3:30 1:00 S
-Rule HK 1965 1976 - Oct Sun>=16 3:30 0 -
-Rule HK 1973 only - Dec 30 3:30 1:00 S
-Rule HK 1979 only - May Sun>=8 3:30 1:00 S
-Rule HK 1979 only - Oct Sun>=16 3:30 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Hong_Kong 7:36:42 - LMT 1904 Oct 30 0:36:42
- 8:00 - HKT 1941 Jun 15 3:30
- 8:00 1:00 HKST 1941 Oct 1 4:00
- 8:30 - HKT 1941 Dec 25
- 9:00 - JST 1945 Sep 16
- 8:00 HK HK%sT
-
-###############################################################################
-
-# Taiwan
-
-# From smallufo (2010-04-03):
-# 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 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:
-# https://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
-# (UT+9). The adoption began on Oct 1, 1937. The original text can
-# be found on Wikisource:
-# https://ja.wikisource.org/wiki/ææČ»äșćć
«ćčŽć
什珏çŸć
ćäžèæšæșæăéăčă«ä»¶äžæčæŁă件
-#
-# That is, the time zone of Taipei switched to UT+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 UT+9
-# back to UT+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 (UT+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 +09 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 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
-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 - Jul 1 0:00 1:00 D
-Rule Taiwan 1979 only - Oct 1 0:00 0 S
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-# Taipei or Taibei or T'ai-pei
-Zone Asia/Taipei 8:06:00 - LMT 1896 Jan 1
- 8:00 - CST 1937 Oct 1
- 9:00 - JST 1945 Sep 21 1:00
- 8:00 Taiwan C%sT
-
-# Macau (Macao, Aomen)
-#
-# From P Chan (2018-05-10):
-# * LegisMac
-# http://legismac.safp.gov.mo/legismac/descqry/Descqry.jsf?lang=pt
-# A database for searching titles of legal documents of Macau in
-# Chinese and Portuguese. The term "HORĂRIO DE VERĂO" can be used for
-# searching decrees about summer time.
-# * Archives of Macao
-# http://www.archives.gov.mo/en/bo/
-# It contains images of old official gazettes.
-# * The Macao Meteorological and Geophysical Bureau have a page listing the
-# summer time history. But it is not complete and has some mistakes.
-# http://www.smg.gov.mo/smg/geophysics/e_t_Summer%20Time.htm
-# Macau adopted GMT+8 on 30 Oct 1904 to follow Hong Kong. Clocks were
-# advanced by 25 minutes and 50 seconds. Which means the LMT used was
-# +7:34:10. As stated in the "Portaria No. 204" dated 21 October 1904
-# and published in the Official Gazette on 29 October 1904.
-# http://igallery.icm.gov.mo/Images/Archives/BO/MO_AH_PUB_BO_1904_10/MO_AH_PUB_BO_1904_10_00025_Grey.JPG
-#
-# Therefore the 1911 decree of Portugal did not change time in Macau.
-#
-# From LegisMac, here is a list of decrees that changed the time ...
-# [Decree Gazette-no. date; titles omitted in this quotation]
-# DIL 732 BOCM 51 1941.12.20
-# DIL 764 BOCM 9S 1942.04.30
-# DIL 781 BOCM 21 1942.10.10
-# PT 3434 BOCM 8S 1943.04.17
-# PT 3504 BOCM 20 1943.09.25
-# PT 3843 BOCM 39 1945.09.29
-# PT 3961 BOCM 17 1946.04.27
-# PT 4026 BOCM 39 1946.09.28
-# PT 4153 BOCM 16 1947.04.10
-# PT 4271 BOCM 48 1947.11.29
-# PT 4374 BOCM 18 1948.05.01
-# PT 4465 BOCM 44 1948.10.30
-# PT 4590 BOCM 14 1949.04.02
-# PT 4666 BOCM 44 1949.10.29
-# PT 4771 BOCM 12 1950.03.25
-# PT 4838 BOCM 43 1950.10.28
-# PT 4946 BOCM 12 1951.03.24
-# PT 5025 BO 43 1951.10.27
-# PT 5149 BO 14 1952.04.05
-# PT 5251 BO 43 1952.10.25
-# PT 5366 BO 13 1953.03.28
-# PT 5444 BO 44 1953.10.31
-# PT 5540 BO 12 1954.03.20
-# PT 5589 BO 44 1954.10.30
-# PT 5676 BO 12 1955.03.19
-# PT 5739 BO 45 1955.11.05
-# PT 5823 BO 11 1956.03.17
-# PT 5891 BO 44 1956.11.03
-# PT 5981 BO 12 1957.03.23
-# PT 6064 BO 43 1957.10.26
-# PT 6172 BO 12 1958.03.22
-# PT 6243 BO 43 1958.10.25
-# PT 6341 BO 12 1959.03.21
-# PT 6411 BO 43 1959.10.24
-# PT 6514 BO 11 1960.03.12
-# PT 6584 BO 44 1960.10.29
-# PT 6721 BO 10 1961.03.11
-# PT 6815 BO 43 1961.10.28
-# PT 6947 BO 10 1962.03.10
-# PT 7080 BO 43 1962.10.27
-# PT 7218 BO 12 1963.03.23
-# PT 7340 BO 43 1963.10.26
-# PT 7491 BO 11 1964.03.14
-# PT 7664 BO 43 1964.10.24
-# PT 7846 BO 15 1965.04.10
-# PT 7979 BO 42 1965.10.16
-# PT 8146 BO 15 1966.04.09
-# PT 8252 BO 41 1966.10.08
-# PT 8429 BO 15 1967.04.15
-# PT 8540 BO 41 1967.10.14
-# PT 8735 BO 15 1968.04.13
-# PT 8860 BO 41 1968.10.12
-# PT 9035 BO 16 1969.04.19
-# PT 9156 BO 42 1969.10.18
-# PT 9328 BO 15 1970.04.11
-# PT 9418 BO 41 1970.10.10
-# PT 9587 BO 14 1971.04.03
-# PT 9702 BO 41 1971.10.09
-# PT 38-A/72 BO 14 1972.04.01
-# PT 126-A/72 BO 41 1972.10.07
-# PT 61/73 BO 14 1973.04.07
-# PT 182/73 BO 40 1973.10.06
-# PT 282/73 BO 51 1973.12.22
-# PT 177/74 BO 41 1974.10.12
-# PT 51/75 BO 15 1975.04.12
-# PT 173/75 BO 41 1975.10.11
-# PT 67/76/M BO 14 1976.04.03
-# PT 169/76/M BO 41 1976.10.09
-# PT 78/79/M BO 19 1979.05.12
-# PT 166/79/M BO 42 1979.10.20
-# Note that DIL 732 does not belong to "HORĂRIO DE VERĂO" according to
-# LegisMac.... Note that between 1942 and 1945, the time switched
-# between GMT+9 and GMT+10. Also in 1965 and 1965 the DST ended at 2:30am.
-
-# From Paul Eggert (2018-05-10):
-# The 1904 decree says that Macau changed from the meridian of
-# Fortaleza do Monte, presumably the basis for the 7:34:10 for LMT.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Macau 1942 1943 - Apr 30 23:00 1:00 -
-Rule Macau 1942 only - Nov 17 23:00 0 -
-Rule Macau 1943 only - Sep 30 23:00 0 S
-Rule Macau 1946 only - Apr 30 23:00s 1:00 D
-Rule Macau 1946 only - Sep 30 23:00s 0 S
-Rule Macau 1947 only - Apr 19 23:00s 1:00 D
-Rule Macau 1947 only - Nov 30 23:00s 0 S
-Rule Macau 1948 only - May 2 23:00s 1:00 D
-Rule Macau 1948 only - Oct 31 23:00s 0 S
-Rule Macau 1949 1950 - Apr Sat>=1 23:00s 1:00 D
-Rule Macau 1949 1950 - Oct lastSat 23:00s 0 S
-Rule Macau 1951 only - Mar 31 23:00s 1:00 D
-Rule Macau 1951 only - Oct 28 23:00s 0 S
-Rule Macau 1952 1953 - Apr Sat>=1 23:00s 1:00 D
-Rule Macau 1952 only - Nov 1 23:00s 0 S
-Rule Macau 1953 1954 - Oct lastSat 23:00s 0 S
-Rule Macau 1954 1956 - Mar Sat>=17 23:00s 1:00 D
-Rule Macau 1955 only - Nov 5 23:00s 0 S
-Rule Macau 1956 1964 - Nov Sun>=1 03:30 0 S
-Rule Macau 1957 1964 - Mar Sun>=18 03:30 1:00 D
-Rule Macau 1965 1973 - Apr Sun>=16 03:30 1:00 D
-Rule Macau 1965 1966 - Oct Sun>=16 02:30 0 S
-Rule Macau 1967 1976 - Oct Sun>=16 03:30 0 S
-Rule Macau 1973 only - Dec 30 03:30 1:00 D
-Rule Macau 1975 1976 - Apr Sun>=16 03:30 1:00 D
-Rule Macau 1979 only - May 13 03:30 1:00 D
-Rule Macau 1979 only - Oct Sun>=16 03:30 0 S
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Macau 7:34:10 - LMT 1904 Oct 30
- 8:00 - CST 1941 Dec 21 23:00
- 9:00 Macau +09/+10 1945 Sep 30 24:00
- 8:00 Macau C%sT
-
-
-###############################################################################
-
-# Cyprus
-
-# Milne says the Eastern Telegraph Company used 2:14:00. Stick with LMT.
-# IATA SSIM (1998-09) has Cyprus using EU rules for the first time.
-
-# From Paul Eggert (2016-09-09):
-# Yesterday's Cyprus Mail reports that Northern Cyprus followed Turkey's
-# lead and switched from +02/+03 to +03 year-round.
-# http://cyprus-mail.com/2016/09/08/two-time-zones-cyprus-turkey-will-not-turn-clocks-back-next-month/
-#
-# From Even Scharning (2016-10-31):
-# Looks like the time zone split in Cyprus went through last night.
-# http://cyprus-mail.com/2016/10/30/cyprus-new-division-two-time-zones-now-reality/
-
-# From Paul Eggert (2017-10-18):
-# Northern Cyprus will reinstate winter time on October 29, thus
-# staying in sync with the rest of Cyprus. See: Anastasiou A.
-# Cyprus to remain united in time. Cyprus Mail 2017-10-17.
-# https://cyprus-mail.com/2017/10/17/cyprus-remain-united-time/
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Cyprus 1975 only - Apr 13 0:00 1:00 S
-Rule Cyprus 1975 only - Oct 12 0:00 0 -
-Rule Cyprus 1976 only - May 15 0:00 1:00 S
-Rule Cyprus 1976 only - Oct 11 0:00 0 -
-Rule Cyprus 1977 1980 - Apr Sun>=1 0:00 1:00 S
-Rule Cyprus 1977 only - Sep 25 0:00 0 -
-Rule Cyprus 1978 only - Oct 2 0:00 0 -
-Rule Cyprus 1979 1997 - Sep lastSun 0:00 0 -
-Rule Cyprus 1981 1998 - Mar lastSun 0:00 1:00 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Nicosia 2:13:28 - LMT 1921 Nov 14
- 2:00 Cyprus EE%sT 1998 Sep
- 2:00 EUAsia EE%sT
-Zone Asia/Famagusta 2:15:48 - LMT 1921 Nov 14
- 2:00 Cyprus EE%sT 1998 Sep
- 2:00 EUAsia EE%sT 2016 Sep 8
- 3:00 - +03 2017 Oct 29 1:00u
- 2:00 EUAsia EE%sT
-
-# Classically, Cyprus belongs to Asia; e.g. see Herodotus, Histories, I.72.
-# However, for various reasons many users expect to find it under Europe.
-Link Asia/Nicosia Europe/Nicosia
-
-# Georgia
-# From Paul Eggert (1994-11-19):
-# Today's _Economist_ (p 60) reports that Georgia moved its clocks forward
-# an hour recently, due to a law proposed by Zurab Murvanidze,
-# an MP who went on a hunger strike for 11 days to force discussion about it!
-# We have no details, but we'll guess they didn't move the clocks back in fall.
-#
-# From Mathew Englander, quoting AP (1996-10-23 13:05-04):
-# Instead of putting back clocks at the end of October, Georgia
-# will stay on daylight savings time this winter to save energy,
-# President Eduard Shevardnadze decreed Wednesday.
-#
-# From the BBC via Joseph S. Myers (2004-06-27):
-#
-# Georgia moved closer to Western Europe on Sunday... The former Soviet
-# 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,
-# Mikheil Saakashvili, who said the change was partly prompted by the process
-# of integration into Europe.
-
-# From Teimuraz Abashidze (2005-11-07):
-# Government of Georgia ... decided to NOT CHANGE daylight savings time on
-# [Oct.] 30, as it was done before during last more than 10 years.
-# Currently, we are in fact GMT +4:00, as before 30 October it was GMT
-# +3:00.... The problem is, there is NO FORMAL LAW or governmental document
-# about it. As far as I can find, I was told, that there is no document,
-# because we just DIDN'T ISSUE document about switching to winter time....
-# 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:11 - LMT 1880
- 2:59:11 - TBMT 1924 May 2 # Tbilisi Mean Time
- 3:00 - +03 1957 Mar
- 4:00 RussiaAsia +04/+05 1991 Mar 31 2:00s
- 3:00 RussiaAsia +03/+04 1992
- 3:00 E-EurAsia +03/+04 1994 Sep lastSun
- 4:00 E-EurAsia +04/+05 1996 Oct lastSun
- 4:00 1:00 +05 1997 Mar lastSun
- 4:00 E-EurAsia +04/+05 2004 Jun 27
- 3:00 RussiaAsia +03/+04 2005 Mar lastSun 2:00
- 4:00 - +04
-
-# East Timor
-
-# See Indonesia for the 1945 transition.
-
-# From JoĂŁo CarrascalĂŁo, brother of the former governor of East Timor, in
-# East Timor may be late for its millennium
-# <https://etan.org/et99c/december/26-31/30ETMAY.htm> (1999-12-26/31):
-# Portugal tried to change the time forward in 1974 because the sun
-# rises too early but the suggestion raised a lot of problems with the
-# Timorese and I still don't think it would work today because it
-# conflicts with their way of life.
-
-# From Paul Eggert (2000-12-04):
-# 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
-# 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 Jan 1
- 8:00 - +08 1942 Feb 21 23:00
- 9:00 - +09 1976 May 3
- 8:00 - +08 2000 Sep 17 0:00
- 9:00 - +09
-
-# India
-
-# British astronomer Henry Park Hollis disliked India Standard Time's offset:
-# "A new time system has been proposed for India, Further India, and Burmah.
-# The scheme suggested is that the times of the meridians 5œ and 6œ hours
-# east of Greenwich should be adopted in these territories. No reason is
-# given why hourly meridians five hours and six hours east should not be
-# chosen; a plan which would bring the time of India into harmony with
-# that of almost the whole of the civilised world."
-# Hollis HP. Universal Time, Longitudes, and Geodesy. Mon Not R Astron Soc.
-# 1905-02-10;65(4):405-6. https://doi.org/10.1093/mnras/65.4.382
-
-# From Ian P. Beacock, in "A brief history of (modern) time", The Atlantic
-# https://www.theatlantic.com/technology/archive/2015/12/the-creation-of-modern-time/421419/
-# (2015-12-22):
-# In January 1906, several thousand cotton-mill workers rioted on the
-# outskirts of Bombay.... They were protesting the proposed abolition of
-# local time in favor of Indian Standard Time.... Journalists called this
-# dispute the "Battle of the Clocks." It lasted nearly half a century.
-
-# From Paul Eggert (2017-04-20):
-# Good luck trying to nail down old timekeeping records in India.
-# "... in the nineteenth century ... Madras Observatory took its magnetic
-# measurements on Göttingen time, its meteorological measurements on Madras
-# (local) time, dropped its time ball on Greenwich (ocean navigator's) time,
-# and distributed civil (local time)." -- Bartky IR. Selling the true time:
-# 19th-century timekeeping in america. Stanford U Press (2000), 247 note 19.
-# "A more potent cause of resistance to the general adoption of the present
-# standard time lies in the fact that it is Madras time. The citizen of
-# Bombay, proud of being 'primus in Indis' and of Calcutta, equally proud of
-# his city being the Capital of India, and - for a part of the year - the Seat
-# of the Supreme Government, alike look down on Madras, and refuse to change
-# the time they are using, for that of what they regard as a benighted
-# Presidency; while Madras, having for long given the standard time to the
-# rest of India, would resist the adoption of any other Indian standard in its
-# place." -- Oldham RD. On Time in India: a suggestion for its improvement.
-# Proceedings of the Asiatic Society of Bengal (April 1899), 49-55.
-#
-# "In 1870 ... Madras time - 'now used by the telegraph and regulated from the
-# only government observatory' - was suggested as a standard railway time,
-# first to be adopted on the Great Indian Peninsular Railway (GIPR)....
-# Calcutta, Bombay, and Karachi, were to be allowed to continue with their
-# local time for civil purposes." - Prasad R. Tracks of Change: Railways and
-# Everyday Life in Colonial India. Cambridge University Press (2016), 145.
-#
-# Reed S, Low F. The Indian Year Book 1936-37. Bennett, Coleman, pp 27-8.
-# https://archive.org/details/in.ernet.dli.2015.282212
-# This lists +052110 as Madras local time used in railways, and says that on
-# 1906-01-01 railways and telegraphs in India switched to +0530. Some
-# municipalities retained their former time, and the time in Calcutta
-# continued to depend on whether you were at the railway station or at
-# government offices. Government time was at +055320 (according to Shanks) or
-# at +0554 (according to the Indian Year Book). Railway time is more
-# appropriate for our purposes, as it was better documented, it is what we do
-# elsewhere (e.g., Europe/London before 1880), and after 1906 it was
-# consistent in the region now identified by Asia/Kolkata. So, use railway
-# time for 1870-1941. Shanks is our only (and dubious) source for the
-# 1941-1945 data.
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Kolkata 5:53:28 - LMT 1854 Jun 28 # Kolkata
- 5:53:20 - HMT 1870 # Howrah Mean Time?
- 5:21:10 - MMT 1906 Jan 1 # Madras local time
- 5:30 - IST 1941 Oct
- 5:30 1:00 +0630 1942 May 15
- 5:30 - IST 1942 Sep
- 5:30 1:00 +0630 1945 Oct 15
- 5:30 - IST
-# Since 1970 the following are like Asia/Kolkata:
-# Andaman Is
-# Lakshadweep (Laccadive, Minicoy and Amindivi Is)
-# Nicobar Is
-
-# Indonesia
-#
-# From Paul Eggert (2014-09-06):
-# The 1876 Report of the Secretary of the [US] Navy, p 306 says that Batavia
-# civil time was 7:07:12.5; round to even for Jakarta.
-#
-# 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.
-#
-# From Paul Eggert (2007-03-10):
-# Here is another correction to Shanks & Pottenger.
-# JohnTWB writes that Japanese forces did not surrender control in
-# Indonesia until 1945-09-01 00:00 at the earliest (in Jakarta) and
-# 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.
-# RĂ©gimes horaires pour le monde entier, by Henri Le Corre, (Ăditions
-# Traditionnelles, 1987, Paris) says that Java and Madura switched
-# from UT +09 to +07:30 on 1945-09-23, and gives 1944-09-01 for Jayapura
-# (Hollandia). For now, assume all Indonesian locations other than Jayapura
-# switched on 1945-09-23.
-#
-# From Paul Eggert (2013-08-11):
-# Normally the tz database uses English-language abbreviations, but in
-# Indonesia it's typical to use Indonesian-language abbreviations even
-# when writing in English. For example, see the English-language
-# summary published by the Time and Frequency Laboratory of the
-# Research Center for Calibration, Instrumentation and Metrology,
-# Indonesia, <http://time.kim.lipi.go.id/time-eng.php> (2006-09-29).
-# The time zone abbreviations and UT offsets are:
-#
-# WIB - +07 - Waktu Indonesia Barat (Indonesia western time)
-# WITA - +08 - Waktu Indonesia Tengah (Indonesia central time)
-# WIT - +09 - Waktu Indonesia Timur (Indonesia eastern time)
-#
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-# Java, Sumatra
-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 - +0720 1932 Nov
- 7:30 - +0730 1942 Mar 23
- 9:00 - +09 1945 Sep 23
- 7:30 - +0730 1948 May
- 8:00 - +08 1950 May
- 7:30 - +0730 1964
- 7:00 - WIB
-# west and central Borneo
-Zone Asia/Pontianak 7:17:20 - LMT 1908 May
- 7:17:20 - PMT 1932 Nov # Pontianak MT
- 7:30 - +0730 1942 Jan 29
- 9:00 - +09 1945 Sep 23
- 7:30 - +0730 1948 May
- 8:00 - +08 1950 May
- 7:30 - +0730 1964
- 8:00 - WITA 1988 Jan 1
- 7:00 - WIB
-# Sulawesi, Lesser Sundas, east and south Borneo
-Zone Asia/Makassar 7:57:36 - LMT 1920
- 7:57:36 - MMT 1932 Nov # Macassar MT
- 8:00 - +08 1942 Feb 9
- 9:00 - +09 1945 Sep 23
- 8:00 - WITA
-# Maluku Islands, West Papua, Papua
-Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
- 9:00 - +09 1944 Sep 1
- 9:30 - +0930 1964
- 9:00 - WIT
-
-# Iran
-
-# From Roozbeh Pournader (2003-03-15):
-# This is an English translation of what I just found (originally in Persian).
-# The Gregorian dates in brackets are mine:
-#
-# Official Newspaper No. 13548-1370/6/25 [1991-09-16]
-# No. 16760/T233 H 1370/6/10 [1991-09-01]
-#
-# The Rule About Change of the Official Time of the Country
-#
-# The Board of Ministers, in the meeting dated 1370/5/23 [1991-08-14],
-# based on the suggestion number 2221/D dated 1370/4/22 [1991-07-13]
-# of the Country's Organization for Official and Employment Affairs,
-# and referring to the law for equating the working hours of workers
-# and officers in the whole country dated 1359/4/23 [1980-07-14], and
-# for synchronizing the official times of the country, agreed that:
-#
-# The official time of the country will should move forward one hour
-# at the 24[:00] hours of the first day of Farvardin and should return
-# to its previous state at the 24[:00] hours of the 30th day of
-# Shahrivar.
-#
-# First Deputy to the President - Hassan Habibi
-#
-# From personal experience, that agrees with what has been followed
-# for at least the last 5 years. Before that, for a few years, the
-# date used was the first Thursday night of Farvardin and the last
-# Thursday night of Shahrivar, but I can't give exact dates....
-#
-# From Roozbeh Pournader (2005-04-05):
-# The text of the Iranian law, in effect since 1925, clearly mentions
-# that the true solar year is the measure, and there is no arithmetic
-# leap year calculation involved. There has never been any serious
-# plan to change that law....
-#
-# From Paul Eggert (2018-11-30):
-# Go with Shanks & Pottenger before Sept. 1991, and with Pournader thereafter.
-# I used the following code in GNU Emacs 26.1 to generate the "Rule Iran"
-# lines from 2008 through 2087. Emacs 26.1 uses Ed Reingold's
-# cal-persia implementation of Birashk's approximation, which in the
-# 2008-2087 range disagrees with the the astronomical Persian calendar
-# for Persian years 1404 (Gregorian 2025) and 1437 (Gregorian 2058),
-# so the following code special-case those years. See Table 15.1, page 264, of:
-# Edward M. Reingold and Nachum Dershowitz, Calendrical Calculations:
-# The Ultimate Edition, Cambridge University Press (2018).
-# https://www.cambridge.org/fr/academic/subjects/computer-science/computing-general-interest/calendrical-calculations-ultimate-edition-4th-edition
-# Page 258, footnote 2, of this book says there is some dispute over what will
-# happen in 2091 (and some other years after that), so this code
-# stops in 2087, as 2088 and 2089 agree with the "max" rule below.
-# (cl-loop
-# initially (require 'cal-persia)
-# with first-persian-year = 1387
-# with last-persian-year = 1466
-# ;; Exceptional years in the above range,
-# ;; from Reingold & Dershowitz Table 15.1, page 264:
-# with exceptional-persian-years = '(1404 1437)
-# with range-start = nil
-# for persian-year from first-persian-year to last-persian-year
-# do
-# (let*
-# ((exceptional-year-offset
-# (if (member persian-year exceptional-persian-years) 1 0))
-# (beg-dst-absolute
-# (+ (calendar-persian-to-absolute (list 1 1 persian-year))
-# exceptional-year-offset))
-# (end-dst-absolute
-# (+ (calendar-persian-to-absolute (list 6 30 persian-year))
-# exceptional-year-offset))
-# (next-year-beg-dst-absolute
-# (+ (calendar-persian-to-absolute (list 1 1 (1+ persian-year)))
-# (if (member (1+ persian-year) exceptional-persian-years) 1 0)))
-# (beg-dst (calendar-gregorian-from-absolute beg-dst-absolute))
-# (end-dst (calendar-gregorian-from-absolute end-dst-absolute))
-# (next-year-beg-dst (calendar-gregorian-from-absolute
-# next-year-beg-dst-absolute))
-# (year (calendar-extract-year beg-dst))
-# (range-end (if range-start year "only")))
-# (setq range-start (or range-start year))
-# (when (or (/= (calendar-extract-day beg-dst)
-# (calendar-extract-day next-year-beg-dst))
-# (= persian-year last-persian-year))
-# (insert
-# (format
-# "Rule\tIran\t%d\t%s\t-\t%s\t%2d\t24:00\t1:00\t-\n"
-# range-start range-end
-# (calendar-month-name (calendar-extract-month beg-dst) t)
-# (calendar-extract-day beg-dst)))
-# (insert
-# (format
-# "Rule\tIran\t%d\t%s\t-\t%s\t%2d\t24:00\t0\t-\n"
-# range-start range-end
-# (calendar-month-name (calendar-extract-month end-dst) t)
-# (calendar-extract-day end-dst)))
-# (setq range-start nil))))
-#
-# From Oscar van Vlijmen (2005-03-30), writing about future
-# discrepancies between cal-persia and the Iranian calendar:
-# For 2091 solar-longitude-after yields 2091-03-20 08:40:07.7 UT for
-# the vernal equinox and that gets so close to 12:00 some local
-# Iranian time that the definition of the correct location needs to be
-# known exactly, amongst other factors. 2157 is even closer:
-# 2157-03-20 08:37:15.5 UT. But the Gregorian year 2025 should give
-# no interpretation problem whatsoever. By the way, another instant
-# in the near future where there will be a discrepancy between
-# arithmetical and astronomical Iranian calendars will be in 2058:
-# vernal equinox on 2058-03-20 09:03:05.9 UT. The Java version of
-# Reingold's/Dershowitz' calculator gives correctly the Gregorian date
-# 2058-03-21 for 1 Farvardin 1437 (astronomical).
-#
-# From Steffen Thorsen (2006-03-22):
-# Several of my users have reported that Iran will not observe DST anymore:
-# http://www.irna.ir/en/news/view/line-17/0603193812164948.htm
-#
-# 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 ...
-# https://uk.reuters.com/article/oilRpt/idUKBLA65048420070916
-#
-# From Roozbeh Pournader (2007-11-05):
-# This is quoted from Official Gazette of the Islamic Republic of
-# Iran, Volume 63, No. 18242, dated Tuesday 1386/6/24
-# [2007-10-16]. I am doing the best translation I can:...
-# The official time of the country will be moved forward for one hour
-# on the 24 hours of the first day of the month of Farvardin and will
-# be changed back to its previous state on the 24 hours of the
-# thirtieth day of Shahrivar.
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Iran 1978 1980 - Mar 20 24:00 1:00 -
-Rule Iran 1978 only - Oct 20 24:00 0 -
-Rule Iran 1979 only - Sep 18 24:00 0 -
-Rule Iran 1980 only - Sep 22 24:00 0 -
-Rule Iran 1991 only - May 2 24:00 1:00 -
-Rule Iran 1992 1995 - Mar 21 24:00 1:00 -
-Rule Iran 1991 1995 - Sep 21 24:00 0 -
-Rule Iran 1996 only - Mar 20 24:00 1:00 -
-Rule Iran 1996 only - Sep 20 24:00 0 -
-Rule Iran 1997 1999 - Mar 21 24:00 1:00 -
-Rule Iran 1997 1999 - Sep 21 24:00 0 -
-Rule Iran 2000 only - Mar 20 24:00 1:00 -
-Rule Iran 2000 only - Sep 20 24:00 0 -
-Rule Iran 2001 2003 - Mar 21 24:00 1:00 -
-Rule Iran 2001 2003 - Sep 21 24:00 0 -
-Rule Iran 2004 only - Mar 20 24:00 1:00 -
-Rule Iran 2004 only - Sep 20 24:00 0 -
-Rule Iran 2005 only - Mar 21 24:00 1:00 -
-Rule Iran 2005 only - Sep 21 24:00 0 -
-Rule Iran 2008 only - Mar 20 24:00 1:00 -
-Rule Iran 2008 only - Sep 20 24:00 0 -
-Rule Iran 2009 2011 - Mar 21 24:00 1:00 -
-Rule Iran 2009 2011 - Sep 21 24:00 0 -
-Rule Iran 2012 only - Mar 20 24:00 1:00 -
-Rule Iran 2012 only - Sep 20 24:00 0 -
-Rule Iran 2013 2015 - Mar 21 24:00 1:00 -
-Rule Iran 2013 2015 - Sep 21 24:00 0 -
-Rule Iran 2016 only - Mar 20 24:00 1:00 -
-Rule Iran 2016 only - Sep 20 24:00 0 -
-Rule Iran 2017 2019 - Mar 21 24:00 1:00 -
-Rule Iran 2017 2019 - Sep 21 24:00 0 -
-Rule Iran 2020 only - Mar 20 24:00 1:00 -
-Rule Iran 2020 only - Sep 20 24:00 0 -
-Rule Iran 2021 2023 - Mar 21 24:00 1:00 -
-Rule Iran 2021 2023 - Sep 21 24:00 0 -
-Rule Iran 2024 only - Mar 20 24:00 1:00 -
-Rule Iran 2024 only - Sep 20 24:00 0 -
-Rule Iran 2025 2027 - Mar 21 24:00 1:00 -
-Rule Iran 2025 2027 - Sep 21 24:00 0 -
-Rule Iran 2028 2029 - Mar 20 24:00 1:00 -
-Rule Iran 2028 2029 - Sep 20 24:00 0 -
-Rule Iran 2030 2031 - Mar 21 24:00 1:00 -
-Rule Iran 2030 2031 - Sep 21 24:00 0 -
-Rule Iran 2032 2033 - Mar 20 24:00 1:00 -
-Rule Iran 2032 2033 - Sep 20 24:00 0 -
-Rule Iran 2034 2035 - Mar 21 24:00 1:00 -
-Rule Iran 2034 2035 - Sep 21 24:00 0 -
-Rule Iran 2036 2037 - Mar 20 24:00 1:00 -
-Rule Iran 2036 2037 - Sep 20 24:00 0 -
-Rule Iran 2038 2039 - Mar 21 24:00 1:00 -
-Rule Iran 2038 2039 - Sep 21 24:00 0 -
-Rule Iran 2040 2041 - Mar 20 24:00 1:00 -
-Rule Iran 2040 2041 - Sep 20 24:00 0 -
-Rule Iran 2042 2043 - Mar 21 24:00 1:00 -
-Rule Iran 2042 2043 - Sep 21 24:00 0 -
-Rule Iran 2044 2045 - Mar 20 24:00 1:00 -
-Rule Iran 2044 2045 - Sep 20 24:00 0 -
-Rule Iran 2046 2047 - Mar 21 24:00 1:00 -
-Rule Iran 2046 2047 - Sep 21 24:00 0 -
-Rule Iran 2048 2049 - Mar 20 24:00 1:00 -
-Rule Iran 2048 2049 - Sep 20 24:00 0 -
-Rule Iran 2050 2051 - Mar 21 24:00 1:00 -
-Rule Iran 2050 2051 - Sep 21 24:00 0 -
-Rule Iran 2052 2053 - Mar 20 24:00 1:00 -
-Rule Iran 2052 2053 - Sep 20 24:00 0 -
-Rule Iran 2054 2055 - Mar 21 24:00 1:00 -
-Rule Iran 2054 2055 - Sep 21 24:00 0 -
-Rule Iran 2056 2057 - Mar 20 24:00 1:00 -
-Rule Iran 2056 2057 - Sep 20 24:00 0 -
-Rule Iran 2058 2059 - Mar 21 24:00 1:00 -
-Rule Iran 2058 2059 - Sep 21 24:00 0 -
-Rule Iran 2060 2062 - Mar 20 24:00 1:00 -
-Rule Iran 2060 2062 - Sep 20 24:00 0 -
-Rule Iran 2063 only - Mar 21 24:00 1:00 -
-Rule Iran 2063 only - Sep 21 24:00 0 -
-Rule Iran 2064 2066 - Mar 20 24:00 1:00 -
-Rule Iran 2064 2066 - Sep 20 24:00 0 -
-Rule Iran 2067 only - Mar 21 24:00 1:00 -
-Rule Iran 2067 only - Sep 21 24:00 0 -
-Rule Iran 2068 2070 - Mar 20 24:00 1:00 -
-Rule Iran 2068 2070 - Sep 20 24:00 0 -
-Rule Iran 2071 only - Mar 21 24:00 1:00 -
-Rule Iran 2071 only - Sep 21 24:00 0 -
-Rule Iran 2072 2074 - Mar 20 24:00 1:00 -
-Rule Iran 2072 2074 - Sep 20 24:00 0 -
-Rule Iran 2075 only - Mar 21 24:00 1:00 -
-Rule Iran 2075 only - Sep 21 24:00 0 -
-Rule Iran 2076 2078 - Mar 20 24:00 1:00 -
-Rule Iran 2076 2078 - Sep 20 24:00 0 -
-Rule Iran 2079 only - Mar 21 24:00 1:00 -
-Rule Iran 2079 only - Sep 21 24:00 0 -
-Rule Iran 2080 2082 - Mar 20 24:00 1:00 -
-Rule Iran 2080 2082 - Sep 20 24:00 0 -
-Rule Iran 2083 only - Mar 21 24:00 1:00 -
-Rule Iran 2083 only - Sep 21 24:00 0 -
-Rule Iran 2084 2086 - Mar 20 24:00 1:00 -
-Rule Iran 2084 2086 - Sep 20 24:00 0 -
-Rule Iran 2087 only - Mar 21 24:00 1:00 -
-Rule Iran 2087 only - Sep 21 24:00 0 -
-#
-# The following rules are approximations starting in the year 2088.
-# These are the best post-2088 approximations available, given the
-# restrictions of a single rule using ordinary Gregorian dates.
-# At some point this table will need to be extended, though quite
-# possibly Iran will change the rules first.
-Rule Iran 2088 max - Mar 20 24:00 1:00 -
-Rule Iran 2088 max - Sep 20 24:00 0 -
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Tehran 3:25:44 - LMT 1916
- 3:25:44 - TMT 1946 # Tehran Mean Time
- 3:30 - +0330 1977 Nov
- 4:00 Iran +04/+05 1979
- 3:30 Iran +0330/+0430
-
-
-# Iraq
-#
-# From Jonathan Lennox (2000-06-12):
-# An article in this week's Economist ("Inside the Saddam-free zone", p. 50 in
-# the U.S. edition) on the Iraqi Kurds contains a paragraph:
-# "The three northern provinces ... switched their clocks this spring and
-# are an hour ahead of Baghdad."
-#
-# But Rives McDow (2000-06-18) quotes a contact in Iraqi-Kurdistan as follows:
-# In the past, some Kurdish nationalists, as a protest to the Iraqi
-# Government, did not adhere to daylight saving time. They referred
-# to daylight saving as Saddam time. But, as of today, the time zone
-# in Iraqi-Kurdistan is on standard time with Baghdad, Iraq.
-#
-# So we'll ignore the Economist's claim.
-
-# 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:
-# https://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 -
-Rule Iraq 1982 1984 - Oct 1 0:00 0 -
-Rule Iraq 1983 only - Mar 31 0:00 1:00 -
-Rule Iraq 1984 1985 - Apr 1 0:00 1:00 -
-Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 -
-Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 -
-# 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 -
-Rule Iraq 1991 2007 - Oct 1 3:00s 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Baghdad 2:57:40 - LMT 1890
- 2:57:36 - BMT 1918 # Baghdad Mean Time?
- 3:00 - +03 1982 May
- 3:00 Iraq +03/+04
-
-
-###############################################################################
-
-# Israel
-
-# From Ephraim Silverberg (2001-01-11):
-#
-# I coined "IST/IDT" circa 1988. Until then there were three
-# different abbreviations in use:
-#
-# JST Jerusalem Standard Time [Danny Braniss, Hebrew University]
-# IZT Israel Zonal (sic) Time [Prof. Haim Papo, Technion]
-# EEST Eastern Europe Standard Time [used by almost everyone else]
-#
-# Since timezones should be called by country and not capital cities,
-# I ruled out JST. As Israel is in Asia Minor and not Eastern Europe,
-# EEST was equally unacceptable. Since "zonal" was not compatible with
-# any other timezone abbreviation, I felt that 'IST' was the way to go
-# and, indeed, it has received almost universal acceptance in timezone
-# settings in Israeli computers.
-#
-# In any case, I am happy to share timezone abbreviations with India,
-# high on my favorite-country list (and not only because my wife's
-# family is from India).
-
-# From Shanks & Pottenger:
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Zion 1940 only - Jun 1 0:00 1:00 D
-Rule Zion 1942 1944 - Nov 1 0:00 0 S
-Rule Zion 1943 only - Apr 1 2:00 1:00 D
-Rule Zion 1944 only - Apr 1 0:00 1:00 D
-Rule Zion 1945 only - Apr 16 0:00 1:00 D
-Rule Zion 1945 only - Nov 1 2:00 0 S
-Rule Zion 1946 only - Apr 16 2:00 1:00 D
-Rule Zion 1946 only - Nov 1 0:00 0 S
-Rule Zion 1948 only - May 23 0:00 2:00 DD
-Rule Zion 1948 only - Sep 1 0:00 1:00 D
-Rule Zion 1948 1949 - Nov 1 2:00 0 S
-Rule Zion 1949 only - May 1 0:00 1:00 D
-Rule Zion 1950 only - Apr 16 0:00 1:00 D
-Rule Zion 1950 only - Sep 15 3:00 0 S
-Rule Zion 1951 only - Apr 1 0:00 1:00 D
-Rule Zion 1951 only - Nov 11 3:00 0 S
-Rule Zion 1952 only - Apr 20 2:00 1:00 D
-Rule Zion 1952 only - Oct 19 3:00 0 S
-Rule Zion 1953 only - Apr 12 2:00 1:00 D
-Rule Zion 1953 only - Sep 13 3:00 0 S
-Rule Zion 1954 only - Jun 13 0:00 1:00 D
-Rule Zion 1954 only - Sep 12 0:00 0 S
-Rule Zion 1955 only - Jun 11 2:00 1:00 D
-Rule Zion 1955 only - Sep 11 0:00 0 S
-Rule Zion 1956 only - Jun 3 0:00 1:00 D
-Rule Zion 1956 only - Sep 30 3:00 0 S
-Rule Zion 1957 only - Apr 29 2:00 1:00 D
-Rule Zion 1957 only - Sep 22 0:00 0 S
-Rule Zion 1974 only - Jul 7 0:00 1:00 D
-Rule Zion 1974 only - Oct 13 0:00 0 S
-Rule Zion 1975 only - Apr 20 0:00 1:00 D
-Rule Zion 1975 only - Aug 31 0:00 0 S
-
-# From Alois Treindl (2019-03-06):
-# http://www.moin.gov.il/Documents/Ś©ŚąŚŚ Ś§ŚŚ„/clock-50-years-7-2014.pdf
-# From Isaac Starkman (2019-03-06):
-# Summer time was in that period in 1980 and 1984, see
-# https://www.ynet.co.il/articles/0,7340,L-3951073,00.html
-# You can of course read it in translation.
-# I checked the local newspapers for that years.
-# It started on midnight and end at 01.00 am.
-# From Paul Eggert (2019-03-06):
-# Also see this thread about the moin.gov.il URL:
-# https://mm.icann.org/pipermail/tz/2018-November/027194.html
-Rule Zion 1980 only - Aug 2 0:00 1:00 D
-Rule Zion 1980 only - Sep 13 1:00 0 S
-Rule Zion 1984 only - May 5 0:00 1:00 D
-Rule Zion 1984 only - Aug 25 1:00 0 S
-
-# From Shanks & Pottenger:
-Rule Zion 1985 only - Apr 14 0:00 1:00 D
-Rule Zion 1985 only - Sep 15 0:00 0 S
-Rule Zion 1986 only - May 18 0:00 1:00 D
-Rule Zion 1986 only - Sep 7 0:00 0 S
-Rule Zion 1987 only - Apr 15 0:00 1:00 D
-Rule Zion 1987 only - Sep 13 0:00 0 S
-
-# From Avigdor Finkelstein (2014-03-05):
-# I check the Parliament (Knesset) records and there it's stated that the
-# [1988] transition should take place on Saturday night, when the Sabbath
-# ends and changes to Sunday.
-Rule Zion 1988 only - Apr 10 0:00 1:00 D
-Rule Zion 1988 only - Sep 4 0:00 0 S
-
-# From Ephraim Silverberg
-# (1997-03-04, 1998-03-16, 1998-12-28, 2000-01-17, 2000-07-25, 2004-12-22,
-# and 2005-02-17):
-
-# According to the Office of the Secretary General of the Ministry of
-# Interior, there is NO set rule for Daylight-Savings/Standard time changes.
-# One thing is entrenched in law, however: that there must be at least 150
-# days of daylight savings time annually. From 1993-1998, the change to
-# daylight savings time was on a Friday morning from midnight IST to
-# 1 a.m IDT; up until 1998, the change back to standard time was on a
-# Saturday night from midnight daylight savings time to 11 p.m. standard
-# time. 1996 is an exception to this rule where the change back to standard
-# time took place on Sunday night instead of Saturday night to avoid
-# conflicts with the Jewish New Year. In 1999, the change to
-# daylight savings time was still on a Friday morning but from
-# 2 a.m. IST to 3 a.m. IDT; furthermore, the change back to standard time
-# was also on a Friday morning from 2 a.m. IDT to 1 a.m. IST for
-# 1999 only. In the year 2000, the change to daylight savings time was
-# similar to 1999, but although the change back will be on a Friday, it
-# will take place from 1 a.m. IDT to midnight IST. Starting in 2001, all
-# changes to/from will take place at 1 a.m. old time, but now there is no
-# rule as to what day of the week it will take place in as the start date
-# (except in 2003) is the night after the Passover Seder (i.e. the eve
-# of the 16th of Nisan in the lunar Hebrew calendar) and the end date
-# (except in 2002) is three nights before Yom Kippur [Day of Atonement]
-# (the eve of the 7th of Tishrei in the lunar Hebrew calendar).
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Zion 1989 only - Apr 30 0:00 1:00 D
-Rule Zion 1989 only - Sep 3 0:00 0 S
-Rule Zion 1990 only - Mar 25 0:00 1:00 D
-Rule Zion 1990 only - Aug 26 0:00 0 S
-Rule Zion 1991 only - Mar 24 0:00 1:00 D
-Rule Zion 1991 only - Sep 1 0:00 0 S
-Rule Zion 1992 only - Mar 29 0:00 1:00 D
-Rule Zion 1992 only - Sep 6 0:00 0 S
-Rule Zion 1993 only - Apr 2 0:00 1:00 D
-Rule Zion 1993 only - Sep 5 0:00 0 S
-
-# The dates for 1994-1995 were obtained from Office of the Spokeswoman for the
-# Ministry of Interior, Jerusalem, Israel. The spokeswoman can be reached by
-# calling the office directly at 972-2-6701447 or 972-2-6701448.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Zion 1994 only - Apr 1 0:00 1:00 D
-Rule Zion 1994 only - Aug 28 0:00 0 S
-Rule Zion 1995 only - Mar 31 0:00 1:00 D
-Rule Zion 1995 only - Sep 3 0:00 0 S
-
-# The dates for 1996 were determined by the Minister of Interior of the
-# time, Haim Ramon. The official announcement regarding 1996-1998
-# (with the dates for 1997-1998 no longer being relevant) can be viewed at:
-#
-# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/1996-1998.ramon.ps.gz
-#
-# The dates for 1997-1998 were altered by his successor, Rabbi Eli Suissa.
-#
-# The official announcements for the years 1997-1999 can be viewed at:
-#
-# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/YYYY.ps.gz
-#
-# where YYYY is the relevant year.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Zion 1996 only - Mar 15 0:00 1:00 D
-Rule Zion 1996 only - Sep 16 0:00 0 S
-Rule Zion 1997 only - Mar 21 0:00 1:00 D
-Rule Zion 1997 only - Sep 14 0:00 0 S
-Rule Zion 1998 only - Mar 20 0:00 1:00 D
-Rule Zion 1998 only - Sep 6 0:00 0 S
-Rule Zion 1999 only - Apr 2 2:00 1:00 D
-Rule Zion 1999 only - Sep 3 2:00 0 S
-
-# The Knesset Interior Committee has changed the dates for 2000 for
-# the third time in just over a year and have set new dates for the
-# years 2001-2004 as well.
-#
-# The official announcement for the start date of 2000 can be viewed at:
-#
-# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2000-start.ps.gz
-#
-# The official announcement for the end date of 2000 and the dates
-# for the years 2001-2004 can be viewed at:
-#
-# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2000-2004.ps.gz
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Zion 2000 only - Apr 14 2:00 1:00 D
-Rule Zion 2000 only - Oct 6 1:00 0 S
-Rule Zion 2001 only - Apr 9 1:00 1:00 D
-Rule Zion 2001 only - Sep 24 1:00 0 S
-Rule Zion 2002 only - Mar 29 1:00 1:00 D
-Rule Zion 2002 only - Oct 7 1:00 0 S
-Rule Zion 2003 only - Mar 28 1:00 1:00 D
-Rule Zion 2003 only - Oct 3 1:00 0 S
-Rule Zion 2004 only - Apr 7 1:00 1:00 D
-Rule Zion 2004 only - Sep 22 1:00 0 S
-
-# The proposed law agreed upon by the Knesset Interior Committee on
-# 2005-02-14 is that, for 2005 and beyond, DST starts at 02:00 the
-# last Friday before April 2nd (i.e. the last Friday in March or April
-# 1st itself if it falls on a Friday) and ends at 02:00 on the Saturday
-# night _before_ the fast of Yom Kippur.
-#
-# Those who can read Hebrew can view the announcement at:
-#
-# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2005+beyond.ps
-
-# From Paul Eggert (2012-10-26):
-# I used Ephraim Silverberg's dst-israel.el program
-# <ftp://ftp.cs.huji.ac.il/pub/tz/software/dst-israel.el> (2005-02-20)
-# along with Ed Reingold's cal-hebrew in GNU Emacs 21.4,
-# to generate the transitions from 2005 through 2012.
-# (I replaced "lastFri" with "Fri>=26" by hand.)
-# The spring transitions all correspond to the following Rule:
-#
-# Rule Zion 2005 2012 - Mar Fri>=26 2:00 1:00 D
-#
-# but older zic implementations (e.g., Solaris 8) do not support
-# "Fri>=26" to mean April 1 in years like 2005, so for now we list the
-# springtime transitions explicitly.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Zion 2005 only - Apr 1 2:00 1:00 D
-Rule Zion 2005 only - Oct 9 2:00 0 S
-Rule Zion 2006 2010 - Mar Fri>=26 2:00 1:00 D
-Rule Zion 2006 only - Oct 1 2:00 0 S
-Rule Zion 2007 only - Sep 16 2:00 0 S
-Rule Zion 2008 only - Oct 5 2:00 0 S
-Rule Zion 2009 only - Sep 27 2:00 0 S
-Rule Zion 2010 only - Sep 12 2:00 0 S
-Rule Zion 2011 only - Apr 1 2:00 1:00 D
-Rule Zion 2011 only - Oct 2 2:00 0 S
-Rule Zion 2012 only - Mar Fri>=26 2:00 1:00 D
-Rule Zion 2012 only - Sep 23 2:00 0 S
-
-# From Ephraim Silverberg (2013-06-27):
-# On June 23, 2013, the Israeli government approved changes to the
-# Time Decree Law. The next day, the changes passed the First Reading
-# in the Knesset. The law is expected to pass the Second and Third
-# (final) Readings by the beginning of September 2013.
-#
-# As of 2013, DST starts at 02:00 on the Friday before the last Sunday
-# in March. DST ends at 02:00 on the last Sunday of October.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Zion 2013 max - Mar Fri>=23 2:00 1:00 D
-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:00 Zion I%sT
-
-
-
-###############################################################################
-
-# Japan
-
-# '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."
-
-# 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
-# deep hatred of the concept.... The Diet unceremoniously passed a bill to
-# dump the unpopular system in October 1951, less than a month after the San
-# Francisco Peace Treaty was signed. (A government poll in 1951 showed 53%
-# of the Japanese wanted to scrap daylight-saving time, as opposed to 30% who
-# wanted to keep it.)
-
-# From Takayuki Nikai (2018-01-19):
-# The source of information is Japanese law.
-# http://www.shugiin.go.jp/internet/itdb_housei.nsf/html/houritsu/00219480428029.htm
-# http://www.shugiin.go.jp/internet/itdb_housei.nsf/html/houritsu/00719500331039.htm
-# ... In summary, it is written as follows. From 24:00 on the first Saturday
-# in May, until 0:00 on the day after the second Saturday in September.
-
-# From Phake Nick (2018-09-27):
-# [T]he webpage authored by National Astronomical Observatory of Japan
-# https://eco.mtk.nao.ac.jp/koyomi/wiki/BBFEB9EF2FB2C6BBFEB9EF.html
-# ... mentioned that using Showa 23 (year 1948) as example, 13pm of September
-# 11 in summer time will equal to 0am of September 12 in standard time.
-# It cited a document issued by the Liaison Office which briefly existed
-# during the postwar period of Japan, where the detail on implementation
-# of the summer time is described in the document.
-# https://eco.mtk.nao.ac.jp/koyomi/wiki/BBFEB9EF2FB2C6BBFEB9EFB2C6BBFEB9EFA4CEBCC2BBDCA4CBA4C4A4A4A4C6.pdf
-# The text in the document do instruct a fall back to occur at
-# September 11, 13pm in summer time, while ordinary citizens can
-# change the clock before they sleep.
-#
-# From Paul Eggert (2018-09-27):
-# This instruction is equivalent to "Sat>=8 25:00", so use that. zic treats
-# it like "Sun>=9 01:00", which is not quite the same but is the best we can
-# do in any POSIX or C platform. The "25:00" assumes zic from 2007 or later,
-# which should be safe now.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Japan 1948 only - May Sat>=1 24:00 1:00 D
-Rule Japan 1948 1951 - Sep Sun>=9 1:00 0 S
-Rule Japan 1949 only - Apr Sat>=1 24:00 1:00 D
-Rule Japan 1950 1951 - May Sat>=1 24:00 1:00 D
-
-# From Hideyuki Suzuki (1998-11-09):
-# 'Tokyo' usually stands for the former location of Tokyo Astronomical
-# Observatory: 139° 44' 40.90" E (9h 18m 58.727s), 35° 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).
-# The law is enacted on 1886-07-07.
-
-# From Hideyuki Suzuki (1998-11-16):
-# The ordinance No. 51 (1886) established "standard time" in Japan,
-# which stands for the time on 135° 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 120° 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....
-#
-# I wrote "ordinance" above, but I don't know how to translate.
-# In Japanese it's "chokurei", which means ordinance from emperor.
-
-# 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.
-# https://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 (UT+9). The adoption began on Oct 1, 1937.
-# https://ja.wikisource.org/wiki/ææČ»äșćć
«ćčŽć
什珏çŸć
ćäžèæšæșæăéăčă«ä»¶äžæčæŁă件
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
- 9:00 Japan J%sT
-# Since 1938, all Japanese possessions have been like Asia/Tokyo,
-# except that Truk (Chuuk), Ponape (Pohnpei), and Jaluit (Kosrae) did not
-# switch from +10 to +09 until 1941-04-01; see the 'australasia' file.
-
-# Jordan
-#
-# From <http://star.arabia.com/990701/JO9.html>
-# Jordan Week (1999-07-01) via Steffen Thorsen (1999-09-09):
-# Clocks in Jordan were forwarded one hour on Wednesday at midnight,
-# in accordance with the government's decision to implement summer time
-# all year round.
-#
-# From <http://star.arabia.com/990930/JO9.html>
-# Jordan Week (1999-09-30) via Steffen Thorsen (1999-11-09):
-# Winter time starts today Thursday, 30 September. Clocks will be turned back
-# by one hour. This is the latest government decision and it's final!
-# The decision was taken because of the increase in working hours in
-# government's departments from six to seven hours.
-#
-# From Paul Eggert (2005-11-22):
-# Starting 2003 transitions are from Steffen Thorsen's web site timeanddate.com.
-#
-# From Steffen Thorsen (2005-11-23):
-# For Jordan I have received multiple independent user reports every year
-# about DST end dates, as the end-rule is different every year.
-#
-# From Steffen Thorsen (2006-10-01), after a heads-up from Hilal Malawi:
-# http://www.petranews.gov.jo/nepras/2006/Sep/05/4000.htm
-# "Jordan will switch to winter time on Friday, October 27".
-#
-
-# 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:
-#
-# > The Council of Ministers decided in 2002 to adopt the principle of timely
-# > submission of the summer at 60 minutes as of midnight on the last Thursday
-# > of the month of March of each year.
-#
-# So - this means the midnight between Thursday and Friday since 2002.
-
-# From Arthur David Olson (2009-04-06):
-# We still have Jordan switching to DST on Thursdays in 2000 and 2001.
-
-# From Steffen Thorsen (2012-10-25):
-# Yesterday the government in Jordan announced that they will not
-# switch back to standard time this winter, so the will stay on DST
-# until about the same time next year (at least).
-# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?NewsID=88950
-
-# From Steffen Thorsen (2013-12-11):
-# Jordan Times and other sources say that Jordan is going back to
-# UTC+2 on 2013-12-19 at midnight:
-# http://jordantimes.com/govt-decides-to-switch-back-to-wintertime
-# Official, in Arabic:
-# http://www.petra.gov.jo/public_news/Nws_NewsDetails.aspx?Menu_ID=&Site_Id=2&lang=1&NewsID=133230&CatID=14
-# ... Our background/permalink about it
-# https://www.timeanddate.com/news/time/jordan-reverses-dst-decision.html
-# ...
-# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?lang=2&site_id=1&NewsID=133313&Type=P
-# ... says midnight for the coming one and 1:00 for the ones in the future
-# (and they will use DST again next year, using the normal schedule).
-
-# From Paul Eggert (2013-12-11):
-# As Steffen suggested, consider the past 21-month experiment to be DST.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Jordan 1973 only - Jun 6 0:00 1:00 S
-Rule Jordan 1973 1975 - Oct 1 0:00 0 -
-Rule Jordan 1974 1977 - May 1 0:00 1:00 S
-Rule Jordan 1976 only - Nov 1 0:00 0 -
-Rule Jordan 1977 only - Oct 1 0:00 0 -
-Rule Jordan 1978 only - Apr 30 0:00 1:00 S
-Rule Jordan 1978 only - Sep 30 0:00 0 -
-Rule Jordan 1985 only - Apr 1 0:00 1:00 S
-Rule Jordan 1985 only - Oct 1 0:00 0 -
-Rule Jordan 1986 1988 - Apr Fri>=1 0:00 1:00 S
-Rule Jordan 1986 1990 - Oct Fri>=1 0:00 0 -
-Rule Jordan 1989 only - May 8 0:00 1:00 S
-Rule Jordan 1990 only - Apr 27 0:00 1:00 S
-Rule Jordan 1991 only - Apr 17 0:00 1:00 S
-Rule Jordan 1991 only - Sep 27 0:00 0 -
-Rule Jordan 1992 only - Apr 10 0:00 1:00 S
-Rule Jordan 1992 1993 - Oct Fri>=1 0:00 0 -
-Rule Jordan 1993 1998 - Apr Fri>=1 0:00 1:00 S
-Rule Jordan 1994 only - Sep Fri>=15 0:00 0 -
-Rule Jordan 1995 1998 - Sep Fri>=15 0:00s 0 -
-Rule Jordan 1999 only - Jul 1 0:00s 1:00 S
-Rule Jordan 1999 2002 - Sep lastFri 0:00s 0 -
-Rule Jordan 2000 2001 - Mar lastThu 0:00s 1:00 S
-Rule Jordan 2002 2012 - Mar lastThu 24:00 1:00 S
-Rule Jordan 2003 only - Oct 24 0:00s 0 -
-Rule Jordan 2004 only - Oct 15 0:00s 0 -
-Rule Jordan 2005 only - Sep lastFri 0:00s 0 -
-Rule Jordan 2006 2011 - Oct lastFri 0:00s 0 -
-Rule Jordan 2013 only - Dec 20 0:00 0 -
-Rule Jordan 2014 max - Mar lastThu 24:00 1:00 S
-Rule Jordan 2014 max - Oct lastFri 0:00s 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Amman 2:23:44 - LMT 1931
- 2:00 Jordan EE%sT
-
-
-# Kazakhstan
-
-# From Kazakhstan Embassy's News Bulletin No. 11
-# <http://www.kazsociety.org.uk/news/2005/03/30.htm> (2005-03-21):
-# The Government of Kazakhstan passed a resolution March 15 abolishing
-# daylight saving time citing lack of economic benefits and health
-# complications coupled with a decrease in productivity.
-#
-# From Branislav Kojic (in Astana) via Gwillim Law (2005-06-28):
-# ... what happened was that the former Kazakhstan Eastern time zone
-# was "blended" with the Central zone. Therefore, Kazakhstan now has
-# two time zones, and difference between them is one hour. The zone
-# closer to UTC is the former Western zone (probably still called the
-# same), encompassing four provinces in the west: Aqtöbe, Atyraƫ,
-# Mangghystaƫ, and West Kazakhstan. The other zone encompasses
-# everything else.... I guess that would make Kazakhstan time zones
-# de jure UTC+5 and UTC+6 respectively.
-
-# From Stepan Golosunov (2016-03-27):
-# Review of the linked documents from http://adilet.zan.kz/
-# produced the following data for post-1991 Kazakhstan:
-#
-# 0. Act of the Cabinet of Ministers of the USSR
-# from 1991-02-04 No. 20
-# http://pravo.gov.ru/proxy/ips/?docbody=&nd=102010545
-# removed the extra hour ("decree time") on the territory of the USSR
-# starting with the last Sunday of March 1991.
-# It also allowed (but not mandated) Kazakh SSR, Kirghiz SSR, Tajik SSR,
-# Turkmen SSR and Uzbek SSR to not have "summer" time.
-#
-# The 1992-01-13 act also refers to the act of the Cabinet of Ministers
-# of the Kazakh SSR from 1991-03-20 No. 170 "About the act of the Cabinet
-# of Ministers of the USSR from 1991-02-04 No. 20" but I didn't found its
-# text.
-#
-# According to Izvestia newspaper No. 68 (23334) from 1991-03-20
-# (page 6; available at http://libinfo.org/newsr/newsr2574.djvu via
-# http://libinfo.org/index.php?id=58564) on 1991-03-31 at 2:00 during
-# transition to "summer" time:
-# Republic of Georgia, Latvian SSR, Lithuanian SSR, SSR Moldova,
-# Estonian SSR; Komi ASSR; Kaliningrad oblast; Nenets autonomous okrug
-# were to move clocks 1 hour forward.
-# Kazakh SSR (excluding Uralsk oblast); Republic of Kyrgyzstan, Tajik
-# SSR; Andijan, Jizzakh, Namangan, Sirdarya, Tashkent, Fergana oblasts
-# of the Uzbek SSR were to move clocks 1 hour backwards.
-# Other territories were to not move clocks.
-# When the "summer" time would end on 1991-09-29, clocks were to be
-# moved 1 hour backwards on the territory of the USSR excluding
-# Kazakhstan, Kirghizia, Uzbekistan, Turkmenia, Tajikistan.
-#
-# Apparently there were last minute changes. Apparently Kazakh act No. 170
-# was one of such changes.
-#
-# https://ru.wikipedia.org/wiki/ĐĐ”ĐșŃĐ”ŃĐœĐŸĐ” ĐČŃĐ”ĐŒŃ
-# claims that Sovetskaya Rossiya newspaper on 1991-03-29 published that
-# Nenets autonomous okrug, Komi and Kazakhstan (excluding Uralsk oblast)
-# were to not move clocks and Uralsk oblast was to move clocks
-# forward; on 1991-09-29 Kazakhstan was to move clocks backwards.
-# (Probably there were changes even after that publication. There is an
-# article claiming that Kaliningrad oblast decided on 1991-03-29 to not
-# move clocks.)
-#
-# This implies that on 1991-03-31 Asia/Oral remained on +04/+05 while
-# the rest of Kazakhstan switched from +06/+07 to +05/06 or from +05/06
-# to +04/+05. It's unclear how Qyzylorda oblast moved into the fifth
-# time belt. (By switching from +04/+05 to +05/+06 on 1991-09-29?) ...
-#
-# 1. Act of the Cabinet of Ministers of the Republic of Kazakhstan
-# from 1992-01-13 No. 28
-# http://adilet.zan.kz/rus/docs/P920000028_
-# (text includes modification from the 1996 act)
-# introduced new rules for calculation of time, mirroring Russian
-# 1992-01-08 act. It specified that time would be calculated
-# according to time belts plus extra hour ("decree time"), moved clocks
-# on the whole territory of Kazakhstan 1 hour forward on 1992-01-19 at
-# 2:00, specified DST rules. It acknowledged that Kazakhstan was
-# located in the fourth and the fifth time belts and specified the
-# border between them to be located east of Qostanay and Aktyubinsk
-# oblasts (notably including Turgai and Qyzylorda oblasts into the fifth
-# time belt).
-#
-# This means switch on 1992-01-19 at 2:00 from +04/+05 to +05/+06 for
-# Asia/Aqtau, Asia/Aqtobe, Asia/Oral, Atyraƫ and Qostanay oblasts; from
-# +05/+06 to +06/+07 for Asia/Almaty and Asia/Qyzylorda (and Arkalyk)....
-#
-# 2. Act of the Cabinet of Ministers of the Republic of Kazakhstan
-# from 1992-03-27 No. 284
-# http://adilet.zan.kz/rus/docs/P920000284_
-# cancels extra hour ("decree time") for Uralsk and Qyzylorda oblasts
-# since the last Sunday of March 1992, while keeping them in the fourth
-# and the fifth time belts respectively.
-#
-# 3. Order of the Prime Minister of the Republic of Kazakhstan
-# from 1994-09-23 No. 384
-# http://adilet.zan.kz/rus/docs/R940000384_
-# cancels the extra hour ("decree time") on the territory of Mangghystaƫ
-# oblast since the last Sunday of September 1994 (saying that time on
-# the territory would correspond to the third time belt as a
-# result)....
-#
-# 4. Act of the Government of the Republic of Kazakhstan
-# from 1996-05-08 No. 575
-# http://adilet.zan.kz/rus/docs/P960000575_
-# amends the 1992-01-13 act to end summer time in October instead
-# of September, mirroring identical Russian change from 1996-04-23 act.
-#
-# 5. Act of the Government of the Republic of Kazakhstan
-# from 1999-03-26 No. 305
-# http://adilet.zan.kz/rus/docs/P990000305_
-# cancels the extra hour ("decree time") for Atyraƫ oblast since the
-# last Sunday of March 1999 while retaining the oblast in the fourth
-# time belt.
-#
-# This means change from +05/+06 to +04/+05....
-#
-# 6. Act of the Government of the Republic of Kazakhstan
-# from 2000-11-23 No. 1749
-# http://adilet.zan.kz/rus/archive/docs/P000001749_/23.11.2000
-# replaces the previous five documents.
-#
-# The only changes I noticed are in definition of the border between the
-# fourth and the fifth time belts. They account for changes in spelling
-# and administrative division (splitting of Turgai oblast in 1997
-# probably changed time in territories incorporated into Qostanay oblast
-# (including Arkalyk) from +06/+07 to +05/+06) and move Qyzylorda oblast
-# from being in the fifth time belt and not using decree time into the
-# fourth time belt (no change in practice).
-#
-# 7. Act of the Government of the Republic of Kazakhstan
-# from 2003-12-29 No. 1342
-# http://adilet.zan.kz/rus/docs/P030001342_
-# modified the 2000-11-23 act. No relevant changes, apparently.
-#
-# 8. Act of the Government of the Republic of Kazakhstan
-# from 2004-07-20 No. 775
-# http://adilet.zan.kz/rus/archive/docs/P040000775_/20.07.2004
-# modified the 2000-11-23 act to move Qostanay and Qyzylorda oblasts into
-# the fifth time belt and add Aktobe oblast to the list of regions not
-# using extra hour ("decree time"), leaving Kazakhstan with only 2 time
-# zones (+04/+05 and +06/+07). The changes were to be implemented
-# during DST transitions in 2004 and 2005 but the acts got radically
-# amended before implementation happened.
-#
-# 9. Act of the Government of the Republic of Kazakhstan
-# from 2004-09-15 No. 1059
-# http://adilet.zan.kz/rus/docs/P040001059_
-# modified the 2000-11-23 act to remove exceptions from the "decree time"
-# (leaving Kazakhstan in +05/+06 and +06/+07 zones), amended the
-# 2004-07-20 act to implement changes for Atyraƫ, West Kazakhstan,
-# Qostanay, Qyzylorda and Mangghystaƫ oblasts by not moving clocks
-# during the 2004 transition to "winter" time.
-#
-# This means transition from +04/+05 to +05/+06 for Atyraƫ oblast (no
-# zone currently), Asia/Oral, Asia/Aqtau and transition from +05/+06 to
-# +06/+07 for Qostanay oblast (Qostanay and Arkalyk, no zones currently)
-# and Asia/Qyzylorda on 2004-10-31 at 3:00....
-#
-# 10. Act of the Government of the Republic of Kazakhstan
-# from 2005-03-15 No. 231
-# http://adilet.zan.kz/rus/docs/P050000231_
-# removes DST provisions from the 2000-11-23 act, removes most of the
-# (already implemented) provisions from the 2004-07-20 and 2004-09-15
-# acts, comes into effect 10 days after official publication.
-# The only practical effect seems to be the abolition of the summer
-# time.
-#
-# Unamended version of the act of the Government of the Russian Federation
-# No. 23 from 1992-01-08 [See 'europe' file for details].
-# Kazakh 1992-01-13 act appears to provide the same rules and 1992-03-27
-# act was to be enacted on the last Sunday of March 1992.
-
-# From Stepan Golosunov (2016-11-08):
-# Turgai reorganization should affect only southern part of Qostanay
-# oblast. Which should probably be separated into Asia/Arkalyk zone.
-# (There were also 1970, 1988 and 1990 Turgai oblast reorganizations
-# according to wikipedia.)
-#
-# [For Qostanay] http://www.ng.kz/gazeta/195/hranit/
-# suggests that clocks were to be moved 40 minutes backwards on
-# 1920-01-01 to the fourth time belt. But I do not understand
-# how that could happen....
-#
-# [For Atyrau and Oral] 1919 decree
-# (http://www.worldtimezone.com/dst_news/dst_news_russia-1919-02-08.html
-# and in Byalokoz) lists Ural river (plus 10 versts on its left bank) in
-# the third time belt (before 1930 this means +03).
-
-# From Alexander Konzurovski (2018-12-20):
-# Qyzyolrda Region (Asia/Qyzylorda) is changing its time zone from
-# UTC+6 to UTC+5 effective December 21st, 2018. The legal document is
-# located here: http://adilet.zan.kz/rus/docs/P1800000817 (russian language).
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-#
-# Almaty (formerly Alma-Ata), representing most locations in Kazakhstan
-# This includes KZ-AKM, KZ-ALA, KZ-ALM, KZ-AST, KZ-BAY, KZ-VOS, KZ-ZHA,
-# KZ-KAR, KZ-SEV, KZ-PAV, and KZ-YUZ.
-Zone Asia/Almaty 5:07:48 - LMT 1924 May 2 # or Alma-Ata
- 5:00 - +05 1930 Jun 21
- 6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
- 5:00 RussiaAsia +05/+06 1992 Jan 19 2:00s
- 6:00 RussiaAsia +06/+07 2004 Oct 31 2:00s
- 6:00 - +06
-# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) (KZ-KZY)
-Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2
- 4:00 - +04 1930 Jun 21
- 5:00 - +05 1981 Apr 1
- 5:00 1:00 +06 1981 Oct 1
- 6:00 - +06 1982 Apr 1
- 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
- 4:00 RussiaAsia +04/+05 1991 Sep 29 2:00s
- 5:00 RussiaAsia +05/+06 1992 Jan 19 2:00s
- 6:00 RussiaAsia +06/+07 1992 Mar 29 2:00s
- 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
- 6:00 - +06 2018 Dec 21 0:00
- 5:00 - +05
-#
-# Qostanay (aka Kostanay, Kustanay) (KZ-KUS)
-# The 1991/2 rules are unclear partly because of the 1997 Turgai
-# reorganization.
-Zone Asia/Qostanay 4:14:28 - LMT 1924 May 2
- 4:00 - +04 1930 Jun 21
- 5:00 - +05 1981 Apr 1
- 5:00 1:00 +06 1981 Oct 1
- 6:00 - +06 1982 Apr 1
- 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
- 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
- 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
- 6:00 - +06
-
-# Aqtöbe (aka Aktobe, formerly Aktyubinsk) (KZ-AKT)
-Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2
- 4:00 - +04 1930 Jun 21
- 5:00 - +05 1981 Apr 1
- 5:00 1:00 +06 1981 Oct 1
- 6:00 - +06 1982 Apr 1
- 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
- 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
- 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
- 5:00 - +05
-# Mangghystaƫ (KZ-MAN)
-# Aqtau was not founded until 1963, but it represents an inhabited region,
-# so include timestamps before 1963.
-Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2
- 4:00 - +04 1930 Jun 21
- 5:00 - +05 1981 Oct 1
- 6:00 - +06 1982 Apr 1
- 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
- 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
- 5:00 RussiaAsia +05/+06 1994 Sep 25 2:00s
- 4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s
- 5:00 - +05
-# Atyraƫ (KZ-ATY) is like Mangghystaƫ except it switched from
-# +04/+05 to +05/+06 in spring 1999, not fall 1994.
-Zone Asia/Atyrau 3:27:44 - LMT 1924 May 2
- 3:00 - +03 1930 Jun 21
- 5:00 - +05 1981 Oct 1
- 6:00 - +06 1982 Apr 1
- 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
- 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
- 5:00 RussiaAsia +05/+06 1999 Mar 28 2:00s
- 4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s
- 5:00 - +05
-# West Kazakhstan (KZ-ZAP)
-# From Paul Eggert (2016-03-18):
-# The 1989 transition is from USSR act No. 227 (1989-03-14).
-Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk
- 3:00 - +03 1930 Jun 21
- 5:00 - +05 1981 Apr 1
- 5:00 1:00 +06 1981 Oct 1
- 6:00 - +06 1982 Apr 1
- 5:00 RussiaAsia +05/+06 1989 Mar 26 2:00s
- 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
- 5:00 RussiaAsia +05/+06 1992 Mar 29 2:00s
- 4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s
- 5:00 - +05
-
-# Kyrgyzstan (Kirgizstan)
-# Transitions through 1991 are from Shanks & Pottenger.
-
-# 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):
-# Our government cancels daylight saving time 6th of August 2005.
-# From 2005-08-12 our GMT-offset is +6, w/o any daylight saving.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Kyrgyz 1992 1996 - Apr Sun>=7 0:00s 1:00 -
-Rule Kyrgyz 1992 1996 - Sep lastSun 0:00 0 -
-Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 -
-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 - +05 1930 Jun 21
- 6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
- 5:00 RussiaAsia +05/+06 1991 Aug 31 2:00
- 5:00 Kyrgyz +05/+06 2005 Aug 12
- 6:00 - +06
-
-###############################################################################
-
-# Korea (North and South)
-
-# From Annie I. Bang (2006-07-10):
-# http://www.koreaherald.com/view.php?ud=200607100012
-# Korea ran a daylight saving program from 1949-61 but stopped it
-# during the 1950-53 Korean War. The system was temporarily enforced
-# between 1987 and 1988 ...
-
-# From Sanghyuk Jung (2014-10-29):
-# https://mm.icann.org/pipermail/tz/2014-October/021830.html
-# According to the Korean Wikipedia
-# https://ko.wikipedia.org/wiki/íê”_íì€ì
-# [oldid=12896437 2014-09-04 08:03 UTC]
-# DST in Republic of Korea was as follows.... And I checked old
-# newspapers in Korean, all articles correspond with data in Wikipedia.
-# For example, the article in 1948 (Korean Language) proved that DST
-# started at June 1 in that year. For another example, the article in
-# 1988 said that DST started at 2:00 AM in that year.
-
-# From Phake Nick (2018-10-27):
-# 1. According to official announcement from Korean government, the DST end
-# date in South Korea should be
-# 1955-09-08 without specifying time
-# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027977557
-# 1956-09-29 without specifying time
-# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027978341
-# 1957-09-21 24 o'clock
-# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027979690#3
-# 1958-09-20 24 o'clock
-# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027981189
-# 1959-09-19 24 o'clock
-# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0027982974#2
-# 1960-09-17 24 o'clock
-# http://theme.archives.go.kr/next/common/viewEbook.do?singleData=N&archiveEventId=0028044104
-# ...
-# 2.... https://namu.wiki/w/ëíëŻŒê”%20íì€ì ... [says]
-# when Korea was using GMT+8:30 as standard time, the international
-# aviation/marine/meteorological industry in the country refused to
-# follow and continued to use GMT+9:00 for interoperability.
-
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule ROK 1948 only - Jun 1 0:00 1:00 D
-Rule ROK 1948 only - Sep 12 24:00 0 S
-Rule ROK 1949 only - Apr 3 0:00 1:00 D
-Rule ROK 1949 1951 - Sep Sat>=7 24:00 0 S
-Rule ROK 1950 only - Apr 1 0:00 1:00 D
-Rule ROK 1951 only - May 6 0:00 1:00 D
-Rule ROK 1955 only - May 5 0:00 1:00 D
-Rule ROK 1955 only - Sep 8 24:00 0 S
-Rule ROK 1956 only - May 20 0:00 1:00 D
-Rule ROK 1956 only - Sep 29 24:00 0 S
-Rule ROK 1957 1960 - May Sun>=1 0:00 1:00 D
-Rule ROK 1957 1960 - Sep Sat>=17 24:00 0 S
-Rule ROK 1987 1988 - May Sun>=8 2:00 1:00 D
-Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S
-
-# From Paul Eggert (2016-08-23):
-# The Korean Wikipedia entry gives the following sources for UT offsets:
-#
-# 1908: Official Journal Article No. 3994 (decree No. 5)
-# 1912: Governor-General of Korea Official Gazette Issue No. 367
-# (Announcement No. 338)
-# 1954: Presidential Decree No. 876 (1954-03-17)
-# 1961: Law No. 676 (1961-08-07)
-#
-# (Another source "1987: Law No. 3919 (1986-12-31)" was in the 2014-10-30
-# edition of the Korean Wikipedia entry.)
-#
-# 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.
-#
-# For Pyongyang, guess no changes from World War II until 2015, as we
-# have no information otherwise.
-
-# From Steffen Thorsen (2015-08-07):
-# According to many news sources, North Korea is going to change to
-# the 8:30 time zone on August 15, one example:
-# http://www.bbc.com/news/world-asia-33815049
-#
-# From Paul Eggert (2015-08-15):
-# Bells rang out midnight (00:00) Friday as part of the celebrations. See:
-# Talmadge E. North Korea celebrates new time zone, 'Pyongyang Time'
-# http://news.yahoo.com/north-korea-celebrates-time-zone-pyongyang-time-164038128.html
-# There is no common English-language abbreviation for this time zone.
-# Use KST, as that's what we already use for 1954-1961 in ROK.
-
-# From Kang Seonghoon (2018-04-29):
-# North Korea will revert its time zone from UTC+8:30 (PYT; Pyongyang
-# Time) back to UTC+9 (KST; Korea Standard Time).
-#
-# From Seo Sanghyeon (2018-04-30):
-# Rodong Sinmun 2018-04-30 announced Pyongyang Time transition plan.
-# https://www.nknews.org/kcna/wp-content/uploads/sites/5/2018/04/rodong-2018-04-30.pdf
-# ... the transition date is 2018-05-05 ... Citation should be Decree
-# No. 2232 of April 30, 2018, of the Presidium of the Supreme People's
-# Assembly, as published in Rodong Sinmun.
-# From Tim Parenti (2018-04-29):
-# It appears to be the front page story at the top in the right-most column.
-#
-# From Paul Eggert (2018-05-04):
-# The BBC reported that the transition was from 23:30 to 24:00 today.
-# https://www.bbc.com/news/world-asia-44010705
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Seoul 8:27:52 - LMT 1908 Apr 1
- 8:30 - KST 1912 Jan 1
- 9:00 - JST 1945 Sep 8
- 9:00 - KST 1954 Mar 21
- 8:30 ROK K%sT 1961 Aug 10
- 9:00 ROK K%sT
-Zone Asia/Pyongyang 8:23:00 - LMT 1908 Apr 1
- 8:30 - KST 1912 Jan 1
- 9:00 - JST 1945 Aug 24
- 9:00 - KST 2015 Aug 15 00:00
- 8:30 - KST 2018 May 4 23:30
- 9:00 - KST
-
-###############################################################################
-
-# Kuwait
-# See Asia/Riyadh.
-
-# Laos
-# See Asia/Bangkok.
-
-
-# Lebanon
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Lebanon 1920 only - Mar 28 0:00 1:00 S
-Rule Lebanon 1920 only - Oct 25 0:00 0 -
-Rule Lebanon 1921 only - Apr 3 0:00 1:00 S
-Rule Lebanon 1921 only - Oct 3 0:00 0 -
-Rule Lebanon 1922 only - Mar 26 0:00 1:00 S
-Rule Lebanon 1922 only - Oct 8 0:00 0 -
-Rule Lebanon 1923 only - Apr 22 0:00 1:00 S
-Rule Lebanon 1923 only - Sep 16 0:00 0 -
-Rule Lebanon 1957 1961 - May 1 0:00 1:00 S
-Rule Lebanon 1957 1961 - Oct 1 0:00 0 -
-Rule Lebanon 1972 only - Jun 22 0:00 1:00 S
-Rule Lebanon 1972 1977 - Oct 1 0:00 0 -
-Rule Lebanon 1973 1977 - May 1 0:00 1:00 S
-Rule Lebanon 1978 only - Apr 30 0:00 1:00 S
-Rule Lebanon 1978 only - Sep 30 0:00 0 -
-Rule Lebanon 1984 1987 - May 1 0:00 1:00 S
-Rule Lebanon 1984 1991 - Oct 16 0:00 0 -
-Rule Lebanon 1988 only - Jun 1 0:00 1:00 S
-Rule Lebanon 1989 only - May 10 0:00 1:00 S
-Rule Lebanon 1990 1992 - May 1 0:00 1:00 S
-Rule Lebanon 1992 only - Oct 4 0:00 0 -
-Rule Lebanon 1993 max - Mar lastSun 0:00 1:00 S
-Rule Lebanon 1993 1998 - Sep lastSun 0:00 0 -
-Rule Lebanon 1999 max - Oct lastSun 0:00 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Beirut 2:22:00 - LMT 1880
- 2:00 Lebanon EE%sT
-
-# Malaysia
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 -
-Rule NBorneo 1935 1941 - Dec 14 0:00 0 -
-#
-# peninsular Malaysia
-# 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.
- 7:00 - +07 1933 Jan 1
- 7:00 0:20 +0720 1936 Jan 1
- 7:20 - +0720 1941 Sep 1
- 7:30 - +0730 1942 Feb 16
- 9:00 - +09 1945 Sep 12
- 7:30 - +0730 1982 Jan 1
- 8:00 - +08
-# Sabah & Sarawak
-# 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 - +0730 1933
- 8:00 NBorneo +08/+0820 1942 Feb 16
- 9:00 - +09 1945 Sep 12
- 8:00 - +08
-
-# Maldives
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Maldives 4:54:00 - LMT 1880 # Malé
- 4:54:00 - MMT 1960 # Malé Mean Time
- 5:00 - +05
-
-# Mongolia
-
-# Shanks & Pottenger say that Mongolia has three time zones, but
-# 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
-# <http://www.mongoliatourism.gov.mn/general.htm> (1999-09)
-# "Time: Mongolia has two time zones. Three westernmost provinces of
-# 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."
-
-# From Rives McDow (1999-12-13):
-# Mongolia discontinued the use of daylight savings time in 1999; 1998
-# being the last year it was implemented. The dates of implementation I am
-# unsure of, but most probably it was similar to Russia, except for the time
-# 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,
-# SĂŒkhbaatar, and possibly Khentii.
-
-# From Paul Eggert (1999-12-15):
-# Naming and spelling is tricky in Mongolia.
-# We'll use Hovd (also spelled Chovd and Khovd) to represent the west zone;
-# the capital of the Hovd province is sometimes called Hovd, sometimes Dund-Us,
-# and sometimes Jirgalanta (with variant spellings), but the name Hovd
-# is good enough for our purposes.
-
-# From Rives McDow (2001-05-13):
-# In addition to Mongolia starting daylight savings as reported earlier
-# (adopted DST on 2001-04-27 02:00 local time, ending 2001-09-28),
-# there are three time zones.
-#
-# 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.]
-
-# From Ganbold Ts., Ulaanbaatar (2004-04-17):
-# Daylight saving occurs at 02:00 local time last Saturday of March.
-# It will change back to normal at 02:00 local time last Saturday of
-# September.... As I remember this rule was changed in 2001.
-#
-# From Paul Eggert (2004-04-17):
-# For now, assume Rives McDow's informant got confused about Friday vs
-# Saturday, and that his 2001 dates should have 1 added to them.
-
-# From Paul Eggert (2005-07-26):
-# 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 NykÀnen (2005-05-16) reports that
-# travelmongolia.org says there are two time zones (UT +07, +08) 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 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.
-
-# From Ganbold Ts. (2007-02-26):
-# Parliament of Mongolia has just changed the daylight-saving rule in February.
-# They decided not to adopt daylight-saving time....
-# http://www.mongolnews.mn/index.php?module=unuudur&sec=view&id=15742
-
-# From Deborah Goldsmith (2008-03-30):
-# We received a bug report claiming that the tz database UTC offset for
-# Asia/Choibalsan (GMT+09:00) is incorrect, and that it should be GMT
-# +08:00 instead. Different sources appear to disagree with the tz
-# database on this, e.g.:
-#
-# https://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 Ulaanbaatar arrive
-# about 1:35 - 1:50 hours later in local clock time, no matter the
-# 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
-# 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.
-# XXX--in the absence of better information, assume that transition
-# was at the start of 2008-03-31 (the day of Steffen Thorsen's report);
-# this is almost surely wrong.
-
-# From Ganbold Tsagaankhuu (2015-03-10):
-# It seems like yesterday Mongolian Government meeting has concluded to use
-# daylight saving time in Mongolia.... Starting at 2:00AM of last Saturday of
-# March 2015, daylight saving time starts. And 00:00AM of last Saturday of
-# September daylight saving time ends. Source:
-# http://zasag.mn/news/view/8969
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Mongol 1983 1984 - Apr 1 0:00 1:00 -
-Rule Mongol 1983 only - Oct 1 0:00 0 -
-# Shanks & Pottenger and IATA SSIM say 1990s switches occurred at 00:00,
-# but McDow says the 2001 switches occurred at 02:00. Also, IATA SSIM
-# (1996-09) says 1996-10-25. Go with Shanks & Pottenger through 1998.
-#
-# Shanks & Pottenger say that the Sept. 1984 through Sept. 1990 switches
-# in Choibalsan (more precisely, in Dornod and 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
-# in the latest edition; so ignore it for now.
-
-# From Ganbold Tsagaankhuu (2017-02-09):
-# Mongolian Government meeting has concluded today to cancel daylight
-# saving time adoption in Mongolia. Source: http://zasag.mn/news/view/16192
-
-Rule Mongol 1985 1998 - Mar lastSun 0:00 1:00 -
-Rule Mongol 1984 1998 - Sep lastSun 0:00 0 -
-# IATA SSIM (1999-09) says Mongolia no longer observes DST.
-Rule Mongol 2001 only - Apr lastSat 2:00 1:00 -
-Rule Mongol 2001 2006 - Sep lastSat 2:00 0 -
-Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 -
-Rule Mongol 2015 2016 - Mar lastSat 2:00 1:00 -
-Rule Mongol 2015 2016 - Sep lastSat 0:00 0 -
-
-# 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 - +06 1978
- 7:00 Mongol +07/+08
-# Ulaanbaatar, a.k.a. Ulan Bataar, Ulan Bator, Urga
-Zone Asia/Ulaanbaatar 7:07:32 - LMT 1905 Aug
- 7:00 - +07 1978
- 8:00 Mongol +08/+09
-# Choibalsan, a.k.a. Bajan TĂŒmen, Bajan Tumen, Chojbalsan,
-# Choybalsan, Sanbejse, Tchoibalsan
-Zone Asia/Choibalsan 7:38:00 - LMT 1905 Aug
- 7:00 - +07 1978
- 8:00 - +08 1983 Apr
- 9:00 Mongol +09/+10 2008 Mar 31
- 8:00 Mongol +08/+09
-
-# Nepal
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Kathmandu 5:41:16 - LMT 1920
- 5:30 - +0530 1986
- 5:45 - +0545
-
-# Oman
-# See Asia/Dubai.
-
-# Pakistan
-
-# From Rives McDow (2002-03-13):
-# I have been advised that Pakistan has decided to adopt dst on a
-# TRIAL basis for one year, starting 00:01 local time on April 7, 2002
-# and ending at 00:01 local time October 6, 2002. This is what I was
-# told, but I believe that the actual time of change may be 00:00; the
-# 00:01 was to make it clear which day it was on.
-
-# From Paul Eggert (2002-03-15):
-# 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
-# Saturday and Sunday of April and revert to the original position on
-# 15th October each year". This agrees with McDow's 04-07 at 00:00,
-# but disagrees about the October transition, and makes it sound like
-# it's not on a trial basis. Also, the "between the first Saturday
-# and Sunday of April" phrase, if taken literally, means that the
-# transition takes place at 00:00 on the first Sunday on or after 04-02.
-
-# From Paul Eggert (2003-02-09):
-# DAWN <http://www.dawn.com/2002/10/06/top13.htm> reported on 2002-10-05
-# that 2002 DST ended that day at midnight. Go with McDow for now.
-
-# From Steffen Thorsen (2003-03-14):
-# According to http://www.dawn.com/2003/03/07/top15.htm
-# there will be no DST in Pakistan this year:
-#
-# ISLAMABAD, March 6: Information and Media Development Minister Sheikh
-# Rashid Ahmed on Thursday said the cabinet had reversed a previous
-# decision to advance clocks by one hour in summer and put them back by
-# one hour in winter with the aim of saving light hours and energy.
-#
-# The minister told a news conference that the experiment had rather
-# shown 8 per cent higher consumption of electricity.
-
-# From Alex Krivenyshev (2008-05-15):
-#
-# 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. ...."
-#
-# http://www.worldtimezone.com/dst_news/dst_news_pakistan01.html
-# 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
-# instead of August 31.
-#
-# http://www.worldtimezone.com/dst_news/dst_news_pakistan02.html
-# 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
-#
-# 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
-# http://www.worldtimezone.com/dst_news/dst_news_pakistan05.html
-#
-# ....
-# The Federal Cabinet on Wednesday approved the proposal to
-# advance clocks in the country by one hour from April 15 to
-# conserve energy"
-
-# From Steffen Thorsen (2009-09-17):
-# "The News International," Pakistan reports that: "The Federal
-# Government has decided to restore the previous time by moving the
-# 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.
-#
-# "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
-# http://www.worldtimezone.com/dst_news/dst_news_pakistan07.htm
-#
-# 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."
-#
-# And more importantly, it seems that these dates will be kept every year:
-# "It has now been decided that clocks will be wound forward by one hour
-# on April 15 and reversed by an hour on November 1 every year without
-# obtaining prior approval, the officials added."
-#
-# We have confirmed this year's end date with both with the Ministry of
-# Water and Power and the Pakistan Electric Power Company:
-# https://www.timeanddate.com/news/time/pakistan-ends-dst09.html
-
-# 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.
-
-# From Steffen Thorsen (2010-03-26):
-# Steffen Thorsen wrote:
-# > On Thursday (2010-03-25) it was announced that DST would start in
-# > Pakistan on 2010-04-01.
-# >
-# > Then today, the president said that they might have to revert the
-# > decision if it is not supported by the parliament. So at the time
-# > being, it seems unclear if DST will be actually observed or not - but
-# > April 1 could be a more likely date than April 15.
-# 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:00 1:00 S
-Rule Pakistan 2002 only - Oct Sun>=2 0:00 0 -
-Rule Pakistan 2008 only - Jun 1 0:00 1:00 S
-Rule Pakistan 2008 2009 - Nov 1 0:00 0 -
-Rule Pakistan 2009 only - Apr 15 0:00 1:00 S
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Karachi 4:28:12 - LMT 1907
- 5:30 - +0530 1942 Sep
- 5:30 1:00 +0630 1945 Oct 15
- 5:30 - +0530 1951 Sep 30
- 5:00 - +05 1971 Mar 26
- 5:00 Pakistan PK%sT # Pakistan Time
-
-# Palestine
-
-# From Amos Shapir (1998-02-15):
-#
-# From 1917 until 1948-05-15, all of Palestine, including the parts now
-# known as the Gaza Strip and the West Bank, was under British rule.
-# Therefore the rules given for Israel for that period, apply there too...
-#
-# The Gaza Strip was under Egyptian rule between 1948-05-15 until 1967-06-05
-# (except a short occupation by Israel from 1956-11 till 1957-03, but no
-# time zone was affected then). It was never formally annexed to Egypt,
-# though.
-#
-# The rest of Palestine was under Jordanian rule at that time, formally
-# annexed in 1950 as the West Bank (and the word "Trans" was dropped from
-# the country's previous name of "the Hashemite Kingdom of the
-# Trans-Jordan"). So the rules for Jordan for that time apply. Major
-# towns in that area are Nablus (Shchem), El-Halil (Hebron), Ramallah, and
-# East Jerusalem.
-#
-# Both areas were occupied by Israel in June 1967, but not annexed (except
-# for East Jerusalem). They were on Israel time since then; there might
-# have been a Military Governor's order about time zones, but I'm not aware
-# of any (such orders may have been issued semi-annually whenever summer
-# time was in effect, but maybe the legal aspect of time was just neglected).
-#
-# The Palestinian Authority was established in 1993, and got hold of most
-# towns in the West Bank and Gaza by 1995. I know that in order to
-# demonstrate...independence, they have been switching to
-# summer time and back on a different schedule than Israel's, but I don't
-# know when this was started, or what algorithm is used (most likely the
-# Jordanian one).
-#
-# To summarize, the table should probably look something like that:
-#
-# Area \ when | 1918-1947 | 1948-1967 | 1967-1995 | 1996-
-# ------------+-----------+-----------+-----------+-----------
-# Israel | Zion | Zion | Zion | Zion
-# West bank | Zion | Jordan | Zion | Jordan
-# Gaza | Zion | Egypt | Zion | Jordan
-#
-# I guess more info may be available from the PA's web page (if/when they
-# have one).
-
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that Gaza did not observe DST until 1957, but go
-# with Shapir and assume that it observed DST from 1940 through 1947,
-# and that it used Jordanian rules starting in 1996.
-# We don't yet need a separate entry for the West Bank, since
-# the only differences between it and Gaza that we know about
-# occurred before our cutoff date of 1970.
-# However, as we get more information, we may need to add entries
-# for parts of the West Bank as they transitioned from Israel's rules
-# to Palestine's rules.
-
-# From IINS News Service - Israel - 1998-03-23 10:38:07 Israel time,
-# forwarded by Ephraim Silverberg:
-#
-# Despite the fact that Israel changed over to daylight savings time
-# last week, the PLO Authority (PA) has decided not to turn its clocks
-# one-hour forward at this time. As a sign of independence from Israeli rule,
-# the PA has decided to implement DST in April.
-
-# From Paul Eggert (1999-09-20):
-# 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,
-# and that they switch at 0:00 on the 3rd Fridays of April and October.
-
-# From Paul Eggert (2005-11-22):
-# Starting 2004 transitions are from Steffen Thorsen's web site timeanddate.com.
-
-# From Steffen Thorsen (2005-11-23):
-# A user from Gaza reported that Gaza made the change early because of
-# the Ramadan. Next year Ramadan will be even earlier, so I think
-# there is a good chance next year's end date will be around two weeks
-# earlier - the same goes for Jordan.
-
-# From Steffen Thorsen (2006-08-17):
-# I was informed by a user in Bethlehem that in Bethlehem it started the
-# same day as Israel, and after checking with other users in the area, I
-# was informed that they started DST one day after Israel. I was not
-# able to find any authoritative sources at the time, nor details if
-# Gaza changed as well, but presumed Gaza to follow the same rules as
-# the West Bank.
-
-# From Steffen Thorsen (2006-09-26):
-# according to the Palestine News Network (2006-09-19):
-# http://english.pnn.ps/index.php?option=com_content&task=view&id=596&Itemid=5
-# > The Council of Ministers announced that this year its winter schedule
-# > will begin early, as of midnight Thursday. It is also time to turn
-# > back the clocks for winter. Friday will begin an hour late this week.
-# I guess it is likely that next year's date will be moved as well,
-# because of the Ramadan.
-
-# 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.
-
-# From Paul Eggert (2007-09-20):
-# My understanding is that Gaza and the West Bank disagree even over when
-# the weekend is (Thursday+Friday versus Friday+Saturday), so I'd be a bit
-# surprised if they agreed about DST. But for now, assume they agree.
-# For lack of better information, predict that future changes will be
-# the 2nd Thursday of September at 02:00.
-
-# From Alexander Krivenyshev (2008-08-28):
-# Here is an article, that Mideast running on different clocks at Ramadan.
-#
-# 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
-# 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
-# government decided to start Daylight Time on Thursday night March
-# 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
-#
-# (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
-# 2009, starting on Friday approved the fourth delay Sept. clock sixty
-# minutes per hour as of Friday morning."
-#
-# We are not sure if Gaza will do the same, last year they had a different
-# end date, we will keep this page updated:
-# https://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.
-#
-# According to Palestinian Ministry Of Interior, West Bank and Gaza Strip plan
-# to change time back to Standard time on September 4, 2009.
-#
-# "Winter time unite the West Bank and Gaza"
-# (from Palestinian National Authority):
-# http://www.moi.gov.ps/en/?page=633167343250594025&nid=11505
-# 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)
-# 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:
-# https://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
-# August, and will now enter daylight saving time again on 2011-08-30
-# 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:
-# https://www.timeanddate.com/news/time/palestine-dst-2011.html
-
-# From Alexander Krivenyshev (2011-08-27):
-# According to the article in The Jerusalem Post:
-# "...Earlier this month, the Palestinian government in the West Bank decided to
-# move to standard time for 30 days, during Ramadan. The Palestinians in the
-# Gaza Strip accepted the change and also moved their clocks one hour back.
-# The Hamas government said on Saturday that it won't observe summertime after
-# the Muslim feast of Id al-Fitr, which begins on Tuesday..."
-# ...
-# https://www.jpost.com/MiddleEast/Article.aspx?id=235650
-# http://www.worldtimezone.com/dst_news/dst_news_gazastrip05.html
-# 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
-# 00:00).
-# 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:
-# https://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
-# time from midnight on Friday, March 29, 2013" (translated).
-# [These are in Arabic and are for Gaza and for Ramallah, respectively.]
-# http://www.samanews.com/index.php?act=Show&id=154120
-# http://safa.ps/details/news/99844/%D8%B1%D8%A7%D9%85-%D8%A7%D9%84%D9%84%D9%87-%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-29-%D8%A7%D9%84%D8%AC%D8%A7%D8%B1%D9%8A.html
-
-# From Steffen Thorsen (2013-09-24):
-# The Gaza and West Bank are ending DST Thursday at midnight
-# (2013-09-27 00:00:00) (one hour earlier than last year...).
-# This source in English, says "that winter time will go into effect
-# at midnight on Thursday in the West Bank and Gaza Strip":
-# http://english.wafa.ps/index.php?action=detail&id=23246
-# official source...:
-# http://www.palestinecabinet.gov.ps/ar/Views/ViewDetails.aspx?pid=1252
-
-# From Steffen Thorsen (2015-03-03):
-# Sources such as http://www.alquds.com/news/article/view/id/548257
-# and https://www.raya.ps/ar/news/890705.html say Palestine areas will
-# start DST on 2015-03-28 00:00 which is one day later than expected.
-#
-# From Paul Eggert (2015-03-03):
-# https://www.timeanddate.com/time/change/west-bank/ramallah?year=2014
-# says that the fall 2014 transition was Oct 23 at 24:00.
-
-# From Hannah Kreitem (2016-03-09):
-# http://www.palestinecabinet.gov.ps/WebSite/ar/ViewDetails?ID=31728
-# [Google translation]: "The Council also decided to start daylight
-# saving in Palestine as of one o'clock on Saturday morning,
-# 2016-03-26, to provide the clock 60 minutes ahead."
-
-# From Sharef Mustafa (2016-10-19):
-# [T]he Palestinian cabinet decision (Mar 8th 2016) published on
-# http://www.palestinecabinet.gov.ps/WebSite/Upload/Decree/GOV_17/16032016134830.pdf
-# states that summer time will end on Oct 29th at 01:00.
-#
-# From Tim Parenti (2016-10-19):
-# Predict fall transitions on October's last Saturday at 01:00 from now on.
-# This is consistent with the 2016 transition as well as our spring
-# predictions.
-#
-# From Paul Eggert (2016-10-19):
-# It's also consistent with predictions in the following URLs today:
-# https://www.timeanddate.com/time/change/gaza-strip/gaza
-# https://www.timeanddate.com/time/change/west-bank/hebron
-
-# From Sharef Mustafa (2018-03-16):
-# Palestine summer time will start on Mar 24th 2018 by advancing the
-# clock by 60 minutes as per Palestinian cabinet decision published on
-# the official website, though the decree did not specify the exact
-# time of the time shift.
-# http://www.palestinecabinet.gov.ps/Website/AR/NDecrees/ViewFile.ashx?ID=e7a42ab7-ee23-435a-b9c8-a4f7e81f3817
-
-# From Even Scharning (2019-03-23):
-# DST in Palestine will start on 30 March this year, not 23 March as the time
-# zone database predicted.
-# https://ramallah.news/post/123610
-#
-# From Tim Parenti (2019-03-23):
-# Combining this with the rules observed since 2016, adjust our spring
-# transition guess to Mar Sat>=24.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule EgyptAsia 1957 only - May 10 0:00 1:00 S
-Rule EgyptAsia 1957 1958 - Oct 1 0:00 0 -
-Rule EgyptAsia 1958 only - May 1 0:00 1:00 S
-Rule EgyptAsia 1959 1967 - May 1 1:00 1:00 S
-Rule EgyptAsia 1959 1965 - Sep 30 3:00 0 -
-Rule EgyptAsia 1966 only - Oct 1 3:00 0 -
-
-Rule Palestine 1999 2005 - Apr Fri>=15 0:00 1:00 S
-Rule Palestine 1999 2003 - Oct Fri>=15 0:00 0 -
-Rule Palestine 2004 only - Oct 1 1:00 0 -
-Rule Palestine 2005 only - Oct 4 2:00 0 -
-Rule Palestine 2006 2007 - Apr 1 0:00 1:00 S
-Rule Palestine 2006 only - Sep 22 0:00 0 -
-Rule Palestine 2007 only - Sep Thu>=8 2:00 0 -
-Rule Palestine 2008 2009 - Mar lastFri 0:00 1:00 S
-Rule Palestine 2008 only - Sep 1 0:00 0 -
-Rule Palestine 2009 only - Sep Fri>=1 1:00 0 -
-Rule Palestine 2010 only - Mar 26 0:00 1:00 S
-Rule Palestine 2010 only - Aug 11 0:00 0 -
-Rule Palestine 2011 only - Apr 1 0:01 1:00 S
-Rule Palestine 2011 only - Aug 1 0:00 0 -
-Rule Palestine 2011 only - Aug 30 0:00 1:00 S
-Rule Palestine 2011 only - Sep 30 0:00 0 -
-Rule Palestine 2012 2014 - Mar lastThu 24:00 1:00 S
-Rule Palestine 2012 only - Sep 21 1:00 0 -
-Rule Palestine 2013 only - Sep Fri>=21 0:00 0 -
-Rule Palestine 2014 2015 - Oct Fri>=21 0:00 0 -
-Rule Palestine 2015 only - Mar lastFri 24:00 1:00 S
-Rule Palestine 2016 max - Mar Sat>=24 1:00 1:00 S
-Rule Palestine 2016 max - Oct lastSat 1:00 0 -
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
- 2:00 Zion EET/EEST 1948 May 15
- 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 - EET 2008 Sep
- 2:00 Palestine EE%sT 2010
- 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
-
-Zone Asia/Hebron 2:20:23 - LMT 1900 Oct
- 2:00 Zion EET/EEST 1948 May 15
- 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
-
-# Paracel Is
-# no information
-
-# Philippines
-
-# From Paul Eggert (2018-11-18):
-# The Spanish initially used American (west-of-Greenwich) time.
-# It is unknown what time Manila kept when the British occupied it from
-# 1762-10-06 through 1764-04; for now assume it kept American time.
-# 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; see R.H. van Gent's
-# History of the International Date Line
-# https://www.staff.science.uu.nl/~gent0113/idl/idl_philippines.htm
-# The rest of the data entries are from Shanks & Pottenger.
-
-# 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
-
-# From Paul Goyette (2018-06-15):
-# In the Philippines, there is a national law, Republic Act No. 10535
-# which declares the official time here as "Philippine Standard Time".
-# The act [1] even specifies use of PST as the abbreviation, although
-# the FAQ provided by PAGASA [2] uses the "acronym PhST to distinguish
-# it from the Pacific Standard Time (PST)."
-# [1] http://www.officialgazette.gov.ph/2013/05/15/republic-act-no-10535/
-# [2] https://www1.pagasa.dost.gov.ph/index.php/astronomy/philippine-standard-time#republic-act-10535
-#
-# From Paul Eggert (2018-06-19):
-# I surveyed recent news reports, and my impression is that "PST" is
-# more popular among reliable English-language news sources. This is
-# not just a measure of Google hit counts: it's also the sizes and
-# influence of the sources. There is no current abbreviation for DST,
-# so use "PDT", the usual American style.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Phil 1936 only - Nov 1 0:00 1:00 D
-Rule Phil 1937 only - Feb 1 0:00 0 S
-Rule Phil 1954 only - Apr 12 0:00 1:00 D
-Rule Phil 1954 only - Jul 1 0:00 0 S
-Rule Phil 1978 only - Mar 22 0:00 1:00 D
-Rule Phil 1978 only - Sep 21 0:00 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Manila -15:56:00 - LMT 1844 Dec 31
- 8:04:00 - LMT 1899 May 11
- 8:00 Phil P%sT 1942 May
- 9:00 - JST 1944 Nov
- 8:00 Phil P%sT
-
-# Qatar
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha
- 4:00 - +04 1972 Jun
- 3:00 - +03
-Link Asia/Qatar Asia/Bahrain
-
-# Saudi Arabia
-#
-# From Paul Eggert (2018-08-29):
-# Time in Saudi Arabia and other countries in the Arabian peninsula was not
-# standardized until 1968 or so; we don't know exactly 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).
-#
-# Timekeeping differed depending on who you were and which part of Saudi
-# Arabia you were in. In 1969, Elias Antar wrote that although a common
-# practice had been to set one's watch to 12:00 (i.e., midnight) at sunset -
-# which meant that the time on one side of a mountain could differ greatly from
-# the time on the other side - many foreigners set their watches to 6pm
-# instead, while airlines instead used UTC +03 (except in Dhahran, where they
-# used UTC +04), Aramco used UTC +03 with DST, and the Trans-Arabian Pipe Line
-# Company used Aramco time in eastern Saudi Arabia and airline time in western.
-# (The American Military Aid Advisory Group used plain UTC.) Antar writes,
-# "A man named Higgins, so the story goes, used to run a local power
-# station. One day, the whole thing became too much for Higgins and he
-# assembled his staff and laid down the law. 'I've had enough of this,' he
-# shrieked. 'It is now 12 o'clock Higgins Time, and from now on this station is
-# going to run on Higgins Time.' And so, until last year, it did." See:
-# Antar E. Dinner at When? Saudi Aramco World, 1969 March/April. 2-3.
-# http://archive.aramcoworld.com/issue/196902/dinner.at.when.htm
-# Also see: Antar EN. Arabian flying is confusing.
-# Port Angeles (WA) Evening News. 1965-03-10. page 3.
-#
-# 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 UT +04, was in the far eastern part of
-# the country. Presumably this is documenting airline time. Ignore this,
-# as it's before our 1970 cutoff.
-#
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Riyadh 3:06:52 - LMT 1947 Mar 14
- 3:00 - +03
-Link Asia/Riyadh Asia/Aden # Yemen
-Link Asia/Riyadh Asia/Kuwait
-
-# Singapore
-# 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.
- 7:00 - +07 1933 Jan 1
- 7:00 0:20 +0720 1936 Jan 1
- 7:20 - +0720 1941 Sep 1
- 7:30 - +0730 1942 Feb 16
- 9:00 - +09 1945 Sep 12
- 7:30 - +0730 1982 Jan 1
- 8:00 - +08
-
-# Spratly Is
-# no information
-
-# Sri Lanka
-
-# From Paul Eggert (2013-02-21):
-# Milne says "Madras mean time use from May 1, 1898. Prior to this Colombo
-# mean time, 5h. 4m. 21.9s. F., was used." But 5:04:21.9 differs considerably
-# from Colombo's meridian 5:19:24, so for now ignore Milne and stick with
-# Shanks and Pottenger.
-
-# From Paul Eggert (1996-09-03):
-# "Sri Lanka advances clock by an hour to avoid blackout"
-# (<http://www.virtual-pc.com/lankaweb/news/items/240596-2.html>, 1996-05-24,
-# no longer available as of 1999-08-17)
-# reported "the country's standard time will be put forward by one hour at
-# midnight Friday (1830 GMT) 'in the light of the present power crisis'."
-#
-# From Dharmasiri Senanayake, Sri Lanka Media Minister (1996-10-24), as quoted
-# by Shamindra in Daily News - Hot News Section
-# <news:54rka5$m5h@mtinsc01-mgt.ops.worldnet.att.net> (1996-10-26):
-# With effect from 12.30 a.m. on 26th October 1996
-# Sri Lanka will be six (06) hours ahead of GMT.
-
-# From Jesper NĂžrgaard Welen (2006-04-14), quoting Sri Lanka News Online
-# <http://news.sinhalaya.com/wmview.php?ArtID=11002> (2006-04-13):
-# 0030 hrs on April 15, 2006 (midnight of April 14, 2006 +30 minutes)
-# at present, become 2400 hours of April 14, 2006 (midnight of April 14, 2006).
-
-# From Peter Apps and Ranga Sirila of Reuters (2006-04-12) in:
-# http://today.reuters.co.uk/news/newsArticle.aspx?type=scienceNews&storyID=2006-04-12T172228Z_01_COL295762_RTRIDST_0_SCIENCE-SRILANKA-TIME-DC.XML
-# [The Tamil Tigers] never accepted the original 1996 time change and simply
-# kept their clocks set five and a half hours ahead of Greenwich Mean
-# Time (GMT), in line with neighbor India.
-# From Paul Eggert (2006-04-18):
-# People who live in regions under Tamil control can use [TZ='Asia/Kolkata'],
-# as that zone has agreed with the Tamil areas since our cutoff date of 1970.
-
-# From Sadika Sumanapala (2016-10-19):
-# According to http://www.sltime.org (maintained by Measurement Units,
-# Standards & Services Department, Sri Lanka) abbreviation for Sri Lanka
-# standard time is SLST.
-#
-# From Paul Eggert (2016-10-18):
-# "SLST" seems to be reasonably recent and rarely-used outside time
-# zone nerd sources. I searched Google News and found three uses of
-# it in the International Business Times of India in February and
-# March of this year when discussing cricket match times, but nothing
-# since then (though there has been a lot of cricket) and nothing in
-# other English-language news sources. Our old abbreviation "LKT" is
-# even worse. For now, let's use a numeric abbreviation; we can
-# switch to "SLST" if it catches on.
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Colombo 5:19:24 - LMT 1880
- 5:19:32 - MMT 1906 # Moratuwa Mean Time
- 5:30 - +0530 1942 Jan 5
- 5:30 0:30 +06 1942 Sep
- 5:30 1:00 +0630 1945 Oct 16 2:00
- 5:30 - +0530 1996 May 25 0:00
- 6:30 - +0630 1996 Oct 26 0:30
- 6:00 - +06 2006 Apr 15 0:30
- 5:30 - +0530
-
-# Syria
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Syria 1920 1923 - Apr Sun>=15 2:00 1:00 S
-Rule Syria 1920 1923 - Oct Sun>=1 2:00 0 -
-Rule Syria 1962 only - Apr 29 2:00 1:00 S
-Rule Syria 1962 only - Oct 1 2:00 0 -
-Rule Syria 1963 1965 - May 1 2:00 1:00 S
-Rule Syria 1963 only - Sep 30 2:00 0 -
-Rule Syria 1964 only - Oct 1 2:00 0 -
-Rule Syria 1965 only - Sep 30 2:00 0 -
-Rule Syria 1966 only - Apr 24 2:00 1:00 S
-Rule Syria 1966 1976 - Oct 1 2:00 0 -
-Rule Syria 1967 1978 - May 1 2:00 1:00 S
-Rule Syria 1977 1978 - Sep 1 2:00 0 -
-Rule Syria 1983 1984 - Apr 9 2:00 1:00 S
-Rule Syria 1983 1984 - Oct 1 2:00 0 -
-Rule Syria 1986 only - Feb 16 2:00 1:00 S
-Rule Syria 1986 only - Oct 9 2:00 0 -
-Rule Syria 1987 only - Mar 1 2:00 1:00 S
-Rule Syria 1987 1988 - Oct 31 2:00 0 -
-Rule Syria 1988 only - Mar 15 2:00 1:00 S
-Rule Syria 1989 only - Mar 31 2:00 1:00 S
-Rule Syria 1989 only - Oct 1 2:00 0 -
-Rule Syria 1990 only - Apr 1 2:00 1:00 S
-Rule Syria 1990 only - Sep 30 2:00 0 -
-Rule Syria 1991 only - Apr 1 0:00 1:00 S
-Rule Syria 1991 1992 - Oct 1 0:00 0 -
-Rule Syria 1992 only - Apr 8 0:00 1:00 S
-Rule Syria 1993 only - Mar 26 0:00 1:00 S
-Rule Syria 1993 only - Sep 25 0:00 0 -
-# IATA SSIM (1998-02) says 1998-04-02;
-# (1998-09) says 1999-03-29 and 1999-09-29; (1999-02) says 1999-04-02,
-# 2000-04-02, and 2001-04-02; (1999-09) says 2000-03-31 and 2001-03-31;
-# (2006) says 2006-03-31 and 2006-09-22;
-# for now ignore all these claims and go with Shanks & Pottenger,
-# except for the 2006-09-22 claim (which seems right for Ramadan).
-Rule Syria 1994 1996 - Apr 1 0:00 1:00 S
-Rule Syria 1994 2005 - Oct 1 0:00 0 -
-Rule Syria 1997 1998 - Mar lastMon 0:00 1:00 S
-Rule Syria 1999 2006 - Apr 1 0:00 1:00 S
-# From Stephen Colebourne (2006-09-18):
-# According to IATA data, Syria will change DST on 21st September [21:00 UTC]
-# this year [only].... This is probably related to Ramadan, like Egypt.
-Rule Syria 2006 only - Sep 22 0:00 0 -
-# From Paul Eggert (2007-03-29):
-# 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 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
-# having it between Wednesday and Thursday (two workdays in Syria) since the
-# weekend in Syria is not Saturday and Sunday, but Friday and Saturday. So now
-# it is implemented at midnight of the last workday before weekend...
-#
-# From Steffen Thorsen (2007-10-27):
-# 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."
-#
-# I found confirmation on this in this gov.sy-article (Arabic):
-# http://wehda.alwehda.gov.sy/_print_veiw.asp?FileName=12521710520070926111247
-#
-# which using Google's translate tools says:
-# Council of Ministers also approved the commencement of work on
-# identifying the winter time as of Friday, 2/11/2007 where the 60th
-# minute delay at midnight Thursday 1/11/2007.
-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....
-# Country Time Standard --- DST Start --- --- DST End --- DST
-# Name Zone Variation Time Date Time Date
-# Variation
-# Syrian Arab
-# Republic SY +0200 2200 03APR08 2100 30SEP08 +0300
-# 2200 02APR09 2100 30SEP09 +0300
-# 2200 01APR10 2100 30SEP10 +0300
-
-# 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
-# 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 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.
-
-# From Steffen Thorsen (2008-10-07):
-# Syria has now officially decided to end DST on 2008-11-01 this year,
-# according to the following article in the Syrian Arab News Agency (SANA).
-#
-# The article is in Arabic, and seems to tell that they will go back to
-# 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
-# https://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
-# Thursday of the month or the start of the last Friday of the month or
-# something else. For now, use the start of the last Friday.
-
-# From Steffen Thorsen (2010-03-17):
-# 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:
-# https://www.timeanddate.com/news/time/syria-dst-2012.html
-
-# From Arthur David Olson (2012-03-27):
-# Assume last Friday in March going forward XXX.
-
-Rule Syria 2008 only - Apr Fri>=1 0:00 1:00 S
-Rule Syria 2008 only - Nov 1 0:00 0 -
-Rule Syria 2009 only - Mar lastFri 0:00 1:00 S
-Rule Syria 2010 2011 - Apr Fri>=1 0:00 1:00 S
-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
- 2:00 Syria EE%sT
-
-# Tajikistan
-# From Shanks & Pottenger.
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
- 5:00 - +05 1930 Jun 21
- 6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
- 5:00 1:00 +05/+06 1991 Sep 9 2:00s
- 5:00 - +05
-
-# Thailand
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Bangkok 6:42:04 - LMT 1880
- 6:42:04 - BMT 1920 Apr # Bangkok Mean Time
- 7:00 - +07
-Link Asia/Bangkok Asia/Phnom_Penh # Cambodia
-Link Asia/Bangkok Asia/Vientiane # Laos
-
-# Turkmenistan
-# From Shanks & Pottenger.
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad
- 4:00 - +04 1930 Jun 21
- 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00
- 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00
- 5:00 - +05
-
-# United Arab Emirates
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Dubai 3:41:12 - LMT 1920
- 4:00 - +04
-Link Asia/Dubai Asia/Muscat # Oman
-
-# Uzbekistan
-# Byalokoz 1919 says Uzbekistan was 4:27:53.
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Samarkand 4:27:53 - LMT 1924 May 2
- 4:00 - +04 1930 Jun 21
- 5:00 - +05 1981 Apr 1
- 5:00 1:00 +06 1981 Oct 1
- 6:00 - +06 1982 Apr 1
- 5:00 RussiaAsia +05/+06 1992
- 5:00 - +05
-# Milne says Tashkent was 4:37:10.8; round to nearest.
-Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
- 5:00 - +05 1930 Jun 21
- 6:00 RussiaAsia +06/+07 1991 Mar 31 2:00
- 5:00 RussiaAsia +05/+06 1992
- 5:00 - +05
-
-# Vietnam
-
-# From Paul Eggert (2014-10-04):
-# Milne gives 7:16:56 for the meridian of Saigon in 1899, as being
-# used in Lower Laos, Cambodia, and Annam. But this is quite a ways
-# from Saigon's location. For now, ignore this and stick with Shanks
-# and Pottenger for LMT before 1906.
-
-# From Arthur David Olson (2008-03-18):
-# 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 Paul Eggert (2014-10-21) after a heads-up from Tráș§n Ngá»c QuĂąn:
-# Tráș§n Tiáșżn BĂŹnh's authoritative book "Lá»ch Viá»t Nam: tháșż ká»· XX-XXI (1901-2100)"
-# (NhĂ xuáș„t báșŁn VÄn HoĂĄ - ThĂŽng Tin, Hanoi, 2005), pp 49-50,
-# is quoted verbatim in:
-# http://www.thoigian.com.vn/?mPage=P80D01
-# is translated by Brian Inglis in:
-# https://mm.icann.org/pipermail/tz/2014-October/021654.html
-# and is the basis for the information below.
-#
-# The 1906 transition was effective July 1 and standardized Indochina to
-# PhĂč Liá»
n Observatory, legally 104° 17' 17" east of Paris.
-# It's unclear whether this meant legal Paris Mean Time (00:09:21) or
-# the Paris Meridian (2° 20' 14.03" E); the former yields 07:06:30.1333...
-# and the latter 07:06:29.333... so either way it rounds to 07:06:30,
-# which is used below even though the modern-day PhĂč Liá»
n Observatory
-# is closer to 07:06:31. Abbreviate PhĂč Liá»
n Mean Time as PLMT.
-#
-# The following transitions occurred in Indochina in general (before 1954)
-# and in South Vietnam in particular (after 1954):
-# To 07:00 on 1911-05-01.
-# To 08:00 on 1942-12-31 at 23:00.
-# To 09:00 in 1945-03-14 at 23:00.
-# To 07:00 on 1945-09-02 in Vietnam.
-# To 08:00 on 1947-04-01 in French-controlled Indochina.
-# To 07:00 on 1955-07-01 in South Vietnam.
-# To 08:00 on 1959-12-31 at 23:00 in South Vietnam.
-# To 07:00 on 1975-06-13 in South Vietnam.
-#
-# Tráș§n cites the following sources; it's unclear which supplied the info above.
-#
-# HoĂ ng XuĂąn HĂŁn: "Lá»ch vĂ lá»ch Viá»t Nam". Táșp san Khoa há»c XĂŁ há»i,
-# No. 9, Paris, February 1982.
-#
-# LĂȘ ThĂ nh LĂąn: "Lá»ch vĂ niĂȘn biá»u lá»ch sá» hai mÆ°ÆĄi tháșż ká»· (0001-2010)",
-# NXB Thá»ng kĂȘ, Hanoi, 2000.
-#
-# LĂȘ ThĂ nh LĂąn: "Lá»ch hai tháșż ká»· (1802-2010) vĂ cĂĄc lá»ch vÄ©nh cá»u",
-# NXB Thuáșn HoĂĄ, Huáșż, 1995.
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Ho_Chi_Minh 7:06:40 - LMT 1906 Jul 1
- 7:06:30 - PLMT 1911 May 1 # PhĂč Liá»
n MT
- 7:00 - +07 1942 Dec 31 23:00
- 8:00 - +08 1945 Mar 14 23:00
- 9:00 - +09 1945 Sep 2
- 7:00 - +07 1947 Apr 1
- 8:00 - +08 1955 Jul 1
- 7:00 - +07 1959 Dec 31 23:00
- 8:00 - +08 1975 Jun 13
- 7:00 - +07
-
-# From Paul Eggert (2019-02-19):
-#
-# The Ho Chi Minh entry suffices for most purposes as it agrees with all of
-# Vietnam since 1975-06-13. Presumably clocks often changed in south Vietnam
-# in the early 1970s as locations changed hands during the war; however the
-# details are unknown and would likely be too voluminous for this database.
-#
-# For timestamps in north Vietnam back to 1970 (the tzdb cutoff),
-# use Asia/Bangkok; see the VN entries in the file zone1970.tab.
-# For timestamps before 1970, see Asia/Hanoi in the file 'backzone'.
-
-
-# Yemen
-# See Asia/Riyadh.
--- a/test/jdk/sun/util/calendar/zi/tzdata/australasia Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2067 +0,0 @@
-#
-# 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.
-#
-# tzdb data for Australasia and environs, and for much of the Pacific
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# This file also includes Pacific islands.
-
-# Notes are at the end of this file
-
-###############################################################################
-
-# Australia
-
-# Please see the notes below for the controversy about "EST" versus "AEST" etc.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Aus 1917 only - Jan 1 0:01 1:00 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.
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-# Northern Territory
-Zone Australia/Darwin 8:43:20 - LMT 1895 Feb
- 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 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 AW%sT 1943 Jul
- 8:00 AW AW%sT
-Zone Australia/Eucla 8:35:28 - LMT 1895 Dec
- 8:45 Aus +0845/+0945 1943 Jul
- 8:45 AW +0845/+0945
-
-# Queensland
-#
-# From Alex Livingston (1996-11-01):
-# I have heard or read more than once that some resort islands off the coast
-# of Queensland chose to keep observing daylight-saving time even after
-# Queensland ceased to.
-#
-# From Paul Eggert (1996-11-22):
-# IATA SSIM (1993-02/1994-09) say that the Holiday Islands (Hayman, Lindeman,
-# Hamilton) observed DST for two years after the rest of Queensland stopped.
-# Hamilton is the largest, but there is also a Hamilton in Victoria,
-# so use Lindeman.
-#
-# From J William Piggott (2016-02-20):
-# There is no location named Holiday Islands in Queensland Australia; holiday
-# islands is a colloquial term used globally. Hayman and Lindeman are at the
-# north and south extremes of the Whitsunday Islands archipelago, and
-# Hamilton is in between; it is reasonable to believe that this time zone
-# applies to all of the Whitsundays.
-# http://www.australia.gov.au/about-australia/australian-story/austn-islands
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-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 AE%sT 1971
- 10:00 AQ AE%sT
-Zone Australia/Lindeman 9:55:56 - LMT 1895
- 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 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 - 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 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 - 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 - 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 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 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 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 AE%sT 1971
- 10:00 AN AE%sT
-Zone Australia/Broken_Hill 9:25:48 - LMT 1895 Feb
- 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 -
-Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
- 10:00 - AEST 1981 Mar
- 10:30 LH +1030/+1130 1985 Jul
- 10:30 LH +1030/+11
-
-# Australian miscellany
-#
-# Ashmore Is, Cartier
-# no indigenous inhabitants; only seasonal caretakers
-# no times are set
-#
-# Coral Sea Is
-# no indigenous inhabitants; only meteorologists
-# no times are set
-#
-# Macquarie
-# Permanent occupation (scientific station) 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):
-# We got these changes from the Australian Antarctic Division:
-# - Macquarie Island will stay on UTC+11 for winter and therefore not
-# switch back from daylight savings time when other parts of Australia do
-# on 4 April.
-#
-# From Arthur David Olson (2013-05-23):
-# The 1919 transition is overspecified below so pre-2013 zics
-# 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 - -00 1899 Nov
- 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 - -00 1948 Mar 25
- 10:00 Aus AE%sT 1967
- 10:00 AT AE%sT 2010 Apr 4 3:00
- 11:00 - +11
-
-# Christmas
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Christmas 7:02:52 - LMT 1895 Feb
- 7:00 - +07
-
-# 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 - +0630
-
-
-# Fiji
-
-# Milne gives 11:55:44 for Suva.
-
-# From Alexander Krivenyshev (2009-11-10):
-# According to Fiji Broadcasting Corporation, Fiji plans to re-introduce DST
-# from November 29th 2009 to April 25th 2010.
-#
-# "Daylight savings to commence this month"
-# http://www.radiofiji.com.fj/fullstory.php?id=23719
-# 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
-# 2010-03-28 at 03:00.
-# The plan is to observe DST again, from 2010-10-24 to sometime in March
-# 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:
-# https://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
-# 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).
-#
-# 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
-# 2am on February 26 next year.
-
-# From Ken Rylander (2011-10-24)
-# 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
-# has been brought forward to the 22nd of January 2012.
-# The commencement of daylight saving will remain unchanged and start
-# on the 23rd of October, 2011.
-
-# From the Fiji Government Online Portal (2012-08-21) via Steffen Thorsen:
-# The Minister for Labour, Industrial Relations and Employment Mr Jone Usamate
-# today confirmed that Fiji will start daylight savings at 2 am on Sunday 21st
-# October 2012 and end at 3 am on Sunday 20th January 2013.
-# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=6702&catid=71&Itemid=155
-
-# From the Fijian Government Media Center (2013-08-30) via David Wheeler:
-# Fiji will start daylight savings on Sunday 27th October, 2013 ...
-# move clocks forward by one hour from 2am
-# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-SUNDAY,-27th-OCTOBER-201.aspx
-
-# From Steffen Thorsen (2013-01-10):
-# Fiji will end DST on 2014-01-19 02:00:
-# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVINGS-TO-END-THIS-MONTH-%281%29.aspx
-
-# From Ken Rylander (2014-10-20):
-# DST will start Nov. 2 this year.
-# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-SUNDAY,-NOVEMBER-2ND.aspx
-
-# From a government order dated 2015-08-26 and published as Legal Notice No. 77
-# in the Government of Fiji Gazette Supplement No. 24 (2015-08-28),
-# via Ken Rylander (2015-09-02):
-# the daylight saving period is 1 hour in advance of the standard time
-# commencing at 2.00 am on Sunday 1st November, 2015 and ending at
-# 3.00 am on Sunday 17th January, 2016.
-
-# From Raymond Kumar (2016-10-04):
-# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-6th-NOVEMBER,-2016.aspx
-# "Fiji's daylight savings will begin on Sunday, 6 November 2016, when
-# clocks go forward an hour at 2am to 3am.... Daylight Saving will
-# end at 3.00am on Sunday 15th January 2017."
-
-# From Paul Eggert (2017-08-21):
-# Dominic Fok writes (2017-08-20) that DST ends 2018-01-14, citing
-# Extraordinary Government of Fiji Gazette Supplement No. 21 (2017-08-27),
-# [Legal Notice No. 41] of an order of the previous day by J Usamate.
-
-# From Raymond Kumar (2018-07-13):
-# http://www.fijitimes.com/government-approves-2018-daylight-saving/
-# ... The daylight saving period will end at 3am on Sunday January 13, 2019.
-#
-# From Paul Eggert (2018-07-15):
-# For now, guess DST from 02:00 the first Sunday in November to 03:00
-# the first Sunday on or after January 13. January transitions reportedly
-# depend on when school terms start. Although the guess is ad hoc, it matches
-# transitions since late 2014 and seems more likely to match future
-# practice than guessing no DST.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 -
-Rule Fiji 1999 2000 - Feb lastSun 3:00 0 -
-Rule Fiji 2009 only - Nov 29 2:00 1:00 -
-Rule Fiji 2010 only - Mar lastSun 3:00 0 -
-Rule Fiji 2010 2013 - Oct Sun>=21 2:00 1:00 -
-Rule Fiji 2011 only - Mar Sun>=1 3:00 0 -
-Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 -
-Rule Fiji 2014 only - Jan Sun>=18 2:00 0 -
-Rule Fiji 2014 max - Nov Sun>=1 2:00 1:00 -
-Rule Fiji 2015 max - Jan Sun>=13 3:00 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
- 12:00 Fiji +12/+13
-
-# French Polynesia
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct # Rikitea
- -9:00 - -09
-Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct
- -9:30 - -0930
-Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete
- -10:00 - -10
-# Clipperton (near North America) is administered from French Polynesia;
-# it is uninhabited.
-
-# Guam
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# http://guamlegislature.com/Public_Laws_5th/PL05-025.pdf
-# http://documents.guam.gov/wp-content/uploads/E.O.-59-7-Guam-Daylight-Savings-Time-May-6-1959.pdf
-Rule Guam 1959 only - Jun 27 2:00 1:00 D
-# http://documents.guam.gov/wp-content/uploads/E.O.-61-5-Revocation-of-Daylight-Saving-Time-and-Restoratio.pdf
-Rule Guam 1961 only - Jan 29 2:00 0 S
-# http://documents.guam.gov/wp-content/uploads/E.O.-67-13-Guam-Daylight-Savings-Time.pdf
-Rule Guam 1967 only - Sep 1 2:00 1:00 D
-# http://documents.guam.gov/wp-content/uploads/E.O.-69-2-Repeal-of-Guam-Daylight-Saving-Time.pdf
-Rule Guam 1969 only - Jan 26 0:01 0 S
-# http://documents.guam.gov/wp-content/uploads/E.O.-69-10-Guam-Daylight-Saving-Time.pdf
-Rule Guam 1969 only - Jun 22 2:00 1:00 D
-Rule Guam 1969 only - Aug 31 2:00 0 S
-# http://documents.guam.gov/wp-content/uploads/E.O.-70-10-Guam-Daylight-Saving-Time.pdf
-# http://documents.guam.gov/wp-content/uploads/E.O.-70-30-End-of-Guam-Daylight-Saving-Time.pdf
-# http://documents.guam.gov/wp-content/uploads/E.O.-71-5-Guam-Daylight-Savings-Time.pdf
-Rule Guam 1970 1971 - Apr lastSun 2:00 1:00 D
-Rule Guam 1970 1971 - Sep Sun>=1 2:00 0 S
-# http://documents.guam.gov/wp-content/uploads/E.O.-73-28.-Guam-Day-light-Saving-Time.pdf
-Rule Guam 1973 only - Dec 16 2:00 1:00 D
-# http://documents.guam.gov/wp-content/uploads/E.O.-74-7-Guam-Daylight-Savings-Time-Rescinded.pdf
-Rule Guam 1974 only - Feb 24 2:00 0 S
-# http://documents.guam.gov/wp-content/uploads/E.O.-76-13-Daylight-Savings-Time.pdf
-Rule Guam 1976 only - May 26 2:00 1:00 D
-# http://documents.guam.gov/wp-content/uploads/E.O.-76-25-Revocation-of-E.O.-76-13.pdf
-Rule Guam 1976 only - Aug 22 2:01 0 S
-# http://documents.guam.gov/wp-content/uploads/E.O.-77-4-Daylight-Savings-Time.pdf
-Rule Guam 1977 only - Apr 24 2:00 1:00 D
-# http://documents.guam.gov/wp-content/uploads/E.O.-77-18-Guam-Standard-Time.pdf
-Rule Guam 1977 only - Aug 28 2:00 0 S
-
-# 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 1941 Dec 10 # Guam
- 9:00 - +09 1944 Jul 31
- 10:00 Guam G%sT 2000 Dec 23
- 10:00 - ChST # Chamorro Standard Time
-Link Pacific/Guam Pacific/Saipan # N Mariana Is
-
-# Kiribati
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
- 12:00 - +12
-Zone Pacific/Enderbury -11:24:20 - LMT 1901
- -12:00 - -12 1979 Oct
- -11:00 - -11 1994 Dec 31
- 13:00 - +13
-Zone Pacific/Kiritimati -10:29:20 - LMT 1901
- -10:40 - -1040 1979 Oct
- -10:00 - -10 1994 Dec 31
- 14:00 - +14
-
-# N Mariana Is
-# See Pacific/Guam.
-
-# Marshall Is
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Majuro 11:24:48 - LMT 1901
- 11:00 - +11 1914 Oct
- 9:00 - +09 1919 Feb 1
- 11:00 - +11 1937
- 10:00 - +10 1941 Apr 1
- 9:00 - +09 1944 Jan 30
- 11:00 - +11 1969 Oct
- 12:00 - +12
-Zone Pacific/Kwajalein 11:09:20 - LMT 1901
- 11:00 - +11 1937
- 10:00 - +10 1941 Apr 1
- 9:00 - +09 1944 Feb 6
- 11:00 - +11 1969 Oct
- -12:00 - -12 1993 Aug 20 24:00
- 12:00 - +12
-
-# Micronesia
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Chuuk -13:52:52 - LMT 1844 Dec 31
- 10:07:08 - LMT 1901
- 10:00 - +10 1914 Oct
- 9:00 - +09 1919 Feb 1
- 10:00 - +10 1941 Apr 1
- 9:00 - +09 1945 Aug
- 10:00 - +10
-Zone Pacific/Pohnpei -13:27:08 - LMT 1844 Dec 31 # Kolonia
- 10:32:52 - LMT 1901
- 11:00 - +11 1914 Oct
- 9:00 - +09 1919 Feb 1
- 11:00 - +11 1937
- 10:00 - +10 1941 Apr 1
- 9:00 - +09 1945 Aug
- 11:00 - +11
-Zone Pacific/Kosrae -13:08:04 - LMT 1844 Dec 31
- 10:51:56 - LMT 1901
- 11:00 - +11 1914 Oct
- 9:00 - +09 1919 Feb 1
- 11:00 - +11 1937
- 10:00 - +10 1941 Apr 1
- 9:00 - +09 1945 Aug
- 11:00 - +11 1969 Oct
- 12:00 - +12 1999
- 11:00 - +11
-
-# Nauru
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
- 11:30 - +1130 1942 Aug 29
- 9:00 - +09 1945 Sep 8
- 11:30 - +1130 1979 Feb 10 2:00
- 12:00 - +12
-
-# New Caledonia
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule NC 1977 1978 - Dec Sun>=1 0:00 1:00 -
-Rule NC 1978 1979 - Feb 27 0:00 0 -
-Rule NC 1996 only - Dec 1 2:00s 1:00 -
-# 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 # Nouméa
- 11:00 NC +11/+12
-
-
-###############################################################################
-
-# New Zealand
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule NZ 1927 only - Nov 6 2:00 1:00 S
-Rule NZ 1928 only - Mar 4 2:00 0 M
-Rule NZ 1928 1933 - Oct Sun>=8 2:00 0:30 S
-Rule NZ 1929 1933 - Mar Sun>=15 2:00 0 M
-Rule NZ 1934 1940 - Apr lastSun 2:00 0 M
-Rule NZ 1934 1940 - Sep lastSun 2:00 0:30 S
-Rule NZ 1946 only - Jan 1 0:00 0 S
-# Since 1957 Chatham has been 45 minutes ahead of NZ, but until 2018a
-# there was no documented single notation for the date and time of this
-# transition. Duplicate the Rule lines for now, to give the 2018a change
-# time to percolate out.
-Rule NZ 1974 only - Nov Sun>=1 2:00s 1:00 D
-Rule Chatham 1974 only - Nov Sun>=1 2:45s 1:00 -
-Rule NZ 1975 only - Feb lastSun 2:00s 0 S
-Rule Chatham 1975 only - Feb lastSun 2:45s 0 -
-Rule NZ 1975 1988 - Oct lastSun 2:00s 1:00 D
-Rule Chatham 1975 1988 - Oct lastSun 2:45s 1:00 -
-Rule NZ 1976 1989 - Mar Sun>=1 2:00s 0 S
-Rule Chatham 1976 1989 - Mar Sun>=1 2:45s 0 -
-Rule NZ 1989 only - Oct Sun>=8 2:00s 1:00 D
-Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 -
-Rule NZ 1990 2006 - Oct Sun>=1 2:00s 1:00 D
-Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 -
-Rule NZ 1990 2007 - Mar Sun>=15 2:00s 0 S
-Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 -
-Rule NZ 2007 max - Sep lastSun 2:00s 1:00 D
-Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 -
-Rule NZ 2008 max - Apr Sun>=1 2:00s 0 S
-Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2
- 11:30 NZ NZ%sT 1946 Jan 1
- 12:00 NZ NZ%sT
-Zone Pacific/Chatham 12:13:48 - LMT 1868 Nov 2
- 12:15 - +1215 1946 Jan 1
- 12:45 Chatham +1245/+1345
-
-Link Pacific/Auckland Antarctica/McMurdo
-
-# Auckland Is
-# uninhabited; MÄori and Moriori, colonial settlers, pastoralists, sealers,
-# and scientific personnel have wintered
-
-# Campbell I
-# minor whaling stations operated 1909/1914
-# scientific station operated 1941/1995;
-# previously whalers, sealers, pastoralists, and scientific personnel wintered
-# was probably like Pacific/Auckland
-
-# 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 -
-Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
-Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
- -10:30 - -1030 1978 Nov 12
- -10:00 Cook -10/-0930
-
-###############################################################################
-
-
-# Niue
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Niue -11:19:40 - LMT 1901 # Alofi
- -11:20 - -1120 1951
- -11:30 - -1130 1978 Oct 1
- -11:00 - -11
-
-# Norfolk
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston
- 11:12 - +1112 1951
- 11:30 - +1130 1974 Oct 27 02:00
- 11:30 1:00 +1230 1975 Mar 2 02:00
- 11:30 - +1130 2015 Oct 4 02:00
- 11:00 - +11
-
-# Palau (Belau)
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Palau -15:02:04 - LMT 1844 Dec 31 # Koror
- 8:57:56 - LMT 1901
- 9:00 - +09
-
-# 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 - +10
-#
-# From Paul Eggert (2014-10-13):
-# Base the Bougainville entry on the Arawa-Kieta region, which appears to have
-# the most people even though it was devastated in the Bougainville Civil War.
-#
-# Although Shanks gives 1942-03-15 / 1943-11-01 for UT +09, these dates
-# are apparently rough guesswork from the starts of military campaigns.
-# The World War II entries below are instead based on Arawa-Kieta.
-# The Japanese occupied Kieta in July 1942,
-# according to the Pacific War Online Encyclopedia
-# https://pwencycl.kgbudge.com/B/o/Bougainville.htm
-# and seem to have controlled it until their 1945-08-21 surrender.
-#
-# The Autonomous Region of Bougainville switched from UT +10 to +11
-# on 2014-12-28 at 02:00. They call +11 "Bougainville Standard Time".
-# See:
-# http://www.bougainville24.com/bougainville-issues/bougainville-gets-own-timezone/
-#
-Zone Pacific/Bougainville 10:22:16 - LMT 1880
- 9:48:32 - PMMT 1895
- 10:00 - +10 1942 Jul
- 9:00 - +09 1945 Aug 21
- 10:00 - +10 2014 Dec 28 2:00
- 11:00 - +11
-
-# Pitcairn
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Pitcairn -8:40:20 - LMT 1901 # Adamstown
- -8:30 - -0830 1998 Apr 27 0:00
- -8:00 - -08
-
-# American Samoa
-Zone Pacific/Pago_Pago 12:37:12 - LMT 1892 Jul 5
- -11:22:48 - LMT 1911
- -11:00 - SST # S=Samoa
-Link Pacific/Pago_Pago Pacific/Midway # in US minor outlying islands
-
-# 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
-# the following info:
-#
-# "Cabinet has now approved Daylight Saving to be effected next year
-# commencing from the last Sunday of September 2010 and conclude first
-# Sunday of April 2011."
-#
-# Background info:
-# https://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):
-# [http://www.mcil.gov.ws/ftcd/daylight_saving_2011.pdf]
-#
-# ... 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 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 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 UT -11 to +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 - - - - - -
-#
-# Dateline Change skip Friday 30th Dec 2011
-# Thursday 29th December 2011 23:59:59 Hours
-# Saturday 31st December 2011 00:00:00 Hours
-#
-# From Nicholas Pereira (2012-09-10):
-# Daylight Saving Time commences on Sunday 30th September 2012 and
-# ends on Sunday 7th of April 2013....
-# http://www.mcil.gov.ws/mcil_publications.html
-#
-# 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.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule WS 2010 only - Sep lastSun 0:00 1 -
-Rule WS 2011 only - Apr Sat>=1 4:00 0 -
-Rule WS 2011 only - Sep lastSat 3:00 1 -
-Rule WS 2012 max - Apr Sun>=1 4:00 0 -
-Rule WS 2012 max - Sep lastSun 3:00 1 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Apia 12:33:04 - LMT 1892 Jul 5
- -11:26:56 - LMT 1911
- -11:30 - -1130 1950
- -11:00 WS -11/-10 2011 Dec 29 24:00
- 13:00 WS +13/+14
-
-# Solomon Is
-# excludes Bougainville, for which see Papua New Guinea
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara
- 11:00 - +11
-
-# Tokelau
-#
-# From Gwillim Law (2011-12-29)
-# A correspondent informed me that Tokelau, like Samoa, will be skipping
-# December 31 this year ...
-#
-# From Steffen Thorsen (2012-07-25)
-# ... we double checked by calling hotels and offices based in Tokelau asking
-# about the time there, and they all told a time that agrees with UTC+13....
-# Shanks says UT-10 from 1901 [but] ... there is a good chance the change
-# actually was to UT-11 back then.
-#
-# From Paul Eggert (2012-07-25)
-# A Google Books snippet of Appendix to the Journals of the House of
-# Representatives of New Zealand, Session 1948,
-# <https://books.google.com/books?id=ZaVCAQAAIAAJ>, page 65, says Tokelau
-# was "11 hours slow on G.M.T." Go with Thorsen and assume Shanks & Pottenger
-# are off by an hour starting in 1901.
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Fakaofo -11:24:56 - LMT 1901
- -11:00 - -11 2011 Dec 30
- 13:00 - +13
-
-# Tonga
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Tonga 1999 only - Oct 7 2:00s 1:00 -
-Rule Tonga 2000 only - Mar 19 2:00s 0 -
-Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 -
-Rule Tonga 2001 2002 - Jan lastSun 2:00 0 -
-Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 -
-Rule Tonga 2017 only - Jan Sun>=15 3:00 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Tongatapu 12:19:20 - LMT 1901
- 12:20 - +1220 1941
- 13:00 - +13 1999
- 13:00 Tonga +13/+14
-
-# Tuvalu
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Funafuti 11:56:52 - LMT 1901
- 12:00 - +12
-
-
-# US minor outlying islands
-
-# Howland, Baker
-# Howland was mined for guano by American companies 1857-1878 and British
-# 1886-1891; Baker was similar but exact dates are not known.
-# Inhabited by civilians 1935-1942; U.S. military bases 1943-1944;
-# uninhabited thereafter.
-# Howland observed Hawaii Standard Time (UT -10:30) in 1937;
-# see page 206 of Elgen M. Long and Marie K. Long,
-# Amelia Earhart: the Mystery Solved, Simon & Schuster (2000).
-# So most likely Howland and Baker observed Hawaii Time from 1935
-# until they were abandoned after the war.
-
-# Jarvis
-# Mined for guano by American companies 1857-1879 and British 1883?-1891?.
-# Inhabited by civilians 1935-1942; IGY scientific base 1957-1958;
-# uninhabited thereafter.
-# no information; was probably like Pacific/Kiritimati
-
-# Johnston
-#
-# From Paul Eggert (2017-02-10):
-# Sometimes Johnston kept Hawaii time, and sometimes it was an hour behind.
-# Details are uncertain. We have no data for Johnston after 1970, so
-# treat it like Hawaii for now. Since Johnston is now uninhabited,
-# its link to Pacific/Honolulu is in the 'backward' file.
-#
-# In his memoirs of June 6th to October 4, 1945
-# <http://www.315bw.org/Herb_Bach.htm> (2005), Herbert C. Bach writes,
-# "We started our letdown to Kwajalein Atoll and landed there at 5:00 AM
-# Johnston time, 1:30 AM Kwajalein time." This was in June 1945, and
-# confirms that Johnston kept the same time as Honolulu in summer 1945.
-#
-# From Lyle McElhaney (2014-03-11):
-# [W]hen JI was being used for that [atomic bomb] testing, the time being used
-# was not Hawaiian time but rather the same time being used on the ships,
-# which had a GMT offset of -11 hours. This apparently applied to at least the
-# 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.
-# https://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".
-
-# Kingman
-# uninhabited
-
-# Midway
-# See Pacific/Pago_Pago.
-
-# Palmyra
-# uninhabited since World War II; was probably like Pacific/Kiritimati
-
-# Wake
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Wake 11:06:28 - LMT 1901
- 12:00 - +12
-
-
-# Vanuatu
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Vanuatu 1983 only - Sep 25 0:00 1:00 -
-Rule Vanuatu 1984 1991 - Mar Sun>=23 0:00 0 -
-Rule Vanuatu 1984 only - Oct 23 0:00 1:00 -
-Rule Vanuatu 1985 1991 - Sep Sun>=23 0:00 1:00 -
-Rule Vanuatu 1992 1993 - Jan Sun>=23 0:00 0 -
-Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
- 11:00 Vanuatu +11/+12
-
-# Wallis and Futuna
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Wallis 12:15:20 - LMT 1901
- 12:00 - +12
-
-###############################################################################
-
-# NOTES
-
-# 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). For more, please see
-# the file CONTRIBUTING in the tz distribution.
-
-# From Paul Eggert (2018-11-18):
-#
-# Unless otherwise specified, the source for data through 1990 is:
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
-# Unfortunately this book contains many errors and cites no sources.
-#
-# Many years ago Gwillim Law wrote that a good source
-# for time zone data was the International Air Transport
-# Association's Standard Schedules Information Manual (IATA SSIM),
-# published semiannually. Law sent in several helpful summaries
-# of the IATA's data after 1990. Except where otherwise noted,
-# IATA SSIM is the source for entries after 1990.
-#
-# Another source occasionally used is Edward W. Whitman, World Time Differences,
-# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
-# I found in the UCLA library.
-#
-# For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
-# https://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 abbreviation marked "*".
-# The following abbreviations are from other sources.
-# Corrections are welcome!
-# std dst
-# LMT Local Mean Time
-# 8:00 AWST AWDT Western Australia
-# 9:30 ACST ACDT Central Australia
-# 10:00 AEST AEDT Eastern Australia
-# 10:00 GST GDT* Guam through 2000
-# 10:00 ChST Chamorro
-# 11:30 NZMT NZST New Zealand through 1945
-# 12:00 NZST NZDT New Zealand 1946-present
-# -11:00 SST Samoa
-# -10:00 HST Hawaii
-#
-# 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
-# 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
-# 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
-# abbreviation does _not_ change...
-# The legislation does not actually define abbreviations, at least
-# in this State, but the abbreviation is just commonly taken to be the
-# initials of the phrase, and the legislation here uniformly uses
-# the phrase 'summer time' and does not use the phrase 'daylight
-# time'.
-# Announcers on the Commonwealth radio network, the ABC (for Australian
-# Broadcasting Commission), use the phrases 'Eastern Standard Time'
-# or 'Eastern Summer Time'. (Note, though, that as I say in the
-# current australasia file, there is really no such thing.) Announcers
-# on its overseas service, Radio Australia, use the same phrases
-# prefixed by the word 'Australian' when referring to local times;
-# time announcements on that service, naturally enough, are made in UTC.
-
-# From Paul Eggert (2014-06-30):
-#
-# Inspired by Mackin's remarks quoted above, earlier versions of this
-# file used "EST" for both Eastern Standard Time and Eastern Summer
-# Time in Australia, and similarly for "CST", "CWST", and "WST".
-# However, these abbreviations were confusing and were not common
-# practice among Australians, and there were justifiable complaints
-# about them, so I attempted to survey current Australian usage.
-# For the tz database, the full English phrase is not that important;
-# what matters is the abbreviation. It's difficult to survey the web
-# directly for abbreviation usage, as there are so many false hits for
-# strings like "EST" and "EDT", so I looked for pages that defined an
-# abbreviation for eastern or central DST in Australia, and got the
-# following numbers of unique hits for the listed Google queries:
-#
-# 10 "Eastern Daylight Time AEST" site:au [some are false hits]
-# 10 "Eastern Summer Time AEST" site:au
-# 10 "Summer Time AEDT" site:au
-# 13 "EDST Eastern Daylight Saving Time" site:au
-# 18 "Summer Time ESST" site:au
-# 28 "Eastern Daylight Saving Time EDST" site:au
-# 39 "EDT Eastern Daylight Time" site:au [some are false hits]
-# 53 "Eastern Daylight Time EDT" site:au [some are false hits]
-# 54 "AEDT Australian Eastern Daylight Time" site:au
-# 182 "Eastern Daylight Time AEDT" site:au
-#
-# 17 "Central Daylight Time CDT" site:au [some are false hits]
-# 46 "Central Daylight Time ACDT" site:au
-#
-# I tried several other variants (e.g., "Eastern Summer Time EST") but
-# they all returned fewer than 10 unique hits. I also looked for pages
-# mentioning both "western standard time" and an abbreviation, since
-# there is no WST in the US to generate false hits, and found:
-#
-# 156 "western standard time" AWST site:au
-# 226 "western standard time" WST site:au
-#
-# I then surveyed the top ten newspapers in Australia by circulation as
-# listed in Wikipedia, using Google queries like "AEDT site:heraldsun.com.au"
-# and obtaining estimated counts from the initial page of search results.
-# All ten papers greatly preferred "AEDT" to "EDT". The papers
-# surveyed were the Herald Sun, The Daily Telegraph, The Courier-Mail,
-# The Sydney Morning Herald, The West Australian, The Age, The Advertiser,
-# The Australian, The Financial Review, and The Herald (Newcastle).
-#
-# I also searched for historical usage, to see whether abbreviations
-# like "AEDT" are new. A Trove search <http://trove.nla.gov.au/>
-# found only one newspaper (The Canberra Times) with a house style
-# dating back to the 1970s, I expect because other newspapers weren't
-# fully indexed. The Canberra Times strongly preferred abbreviations
-# like "AEDT". The first occurrence of "AEDT" was a World Weather
-# column (1971-11-17, page 24), and of "ACDT" was a Scoreboard column
-# (1993-01-24, p 16). The style was the typical usage but was not
-# strictly enforced; for example, "Welcome to the twilight zones ..."
-# (1994-10-29, p 1) uses the abbreviations AEST/AEDT, CST/CDT, and
-# WST, and goes on to say, "The confusion and frustration some feel
-# about the lack of uniformity among Australia's six states and two
-# territories has prompted one group to form its very own political
-# party -- the Sydney-based Daylight Saving Extension Party."
-#
-# I also surveyed federal government sources. They did not agree:
-#
-# The Australian Government (2014-03-26)
-# http://australia.gov.au/about-australia/our-country/time
-# (This document was produced by the Department of Finance.)
-# AEST ACST AWST AEDT ACDT
-#
-# Bureau of Meteorology (2012-11-08)
-# http://www.bom.gov.au/climate/averages/tables/daysavtm.shtml
-# EST CST WST EDT CDT
-#
-# Civil Aviation Safety Authority (undated)
-# http://services.casa.gov.au/outnback/inc/pages/episode3/episode-3_time_zones.shtml
-# EST CST WST (no abbreviations given for DST)
-#
-# Geoscience Australia (2011-11-24)
-# http://www.ga.gov.au/geodesy/astro/sunrise.jsp
-# AEST ACST AWST AEDT ACDT
-#
-# Parliamentary Library (2008-11-10)
-# https://www.aph.gov.au/binaries/library/pubs/rp/2008-09/09rp14.pdf
-# EST CST WST preferred for standard time; AEST AEDT ACST ACDT also used
-#
-# The Transport Safety Bureau has an extensive series of accident reports,
-# and investigators seem to use whatever abbreviation they like.
-# Googling site:atsb.gov.au found the following number of unique hits:
-# 311 "ESuT", 195 "EDT", 26 "AEDT", 83 "CSuT", 46 "CDT".
-# "_SuT" tended to appear in older reports, and "A_DT" tended to
-# appear in reports of events with international implications.
-#
-# From the above it appears that there is a working consensus in
-# Australia to use trailing "DT" for daylight saving time; although
-# some sources use trailing "SST" or "ST" or "SuT" they are by far in
-# the minority. The case for leading "A" is weaker, but since it
-# seems to be preferred in the overall web and is preferred in all
-# the leading newspaper websites and in many government departments,
-# it has a stronger case than omitting the leading "A". The current
-# version of the database therefore uses abbreviations like "AEST" and
-# "AEDT" for Australian time zones.
-
-# From Paul Eggert (1995-12-19):
-# Shanks & Pottenger report 2:00 for all autumn changes in Australia and NZ.
-# Mark Prior writes that his newspaper
-# reports that NSW's fall 1995 change will occur at 2:00,
-# but Robert Elz says it's been 3:00 in Victoria since 1970
-# and perhaps the newspaper's '2:00' is referring to standard time.
-# For now we'll continue to assume 2:00s for changes since 1960.
-
-# From Eric Ulevik (1998-01-05):
-#
-# Here are some URLs to Australian time legislation. These URLs are stable,
-# and should probably be included in the data file. There are probably more
-# relevant entries in this database.
-#
-# NSW (including LHI and Broken Hill):
-# Standard Time Act 1987 (updated 1995-04-04)
-# https://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html
-# ACT
-# Standard Time and Summer Time Act 1972
-# https://www.austlii.edu.au/au/legis/act/consol_act/stasta1972279/index.html
-# SA
-# Standard Time Act, 1898
-# https://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
-# one week next year to allow for the 2006 Commonwealth Games.
-# Daylight Saving is now to end for next year only on the first Sunday
-# in April instead of the last Sunday in March.
-#
-# From Gwillim Law (2005-06-14):
-# I did some Googling and found that all of those states (and territory) plan
-# to extend DST together in 2006.
-# ACT: http://www.cmd.act.gov.au/mediareleases/fileread.cfm?file=86.txt
-# New South Wales: http://www.thecouriermail.news.com.au/common/story_page/0,5936,15538869%255E1702,00.html
-# South Australia: http://www.news.com.au/story/0,10117,15555031-1246,00.html
-# Tasmania: http://www.media.tas.gov.au/release.php?id=14772
-# Victoria: I wasn't able to find anything separate, but the other articles
-# allude to it.
-# But not Queensland
-# http://www.news.com.au/story/0,10117,15564030-1248,00.html
-
-# Northern Territory
-
-# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
-# # The NORTHERN TERRITORY.. [ Courtesy N.T. Dept of the Chief Minister ]
-# # [ Nov 1990 ]
-# # N.T. have never utilised any DST due to sub-tropical/tropical location.
-# ...
-# Zone Australia/North 9:30 - CST
-
-# From Bradley White (1991-03-04):
-# A recent excerpt from an Australian newspaper...
-# the Northern Territory do[es] not have daylight saving.
-
-# Western Australia
-
-# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
-# # The state of WESTERN AUSTRALIA.. [ Courtesy W.A. dept Premier+Cabinet ]
-# # [ Nov 1990 ]
-# # W.A. suffers from a great deal of public and political opposition to
-# # DST in principle. A bill is brought before parliament in most years, but
-# # usually defeated either in the upper house, or in party caucus
-# # before reaching parliament.
-# ...
-# Zone Australia/West 8:00 AW %sST
-# ...
-# Rule AW 1974 only - Oct lastSun 2:00 1:00 D
-# Rule AW 1975 only - Mar Sun>=1 3:00 0 W
-# Rule AW 1983 only - Oct lastSun 2:00 1:00 D
-# Rule AW 1984 only - Mar Sun>=1 3:00 0 W
-
-# From Bradley White (1991-03-04):
-# A recent excerpt from an Australian newspaper...
-# Western Australia...do[es] not have daylight saving.
-
-# From John D. Newman via Bradley White (1991-11-02):
-# Western Australia is still on "winter time". Some DH in Sydney
-# rang me at home a few days ago at 6.00am. (He had just arrived at
-# work at 9.00am.)
-# W.A. is switching to Summer Time on Nov 17th just to confuse
-# everybody again.
-
-# From Arthur David Olson (1992-03-08):
-# The 1992 ending date used in the rules is a best guess;
-# it matches what was used in the past.
-
-# The Australian Bureau of Meteorology FAQ
-# 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.
-
-# From Paul Eggert (2018-04-01):
-# The Guardian Express of Perth, Australia reported today that the
-# government decided to advance the clocks permanently on January 1,
-# 2019, from UT +08 to UT +09. The article noted that an exemption
-# would be made for people aged 61 and over, who "can apply in writing
-# to have the extra hour of sunshine removed from their area." See:
-# Daylight saving coming to WA in 2019. Guardian Express. 2018-04-01.
-# https://www.communitynews.com.au/guardian-express/news/exclusive-daylight-savings-coming-wa-summer-2018/
-
-# Queensland
-
-# From Paul Eggert (2018-02-26):
-# I lack access to the following source for Queensland DST:
-# Pearce C. History of daylight saving time in Queensland.
-# Queensland Hist J. 2017 Aug;23(6):389-403
-# https://search.informit.com.au/documentSummary;dn=994682348436426;res=IELHSS
-
-# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
-# # The state of QUEENSLAND.. [ Courtesy Qld. Dept Premier Econ&Trade Devel ]
-# # [ Dec 1990 ]
-# ...
-# Zone Australia/Queensland 10:00 AQ %sST
-# ...
-# Rule AQ 1971 only - Oct lastSun 2:00 1:00 D
-# Rule AQ 1972 only - Feb lastSun 3:00 0 E
-# Rule AQ 1989 max - Oct lastSun 2:00 1:00 D
-# Rule AQ 1990 max - Mar Sun>=1 3:00 0 E
-
-# From Bradley White (1989-12-24):
-# "Australia/Queensland" now observes daylight time (i.e. from
-# October 1989).
-
-# From Bradley White (1991-03-04):
-# A recent excerpt from an Australian newspaper...
-# ...Queensland...[has] agreed to end daylight saving
-# at 3am tomorrow (March 3)...
-
-# From John Mackin (1991-03-06):
-# I can certainly confirm for my part that Daylight Saving in NSW did in fact
-# end on Sunday, 3 March. I don't know at what hour, though. (It surprised
-# me.)
-
-# From Bradley White (1992-03-08):
-# ...there was recently a referendum in Queensland which resulted
-# in the experimental daylight saving system being abandoned. So, ...
-# ...
-# Rule QLD 1989 1991 - Oct lastSun 2:00 1:00 D
-# Rule QLD 1990 1992 - Mar Sun>=1 3:00 0 S
-# ...
-
-# From Arthur David Olson (1992-03-08):
-# The chosen rules the union of the 1971/1972 change and the 1989-1992 changes.
-
-# From Christopher Hunt (2006-11-21), after an advance warning
-# from Jesper 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
-# southern coast.... South Australia observes daylight saving time; Western
-# Australia does not. The two states are one and a half hours apart. The
-# residents decided to forget about this nonsense of changing the clock so
-# much and set the local time 20 hours and 45 minutes from the
-# international date line, or right in the middle of the time of South
-# Australia and Western Australia....
-#
-# From Paul Eggert (2002-04-09):
-# This is confirmed by the section entitled
-# "What's the deal with time zones???" in
-# http://www.earthsci.unimelb.edu.au/~awatkins/null.html
-#
-# From Alex Livingston (2006-12-07):
-# ... it was just on four years ago that I drove along the Eyre Highway,
-# which passes through eastern Western Australia close to the southern
-# coast of the continent.
-#
-# I paid particular attention to the time kept there. There can be no
-# dispute that UTC+08:45 was considered "the time" from the border
-# village just inside the border with South Australia to as far west
-# as just east of Caiguna. There can also be no dispute that Eucla is
-# the largest population centre in this zone....
-#
-# Now that Western Australia is observing daylight saving, the
-# question arose whether this part of the state would follow suit. I
-# just called the border village and confirmed that indeed they have,
-# meaning that they are now observing UTC+09:45.
-#
-# (2006-12-09):
-# I personally doubt that either experimentation with daylight saving
-# in WA or its introduction in SA had anything to do with the genesis
-# of this time zone. My hunch is that it's been around since well
-# before 1975. I remember seeing it noted on road maps decades ago.
-
-# From Paul Eggert (2006-12-15):
-# For lack of better info, assume the tradition dates back to the
-# introduction of standard time in 1895.
-
-
-# southeast Australia
-#
-# From Paul Eggert (2007-07-23):
-# Starting autumn 2008 Victoria, NSW, South Australia, Tasmania and the ACT
-# end DST the first Sunday in April and start DST the first Sunday in October.
-# http://www.theage.com.au/news/national/daylight-savings-to-span-six-months/2007/06/27/1182623966703.html
-
-
-# South Australia
-
-# From Bradley White (1991-03-04):
-# A recent excerpt from an Australian newspaper...
-# ...South Australia...[has] agreed to end daylight saving
-# at 3am tomorrow (March 3)...
-
-# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
-# # The state of SOUTH AUSTRALIA....[ Courtesy of S.A. Dept of Labour ]
-# # [ Nov 1990 ]
-# ...
-# Zone Australia/South 9:30 AS %sST
-# ...
-# Rule AS 1971 max - Oct lastSun 2:00 1:00 D
-# Rule AS 1972 1985 - Mar Sun>=1 3:00 0 C
-# Rule AS 1986 1990 - Mar Sun>=15 3:00 0 C
-# Rule AS 1991 max - Mar Sun>=1 3:00 0 C
-
-# From Bradley White (1992-03-11):
-# Recent correspondence with a friend in Adelaide
-# contained the following exchange: "Due to the Adelaide Festival,
-# South Australia delays setting back our clocks for a few weeks."
-
-# From Robert Elz (1992-03-13):
-# I heard that apparently (or at least, it appears that)
-# South Aus will have an extra 3 weeks daylight saving every even
-# numbered year (from 1990). That's when the Adelaide Festival
-# is on...
-
-# From Robert Elz (1992-03-16, 00:57:07 +1000):
-# DST didn't end in Adelaide today (yesterday)....
-# But whether it's "4th Sunday" or "2nd last Sunday" I have no idea whatever...
-# (it's just as likely to be "the Sunday we pick for this year"...).
-
-# From Bradley White (1994-04-11):
-# If Sun, 15 March, 1992 was at +1030 as kre asserts, but yet Sun, 20 March,
-# 1994 was at +0930 as John Connolly's customer seems to assert, then I can
-# only conclude that the actual rule is more complicated....
-
-# From John Warburton (1994-10-07):
-# The new Daylight Savings dates for South Australia ...
-# was gazetted in the Government Hansard on Sep 26 1994....
-# start on last Sunday in October and end in last sunday in March.
-
-# From Paul Eggert (2007-07-23):
-# See "southeast Australia" above for 2008 and later.
-
-# Tasmania
-
-# The rules for 1967 through 1991 were reported by George Shepherd
-# via Simon Woodhead via Robert Elz (1991-03-06):
-# # The state of TASMANIA.. [Courtesy Tasmanian Dept of Premier + Cabinet ]
-# # [ Nov 1990 ]
-
-# From Bill Hart via Guy Harris (1991-10-10):
-# Oh yes, the new daylight savings rules are uniquely tasmanian, we have
-# 6 weeks a year now when we are out of sync with the rest of Australia
-# (but nothing new about that).
-
-# From Alex Livingston (1999-10-04):
-# I heard on the ABC (Australian Broadcasting Corporation) radio news on the
-# (long) weekend that Tasmania, which usually goes its own way in this regard,
-# has decided to join with most of NSW, the ACT, and most of Victoria
-# (Australia) and start daylight saving on the last Sunday in August in 2000
-# instead of the first Sunday in October.
-
-# Sim Alam (2000-07-03) reported a legal citation for the 2000/2001 rules:
-# http://www.thelaw.tas.gov.au/fragview/42++1968+GS3A@EN+2000070300
-
-# From Paul Eggert (2007-07-23):
-# See "southeast Australia" above for 2008 and later.
-
-# Victoria
-
-# The rules for 1971 through 1991 were reported by George Shepherd
-# via Simon Woodhead via Robert Elz (1991-03-06):
-# # The state of VICTORIA.. [ Courtesy of Vic. Dept of Premier + Cabinet ]
-# # [ Nov 1990 ]
-
-# From Scott Harrington (2001-08-29):
-# On KQED's "City Arts and Lectures" program last night I heard an
-# interesting story about daylight savings time. Dr. John Heilbron was
-# discussing his book "The Sun in the Church: Cathedrals as Solar
-# Observatories"[1], and in particular the Shrine of Remembrance[2] located
-# in Melbourne, Australia.
-#
-# Apparently the shrine's main purpose is a beam of sunlight which
-# illuminates a special spot on the floor at the 11th hour of the 11th day
-# of the 11th month (Remembrance Day) every year in memory of Australia's
-# fallen WWI soldiers. And if you go there on Nov. 11, at 11am local time,
-# you will indeed see the sunbeam illuminate the special spot at the
-# expected time.
-#
-# However, that is only because of some special mirror contraption that had
-# to be employed, since due to daylight savings time, the true solar time of
-# the remembrance moment occurs one hour later (or earlier?). Perhaps
-# someone with more information on this jury-rig can tell us more.
-#
-# [1] http://www.hup.harvard.edu/catalog/HEISUN.html
-# [2] http://www.shrine.org.au
-
-# From Paul Eggert (2007-07-23):
-# See "southeast Australia" above for 2008 and later.
-
-# New South Wales
-
-# From Arthur David Olson:
-# New South Wales and subjurisdictions have their own ideas of a fun time.
-# Based on law library research by John Mackin,
-# who notes:
-# In Australia, time is not legislated federally, but rather by the
-# individual states. Thus, while such terms as "Eastern Standard Time"
-# [I mean, of course, Australian EST, not any other kind] are in common
-# use, _they have NO REAL MEANING_, as they are not defined in the
-# legislation. This is very important to understand.
-# I have researched New South Wales time only...
-
-# From Eric Ulevik (1999-05-26):
-# DST will start in NSW on the last Sunday of August, rather than the usual
-# October in 2000. See: Matthew Moore,
-# 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
-# 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 follow NSW. See:
-# 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)
-# 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
-# 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."
-#
-# Broken Hill will stick with South Australian time in 2000. See:
-# 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
-# Hill, and Victoria will be August 27, presumably due to the Sydney Olympics.
-
-# From Eric Ulevik, referring to Sydney's Sun Herald (2000-08-13), page 29:
-# The Queensland Premier Peter Beattie is encouraging northern NSW
-# towns to use Queensland time.
-
-# From Paul Eggert (2007-07-23):
-# See "southeast Australia" above for 2008 and later.
-
-# Yancowinna
-
-# From John Mackin (1989-01-04):
-# 'Broken Hill' means the County of Yancowinna.
-
-# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
-# # YANCOWINNA.. [ Confirmation courtesy of Broken Hill Postmaster ]
-# # [ Dec 1990 ]
-# ...
-# # Yancowinna uses Central Standard Time, despite [its] location on the
-# # New South Wales side of the S.A. border. Most business and social dealings
-# # are with CST zones, therefore CST is legislated by local government
-# # although the switch to Summer Time occurs in line with N.S.W. There have
-# # been years when this did not apply, but the historical data is not
-# # presently available.
-# Zone Australia/Yancowinna 9:30 AY %sST
-# ...
-# Rule AY 1971 1985 - Oct lastSun 2:00 1:00 D
-# Rule AY 1972 only - Feb lastSun 3:00 0 C
-# [followed by other Rules]
-
-# Lord Howe Island
-
-# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
-# LHI... [ Courtesy of Pauline Van Winsen ]
-# [ Dec 1990 ]
-# Lord Howe Island is located off the New South Wales coast, and is half an
-# hour ahead of NSW time.
-
-# From James Lonergan, Secretary, Lord Howe Island Board (2000-01-27):
-# Lord Howe Island summer time in 2000/2001 will commence on the same
-# date as the rest of NSW (i.e. 2000-08-27). For your information the
-# Lord Howe Island Board (controlling authority for the Island) is
-# seeking the community's views on various options for summer time
-# arrangements on the Island, e.g. advance clocks by 1 full hour
-# instead of only 30 minutes. [Dependent] on the wishes of residents
-# the Board may approach the NSW government to change the existing
-# arrangements. The starting date for summer time on the Island will
-# however always coincide with the rest of NSW.
-
-# From James Lonergan, Secretary, Lord Howe Island Board (2000-10-25):
-# Lord Howe Island advances clocks by 30 minutes during DST in NSW and retards
-# clocks by 30 minutes when DST finishes. Since DST was most recently
-# introduced in NSW, the "changeover" time on the Island has been 02:00 as
-# shown on clocks on LHI. I guess this means that for 30 minutes at the start
-# of DST, LHI is actually 1 hour ahead of the rest of NSW.
-
-# From Paul Eggert (2006-03-22):
-# For Lord Howe dates we use Shanks & Pottenger through 1989, and
-# Lonergan thereafter. For times we use Lonergan.
-
-# From Paul Eggert (2007-07-23):
-# See "southeast Australia" above for 2008 and later.
-
-# From Steffen Thorsen (2009-04-28):
-# According to the official press release, South Australia's extended daylight
-# saving period will continue with the same rules as used during the 2008-2009
-# 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
-# year and finish on the first Sunday in April the following year.
-# Industrial Relations Minister, Paul Caica, says this provides South Australia
-# with a consistent half hour time difference with NSW, Victoria, Tasmania and
-# the ACT for all 52 weeks of the year...
-#
-# We have a wrap-up here:
-# https://www.timeanddate.com/news/time/south-australia-extends-dst.html
-###############################################################################
-
-# New Zealand
-
-# From Mark Davies (1990-10-03):
-# the 1989/90 year was a trial of an extended "daylight saving" period.
-# This trial was deemed successful and the extended period adopted for
-# subsequent years (with the addition of a further week at the start).
-# source - phone call to Ministry of Internal Affairs Head Office.
-
-# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
-# # The Country of New Zealand (Australia's east island -) Gee they hate that!
-# # or is Australia the west island of N.Z.
-# # [ courtesy of Geoff Tribble.. Auckland N.Z. ]
-# # [ Nov 1990 ]
-# ...
-# Rule NZ 1974 1988 - Oct lastSun 2:00 1:00 D
-# Rule NZ 1989 max - Oct Sun>=1 2:00 1:00 D
-# Rule NZ 1975 1989 - Mar Sun>=1 3:00 0 S
-# Rule NZ 1990 max - Mar lastSun 3:00 0 S
-# ...
-# Zone NZ 12:00 NZ NZ%sT # New Zealand
-# Zone NZ-CHAT 12:45 - NZ-CHAT # Chatham Island
-
-# From Arthur David Olson (1992-03-08):
-# The chosen rules use the Davies October 8 values for the start of DST in 1989
-# rather than the October 1 value.
-
-# From Paul Eggert (1995-12-19);
-# Shank & Pottenger report 2:00 for all autumn changes in Australia and NZ.
-# Robert Uzgalis writes that the New Zealand Daylight
-# Savings Time Order in Council dated 1990-06-18 specifies 2:00 standard
-# time on both the first Sunday in October and the third Sunday in March.
-# As with Australia, we'll assume the tradition is 2:00s, not 2:00.
-#
-# From Paul Eggert (2006-03-22):
-# The Department of Internal Affairs (DIA) maintains a brief history,
-# as does Carol Squires; see tz-link.html for the full references.
-# Use these sources in preference to Shanks & Pottenger.
-#
-# For Chatham, IATA SSIM (1991/1999) gives the NZ rules but with
-# transitions at 2:45 local standard time; this confirms that Chatham
-# is always exactly 45 minutes ahead of Auckland.
-
-# From Colin Sharples (2007-04-30):
-# DST will now start on the last Sunday in September, and end on the
-# first Sunday in April. The changes take effect this year, meaning
-# that DST will begin on 2007-09-30 2008-04-06.
-# http://www.dia.govt.nz/diawebsite.nsf/wpg_URL/Services-Daylight-Saving-Daylight-saving-to-be-extended
-
-# 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).
-# https://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 UT +11:30; also, assume Chatham Islands did
-# not observe New Zealand's prewar DST.
-
-###############################################################################
-
-
-# Fiji
-
-# Howse writes (p 153) that in 1879 the British governor of Fiji
-# enacted an ordinance standardizing the islands on Antipodean Time
-# instead of the American system (which was one day behind).
-
-# From Rives McDow (1998-10-08):
-# Fiji will introduce DST effective 0200 local time, 1998-11-01
-# until 0300 local time 1999-02-28. Each year the DST period will
-# be from the first Sunday in November until the last Sunday in February.
-
-# From Paul Eggert (2000-01-08):
-# IATA SSIM (1999-09) says DST ends 0100 local time. Go with McDow.
-
-# From the BBC World Service in
-# http://news.bbc.co.uk/2/hi/asia-pacific/205226.stm (1998-10-31 16:03 UTC):
-# 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.
-
-# http://www.fiji.gov.fj/press/2000_09/2000_09_13-05.shtml (2000-09-13)
-# reports that Fiji has discontinued DST.
-
-
-# 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"
-# as part of the competition to be first into the 21st century.
-
-# From Kerry Shetline (2018-02-03):
-# December 31 was the day that was skipped, so that the transition
-# would be from Friday December 30, 1994 to Sunday January 1, 1995.
-# From Paul Eggert (2018-02-04):
-# One source for this is page 202 of: Bartky IR. One Time Fits All:
-# The Campaigns for Global Uniformity (2007).
-
-# Kwajalein
-
-# From an AP article (1993-08-22):
-# "The nearly 3,000 Americans living on this remote Pacific atoll have a good
-# excuse for not remembering Saturday night: there wasn't one. Residents were
-# going to bed Friday night and waking up Sunday morning because at midnight
-# -- 8 A.M. Eastern daylight time on Saturday -- Kwajalein was jumping from
-# one side of the international date line to the other."
-# "In Marshall Islands, Friday is followed by Sunday", NY Times. 1993-08-22.
-# https://www.nytimes.com/1993/08/22/world/in-marshall-islands-friday-is-followed-by-sunday.html
-
-# From Phake Nick (2018-10-27):
-# <https://wiki.suikawiki.org/n/ćæŽçŸ€ćł¶ăźæšæșæ> ... pointed out that
-# currently tzdata say Pacific/Kwajalein switched from GMT+11 to GMT-12 in
-# 1969 October without explanation, however an 1993 article from NYT say it
-# synchorized its day with US mainland about 40 years ago and thus the switch
-# should occur at around 1950s instead.
-#
-# From Paul Eggert (2018-11-18):
-# The NYT (actually, AP) article is vague and possibly wrong about this.
-# The article says the earlier switch was "40 years ago when the United States
-# Army established a missile test range here". However, the Kwajalein Test
-# Center was established on 1960-10-01 and was run by the US Navy. It was
-# transferred to the US Army on 1964-07-01. See "Seize the High Ground"
-# <https://history.army.mil/html/books/070/70-88-1/cmhPub_70-88-1.pdf>.
-# Given that Shanks was right on the money about the 1993 change, I'm inclined
-# to take Shanks's word for the 1969 change unless we find better evidence.
-
-
-# N Mariana Is, Guam
-
-# From Phake Nick (2018-10-27):
-# Guam Island was briefly annexed by Japan during ... year 1941-1944 ...
-# however there are no detailed information about what time it use during that
-# period. It would probably be reasonable to assume Guam use GMT+9 during
-# that period of time like the surrounding area.
-
-# From Paul Eggert (2018-11-18):
-# 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.
-#
-# Use 1941-12-10 and 1944-07-31 for Guam WWII transitions, as the rough start
-# and end of Japanese control of Agana. We don't know whether the Northern
-# Marianas followed Guam's DST rules from 1959 through 1977; for now, assume
-# they did as that avoids the need for a separate zone due to our 1970 cutoff.
-#
-# US Public Law 106-564 (2000-12-23) made UT +10 the official standard time,
-# under the name "Chamorro Standard Time". There is no official abbreviation,
-# but Congressman Robert A. Underwood, author of the bill that became law,
-# wrote in a press release (2000-12-27) that he will seek the use of "ChST".
-
-# See also the commentary for Micronesia.
-
-
-# Marshall Is
-# See the commentary for Micronesia.
-
-
-# Micronesia (and nearby)
-
-# From Paul Eggert (2018-11-18):
-# Like the Ladrones (see Guam commentary), assume the Spanish East Indies
-# kept American time until the Philippines switched at the end of 1844.
-
-# Alan Eugene Davis writes (1996-03-16),
-# "I am certain, having lived there for the past decade, that 'Truk'
-# (now properly known as Chuuk) ... is in the time zone GMT+10."
-#
-# Shanks & Pottenger write that Truk switched from UT +10 to +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)
-# http://www.fsmgov.org/info/clocks.html
-# that Truk and Yap are UT +10, and Ponape and Kosrae are +11.
-# We don't know when Kosrae switched from +12; assume January 1 for now.
-
-# From Phake Nick (2018-10-27):
-#
-# From a Japanese wiki site https://wiki.suikawiki.org/n/ćæŽçŸ€ćł¶ăźæšæșæ
-# ...
-# For "Southern Islands" (modern region of Mariana + Palau + Federation of
-# Micronesia + Marshall Islands):
-#
-# A 1906 Japanese magazine shown the Caroline Islands and Mariana Islands
-# who was occupied by Germany at the time as GMT+10, together with the like
-# of German New Guinea. However there is a marking saying it have not been
-# implemented (yet). No further information after that were found.
-#
-# Japan invaded those islands in 1914, and records shows that they were
-# instructed to use JST at the time.
-#
-# 1915 January telecommunication record on the Jaluit Atoll shows they use
-# the meridian of 170E as standard time (GMT+11:20), which is similar to the
-# longitude of the atoll.
-# 1915 February record say the 170E standard time is to be used until
-# February 9 noon, and after February 9 noon they are to use JST.
-# However these are time used within the Japanese Military at the time and
-# probably does not reflect the time used by local resident at the time (that
-# is if they keep their own time back then)
-#
-# In January 1919 the occupying force issued a command that split the area
-# into three different timezone with meridian of 135E, 150E, 165E (JST+0, +1,
-# +2), and the command was to become effective from February 1 of the same
-# year. Despite the target of the command is still only for the occupying
-# force itself, further publication have described the time as the standard
-# time for the occupied area and thus it can probably be seen as such.
-# * Area that use meridian of 135E: Palau and Yap civil administration area
-# (Southern Islands Western Standard Time)
-# * Area that use meridian of 150E: Truk (Chuuk) and Saipan civil
-# administration area (Southern Islands Central Standard Time)
-# * Area that use meridian of 165E: Ponape (Pohnpei) and Jaluit civil
-# administration area (Southern Islands Eastern Standard Time).
-# * In the next few years Japanese occupation of those islands have been
-# formalized via League of Nation Mandate (South Pacific Mandate) and formal
-# governance structure have been established, these district [become
-# subprefectures] and timezone classification have been inherited as standard
-# time of the area.
-# * Saipan subprefecture include Mariana islands (exclude Guam which was
-# occupied by America at the time), Palau and Yap subprefecture rule the
-# Western Caroline Islands with 137E longitude as border, Truk and Ponape
-# subprefecture rule the Eastern Caroline Islands with 154E as border, Ponape
-# subprefecture also rule part of Marshall Islands to the west of 164E
-# starting from (1918?) and Jaluit subprefecture rule the rest of the
-# Marshall Islands.
-#
-# And then in year 1937, an announcement was made to change the time in the
-# area into 2 timezones:
-# * Area that use meridian of 135E: area administered by Palau, Yap and
-# Saipan subprefecture (Southern Islands Western Standard Time)
-# * Area that use meridian of 150E: area administered by Truk (Chuuk),
-# Ponape (Pohnpei) and Jaluit subprefecture (Southern Islands Eastern
-# Standard Time)
-#
-# Another announcement issued in 1941 say that on April 1 that year,
-# standard time of the Southern Islands would be changed to use the meridian
-# of 135E (GMT+9), and thus abolishing timezone different within the area.
-#
-# Then Pacific theater of WWII started and Japan slowly lose control on the
-# island. The webpage I linked above contain no information during this
-# period of time....
-#
-# After the end of WWII, in 1946 February, a document written by the
-# (former?) Japanese military personnel describe there are 3 hours time
-# different between Caroline islands time/Wake island time and the Chungking
-# time, which would mean the time being used there at the time was GMT+10.
-#
-# After that, the area become Trust Territories of the Pacific Islands
-# under American administration from year 1947. The site listed some
-# American/International books/maps/publications about time used in those
-# area during this period of time but they doesn't seems to be reliable
-# information so it would be the best if someone know where can more reliable
-# information can be found.
-#
-#
-# From Paul Eggert (2018-11-18):
-#
-# For the above, use vague dates like "1914" and "1945" for transitions that
-# plausibly exist but for which the details are not known. The information
-# for Wake is too sketchy to act on.
-#
-# The 1906 GMT+10 info about German-controlled islands might not have been
-# done, so omit it from the data for now.
-#
-# The Jaluit info governs Kwajalein.
-
-
-# Midway
-
-# From Charles T O'Connor, KMTH DJ (1956),
-# quoted in the KTMH section of the Radio Heritage Collection
-# <http://radiodx.com/spdxr/KMTH.htm> (2002-12-31):
-# For the past two months we've been on what is known as Daylight
-# Saving Time. This time has put us on air at 5am in the morning,
-# your time down there in New Zealand. Starting September 2, 1956
-# we'll again go back to Standard Time. This'll mean that we'll go to
-# air at 6am your time.
-#
-# From Paul Eggert (2003-03-23):
-# We don't know the date of that quote, but we'll guess they
-# started DST on June 3. Possibly DST was observed other years
-# in Midway, but we have no record of it.
-
-# Nauru
-
-# From Phake Nick (2018-10-31):
-# Currently, the tz database say Nauru use LMT until 1921, and then
-# switched to GMT+11:30 for the next two decades.
-# However, a number of timezone map published in America/Japan back then
-# showed its timezone as GMT+11 per https://wiki.suikawiki.org/n/ăăŠă«ăźæšæșæ
-# And it would also be nice if the 1921 transition date could be sourced.
-# ...
-# The "Nauru Standard Time Act 1978 Time Change"
-# http://ronlaw.gov.nr/nauru_lpms/files/gazettes/4b23a17d2030150404db7a5fa5872f52.pdf#page=3
-# based on "Nauru Standard Time Act 1978 Time Change"
-# http://www.paclii.org/nr/legis/num_act/nsta1978207/ defined that "Nauru
-# Alternative Time" (GMT+12) should be in effect from 1979 Feb.
-#
-# From Paul Eggert (2018-11-19):
-# The 1921-01-15 introduction of standard time is in Shanks; it is also in
-# "Standard Time Throughout the World", US National Bureau of Standards (1935),
-# page 3, which does not give the UT offset. In response to a comment by
-# Phake Nick I set the Nauru time of occupation by Japan to
-# 1942-08-29/1945-09-08 by using dates from:
-# https://en.wikipedia.org/wiki/Japanese_occupation_of_Nauru
-
-# Norfolk
-
-# From Alexander Krivenyshev (2015-09-23):
-# Norfolk Island will change ... from +1130 to +1100:
-# https://www.comlaw.gov.au/Details/F2015L01483/Explanatory%20Statement/Text
-# ... at 12.30 am (by legal time in New South Wales) on 4 October 2015.
-# http://www.norfolkisland.gov.nf/nia/MediaRelease/Media%20Release%20Norfolk%20Island%20Standard%20Time%20Change.pdf
-
-# From Paul Eggert (2015-09-23):
-# Transitions before 2015 are from timeanddate.com, which consulted
-# the Norfolk Island Museum and the Australian Bureau of Meteorology's
-# Norfolk Island station, and found no record of Norfolk observing DST
-# other than in 1974/5. See:
-# https://www.timeanddate.com/time/australia/norfolk-island.html
-
-# Palau
-# See commentary for Micronesia.
-
-# Pitcairn
-
-# From Rives McDow (1999-11-08):
-# A Proclamation was signed by the Governor of Pitcairn on the 27th March 1998
-# with regard to Pitcairn Standard Time. The Proclamation is as follows.
-#
-# The local time for general purposes in the Islands shall be
-# Co-ordinated Universal time minus 8 hours and shall be known
-# as Pitcairn Standard Time.
-#
-# ... I have also seen Pitcairn listed as UTC minus 9 hours in several
-# references, and can only assume that this was an error in interpretation
-# somehow in light of this proclamation.
-
-# From Rives McDow (1999-11-09):
-# The Proclamation regarding Pitcairn time came into effect on 27 April 1998
-# ... at midnight.
-
-# From Howie Phelps (1999-11-10), who talked to a Pitcairner via shortwave:
-# Betty Christian told me yesterday that their local time is the same as
-# Pacific Standard Time. They used to be œ hour different from us here in
-# Sacramento but it was changed a couple of years ago.
-
-
-# (Western) Samoa and American Samoa
-
-# Howse writes (p 153) that after the 1879 standardization on Antipodean
-# time by the British governor of Fiji, 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."
-# This happened in 1892, according to the Evening News (Sydney) of 1892-07-20.
-# https://www.staff.science.uu.nl/~gent0113/idl/idl.htm
-
-# Although Shanks & Pottenger says they both switched to UT -11:30
-# in 1911, and to -11 in 1950. many earlier sources give -11
-# for American Samoa, e.g., the US National Bureau of Standards
-# circular "Standard Time Throughout the World", 1932.
-# Assume American Samoa switched to -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."
-# 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':
-# 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
-# local time to come on the same standard time as New Zealand or of
-# advancing its time to maintain the differential of 13°
-# (approximately 50 minutes ahead of New Zealand 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
-# islands objected. "If at midnight on Dec. 31, we move ahead 40
-# minutes, as your Royal Highness wishes, what becomes of the 40
-# minutes we have lost?"
-#
-# The Crown Prince, presented an unanswerable argument: "Remember that
-# on the World Day of Prayer, you would be the first people on Earth
-# to say your prayers in the morning."
-
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger say the transition was on 1968-10-01; go with Mundell.
-
-# From Eric Ulevik (1999-05-03):
-# Tonga's director of tourism, who is also secretary of the National Millennium
-# Committee, has a plan to get Tonga back in front.
-# He has proposed a one-off move to tropical daylight saving for Tonga from
-# October to March, which has won approval in principle from the Tongan
-# Government.
-
-# From Steffen Thorsen (1999-09-09):
-# * Tonga will introduce DST in November
-#
-# I was given this link by John Letts:
-# 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
-# of UTC as well, but as far as I know Fiji will only be 13 hours ahead
-# (12 + 1 hour DST).
-
-# From Arthur David Olson (1999-09-20):
-# According to <http://www.tongaonline.com/news/sept1799.html>:
-# "Daylight Savings Time will take effect on Oct. 2 through April 15, 2000
-# and annually thereafter from the first Saturday in October through the
-# third Saturday of April. Under the system approved by Privy Council on
-# Sept. 10, clocks must be turned ahead one hour on the opening day and
-# set back an hour on the closing date."
-# Alas, no indication of the time of day.
-
-# From Rives McDow (1999-10-06):
-# Tonga started its Daylight Saving on Saturday morning October 2nd at 0200am.
-# Daylight Saving ends on April 16 at 0300am which is Sunday morning.
-
-# From Steffen Thorsen (2000-10-31):
-# Back in March I found a notice on the website http://www.tongaonline.com
-# that Tonga changed back to standard time one month early, on March 19
-# instead of the original reported date April 16. Unfortunately, the article
-# is no longer available on the site, and I did not make a copy of the
-# text, and I have forgotten to report it here.
-# (Original URL was <http://www.tongaonline.com/news/march162000.htm>)
-
-# From Rives McDow (2000-12-01):
-# Tonga is observing DST as of 2000-11-04 and will stop on 2001-01-27.
-
-# From Sione Moala-Mafi (2001-09-20) via Rives McDow:
-# At 2:00am on the first Sunday of November, the standard time in the Kingdom
-# shall be moved forward by one hour to 3:00am. At 2:00am on the last Sunday
-# of January the standard time in the Kingdom shall be moved backward by one
-# hour to 1:00am.
-
-# From Pulu ʻAnau (2002-11-05):
-# The law was for 3 years, supposedly to get renewed. It wasn't.
-
-# From Pulu ʻAnau (2016-10-27):
-# http://mic.gov.to/news-today/press-releases/6375-daylight-saving-set-to-run-from-6-november-2016-to-15-january-2017
-# Cannot find anyone who knows the rules, has seen the duration or has seen
-# the cabinet decision, but it appears we are following Fiji's rule set.
-#
-# From Tim Parenti (2016-10-26):
-# Assume Tonga will observe DST from the first Sunday in November at 02:00
-# through the third Sunday in January at 03:00, like Fiji, for now.
-
-# From David Wade (2017-10-18):
-# In August government was disolved by the King. The current prime minister
-# continued in office in care taker mode. It is easy to see that few
-# decisions will be made until elections 16th November.
-#
-# From Paul Eggert (2017-10-18):
-# For now, guess that DST is discontinued. That's what the IATA is guessing.
-
-
-# Wake
-
-# From Vernice Anderson, Personal Secretary to Philip Jessup,
-# US Ambassador At Large (oral history interview, 1971-02-02):
-#
-# Saturday, the 14th [of October, 1950] - ... The time was all the
-# more confusing at that point, because we had crossed the
-# International Date Line, thus getting two Sundays. Furthermore, we
-# discovered that Wake Island had two hours of daylight saving time
-# making calculation of time in Washington difficult if not almost
-# impossible.
-#
-# https://www.trumanlibrary.org/oralhist/andrsonv.htm
-
-# From Paul Eggert (2003-03-23):
-# We have no other report of DST in Wake Island, so omit this info for now.
-
-# See also the commentary for Micronesia.
-
-
-###############################################################################
-
-# The International Date Line
-
-# From Gwillim Law (2000-01-03):
-#
-# The International Date Line is not defined by any international standard,
-# convention, or treaty. Mapmakers are free to draw it as they please.
-# Reputable mapmakers will simply ensure that every point of land appears on
-# the correct side of the IDL, according to the date legally observed there.
-#
-# When Kiribati adopted a uniform date in 1995, thereby moving the Phoenix and
-# Line Islands to the west side of the IDL (or, if you prefer, moving the IDL
-# to the east side of the Phoenix and Line Islands), I suppose that most
-# mapmakers redrew the IDL following the boundary of Kiribati. Even that line
-# has a rather arbitrary nature. The straight-line boundaries between Pacific
-# island nations that are shown on many maps are based on an international
-# convention, but are not legally binding national borders.... The date is
-# governed by the IDL; therefore, even on the high seas, there may be some
-# places as late as fourteen hours later than UTC. And, since the IDL is not
-# an international standard, there are some places on the high seas where the
-# correct date is ambiguous.
-
-# From Wikipedia <https://en.wikipedia.org/wiki/Time_zone> (2005-08-31):
-# Before 1920, all ships kept local apparent time on the high seas by setting
-# their clocks at night or at the morning sight so that, given the ship's
-# speed and direction, it would be 12 o'clock when the Sun crossed the ship's
-# meridian (12 o'clock = local apparent noon). During 1917, at the
-# Anglo-French Conference on Time-keeping at Sea, it was recommended that all
-# ships, both military and civilian, should adopt hourly standard time zones
-# on the high seas. Whenever a ship was within the territorial waters of any
-# nation it would use that nation's standard time. The captain was permitted
-# to change his ship's clocks at a time of his choice following his ship's
-# entry into another zone time - he often chose midnight. These zones were
-# adopted by all major fleets between 1920 and 1925 but not by many
-# independent merchant ships until World War II.
-
-# From Paul Eggert, using references suggested by Oscar van Vlijmen
-# (2005-03-20):
-#
-# The American Practical Navigator (2002)
-# http://pollux.nss.nima.mil/pubs/pubs_j_apn_sections.html?rid=187
-# talks only about the 180-degree meridian with respect to ships in
-# international waters; it ignores the international date line.
--- a/test/jdk/sun/util/calendar/zi/tzdata/backward Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,152 +0,0 @@
-#
-# 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.
-#
-# tzdb links for backward compatibility
-
-# 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 timezones
-# and their old names. Many names changed in late 1993.
-
-# Link TARGET LINK-NAME
-Link Africa/Nairobi Africa/Asmera
-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
-Link America/Argentina/Catamarca America/Catamarca
-Link America/Atikokan America/Coral_Harbour
-Link America/Argentina/Cordoba America/Cordoba
-Link America/Tijuana America/Ensenada
-Link America/Indiana/Indianapolis America/Fort_Wayne
-Link America/Indiana/Indianapolis America/Indianapolis
-Link America/Argentina/Jujuy America/Jujuy
-Link America/Indiana/Knox America/Knox_IN
-Link America/Kentucky/Louisville America/Louisville
-Link America/Argentina/Mendoza America/Mendoza
-Link America/Toronto America/Montreal
-Link America/Rio_Branco America/Porto_Acre
-Link America/Argentina/Cordoba America/Rosario
-Link America/Tijuana America/Santa_Isabel
-Link America/Denver America/Shiprock
-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/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/Yangon Asia/Rangoon
-Link Asia/Ho_Chi_Minh Asia/Saigon
-Link Asia/Jerusalem Asia/Tel_Aviv
-Link Asia/Thimphu Asia/Thimbu
-Link Asia/Makassar Asia/Ujung_Pandang
-Link Asia/Ulaanbaatar Asia/Ulan_Bator
-Link Atlantic/Faroe Atlantic/Faeroe
-Link Europe/Oslo Atlantic/Jan_Mayen
-Link Australia/Sydney Australia/ACT
-Link Australia/Sydney Australia/Canberra
-Link Australia/Lord_Howe Australia/LHI
-Link Australia/Sydney Australia/NSW
-Link Australia/Darwin Australia/North
-Link Australia/Brisbane Australia/Queensland
-Link Australia/Adelaide Australia/South
-Link Australia/Hobart Australia/Tasmania
-Link Australia/Melbourne Australia/Victoria
-Link Australia/Perth Australia/West
-Link Australia/Broken_Hill Australia/Yancowinna
-Link America/Rio_Branco Brazil/Acre
-Link America/Noronha Brazil/DeNoronha
-Link America/Sao_Paulo Brazil/East
-Link America/Manaus Brazil/West
-Link America/Halifax Canada/Atlantic
-Link America/Winnipeg Canada/Central
-# This line is commented out, as the name exceeded the 14-character limit
-# and was an unused misnomer.
-#Link America/Regina Canada/East-Saskatchewan
-Link America/Toronto Canada/Eastern
-Link America/Edmonton Canada/Mountain
-Link America/St_Johns Canada/Newfoundland
-Link America/Vancouver Canada/Pacific
-Link America/Regina Canada/Saskatchewan
-Link America/Whitehorse Canada/Yukon
-Link America/Santiago Chile/Continental
-Link Pacific/Easter Chile/EasterIsland
-Link America/Havana Cuba
-Link Africa/Cairo Egypt
-Link Europe/Dublin Eire
-Link Etc/UTC Etc/UCT
-Link Europe/London Europe/Belfast
-Link Europe/Chisinau Europe/Tiraspol
-Link Europe/London GB
-Link Europe/London GB-Eire
-Link Etc/GMT GMT+0
-Link Etc/GMT GMT-0
-Link Etc/GMT GMT0
-Link Etc/GMT Greenwich
-Link Asia/Hong_Kong Hongkong
-Link Atlantic/Reykjavik Iceland
-Link Asia/Tehran Iran
-Link Asia/Jerusalem Israel
-Link America/Jamaica Jamaica
-Link Asia/Tokyo Japan
-Link Pacific/Kwajalein Kwajalein
-Link Africa/Tripoli Libya
-Link America/Tijuana Mexico/BajaNorte
-Link America/Mazatlan Mexico/BajaSur
-Link America/Mexico_City Mexico/General
-Link Pacific/Auckland NZ
-Link Pacific/Chatham NZ-CHAT
-Link America/Denver Navajo
-Link Asia/Shanghai PRC
-Link Pacific/Honolulu Pacific/Johnston
-Link Pacific/Pohnpei Pacific/Ponape
-Link Pacific/Pago_Pago Pacific/Samoa
-Link Pacific/Chuuk Pacific/Truk
-Link Pacific/Chuuk Pacific/Yap
-Link Europe/Warsaw Poland
-Link Europe/Lisbon Portugal
-Link Asia/Taipei ROC
-Link Asia/Seoul ROK
-Link Asia/Singapore Singapore
-Link Europe/Istanbul Turkey
-Link Etc/UTC UCT
-Link America/Anchorage US/Alaska
-Link America/Adak US/Aleutian
-Link America/Phoenix US/Arizona
-Link America/Chicago US/Central
-Link America/Indiana/Indianapolis US/East-Indiana
-Link America/New_York US/Eastern
-Link Pacific/Honolulu US/Hawaii
-Link America/Indiana/Knox US/Indiana-Starke
-Link America/Detroit US/Michigan
-Link America/Denver US/Mountain
-Link America/Los_Angeles US/Pacific
-Link Pacific/Pago_Pago US/Samoa
-Link Etc/UTC UTC
-Link Etc/UTC Universal
-Link Europe/Moscow W-SU
-Link Etc/UTC Zulu
--- a/test/jdk/sun/util/calendar/zi/tzdata/etcetera Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-#
-# 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.
-#
-# tzdb data for ships at sea and other miscellany
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# These entries are mostly present for historical reasons, so that
-# people in areas not otherwise covered by the tz files could "zic -l"
-# to a timezone that was right for their area. These days, the
-# tz files cover almost all the inhabited world, and the only practical
-# need now for the entries that are not on UTC are for ships at sea
-# that cannot use POSIX TZ settings.
-
-# Starting with POSIX 1003.1-2001, the entries below are all
-# unnecessary as settings for the TZ environment variable. E.g.,
-# instead of TZ='Etc/GMT+4' one can use the POSIX setting TZ='<-04>+4'.
-#
-# Do not use a POSIX TZ setting like TZ='GMT+4', which is four hours
-# behind GMT but uses the completely misleading abbreviation "GMT".
-
-Zone Etc/GMT 0 - GMT
-Zone Etc/UTC 0 - UTC
-
-# The following link uses older naming conventions,
-# 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
-
-Link Etc/UTC Etc/Universal
-Link Etc/UTC Etc/Zulu
-
-Link Etc/GMT Etc/Greenwich
-Link Etc/GMT Etc/GMT-0
-Link Etc/GMT Etc/GMT+0
-Link Etc/GMT Etc/GMT0
-
-# Be consistent with POSIX TZ settings in the Zone names,
-# even though this is the opposite of what many people expect.
-# POSIX has positive signs west of Greenwich, but many people expect
-# positive signs east of Greenwich. For example, TZ='Etc/GMT+4' uses
-# the abbreviation "-04" and corresponds to 4 hours behind UT
-# (i.e. west of Greenwich) even though many people would expect it to
-# mean 4 hours ahead of UT (i.e. east of Greenwich).
-
-# Earlier incarnations of this package were not POSIX-compliant,
-# and had lines such as
-# Zone GMT-12 -12 - GMT-1200
-# We did not want things to change quietly if someone accustomed to the old
-# way does a
-# zic -l GMT-12
-# so we moved the names into the Etc subdirectory.
-# Also, the time zone abbreviations are now compatible with %z.
-
-Zone Etc/GMT-14 14 - +14
-Zone Etc/GMT-13 13 - +13
-Zone Etc/GMT-12 12 - +12
-Zone Etc/GMT-11 11 - +11
-Zone Etc/GMT-10 10 - +10
-Zone Etc/GMT-9 9 - +09
-Zone Etc/GMT-8 8 - +08
-Zone Etc/GMT-7 7 - +07
-Zone Etc/GMT-6 6 - +06
-Zone Etc/GMT-5 5 - +05
-Zone Etc/GMT-4 4 - +04
-Zone Etc/GMT-3 3 - +03
-Zone Etc/GMT-2 2 - +02
-Zone Etc/GMT-1 1 - +01
-Zone Etc/GMT+1 -1 - -01
-Zone Etc/GMT+2 -2 - -02
-Zone Etc/GMT+3 -3 - -03
-Zone Etc/GMT+4 -4 - -04
-Zone Etc/GMT+5 -5 - -05
-Zone Etc/GMT+6 -6 - -06
-Zone Etc/GMT+7 -7 - -07
-Zone Etc/GMT+8 -8 - -08
-Zone Etc/GMT+9 -9 - -09
-Zone Etc/GMT+10 -10 - -10
-Zone Etc/GMT+11 -11 - -11
-Zone Etc/GMT+12 -12 - -12
--- a/test/jdk/sun/util/calendar/zi/tzdata/europe Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4016 +0,0 @@
-#
-# 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.
-#
-# tzdb data for Europe and environs
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# 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). For more, please see
-# the file CONTRIBUTING in the tz distribution.
-
-# From Paul Eggert (2017-02-10):
-#
-# Unless otherwise specified, the source for data through 1990 is:
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
-# Unfortunately this book contains many errors and cites no sources.
-#
-# Many years ago Gwillim Law wrote that a good source
-# for time zone data was the International Air Transport
-# Association's Standard Schedules Information Manual (IATA SSIM),
-# published semiannually. Law sent in several helpful summaries
-# of the IATA's data after 1990. Except where otherwise noted,
-# IATA SSIM is the source for entries 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.
-#
-# Other sources occasionally used include:
-#
-# Edward W. Whitman, World Time Differences,
-# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated),
-# which I found in the UCLA library.
-#
-# William Willett, The Waste of Daylight, 19th edition
-# <http://cs.ucla.edu/~eggert/The-Waste-of-Daylight-19th.pdf>
-# [PDF] (1914-03)
-#
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
-# <https://www.jstor.org/stable/1774359>. He writes:
-# "It is requested that corrections and additions to these tables
-# may be sent to Mr. John Milne, Royal Geographical Society,
-# Savile Row, London." Nowadays please email them to tz@iana.org.
-#
-# Byalokoz EL. New Counting of Time in Russia since July 1, 1919.
-# This Russian-language source was consulted by Vladimir Karpinsky; see
-# https://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
-# <http://pcdsh01.on.br/HISTHV.htm>
-# (1998-09-21, in Portuguese)
-#
-# I invented the abbreviations marked '*' in the following table;
-# the rest are variants of the "xMT" pattern for a city's mean time,
-# or are from other sources. Corrections are welcome!
-# std dst 2dst
-# LMT Local Mean Time
-# -4:00 AST ADT Atlantic
-# 0:00 GMT BST BDST Greenwich, British Summer
-# 0:00 GMT IST Greenwich, Irish Summer
-# 0:00 WET WEST WEMT Western Europe
-# 0:19:32.13 AMT* NST* Amsterdam, Netherlands Summer (1835-1937)
-# 1:00 BST British Standard (1968-1971)
-# 1:00 IST GMT Irish Standard (1968-) with winter DST
-# 1:00 CET CEST CEMT Central Europe
-# 1:00:14 SET Swedish (1879-1899)
-# 1:36:34 RMT* LST* Riga, Latvian Summer (1880-1926)*
-# 2:00 EET EEST Eastern Europe
-# 3:00 MSK MSD MDST* Moscow
-
-# From Peter Ilieve (1994-12-04), re EEC/EC/EU members:
-# The original six: Belgium, France, (West) Germany, Italy,
-# Luxembourg, the Netherlands.
-# Plus, from 1 Jan 73: Denmark, Ireland, United Kingdom.
-# Plus, from 1 Jan 81: Greece.
-# Plus, from 1 Jan 86: Spain, Portugal.
-# Plus, from 1 Jan 95: Austria, Finland, Sweden. (Norway negotiated terms for
-# entry but in a referendum on 28 Nov 94 the people voted No by 52.2% to 47.8%
-# on a turnout of 88.6%. This was almost the same result as Norway's previous
-# referendum in 1972, they are the only country to have said No twice.
-# Referendums in the other three countries voted Yes.)
-# ...
-# Estonia ... uses EU dates but not at 01:00 GMT, they use midnight GMT.
-# I don't think they know yet what they will do from 1996 onwards.
-# ...
-# There shouldn't be any [current members who are not using EU rules].
-# A Directive has the force of law, member states are obliged to enact
-# national law to implement it. The only contentious issue was the
-# different end date for the UK and Ireland, and this was always allowed
-# in the Directive.
-
-
-###############################################################################
-
-# Britain (United Kingdom) and Ireland (Eire)
-
-# From Peter Ilieve (1994-07-06):
-#
-# On 17 Jan 1994 the Independent, a UK quality newspaper, had a piece about
-# historical vistas along the Thames in west London. There was a photo
-# and a sketch map showing some of the sightlines involved. One paragraph
-# of the text said:
-#
-# 'An old stone obelisk marking a forgotten terrestrial meridian stands
-# beside the river at Kew. In the 18th century, before time and longitude
-# was standardised by the Royal Observatory in Greenwich, scholars observed
-# this stone and the movement of stars from Kew Observatory nearby. They
-# made their calculations and set the time for the Horse Guards and Parliament,
-# but now the stone is obscured by scrubwood and can only be seen by walking
-# 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° 28' 30" N, 0° 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.]
-
-# From Paul Eggert (1993-11-18):
-#
-# Howse writes that Britain was the first country to use standard time.
-# The railways cared most about the inconsistencies of local mean time,
-# and it was they who forced a uniform time on the country.
-# The original idea was credited to Dr. William Hyde Wollaston (1766-1828)
-# and was popularized by Abraham Follett Osler (1808-1903).
-# The first railway to adopt London time was the Great Western Railway
-# in November 1840; other railways followed suit, and by 1847 most
-# (though not all) railways used London time. On 1847-09-22 the
-# Railway Clearing House, an industry standards body, recommended that GMT be
-# adopted at all stations as soon as the General Post Office permitted it.
-# The transition occurred on 12-01 for the L&NW, the Caledonian,
-# and presumably other railways; the January 1848 Bradshaw's lists many
-# railways as using GMT. By 1855 the vast majority of public
-# clocks in Britain were set to GMT (though some, like the great clock
-# on Tom Tower at Christ Church, Oxford, were fitted with two minute hands,
-# one for local time and one for GMT). The last major holdout was the legal
-# system, which stubbornly stuck to local time for many years, leading
-# to oddities like polls opening at 08:13 and closing at 16:13.
-# The legal system finally switched to GMT when the Statutes (Definition
-# of Time) Act took effect; it received the Royal Assent on 1880-08-02.
-#
-# In the tables below, we condense this complicated story into a single
-# 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 (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°.
-# 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,
-# and retarding them by the same amount on four Sundays in September.
-# A bill was drafted in 1909 and introduced in Parliament several times,
-# but it met with ridicule and opposition, especially from farming interests.
-# Later editions of the pamphlet proposed one-hour summer time, and
-# it was eventually adopted as a wartime measure in 1916.
-# See: Summer Time Arrives Early, The Times (2000-05-18).
-# 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,
-# which is permanently set to Summer Time.
-
-# From Winston Churchill (1934-04-28):
-# It is one of the paradoxes of history that we should owe the boon of
-# summer time, which gives every year to the people of this country
-# 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;
-# republished in Finest Hour (Spring 2002) 1(114):26
-# https://www.winstonchurchill.org/publications/finest-hour/finest-hour-114/a-silent-toast-to-william-willett-by-winston-s-churchill
-
-# From Paul Eggert (2015-08-08):
-# The OED Supplement says that the English originally said "Daylight Saving"
-# when they were debating the adoption of DST in 1908; but by 1916 this
-# term appears only in quotes taken from DST's opponents, whereas the
-# proponents (who eventually won the argument) are quoted as using "Summer".
-# The term "Summer Time" was introduced by Herbert Samuel, Home Secretary; see:
-# Viscount Samuel. Leisure in a Democracy. Cambridge University Press
-# ISBN 978-1-107-49471-8 (1949, reissued 2015), p 8.
-
-# 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.
-
-# Date: 4 Jan 89 08:57:25 GMT (Wed)
-# From: Jonathan Leffler
-# [British Summer Time] is fixed annually by Act of Parliament.
-# If you can predict what Parliament will do, you should be in
-# politics making a fortune, not computing.
-
-# From Chris Carrier (1996-06-14):
-# I remember reading in various wartime issues of the London Times the
-# acronym BDST for British Double Summer Time. Look for the published
-# time of sunrise and sunset in The Times, when BDST was in effect, and
-# if you find a zone reference it will say, "All times B.D.S.T."
-
-# From Joseph S. Myers (1999-09-02):
-# ... some military cables (WO 219/4100 - this is a copy from the
-# main SHAEF archives held in the US National Archives, SHAEF/5252/8/516)
-# agree that the usage is BDST (this appears in a message dated 17 Feb 1945).
-
-# From Joseph S. Myers (2000-10-03):
-# On 18th April 1941, Sir Stephen Tallents of the BBC wrote to Sir
-# Alexander Maxwell of the Home Office asking whether there was any
-# 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.
-# https://www.polyomino.org.uk/british-time/bbc-19410418.png
-# https://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
-# which is to be introduced in May....
-# I cannot think of anything better than "Double British Summer Time"
-# which could not be said to run counter to any official description.
-
-# From Paul Eggert (2000-10-02):
-# Howse writes (p 157) 'DBST' too, but 'BDST' seems to have been common
-# and follows the more usual convention of putting the location name first,
-# so we use 'BDST'.
-
-# Peter Ilieve (1998-04-19) described at length
-# 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
-# https://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
-# https://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):
-#
-# For lack of other data, follow Shanks & Pottenger for Eire in 1940-1948.
-#
-# Given Ilieve and Myers's data, the following claims by Shanks & Pottenger
-# are incorrect:
-# * Wales did not switch from GMT to daylight saving time until
-# 1921 Apr 3, when they began to conform with the rest of Great Britain.
-# Actually, Wales was identical after 1880.
-# * Eire had two transitions on 1916 Oct 1.
-# It actually just had one transition.
-# * Northern Ireland used single daylight saving time throughout WW II.
-# Actually, it conformed to Britain.
-# * GB-Eire changed standard time to 1 hour ahead of GMT on 1968-02-18.
-# Actually, that date saw the usual switch to summer time.
-# Standard time was not changed until 1968-10-27 (the clocks didn't change).
-#
-# Here is another incorrect claim by Shanks & Pottenger:
-# * Jersey, Guernsey, and the Isle of Man did not switch from GMT
-# to daylight saving time until 1921 Apr 3, when they began to
-# conform with Great Britain.
-# S.R.&O. 1916, No. 382 and HO 45/10811/312364 (quoted above) say otherwise.
-#
-# The following claim by Shanks & Pottenger is possible though doubtful;
-# we'll ignore it for now.
-# * Dublin's 1971-10-31 switch was at 02:00, even though London's was 03:00.
-
-# From Paul Eggert (2017-12-04):
-#
-# Dunsink Observatory (8 km NW of Dublin's center) was to Dublin as
-# Greenwich was to London. For example:
-#
-# "Timeball on the ballast office is down. Dunsink time."
-# -- James Joyce, Ulysses
-#
-# The abbreviation DMT stood for "Dublin Mean Time" or "Dunsink Mean Time";
-# this being Ireland, opinions differed.
-#
-# Whitman says Dublin/Dunsink Mean Time was UT-00:25:21, which agrees
-# with measurements of recent visitors to the Meridian Room of Dunsink
-# Observatory; see Malone D. Dunsink and timekeeping. 2016-01-24.
-# <https://www.maths.tcd.ie/~dwmalone/time/dunsink.html>. Malone
-# writes that the Nautical Almanac listed UT-00:25:22 until 1896, when
-# it moved to UT-00:25:21.1 (I confirmed that the 1893 edition used
-# the former and the 1896 edition used the latter). Evidently the
-# news of this change propagated slowly, as Milne 1899 still lists
-# UT-00:25:22 and cites the International Telegraph Bureau. As it is
-# not clear that there was any practical significance to the change
-# from UT-00:25:22 to UT-00:25:21.1 in civil timekeeping, omit this
-# transition for now and just use the latter value, omitting its
-# fraction since our format cannot represent fractions.
-
-# "Countess Markievicz ... claimed that the [1916] abolition of Dublin Mean Time
-# was among various actions undertaken by the 'English' government that
-# would 'put the whole country into the SF (Sinn FĂ©in) camp'. She claimed
-# Irish 'public feeling (was) outraged by forcing of English time on us'."
-# -- Parsons M. Dublin lost its time zone - and 25 minutes - after 1916 Rising.
-# Irish Times 2014-10-27.
-# https://www.irishtimes.com/news/politics/dublin-lost-its-time-zone-and-25-minutes-after-1916-rising-1.1977411
-
-# From Joseph S. Myers (2005-01-26):
-# Irish laws are available online at <http://www.irishstatutebook.ie>.
-# These include various relating to legal time, for example:
-#
-# ZZA13Y1923.html ZZA12Y1924.html ZZA8Y1925.html ZZSIV20PG1267.html
-#
-# ZZSI71Y1947.html ZZSI128Y1948.html ZZSI23Y1949.html ZZSI41Y1950.html
-# ZZSI27Y1951.html ZZSI73Y1952.html
-#
-# ZZSI11Y1961.html ZZSI232Y1961.html ZZSI182Y1962.html
-# ZZSI167Y1963.html ZZSI257Y1964.html ZZSI198Y1967.html
-# ZZA23Y1968.html ZZA17Y1971.html
-#
-# ZZSI67Y1981.html ZZSI212Y1982.html ZZSI45Y1986.html
-# ZZSI264Y1988.html ZZSI52Y1990.html ZZSI371Y1992.html
-# ZZSI395Y1994.html ZZSI484Y1997.html ZZSI506Y2001.html
-#
-# [These are all relative to the root, e.g., the first is
-# <http://www.irishstatutebook.ie/ZZA13Y1923.html>.]
-#
-# (These are those I found, but there could be more. In any case these
-# should allow various updates to the comments in the europe file to cover
-# the laws applicable in Ireland.)
-#
-# (Note that the time in the Republic of Ireland since 1968 has been defined
-# in terms of standard time being GMT+1 with a period of winter time when it
-# is GMT, rather than standard time being GMT with a period of summer time
-# being GMT+1.)
-
-# From Paul Eggert (1999-03-28):
-# Clive Feather (<news:859845706.26043.0@office.demon.net>, 1997-03-31)
-# reports that Folkestone (Cheriton) Shuttle Terminal uses Concession Time
-# (CT), equivalent to French civil time.
-# Julian Hill (<news:36118128.5A14@virgin.net>, 1998-09-30) reports that
-# trains between Dollands Moor (the freight facility next door)
-# and Frethun run in CT.
-# My admittedly uninformed guess is that the terminal has two authorities,
-# the French concession operators and the British civil authorities,
-# and that the time depends on who you're talking to.
-# If, say, the British police were called to the station for some reason,
-# I would expect the official police report to use GMT/BST and not CET/CEST.
-# This is a borderline case, but for now let's stick to GMT/BST.
-
-# From an anonymous contributor (1996-06-02):
-# The law governing time in Ireland is under Statutory Instrument SI 395/94,
-# which gives force to European Union 7th Council Directive No. 94/21/EC.
-# Under this directive, the Minister for Justice in Ireland makes appropriate
-# regulations. I spoke this morning with the Secretary of the Department of
-# Justice (tel +353 1 678 9711) who confirmed to me that the correct name is
-# "Irish Summer Time", abbreviated to "IST".
-#
-# From Paul Eggert (2017-12-07):
-# The 1996 anonymous contributor's goal was to determine the correct
-# abbreviation for summer time in Dublin and so the contributor
-# focused on the "IST", not on the "Irish Summer Time". Though the
-# "IST" was correct, the "Irish Summer Time" appears to have been an
-# error, as Ireland's Standard Time (Amendment) Act, 1971 states that
-# standard time in Ireland remains at UT +01 and is observed in
-# summer, and that Greenwich mean time is observed in winter. (Thanks
-# to Derick Rethans for pointing out the error.) That is, when
-# Ireland amended the 1968 act that established UT +01 as Irish
-# Standard Time, it left standard time unchanged and established GMT
-# as a negative daylight saving time in winter. So, in this database
-# IST stands for Irish Summer Time for timestamps before 1968, and for
-# Irish Standard Time after that. See:
-# http://www.irishstatutebook.ie/eli/1971/act/17/enacted/en/print
-
-# Michael Deckers (2017-06-01) gave the following URLs for Ireland's
-# Summer Time Act, 1925 and Summer Time Orders, 1926 and 1947:
-# http://www.irishstatutebook.ie/eli/1925/act/8/enacted/en/print
-# http://www.irishstatutebook.ie/eli/1926/sro/919/made/en/print
-# http://www.irishstatutebook.ie/eli/1947/sro/71/made/en/print
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# Summer Time Act, 1916
-Rule GB-Eire 1916 only - May 21 2:00s 1:00 BST
-Rule GB-Eire 1916 only - Oct 1 2:00s 0 GMT
-# S.R.&O. 1917, No. 358
-Rule GB-Eire 1917 only - Apr 8 2:00s 1:00 BST
-Rule GB-Eire 1917 only - Sep 17 2:00s 0 GMT
-# S.R.&O. 1918, No. 274
-Rule GB-Eire 1918 only - Mar 24 2:00s 1:00 BST
-Rule GB-Eire 1918 only - Sep 30 2:00s 0 GMT
-# S.R.&O. 1919, No. 297
-Rule GB-Eire 1919 only - Mar 30 2:00s 1:00 BST
-Rule GB-Eire 1919 only - Sep 29 2:00s 0 GMT
-# S.R.&O. 1920, No. 458
-Rule GB-Eire 1920 only - Mar 28 2:00s 1:00 BST
-# S.R.&O. 1920, No. 1844
-Rule GB-Eire 1920 only - Oct 25 2:00s 0 GMT
-# S.R.&O. 1921, No. 363
-Rule GB-Eire 1921 only - Apr 3 2:00s 1:00 BST
-Rule GB-Eire 1921 only - Oct 3 2:00s 0 GMT
-# S.R.&O. 1922, No. 264
-Rule GB-Eire 1922 only - Mar 26 2:00s 1:00 BST
-Rule GB-Eire 1922 only - Oct 8 2:00s 0 GMT
-# The Summer Time Act, 1922
-Rule GB-Eire 1923 only - Apr Sun>=16 2:00s 1:00 BST
-Rule GB-Eire 1923 1924 - Sep Sun>=16 2:00s 0 GMT
-Rule GB-Eire 1924 only - Apr Sun>=9 2:00s 1:00 BST
-Rule GB-Eire 1925 1926 - Apr Sun>=16 2:00s 1:00 BST
-# The Summer Time Act, 1925
-Rule GB-Eire 1925 1938 - Oct Sun>=2 2:00s 0 GMT
-Rule GB-Eire 1927 only - Apr Sun>=9 2:00s 1:00 BST
-Rule GB-Eire 1928 1929 - Apr Sun>=16 2:00s 1:00 BST
-Rule GB-Eire 1930 only - Apr Sun>=9 2:00s 1:00 BST
-Rule GB-Eire 1931 1932 - Apr Sun>=16 2:00s 1:00 BST
-Rule GB-Eire 1933 only - Apr Sun>=9 2:00s 1:00 BST
-Rule GB-Eire 1934 only - Apr Sun>=16 2:00s 1:00 BST
-Rule GB-Eire 1935 only - Apr Sun>=9 2:00s 1:00 BST
-Rule GB-Eire 1936 1937 - Apr Sun>=16 2:00s 1:00 BST
-Rule GB-Eire 1938 only - Apr Sun>=9 2:00s 1:00 BST
-Rule GB-Eire 1939 only - Apr Sun>=16 2:00s 1:00 BST
-# S.R.&O. 1939, No. 1379
-Rule GB-Eire 1939 only - Nov Sun>=16 2:00s 0 GMT
-# S.R.&O. 1940, No. 172 and No. 1883
-Rule GB-Eire 1940 only - Feb Sun>=23 2:00s 1:00 BST
-# S.R.&O. 1941, No. 476
-Rule GB-Eire 1941 only - May Sun>=2 1:00s 2:00 BDST
-Rule GB-Eire 1941 1943 - Aug Sun>=9 1:00s 1:00 BST
-# S.R.&O. 1942, No. 506
-Rule GB-Eire 1942 1944 - Apr Sun>=2 1:00s 2:00 BDST
-# S.R.&O. 1944, No. 932
-Rule GB-Eire 1944 only - Sep Sun>=16 1:00s 1:00 BST
-# S.R.&O. 1945, No. 312
-Rule GB-Eire 1945 only - Apr Mon>=2 1:00s 2:00 BDST
-Rule GB-Eire 1945 only - Jul Sun>=9 1:00s 1:00 BST
-# S.R.&O. 1945, No. 1208
-Rule GB-Eire 1945 1946 - Oct Sun>=2 2:00s 0 GMT
-Rule GB-Eire 1946 only - Apr Sun>=9 2:00s 1:00 BST
-# The Summer Time Act, 1947
-Rule GB-Eire 1947 only - Mar 16 2:00s 1:00 BST
-Rule GB-Eire 1947 only - Apr 13 1:00s 2:00 BDST
-Rule GB-Eire 1947 only - Aug 10 1:00s 1:00 BST
-Rule GB-Eire 1947 only - Nov 2 2:00s 0 GMT
-# Summer Time Order, 1948 (S.I. 1948/495)
-Rule GB-Eire 1948 only - Mar 14 2:00s 1:00 BST
-Rule GB-Eire 1948 only - Oct 31 2:00s 0 GMT
-# Summer Time Order, 1949 (S.I. 1949/373)
-Rule GB-Eire 1949 only - Apr 3 2:00s 1:00 BST
-Rule GB-Eire 1949 only - Oct 30 2:00s 0 GMT
-# Summer Time Order, 1950 (S.I. 1950/518)
-# Summer Time Order, 1951 (S.I. 1951/430)
-# Summer Time Order, 1952 (S.I. 1952/451)
-Rule GB-Eire 1950 1952 - Apr Sun>=14 2:00s 1:00 BST
-Rule GB-Eire 1950 1952 - Oct Sun>=21 2:00s 0 GMT
-# revert to the rules of the Summer Time Act, 1925
-Rule GB-Eire 1953 only - Apr Sun>=16 2:00s 1:00 BST
-Rule GB-Eire 1953 1960 - Oct Sun>=2 2:00s 0 GMT
-Rule GB-Eire 1954 only - Apr Sun>=9 2:00s 1:00 BST
-Rule GB-Eire 1955 1956 - Apr Sun>=16 2:00s 1:00 BST
-Rule GB-Eire 1957 only - Apr Sun>=9 2:00s 1:00 BST
-Rule GB-Eire 1958 1959 - Apr Sun>=16 2:00s 1:00 BST
-Rule GB-Eire 1960 only - Apr Sun>=9 2:00s 1:00 BST
-# Summer Time Order, 1961 (S.I. 1961/71)
-# Summer Time (1962) Order, 1961 (S.I. 1961/2465)
-# Summer Time Order, 1963 (S.I. 1963/81)
-Rule GB-Eire 1961 1963 - Mar lastSun 2:00s 1:00 BST
-Rule GB-Eire 1961 1968 - Oct Sun>=23 2:00s 0 GMT
-# Summer Time (1964) Order, 1963 (S.I. 1963/2101)
-# Summer Time Order, 1964 (S.I. 1964/1201)
-# Summer Time Order, 1967 (S.I. 1967/1148)
-Rule GB-Eire 1964 1967 - Mar Sun>=19 2:00s 1:00 BST
-# Summer Time Order, 1968 (S.I. 1968/117)
-Rule GB-Eire 1968 only - Feb 18 2:00s 1:00 BST
-# The British Standard Time Act, 1968
-# (no summer time)
-# The Summer Time Act, 1972
-Rule GB-Eire 1972 1980 - Mar Sun>=16 2:00s 1:00 BST
-Rule GB-Eire 1972 1980 - Oct Sun>=23 2:00s 0 GMT
-# Summer Time Order, 1980 (S.I. 1980/1089)
-# Summer Time Order, 1982 (S.I. 1982/1673)
-# Summer Time Order, 1986 (S.I. 1986/223)
-# Summer Time Order, 1988 (S.I. 1988/931)
-Rule GB-Eire 1981 1995 - Mar lastSun 1:00u 1:00 BST
-Rule GB-Eire 1981 1989 - Oct Sun>=23 1:00u 0 GMT
-# Summer Time Order, 1989 (S.I. 1989/985)
-# Summer Time Order, 1992 (S.I. 1992/1729)
-# Summer Time Order 1994 (S.I. 1994/2798)
-Rule GB-Eire 1990 1995 - Oct Sun>=22 1:00u 0 GMT
-# Summer Time Order 1997 (S.I. 1997/2982)
-# See EU for rules starting in 1996.
-#
-# 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
- 0:00 GB-Eire %s 1968 Oct 27
- 1:00 - BST 1971 Oct 31 2:00u
- 0:00 GB-Eire %s 1996
- 0:00 EU GMT/BST
-Link Europe/London Europe/Jersey
-Link Europe/London Europe/Guernsey
-Link Europe/London Europe/Isle_of_Man
-
-# From Paul Eggert (2018-02-15):
-# In January 2018 we discovered that the negative SAVE values in the
-# Eire rules cause problems with tests for ICU:
-# https://mm.icann.org/pipermail/tz/2018-January/025825.html
-# and with tests for OpenJDK:
-# https://mm.icann.org/pipermail/tz/2018-January/025822.html
-#
-# To work around this problem, the build procedure can translate the
-# following data into two forms, one with negative SAVE values and the
-# other form with a traditional approximation for Irish timestamps
-# after 1971-10-31 02:00 UTC; although this approximation has tm_isdst
-# flags that are reversed, its UTC offsets are correct and this often
-# suffices. This source file currently uses only nonnegative SAVE
-# values, but this is intended to change and downstream code should
-# not rely on it.
-#
-# The following is like GB-Eire and EU, except with standard time in
-# summer and negative daylight saving time in winter. It is for when
-# negative SAVE values are used.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-#Rule Eire 1971 only - Oct 31 2:00u -1:00 -
-#Rule Eire 1972 1980 - Mar Sun>=16 2:00u 0 -
-#Rule Eire 1972 1980 - Oct Sun>=23 2:00u -1:00 -
-#Rule Eire 1981 max - Mar lastSun 1:00u 0 -
-#Rule Eire 1981 1989 - Oct Sun>=23 1:00u -1:00 -
-#Rule Eire 1990 1995 - Oct Sun>=22 1:00u -1:00 -
-#Rule Eire 1996 max - Oct lastSun 1:00u -1:00 -
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2
- -0:25:21 - DMT 1916 May 21 2:00s
- -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:00s
- 0:00 1:00 IST 1946 Oct 6 2:00s
- 0:00 - GMT 1947 Mar 16 2:00s
- 0:00 1:00 IST 1947 Nov 2 2:00s
- 0:00 - GMT 1948 Apr 18 2:00s
- 0:00 GB-Eire GMT/IST 1968 Oct 27
-# The next line is for when negative SAVE values are used.
-# 1:00 Eire IST/GMT
-# These three lines are for when SAVE values are always nonnegative.
- 1:00 - IST 1971 Oct 31 2:00u
- 0:00 GB-Eire GMT/IST 1996
- 0:00 EU GMT/IST
-
-
-###############################################################################
-
-# Europe
-
-# The following rules are for the European Union and for its
-# predecessor organization, the European Communities.
-# For brevity they are called "EU rules" elsewhere in this file.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule EU 1977 1980 - Apr Sun>=1 1:00u 1:00 S
-Rule EU 1977 only - Sep lastSun 1:00u 0 -
-Rule EU 1978 only - Oct 1 1:00u 0 -
-Rule EU 1979 1995 - Sep lastSun 1:00u 0 -
-Rule EU 1981 max - Mar lastSun 1:00u 1:00 S
-Rule EU 1996 max - Oct lastSun 1:00u 0 -
-# 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
-Rule W-Eur 1977 only - Sep lastSun 1:00s 0 -
-Rule W-Eur 1978 only - Oct 1 1:00s 0 -
-Rule W-Eur 1979 1995 - Sep lastSun 1:00s 0 -
-Rule W-Eur 1981 max - Mar lastSun 1:00s 1:00 S
-Rule W-Eur 1996 max - Oct lastSun 1:00s 0 -
-
-# Older C-Eur rules are for convenience in the tables.
-# From 1977 on, C-Eur differs from EU only in that C-Eur uses standard time.
-Rule C-Eur 1916 only - Apr 30 23:00 1:00 S
-Rule C-Eur 1916 only - Oct 1 1:00 0 -
-Rule C-Eur 1917 1918 - Apr Mon>=15 2:00s 1:00 S
-Rule C-Eur 1917 1918 - Sep Mon>=15 2:00s 0 -
-Rule C-Eur 1940 only - Apr 1 2:00s 1:00 S
-Rule C-Eur 1942 only - Nov 2 2:00s 0 -
-Rule C-Eur 1943 only - Mar 29 2:00s 1:00 S
-Rule C-Eur 1943 only - Oct 4 2:00s 0 -
-Rule C-Eur 1944 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 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 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
-#
-# Zone Europe/Belgrade 1:22:00 - LMT 1884
-# 1:00 1:00 CEST 1945 Sep 16 2:00s
-#
-# Rule France 1945 only - Sep 16 3:00 0 -
-# Rule Belgium 1945 only - Sep 16 2:00s 0 -
-# Rule Neth 1945 only - Sep 16 2:00s 0 -
-#
-# The rule line to be changed is:
-#
-# Rule C-Eur 1945 only - Sep 16 2:00 0 -
-#
-# It seems that Paris, Monaco, Rule France, Rule Belgium all agree on
-# 2:00 standard time, e.g. 3:00 local time. However there are no
-# countries that use C-Eur rules in September 1945, so the only items
-# affected are apparently these fictitious zones that translate acronyms
-# CET and MET:
-#
-# Zone CET 1:00 C-Eur CE%sT
-# Zone MET 1:00 C-Eur ME%sT
-#
-# It this is right then the corrected version would look like:
-#
-# Rule C-Eur 1945 only - Sep 16 2:00s 0 -
-#
-# A small step for mankind though 8-)
-Rule C-Eur 1945 only - Sep 16 2:00s 0 -
-Rule C-Eur 1977 1980 - Apr Sun>=1 2:00s 1:00 S
-Rule C-Eur 1977 only - Sep lastSun 2:00s 0 -
-Rule C-Eur 1978 only - Oct 1 2:00s 0 -
-Rule C-Eur 1979 1995 - Sep lastSun 2:00s 0 -
-Rule C-Eur 1981 max - Mar lastSun 2:00s 1:00 S
-Rule C-Eur 1996 max - Oct lastSun 2:00s 0 -
-
-# E-Eur differs from EU only in that E-Eur switches at midnight local time.
-Rule E-Eur 1977 1980 - Apr Sun>=1 0:00 1:00 S
-Rule E-Eur 1977 only - Sep lastSun 0:00 0 -
-Rule E-Eur 1978 only - Oct 1 0:00 0 -
-Rule E-Eur 1979 1995 - Sep lastSun 0:00 0 -
-Rule E-Eur 1981 max - Mar lastSun 0:00 1:00 S
-Rule E-Eur 1996 max - Oct lastSun 0:00 0 -
-
-
-# Daylight saving time for Russia and the Soviet Union
-#
-# The 1917-1921 decree URLs are from Alexander Belopolsky (2016-08-23).
-
-# 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
-#
-# Decree No. 142 (1917-12-22) http://istmat.info/node/28137
-Rule Russia 1917 only - Dec 28 0:00 0 MMT # Moscow Mean Time
-#
-# Decree No. 497 (1918-05-30) http://istmat.info/node/30001
-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
-#
-# Decree No. 258 (1919-05-29) http://istmat.info/node/37949
-Rule Russia 1919 only - May 31 23:00 2:00 MDST
-#
-Rule Russia 1919 only - Jul 1 0:00u 1:00 MSD
-Rule Russia 1919 only - Aug 16 0:00 0 MSK
-#
-# Decree No. 63 (1921-02-03) http://istmat.info/node/45840
-Rule Russia 1921 only - Feb 14 23:00 1:00 MSD
-#
-# Decree No. 121 (1921-03-07) http://istmat.info/node/45949
-Rule Russia 1921 only - Mar 20 23:00 2:00 +05
-#
-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
-Rule Russia 1981 1983 - Oct 1 0:00 0 -
-# Act No. 967 of the Council of Ministers of the USSR (1984-09-13), repeated in
-# Act No. 227 of the Council of Ministers of the USSR (1989-03-14):
-Rule Russia 1984 1995 - Sep lastSun 2:00s 0 -
-Rule Russia 1985 2010 - Mar lastSun 2:00s 1:00 S
-#
-Rule Russia 1996 2010 - Oct lastSun 2:00s 0 -
-# As described below, Russia's 2014 change affects Zone data, not Rule data.
-
-# From Stepan Golosunov (2016-03-07):
-# Wikipedia and other sources refer to the Act of the Council of
-# Ministers of the USSR from 1988-01-04 No. 5 and the Act of the
-# Council of Ministers of the USSR from 1989-03-14 No. 227.
-#
-# I did not find full texts of these acts. For the 1989 one we have
-# title at https://base.garant.ru/70754136/ :
-# "About change in calculation of time on the territories of
-# Lithuanian SSR, Latvian SSR and Estonian SSR, Astrakhan,
-# Kaliningrad, Kirov, Kuybyshev, Ulyanovsk and Uralsk oblasts".
-# And http://astrozet.net/files/Zones/DOC/RU/1980-925.txt appears to
-# contain quotes from both acts: Since last Sunday of March 1988 rules
-# of the second time belt are installed in Volgograd and Saratov
-# oblasts. Since last Sunday of March 1989:
-# a) Lithuanian SSR, Latvian SSR, Estonian SSR, Kaliningrad oblast:
-# second time belt rules without extra hour (Moscow-1);
-# b) Astrakhan, Kirov, Kuybyshev, Ulyanovsk oblasts: second time belt
-# rules (Moscow time)
-# c) Uralsk oblast: third time belt rules (Moscow+1).
-
-# From Stepan Golosunov (2016-03-27):
-# Unamended version of the act of the
-# Government of the Russian Federation No. 23 from 08.01.1992
-# http://pravo.gov.ru/proxy/ips/?docbody=&nd=102014034&rdk=0
-# says that every year clocks were to be moved forward on last Sunday
-# of March at 2 hours and moved backwards on last Sunday of September
-# at 3 hours. It was amended in 1996 to replace September with October.
-
-# From Alexander Krivenyshev (2011-06-14):
-# According to Kremlin press service, Russian President Dmitry Medvedev
-# signed a federal law "On calculation of time" on June 9, 2011.
-# 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):
-# https://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
-# to be standard.
-
-# These are for backward compatibility with older versions.
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone WET 0:00 EU WE%sT
-Zone CET 1:00 C-Eur CE%sT
-Zone MET 1:00 C-Eur ME%sT
-Zone EET 2:00 EU EE%sT
-
-# Previous editions of this database used abbreviations like MET DST
-# for Central European Summer Time, but this didn't agree with common usage.
-
-# From Markus Kuhn (1996-07-12):
-# The official German names ... are
-#
-# MitteleuropÀische Zeit (MEZ) = UTC+01:00
-# MitteleuropÀische Sommerzeit (MESZ) = UTC+02:00
-#
-# 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
-#
-# Physikalisch-Technische Bundesanstalt (PTB)
-# Laboratorium 4.41 "Zeiteinheit"
-# Postfach 3345
-# D-38023 Braunschweig
-# phone: +49 531 592-0
-#
-# ... I received today an answer letter from Dr. Peter Hetzel, head of the PTB
-# department for time and frequency transmission. He explained that the
-# PTB translates MEZ and MESZ into English as
-#
-# Central European Time (CET) = UTC+01:00
-# Central European Summer Time (CEST) = UTC+02:00
-
-
-# Albania
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Albania 1940 only - Jun 16 0:00 1:00 S
-Rule Albania 1942 only - Nov 2 3:00 0 -
-Rule Albania 1943 only - Mar 29 2:00 1:00 S
-Rule Albania 1943 only - Apr 10 3:00 0 -
-Rule Albania 1974 only - May 4 0:00 1:00 S
-Rule Albania 1974 only - Oct 2 0:00 0 -
-Rule Albania 1975 only - May 1 0:00 1:00 S
-Rule Albania 1975 only - Oct 2 0:00 0 -
-Rule Albania 1976 only - May 2 0:00 1:00 S
-Rule Albania 1976 only - Oct 3 0:00 0 -
-Rule Albania 1977 only - May 8 0:00 1:00 S
-Rule Albania 1977 only - Oct 2 0:00 0 -
-Rule Albania 1978 only - May 6 0:00 1:00 S
-Rule Albania 1978 only - Oct 1 0:00 0 -
-Rule Albania 1979 only - May 5 0:00 1:00 S
-Rule Albania 1979 only - Sep 30 0:00 0 -
-Rule Albania 1980 only - May 3 0:00 1:00 S
-Rule Albania 1980 only - Oct 4 0:00 0 -
-Rule Albania 1981 only - Apr 26 0:00 1:00 S
-Rule Albania 1981 only - Sep 27 0:00 0 -
-Rule Albania 1982 only - May 2 0:00 1:00 S
-Rule Albania 1982 only - Oct 3 0:00 0 -
-Rule Albania 1983 only - Apr 18 0:00 1:00 S
-Rule Albania 1983 only - Oct 1 0:00 0 -
-Rule Albania 1984 only - Apr 1 0:00 1:00 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Tirane 1:19:20 - LMT 1914
- 1:00 - CET 1940 Jun 16
- 1:00 Albania CE%sT 1984 Jul
- 1:00 EU CE%sT
-
-# Andorra
-# 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 EU CE%sT
-
-# Austria
-
-# Milne says Vienna time was 1:05:21.
-
-# From Paul Eggert (2006-03-22): Shanks & Pottenger give 1918-06-16 and
-# 1945-11-18, but the Austrian Federal Office of Metrology and
-# Surveying (BEV) gives 1918-09-16 and for Vienna gives the "alleged"
-# date of 1945-04-12 with no time. For the 1980-04-06 transition
-# Shanks & Pottenger give 02:00, the BEV 00:00. Go with the BEV,
-# and guess 02:00 for 1945-04-12.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Austria 1920 only - Apr 5 2:00s 1:00 S
-Rule Austria 1920 only - Sep 13 2:00s 0 -
-Rule Austria 1946 only - Apr 14 2:00s 1:00 S
-Rule Austria 1946 1948 - Oct Sun>=1 2:00s 0 -
-Rule Austria 1947 only - Apr 6 2:00s 1:00 S
-Rule Austria 1948 only - Apr 18 2:00s 1:00 S
-Rule Austria 1980 only - Apr 6 0:00 1:00 S
-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 - CET 1946
- 1:00 Austria CE%sT 1981
- 1:00 EU CE%sT
-
-# Belarus
-#
-# From Stepan Golosunov (2016-07-02):
-# http://www.lawbelarus.com/repub/sub30/texf9611.htm
-# (Act of the Cabinet of Ministers of the Republic of Belarus from
-# 1992-03-25 No. 157) ... says clocks were to be moved forward at 2:00
-# on last Sunday of March and backward at 3:00 on last Sunday of September
-# (the same as previous USSR and contemporary Russian regulations).
-#
-# From Yauhen Kharuzhy (2011-09-16):
-# By latest Belarus government act Europe/Minsk timezone was changed to
-# GMT+3 without DST (was GMT+2 with DST).
-#
-# Sources (Russian language):
-# http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html
-# http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/
-# https://news.tut.by/society/250578.html
-#
-# From Alexander Bokovoy (2014-10-09):
-# Belarussian government decided against changing to winter time....
-# http://eng.belta.by/all_news/society/Belarus-decides-against-adjusting-time-in-Russias-wake_i_76335.html
-#
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Minsk 1:50:16 - LMT 1880
- 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 Russia EE%sT 2011 Mar 27 2:00s
- 3:00 - +03
-
-# 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 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:
-# Moniteur Belge, Samedi 30 Avril 1892, N.121.
-# Thanks to Pascal Delmoitie for these references.
-# The 1918 rules are listed for completeness; they apply to unoccupied Belgium.
-# Assume Brussels switched to WET in 1918 when the armistice took effect.
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Belgium 1918 only - Mar 9 0:00s 1:00 S
-Rule Belgium 1918 1919 - Oct Sat>=1 23:00s 0 -
-Rule Belgium 1919 only - Mar 1 23:00s 1:00 S
-Rule Belgium 1920 only - Feb 14 23:00s 1:00 S
-Rule Belgium 1920 only - Oct 23 23:00s 0 -
-Rule Belgium 1921 only - Mar 14 23:00s 1:00 S
-Rule Belgium 1921 only - Oct 25 23:00s 0 -
-Rule Belgium 1922 only - Mar 25 23:00s 1:00 S
-Rule Belgium 1922 1927 - Oct Sat>=1 23:00s 0 -
-Rule Belgium 1923 only - Apr 21 23:00s 1:00 S
-Rule Belgium 1924 only - Mar 29 23:00s 1:00 S
-Rule Belgium 1925 only - Apr 4 23:00s 1:00 S
-# DSH writes that a royal decree of 1926-02-22 specified the Sun following 3rd
-# Sat in Apr (except if it's Easter, in which case it's one Sunday earlier),
-# to Sun following 1st Sat in Oct, and that a royal decree of 1928-09-15
-# changed the transition times to 02:00 GMT.
-Rule Belgium 1926 only - Apr 17 23:00s 1:00 S
-Rule Belgium 1927 only - Apr 9 23:00s 1:00 S
-Rule Belgium 1928 only - Apr 14 23:00s 1:00 S
-Rule Belgium 1928 1938 - Oct Sun>=2 2:00s 0 -
-Rule Belgium 1929 only - Apr 21 2:00s 1:00 S
-Rule Belgium 1930 only - Apr 13 2:00s 1:00 S
-Rule Belgium 1931 only - Apr 19 2:00s 1:00 S
-Rule Belgium 1932 only - Apr 3 2:00s 1:00 S
-Rule Belgium 1933 only - Mar 26 2:00s 1:00 S
-Rule Belgium 1934 only - Apr 8 2:00s 1:00 S
-Rule Belgium 1935 only - Mar 31 2:00s 1:00 S
-Rule Belgium 1936 only - Apr 19 2:00s 1:00 S
-Rule Belgium 1937 only - Apr 4 2:00s 1:00 S
-Rule Belgium 1938 only - Mar 27 2:00s 1:00 S
-Rule Belgium 1939 only - Apr 16 2:00s 1:00 S
-Rule Belgium 1939 only - Nov 19 2:00s 0 -
-Rule Belgium 1940 only - Feb 25 2:00s 1:00 S
-Rule Belgium 1944 only - Sep 17 2:00s 0 -
-Rule Belgium 1945 only - Apr 2 2:00s 1:00 S
-Rule Belgium 1945 only - Sep 16 2:00s 0 -
-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:00 - WET 1914 Nov 8
- 1:00 - CET 1916 May 1 0:00
- 1:00 C-Eur CE%sT 1918 Nov 11 11:00u
- 0:00 Belgium WE%sT 1940 May 20 2:00s
- 1:00 C-Eur CE%sT 1944 Sep 3
- 1:00 Belgium CE%sT 1977
- 1:00 EU CE%sT
-
-# Bosnia and Herzegovina
-# See Europe/Belgrade.
-
-# Bulgaria
-#
-# 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
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Bulg 1979 only - Mar 31 23:00 1:00 S
-Rule Bulg 1979 only - Oct 1 1:00 0 -
-Rule Bulg 1980 1982 - Apr Sat>=1 23:00 1:00 S
-Rule Bulg 1980 only - Sep 29 1:00 0 -
-Rule Bulg 1981 only - Sep 27 2:00 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-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
- 2:00 - EET 1979 Mar 31 23:00
- 2:00 Bulg EE%sT 1982 Sep 26 3:00
- 2:00 C-Eur EE%sT 1991
- 2:00 E-Eur EE%sT 1997
- 2:00 EU EE%sT
-
-# Croatia
-# See Europe/Belgrade.
-
-# Cyprus
-# Please see the 'asia' file for Asia/Nicosia.
-
-# Czech Republic / Czechia
-#
-# From Paul Eggert (2018-04-15):
-# The source for Czech data is: Kdy zaÄĂnĂĄ a konÄĂ letnĂ Äas. 2018-04-15.
-# https://kalendar.beda.cz/kdy-zacina-a-konci-letni-cas
-# We know of no English-language name for historical Czech winter time;
-# abbreviate it as "GMT", as it happened to be GMT.
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Czech 1945 only - Apr Mon>=1 2:00s 1:00 S
-Rule Czech 1945 only - Oct 1 2:00s 0 -
-Rule Czech 1946 only - May 6 2:00s 1:00 S
-Rule Czech 1946 1949 - Oct Sun>=1 2:00s 0 -
-Rule Czech 1947 1948 - Apr Sun>=15 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 1945 May 9
- 1:00 Czech CE%sT 1946 Dec 1 3:00
-# Vanguard section, for zic and other parsers that support negative DST.
-# 1:00 -1:00 GMT 1947 Feb 23 2:00
-# Rearguard section, for parsers that do not support negative DST.
- 0:00 - GMT 1947 Feb 23 2:00
-# End of rearguard section.
- 1:00 Czech CE%sT 1979
- 1:00 EU CE%sT
-# Use Europe/Prague also for Slovakia.
-
-# Denmark, Faroe Islands, and Greenland
-
-# 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
-# confirms this, and states that the law was put forth 1893-03-29.
-#
-# The EU [actually, EEC and Euratom] treaty with effect from 1973:
-# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19722110030-REGL
-#
-# This provoked a new law from 1974 to make possible summer time changes
-# 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
-# not found any decree, but in another related law, the effecting DST
-# changes are stated explicitly to be from 1980-04-06 at 02:00 to
-# 1980-09-28 at 02:00. If this is true, this differs slightly from
-# the EU rule in that DST runs to 02:00, not 03:00. We don't know
-# when Denmark began using the EU rule correctly, but we have only
-# confirmation of the 1980-time, so I presume it was correct in 1981:
-# The law is about the management of the extra hour, concerning
-# working hours reported and effect on obligatory-rest rules (which
-# was suspended on that night):
-# http://www.retsinfo.dk/_GETDOCI_/ACCN/C19801120554-REGL
-
-# 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.
-
-# From Paul Eggert (2005-06-11):
-# Hence the "02:00" of the 1980 law refers to standard time, not
-# wall-clock time, and so the EU rules were in effect in 1980.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Denmark 1916 only - May 14 23:00 1:00 S
-Rule Denmark 1916 only - Sep 30 23:00 0 -
-Rule Denmark 1940 only - May 15 0:00 1:00 S
-Rule Denmark 1945 only - Apr 2 2:00s 1:00 S
-Rule Denmark 1945 only - Aug 15 2:00s 0 -
-Rule Denmark 1946 only - May 1 2:00s 1:00 S
-Rule Denmark 1946 only - Sep 1 2:00s 0 -
-Rule Denmark 1947 only - May 4 2:00s 1:00 S
-Rule Denmark 1947 only - Aug 10 2:00s 0 -
-Rule Denmark 1948 only - May 9 2:00s 1:00 S
-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 1980
- 1:00 EU CE%sT
-Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # TĂłrshavn
- 0:00 - WET 1981
- 0:00 EU WE%sT
-#
-# From Paul Eggert (2004-10-31):
-# During World War II, Germany maintained secret manned weather stations in
-# East Greenland and Franz Josef Land, but we don't know their time zones.
-# My source for this is Wilhelm Dege's book mentioned under Svalbard.
-#
-# From Paul Eggert (2017-12-10):
-# Greenland joined the European Communities as part of Denmark,
-# obtained home rule on 1979-05-01, and left the European Communities
-# on 1985-02-01. It therefore should have been using EU
-# 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 Gwillim Law (2001-06-06), citing
-# <http://www.statkart.no/efs/efshefter/2001/efs5-2001.pdf> (2001-03-15),
-# and with translations corrected by Steffen Thorsen:
-#
-# Greenland has four local times, and the relation to UTC
-# is according to the following time line:
-#
-# The military zone near Thule UTC-4
-# Standard Greenland time UTC-3
-# Scoresbysund UTC-1
-# Danmarkshavn UTC
-#
-# In the military area near Thule and in Danmarkshavn DST will not be
-# introduced.
-
-# From Rives McDow (2001-11-01):
-#
-# I correspond regularly with the Dansk Polarcenter, and wrote them at
-# the time to clarify the situation in Thule. Unfortunately, I have
-# not heard back from them regarding my recent letter. [But I have
-# info from earlier correspondence.]
-#
-# According to the center, a very small local time zone around Thule
-# Air Base keeps the time according to UTC-4, implementing daylight
-# savings using North America rules, changing the time at 02:00 local time....
-#
-# The east coast of Greenland north of the community of Scoresbysund
-# uses UTC in the same way as in Iceland, year round, with no dst.
-# There are just a few stations on this coast, including the
-# Danmarkshavn ICAO weather station mentioned in your September 29th
-# email. The other stations are two sledge patrol stations in
-# Mestersvig and Daneborg, the air force base at Station Nord, and the
-# 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 (GodthÄb).
-#
-# 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 GodthÄb time. This area might be
-# considered a dual time zone in some respects because of this.
-
-# From Rives McDow (2001-11-19):
-# I heard back from someone stationed at Thule; the time change took place
-# there at 2:00 AM.
-
-# From Paul Eggert (2006-03-22):
-# From 1997 on the CIA map shows Danmarkshavn on GMT;
-# 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.
-
-# From J William Piggott (2016-02-20):
-# "Greenland north of the community of Scoresbysund" is officially named
-# "National Park" by Executive Order:
-# http://naalakkersuisut.gl/~/media/Nanoq/Files/Attached%20Files/Engelske-tekster/Legislation/Executive%20Order%20National%20Park.rtf
-# It is their only National Park.
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Thule 1991 1992 - Mar lastSun 2:00 1:00 D
-Rule Thule 1991 1992 - Sep lastSun 2:00 0 S
-Rule Thule 1993 2006 - Apr Sun>=1 2:00 1:00 D
-Rule Thule 1993 2006 - Oct lastSun 2:00 0 S
-Rule Thule 2007 max - Mar Sun>=8 2:00 1:00 D
-Rule Thule 2007 max - Nov Sun>=1 2:00 0 S
-#
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28
- -3:00 - -03 1980 Apr 6 2:00
- -3:00 EU -03/-02 1996
- 0:00 - GMT
-Zone America/Scoresbysund -1:27:52 - LMT 1916 Jul 28 # Ittoqqortoormiit
- -2:00 - -02 1980 Apr 6 2:00
- -2:00 C-Eur -02/-01 1981 Mar 29
- -1:00 EU -01/+00
-Zone America/Godthab -3:26:56 - LMT 1916 Jul 28 # Nuuk
- -3:00 - -03 1980 Apr 6 2:00
- -3:00 EU -03/-02
-Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik air base
- -4:00 Thule A%sT
-
-# Estonia
-#
-# From Paul Eggert (2016-03-18):
-# The 1989 transition is from USSR act No. 227 (1989-03-14).
-#
-# From Peter Ilieve (1994-10-15):
-# A relative in Tallinn confirms the accuracy of the data for 1989 onwards
-# [through 1994] and gives the legal authority for it,
-# a regulation of the Government of Estonia, No. 111 of 1989....
-#
-# From Peter Ilieve (1996-10-28):
-# [IATA SSIM (1992/1996) claims that the Baltic republics switch at 01:00s,
-# but a relative confirms that Estonia still switches at 02:00s, writing:]
-# "I do not [know] exactly but there are some little different
-# (confusing) rules for International Air and Railway Transport Schedules
-# conversion in Sunday connected with end of summer time in Estonia....
-# A discussion is running about the summer time efficiency and effect on
-# human physiology. It seems that Estonia maybe will not change to
-# 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).
-#
-# 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 <https://www.baltictimes.com/> (1999-09-09)
-# via Steffen Thorsen:
-# This year will mark the last time Estonia shifts to summer time,
-# a council of the ruling coalition announced Sept. 6....
-# But what this could mean for Estonia's chances of joining the European
-# Union are still unclear. In 1994, the EU declared summer time compulsory
-# for all member states until 2001. Brussels has yet to decide what to do
-# after that.
-
-# From Mart Oruaas (2000-01-29):
-# Regulation No. 301 (1999-10-12) obsoletes previous regulation
-# No. 206 (1998-09-22) and thus sticks Estonia to +02:00 GMT for all
-# the year round. The regulation is effective 1999-11-01.
-
-# From Toomas Soome (2002-02-21):
-# The Estonian government has changed once again timezone politics.
-# Now we are using again EU rules.
-#
-# 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: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
- 2:00 C-Eur EE%sT 1998 Sep 22
- 2:00 EU EE%sT 1999 Oct 31 4:00
- 2:00 - EET 2002 Feb 21
- 2:00 EU EE%sT
-
-# Finland
-
-# From Hannu Strang (1994-09-25 06:03:37 UTC):
-# Well, here in Helsinki we're just changing from summer time to regular one,
-# and it's supposed to change at 4am...
-
-# From Janne Snabb (2010-07-15):
-#
-# I noticed that the Finland data is not accurate for years 1981 and 1982.
-# During these two first trial years the DST adjustment was made one hour
-# earlier than in forthcoming years. Starting 1983 the adjustment was made
-# according to the central European standards.
-#
-# 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
-# https://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]
-# https://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 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: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
-
-# Ă
land Is
-Link Europe/Helsinki Europe/Mariehamn
-
-
-# France
-
-# From Ciro Discepolo (2000-12-20):
-#
-# Henri Le Corre, RĂ©gimes horaires pour le monde entier, Ăditions
-# Traditionnelles - Paris 2 books, 1993
-#
-# Gabriel, Traité de l'heure dans le monde, Guy Trédaniel,
-# Paris, 1991
-#
-# Françoise Gauquelin, ProblÚmes de l'heure résolus en astrologie,
-# Guy Trédaniel, Paris 1987
-
-
-#
-# Shank & Pottenger seem to use '24:00' ambiguously; resolve it with Whitman.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule France 1916 only - Jun 14 23:00s 1:00 S
-Rule France 1916 1919 - Oct Sun>=1 23:00s 0 -
-Rule France 1917 only - Mar 24 23:00s 1:00 S
-Rule France 1918 only - Mar 9 23:00s 1:00 S
-Rule France 1919 only - Mar 1 23:00s 1:00 S
-Rule France 1920 only - Feb 14 23:00s 1:00 S
-Rule France 1920 only - Oct 23 23:00s 0 -
-Rule France 1921 only - Mar 14 23:00s 1:00 S
-Rule France 1921 only - Oct 25 23:00s 0 -
-Rule France 1922 only - Mar 25 23:00s 1:00 S
-# DSH writes that a law of 1923-05-24 specified 3rd Sat in Apr at 23:00 to 1st
-# Sat in Oct at 24:00; and that in 1930, because of Easter, the transitions
-# were Apr 12 and Oct 5. Go with Shanks & Pottenger.
-Rule France 1922 1938 - Oct Sat>=1 23:00s 0 -
-Rule France 1923 only - May 26 23:00s 1:00 S
-Rule France 1924 only - Mar 29 23:00s 1:00 S
-Rule France 1925 only - Apr 4 23:00s 1:00 S
-Rule France 1926 only - Apr 17 23:00s 1:00 S
-Rule France 1927 only - Apr 9 23:00s 1:00 S
-Rule France 1928 only - Apr 14 23:00s 1:00 S
-Rule France 1929 only - Apr 20 23:00s 1:00 S
-Rule France 1930 only - Apr 12 23:00s 1:00 S
-Rule France 1931 only - Apr 18 23:00s 1:00 S
-Rule France 1932 only - Apr 2 23:00s 1:00 S
-Rule France 1933 only - Mar 25 23:00s 1:00 S
-Rule France 1934 only - Apr 7 23:00s 1:00 S
-Rule France 1935 only - Mar 30 23:00s 1:00 S
-Rule France 1936 only - Apr 18 23:00s 1:00 S
-Rule France 1937 only - Apr 3 23:00s 1:00 S
-Rule France 1938 only - Mar 26 23:00s 1:00 S
-Rule France 1939 only - Apr 15 23:00s 1:00 S
-Rule France 1939 only - Nov 18 23:00s 0 -
-Rule France 1940 only - Feb 25 2:00 1:00 S
-# The French rules for 1941-1944 were not used in Paris, but Shanks & 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 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, 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 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
-Rule France 1942 only - Nov 2 3:00 1:00 S
-Rule France 1943 only - Mar 29 2:00 2:00 M
-Rule France 1943 only - Oct 4 3:00 1:00 S
-Rule France 1944 only - Apr 3 2:00 2:00 M
-Rule France 1944 only - Oct 8 1:00 1:00 S
-Rule France 1945 only - Apr 2 2:00 2:00 M
-Rule France 1945 only - Sep 16 3:00 0 -
-# Shanks & Pottenger give Mar 28 2:00 and Sep 26 3:00;
-# go with Excoffier's 28/3/76 0hUT and 25/9/76 23hUT.
-Rule France 1976 only - Mar 28 1:00 1:00 S
-Rule France 1976 only - Sep 26 1:00 0 -
-# Shanks & Pottenger give 0:09:20 for Paris Mean Time, and Whitman 0:09:05,
-# but Howse quotes the actual French legislation as saying 0:09:21.
-# Go with Howse. Howse writes that the time in France was officially based
-# on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC.
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01
- 0:09:21 - PMT 1911 Mar 11 0:01 # Paris MT
-# Shanks & Pottenger give 1940 Jun 14 0:00; go with Excoffier and Le Corre.
- 0:00 France WE%sT 1940 Jun 14 23:00
-# Le Corre says Paris stuck with occupied-France time after the liberation;
-# go with Shanks & Pottenger.
- 1:00 C-Eur CE%sT 1944 Aug 25
- 0:00 France WE%sT 1945 Sep 16 3:00
- 1:00 France CE%sT 1977
- 1:00 EU CE%sT
-
-# Germany
-
-# From Markus Kuhn (1998-09-29):
-# The German time zone web site by the Physikalisch-Technische
-# Bundesanstalt contains DST information back to 1916.
-# [See tz-link.html for the URL.]
-
-# From Jörg Schilling (2002-10-23):
-# In 1945, Berlin was switched to Moscow Summer time (GMT+4) by
-# https://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 UT +03, not +04.
-
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Germany 1946 only - Apr 14 2:00s 1:00 S
-Rule Germany 1946 only - Oct 7 2:00s 0 -
-Rule Germany 1947 1949 - Oct Sun>=1 2:00s 0 -
-# http://www.ptb.de/de/org/4/44/441/salt.htm says the following transition
-# occurred at 3:00 MEZ, not the 2:00 MEZ given in Shanks & Pottenger.
-# Go with the PTB.
-Rule Germany 1947 only - Apr 6 3:00s 1:00 S
-Rule Germany 1947 only - May 11 2:00s 2:00 M
-Rule Germany 1947 only - Jun 29 3:00 1:00 S
-Rule Germany 1948 only - Apr 18 2:00s 1:00 S
-Rule Germany 1949 only - Apr 10 2:00s 1:00 S
-
-Rule SovietZone 1945 only - May 24 2:00 2:00 M # Midsummer
-Rule SovietZone 1945 only - Sep 24 3:00 1:00 S
-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 SovietZone CE%sT 1946
- 1:00 Germany CE%sT 1980
- 1:00 EU CE%sT
-
-# From Tobias Conradi (2011-09-12):
-# BĂŒsingen <http://www.buesingen.de>, surrounded by the Swiss canton
-# Schaffhausen, did not start observing DST in 1980 as the rest of DE
-# (West Germany at that time) and DD (East Germany at that time) did.
-# DD merged into DE, the area is currently covered by code DE in ISO 3166-1,
-# which in turn is covered by the zone Europe/Berlin.
-#
-# Source for the time in BĂŒsingen 1980:
-# http://www.srf.ch/player/video?id=c012c029-03b7-4c2b-9164-aa5902cd58d3
-
-# From Arthur David Olson (2012-03-03):
-# BĂŒsingen and Zurich have shared clocks since 1970.
-
-Link Europe/Zurich Europe/Busingen
-
-# Georgia
-# Please see the "asia" file for Asia/Tbilisi.
-# Herodotus (Histories, IV.45) says Georgia north of the Phasis (now Rioni)
-# is in Europe. Our reference location Tbilisi is in the Asian part.
-
-# 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
- 1:00 - CET 1982
- 1:00 EU CE%sT
-
-# Greece
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# Whitman gives 1932 Jul 5 - Nov 1; go with Shanks & Pottenger.
-Rule Greece 1932 only - Jul 7 0:00 1:00 S
-Rule Greece 1932 only - Sep 1 0:00 0 -
-# Whitman gives 1941 Apr 25 - ?; go with Shanks & Pottenger.
-Rule Greece 1941 only - Apr 7 0:00 1:00 S
-# Whitman gives 1942 Feb 2 - ?; go with Shanks & Pottenger.
-Rule Greece 1942 only - Nov 2 3:00 0 -
-Rule Greece 1943 only - Mar 30 0:00 1:00 S
-Rule Greece 1943 only - Oct 4 0:00 0 -
-# Whitman gives 1944 Oct 3 - Oct 31; go with Shanks & Pottenger.
-Rule Greece 1952 only - Jul 1 0:00 1:00 S
-Rule Greece 1952 only - Nov 2 0:00 0 -
-Rule Greece 1975 only - Apr 12 0:00s 1:00 S
-Rule Greece 1975 only - Nov 26 0:00s 0 -
-Rule Greece 1976 only - Apr 11 2:00s 1:00 S
-Rule Greece 1976 only - Oct 10 2:00s 0 -
-Rule Greece 1977 1978 - Apr Sun>=1 2:00s 1:00 S
-Rule Greece 1977 only - Sep 26 2:00s 0 -
-Rule Greece 1978 only - Sep 24 4:00 0 -
-Rule Greece 1979 only - Apr 1 9:00 1:00 S
-Rule Greece 1979 only - Sep 29 2:00 0 -
-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
- 2:00 Greece EE%sT 1941 Apr 30
- 1:00 Greece CE%sT 1944 Apr 4
- 2:00 Greece EE%sT 1981
- # Shanks & Pottenger say it switched to C-Eur in 1981;
- # go with EU rules instead, since Greece joined Jan 1.
- 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 16 3:00 0 -
-Rule Hungary 1919 only - Apr 15 3:00 1:00 S
-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 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
-Rule Hungary 1950 only - Apr 17 2:00s 1:00 S
-Rule Hungary 1950 only - Oct 23 2:00s 0 -
-Rule Hungary 1954 1955 - May 23 0:00 1:00 S
-Rule Hungary 1954 1955 - Oct 3 0:00 0 -
-Rule Hungary 1956 only - Jun Sun>=1 0:00 1:00 S
-Rule Hungary 1956 only - Sep lastSun 0:00 0 -
-Rule Hungary 1957 only - Jun Sun>=1 1:00 1:00 S
-Rule Hungary 1957 only - Sep lastSun 3:00 0 -
-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 8
- 1:00 C-Eur CE%sT 1945
- 1:00 Hungary CE%sT 1980 Sep 28 2:00s
- 1:00 EU CE%sT
-
-# Iceland
-#
-# From Adam David (1993-11-06):
-# The name of the timezone in Iceland for system / mail / news purposes is GMT.
-#
-# (1993-12-05):
-# This material is paraphrased from the 1988 edition of the University of
-# Iceland Almanak.
-#
-# From January 1st, 1908 the whole of Iceland was standardised at 1 hour
-# behind GMT. Previously, local mean solar time was used in different parts
-# of Iceland, the almanak had been based on Reykjavik mean solar time which
-# was 1 hour and 28 minutes behind GMT.
-#
-# "first day of winter" referred to [below] means the first day of the 26 weeks
-# of winter, according to the old icelandic calendar that dates back to the
-# time the norsemen first settled Iceland. The first day of winter is always
-# Saturday, but is not dependent on the Julian or Gregorian calendars.
-#
-# (1993-12-10):
-# I have a reference from the Oxford Icelandic-English dictionary for the
-# beginning of winter, which ties it to the ecclesiastical calendar (and thus
-# to the julian/gregorian calendar) over the period in question.
-# the winter begins on the Saturday next before St. Luke's day
-# (old style), or on St. Luke's day, if a Saturday.
-# St. Luke's day ought to be traceable from ecclesiastical sources. "old style"
-# might be a reference to the Julian calendar as opposed to Gregorian, or it
-# might mean something else (???).
-#
-# From Paul Eggert (2014-11-22):
-# The information below is taken from the 1988 Almanak; see
-# http://www.almanak.hi.is/klukkan.html
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Iceland 1917 1919 - Feb 19 23:00 1:00 -
-Rule Iceland 1917 only - Oct 21 1:00 0 -
-Rule Iceland 1918 1919 - Nov 16 1:00 0 -
-Rule Iceland 1921 only - Mar 19 23:00 1:00 -
-Rule Iceland 1921 only - Jun 23 1:00 0 -
-Rule Iceland 1939 only - Apr 29 23:00 1:00 -
-Rule Iceland 1939 only - Oct 29 2:00 0 -
-Rule Iceland 1940 only - Feb 25 2:00 1:00 -
-Rule Iceland 1940 1941 - Nov Sun>=2 1:00s 0 -
-Rule Iceland 1941 1942 - Mar Sun>=2 1:00s 1:00 -
-# 1943-1946 - first Sunday in March until first Sunday in winter
-Rule Iceland 1943 1946 - Mar Sun>=1 1:00s 1:00 -
-Rule Iceland 1942 1948 - Oct Sun>=22 1:00s 0 -
-# 1947-1967 - first Sunday in April until first Sunday in winter
-Rule Iceland 1947 1967 - Apr Sun>=1 1:00s 1:00 -
-# 1949 and 1967 Oct transitions delayed by 1 week
-Rule Iceland 1949 only - Oct 30 1:00s 0 -
-Rule Iceland 1950 1966 - Oct Sun>=22 1:00s 0 -
-Rule Iceland 1967 only - Oct 29 1:00s 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Atlantic/Reykjavik -1:28 - LMT 1908
- -1:00 Iceland -01/+00 1968 Apr 7 1:00s
- 0:00 - GMT
-
-# Italy
-#
-# From Paul Eggert (2001-03-06):
-# Sicily and Sardinia each had their own time zones from 1866 to 1893,
-# called Palermo Time (+00:53:28) and Cagliari Time (+00:36:32).
-# During World War II, German-controlled Italy used German time.
-# But these events all occurred before the 1970 cutoff,
-# so record only the time in Rome.
-#
-# From Michael Deckers (2016-10-24):
-# http://www.ac-ilsestante.it/MERIDIANE/ora_legale quotes a law of 1893-08-10
-# ... [translated as] "The preceding dispositions will enter into
-# force at the instant at which, according to the time specified in
-# the 1st article, the 1st of November 1893 will begin...."
-#
-# From Pierpaolo Bernardi (2016-10-20):
-# The authoritative source for time in Italy is the national metrological
-# institute, which has a summary page of historical DST data at
-# http://www.inrim.it/res/tf/ora_legale_i.shtml
-# (2016-10-24):
-# http://www.renzobaldini.it/le-ore-legali-in-italia/
-# has still different data for 1944. It divides Italy in two, as
-# there were effectively two governments at the time, north of Gothic
-# Line German controlled territory, official government RSI, and south
-# of the Gothic Line, controlled by allied armies.
-#
-# From Brian Inglis (2016-10-23):
-# Viceregal LEGISLATIVE DECREE. 14 September 1944, no. 219.
-# Restoration of Standard Time. (044U0219) (OJ 62 of 30.9.1944) ...
-# Given the R. law decreed on 1944-03-29, no. 92, by which standard time is
-# advanced to sixty minutes later starting at hour two on 1944-04-02; ...
-# Starting at hour three on the date 1944-09-17 standard time will be resumed.
-#
-# From Paul Eggert (2016-10-27):
-# Go with INRiM for DST rules, except as corrected by Inglis for 1944
-# for the Kingdom of Italy. This is consistent with Renzo Baldini.
-# Model Rome's occupation by using C-Eur rules from 1943-09-10
-# to 1944-06-04; although Rome was an open city during this period, it
-# was effectively controlled by Germany.
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Italy 1916 only - Jun 3 24:00 1:00 S
-Rule Italy 1916 1917 - Sep 30 24:00 0 -
-Rule Italy 1917 only - Mar 31 24:00 1:00 S
-Rule Italy 1918 only - Mar 9 24:00 1:00 S
-Rule Italy 1918 only - Oct 6 24:00 0 -
-Rule Italy 1919 only - Mar 1 24:00 1:00 S
-Rule Italy 1919 only - Oct 4 24:00 0 -
-Rule Italy 1920 only - Mar 20 24:00 1:00 S
-Rule Italy 1920 only - Sep 18 24:00 0 -
-Rule Italy 1940 only - Jun 14 24:00 1:00 S
-Rule Italy 1942 only - Nov 2 2:00s 0 -
-Rule Italy 1943 only - Mar 29 2:00s 1:00 S
-Rule Italy 1943 only - Oct 4 2:00s 0 -
-Rule Italy 1944 only - Apr 2 2:00s 1:00 S
-Rule Italy 1944 only - Sep 17 2:00s 0 -
-Rule Italy 1945 only - Apr 2 2:00 1:00 S
-Rule Italy 1945 only - Sep 15 1:00 0 -
-Rule Italy 1946 only - Mar 17 2:00s 1:00 S
-Rule Italy 1946 only - Oct 6 2:00s 0 -
-Rule Italy 1947 only - Mar 16 0:00s 1:00 S
-Rule Italy 1947 only - Oct 5 0:00s 0 -
-Rule Italy 1948 only - Feb 29 2:00s 1:00 S
-Rule Italy 1948 only - Oct 3 2:00s 0 -
-Rule Italy 1966 1968 - May Sun>=22 0:00s 1:00 S
-Rule Italy 1966 only - Sep 24 24:00 0 -
-Rule Italy 1967 1969 - Sep Sun>=22 0:00s 0 -
-Rule Italy 1969 only - Jun 1 0:00s 1:00 S
-Rule Italy 1970 only - May 31 0:00s 1:00 S
-Rule Italy 1970 only - Sep lastSun 0:00s 0 -
-Rule Italy 1971 1972 - May Sun>=22 0:00s 1:00 S
-Rule Italy 1971 only - Sep lastSun 0:00s 0 -
-Rule Italy 1972 only - Oct 1 0:00s 0 -
-Rule Italy 1973 only - Jun 3 0:00s 1:00 S
-Rule Italy 1973 1974 - Sep lastSun 0:00s 0 -
-Rule Italy 1974 only - May 26 0:00s 1:00 S
-Rule Italy 1975 only - Jun 1 0:00s 1:00 S
-Rule Italy 1975 1977 - Sep lastSun 0:00s 0 -
-Rule Italy 1976 only - May 30 0:00s 1:00 S
-Rule Italy 1977 1979 - May Sun>=22 0:00s 1:00 S
-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 Oct 31 23:49:56 # Rome Mean
- 1:00 Italy CE%sT 1943 Sep 10
- 1:00 C-Eur CE%sT 1944 Jun 4
- 1:00 Italy CE%sT 1980
- 1:00 EU CE%sT
-
-Link Europe/Rome Europe/Vatican
-Link Europe/Rome Europe/San_Marino
-
-# Latvia
-
-# From Liene Kanepe (1998-09-17):
-
-# I asked about this matter Scientific Secretary of the Institute of Astronomy
-# of The University of Latvia Dr. paed Mr. Ilgonis Vilks. I also searched the
-# correct data in juridical acts and I found some juridical documents about
-# changes in the counting of time in Latvia from 1981....
-#
-# Act No. 35 of the Council of Ministers of Latvian SSR of 1981-01-22 ...
-# according to the Act No. 925 of the Council of Ministers of USSR of 1980-10-24
-# ...: all year round the time of 2nd time zone + 1 hour, in addition turning
-# the hands of the clock 1 hour forward on 1 April at 00:00 (GMT 31 March 21:00)
-# and 1 hour backward on the 1 October at 00:00 (GMT 30 September 20:00).
-#
-# Act No. 592 of the Council of Ministers of Latvian SSR of 1984-09-24 ...
-# according to the Act No. 967 of the Council of Ministers of USSR of 1984-09-13
-# ...: all year round the time of 2nd time zone + 1 hour, in addition turning
-# the hands of the clock 1 hour forward on the last Sunday of March at 02:00
-# (GMT 23:00 on the previous day) and 1 hour backward on the last Sunday of
-# September at 03:00 (GMT 23:00 on the previous day).
-#
-# Act No. 81 of the Council of Ministers of Latvian SSR of 1989-03-22 ...
-# according to the Act No. 227 of the Council of Ministers of USSR of 1989-03-14
-# ...: since the last Sunday of March 1989 in Lithuanian SSR, Latvian SSR,
-# Estonian SSR and Kaliningrad region of Russian Federation all year round the
-# time of 2nd time zone (Moscow time minus one hour). On the territory of Latvia
-# transition to summer time is performed on the last Sunday of March at 02:00
-# (GMT 00:00), turning the hands of the clock 1 hour forward. The end of
-# daylight saving time is performed on the last Sunday of September at 03:00
-# (GMT 00:00), turning the hands of the clock 1 hour backward. Exception is
-# 1989-03-26, when we must not turn the hands of the clock....
-#
-# The Regulations of the Cabinet of Ministers of the Republic of Latvia of
-# 1997-01-21 on transition to Summer time ... established the same order of
-# daylight savings time settings as in the States of the European Union.
-
-# 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 (No. 79) <http://www.lv-laiks.lv/wwwraksti/2000/071072/vd4.htm>,
-# in Latvian for subscribers only).
-
-# 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 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
-# urged Lithuania and Estonia to adopt a similar time policy, but it
-# appears that they will not do so....
-
-# 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: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
- 2:00 Latvia EE%sT 1997 Jan 21
- 2:00 EU EE%sT 2000 Feb 29
- 2:00 - EET 2001 Jan 2
- 2:00 EU EE%sT
-
-# Liechtenstein
-
-# From Paul Eggert (2013-09-09):
-# Shanks & Pottenger say Vaduz is like Zurich.
-
-# From Alois Treindl (2013-09-18):
-# http://www.eliechtensteinensia.li/LIJ/1978/1938-1978/1941.pdf
-# ... confirms on p. 6 that Liechtenstein followed Switzerland in 1941 and 1942.
-# I ... translate only the last two paragraphs:
-# ... during second world war, in the years 1941 and 1942, Liechtenstein
-# introduced daylight saving time, adapting to Switzerland. From 1943 on
-# central European time was in force throughout the year.
-# From a report of the duke's government to the high council,
-# regarding the introduction of a time law, of 31 May 1977.
-
-Link Europe/Zurich Europe/Vaduz
-
-
-# Lithuania
-
-# From Paul Eggert (2016-03-18):
-# The 1989 transition is from USSR act No. 227 (1989-03-14).
-
-# From Paul Eggert (1996-11-22):
-# IATA SSIM (1992/1996) says Lithuania uses W-Eur rules, but since it is
-# known to be wrong about Estonia and Latvia, assume it's wrong here too.
-
-# From Marius Gedminas (1998-08-07):
-# I would like to inform that in this year Lithuanian time zone
-# (Europe/Vilnius) was changed.
-
-# From ELTA No. 972 (2582) (1999-09-29) <http://www.elta.lt/>,
-# via Steffen Thorsen:
-# Lithuania has shifted back to the second time zone (GMT plus two hours)
-# to be valid here starting from October 31,
-# as decided by the national government on Wednesday....
-# The Lithuanian government also announced plans to consider a
-# 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
-# <http://www.tourism.lt/informa/ff.htm> (2000-03-27):
-# Local time is GMT+2 hours ..., no daylight saving.
-
-# From a user via Klaus Marten (2003-02-07):
-# As a candidate for membership of the European Union, Lithuania will
-# observe Summer Time in 2003, changing its clocks at the times laid
-# down in EU Directive 2000/84 of 19.I.01 (i.e. at the same times as its
-# neighbour Latvia). The text of the Lithuanian government Order of
-# 7.XI.02 to this effect can be found at
-# http://www.lrvk.lt/nut/11/n1749.htm
-
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Vilnius 1:41:16 - LMT 1880
- 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 1989 Mar 26 2:00s
- 2:00 Russia EE%sT 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 2003 Jan 1
- 2:00 EU EE%sT
-
-# Luxembourg
-# Whitman disagrees with most of these dates in minor ways;
-# go with Shanks & Pottenger.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Lux 1916 only - May 14 23:00 1:00 S
-Rule Lux 1916 only - Oct 1 1:00 0 -
-Rule Lux 1917 only - Apr 28 23:00 1:00 S
-Rule Lux 1917 only - Sep 17 1:00 0 -
-Rule Lux 1918 only - Apr Mon>=15 2:00s 1:00 S
-Rule Lux 1918 only - Sep Mon>=15 2:00s 0 -
-Rule Lux 1919 only - Mar 1 23:00 1:00 S
-Rule Lux 1919 only - Oct 5 3:00 0 -
-Rule Lux 1920 only - Feb 14 23:00 1:00 S
-Rule Lux 1920 only - Oct 24 2:00 0 -
-Rule Lux 1921 only - Mar 14 23:00 1:00 S
-Rule Lux 1921 only - Oct 26 2:00 0 -
-Rule Lux 1922 only - Mar 25 23:00 1:00 S
-Rule Lux 1922 only - Oct Sun>=2 1:00 0 -
-Rule Lux 1923 only - Apr 21 23:00 1:00 S
-Rule Lux 1923 only - Oct Sun>=2 2:00 0 -
-Rule Lux 1924 only - Mar 29 23:00 1:00 S
-Rule Lux 1924 1928 - Oct Sun>=2 1:00 0 -
-Rule Lux 1925 only - Apr 5 23:00 1:00 S
-Rule Lux 1926 only - Apr 17 23:00 1:00 S
-Rule Lux 1927 only - Apr 9 23:00 1:00 S
-Rule Lux 1928 only - Apr 14 23:00 1:00 S
-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
- 1:00 Belgium CE%sT 1977
- 1:00 EU CE%sT
-
-# North Macedonia
-# See Europe/Belgrade.
-
-# Malta
-#
-# From Paul Eggert (2016-10-21):
-# Assume 1900-1972 was like Rome, overriding Shanks.
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Malta 1973 only - Mar 31 0:00s 1:00 S
-Rule Malta 1973 only - Sep 29 0:00s 0 -
-Rule Malta 1974 only - Apr 21 0:00s 1:00 S
-Rule Malta 1974 only - Sep 16 0:00s 0 -
-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 1973 Mar 31
- 1:00 Malta CE%sT 1981
- 1:00 EU CE%sT
-
-# Moldova
-
-# From Stepan Golosunov (2016-03-07):
-# the act of the government of the Republic of Moldova Nr. 132 from 1990-05-04
-# http://lex.justice.md/viewdoc.php?action=view&view=doc&id=298782&lang=2
-# ... says that since 1990-05-06 on the territory of the Moldavian SSR
-# time would be calculated as the standard time of the second time belt
-# plus one hour of the "summer" time. To implement that clocks would be
-# adjusted one hour backwards at 1990-05-06 2:00. After that "summer"
-# time would be cancelled last Sunday of September at 3:00 and
-# reintroduced last Sunday of March at 2:00.
-
-# From Paul Eggert (2006-03-22):
-# A previous version of this database followed Shanks & Pottenger, who write
-# that Tiraspol switched to Moscow time on 1992-01-19 at 02:00.
-# However, this is most likely an error, as Moldova declared independence
-# on 1991-08-27 (the 1992-01-19 date is that of a Russian decree).
-# In early 1992 there was large-scale interethnic violence in the area
-# and it's possible that some Russophones continued to observe Moscow time.
-# But [two people] separately reported via
-# 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):
-# Pridnestrovian Moldavian Republic (PMR, also known as
-# "Pridnestrovie") has abolished seasonal clock change (no transition
-# 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)
-#
-# From Tim Parenti (2011-10-19)
-# In addition, being situated at +4651+2938 would give Tiraspol
-# a pre-1880 LMT offset of 1:58:32.
-#
-# (which agrees with the earlier entry that had been removed)
-#
-# From Alexander Krivenyshev (2011-10-26)
-# NO need to divide Moldova into two timezones at this point.
-# As of today, Transnistria (Pridnestrovie)- Tiraspol reversed its own
-# decision to abolish DST this winter.
-# Following Moldova and neighboring Ukraine- Transnistria (Pridnestrovie)-
-# Tiraspol will go back to winter time on October 30, 2011.
-# News from Moldova (in russian):
-# https://ru.publika.md/link_317061.html
-
-# From Roman Tudos (2015-07-02):
-# http://lex.justice.md/index.php?action=view&view=doc&lang=1&id=355077
-# From Paul Eggert (2015-07-01):
-# The abovementioned official link to IGO1445-868/2014 states that
-# 2014-10-26's fallback transition occurred at 03:00 local time. Also,
-# https://www.trm.md/en/social/la-30-martie-vom-trece-la-ora-de-vara
-# says the 2014-03-30 spring-forward transition was at 02:00 local time.
-# Guess that since 1997 Moldova has switched one hour before the EU.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Moldova 1997 max - Mar lastSun 2:00 1:00 S
-Rule Moldova 1997 max - Oct lastSun 3:00 0 -
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Chisinau 1:55:20 - LMT 1880
- 1:55 - CMT 1918 Feb 15 # Chisinau MT
- 1:44:24 - BMT 1931 Jul 24 # Bucharest MT
- 2:00 Romania EE%sT 1940 Aug 15
- 2:00 1:00 EEST 1941 Jul 17
- 1:00 C-Eur CE%sT 1944 Aug 24
- 3:00 Russia MSK/MSD 1990 May 6 2:00
- 2:00 Russia EE%sT 1992
- 2:00 E-Eur EE%sT 1997
-# See Romania commentary for the guessed 1997 transition to EU rules.
- 2:00 Moldova EE%sT
-
-# Monaco
-# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
-# more precise 0:09:21.
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
- 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
- 0:00 France WE%sT 1945 Sep 16 3:00
- 1:00 France CE%sT 1977
- 1:00 EU CE%sT
-
-# Montenegro
-# See Europe/Belgrade.
-
-# Netherlands
-
-# Howse writes that the Netherlands' railways used GMT between 1892 and 1940,
-# but for other purposes the Netherlands used Amsterdam mean time.
-
-# However, Robert H. van Gent writes (2001-04-01):
-# Howse's statement is only correct up to 1909. From 1909-05-01 (00:00:00
-# Amsterdam mean time) onwards, the whole of the Netherlands (including
-# the Dutch railways) was required by law to observe Amsterdam mean time
-# (19 minutes 32.13 seconds ahead of GMT). This had already been the
-# common practice (except for the railways) for many decades but it was
-# not until 1909 when the Dutch government finally defined this by law.
-# On 1937-07-01 this was changed to 20 minutes (exactly) ahead of GMT and
-# was generally known as Dutch Time ("Nederlandse Tijd").
-#
-# (2001-04-08):
-# 1892-05-01 was the date when the Dutch railways were by law required to
-# observe GMT while the remainder of the Netherlands adhered to the common
-# practice of following Amsterdam mean time.
-#
-# (2001-04-09):
-# In 1835 the authorities of the province of North Holland requested the
-# municipal authorities of the towns and cities in the province to observe
-# Amsterdam mean time but I do not know in how many cases this request was
-# actually followed.
-#
-# From 1852 onwards the Dutch telegraph offices were by law required to
-# observe Amsterdam mean time. As the time signals from the observatory of
-# Leiden were also distributed by the telegraph system, I assume that most
-# places linked up with the telegraph (and railway) system automatically
-# adopted Amsterdam mean time.
-#
-# Although the early Dutch railway companies initially observed a variety
-# of times, most of them had adopted Amsterdam mean time by 1858 but it
-# was not until 1866 when they were all required by law to observe
-# Amsterdam mean time.
-
-# The data entries before 1945 are taken from
-# https://www.staff.science.uu.nl/~gent0113/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
-Rule Neth 1916 only - Oct 1 0:00 0 AMT # Amsterdam Mean Time
-Rule Neth 1917 only - Apr 16 2:00s 1:00 NST
-Rule Neth 1917 only - Sep 17 2:00s 0 AMT
-Rule Neth 1918 1921 - Apr Mon>=1 2:00s 1:00 NST
-Rule Neth 1918 1921 - Sep lastMon 2:00s 0 AMT
-Rule Neth 1922 only - Mar lastSun 2:00s 1:00 NST
-Rule Neth 1922 1936 - Oct Sun>=2 2:00s 0 AMT
-Rule Neth 1923 only - Jun Fri>=1 2:00s 1:00 NST
-Rule Neth 1924 only - Mar lastSun 2:00s 1:00 NST
-Rule Neth 1925 only - Jun Fri>=1 2:00s 1:00 NST
-# From 1926 through 1939 DST began 05-15, except that it was delayed by a week
-# in years when 05-15 fell in the Pentecost weekend.
-Rule Neth 1926 1931 - May 15 2:00s 1:00 NST
-Rule Neth 1932 only - May 22 2:00s 1:00 NST
-Rule Neth 1933 1936 - May 15 2:00s 1:00 NST
-Rule Neth 1937 only - May 22 2:00s 1:00 NST
-Rule Neth 1937 only - Jul 1 0:00 1:00 S
-Rule Neth 1937 1939 - Oct Sun>=2 2:00s 0 -
-Rule Neth 1938 1939 - May 15 2:00s 1:00 S
-Rule Neth 1945 only - Apr 2 2:00s 1:00 S
-Rule Neth 1945 only - Sep 16 2:00s 0 -
-#
-# Amsterdam Mean Time was +00:19:32.13, but the .13 is omitted
-# below because the current format requires GMTOFF to be an integer.
-# 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 +0020/+0120 1940 May 16 0:00
- 1:00 C-Eur CE%sT 1945 Apr 2 2:00
- 1:00 Neth CE%sT 1977
- 1:00 EU CE%sT
-
-# Norway
-# http://met.no/met/met_lex/q_u/sommertid.html (2004-01) agrees with Shanks &
-# Pottenger.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Norway 1916 only - May 22 1:00 1:00 S
-Rule Norway 1916 only - Sep 30 0:00 0 -
-Rule Norway 1945 only - Apr 2 2:00s 1:00 S
-Rule Norway 1945 only - Oct 1 2:00s 0 -
-Rule Norway 1959 1964 - Mar Sun>=15 2:00s 1:00 S
-Rule Norway 1959 1965 - Sep Sun>=15 2:00s 0 -
-Rule Norway 1965 only - Apr 25 2:00s 1:00 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Oslo 0:43:00 - LMT 1895 Jan 1
- 1:00 Norway CE%sT 1940 Aug 10 23:00
- 1:00 C-Eur CE%sT 1945 Apr 2 2:00
- 1:00 Norway CE%sT 1980
- 1:00 EU CE%sT
-
-# Svalbard & Jan Mayen
-
-# From Steffen Thorsen (2001-05-01):
-# Although I could not find it explicitly, it seems that Jan Mayen and
-# Svalbard have been using the same time as Norway at least since the
-# 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
-# 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
-# able to find if Jan Mayen used a different time zone (e.g. -0100)
-# 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
-# between 1895 and 1925 (inclusive).
-
-# From Paul Eggert (2013-09-04):
-#
-# Actually, Jan Mayen was never occupied by Germany during World War II,
-# so it must have diverged from Oslo time during the war, as Oslo was
-# keeping Berlin time.
-#
-# <https://www.jan-mayen.no/history.htm> says that the meteorologists
-# burned down their station in 1940 and left the island, but returned in
-# 1941 with a small Norwegian garrison and continued operations despite
-# frequent air 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.
-#
-# Svalbard is more complicated, as it was raided in August 1941 by an
-# Allied party that evacuated the civilian population to England (says
-# <http://www.bartleby.com/65/sv/Svalbard.html>). The Svalbard FAQ
-# <http://www.svalbard.com/SvalbardFAQ.html> says that the Germans were
-# expelled on 1942-05-14. However, small parties of Germans did return,
-# and according to Wilhelm Dege's book "War North of 80" (1954)
-# http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html
-# the German armed forces at the Svalbard weather station code-named
-# Haudegen did not surrender to the Allies until September 1945.
-#
-# All these events predate our cutoff date of 1970, so use Europe/Oslo
-# for these regions.
-Link Europe/Oslo Arctic/Longyearbyen
-
-# Poland
-
-# The 1919 dates and times can be found in Tygodnik UrzÄdowy nr 1 (1919-03-20),
-# <http://www.wbc.poznan.pl/publication/32156> pp 1-2.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Poland 1918 1919 - Sep 16 2:00s 0 -
-Rule Poland 1919 only - Apr 15 2:00s 1:00 S
-Rule Poland 1944 only - Apr 3 2:00s 1:00 S
-# Whitman gives 1944 Nov 30; go with Shanks & Pottenger.
-Rule Poland 1944 only - Oct 4 2:00 0 -
-# For 1944-1948 Whitman gives the previous day; go with Shanks & Pottenger.
-Rule Poland 1945 only - Apr 29 0:00 1:00 S
-Rule Poland 1945 only - Nov 1 0:00 0 -
-# For 1946 on the source is Kazimierz Borkowski,
-# ToruĆ Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U.,
-# https://www.astro.uni.torun.pl/~kb/Artykuly/U-PA/Czas2.htm#tth_tAb1
-# Thanks to PrzemysĆaw Augustyniak (2005-05-28) for this reference.
-# He also gives these further references:
-# Mon Pol nr 13, poz 162 (1995) <http://www.abc.com.pl/serwis/mp/1995/0162.htm>
-# Druk nr 2180 (2003) <http://www.senat.gov.pl/k5/dok/sejm/053/2180.pdf>
-Rule Poland 1946 only - Apr 14 0:00s 1:00 S
-Rule Poland 1946 only - Oct 7 2:00s 0 -
-Rule Poland 1947 only - May 4 2:00s 1:00 S
-Rule Poland 1947 1949 - Oct Sun>=1 2:00s 0 -
-Rule Poland 1948 only - Apr 18 2:00s 1:00 S
-Rule Poland 1949 only - Apr 10 2:00s 1:00 S
-Rule Poland 1957 only - Jun 2 1:00s 1:00 S
-Rule Poland 1957 1958 - Sep lastSun 1:00s 0 -
-Rule Poland 1958 only - Mar 30 1:00s 1:00 S
-Rule Poland 1959 only - May 31 1:00s 1:00 S
-Rule Poland 1959 1961 - Oct Sun>=1 1:00s 0 -
-Rule Poland 1960 only - Apr 3 1:00s 1:00 S
-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
- 2:00 Poland EE%sT 1922 Jun
- 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
- 1:00 EU CE%sT
-
-# Portugal
-
-# From Paul Eggert (2014-08-11), after a heads-up from Stephen Colebourne:
-# According to a Portuguese decree (1911-05-26)
-# https://dre.pt/application/dir/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....
-#
-# From Michael Deckers (2018-02-15):
-# article 5 [of the 1911 decree; Deckers's translation] ...:
-# These dispositions shall enter into force at the instant at which,
-# according to the 2nd article, the civil day January 1, 1912 begins,
-# all clocks therefore having to be advanced or set back correspondingly ...
-
-# From Rui Pedro Salgueiro (1992-11-12):
-# Portugal has recently (September, 27) changed timezone
-# (from WET to MET or CET) to harmonize with EEC.
-#
-# Martin Bruckmann (1996-02-29) reports via Peter Ilieve
-# that Portugal is reverting to 0:00 by not moving its clocks this spring.
-# The new Prime Minister was fed up with getting up in the dark in the winter.
-#
-# From Paul Eggert (1996-11-12):
-# IATA SSIM (1991-09) reports several 1991-09 and 1992-09 transitions
-# at 02:00u, not 01:00u. Assume that these are typos.
-# IATA SSIM (1991/1992) reports that the Azores were at -1:00.
-# IATA SSIM (1993-02) says +0:00; later issues (through 1996-09) say -1:00.
-# Guess that the Azores changed to EU rules in 1992 (since that's when Portugal
-# harmonized with EU rules), and that they stayed +0:00 that winter.
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# DSH writes that despite Decree 1,469 (1915), the change to the clocks was not
-# done every year, depending on what Spain did, because of railroad schedules.
-# Go with Shanks & Pottenger.
-Rule Port 1916 only - Jun 17 23:00 1:00 S
-# Whitman gives 1916 Oct 31; go with Shanks & Pottenger.
-Rule Port 1916 only - Nov 1 1:00 0 -
-Rule Port 1917 only - Feb 28 23:00s 1:00 S
-Rule Port 1917 1921 - Oct 14 23:00s 0 -
-Rule Port 1918 only - Mar 1 23:00s 1:00 S
-Rule Port 1919 only - Feb 28 23:00s 1:00 S
-Rule Port 1920 only - Feb 29 23:00s 1:00 S
-Rule Port 1921 only - Feb 28 23:00s 1:00 S
-Rule Port 1924 only - Apr 16 23:00s 1:00 S
-Rule Port 1924 only - Oct 14 23:00s 0 -
-Rule Port 1926 only - Apr 17 23:00s 1:00 S
-Rule Port 1926 1929 - Oct Sat>=1 23:00s 0 -
-Rule Port 1927 only - Apr 9 23:00s 1:00 S
-Rule Port 1928 only - Apr 14 23:00s 1:00 S
-Rule Port 1929 only - Apr 20 23:00s 1:00 S
-Rule Port 1931 only - Apr 18 23:00s 1:00 S
-# Whitman gives 1931 Oct 8; go with Shanks & Pottenger.
-Rule Port 1931 1932 - Oct Sat>=1 23:00s 0 -
-Rule Port 1932 only - Apr 2 23:00s 1:00 S
-Rule Port 1934 only - Apr 7 23:00s 1:00 S
-# Whitman gives 1934 Oct 5; go with Shanks & Pottenger.
-Rule Port 1934 1938 - Oct Sat>=1 23:00s 0 -
-# Shanks & Pottenger give 1935 Apr 30; go with Whitman.
-Rule Port 1935 only - Mar 30 23:00s 1:00 S
-Rule Port 1936 only - Apr 18 23:00s 1:00 S
-# Whitman gives 1937 Apr 2; go with Shanks & Pottenger.
-Rule Port 1937 only - Apr 3 23:00s 1:00 S
-Rule Port 1938 only - Mar 26 23:00s 1:00 S
-Rule Port 1939 only - Apr 15 23:00s 1:00 S
-# Whitman gives 1939 Oct 7; go with Shanks & Pottenger.
-Rule Port 1939 only - Nov 18 23:00s 0 -
-Rule Port 1940 only - Feb 24 23:00s 1:00 S
-# Shanks & Pottenger give 1940 Oct 7; go with Whitman.
-Rule Port 1940 1941 - Oct 5 23:00s 0 -
-Rule Port 1941 only - Apr 5 23:00s 1:00 S
-Rule Port 1942 1945 - Mar Sat>=8 23:00s 1:00 S
-Rule Port 1942 only - Apr 25 22:00s 2:00 M # Midsummer
-Rule Port 1942 only - Aug 15 22:00s 1:00 S
-Rule Port 1942 1945 - Oct Sat>=24 23:00s 0 -
-Rule Port 1943 only - Apr 17 22:00s 2:00 M
-Rule Port 1943 1945 - Aug Sat>=25 22:00s 1:00 S
-Rule Port 1944 1945 - Apr Sat>=21 22:00s 2:00 M
-Rule Port 1946 only - Apr Sat>=1 23:00s 1:00 S
-Rule Port 1946 only - Oct Sat>=1 23:00s 0 -
-Rule Port 1947 1949 - Apr Sun>=1 2:00s 1:00 S
-Rule Port 1947 1949 - Oct Sun>=1 2:00s 0 -
-# Shanks & Pottenger say DST was observed in 1950; go with Whitman.
-# Whitman gives Oct lastSun for 1952 on; go with Shanks & Pottenger.
-Rule Port 1951 1965 - Apr Sun>=1 2:00s 1:00 S
-Rule Port 1951 1965 - Oct Sun>=1 2:00s 0 -
-Rule Port 1977 only - Mar 27 0:00s 1:00 S
-Rule Port 1977 only - Sep 25 0:00s 0 -
-Rule Port 1978 1979 - Apr Sun>=1 0:00s 1:00 S
-Rule Port 1978 only - Oct 1 0:00s 0 -
-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]
-Zone Europe/Lisbon -0:36:45 - LMT 1884
- -0:36:45 - LMT 1912 Jan 1 0:00u # Lisbon MT
- 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
-# This Zone can be simplified once we assume zic %z.
-Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada
- -1:54:32 - HMT 1912 Jan 1 2:00u # Horta MT
- -2:00 Port -02/-01 1942 Apr 25 22:00s
- -2:00 Port +00 1942 Aug 15 22:00s
- -2:00 Port -02/-01 1943 Apr 17 22:00s
- -2:00 Port +00 1943 Aug 28 22:00s
- -2:00 Port -02/-01 1944 Apr 22 22:00s
- -2:00 Port +00 1944 Aug 26 22:00s
- -2:00 Port -02/-01 1945 Apr 21 22:00s
- -2:00 Port +00 1945 Aug 25 22:00s
- -2:00 Port -02/-01 1966 Apr 3 2:00
- -1:00 Port -01/+00 1983 Sep 25 1:00s
- -1:00 W-Eur -01/+00 1992 Sep 27 1:00s
- 0:00 EU WE%sT 1993 Mar 28 1:00u
- -1:00 EU -01/+00
-# This Zone can be simplified once we assume zic %z.
-Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal
- -1:07:36 - FMT 1912 Jan 1 1:00u # Funchal MT
- -1:00 Port -01/+00 1942 Apr 25 22:00s
- -1:00 Port +01 1942 Aug 15 22:00s
- -1:00 Port -01/+00 1943 Apr 17 22:00s
- -1:00 Port +01 1943 Aug 28 22:00s
- -1:00 Port -01/+00 1944 Apr 22 22:00s
- -1:00 Port +01 1944 Aug 26 22:00s
- -1:00 Port -01/+00 1945 Apr 21 22:00s
- -1:00 Port +01 1945 Aug 25 22:00s
- -1:00 Port -01/+00 1966 Apr 3 2:00
- 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 <http://www.nineoclock.ro/POL/1778pol.html>
-# (1998-10-23) reports that the switch occurred at
-# 04:00 local time in fall 1998. For lack of better info,
-# assume that Romania and Moldova switched to EU rules in 1997,
-# the same year as Bulgaria.
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Romania 1932 only - May 21 0:00s 1:00 S
-Rule Romania 1932 1939 - Oct Sun>=1 0:00s 0 -
-Rule Romania 1933 1939 - Apr Sun>=2 0:00s 1:00 S
-Rule Romania 1979 only - May 27 0:00 1:00 S
-Rule Romania 1979 only - Sep lastSun 0:00 0 -
-Rule Romania 1980 only - Apr 5 23:00 1:00 S
-Rule Romania 1980 only - Sep lastSun 1:00 0 -
-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
- 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 No. 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 No. 23 of January 8, 1992] are available at:
-# http://government.consultant.ru/page.aspx?1223966
-# They are in Cyrillic letters (presumably Russian).
-
-# From Arthur David Olson (2012-05-09):
-# Regarding the instant when clocks in time-zone-shifting parts of Russia
-# changed in September 2011:
-#
-# One source is
-# 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
-# https://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:
-# in the 'RG' - Federal Issue No. 5573 September 6, 2011" but which
-# does not contain any "effective date" information.
-#
-# Another source is
-# https://en.wikipedia.org/wiki/Oymyakonsky_District#cite_note-RuTime-7
-# which, in note 8, contains "Resolution No. 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).
-#
-# 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 look like this:
-# http://www.worldtimezone.com/dst_news/dst_news_russia-map-2014-07.html
-
-# From Paul Eggert (2006-03-22):
-# Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991,
-# are from Andrey A. Chernov. The rest is from Shanks & Pottenger,
-# except we follow Chernov's report that 1992 DST transitions were Sat
-# 23:00, not Sun 02:00s.
-#
-# From Stanislaw A. Kuzikowski (1994-06-29):
-# But now it is some months since Novosibirsk is 3 hours ahead of Moscow!
-# I do not know why they have decided to make this change;
-# as far as I remember it was done exactly during winter->summer switching
-# so we (Novosibirsk) simply did not switch.
-#
-# From Andrey A. Chernov (1996-10-04):
-# 'MSK' and 'MSD' were born and used initially on Moscow computers with
-# UNIX-like OSes by several developer groups (e.g. Demos group, Kiae group)....
-# The next step was the UUCP network, the Relcom predecessor
-# (used mainly for mail), and MSK/MSD was actively used there.
-#
-# From Chris Carrier (1996-10-30):
-# According to a friend of mine who rode the Trans-Siberian Railroad from
-# Moscow to Irkutsk in 1995, public air and rail transport in Russia ...
-# still follows Moscow time, no matter where in Russia it is located.
-#
-# 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
-# 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
-# enforcing curfew at the wrong time.
-#
-# From Gwillim Law (2001-06-05):
-# There's considerable evidence that Sakhalin Island used to be in
-# UTC+11, and has changed to UTC+10, in this decade. I start with the
-# SSIM, which listed Yuzhno-Sakhalinsk in zone RU10 along with Magadan
-# until February 1997, and then in RU9 with Khabarovsk and Vladivostok
-# 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 Marat Nigametzianov (2018-07-16):
-# this is link to order from 1956 about timezone in USSR
-# http://astro.uni-altai.ru/~orion/blog/2011/11/novyie-granitsyi-chasovyih-poyasov-v-sssr/
-#
-# From Paul Eggert (2018-07-16):
-# Perhaps someone could translate the above-mentioned link and use it
-# to correct our data for the ex-Soviet Union. It cites the following:
-# «ĐĐŸŃŃĐœĐŸĐ” ĐČŃĐ”ĐŒŃ Đž ĐœĐŸĐČŃĐ” ĐłŃĐ°ĐœĐžŃŃ ŃĐ°ŃĐŸĐČŃŃ
ĐżĐŸŃŃĐŸĐČ» / ŃĐŸŃŃ. Đ.Đ. ĐĐŸĐ»ĐłĐŸĐČ,
-# ĐŸŃĐČ. ŃДЎ. Đ.Đ. ĐŃŃĐŽŃĐœ - Đ: ĐĐŸĐŒĐžŃĐ”Ń ŃŃĐ°ĐœĐŽĐ°ŃŃĐŸĐČ, ĐŒĐ”Ń Đž ĐžĐ·ĐŒĐ”ŃĐžŃДлŃĐœŃŃ
-# ĐżŃĐžĐ±ĐŸŃĐŸĐČ ĐżŃĐž ĐĄĐŸĐČĐ”ŃĐ” ĐĐžĐœĐžŃŃŃĐŸĐČ ĐĄĐĄĐĄĐ , ĐДжЎŃĐČĐ”ĐŽĐŸĐŒŃŃĐČĐ”ĐœĐœĐ°Ń ĐșĐŸĐŒĐžŃŃĐžŃ
-# Đ”ĐŽĐžĐœĐŸĐč ŃĐ»ŃĐ¶Đ±Ń ĐČŃĐ”ĐŒĐ”ĐœĐž, 1956 Đł.
-# This book looks like it would be a helpful resource for the Soviet
-# Union through 1956. Although a copy was in the Scientific Library
-# of Tomsk State University, I have not been able to track down a copy nearby.
-#
-# From Stepan Golosunov (2018-07-21):
-# http://astro.uni-altai.ru/~orion/blog/2015/05/center-reforma-ischisleniya-vremeni-br-na-territorii-sssr-v-1957-godu-center/
-# says that the 1956 decision to change time belts' borders was not
-# implemented as planned in 1956 and the change happened in 1957.
-# There is also the problem that actual time zones were different from
-# the official time belts (and from many time belts' maps) as there were
-# numerous exceptions to application of time belt rules. For example,
-# https://ru.wikipedia.org/wiki/ĐĐŸŃĐșĐŸĐČŃĐșĐŸĐ”_ĐČŃĐ”ĐŒŃ#ĐĐ”ŃĐ”ĐŒĐ”ŃĐ”ĐœĐžĐ”_ĐłŃĐ°ĐœĐžŃŃ_ĐżŃĐžĐŒĐ”ĐœĐ”ĐœĐžŃ_ĐŒĐŸŃĐșĐŸĐČŃĐșĐŸĐłĐŸ_ĐČŃĐ”ĐŒĐ”ĐœĐž_ĐœĐ°_ĐČĐŸŃŃĐŸĐș
-# says that by 1962 there were many regions in the 3rd time belt that
-# were on Moscow time, referring to a 1962 map. By 1989 number of such
-# exceptions grew considerably.
-
-# 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
-# https://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.
-
-# From Tim Parenti (2014-07-03):
-# Europe/Kaliningrad covers...
-# 39 RU-KGD Kaliningrad Oblast
-
-# From Paul Eggert (2016-03-18):
-# The 1989 transition is from USSR act No. 227 (1989-03-14).
-
-# From Stepan Golosunov (2016-03-07):
-# http://www.rgo.ru/ru/kaliningradskoe-oblastnoe-otdelenie/ob-otdelenii/publikacii/kak-nam-zhilos-bez-letnego-vremeni
-# confirms that the 1989 change to Moscow-1 was implemented.
-# (The article, though, is misattributed to 1990 while saying that
-# summer->winter transition would be done on the 24 of September. But
-# 1990-09-24 was Monday, while 1989-09-24 was Sunday as expected.)
-# ...
-# http://www.kaliningradka.ru/site_pc/cherez/index.php?ELEMENT_ID=40091
-# says that Kaliningrad switched to Moscow-1 on 1989-03-26, avoided
-# at the last moment switch to Moscow-1 on 1991-03-31, switched to
-# Moscow on 1991-11-03, switched to Moscow-1 on 1992-01-19.
-
-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 1989 Mar 26 2:00s
- 2:00 Russia EE%sT 2011 Mar 27 2:00s
- 3:00 - +03 2014 Oct 26 2:00s
- 2:00 - EET
-
-
-# From Paul Eggert (2016-02-21), per Tim Parenti (2014-07-03) and
-# 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
-# 76 RU-YAR Yaroslavl Oblast
-# 77 RU-MOW Moscow
-# 78 RU-SPE Saint Petersburg
-# 83 RU-NEN Nenets Autonomous Okrug
-
-# From Paul Eggert (2016-08-23):
-# The Soviets switched to UT-based time in 1919. Decree No. 59
-# (1919-02-08) http://istmat.info/node/35567 established UT-based time
-# zones, and Decree No. 147 (1919-03-29) http://istmat.info/node/35854
-# specified a transition date of 1919-07-01, apparently at 00:00 UT.
-# No doubt only the Soviet-controlled regions switched on that date;
-# later transitions to UT-based time in other parts of Russia are
-# taken from what appear to be guesses by Shanks.
-# (Thanks to Alexander Belopolsky for pointers to the decrees.)
-
-# From Stepan Golosunov (2016-03-07):
-# 11. Regions-violators, 1981-1982.
-# Wikipedia refers to
-# http://maps.monetonos.ru/maps/raznoe/Old_Maps/Old_Maps/Articles/022/3_1981.html
-# http://besp.narod.ru/nauka_1981_3.htm
-#
-# The second link provides two articles scanned from the Nauka i Zhizn
-# magazine No. 3, 1981 and a scan of the short article attributed to
-# the Trud newspaper from February 1982. The first link provides the
-# same Nauka i Zhizn articles converted to the text form (but misses
-# time belt changes map).
-#
-# The second Nauka i Zhizn article says that in addition to
-# introduction of summer time on 1981-04-01 there are some time belt
-# border changes on 1981-10-01, mostly affecting Nenets Autonomous
-# Okrug, Krasnoyarsk Krai, Yakutia, Magadan Oblast and Chukotka
-# according to the provided map (colored one). In addition to that
-# "time violators" (regions which were not using rules of the time
-# belts in which they were located) would not be moving off the DST on
-# 1981-10-01 to restore the decree time usage. (Komi ASSR was
-# supposed to repeat that move in October 1982 to account for the 2
-# hour difference.) Map depicting "time violators" before 1981-10-01
-# is also provided.
-#
-# The article from Trud says that 1981-10-01 changes caused problems
-# and some territories would be moved to pre-1981-10-01 time by not
-# moving to summer time on 1982-04-01. Namely: Dagestan,
-# Kabardino-Balkar, Kalmyk, Komi, Mari, Mordovian, North Ossetian,
-# Tatar, Chechen-Ingush and Chuvash ASSR, Krasnodar and Stavropol
-# krais, Arkhangelsk, Vladimir, Vologda, Voronezh, Gorky, Ivanovo,
-# Kostroma, Lipetsk, Penza, Rostov, Ryazan, Tambov, Tyumen and
-# Yaroslavl oblasts, Nenets and Evenk autonomous okrugs, Khatangsky
-# district of Taymyr Autonomous Okrug. As a result Evenk Autonomous
-# Okrug and Khatangsky district of Taymyr Autonomous Okrug would end
-# up on Moscow+4, Tyumen Oblast on Moscow+2 and the rest on Moscow
-# time.
-#
-# http://astrozet.net/files/Zones/DOC/RU/1980-925.txt
-# attributes the 1982 changes to the Act of the Council of Ministers
-# of the USSR No. 126 from 18.02.1982. 1980-925.txt also adds
-# Udmurtia to the list of affected territories and lists Khatangsky
-# district separately from Taymyr Autonomous Okrug. Probably erroneously.
-#
-# The affected territories are currently listed under Europe/Moscow,
-# Asia/Yekaterinburg and Asia/Krasnoyarsk.
-#
-# 12. Udmurtia
-# The fact that Udmurtia is depicted as a violator in the Nauka i
-# Zhizn article hints at Izhevsk being on different time from
-# Kuybyshev before 1981-10-01. Udmurtia is not mentioned in the 1989 act.
-# http://astrozet.net/files/Zones/DOC/RU/1980-925.txt
-# implies Udmurtia was on Moscow time after 1982-04-01.
-# Wikipedia implies Udmurtia being on Moscow+1 until 1991.
-#
-# ...
-#
-# All Russian zones are supposed to have by default a -1 change at
-# 1991-03-31 2:00 (cancellation of the decree time in the USSR) and a +1
-# change at 1992-01-19 2:00 (restoration of the decree time in Russia).
-#
-# There were some exceptions, though.
-# Wikipedia says newspapers listed Astrakhan, Saratov, Kirov, Volgograd,
-# Izhevsk, Grozny, Kazan and Samara as such exceptions for the 1992
-# change. (Different newspapers providing different lists. And some
-# lists found in the internet are quite wild.)
-#
-# And apparently some exceptions were reverted in the last moment.
-# http://www.kaliningradka.ru/site_pc/cherez/index.php?ELEMENT_ID=40091
-# says that Kaliningrad decided not to be an exception 2 days before the
-# 1991-03-31 switch and one person at
-# https://izhevsk.ru/forum_light_message/50/682597-m8369040.html
-# says he remembers that Samara opted out of the 1992-01-19 exception
-# 2 days before the switch.
-#
-#
-# From Paul Eggert (2016-03-18):
-# Given the above, we appear to be missing some Zone entries for the
-# chaotic early 1980s in Russia. It's not clear what these entries
-# should be. For now, sweep this under the rug and just document the
-# time in Moscow.
-
-# 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° 45' 29.70", 37° 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° 46' 18.70", 30° 19' 40.70") so 30° 19' 40.70" >
-# 2h01m18.7s = 2:01:19. LMT Moscow = LMT St.Petersburg + 30m 2:01:19 + 0:30 =
-# 2:31:19 ...
-#
-# From Paul Eggert (2014-07-08):
-# Milne does not list Moscow, but suggests that its time might be listed in
-# Résumés mensuels et annuels des observations météorologiques (1895).
-# Presumably this is OCLC 85825704, a journal published with parallel text in
-# Russian and French. This source has not been located; go with Karpinsky.
-
-Zone Europe/Moscow 2:30:17 - LMT 1880
- 2:30:17 - MMT 1916 Jul 3 # Moscow Mean Time
- 2:31:19 Russia %s 1919 Jul 1 0:00u
- 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 2014 Oct 26 2:00s
- 3:00 - MSK
-
-
-# From Paul Eggert (2016-12-06):
-# Europe/Simferopol covers Crimea.
-
-Zone Europe/Simferopol 2:16:24 - LMT 1880
- 2:16 - SMT 1924 May 2 # Simferopol Mean T
- 2:00 - EET 1930 Jun 21
- 3:00 - MSK 1941 Nov
- 1:00 C-Eur CE%sT 1944 Apr 13
- 3:00 Russia MSK/MSD 1990
- 3:00 - MSK 1990 Jul 1 2:00
- 2:00 - EET 1992
-# Central Crimea used Moscow time 1994/1997.
-#
-# From Paul Eggert (2006-03-22):
-# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
-# from Kiev to Moscow time sometime after the January 1994 elections.
-# Shanks (1999) says "date of change uncertain", but implies that it happened
-# sometime between the 1994 DST switches. Shanks & Pottenger simply say
-# 1994-09-25 03:00, but that can't be right. For now, guess it
-# changed in May.
- 2:00 E-Eur EE%sT 1994 May
-# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.
- 3:00 E-Eur MSK/MSD 1996 Mar 31 0: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
-# https://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 Paul Eggert (2016-03-18):
-# Europe/Astrakhan covers:
-# 30 RU-AST Astrakhan Oblast
-#
-# The 1989 transition is from USSR act No. 227 (1989-03-14).
-
-# From Alexander Krivenyshev (2016-01-12):
-# On February 10, 2016 Astrakhan Oblast got approval by the Federation
-# Council to change its time zone to UTC+4 (from current UTC+3 Moscow time)....
-# This Federal Law shall enter into force on 27 March 2016 at 02:00.
-# From Matt Johnson (2016-03-09):
-# http://publication.pravo.gov.ru/Document/View/0001201602150056
-
-Zone Europe/Astrakhan 3:12:12 - LMT 1924 May
- 3:00 - +03 1930 Jun 21
- 4:00 Russia +04/+05 1989 Mar 26 2:00s
- 3:00 Russia +03/+04 1991 Mar 31 2:00s
- 4:00 - +04 1992 Mar 29 2:00s
- 3:00 Russia +03/+04 2011 Mar 27 2:00s
- 4:00 - +04 2014 Oct 26 2:00s
- 3:00 - +03 2016 Mar 27 2:00s
- 4:00 - +04
-
-# From Paul Eggert (2016-11-11):
-# Europe/Volgograd covers:
-# 34 RU-VGG Volgograd Oblast
-# The 1988 transition is from USSR act No. 5 (1988-01-04).
-
-# From Alexander Fetisov (2018-09-20):
-# Volgograd region in southern Russia (Europe/Volgograd) change
-# timezone from UTC+3 to UTC+4 from 28oct2018.
-# http://sozd.parliament.gov.ru/bill/452878-7
-#
-# From Stepan Golosunov (2018-10-11):
-# The law has been published today on
-# http://publication.pravo.gov.ru/Document/View/0001201810110037
-
-Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3
- 3:00 - +03 1930 Jun 21
- 4:00 - +04 1961 Nov 11
- 4:00 Russia +04/+05 1988 Mar 27 2:00s
- 3:00 Russia +03/+04 1991 Mar 31 2:00s
- 4:00 - +04 1992 Mar 29 2:00s
- 3:00 Russia +03/+04 2011 Mar 27 2:00s
- 4:00 - +04 2014 Oct 26 2:00s
- 3:00 - +03 2018 Oct 28 2:00s
- 4:00 - +04
-
-# From Paul Eggert (2016-11-11):
-# Europe/Saratov covers:
-# 64 RU-SAR Saratov Oblast
-
-# From Yuri Konotopov (2016-11-11):
-# Dec 4, 2016 02:00 UTC+3.... Saratov Region's local time will be ... UTC+4.
-# From Stepan Golosunov (2016-11-11):
-# ... Byalokoz listed Saratov on 03:04:18.
-# From Stepan Golosunov (2016-11-22):
-# http://publication.pravo.gov.ru/Document/View/0001201611220031
-
-Zone Europe/Saratov 3:04:18 - LMT 1919 Jul 1 0:00u
- 3:00 - +03 1930 Jun 21
- 4:00 Russia +04/+05 1988 Mar 27 2:00s
- 3:00 Russia +03/+04 1991 Mar 31 2:00s
- 4:00 - +04 1992 Mar 29 2:00s
- 3:00 Russia +03/+04 2011 Mar 27 2:00s
- 4:00 - +04 2014 Oct 26 2:00s
- 3:00 - +03 2016 Dec 4 2:00s
- 4:00 - +04
-
-# From Paul Eggert (2016-03-18):
-# Europe/Kirov covers:
-# 43 RU-KIR Kirov Oblast
-# The 1989 transition is from USSR act No. 227 (1989-03-14).
-#
-Zone Europe/Kirov 3:18:48 - LMT 1919 Jul 1 0:00u
- 3:00 - +03 1930 Jun 21
- 4:00 Russia +04/+05 1989 Mar 26 2:00s
- 3:00 Russia +03/+04 1991 Mar 31 2:00s
- 4:00 - +04 1992 Mar 29 2:00s
- 3:00 Russia +03/+04 2011 Mar 27 2:00s
- 4:00 - +04 2014 Oct 26 2:00s
- 3:00 - +03
-
-# 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
-
-# From Paul Eggert (2016-03-18):
-# Byalokoz 1919 says Samara was 3:20:20.
-# The 1989 transition is from USSR act No. 227 (1989-03-14).
-
-Zone Europe/Samara 3:20:20 - LMT 1919 Jul 1 0:00u
- 3:00 - +03 1930 Jun 21
- 4:00 - +04 1935 Jan 27
- 4:00 Russia +04/+05 1989 Mar 26 2:00s
- 3:00 Russia +03/+04 1991 Mar 31 2:00s
- 2:00 Russia +02/+03 1991 Sep 29 2:00s
- 3:00 - +03 1991 Oct 20 3:00
- 4:00 Russia +04/+05 2010 Mar 28 2:00s
- 3:00 Russia +03/+04 2011 Mar 27 2:00s
- 4:00 - +04
-
-# From Paul Eggert (2016-03-18):
-# Europe/Ulyanovsk covers:
-# 73 RU-ULY Ulyanovsk Oblast
-
-# The 1989 transition is from USSR act No. 227 (1989-03-14).
-
-# From Alexander Krivenyshev (2016-02-17):
-# Ulyanovsk ... on their way to change time zones by March 27, 2016 at 2am.
-# Ulyanovsk Oblast ... from MSK to MSK+1 (UTC+3 to UTC+4) ...
-# 920582-6 ... 02/17/2016 The State Duma passed the bill in the first reading.
-# From Matt Johnson (2016-03-09):
-# http://publication.pravo.gov.ru/Document/View/0001201603090051
-
-Zone Europe/Ulyanovsk 3:13:36 - LMT 1919 Jul 1 0:00u
- 3:00 - +03 1930 Jun 21
- 4:00 Russia +04/+05 1989 Mar 26 2:00s
- 3:00 Russia +03/+04 1991 Mar 31 2:00s
- 2:00 Russia +02/+03 1992 Jan 19 2:00s
- 3:00 Russia +03/+04 2011 Mar 27 2:00s
- 4:00 - +04 2014 Oct 26 2:00s
- 3:00 - +03 2016 Mar 27 2:00s
- 4:00 - +04
-
-# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
-# Asia/Yekaterinburg covers...
-# 02 RU-BA Bashkortostan, Republic of
-# 90 RU-PER Perm Krai
-# 45 RU-KGN Kurgan Oblast
-# 56 RU-ORE Orenburg Oblast
-# 66 RU-SVE Sverdlovsk Oblast
-# 72 RU-TYU Tyumen Oblast
-# 74 RU-CHE Chelyabinsk Oblast
-# 86 RU-KHM Khanty-Mansi Autonomous Okrug - Yugra
-# 89 RU-YAN Yamalo-Nenets Autonomous Okrug
-#
-# Note: Effective 2005-12-01, (59) Perm Oblast and (81) Komi-Permyak
-# Autonomous Okrug merged to form (90, RU-PER) Perm Krai.
-
-# Milne says Yekaterinburg was 4:02:32.9; round to nearest.
-# Byalokoz 1919 says its provincial time was based on Perm, at 3:45:05.
-# Assume it switched on 1916-07-03, the time of the new standard.
-# The 1919 and 1930 transitions are from Shanks.
-
-Zone Asia/Yekaterinburg 4:02:33 - LMT 1916 Jul 3
- 3:45:05 - PMT 1919 Jul 15 4:00
- 4:00 - +04 1930 Jun 21
- 5:00 Russia +05/+06 1991 Mar 31 2:00s
- 4:00 Russia +04/+05 1992 Jan 19 2:00s
- 5:00 Russia +05/+06 2011 Mar 27 2:00s
- 6:00 - +06 2014 Oct 26 2:00s
- 5:00 - +05
-
-
-# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
-# Asia/Omsk covers...
-# 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 - +05 1930 Jun 21
- 6:00 Russia +06/+07 1991 Mar 31 2:00s
- 5:00 Russia +05/+06 1992 Jan 19 2:00s
- 6:00 Russia +06/+07 2011 Mar 27 2:00s
- 7:00 - +07 2014 Oct 26 2:00s
- 6:00 - +06
-
-# From Paul Eggert (2016-02-22):
-# Asia/Barnaul covers:
-# 04 RU-AL Altai Republic
-# 22 RU-ALT Altai Krai
-
-# Data before 1991 are from Shanks & Pottenger.
-
-# From Stepan Golosunov (2016-03-07):
-# Letter of Bank of Russia from 1995-05-25
-# http://www.bestpravo.ru/rossijskoje/lj-akty/y3a.htm
-# suggests that Altai Republic transitioned to Moscow+3 on
-# 1995-05-28.
-#
-# https://regnum.ru/news/society/1957270.html
-# has some historical data for Altai Krai:
-# before 1957: west part on UT+6, east on UT+7
-# after 1957: UT+7
-# since 1995: UT+6
-# http://barnaul.rusplt.ru/index/pochemu_altajskij_kraj_okazalsja_v_neprivychnom_chasovom_pojase-17648.html
-# confirms that and provides more details including 1995-05-28 transition date.
-
-# From Alexander Krivenyshev (2016-02-17):
-# Altai Krai and Altai Republic on their way to change time zones
-# by March 27, 2016 at 2am....
-# Altai Republic / Gorno-Altaysk MSK+3 to MSK+4 (UTC+6 to UTC+7) ...
-# Altai Krai / Barnaul MSK+3 to MSK+4 (UTC+6 to UTC+7)
-# From Matt Johnson (2016-03-09):
-# http://publication.pravo.gov.ru/Document/View/0001201603090043
-# http://publication.pravo.gov.ru/Document/View/0001201603090038
-
-Zone Asia/Barnaul 5:35:00 - LMT 1919 Dec 10
- 6:00 - +06 1930 Jun 21
- 7:00 Russia +07/+08 1991 Mar 31 2:00s
- 6:00 Russia +06/+07 1992 Jan 19 2:00s
- 7:00 Russia +07/+08 1995 May 28
- 6:00 Russia +06/+07 2011 Mar 27 2:00s
- 7:00 - +07 2014 Oct 26 2:00s
- 6:00 - +06 2016 Mar 27 2:00s
- 7:00 - +07
-
-# From Paul Eggert (2016-03-18):
-# Asia/Novosibirsk covers:
-# 54 RU-NVS Novosibirsk Oblast
-
-# From Stepan Golosunov (2016-05-30):
-# http://asozd2.duma.gov.ru/main.nsf/(Spravka)?OpenAgent&RN=1085784-6
-# moves Novosibirsk oblast from UTC+6 to UTC+7.
-# From Stepan Golosunov (2016-07-04):
-# The law was signed yesterday and published today on
-# http://publication.pravo.gov.ru/Document/View/0001201607040064
-
-Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
- 6:00 - +06 1930 Jun 21
- 7:00 Russia +07/+08 1991 Mar 31 2:00s
- 6:00 Russia +06/+07 1992 Jan 19 2:00s
- 7:00 Russia +07/+08 1993 May 23 # say Shanks & P.
- 6:00 Russia +06/+07 2011 Mar 27 2:00s
- 7:00 - +07 2014 Oct 26 2:00s
- 6:00 - +06 2016 Jul 24 2:00s
- 7:00 - +07
-
-# From Paul Eggert (2016-03-18):
-# Asia/Tomsk covers:
-# 70 RU-TOM Tomsk Oblast
-
-# From Stepan Golosunov (2016-03-24):
-# Byalokoz listed Tomsk at 5:39:51.
-
-# From Stanislaw A. Kuzikowski (1994-06-29):
-# Tomsk is still 4 hours ahead of Moscow.
-
-# From Stepan Golosunov (2016-03-19):
-# http://pravo.gov.ru/proxy/ips/?docbody=&nd=102075743
-# (fifth time belt being UTC+5+1(decree time)
-# / UTC+5+1(decree time)+1(summer time)) ...
-# Note that time belts (numbered from 2 (Moscow) to 12 according to their
-# GMT/UTC offset and having too many exceptions like regions formally
-# belonging to one belt but using time from another) were replaced
-# with time zones in 2011 with different numbering (there was a
-# 2-hour gap between second and third zones in 2011-2014).
-
-# From Stepan Golosunov (2016-04-12):
-# http://asozd2.duma.gov.ru/main.nsf/(SpravkaNew)?OpenAgent&RN=1006865-6
-# This bill was approved in the first reading today. It moves Tomsk oblast
-# from UTC+6 to UTC+7 and is supposed to come into effect on 2016-05-29 at
-# 2:00. The bill needs to be approved in the second and the third readings by
-# the State Duma, approved by the Federation Council, signed by the President
-# and published to become a law. Minor changes in the text are to be expected
-# before the second reading (references need to be updated to account for the
-# recent changes).
-#
-# Judging by the ultra-short one-day amendments period, recent similar laws,
-# the State Duma schedule and the Federation Council schedule
-# http://www.duma.gov.ru/legislative/planning/day-shedule/por_vesna_2016/
-# http://council.gov.ru/activity/meetings/schedule/63303
-# I speculate that the final text of the bill will be proposed tomorrow, the
-# bill will be approved in the second and the third readings on Friday,
-# approved by the Federation Council on 2016-04-20, signed by the President and
-# published as a law around 2016-04-26.
-
-# From Matt Johnson (2016-04-26):
-# http://publication.pravo.gov.ru/Document/View/0001201604260048
-
-Zone Asia/Tomsk 5:39:51 - LMT 1919 Dec 22
- 6:00 - +06 1930 Jun 21
- 7:00 Russia +07/+08 1991 Mar 31 2:00s
- 6:00 Russia +06/+07 1992 Jan 19 2:00s
- 7:00 Russia +07/+08 2002 May 1 3:00
- 6:00 Russia +06/+07 2011 Mar 27 2:00s
- 7:00 - +07 2014 Oct 26 2:00s
- 6:00 - +06 2016 May 29 2:00s
- 7:00 - +07
-
-
-# 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
-# March 28, 2010:
-# from current Russia Zone 6 - Krasnoyarsk Time Zone (KRA) UTC +0700
-# to Russia Zone 5 - Novosibirsk Time Zone (NOV) UTC +0600
-#
-# This is according to Government of Russia decree No. 740, on September
-# 14, 2009 "Application in the territory of the Kemerovo region the Fifth
-# 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.
-
-# 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 - LMT 1924 May 1
- 6:00 - +06 1930 Jun 21
- 7:00 Russia +07/+08 1991 Mar 31 2:00s
- 6:00 Russia +06/+07 1992 Jan 19 2:00s
- 7:00 Russia +07/+08 2010 Mar 28 2:00s
- 6:00 Russia +06/+07 2011 Mar 27 2:00s
- 7:00 - +07
-
-# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
-# Asia/Krasnoyarsk covers...
-# 17 RU-TY Tuva Republic
-# 19 RU-KK Khakassia, Republic of
-# 24 RU-KYA Krasnoyarsk Krai
-#
-# Note: Effective 2007-01-01, (88) Evenk Autonomous Okrug and (84) Taymyr
-# Autonomous Okrug were merged into (24, RU-KYA) Krasnoyarsk Krai.
-
-# Byalokoz 1919 says Krasnoyarsk was 6:11:26.
-
-Zone Asia/Krasnoyarsk 6:11:26 - LMT 1920 Jan 6
- 6:00 - +06 1930 Jun 21
- 7:00 Russia +07/+08 1991 Mar 31 2:00s
- 6:00 Russia +06/+07 1992 Jan 19 2:00s
- 7:00 Russia +07/+08 2011 Mar 27 2:00s
- 8:00 - +08 2014 Oct 26 2:00s
- 7:00 - +07
-
-
-# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
-# Asia/Irkutsk covers...
-# 03 RU-BU Buryatia, Republic of
-# 38 RU-IRK Irkutsk Oblast
-#
-# Note: Effective 2008-01-01, (85) Ust-Orda Buryat Autonomous Okrug was
-# merged into (38, RU-IRK) Irkutsk Oblast.
-
-# Milne 1899 says Irkutsk was 6:57:15.
-# Byalokoz 1919 says Irkutsk was 6:57:05.
-# Go with Byalokoz.
-
-Zone Asia/Irkutsk 6:57:05 - LMT 1880
- 6:57:05 - IMT 1920 Jan 25 # Irkutsk Mean Time
- 7:00 - +07 1930 Jun 21
- 8:00 Russia +08/+09 1991 Mar 31 2:00s
- 7:00 Russia +07/+08 1992 Jan 19 2:00s
- 8:00 Russia +08/+09 2011 Mar 27 2:00s
- 9:00 - +09 2014 Oct 26 2:00s
- 8:00 - +08
-
-
-# From Tim Parenti (2014-07-06):
-# Asia/Chita covers...
-# 92 RU-ZAB Zabaykalsky Krai
-#
-# Note: Effective 2008-03-01, (75) Chita Oblast and (80) Agin-Buryat
-# Autonomous Okrug merged to form (92, RU-ZAB) Zabaykalsky Krai.
-
-# From Alexander Krivenyshev (2016-01-02):
-# [The] time zone in the Trans-Baikal Territory (Zabaykalsky Krai) -
-# Asia/Chita [is changing] from UTC+8 to UTC+9. Effective date will
-# be March 27, 2016 at 2:00am....
-# http://publication.pravo.gov.ru/Document/View/0001201512300107
-
-Zone Asia/Chita 7:33:52 - LMT 1919 Dec 15
- 8:00 - +08 1930 Jun 21
- 9:00 Russia +09/+10 1991 Mar 31 2:00s
- 8:00 Russia +08/+09 1992 Jan 19 2:00s
- 9:00 Russia +09/+10 2011 Mar 27 2:00s
- 10:00 - +10 2014 Oct 26 2:00s
- 8:00 - +08 2016 Mar 27 2:00
- 9:00 - +09
-
-
-# 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 - +08 1930 Jun 21
- 9:00 Russia +09/+10 1991 Mar 31 2:00s
- 8:00 Russia +08/+09 1992 Jan 19 2:00s
- 9:00 Russia +09/+10 2011 Mar 27 2:00s
- 10:00 - +10 2014 Oct 26 2:00s
- 9:00 - +09
-
-
-# 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 - +09 1930 Jun 21
- 10:00 Russia +10/+11 1991 Mar 31 2:00s
- 9:00 Russia +09/+10 1992 Jan 19 2:00s
- 10:00 Russia +10/+11 2011 Mar 27 2:00s
- 11:00 - +11 2014 Oct 26 2:00s
- 10:00 - +10
-
-
-# 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 - +08 1930 Jun 21
- 9:00 Russia +09/+10 1991 Mar 31 2:00s
- 8:00 Russia +08/+09 1992 Jan 19 2:00s
- 9:00 Russia +09/+10 2004
- 10:00 Russia +10/+11 2011 Mar 27 2:00s
- 11:00 - +11 2011 Sep 13 0:00s # Decree 725?
- 10:00 - +10 2014 Oct 26 2:00s
- 9:00 - +09
-
-
-# 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)
-
-# From Matt Johnson (2016-02-22):
-# Asia/Sakhalin is moving (in entirety) from UTC+10 to UTC+11 ...
-# (2016-03-09):
-# http://publication.pravo.gov.ru/Document/View/0001201603090044
-
-# 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 - +09 1945 Aug 25
- 11:00 Russia +11/+12 1991 Mar 31 2:00s # Sakhalin T
- 10:00 Russia +10/+11 1992 Jan 19 2:00s
- 11:00 Russia +11/+12 1997 Mar lastSun 2:00s
- 10:00 Russia +10/+11 2011 Mar 27 2:00s
- 11:00 - +11 2014 Oct 26 2:00s
- 10:00 - +10 2016 Mar 27 2:00s
- 11:00 - +11
-
-
-# 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 Alexander Krivenyshev (2016-03-27):
-# ... draft bill 948300-6 to change its time zone from UTC+10 to UTC+11 ...
-# will take ... effect ... on April 24, 2016 at 2 o'clock
-#
-# From Matt Johnson (2016-04-05):
-# ... signed by the President today ...
-# http://publication.pravo.gov.ru/Document/View/0001201604050038
-
-Zone Asia/Magadan 10:03:12 - LMT 1924 May 2
- 10:00 - +10 1930 Jun 21 # Magadan Time
- 11:00 Russia +11/+12 1991 Mar 31 2:00s
- 10:00 Russia +10/+11 1992 Jan 19 2:00s
- 11:00 Russia +11/+12 2011 Mar 27 2:00s
- 12:00 - +12 2014 Oct 26 2:00s
- 10:00 - +10 2016 Apr 24 2:00s
- 11:00 - +11
-
-
-# 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!)
-# https://en.wikipedia.org/w/?title=Srednekolymsky_District&oldid=603435276
-# https://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.
-
-Zone Asia/Srednekolymsk 10:14:52 - LMT 1924 May 2
- 10:00 - +10 1930 Jun 21
- 11:00 Russia +11/+12 1991 Mar 31 2:00s
- 10:00 Russia +10/+11 1992 Jan 19 2:00s
- 11:00 Russia +11/+12 2011 Mar 27 2:00s
- 12:00 - +12 2014 Oct 26 2:00s
- 11:00 - +11
-
-
-# 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
-# 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 - +08 1930 Jun 21
- 9:00 Russia +09/+10 1981 Apr 1
- 11:00 Russia +11/+12 1991 Mar 31 2:00s
- 10:00 Russia +10/+11 1992 Jan 19 2:00s
- 11:00 Russia +11/+12 2011 Mar 27 2:00s
- 12:00 - +12 2011 Sep 13 0:00s # Decree 725?
- 11:00 - +11 2014 Oct 26 2:00s
- 10:00 - +10
-
-
-# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
-# Asia/Kamchatka covers...
-# 91 RU-KAM Kamchatka Krai
-#
-# 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 - +11 1930 Jun 21
- 12:00 Russia +12/+13 1991 Mar 31 2:00s
- 11:00 Russia +11/+12 1992 Jan 19 2:00s
- 12:00 Russia +12/+13 2010 Mar 28 2:00s
- 11:00 Russia +11/+12 2011 Mar 27 2:00s
- 12:00 - +12
-
-
-# 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 - +12 1930 Jun 21
- 13:00 Russia +13/+14 1982 Apr 1 0:00s
- 12:00 Russia +12/+13 1991 Mar 31 2:00s
- 11:00 Russia +11/+12 1992 Jan 19 2:00s
- 12:00 Russia +12/+13 2010 Mar 28 2:00s
- 11:00 Russia +11/+12 2011 Mar 27 2:00s
- 12:00 - +12
-
-
-# San Marino
-# See Europe/Rome.
-
-# Serbia
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-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 1:00 CEST 1945 Sep 16 2:00s
-# 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 KoĆŸelj.
- 1:00 - CET 1982 Nov 27
- 1:00 EU CE%sT
-Link Europe/Belgrade Europe/Ljubljana # Slovenia
-Link Europe/Belgrade Europe/Podgorica # Montenegro
-Link Europe/Belgrade Europe/Sarajevo # Bosnia and Herzegovina
-Link Europe/Belgrade Europe/Skopje # North Macedonia
-Link Europe/Belgrade Europe/Zagreb # Croatia
-
-# Slovakia
-Link Europe/Prague Europe/Bratislava
-
-# Slovenia
-# See Europe/Belgrade.
-
-# Spain
-#
-# From Paul Eggert (2016-12-14):
-#
-# The source for Europe/Madrid before 2013 is:
-# Planesas P. La hora oficial en España y sus cambios.
-# Anuario del Observatorio AstronĂłmico de Madrid (2013, in Spanish).
-# http://astronomia.ign.es/rknowsys-theme/images/webAstro/paginas/documentos/Anuario/lahoraoficialenespana.pdf
-# As this source says that historical time in the Canaries is obscure,
-# and it does not discuss Ceuta, stick with Shanks for now for that data.
-#
-# In the 1918 and 1919 fallback transitions in Spain, the clock for
-# the hour-longer day officially kept going after midnight, so that
-# the repeated instances of that day's 00:00 hour were 24 hours apart,
-# with a fallback transition from the second occurrence of 00:59... to
-# the next day's 00:00. Our data format cannot represent this
-# directly, and instead repeats the first hour of the next day, with a
-# fallback transition from the next day's 00:59... to 00:00.
-
-# From Michael Deckers (2016-12-15):
-# The Royal Decree of 1900-06-26 quoted by Planesas, online at
-# https://www.boe.es/datos/pdfs/BOE//1900/209/A00383-00384.pdf
-# says in its article 5 (my translation):
-# These dispositions will enter into force beginning with the
-# instant at which, according to the time indicated in article 1,
-# the 1st day of January of 1901 will begin.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Spain 1918 only - Apr 15 23:00 1:00 S
-Rule Spain 1918 1919 - Oct 6 24:00s 0 -
-Rule Spain 1919 only - Apr 6 23:00 1:00 S
-Rule Spain 1924 only - Apr 16 23:00 1:00 S
-Rule Spain 1924 only - Oct 4 24:00s 0 -
-Rule Spain 1926 only - Apr 17 23:00 1:00 S
-Rule Spain 1926 1929 - Oct Sat>=1 24:00s 0 -
-Rule Spain 1927 only - Apr 9 23:00 1:00 S
-Rule Spain 1928 only - Apr 15 0:00 1:00 S
-Rule Spain 1929 only - Apr 20 23:00 1:00 S
-# Republican Spain during the civil war; it controlled Madrid until 1939-03-28.
-Rule Spain 1937 only - Jun 16 23:00 1:00 S
-Rule Spain 1937 only - Oct 2 24:00s 0 -
-Rule Spain 1938 only - Apr 2 23:00 1:00 S
-Rule Spain 1938 only - Apr 30 23:00 2:00 M
-Rule Spain 1938 only - Oct 2 24:00 1:00 S
-# The following rules are for unified Spain again.
-#
-# Planesas does not say what happened in Madrid between its fall on
-# 1939-03-28 and the Nationalist spring-forward transition on
-# 1939-04-15. For lack of better info, assume Madrid's clocks did not
-# change during that period.
-#
-# The first rule is commented out, as it is redundant for Republican Spain.
-#Rule Spain 1939 only - Apr 15 23:00 1:00 S
-Rule Spain 1939 only - Oct 7 24:00s 0 -
-Rule Spain 1942 only - May 2 23:00 1:00 S
-Rule Spain 1942 only - Sep 1 1:00 0 -
-Rule Spain 1943 1946 - Apr Sat>=13 23:00 1:00 S
-Rule Spain 1943 1944 - Oct Sun>=1 1:00 0 -
-Rule Spain 1945 1946 - Sep lastSun 1:00 0 -
-Rule Spain 1949 only - Apr 30 23:00 1:00 S
-Rule Spain 1949 only - Oct 2 1:00 0 -
-Rule Spain 1974 1975 - Apr Sat>=12 23:00 1:00 S
-Rule Spain 1974 1975 - Oct Sun>=1 1:00 0 -
-Rule Spain 1976 only - Mar 27 23:00 1:00 S
-Rule Spain 1976 1977 - Sep lastSun 1:00 0 -
-Rule Spain 1977 only - Apr 2 23:00 1:00 S
-Rule Spain 1978 only - Apr 2 2:00s 1:00 S
-Rule Spain 1978 only - Oct 1 2:00s 0 -
-# Nationalist Spain during the civil war
-#Rule NatSpain 1937 only - May 22 23:00 1:00 S
-#Rule NatSpain 1937 1938 - Oct Sat>=1 24:00s 0 -
-#Rule NatSpain 1938 only - Mar 26 23:00 1:00 S
-# The following rules are copied from Morocco from 1967 through 1978,
-# except with "S" letters.
-Rule SpainAfrica 1967 only - Jun 3 12:00 1:00 S
-Rule SpainAfrica 1967 only - Oct 1 0:00 0 -
-Rule SpainAfrica 1974 only - Jun 24 0:00 1:00 S
-Rule SpainAfrica 1974 only - Sep 1 0:00 0 -
-Rule SpainAfrica 1976 1977 - May 1 0:00 1:00 S
-Rule SpainAfrica 1976 only - Aug 1 0:00 0 -
-Rule SpainAfrica 1977 only - Sep 28 0:00 0 -
-Rule SpainAfrica 1978 only - Jun 1 0:00 1:00 S
-Rule SpainAfrica 1978 only - Aug 4 0:00 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Madrid -0:14:44 - LMT 1900 Dec 31 23:45:16
- 0:00 Spain WE%sT 1940 Mar 16 23:00
- 1:00 Spain CE%sT 1979
- 1:00 EU CE%sT
-Zone Africa/Ceuta -0:21:16 - LMT 1900 Dec 31 23:38:44
- 0:00 - WET 1918 May 6 23:00
- 0:00 1:00 WEST 1918 Oct 7 23:00
- 0:00 - WET 1924
- 0:00 Spain WE%sT 1929
- 0:00 - WET 1967 # Help zishrink.awk.
- 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 - -01 1946 Sep 30 1:00
- 0:00 - WET 1980 Apr 6 0:00s
- 0:00 1:00 WEST 1980 Sep 28 1:00u
- 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.
-
-# Sweden
-
-# From Ivan Nilsson (2001-04-13), superseding Shanks & Pottenger:
-#
-# 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
-# meridian of the Observatory of Stockholm". The law is dated 1878-05-31.
-#
-# The observatory at that time had the meridian 18° 03' 30"
-# eastern longitude = 01:12:14 in time. Less 12 minutes gives the
-# national standard time as 01:00:14 ahead of GMT....
-#
-# About the beginning of CET in Sweden. The lawtext ("Svensk
-# 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
-# from the meridian of the Observatory of Stockholm". The law is dated
-# 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 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".
-#
-# The laws regulating [DST] are available on the site of the Swedish
-# Parliament beginning with 1985 - the laws regulating 1980/1984 are
-# not available on the site (to my knowledge they are only available
-# in Swedish): <http://www.riksdagen.se/english/work/sfst.asp> (type
-# "sommartid" without the quotes in the field "Fritext" and then click
-# the Sök-button).
-#
-# (2001-05-13):
-#
-# I have now found a newspaper stating that at 1916-10-01 01:00
-# summertime the church-clocks etc were set back one hour to show
-# 1916-10-01 00:00 standard time. The article also reports that some
-# people thought the switch to standard time would take place already
-# at 1916-10-01 00:00 summer time, but they had to wait for another
-# hour before the event took place.
-#
-# Source: The newspaper "Dagens Nyheter", 1916-10-01, page 7 upper left.
-
-# 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 - CET 1916 May 14 23:00
- 1:00 1:00 CEST 1916 Oct 1 1:00
- 1:00 - CET 1980
- 1:00 EU CE%sT
-
-# Switzerland
-# 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 ....
-# 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
-# Rule Swiss 1940 only - Dec 31 0:00 0 -
-# From Shanks & Pottenger:
-# Rule Swiss 1941 1942 - May Sun>=1 2:00 1:00 S
-# Rule Swiss 1941 1942 - Oct Sun>=1 0:00 0 -
-
-# From Alois Treindl (2008-12-17):
-# I have researched the DST usage in Switzerland during the 1940ies.
-#
-# As I wrote in an earlier message, I suspected the current tzdata values
-# to be wrong. This is now verified.
-#
-# I have found copies of the original ruling by the Swiss Federal
-# 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
-# DST ended on Monday 6 Oct 1941, 2:00 am by shifting the clocks to 1:00 am.
-#
-# DST began on Monday, 4 May 1942 at 01:00 am
-# DST ended on Monday, 5 Oct 1942 at 02:00 am
-#
-# There was no DST in 1940, I have checked the law collection carefully.
-# It is also indicated by the fact that the 1942 entry in the law
-# collection points back to 1941 as a reference, but no reference to any
-# other years are made.
-#
-# Newspaper articles I have read in the archives on 6 May 1941 reported
-# about the introduction of DST (Sommerzeit in German) during the previous
-# 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, 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.
-#
-# The tzdata rules for Switzerland must be changed to:
-# Rule Swiss 1941 1942 - May Mon>=1 1:00 1:00 S
-# Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 -
-#
-# The 1940 rules must be deleted.
-#
-# 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 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
-# https://www.admin.ch/opc/de/classified-compilation/20071096/index.html
-# ... the meridian for Bern mean time ... is 7° 26' 22.50".
-# Expressed in time, it is 0h29m45.5s.
-
-# From Pierre-Yves Berger (2013-09-11):
-# 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.
-
-# From Paul Eggert (2013-09-11):
-# Round BMT to the nearest even second, 0:29:46.
-#
-# 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. 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 ĂŒ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
-# offices in Switzerland from Geneva to St. Gallen and Basel to Chiasso"
-# (Google translation). For now, model this transition as occurring on
-# 1853-07-16, though it probably occurred at some other date in Zurich, and
-# legal civil time probably changed at still some other transition date.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Swiss 1941 1942 - May Mon>=1 1:00 1:00 S
-Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 -
-# 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
- 1:00 Swiss CE%sT 1981
- 1:00 EU CE%sT
-
-# Turkey
-
-# From Kıvanç Yazan (2016-09-25):
-# 1) For 1986-2006, DST started at 01:00 local and ended at 02:00 local, with
-# no exceptions.
-# 2) 1994's lastSun was overridden with Mar 20 ...
-# Here are official papers:
-# http://www.resmigazete.gov.tr/arsiv/19032.pdf - page 2 for 1986
-# http://www.resmigazete.gov.tr/arsiv/19400.pdf - page 4 for 1987
-# http://www.resmigazete.gov.tr/arsiv/19752.pdf - page 15 for 1988
-# http://www.resmigazete.gov.tr/arsiv/20102.pdf - page 6 for 1989
-# http://www.resmigazete.gov.tr/arsiv/20464.pdf - page 1 for 1990 - 1992
-# http://www.resmigazete.gov.tr/arsiv/21531.pdf - page 15 for 1993 - 1995
-# http://www.resmigazete.gov.tr/arsiv/21879.pdf - page 1 for overriding 1994
-# http://www.resmigazete.gov.tr/arsiv/22588.pdf - page 1 for 1996, 1997
-# http://www.resmigazete.gov.tr/arsiv/23286.pdf - page 10 for 1998 - 2000
-# http://www.resmigazete.gov.tr/eskiler/2001/03/20010324.htm#2 - for 2001
-# http://www.resmigazete.gov.tr/eskiler/2002/03/20020316.htm#2 - for 2002-2006
-# From Paul Eggert (2016-09-25):
-# Prefer the above sources to Shanks & Pottenger for timestamps after 1985.
-
-# From Steffen Thorsen (2007-03-09):
-# Starting 2007 though, it seems that they are adopting EU's 1:00 UTC
-# start/end time, according to the following page (2007-03-07):
-# http://www.ntvmsnbc.com/news/402029.asp
-# The official document is located here - it is in Turkish...:
-# http://rega.basbakanlik.gov.tr/eskiler/2007/03/20070307-7.htm
-# I was able to locate the following seemingly official document
-# (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):
-# 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.
-# https://www.worldbulletin.net/?aType=haber&ArticleID=70872
-# Turkish:
-# https://www.hurriyet.com.tr/yaz-saati-uygulamasi-bir-gun-ileri-alindi-17230464
-
-# From Faruk Pasin (2014-02-14):
-# The DST for Turkey has been changed for this year because of the
-# 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 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.
-
-# From Fatih (2015-09-29):
-# It's officially announced now by the Ministry of Energy.
-# Turkey delays winter time to 8th of November 04:00
-# http://www.aa.com.tr/tr/turkiye/yaz-saati-uygulamasi-8-kasimda-sona-erecek/362217
-#
-# From BBC News (2015-10-25):
-# Confused Turks are asking "what's the time?" after automatic clocks defied a
-# government decision ... "For the next two weeks #Turkey is on EEST... Erdogan
-# Engineered Standard Time," said Twitter user @aysekarahasan.
-# http://www.bbc.com/news/world-europe-34631326
-
-# From Burak AYDIN (2016-09-08):
-# Turkey will stay in Daylight Saving Time even in winter....
-# http://www.resmigazete.gov.tr/eskiler/2016/09/20160908-2.pdf
-#
-# From Paul Eggert (2016-09-07):
-# The change is permanent, so this is the new standard time in Turkey.
-# It takes effect today, which is not much notice.
-
-# From Kıvanç Yazan (2017-10-28):
-# Turkey will go back to Daylight Saving Time starting 2018-10.
-# http://www.resmigazete.gov.tr/eskiler/2017/10/20171028-5.pdf
-#
-# From Even Scharning (2017-11-08):
-# ... today it was announced that the DST will become "continuous":
-# http://www.hurriyet.com.tr/son-dakika-yaz-saati-uygulamasi-surekli-hale-geldi-40637482
-# From Paul Eggert (2017-11-08):
-# Although Google Translate misfires on that source, it looks like
-# Turkey reversed last month's decision, and so will stay at +03.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Turkey 1916 only - May 1 0:00 1:00 S
-Rule Turkey 1916 only - Oct 1 0:00 0 -
-Rule Turkey 1920 only - Mar 28 0:00 1:00 S
-Rule Turkey 1920 only - Oct 25 0:00 0 -
-Rule Turkey 1921 only - Apr 3 0:00 1:00 S
-Rule Turkey 1921 only - Oct 3 0:00 0 -
-Rule Turkey 1922 only - Mar 26 0:00 1:00 S
-Rule Turkey 1922 only - Oct 8 0:00 0 -
-# Whitman gives 1923 Apr 28 - Sep 16 and no DST in 1924-1925;
-# go with Shanks & Pottenger.
-Rule Turkey 1924 only - May 13 0:00 1:00 S
-Rule Turkey 1924 1925 - Oct 1 0:00 0 -
-Rule Turkey 1925 only - May 1 0:00 1:00 S
-Rule Turkey 1940 only - Jun 30 0:00 1:00 S
-Rule Turkey 1940 only - Oct 5 0:00 0 -
-Rule Turkey 1940 only - Dec 1 0:00 1:00 S
-Rule Turkey 1941 only - Sep 21 0:00 0 -
-Rule Turkey 1942 only - Apr 1 0:00 1:00 S
-# Whitman omits the next two transition and gives 1945 Oct 1;
-# go with Shanks & Pottenger.
-Rule Turkey 1942 only - Nov 1 0:00 0 -
-Rule Turkey 1945 only - Apr 2 0:00 1:00 S
-Rule Turkey 1945 only - Oct 8 0:00 0 -
-Rule Turkey 1946 only - Jun 1 0:00 1:00 S
-Rule Turkey 1946 only - Oct 1 0:00 0 -
-Rule Turkey 1947 1948 - Apr Sun>=16 0:00 1:00 S
-Rule Turkey 1947 1950 - Oct Sun>=2 0:00 0 -
-Rule Turkey 1949 only - Apr 10 0:00 1:00 S
-Rule Turkey 1950 only - Apr 19 0:00 1:00 S
-Rule Turkey 1951 only - Apr 22 0:00 1:00 S
-Rule Turkey 1951 only - Oct 8 0:00 0 -
-Rule Turkey 1962 only - Jul 15 0:00 1:00 S
-Rule Turkey 1962 only - Oct 8 0:00 0 -
-Rule Turkey 1964 only - May 15 0:00 1:00 S
-Rule Turkey 1964 only - Oct 1 0:00 0 -
-Rule Turkey 1970 1972 - May Sun>=2 0:00 1:00 S
-Rule Turkey 1970 1972 - Oct Sun>=2 0:00 0 -
-Rule Turkey 1973 only - Jun 3 1:00 1:00 S
-Rule Turkey 1973 only - Nov 4 3:00 0 -
-Rule Turkey 1974 only - Mar 31 2:00 1:00 S
-Rule Turkey 1974 only - Nov 3 5:00 0 -
-Rule Turkey 1975 only - Mar 30 0:00 1:00 S
-Rule Turkey 1975 1976 - Oct lastSun 0:00 0 -
-Rule Turkey 1976 only - Jun 1 0:00 1:00 S
-Rule Turkey 1977 1978 - Apr Sun>=1 0:00 1:00 S
-Rule Turkey 1977 only - Oct 16 0:00 0 -
-Rule Turkey 1979 1980 - Apr Sun>=1 3:00 1:00 S
-Rule Turkey 1979 1982 - Oct Mon>=11 0:00 0 -
-Rule Turkey 1981 1982 - Mar lastSun 3:00 1:00 S
-Rule Turkey 1983 only - Jul 31 0:00 1:00 S
-Rule Turkey 1983 only - Oct 2 0:00 0 -
-Rule Turkey 1985 only - Apr 20 0:00 1:00 S
-Rule Turkey 1985 only - Sep 28 0:00 0 -
-Rule Turkey 1986 1993 - Mar lastSun 1:00s 1:00 S
-Rule Turkey 1986 1995 - Sep lastSun 1:00s 0 -
-Rule Turkey 1994 only - Mar 20 1:00s 1:00 S
-Rule Turkey 1995 2006 - Mar lastSun 1:00s 1:00 S
-Rule Turkey 1996 2006 - Oct lastSun 1:00s 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Istanbul 1:55:52 - LMT 1880
- 1:56:56 - IMT 1910 Oct # Istanbul Mean Time?
- 2:00 Turkey EE%sT 1978 Oct 15
- 3:00 Turkey +03/+04 1985 Apr 20
- 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 2015 Oct 25 1:00u
- 2:00 1:00 EEST 2015 Nov 8 1:00u
- 2:00 EU EE%sT 2016 Sep 7
- 3:00 - +03
-Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
-
-# Ukraine
-#
-# From Igor Karpov, who works for the Ukrainian Ministry of Justice,
-# via Garrett Wollman (2003-01-27):
-# BTW, I've found the official document on this matter. It's government
-# regulations No. 509, May 13, 1996. In my poor translation it says:
-# "Time in Ukraine is set to second timezone (Kiev time). Each last Sunday
-# of March at 3am the time is changing to 4am and each last Sunday of
-# October the time at 4am is changing to 3am"
-
-# From Alexander Krivenyshev (2011-09-20):
-# On September 20, 2011 the deputies of the Verkhovna Rada agreed to
-# abolish the transfer clock to winter time.
-#
-# Bill No. 8330 of MP from the Party of Regions Oleg Nadoshi got
-# approval from 266 deputies.
-#
-# 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)
-# http://www.segodnya.ua/news/14290482.html
-#
-# Deputies cancelled the winter time (in Russian)
-# https://www.pravda.com.ua/rus/news/2011/09/20/6600616/
-#
-# From Philip Pizzey (2011-10-18):
-# Today my Ukrainian colleagues have informed me that the
-# Ukrainian parliament have decided that they will go to winter
-# time this year after all.
-#
-# From Udo Schwedt (2011-10-18):
-# As far as I understand, the recent change to the Ukrainian time zone
-# (Europe/Kiev) to introduce permanent daylight saving time (similar
-# to Russia) was reverted today:
-# http://portal.rada.gov.ua/rada/control/en/publish/article/info_left?art_id=287324&cat_id=105995
-#
-# Also reported by Alexander Bokovoy (2011-10-18) who also noted:
-# The law documents themselves are at
-# http://w1.c1.rada.gov.ua/pls/zweb_n/webproc4_1?id=&pf3511=41484
-
-# From Vladimir in Moscow via Alois Treindl re Kiev time 1991/2 (2014-02-28):
-# First in Ukraine they changed Time zone from UTC+3 to UTC+2 with DST:
-# 03 25 1990 02:00 -03.00 1 Time Zone 3 with DST
-# 07 01 1990 02:00 -02.00 1 Time Zone 2 with DST
-# * Ukrainian Government's Resolution of 18.06.1990, No. 134.
-# http://search.ligazakon.ua/l_doc2.nsf/link1/T001500.html
-#
-# They did not end DST in September, 1990 (according to the law,
-# "summer time" was still in action):
-# 09 30 1990 03:00 -02.00 1 Time Zone 2 with DST
-# * Ukrainian Government's Resolution of 21.09.1990, No. 272.
-# http://search.ligazakon.ua/l_doc2.nsf/link1/KP900272.html
-#
-# Again no change in March, 1991 ("summer time" in action):
-# 03 31 1991 02:00 -02.00 1 Time Zone 2 with DST
-#
-# DST ended in September 1991 ("summer time" ended):
-# 09 29 1991 03:00 -02.00 0 Time Zone 2, no DST
-# * Ukrainian Government's Resolution of 25.09.1991, No. 225.
-# http://www.uazakon.com/documents/date_21/pg_iwgdoc.htm
-# This is an answer.
-#
-# Since 1992 they had normal DST procedure:
-# 03 29 1992 02:00 -02.00 1 DST started
-# 09 27 1992 03:00 -02.00 0 DST ended
-# * Ukrainian Government's Resolution of 20.03.1992, No. 139.
-# http://www.uazakon.com/documents/date_8u/pg_grcasa.htm
-
-# From Paul Eggert (2018-10-03):
-# As is usual in tzdb, Ukrainian zones use the most common English spellings.
-# For example, tzdb uses Europe/Kiev, as "Kiev" is the most common spelling in
-# English for Ukraine's capital, even though it is certainly wrong as a
-# transliteration of the Ukrainian "ĐĐžŃĐČ". This is similar to tzdb's use of
-# Europe/Prague, which is certainly wrong as a transliteration of the Czech
-# "Praha". ("Kiev" came from old Slavic via Russian to English, and "Prague"
-# came from old Slavic via French to English, so the two cases have something
-# in common.) Admittedly English-language spelling of Ukrainian names is
-# controversial, and some day "Kyiv" may become substantially more popular in
-# English; in the meantime, stick with the traditional English "Kiev" as that
-# means less disruption for our users.
-#
-# Anyway, none of the common English-language spellings (Kiev, Kyiv, Kieff,
-# Kijeff, Kijev, Kiyef, Kiyeff) do justice to the common pronunciation in
-# Ukrainian, namely [ËkÉȘjiuÌŻ] (IPA). This pronunciation has nothing like an
-# English "v" or "f", and instead trails off with what an English-speaker
-# would call a demure "oo" sound, and it would would be better anglicized as
-# "Kuiyu". Here's a sound file, if you would like to do as the Kuiyuvians do:
-# https://commons.wikimedia.org/wiki/File:Uk-ĐĐžŃĐČ.ogg
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-# This represents most of Ukraine. See above for the spelling of "Kiev".
-Zone Europe/Kiev 2:02:04 - LMT 1880
- 2:02:04 - KMT 1924 May 2 # Kiev Mean Time
- 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
- 2:00 E-Eur EE%sT 1995
- 2:00 EU EE%sT
-# Ruthenia used CET 1990/1991.
-# "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
- 1:00 C-Eur CE%sT 1944 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
- 2:00 - EET 1992
- 2:00 E-Eur EE%sT 1995
- 2:00 EU EE%sT
-# Zaporozh'ye and eastern Lugansk oblasts observed DST 1990/1991.
-# "Zaporizhia" is the transliteration of the Ukrainian name, but
-# "Zaporozh'ye" is more common in English. Use the common English
-# spelling, except omit the apostrophe as it is not allowed in
-# portable Posix file names.
-Zone Europe/Zaporozhye 2:20:40 - LMT 1880
- 2:20 - +0220 1924 May 2
- 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
- 2:00 E-Eur EE%sT 1995
- 2:00 EU EE%sT
-
-# Vatican City
-# See Europe/Rome.
-
-###############################################################################
-
-# One source shows that Bulgaria, Cyprus, Finland, and Greece observe DST from
-# the last Sunday in March to the last Sunday in September in 1986.
-# The source shows Romania changing a day later than everybody else.
-#
-# According to Bernard Sieloff's source, Poland is in the MET time zone but
-# uses the WE DST rules. The Western USSR uses EET+1 and ME DST rules.
-# Bernard Sieloff's source claims Romania switches on the same day, but at
-# 00:00 standard time (i.e., 01:00 DST). It also claims that Turkey
-# switches on the same day, but switches on at 01:00 standard time
-# and off at 00:00 standard time (i.e., 01:00 DST)
-
-# ...
-# Date: Wed, 28 Jan 87 16:56:27 -0100
-# From: Tom Hofmann
-# ...
-#
-# ...the European time rules are...standardized since 1981, when
-# 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
-# years...
-# 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.
-#
-# Finally, DST ist always from 'Apr 1' to 'Oct 1' in the
-# Soviet Union (as far as I know).
-#
-# Tom Hofmann, Scientific Computer Center, CIBA-GEIGY AG,
-# 4002 Basle, Switzerland
-# ...
-
-# ...
-# Date: Wed, 4 Feb 87 22:35:22 +0100
-# From: Dik T. Winter
-# ...
-#
-# The information from Tom Hofmann is (as far as I know) not entirely correct.
-# After a request from chongo at amdahl I tried to retrieve all information
-# about DST in Europe. I was able to find all from about 1969.
-#
-# ...standardization on DST in Europe started in about 1977 with switches on
-# first Sunday in April and last Sunday in September...
-# In 1981 UK joined Europe insofar that
-# the starting day for both shifted to last Sunday in March. And from 1982
-# the whole of Europe used DST, with switch dates April 1 and October 1 in
-# the Sov[i]et Union. In 1985 the SU reverted to standard Europe[a]n switch
-# dates...
-#
-# It should also be remembered that time-zones are not constants; e.g.
-# Portugal switched in 1976 from MET (or CET) to WET with DST...
-# Note also that though there were rules for switch dates not
-# all countries abided to these dates, and many individual deviations
-# occurred, though not since 1982 I believe. Another note: it is always
-# assumed that DST is 1 hour ahead of normal time, this need not be the
-# case; at least in the Netherlands there have been times when DST was 2 hours
-# in advance of normal time.
-#
-# ...
-# dik t. winter, cwi, amsterdam, nederland
-# ...
-
-# From Bob Devine (1988-01-28):
-# ...
-# Greece: Last Sunday in April to last Sunday in September (iffy on dates).
-# Since 1978. Change at midnight.
-# ...
-# Monaco: has same DST as France.
-# ...
--- a/test/jdk/sun/util/calendar/zi/tzdata/factory Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-#
-# 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.
-#
-# tzdb data for noncommittal factory settings
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# For distributors who don't want to specify a timezone in their
-# installation procedures. Users who run 'date' will get the
-# time zone abbreviation "-00", indicating that the actual time zone
-# is unknown.
-
-# Zone NAME GMTOFF RULES FORMAT
-Zone Factory 0 - -00
--- a/test/jdk/sun/util/calendar/zi/tzdata/gmt Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-#
-# Copyright (c) 2000, 2018, 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.
-#
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone GMT 0:00 - GMT
--- a/test/jdk/sun/util/calendar/zi/tzdata/iso3166.tab Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,295 +0,0 @@
-#
-# 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.
-#
-# ISO 3166 alpha-2 country codes
-#
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-#
-# From Paul Eggert (2015-05-02):
-# This file contains a table of two-letter country codes. Columns are
-# separated by a single tab. Lines beginning with '#' are comments.
-# All text uses UTF-8 encoding. The columns of the table are as follows:
-#
-# 1. ISO 3166-1 alpha-2 country code, current as of
-# ISO 3166-1 N976 (2018-11-06). See: Updates on ISO 3166-1
-# https://isotc.iso.org/livelink/livelink/Open/16944257
-# 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.
-#
-# The table is sorted by country code.
-#
-# 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.
-#
-#country-
-#code name of country, territory, area, or subdivision
-AD Andorra
-AE United Arab Emirates
-AF Afghanistan
-AG Antigua & Barbuda
-AI Anguilla
-AL Albania
-AM Armenia
-AO Angola
-AQ Antarctica
-AR Argentina
-AS Samoa (American)
-AT Austria
-AU Australia
-AW Aruba
-AX Ă
land Islands
-AZ Azerbaijan
-BA Bosnia & Herzegovina
-BB Barbados
-BD Bangladesh
-BE Belgium
-BF Burkina Faso
-BG Bulgaria
-BH Bahrain
-BI Burundi
-BJ Benin
-BL St Barthelemy
-BM Bermuda
-BN Brunei
-BO Bolivia
-BQ Caribbean NL
-BR Brazil
-BS Bahamas
-BT Bhutan
-BV Bouvet Island
-BW Botswana
-BY Belarus
-BZ Belize
-CA Canada
-CC Cocos (Keeling) Islands
-CD Congo (Dem. Rep.)
-CF Central African Rep.
-CG Congo (Rep.)
-CH Switzerland
-CI CĂŽte d'Ivoire
-CK Cook Islands
-CL Chile
-CM Cameroon
-CN China
-CO Colombia
-CR Costa Rica
-CU Cuba
-CV Cape Verde
-CW Curaçao
-CX Christmas Island
-CY Cyprus
-CZ Czech Republic
-DE Germany
-DJ Djibouti
-DK Denmark
-DM Dominica
-DO Dominican Republic
-DZ Algeria
-EC Ecuador
-EE Estonia
-EG Egypt
-EH Western Sahara
-ER Eritrea
-ES Spain
-ET Ethiopia
-FI Finland
-FJ Fiji
-FK Falkland Islands
-FM Micronesia
-FO Faroe Islands
-FR France
-GA Gabon
-GB Britain (UK)
-GD Grenada
-GE Georgia
-GF French Guiana
-GG Guernsey
-GH Ghana
-GI Gibraltar
-GL Greenland
-GM Gambia
-GN Guinea
-GP Guadeloupe
-GQ Equatorial Guinea
-GR Greece
-GS South Georgia & the South Sandwich Islands
-GT Guatemala
-GU Guam
-GW Guinea-Bissau
-GY Guyana
-HK Hong Kong
-HM Heard Island & McDonald Islands
-HN Honduras
-HR Croatia
-HT Haiti
-HU Hungary
-ID Indonesia
-IE Ireland
-IL Israel
-IM Isle of Man
-IN India
-IO British Indian Ocean Territory
-IQ Iraq
-IR Iran
-IS Iceland
-IT Italy
-JE Jersey
-JM Jamaica
-JO Jordan
-JP Japan
-KE Kenya
-KG Kyrgyzstan
-KH Cambodia
-KI Kiribati
-KM Comoros
-KN St Kitts & Nevis
-KP Korea (North)
-KR Korea (South)
-KW Kuwait
-KY Cayman Islands
-KZ Kazakhstan
-LA Laos
-LB Lebanon
-LC St Lucia
-LI Liechtenstein
-LK Sri Lanka
-LR Liberia
-LS Lesotho
-LT Lithuania
-LU Luxembourg
-LV Latvia
-LY Libya
-MA Morocco
-MC Monaco
-MD Moldova
-ME Montenegro
-MF St Martin (French)
-MG Madagascar
-MH Marshall Islands
-MK North Macedonia
-ML Mali
-MM Myanmar (Burma)
-MN Mongolia
-MO Macau
-MP Northern Mariana Islands
-MQ Martinique
-MR Mauritania
-MS Montserrat
-MT Malta
-MU Mauritius
-MV Maldives
-MW Malawi
-MX Mexico
-MY Malaysia
-MZ Mozambique
-NA Namibia
-NC New Caledonia
-NE Niger
-NF Norfolk Island
-NG Nigeria
-NI Nicaragua
-NL Netherlands
-NO Norway
-NP Nepal
-NR Nauru
-NU Niue
-NZ New Zealand
-OM Oman
-PA Panama
-PE Peru
-PF French Polynesia
-PG Papua New Guinea
-PH Philippines
-PK Pakistan
-PL Poland
-PM St Pierre & Miquelon
-PN Pitcairn
-PR Puerto Rico
-PS Palestine
-PT Portugal
-PW Palau
-PY Paraguay
-QA Qatar
-RE RĂ©union
-RO Romania
-RS Serbia
-RU Russia
-RW Rwanda
-SA Saudi Arabia
-SB Solomon Islands
-SC Seychelles
-SD Sudan
-SE Sweden
-SG Singapore
-SH St Helena
-SI Slovenia
-SJ Svalbard & Jan Mayen
-SK Slovakia
-SL Sierra Leone
-SM San Marino
-SN Senegal
-SO Somalia
-SR Suriname
-SS South Sudan
-ST Sao Tome & Principe
-SV El Salvador
-SX St Maarten (Dutch)
-SY Syria
-SZ Eswatini (Swaziland)
-TC Turks & Caicos Is
-TD Chad
-TF French Southern & Antarctic Lands
-TG Togo
-TH Thailand
-TJ Tajikistan
-TK Tokelau
-TL East Timor
-TM Turkmenistan
-TN Tunisia
-TO Tonga
-TR Turkey
-TT Trinidad & Tobago
-TV Tuvalu
-TW Taiwan
-TZ Tanzania
-UA Ukraine
-UG Uganda
-UM US minor outlying islands
-US United States
-UY Uruguay
-UZ Uzbekistan
-VA Vatican City
-VC St Vincent
-VE Venezuela
-VG Virgin Islands (UK)
-VI Virgin Islands (US)
-VN Vietnam
-VU Vanuatu
-WF Wallis & Futuna
-WS Samoa (western)
-YE Yemen
-YT Mayotte
-ZA South Africa
-ZM Zambia
-ZW Zimbabwe
--- a/test/jdk/sun/util/calendar/zi/tzdata/jdk11_backward Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-#
-# Copyright (c) 2000, 2018, 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.
-#
-# JDK 1.1.x compatible time zone IDs
-#
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule SystemV min 1973 - Apr lastSun 2:00 1:00 D
-Rule SystemV min 1973 - Oct lastSun 2:00 0 S
-Rule SystemV 1974 only - Jan 6 2:00 1:00 D
-Rule SystemV 1974 only - Nov lastSun 2:00 0 S
-Rule SystemV 1975 only - Feb 23 2:00 1:00 D
-Rule SystemV 1975 only - Oct lastSun 2:00 0 S
-Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D
-Rule SystemV 1976 max - Oct lastSun 2:00 0 S
-
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone SystemV/AST4ADT -4:00 SystemV A%sT
-Zone SystemV/EST5EDT -5:00 SystemV E%sT
-Zone SystemV/CST6CDT -6:00 SystemV C%sT
-Zone SystemV/MST7MDT -7:00 SystemV M%sT
-Zone SystemV/PST8PDT -8:00 SystemV P%sT
-Zone SystemV/YST9YDT -9:00 SystemV Y%sT
-Zone SystemV/AST4 -4:00 - AST
-Zone SystemV/EST5 -5:00 - EST
-Zone SystemV/CST6 -6:00 - CST
-Zone SystemV/MST7 -7:00 - MST
-Zone SystemV/PST8 -8:00 - PST
-Zone SystemV/YST9 -9:00 - YST
-Zone SystemV/HST10 -10:00 - HST
--- a/test/jdk/sun/util/calendar/zi/tzdata/leapseconds Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-#
-# 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.
-#
-# Allowance for leap seconds added to each time zone file.
-
-# This file is in the public domain.
-
-# This file is generated automatically from the data in the public-domain
-# leap-seconds.list file, which can be copied from
-# <ftp://ftp.nist.gov/pub/time/leap-seconds.list>
-# or <ftp://ftp.boulder.nist.gov/pub/time/leap-seconds.list>
-# or <ftp://tycho.usno.navy.mil/pub/ntp/leap-seconds.list>.
-# For more about leap-seconds.list, please see
-# The NTP Timescale and Leap Seconds
-# <https://www.eecis.udel.edu/~mills/leap.html>.
-
-# The International Earth Rotation and Reference Systems Service
-# periodically uses leap seconds to keep UTC to within 0.9 s of UT1
-# (which measures the true angular orientation of the earth in space)
-# and publishes leap second data in a copyrighted file
-# <https://hpiers.obspm.fr/iers/bul/bulc/Leap_Second.dat>.
-# See: Levine J. Coordinated Universal Time and the leap second.
-# URSI Radio Sci Bull. 2016;89(4):30-6. doi:10.23919/URSIRSB.2016.7909995
-# <https://ieeexplore.ieee.org/document/7909995>.
-
-# There were no leap seconds before 1972, because the official mechanism
-# accounting for the discrepancy between atomic time and the earth's rotation
-# did not exist. The first ("1 Jan 1972") data line in leap-seconds.list
-# does not denote a leap second; it denotes the start of the current definition
-# of UTC.
-
-# The correction (+ or -) is made at the given time, so lines
-# will typically look like:
-# Leap YEAR MON DAY 23:59:60 + R/S
-# or
-# Leap YEAR MON DAY 23:59:59 - R/S
-
-# If the leap second is Rolling (R) the given time is local time (unused here).
-Leap 1972 Jun 30 23:59:60 + S
-Leap 1972 Dec 31 23:59:60 + S
-Leap 1973 Dec 31 23:59:60 + S
-Leap 1974 Dec 31 23:59:60 + S
-Leap 1975 Dec 31 23:59:60 + S
-Leap 1976 Dec 31 23:59:60 + S
-Leap 1977 Dec 31 23:59:60 + S
-Leap 1978 Dec 31 23:59:60 + S
-Leap 1979 Dec 31 23:59:60 + S
-Leap 1981 Jun 30 23:59:60 + S
-Leap 1982 Jun 30 23:59:60 + S
-Leap 1983 Jun 30 23:59:60 + S
-Leap 1985 Jun 30 23:59:60 + S
-Leap 1987 Dec 31 23:59:60 + S
-Leap 1989 Dec 31 23:59:60 + S
-Leap 1990 Dec 31 23:59:60 + S
-Leap 1992 Jun 30 23:59:60 + S
-Leap 1993 Jun 30 23:59:60 + S
-Leap 1994 Jun 30 23:59:60 + S
-Leap 1995 Dec 31 23:59:60 + S
-Leap 1997 Jun 30 23:59:60 + S
-Leap 1998 Dec 31 23:59:60 + S
-Leap 2005 Dec 31 23:59:60 + S
-Leap 2008 Dec 31 23:59:60 + S
-Leap 2012 Jun 30 23:59:60 + S
-Leap 2015 Jun 30 23:59:60 + S
-Leap 2016 Dec 31 23:59:60 + S
-
-# POSIX timestamps for the data in this file:
-#updated 1467936000
-#expires 1577491200
-
-# Updated through IERS Bulletin C57
-# File expires on: 28 December 2019
--- a/test/jdk/sun/util/calendar/zi/tzdata/northamerica Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3508 +0,0 @@
-#
-# 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.
-#
-# tzdb data for North and Central America and environs
-
-# 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 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). 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
-# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
-
-###############################################################################
-
-# United States
-
-# From Paul Eggert (1999-03-31):
-# Howse writes (pp 121-125) that time zones were invented by
-# Professor Charles Ferdinand Dowd (1825-1904),
-# Principal of Temple Grove Ladies' Seminary (Saratoga Springs, NY).
-# His pamphlet "A System of National Time for Railroads" (1870)
-# was the result of his proposals at the Convention of Railroad Trunk Lines
-# in New York City (1869-10). His 1870 proposal was based on Washington, DC,
-# but in 1872-05 he moved the proposed origin to Greenwich.
-
-# From Paul Eggert (2018-03-20):
-# Dowd's proposal left many details unresolved, such as where to draw
-# lines between time zones. The key individual who made time zones
-# work in the US was William Frederick Allen - railway engineer,
-# managing editor of the Travelers' Guide, and secretary of the
-# General Time Convention, a railway standardization group. Allen
-# spent months in dialogs with scientific and railway leaders,
-# developed a workable plan to institute time zones, and presented it
-# to the General Time Convention on 1883-04-11, saying that his plan
-# meant "local time would be practically abolished" - a plus for
-# railway scheduling. By the next convention on 1883-10-11 nearly all
-# railroads had agreed and it took effect on 1883-11-18. That Sunday
-# was called the "day of two noons", as some locations observed noon
-# twice. Allen witnessed the transition in New York City, writing:
-#
-# I heard the bells of St. Paul's strike on the old time. Four
-# minutes later, obedient to the electrical signal from the Naval
-# Observatory ... the time-ball made its rapid descent, the chimes
-# of old Trinity rang twelve measured strokes, and local time was
-# abandoned, probably forever.
-#
-# Most of the US soon followed suit. See:
-# Bartky IR. The adoption of standard time. Technol Cult 1989 Jan;30(1):25-56.
-# https://dx.doi.org/10.2307/3105430
-
-# From Paul Eggert (2005-04-16):
-# That 1883 transition occurred at 12:00 new time, not at 12:00 old time.
-# See p 46 of David Prerau, Seize the daylight, Thunder's Mouth Press (2005).
-
-# From Paul Eggert (2006-03-22):
-# A good source for time zone historical data in the US is
-# Thomas G. Shanks, The American Atlas (5th edition),
-# San Diego: ACS Publications, Inc. (1991).
-# Make sure you have the errata sheet; the book is somewhat useless without it.
-# It is the source for most of the pre-1991 US entries below.
-
-# From Paul Eggert (2001-03-06):
-# Daylight Saving Time was first suggested as a joke by Benjamin Franklin
-# in his whimsical essay "An Economical Project for Diminishing the Cost
-# of Light" published in the Journal de Paris (1784-04-26).
-# Not everyone is happy with the results:
-#
-# I don't really care how time is reckoned so long as there is some
-# agreement about it, but I object to being told that I am saving
-# daylight when my reason tells me that I am doing nothing of the kind.
-# I even object to the implication that I am wasting something
-# valuable if I stay in bed after the sun has risen. As an admirer
-# of moonlight I resent the bossy insistence of those who want to
-# reduce my time for enjoying it. At the back of the Daylight Saving
-# scheme I detect the bony, blue-fingered hand of Puritanism, eager
-# 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,
-# Clarke, Irwin (1947), XIX, Sunday
-#
-# For more about the first ten years of DST in the United States, see
-# 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
-# was the first nationwide legal time standard, and apparently
-# time was just called "Standard Time" or "Daylight Saving Time".
-
-# From Arthur David Olson:
-# US Daylight Saving Time ended on the last Sunday of *October* in 1974.
-# See, for example, the front page of the Saturday, 1974-10-26
-# and Sunday, 1974-10-27 editions of the Washington Post.
-
-# From Arthur David Olson:
-# Before the Uniform Time Act of 1966 took effect in 1967, observance of
-# Daylight Saving Time in the US was by local option, except during wartime.
-
-# 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:
-# https://web.archive.org/web/20000926032210/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.
-#
-# From Paul Eggert (2017-09-23):
-# This was the V-J Day issue of the Clamdigger, a Rowayton, CT newsletter.
-
-# From Joseph Gallant citing
-# George H. Douglas, _The Early Days of Radio Broadcasting_ (1987):
-# At 7 P.M. (Eastern War Time) [on 1945-08-14], the networks were set
-# to switch to London for Attlee's address, but the American people
-# never got to hear his speech live. According to one press account,
-# CBS' Bob Trout was first to announce the word of Japan's surrender,
-# but a few seconds later, NBC, ABC and Mutual also flashed the word
-# of surrender, all of whom interrupting the bells of Big Ben in
-# London which were to precede Mr. Attlee's speech.
-
-# From Paul Eggert (2003-02-09): It was Robert St John, not Bob Trout. From
-# Myrna Oliver's obituary of St John on page B16 of today's Los Angeles Times:
-#
-# ... a war-weary U.S. clung to radios, awaiting word of Japan's surrender.
-# Any announcement from Asia would reach St. John's New York newsroom on a
-# wire service teletype machine, which had prescribed signals for major news.
-# Associated Press, for example, would ring five bells before spewing out
-# typed copy of an important story, and 10 bells for news "of transcendental
-# importance."
-#
-# On Aug. 14, stalling while talking steadily into the NBC networks' open
-# microphone, St. John heard five bells and waited only to hear a sixth bell,
-# before announcing confidently: "Ladies and gentlemen, World War II is over.
-# The Japanese have agreed to our surrender terms."
-#
-# He had scored a 20-second scoop on other broadcasters.
-
-# From Arthur David Olson (2005-08-22):
-# Paul has been careful to use the "US" rules only in those locations
-# that are part of the United States; this reflects the real scope of
-# U.S. government action. So even though the "US" rules have changed
-# in the latest release, other countries won't be affected.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule US 1918 1919 - Mar lastSun 2:00 1:00 D
-Rule US 1918 1919 - Oct lastSun 2:00 0 S
-Rule US 1942 only - Feb 9 2:00 1:00 W # War
-Rule US 1945 only - Aug 14 23:00u 1:00 P # Peace
-Rule US 1945 only - Sep lastSun 2:00 0 S
-Rule US 1967 2006 - Oct lastSun 2:00 0 S
-Rule US 1967 1973 - Apr lastSun 2:00 1:00 D
-Rule US 1974 only - Jan 6 2:00 1:00 D
-Rule US 1975 only - Feb 23 2:00 1:00 D
-Rule US 1976 1986 - Apr lastSun 2:00 1:00 D
-Rule US 1987 2006 - Apr Sun>=1 2:00 1:00 D
-Rule US 2007 max - Mar Sun>=8 2:00 1:00 D
-Rule US 2007 max - Nov Sun>=1 2:00 0 S
-
-# From Arthur David Olson, 2005-12-19
-# We generate the files specified below to guard against old files with
-# obsolete information being left in the time zone binary directory.
-# We limit the list to names that have appeared in previous versions of
-# this time zone package.
-# We do these as separate Zones rather than as Links to avoid problems if
-# a particular place changes whether it observes DST.
-# We put these specifications here in the northamerica file both to
-# increase the chances that they'll actually get compiled and to
-# avoid the need to duplicate the US rules in another file.
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone EST -5:00 - EST
-Zone MST -7:00 - MST
-Zone HST -10:00 - HST
-Zone EST5EDT -5:00 US E%sT
-Zone CST6CDT -6:00 US C%sT
-Zone MST7MDT -7:00 US M%sT
-Zone PST8PDT -8:00 US P%sT
-
-# From U. S. Naval Observatory (1989-01-19):
-# USA EASTERN 5 H BEHIND UTC NEW YORK, WASHINGTON
-# USA EASTERN 4 H BEHIND UTC APR 3 - OCT 30
-# USA CENTRAL 6 H BEHIND UTC CHICAGO, HOUSTON
-# USA CENTRAL 5 H BEHIND UTC APR 3 - OCT 30
-# USA MOUNTAIN 7 H BEHIND UTC DENVER
-# USA MOUNTAIN 6 H BEHIND UTC APR 3 - OCT 30
-# USA PACIFIC 8 H BEHIND UTC L.A., SAN FRANCISCO
-# USA PACIFIC 7 H BEHIND UTC APR 3 - OCT 30
-# 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 HAWAII 10 H BEHIND UTC
-# USA BERING 11 H BEHIND UTC SAMOA, MIDWAY
-
-# From Arthur David Olson (1989-01-21):
-# The above dates are for 1988.
-# Note the "AKST" and "AKDT" abbreviations, the claim that there's
-# no DST in Samoa, and the claim that there is DST in Alaska and the
-# Aleutians.
-
-# From Arthur David Olson (1988-02-13):
-# Legal standard time zone names, from United States Code (1982 Edition and
-# Supplement III), Title 15, Chapter 6, Section 260 and forward. First, names
-# up to 1967-04-01 (when most provisions of the Uniform Time Act of 1966
-# took effect), as explained in sections 263 and 261:
-# (none)
-# United States standard eastern time
-# United States standard mountain time
-# United States standard central time
-# United States standard Pacific time
-# (none)
-# United States standard Alaska time
-# (none)
-# Next, names from 1967-04-01 until 1983-11-30 (the date for
-# public law 98-181):
-# Atlantic standard time
-# eastern standard time
-# central standard time
-# mountain standard time
-# Pacific standard time
-# Yukon standard time
-# Alaska-Hawaii standard time
-# Bering standard time
-# And after 1983-11-30:
-# Atlantic standard time
-# eastern standard time
-# central standard time
-# mountain standard time
-# Pacific standard time
-# Alaska standard time
-# Hawaii-Aleutian standard time
-# Samoa standard time
-# The law doesn't give abbreviations.
-#
-# From Paul Eggert (2016-12-19):
-# Here are URLs for the 1918 and 1966 legislation:
-# http://uscode.house.gov/statviewer.htm?volume=40&page=451
-# http://uscode.house.gov/statviewer.htm?volume=80&page=108
-# Although the 1918 names were officially "United States Standard
-# Eastern Time" and similarly for "Central", "Mountain", "Pacific",
-# and "Alaska", in practice "Standard" was placed just before "Time",
-# as codified in 1966. In practice, Alaska time was abbreviated "AST"
-# before 1968. Summarizing the 1967 name changes:
-# 1918 names 1967 names
-# -08 Standard Pacific Time (PST) Pacific standard time (PST)
-# -09 (unofficial) Yukon (YST) Yukon standard time (YST)
-# -10 Standard Alaska Time (AST) Alaska-Hawaii standard time (AHST)
-# -11 (unofficial) Nome (NST) Bering standard time (BST)
-#
-# From Paul Eggert (2000-01-08), following a heads-up from Rives McDow:
-# Public law 106-564 (2000-12-23) introduced ... "Chamorro Standard Time"
-# for time in Guam and the Northern Marianas. See the file "australasia".
-#
-# From Paul Eggert (2015-04-17):
-# HST and HDT are standardized abbreviations for Hawaii-Aleutian
-# standard and daylight times. See section 9.47 (p 234) of the
-# U.S. Government Printing Office Style Manual (2008)
-# https://www.gpo.gov/fdsys/pkg/GPO-STYLEMANUAL-2008/pdf/GPO-STYLEMANUAL-2008.pdf
-
-# From Arthur David Olson, 2005-08-09
-# 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
-# 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
-# Sunday of November'.
-# (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
-# 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
-# Daylight Saving Time back to the 2005 time schedules once the
-# Department study is complete.
-
-# US eastern time, represented by New York
-
-# Connecticut, Delaware, District of Columbia, most of Florida,
-# Georgia, southeast Indiana (Dearborn and Ohio counties), eastern Kentucky
-# (except America/Kentucky/Louisville below), Maine, Maryland, Massachusetts,
-# New Hampshire, New Jersey, New York, North Carolina, Ohio,
-# Pennsylvania, Rhode Island, South Carolina, eastern Tennessee,
-# Vermont, Virginia, West Virginia
-
-# From Dave Cantor (2004-11-02):
-# Early this summer I had the occasion to visit the Mount Washington
-# Observatory weather station atop (of course!) Mount Washington [, NH]....
-# One of the staff members said that the station was on Eastern Standard Time
-# and didn't change their clocks for Daylight Saving ... so that their
-# reports will always have times which are 5 hours behind UTC.
-
-# 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"
-# Roberts, city administrator in Phenix City. as saying "We are in the Central
-# time zone, but we do go by the Eastern time zone because so many people work
-# in Columbus."
-#
-# From Paul Eggert (2017-02-22):
-# Four cities are involved. The two not mentioned above are Smiths Station
-# and Valley. Barbara Brooks, Valley's assistant treasurer, heard it started
-# because West Point Pepperell textile mills were in Alabama while the
-# corporate office was in Georgia, and residents voted to keep Eastern
-# time even after the mills closed. See: Kazek K. Did you know which
-# Alabama towns are in a different time zone? al.com 2017-02-06.
-# http://www.al.com/living/index.ssf/2017/02/do_you_know_which_alabama_town.html
-
-# From Paul Eggert (2014-09-06):
-# Monthly Notices of the Royal Astronomical Society 44, 4 (1884-02-08), 208
-# says that New York City Hall time was 3 minutes 58.4 seconds fast of
-# Eastern time (i.e., -4:56:01.6) just before the 1883 switch. Round to the
-# nearest second.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-Rule NYC 1920 only - Mar lastSun 2:00 1:00 D
-Rule NYC 1920 only - Oct lastSun 2:00 0 S
-Rule NYC 1921 1966 - Apr lastSun 2:00 1:00 D
-Rule NYC 1921 1954 - Sep lastSun 2:00 0 S
-Rule NYC 1955 1966 - Oct lastSun 2:00 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/New_York -4:56:02 - LMT 1883 Nov 18 12:03:58
- -5:00 US E%sT 1920
- -5:00 NYC E%sT 1942
- -5:00 US E%sT 1946
- -5:00 NYC E%sT 1967
- -5:00 US E%sT
-
-# US central time, represented by Chicago
-
-# Alabama, Arkansas, Florida panhandle (Bay, Calhoun, Escambia,
-# Gulf, Holmes, Jackson, Okaloosa, Santa Rosa, Walton, and
-# Washington counties), Illinois, western Indiana
-# (Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer,
-# Vanderburgh, and Warrick counties), Iowa, most of Kansas, western
-# Kentucky, Louisiana, Minnesota, Mississippi, Missouri, eastern
-# Nebraska, eastern North Dakota, Oklahoma, eastern South Dakota,
-# western Tennessee, most of Texas, Wisconsin
-
-# From Paul Eggert (2018-01-07):
-# In 1869 the Chicago Astronomical Society contracted with the city to keep
-# time. Though delayed by the Great Fire, by 1880 a wire ran from the
-# Dearborn Observatory (on the University of Chicago campus) to City Hall,
-# which then sent signals to police and fire stations. However, railroads got
-# their time signals from the Allegheny Observatory, the Madison Observatory,
-# the Ann Arbor Observatory, etc., so their clocks did not agree with each
-# other or with the city's official time. The confusion took some years to
-# clear up. See:
-# Moser M. How Chicago gave America its time zones. Chicago. 2018-01-04.
-# http://www.chicagomag.com/city-life/January-2018/How-Chicago-Gave-America-Its-Time-Zones/
-
-# From Larry M. Smith (2006-04-26) re Wisconsin:
-# https://docs.legis.wisconsin.gov/statutes/statutes/175.pdf
-# is currently enforced at the 01:00 time of change. Because the local
-# "bar time" in the state corresponds to 02:00, a number of citations
-# are issued for the "sale of class 'B' alcohol after prohibited
-# hours" within the deviated hour of this change every year....
-#
-# From Douglas R. Bomberg (2007-03-12):
-# Wisconsin has enacted (nearly eleventh-hour) legislation to get WI
-# Statue 175 closer in synch with the US Congress' intent....
-# https://docs.legis.wisconsin.gov/2007/related/acts/3
-
-# From an email administrator of the City of Fort Pierre, SD (2015-12-21):
-# Fort Pierre is technically located in the Mountain time zone as is
-# the rest of Stanley County. Most of Stanley County and Fort Pierre
-# uses the Central time zone due to doing most of their business in
-# Pierre so it simplifies schedules. I have lived in Stanley County
-# all my life and it has been that way since I can remember. (43 years!)
-#
-# From Paul Eggert (2015-12-25):
-# Assume this practice predates 1970, so Fort Pierre can use America/Chicago.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-Rule Chicago 1920 only - Jun 13 2:00 1:00 D
-Rule Chicago 1920 1921 - Oct lastSun 2:00 0 S
-Rule Chicago 1921 only - Mar lastSun 2:00 1:00 D
-Rule Chicago 1922 1966 - Apr lastSun 2:00 1:00 D
-Rule Chicago 1922 1954 - Sep lastSun 2:00 0 S
-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 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 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.
-# See <http://dmses.dot.gov/docimages/p63/135818.pdf>.
-# Officially this switch also included part of Sioux County, and
-# Jones, Mellette, and Todd Counties in South Dakota;
-# but in practice these other counties were already observing central time.
-# See <http://www.epa.gov/fedrgstr/EPA-IMPACT/2003/October/Day-28/i27056.htm>.
-Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
- -7:00 US M%sT 2003 Oct 26 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):
-# https://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 47° 15' 51" N, 101° 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
- -6:00 US C%sT
-
-# US mountain time, represented by Denver
-#
-# Colorado, far western Kansas, Montana, western
-# Nebraska, Nevada border (Jackpot, Owyhee, and Mountain City),
-# New Mexico, southwestern North Dakota,
-# western South Dakota, far western Texas (El Paso County, Hudspeth County,
-# and Pine Springs and Nickel Creek in Culberson County), Utah, Wyoming
-#
-# From Paul Eggert (2018-10-25):
-# On 1921-03-04 federal law placed all of Texas into the central time zone.
-# However, El Paso ignored the law for decades and continued to observe
-# mountain time, on the grounds that that's what they had always done
-# and they weren't about to let the federal government tell them what to do.
-# Eventually the federal government gave in and changed the law on
-# 1970-04-10 to match what El Paso was actually doing. Although
-# that's slightly after our 1970 cutoff, there is no need to create a
-# separate zone for El Paso since they were ignoring the law anyway. See:
-# Long T. El Pasoans were time rebels, fought to stay in Mountain zone.
-# El Paso Times. 2018-10-24 06:40 -06.
-# https://www.elpasotimes.com/story/news/local/el-paso/2018/10/24/el-pasoans-were-time-rebels-fought-stay-mountain-zone/1744509002/
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-Rule Denver 1920 1921 - Mar lastSun 2:00 1:00 D
-Rule Denver 1920 only - Oct lastSun 2:00 0 S
-Rule Denver 1921 only - May 22 2:00 0 S
-Rule Denver 1965 1966 - Apr lastSun 2:00 1:00 D
-Rule Denver 1965 1966 - Oct lastSun 2:00 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Denver -6:59:56 - LMT 1883 Nov 18 12:00:04
- -7:00 US M%sT 1920
- -7:00 Denver M%sT 1942
- -7:00 US M%sT 1946
- -7:00 Denver M%sT 1967
- -7:00 US M%sT
-
-# US Pacific time, represented by Los Angeles
-#
-# California, northern Idaho (Benewah, Bonner, Boundary, Clearwater,
-# Kootenai, Latah, Lewis, Nez Perce, and Shoshone counties, Idaho county
-# north of the Salmon River, and the towns of Burgdorf and Warren),
-# Nevada (except West Wendover), Oregon (except the northern Ÿ of
-# Malheur county), and Washington
-
-# From Paul Eggert (2016-08-20):
-# In early February 1948, in response to California's electricity shortage,
-# PG&E changed power frequency from 60 to 59.5 Hz during daylight hours,
-# causing electric clocks to lose six minutes per day. (This did not change
-# legal time, and is not part of the data here.) See:
-# Ross SA. An energy crisis from the past: Northern California in 1948.
-# Working Paper No. 8, Institute of Governmental Studies, UC Berkeley,
-# 1973-11. https://escholarship.org/uc/item/8x22k30c
-#
-# In another measure to save electricity, DST was instituted from 1948-03-14
-# at 02:01 to 1949-01-16 at 02:00, with the governor having the option to move
-# the fallback transition earlier. See pages 3-4 of:
-# http://clerk.assembly.ca.gov/sites/clerk.assembly.ca.gov/files/archive/Statutes/1948/48Vol1_Chapters.pdf
-#
-# In response:
-#
-# Governor Warren received a torrent of objecting mail, and it is not too much
-# to speculate that the objections to Daylight Saving Time were one important
-# factor in the defeat of the Dewey-Warren Presidential ticket in California.
-# -- Ross, p 25
-#
-# On December 8 the governor exercised the option, setting the date to January 1
-# (LA Times 1948-12-09). The transition time was 02:00 (LA Times 1949-01-01).
-#
-# Despite the controversy, in 1949 California voters approved Proposition 12,
-# which established DST from April's last Sunday at 01:00 until September's
-# last Sunday at 02:00. This was amended by 1962's Proposition 6, which changed
-# the fall-back date to October's last Sunday. See:
-# https://repository.uchastings.edu/cgi/viewcontent.cgi?article=1501&context=ca_ballot_props
-# https://repository.uchastings.edu/cgi/viewcontent.cgi?article=1636&context=ca_ballot_props
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-Rule CA 1948 only - Mar 14 2:01 1:00 D
-Rule CA 1949 only - Jan 1 2:00 0 S
-Rule CA 1950 1966 - Apr lastSun 1:00 1:00 D
-Rule CA 1950 1961 - Sep lastSun 2:00 0 S
-Rule CA 1962 1966 - Oct lastSun 2:00 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 12:07:02
- -8:00 US P%sT 1946
- -8:00 CA P%sT 1967
- -8:00 US P%sT
-
-# Alaska
-# AK%sT is the modern abbreviation for -09 per USNO.
-#
-# From Paul Eggert (2017-06-15):
-# Howse writes that Alaska switched from the Julian to the Gregorian calendar,
-# and from east-of-GMT to west-of-GMT days, when the US bought it from Russia.
-# On Friday, 1867-10-18 (Gregorian), at precisely 15:30 local time, the
-# Russian forts and fleet at Sitka fired salutes to mark the ceremony of
-# formal transfer. See the Sacramento Daily Union (1867-11-14), p 3, col 2.
-# https://cdnc.ucr.edu/cgi-bin/cdnc?a=d&d=SDU18671114.2.12.1
-# Sitka workers did not change their calendars until Sunday, 1867-10-20,
-# and so celebrated two Sundays that week. See: Ahllund T (tr Hallamaa P).
-# From the memoirs of a Finnish workman. Alaska History. 2006 Fall;21(2):1-25.
-# http://alaskahistoricalsociety.org/wp-content/uploads/2016/12/Ahllund-2006-Memoirs-of-a-Finnish-Workman.pdf
-# Include only the time zone part of this transition, ignoring the switch
-# from Julian to Gregorian, since we can't represent the Julian calendar.
-#
-# As far as we know, of the locations mentioned below only Sitka was
-# permanently inhabited in 1867 by anyone using either calendar.
-# (Yakutat was colonized by the Russians in 1799, but the settlement was
-# destroyed in 1805 by a Yakutat-kon war party.) Many of Alaska's inhabitants
-# were unaware of the US acquisition of Alaska, much less of any calendar or
-# time change. However, the Russian-influenced part of Alaska did observe
-# Russian time, and it is more accurate to model this than to ignore it.
-# The database format requires an exact transition time; use the Russian
-# salute as a somewhat-arbitrary time for the formal transfer of control for
-# all of Alaska. Sitka's UTC offset is -9:01:13; adjust its 15:30 to the
-# local times of other Alaskan locations so that they change simultaneously.
-
-# 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
-#
-# 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:
-#
-# On September 20 [1979]...DOT...officials decreed that on April 27,
-# 1980, Juneau and other nearby communities would move to Yukon Time.
-# Sitka, Petersburg, Wrangell, and Ketchikan, however, would remain on
-# Pacific Time.
-#
-# ...on September 22, 1980, DOT Secretary Neil E. Goldschmidt rescinded the
-# Department's September 1979 decision. Juneau and other communities in
-# northern Southeast reverted to Pacific Time on October 26.
-#
-# On October 28 [1983]...the Metlakatla Indian Community Council voted
-# unanimously to keep the reservation on Pacific Time.
-#
-# According to DOT official Joanne Petrie, Indian reservations are not
-# bound to follow time zones imposed by neighboring jurisdictions.
-#
-# (The last is consistent with how the database now handles the Navajo
-# Nation.)
-
-# 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
-# own time. I asked about daylight saving; they said it wasn't used. I
-# did not inquire about practices in the past.
-
-# From Arthur David Olson (2011-08-17):
-# For lack of better information, assume that Metlakatla's
-# abandonment of use of daylight saving resulted from the 1983 vote.
-
-# From Steffen Thorsen (2015-11-09):
-# It seems Metlakatla did go off PST on Sunday, November 1, changing
-# their time to AKST and are going to follow Alaska's DST, switching
-# between AKST and AKDT from now on....
-# https://www.krbd.org/2015/10/30/annette-island-times-they-are-a-changing/
-
-# From Ryan Stanley (2018-11-06):
-# The Metlakatla community in Alaska has decided not to change its
-# clock back an hour starting on November 4th, 2018 (day before yesterday).
-# They will be gmtoff=-28800 year-round.
-# https://www.facebook.com/141055983004923/photos/pb.141055983004923.-2207520000.1541465673./569081370202380/
-
-# From Paul Eggert (2018-12-16):
-# In a 2018-12-11 special election, Metlakatla voted to go back to
-# Alaska time (including daylight saving time) starting next year.
-# https://www.krbd.org/2018/12/12/metlakatla-to-follow-alaska-standard-time-allow-liquor-sales/
-#
-# From Ryan Stanley (2019-01-11):
-# The community will be changing back on the 20th of this month...
-# From Tim Parenti (2019-01-11):
-# Per an announcement on the Metlakatla community's official Facebook page, the
-# "fall back" will be on Sunday 2019-01-20 at 02:00:
-# https://www.facebook.com/141055983004923/photos/607150969728753/
-# So they won't be waiting for Alaska to join them on 2019-03-10, but will
-# rather change their clocks twice in seven weeks.
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Juneau 15:02:19 - LMT 1867 Oct 19 15:33:32
- -8:57:41 - LMT 1900 Aug 20 12:00
- -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
- -9:00 US Y%sT 1983 Nov 30
- -9:00 US AK%sT
-Zone America/Sitka 14:58:47 - LMT 1867 Oct 19 15:30
- -9:01:13 - LMT 1900 Aug 20 12:00
- -8:00 - PST 1942
- -8:00 US P%sT 1946
- -8:00 - PST 1969
- -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 19 15:44:55
- -8:46:18 - LMT 1900 Aug 20 12:00
- -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 - PST 2015 Nov 1 2:00
- -9:00 US AK%sT 2018 Nov 4 2:00
- -8:00 - PST 2019 Jan 20 2:00
- -9:00 US AK%sT
-Zone America/Yakutat 14:41:05 - LMT 1867 Oct 19 15:12:18
- -9:18:55 - LMT 1900 Aug 20 12:00
- -9:00 - YST 1942
- -9:00 US Y%sT 1946
- -9:00 - YST 1969
- -9:00 US Y%sT 1983 Nov 30
- -9:00 US AK%sT
-Zone America/Anchorage 14:00:24 - LMT 1867 Oct 19 14:31:37
- -9:59:36 - LMT 1900 Aug 20 12:00
- -10:00 - AST 1942
- -10:00 US A%sT 1967 Apr
- -10:00 - AHST 1969
- -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:22 - LMT 1867 Oct 19 13:29:35
- -11:01:38 - LMT 1900 Aug 20 12:00
- -11:00 - NST 1942
- -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
- -9:00 US Y%sT 1983 Nov 30
- -9:00 US AK%sT
-Zone America/Adak 12:13:22 - LMT 1867 Oct 19 12:44:35
- -11:46:38 - LMT 1900 Aug 20 12:00
- -11:00 - NST 1942
- -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
- -10:00 US AH%sT 1983 Nov 30
- -10:00 US H%sT
-# The following switches don't quite make our 1970 cutoff.
-#
-# Shanks writes that part of southwest Alaska (e.g. Aniak)
-# switched from -11:00 to -10:00 on 1968-09-22 at 02:00,
-# and another part (e.g. Akiak) made the same switch five weeks later.
-#
-# From David Flater (2004-11-09):
-# In e-mail, 2004-11-02, Ray Hudson, historian/liaison to the Unalaska
-# Historic Preservation Commission, provided this information, which
-# suggests that Unalaska deviated from statutory time from early 1967
-# possibly until 1983:
-#
-# 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
-# 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
-# three votes for and one against."
-
-# Hawaii
-
-# From Arthur David Olson (2010-12-09):
-# "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
-# https://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
-# last Sunday of each September, but less than a month later repealed the
-# act," (page 220), that year-round daylight saving time was in effect
-# from 1942-02-09 to 1945-09-30 (page 221, with no time of day given for
-# when clocks changed) and that clocks were changed by 30 minutes
-# effective the second Sunday of June, 1947 (page 219, with no time of
-# day given for when clocks changed). A footnote for the 1933 changes
-# cites Session Laws of Hawaii 1933, "Act. 90 (approved 26 Apr. 1933)
-# and Act 163 (approved 21 May 1933)."
-
-# From Arthur David Olson (2011-01-19):
-# The following is from "Laws of the Territory of Hawaii Passed by the
-# Seventeenth Legislature: Regular Session 1933," available (as of
-# 2011-01-19) at American University's Pence Law Library. Page 85: "Act
-# 90...At 2 o'clock ante meridian of the last Sunday in April of each
-# 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
-# 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.
-# Approved this 21st day of May, A. D. 1933. LAWRENCE M. JUDD, Governor
-# of the Territory of Hawaii."
-#
-# 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 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 US H%sT 1947 Jun 8 2:00
- -10:00 - HST
-
-# Now we turn to US areas that have diverged from the consensus since 1970.
-
-# Arizona mostly uses MST.
-
-# From Paul Eggert (2002-10-20):
-#
-# The information in the rest of this paragraph is derived from the
-# Daylight Saving Time web page
-# <http://www.dlapr.lib.az.us/links/daylight.htm> (2002-01-23)
-# maintained by the Arizona State Library, Archives and Public Records.
-# Between 1944-01-01 and 1944-04-01 the State of Arizona used standard
-# time, but by federal law railroads, airlines, bus lines, military
-# personnel, and some engaged in interstate commerce continued to
-# observe war (i.e., daylight saving) time. The 1944-03-17 Phoenix
-# Gazette says that was the date the law changed, and that 04-01 was
-# the date the state's clocks would change. In 1945 the State of
-# Arizona used standard time all year, again with exceptions only as
-# mandated by federal law. Arizona observed DST in 1967, but Arizona
-# Laws 1968, ch. 183 (effective 1968-03-21) repealed DST.
-#
-# 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 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
-# From Arthur David Olson (1988-02-13):
-# A writer from the Inter Tribal Council of Arizona, Inc.,
-# notes in private correspondence dated 1987-12-28 that "Presently, only the
-# Navajo Nation participates in the Daylight Saving Time policy, due to its
-# large size and location in three states." (The "only" means that other
-# tribal nations don't use DST.)
-#
-# From Paul Eggert (2013-08-26):
-# See America/Denver for a zone appropriate for the Navajo Nation.
-
-# Southern Idaho (Ada, Adams, Bannock, Bear Lake, Bingham, Blaine,
-# Boise, Bonneville, Butte, Camas, Canyon, Caribou, Cassia, Clark,
-# Custer, Elmore, Franklin, Fremont, Gem, Gooding, Jefferson, Jerome,
-# Lemhi, Lincoln, Madison, Minidoka, Oneida, Owyhee, Payette, Power,
-# Teton, Twin Falls, Valley, Washington counties, and the southern
-# quarter of Idaho county) and eastern Oregon (most of Malheur County)
-# switched four weeks late in 1974.
-#
-# 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
- -7:00 US M%sT 1974
- -7:00 - MST 1974 Feb 3 2:00
- -7:00 US M%sT
-
-# Indiana
-#
-# For a map of Indiana's time zone regions, see:
-# https://en.wikipedia.org/wiki/Time_in_Indiana
-#
-# From Paul Eggert (2018-11-30):
-# A brief but entertaining history of time in Indiana describes a 1949 debate
-# in the Indiana House where city legislators (who favored "fast time")
-# tussled with farm legislators (who didn't) over a bill to outlaw DST:
-# "Lacking enough votes, the city faction tries to filibuster until time runs
-# out on the session at midnight, but rural champion Rep. Herbert Copeland,
-# R-Madison, leans over the gallery railing and forces the official clock
-# back to 9 p.m., breaking it in the process. The clock sticks on 9 as the
-# debate rages on into the night. The filibuster finally dies out and the
-# bill passes, while outside the chamber, clocks read 3:30 a.m. In the end,
-# it doesn't matter which side won. The law has no enforcement powers and
-# is simply ignored by fast-time communities."
-# How Indiana went from 'God's time' to split zones and daylight-saving.
-# Indianapolis Star. 2018-11-27 14:58 -05.
-# https://www.indystar.com/story/news/politics/2018/11/27/indianapolis-indiana-time-zone-history-central-eastern-daylight-savings-time/2126300002/
-#
-# 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,
-# Vanderburgh, and Warrick counties have been like America/Chicago.
-#
-# - Dearborn and Ohio counties have been like America/New_York.
-#
-# - Clark, Floyd, and Harrison counties have been like
-# America/Kentucky/Louisville.
-#
-# - Crawford, Daviess, Dubois, Knox, Martin, Perry, Pike, Pulaski, Starke,
-# and Switzerland counties have their own time zone histories as noted below.
-#
-# Shanks partitioned Indiana into 345 regions, each with its own time history,
-# and wrote "Even newspaper reports present contradictory information."
-# Those Hoosiers! Such a flighty and changeable people!
-# Fortunately, most of the complexity occurred before our cutoff date of 1970.
-#
-# Other than Indianapolis, the Indiana place names are so nondescript
-# 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 (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 a.m. EST Sunday, April 2, 2006, which is the
-# changeover date from standard time to Daylight Saving Time."
-# 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
-# going to switch from Central to Eastern Time on March 11, 2007....
-# http://www.indystar.com/apps/pbcs.dll/article?AID=/20070207/LOCAL190108/702070524/0/LOCAL
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-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
- -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
- -5:00 - EST 1969
- -5:00 US E%sT 1971
- -5:00 - EST 2006
- -5:00 US E%sT
-#
-# Eastern Crawford County, Indiana, left its clocks alone in 1974,
-# as well as from 1976 through 2005.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-Rule Marengo 1951 only - Apr lastSun 2:00 1:00 D
-Rule Marengo 1951 only - Sep lastSun 2:00 0 S
-Rule Marengo 1954 1960 - Apr lastSun 2:00 1:00 D
-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
- -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 1976
- -5:00 - EST 2006
- -5:00 US E%sT
-#
-# Daviess, Dubois, Knox, and Martin Counties, Indiana,
-# switched from eastern to central time in April 2006, then switched back
-# in November 2007.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-Rule Vincennes 1946 only - Apr lastSun 2:00 1:00 D
-Rule Vincennes 1946 only - Sep lastSun 2:00 0 S
-Rule Vincennes 1953 1954 - Apr lastSun 2:00 1:00 D
-Rule Vincennes 1953 1959 - Sep lastSun 2:00 0 S
-Rule Vincennes 1955 only - May 1 0:00 1:00 D
-Rule Vincennes 1956 1963 - Apr lastSun 2:00 1:00 D
-Rule Vincennes 1960 only - Oct lastSun 2:00 0 S
-Rule Vincennes 1961 only - Sep lastSun 2:00 0 S
-Rule Vincennes 1962 1963 - Oct lastSun 2:00 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Indiana/Vincennes -5:50:07 - LMT 1883 Nov 18 12:09:53
- -6:00 US C%sT 1946
- -6:00 Vincennes C%sT 1964 Apr 26 2:00
- -5:00 - EST 1969
- -5:00 US E%sT 1971
- -5:00 - EST 2006 Apr 2 2:00
- -6:00 US C%sT 2007 Nov 4 2:00
- -5:00 US E%sT
-#
-# Perry County, Indiana, switched from eastern to central time in April 2006.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-Rule Perry 1946 only - Apr lastSun 2:00 1:00 D
-Rule Perry 1946 only - Sep lastSun 2:00 0 S
-Rule Perry 1953 1954 - Apr lastSun 2:00 1:00 D
-Rule Perry 1953 1959 - Sep lastSun 2:00 0 S
-Rule Perry 1955 only - May 1 0:00 1:00 D
-Rule Perry 1956 1963 - Apr lastSun 2:00 1:00 D
-Rule Perry 1960 only - Oct lastSun 2:00 0 S
-Rule Perry 1961 only - Sep lastSun 2:00 0 S
-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
- -5:00 - EST 1969
- -5:00 US E%sT 1971
- -5:00 - EST 2006 Apr 2 2:00
- -6:00 US C%sT
-#
-# Pike County, Indiana moved from central to eastern time in 1977,
-# then switched back in 2006, then switched back again in 2007.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-Rule Pike 1955 only - May 1 0:00 1:00 D
-Rule Pike 1955 1960 - Sep lastSun 2:00 0 S
-Rule Pike 1956 1964 - Apr lastSun 2:00 1:00 D
-Rule Pike 1961 1964 - Oct lastSun 2:00 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Indiana/Petersburg -5:49:07 - LMT 1883 Nov 18 12:10:53
- -6:00 US C%sT 1955
- -6:00 Pike C%sT 1965 Apr 25 2:00
- -5:00 - EST 1966 Oct 30 2:00
- -6:00 US C%sT 1977 Oct 30 2:00
- -5:00 - EST 2006 Apr 2 2:00
- -6:00 US C%sT 2007 Nov 4 2:00
- -5:00 US E%sT
-#
-# Starke County, Indiana moved from central to eastern time in 1991,
-# then switched back in 2006.
-# From Arthur David Olson (1991-10-28):
-# An article on page A3 of the Sunday, 1991-10-27 Washington Post
-# notes that Starke County switched from Central time to Eastern time as of
-# 1991-10-27.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-Rule Starke 1947 1961 - Apr lastSun 2:00 1:00 D
-Rule Starke 1947 1954 - Sep lastSun 2:00 0 S
-Rule Starke 1955 1956 - Oct lastSun 2:00 0 S
-Rule Starke 1957 1958 - Sep lastSun 2:00 0 S
-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 US C%sT
-#
-# Pulaski County, Indiana, switched from eastern to central time in
-# April 2006 and then switched back in March 2007.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-Rule Pulaski 1946 1960 - Apr lastSun 2:00 1:00 D
-Rule Pulaski 1946 1954 - Sep lastSun 2:00 0 S
-Rule Pulaski 1955 1956 - Oct lastSun 2:00 0 S
-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
- -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 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
- -5:00 - EST 1969
- -5:00 US E%sT 1973
- -5:00 - EST 2006
- -5:00 US E%sT
-
-# From Paul Eggert (2018-03-20):
-# The Louisville & Nashville Railroad's 1883-11-18 change occurred at
-# 10:00 old local time; train were supposed to come to a standstill
-# for precisely 18 minutes. See Bartky Fig. 1 (page 50). It is not
-# clear how this matched civil time in Louisville, so for now continue
-# to assume Louisville switched at noon new local time, like New York.
-#
-# Part of Kentucky left its clocks alone in 1974.
-# This also includes Clark, Floyd, and Harrison counties in Indiana.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-Rule Louisville 1921 only - May 1 2:00 1:00 D
-Rule Louisville 1921 only - Sep 1 2:00 0 S
-Rule Louisville 1941 1961 - Apr lastSun 2:00 1:00 D
-Rule Louisville 1941 only - Sep lastSun 2:00 0 S
-Rule Louisville 1946 only - Jun 2 2:00 0 S
-Rule Louisville 1950 1955 - Sep lastSun 2:00 0 S
-Rule Louisville 1956 1960 - Oct lastSun 2:00 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-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
- -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
-#
-# Wayne County, Kentucky
-#
-# 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
-# taken action, the majority of respondents to a poll conducted there in
-# August indicated they would like to change to "fast time" also.
-# The three Lake Cumberland counties are the farthest east of any U.S.
-# location in the Central time zone.
-#
-# From Rich Wales (2000-08-29):
-# After prolonged debate, and despite continuing deep differences of opinion,
-# Wayne County (central Kentucky) is switching from Central (-0600) to Eastern
-# (-0500) time. They won't "fall back" this year. See Sara Shipley,
-# The difference an hour makes, Nando Times (2000-08-29 15:33 -0400).
-#
-# From Paul Eggert (2001-07-16):
-# The final rule was published in the
-# Federal Register 65, 160 (2000-08-17), pp 50154-50158.
-# https://www.gpo.gov/fdsys/pkg/FR-2000-08-17/html/00-20854.htm
-#
-Zone America/Kentucky/Monticello -5:39:24 - LMT 1883 Nov 18 12:20:36
- -6:00 US C%sT 1946
- -6:00 - CST 1968
- -6:00 US C%sT 2000 Oct 29 2:00
- -5:00 US E%sT
-
-
-# From Rives McDow (2000-08-30):
-# Here ... are all the changes in the US since 1985.
-# Kearny County, KS (put all of county on central;
-# previously split between MST and CST) ... 1990-10
-# Starke County, IN (from CST to EST) ... 1991-10
-# Oliver County, ND (from MST to CST) ... 1992-10
-# West Wendover, NV (from PST TO MST) ... 1999-10
-# Wayne County, KY (from CST to EST) ... 2000-10
-#
-# From Paul Eggert (2001-07-17):
-# We don't know where the line used to be within Kearny County, KS,
-# so omit that change for now.
-# See America/Indiana/Knox for the Starke County, IN change.
-# 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), pp 56705-56707.
-# https://www.gpo.gov/fdsys/pkg/FR-1999-10-21/html/99-27240.htm
-# 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.
-
-# Michigan
-#
-# From Bob Devine (1988-01-28):
-# Michigan didn't observe DST from 1968 to 1973.
-#
-# From Paul Eggert (1999-03-31):
-# Shanks writes that Michigan started using standard time on 1885-09-18,
-# but Howse writes (pp 124-125, referring to Popular Astronomy, 1901-01)
-# that Detroit kept
-#
-# local time until 1900 when the City Council decreed that clocks should
-# be put back twenty-eight minutes to Central Standard Time. Half the
-# city obeyed, half refused. After considerable debate, the decision
-# was rescinded and the city reverted to Sun time. A derisive offer to
-# erect a sundial in front of the city hall was referred to the
-# Committee on Sewers. Then, in 1905, Central time was adopted
-# by city vote.
-#
-# This story is too entertaining to be false, so go with Howse over Shanks.
-#
-# From Paul Eggert (2001-03-06):
-# Garland (1927) writes "Cleveland and Detroit advanced their clocks
-# one hour in 1914." This change is not in Shanks. We have no more
-# info, so omit this for now.
-#
-# From Paul Eggert (2017-07-26):
-# Although Shanks says Detroit observed DST in 1967 from 06-14 00:01
-# until 10-29 00:01, I now see multiple reports that this is incorrect.
-# For example, according to a 50-year anniversary report about the 1967
-# Detroit riots and a major-league doubleheader on 1967-07-23, "By the time
-# the last fly ball of the doubleheader settled into the glove of leftfielder
-# Lenny Green, it was after 7 p.m. Detroit did not observe daylight saving
-# time, so light was already starting to fail. Twilight was made even deeper
-# by billowing columns of smoke that ascended in an unbroken wall north of the
-# ballpark." See: Dow B. Detroit '67: As violence unfolded, Tigers played two
-# at home vs. Yankees. Detroit Free Press 2017-07-23.
-# https://www.freep.com/story/sports/mlb/tigers/2017/07/23/detroit-tigers-1967-riot-new-york-yankees/499951001/
-#
-# Most of Michigan observed DST from 1973 on, but was a bit late in 1975.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-Rule Detroit 1948 only - Apr lastSun 2:00 1:00 D
-Rule Detroit 1948 only - Sep 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
- -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 US E%sT
-#
-# Dickinson, Gogebic, Iron, and Menominee Counties, Michigan,
-# switched from EST to CST/CDT in 1973.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-Rule Menominee 1946 only - Apr lastSun 2:00 1:00 D
-Rule Menominee 1946 only - Sep lastSun 2:00 0 S
-Rule Menominee 1966 only - Apr lastSun 2:00 1:00 D
-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 US C%sT
-
-# Navassa
-# administered by the US Fish and Wildlife Service
-# claimed by US under the provisions of the 1856 Guano Islands Act
-# also claimed by Haiti
-# occupied 1857/1900 by the Navassa Phosphate Co
-# US lighthouse 1917/1996-09
-# currently uninhabited
-# see Mark Fineman, "An Isle Rich in Guano and Discord",
-# _Los Angeles Times_ (1998-11-10), A1, A10; it cites
-# Jimmy Skaggs, _The Great Guano Rush_ (1994).
-
-################################################################################
-
-
-# From Paul Eggert (2017-02-10):
-#
-# Unless otherwise specified, the source for data through 1990 is:
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
-# Unfortunately this book contains many errors and cites no sources.
-#
-# Many years ago Gwillim Law wrote that a good source
-# for time zone data was the International Air Transport
-# Association's Standard Schedules Information Manual (IATA SSIM),
-# published semiannually. Law sent in several helpful summaries
-# of the IATA's data after 1990. Except where otherwise noted,
-# IATA SSIM is the source for entries after 1990.
-#
-# Other sources occasionally used include:
-#
-# Edward W. Whitman, World Time Differences,
-# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated),
-# which I found in the UCLA library.
-#
-# William Willett, The Waste of Daylight, 19th edition
-# <http://cs.ucla.edu/~eggert/The-Waste-of-Daylight-19th.pdf>
-# [PDF] (1914-03)
-#
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
-# <https://www.jstor.org/stable/1774359>.
-#
-# See the 'europe' file for Greenland.
-
-# Canada
-
-# 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 saving time
-# offset French English French English
-# -2:30 - - HAT NDT
-# -3 - - HAA ADT
-# -3:30 HNT NST - -
-# -4 HNA AST HAE EDT
-# -5 HNE EST HAC CDT
-# -6 HNC CST HAR MDT
-# -7 HNR MST HAP PDT
-# -8 HNP PST HAY YDT
-# -9 HNY YST - -
-#
-# HN: Heure Normale ST: Standard Time
-# HA: Heure Avancée DT: Daylight saving Time
-#
-# A: de l'Atlantique Atlantic
-# C: du Centre Central
-# E: de l'Est Eastern
-# M: Mountain
-# N: Newfoundland
-# P: du Pacifique Pacific
-# R: des Rocheuses
-# T: de Terre-Neuve
-# Y: du Yukon Yukon
-#
-# From Paul Eggert (1994-11-22):
-# Alas, this sort of thing must be handled by localization software.
-
-# 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,
-# 2007-03-01):
-# The British Columbia government announced yesterday that it will
-# adjust daylight savings next year to align with changes in the
-# U.S. and the rest of Canada....
-# https://archive.news.gov.bc.ca/releases/news_releases_2005-2009/2006AG0014-000330.htm
-# ...
-# Nova Scotia
-# Daylight saving time will be extended by four weeks starting in 2007....
-# https://www.novascotia.ca/just/regulations/rg2/2006/ma1206.pdf
-#
-# [For New Brunswick] the new legislation dictates that the time change is to
-# be done at 02:00 instead of 00:01.
-# https://www.gnb.ca/0062/acts/BBA-2006/Chap-19.pdf
-# ...
-# Manitoba has traditionally changed the clock every fall at 03:00.
-# As of 2006, the transition is to take place one hour earlier at 02:00.
-# https://web2.gov.mb.ca/laws/statutes/ccsm/o030e.php
-# ...
-# [Alberta, Ontario, Quebec] will follow US rules.
-# http://www.qp.gov.ab.ca/documents/spring/CH03_06.CFM
-# http://www.e-laws.gov.on.ca/DBLaws/Source/Regs/English/2006/R06111_e.htm
-# http://www2.publicationsduquebec.gouv.qc.ca/dynamicSearch/telecharge.php?type=5&file=2006C39A.PDF
-# ...
-# P.E.I. will follow US rules....
-# http://www.assembly.pe.ca/bills/pdf_chapter/62/3/chapter-41.pdf
-# ...
-# Province of Newfoundland and Labrador....
-# http://www.hoa.gov.nl.ca/hoa/bills/Bill0634.htm
-# ...
-# Yukon
-# https://www.gov.yk.ca/legislation/regs/oic2006_127.pdf
-# ...
-# N.W.T. will follow US rules. Whoever maintains the government web site
-# does not seem to believe in bookmarks. To see the news release, click the
-# following link and search for "Daylight Savings Time Change". Press the
-# "Daylight Savings Time Change" link; it will fire off a popup using
-# JavaScript.
-# http://www.exec.gov.nt.ca/currentnews/currentPR.asp?mode=archive
-# ...
-# Nunavut
-# An amendment to the Interpretation Act was registered on February 19/2007....
-# http://action.attavik.ca/home/justice-gn/attach/2007/gaz02part2.pdf
-
-# From Paul Eggert (2014-10-18):
-# H. David Matthews and Mary Vincent's map
-# "It's about TIME", _Canadian Geographic_ (September-October 1998)
-# http://www.canadiangeographic.ca/Magazine/SO98/alacarte.asp
-# contains detailed boundaries for regions observing nonstandard
-# time and daylight saving time arrangements in Canada circa 1998.
-#
-# National Research Council Canada maintains info about time zones and DST.
-# https://www.nrc-cnrc.gc.ca/eng/services/time/time_zones.html
-# https://www.nrc-cnrc.gc.ca/eng/services/time/faq/index.html#Q5
-# Its unofficial information is often taken from Matthews and Vincent.
-
-# From Paul Eggert (2006-06-27):
-# For now, assume all of DST-observing Canada will fall into line with the
-# new US DST rules,
-
-# 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...'
-# '... The daylight saving scheme was dropped all over Canada at the same time,'
-# These statements refer to a transition from daylight time to standard time
-# that occurred nationally on Sunday October 27/1918. This transition was
-# also documented in the Saturday October 26/1918 edition of the Toronto Star.
-
-# In light of that evidence, we alter the date from the earlier believed
-# Oct 31, to Oct 27, 1918 (and Sunday is a more likely transition day
-# than Thursday) in all Canadian rulesets.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Canada 1918 only - Apr 14 2:00 1:00 D
-Rule Canada 1918 only - Oct 27 2:00 0 S
-Rule Canada 1942 only - Feb 9 2:00 1:00 W # War
-Rule Canada 1945 only - Aug 14 23:00u 1:00 P # Peace
-Rule Canada 1945 only - Sep 30 2:00 0 S
-Rule Canada 1974 1986 - Apr lastSun 2:00 1:00 D
-Rule Canada 1974 2006 - Oct lastSun 2:00 0 S
-Rule Canada 1987 2006 - Apr Sun>=1 2:00 1:00 D
-Rule Canada 2007 max - Mar Sun>=8 2:00 1:00 D
-Rule Canada 2007 max - Nov Sun>=1 2:00 0 S
-
-
-# Newfoundland and Labrador
-
-# From Paul Eggert (2017-10-14):
-# Legally Labrador should observe Newfoundland time; see:
-# McLeod J. Labrador time - legal or not? St. John's Telegram, 2017-10-07
-# http://www.thetelegram.com/news/local/labrador-time--legal-or-not-154860/
-# Matthews and Vincent (1998) write that the only part of Labrador
-# that follows the rules is the southeast corner, including Port Hope
-# Simpson and Mary's Harbour, but excluding, say, Black Tickle.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule StJohns 1917 only - Apr 8 2:00 1:00 D
-Rule StJohns 1917 only - Sep 17 2:00 0 S
-# Whitman gives 1919 Apr 5 and 1920 Apr 5; go with Shanks & Pottenger.
-Rule StJohns 1919 only - May 5 23:00 1:00 D
-Rule StJohns 1919 only - Aug 12 23:00 0 S
-# For 1931-1935 Whitman gives Apr same date; go with Shanks & Pottenger.
-Rule StJohns 1920 1935 - May Sun>=1 23:00 1:00 D
-Rule StJohns 1920 1935 - Oct lastSun 23:00 0 S
-# For 1936-1941 Whitman gives May Sun>=8 and Oct Sun>=1; go with Shanks &
-# Pottenger.
-Rule StJohns 1936 1941 - May Mon>=9 0:00 1:00 D
-Rule StJohns 1936 1941 - Oct Mon>=2 0:00 0 S
-# Whitman gives the following transitions:
-# 1942 03-01/12-31, 1943 05-30/09-05, 1944 07-10/09-02, 1945 01-01/10-07
-# but go with Shanks & Pottenger and assume they used Canadian rules.
-# For 1946-9 Whitman gives May 5,4,9,1 - Oct 1,5,3,2, and for 1950 he gives
-# Apr 30 - Sep 24; go with Shanks & Pottenger.
-Rule StJohns 1946 1950 - May Sun>=8 2:00 1:00 D
-Rule StJohns 1946 1950 - Oct Sun>=2 2:00 0 S
-Rule StJohns 1951 1986 - Apr lastSun 2:00 1:00 D
-Rule StJohns 1951 1959 - Sep lastSun 2:00 0 S
-Rule StJohns 1960 1986 - Oct lastSun 2:00 0 S
-# From Paul Eggert (2000-10-02):
-# INMS (2000-09-12) says that, since 1988 at least, Newfoundland switches
-# at 00:01 local time. For now, assume it started in 1987.
-
-# From Michael Pelley (2011-09-12):
-# We received today, Monday, September 12, 2011, notification that the
-# changes to the Newfoundland Standard Time Act have been proclaimed.
-# The change in the Act stipulates that the change from Daylight Savings
-# 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
-# Executive Council
-# Government of Newfoundland & Labrador
-
-Rule StJohns 1987 only - Apr Sun>=1 0:01 1:00 D
-Rule StJohns 1987 2006 - Oct lastSun 0:01 0 S
-Rule StJohns 1988 only - Apr Sun>=1 0:01 2:00 DD
-Rule StJohns 1989 2006 - Apr Sun>=1 0:01 1:00 D
-Rule StJohns 2007 2011 - Mar Sun>=8 0:01 1:00 D
-Rule StJohns 2007 2010 - Nov Sun>=1 0:01 0 S
-#
-# St John's has an apostrophe, but Posix file names can't have apostrophes.
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/St_Johns -3:30:52 - LMT 1884
- -3:30:52 StJohns N%sT 1918
- -3:30:52 Canada N%sT 1919
- -3:30:52 StJohns N%sT 1935 Mar 30
- -3:30 StJohns N%sT 1942 May 11
- -3:30 Canada N%sT 1946
- -3:30 StJohns N%sT 2011 Nov
- -3:30 Canada N%sT
-
-# most of east Labrador
-
-# The name 'Happy Valley-Goose Bay' is too long; use 'Goose Bay'.
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Goose_Bay -4:01:40 - LMT 1884 # Happy Valley-Goose Bay
- -3:30:52 - NST 1918
- -3:30:52 Canada N%sT 1919
- -3:30:52 - NST 1935 Mar 30
- -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
- -4:00 StJohns A%sT 2011 Nov
- -4:00 Canada A%sT
-
-
-# west Labrador, Nova Scotia, Prince Edward I
-
-# From Brian Inglis (2015-07-20):
-# From the historical weather station records available at:
-# https://weatherspark.com/history/28351/1971/Sydney-Nova-Scotia-Canada
-# Sydney shares the same time history as Glace Bay, so was
-# likely to be the same across the island....
-# Sydney, as the capital and most populous location, or Cape Breton, would
-# have been better names for the zone had we known this in 1996.
-
-# From Paul Eggert (2015-07-20):
-# Shanks & Pottenger write that since 1970 most of this region has been like
-# Halifax. Many locales did not observe peacetime DST until 1972;
-# the Cape Breton area, represented by Glace Bay, is the largest we know of
-# (Glace Bay was perhaps not the best name choice but no point changing now).
-# Shanks & Pottenger also write that Liverpool, NS was the only town
-# in Canada to observe DST in 1971 but not 1970; for now we'll assume
-# this is a typo.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Halifax 1916 only - Apr 1 0:00 1:00 D
-Rule Halifax 1916 only - Oct 1 0:00 0 S
-Rule Halifax 1920 only - May 9 0:00 1:00 D
-Rule Halifax 1920 only - Aug 29 0:00 0 S
-Rule Halifax 1921 only - May 6 0:00 1:00 D
-Rule Halifax 1921 1922 - Sep 5 0:00 0 S
-Rule Halifax 1922 only - Apr 30 0:00 1:00 D
-Rule Halifax 1923 1925 - May Sun>=1 0:00 1:00 D
-Rule Halifax 1923 only - Sep 4 0:00 0 S
-Rule Halifax 1924 only - Sep 15 0:00 0 S
-Rule Halifax 1925 only - Sep 28 0:00 0 S
-Rule Halifax 1926 only - May 16 0:00 1:00 D
-Rule Halifax 1926 only - Sep 13 0:00 0 S
-Rule Halifax 1927 only - May 1 0:00 1:00 D
-Rule Halifax 1927 only - Sep 26 0:00 0 S
-Rule Halifax 1928 1931 - May Sun>=8 0:00 1:00 D
-Rule Halifax 1928 only - Sep 9 0:00 0 S
-Rule Halifax 1929 only - Sep 3 0:00 0 S
-Rule Halifax 1930 only - Sep 15 0:00 0 S
-Rule Halifax 1931 1932 - Sep Mon>=24 0:00 0 S
-Rule Halifax 1932 only - May 1 0:00 1:00 D
-Rule Halifax 1933 only - Apr 30 0:00 1:00 D
-Rule Halifax 1933 only - Oct 2 0:00 0 S
-Rule Halifax 1934 only - May 20 0:00 1:00 D
-Rule Halifax 1934 only - Sep 16 0:00 0 S
-Rule Halifax 1935 only - Jun 2 0:00 1:00 D
-Rule Halifax 1935 only - Sep 30 0:00 0 S
-Rule Halifax 1936 only - Jun 1 0:00 1:00 D
-Rule Halifax 1936 only - Sep 14 0:00 0 S
-Rule Halifax 1937 1938 - May Sun>=1 0:00 1:00 D
-Rule Halifax 1937 1941 - Sep Mon>=24 0:00 0 S
-Rule Halifax 1939 only - May 28 0:00 1:00 D
-Rule Halifax 1940 1941 - May Sun>=1 0:00 1:00 D
-Rule Halifax 1946 1949 - Apr lastSun 2:00 1:00 D
-Rule Halifax 1946 1949 - Sep lastSun 2:00 0 S
-Rule Halifax 1951 1954 - Apr lastSun 2:00 1:00 D
-Rule Halifax 1951 1954 - Sep lastSun 2:00 0 S
-Rule Halifax 1956 1959 - Apr lastSun 2:00 1:00 D
-Rule Halifax 1956 1959 - Sep lastSun 2:00 0 S
-Rule Halifax 1962 1973 - Apr lastSun 2:00 1:00 D
-Rule Halifax 1962 1973 - Oct lastSun 2:00 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Halifax -4:14:24 - LMT 1902 Jun 15
- -4:00 Halifax A%sT 1918
- -4:00 Canada A%sT 1919
- -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
-Zone America/Glace_Bay -3:59:48 - LMT 1902 Jun 15
- -4:00 Canada A%sT 1953
- -4:00 Halifax A%sT 1954
- -4:00 - AST 1972
- -4:00 Halifax A%sT 1974
- -4:00 Canada A%sT
-
-# New Brunswick
-
-# From Paul Eggert (2007-01-31):
-# The Time Definition Act <http://www.gnb.ca/0062/PDF-acts/t-06.pdf>
-# says they changed at 00:01 through 2006, and
-# <http://www.canlii.org/nb/laws/sta/t-6/20030127/whole.html> makes it
-# clear that this was the case since at least 1993.
-# For now, assume it started in 1993.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Moncton 1933 1935 - Jun Sun>=8 1:00 1:00 D
-Rule Moncton 1933 1935 - Sep Sun>=8 1:00 0 S
-Rule Moncton 1936 1938 - Jun Sun>=1 1:00 1:00 D
-Rule Moncton 1936 1938 - Sep Sun>=1 1:00 0 S
-Rule Moncton 1939 only - May 27 1:00 1:00 D
-Rule Moncton 1939 1941 - Sep Sat>=21 1:00 0 S
-Rule Moncton 1940 only - May 19 1:00 1:00 D
-Rule Moncton 1941 only - May 4 1:00 1:00 D
-Rule Moncton 1946 1972 - Apr lastSun 2:00 1:00 D
-Rule Moncton 1946 1956 - Sep lastSun 2:00 0 S
-Rule Moncton 1957 1972 - Oct lastSun 2:00 0 S
-Rule Moncton 1993 2006 - Apr Sun>=1 0:01 1:00 D
-Rule Moncton 1993 2006 - Oct lastSun 0:01 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
- -5:00 - EST 1902 Jun 15
- -4:00 Canada A%sT 1933
- -4:00 Moncton A%sT 1942
- -4:00 Canada A%sT 1946
- -4:00 Moncton A%sT 1973
- -4:00 Canada A%sT 1993
- -4:00 Moncton A%sT 2007
- -4:00 Canada A%sT
-
-# Quebec
-
-# From Paul Eggert (2015-03-24):
-# See America/Toronto for most of Quebec, including Montreal.
-#
-# Matthews and Vincent (1998) also write that Quebec east of the -63
-# 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-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.
-# https://www.assnat.qc.ca/Media/Process.aspx?MediaId=ANQ.Vigie.Bll.DocumentGenerique_8845en
-# 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.
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Blanc-Sablon -3:48:28 - LMT 1884
- -4:00 Canada A%sT 1970
- -4:00 - AST
-
-# Ontario
-
-# From Paul Eggert (2006-07-09):
-# Shanks & Pottenger write that since 1970 most of Ontario has been like
-# Toronto.
-# Thunder Bay skipped DST in 1973.
-# Many smaller locales did not observe peacetime DST until 1974;
-# Nipigon (EST) and Rainy River (CST) are the largest that we know of.
-# Far west Ontario is like Winnipeg; far east Quebec is like Halifax.
-
-# From Mark Brader (2003-07-26):
-# [According to the Toronto Star] Orillia, Ontario, adopted DST
-# effective Saturday, 1912-06-22, 22:00; the article mentions that
-# Port Arthur (now part of Thunder Bay, Ontario) as well as Moose Jaw
-# 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
-# presumably that should be -07-06. (1912-06-19, -07-12; also letters
-# earlier in June).
-#
-# Kenora, Ontario, was to abandon DST on 1914-06-01 (-05-21).
-#
-# From Paul Eggert (2017-07-08):
-# For more on Orillia, see: Daubs K. Bold attempt at daylight saving
-# time became a comic failure in Orillia. Toronto Star 2017-07-08.
-# https://www.thestar.com/news/insight/2017/07/08/bold-attempt-at-daylight-saving-time-became-a-comic-failure-in-orillia.html
-
-# From Paul Eggert (1997-10-17):
-# 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)
-# 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.
-#
-# From Paul Eggert (2000-10-02):
-# Matthews and Vincent (1998) write that Atikokan, Pickle Lake, and
-# New Osnaburgh observe CST all year, that Big Trout Lake observes
-# CST/CDT, and that Upsala and Shebandowan observe EST/EDT, all in
-# violation of the official Ontario rules.
-#
-# From Paul Eggert (2006-07-09):
-# Chris Walton (2006-07-06) mentioned an article by Stephanie MacLellan in the
-# 2005-07-21 Chronicle-Journal, which said:
-#
-# The clocks in Atikokan stay set on standard time year-round.
-# This means they spend about half the time on central time and
-# the other half on eastern time.
-#
-# For the most part, the system works, Mayor Dennis Brown said.
-#
-# "The majority of businesses in Atikokan deal more with Eastern
-# Canada, but there are some that deal with Western Canada," he
-# said. "I don't see any changes happening here."
-#
-# Walton also writes "Supposedly Pickle Lake and Mishkeegogamang
-# [New Osnaburgh] follow the same practice."
-
-# From Garry McKinnon (2006-07-14) via Chris Walton:
-# I chatted with a member of my board who has an outstanding memory
-# and a long history in Atikokan (and in the telecom industry) and he
-# can say for certain that Atikokan has been practicing the current
-# time keeping since 1952, at least.
-
-# From Paul Eggert (2006-07-17):
-# Shanks & Pottenger say that Atikokan has agreed with Rainy River
-# ever since standard time was introduced, but the information from
-# McKinnon sounds more authoritative. For now, assume that Atikokan
-# switched to EST immediately after WWII era daylight saving time
-# ended. This matches the old (less-populous) America/Coral_Harbour
-# entry since our cutoff date of 1970, so we can move
-# America/Coral_Harbour to the 'backward' file.
-
-# From Mark Brader (2010-03-06):
-#
-# Currently the database has:
-#
-# # Ontario
-#
-# # From Paul Eggert (2006-07-09):
-# # Shanks & Pottenger write that since 1970 most of Ontario has been like
-# # Toronto.
-# # Thunder Bay skipped DST in 1973.
-# # Many smaller locales did not observe peacetime DST until 1974;
-# # Nipigon (EST) and Rainy River (CST) are the largest that we know of.
-#
-# In the (Toronto) Globe and Mail for Saturday, 1955-09-24, in the bottom
-# right corner of page 1, it says that Toronto will return to standard
-# time at 2 am Sunday morning (which agrees with the database), and that:
-#
-# The one-hour setback will go into effect throughout most of Ontario,
-# except in areas like Windsor which remains on standard time all year.
-#
-# Windsor is, of course, a lot larger than Nipigon.
-#
-# I only came across this incidentally. I don't know if Windsor began
-# observing DST when Detroit did, or in 1974, or on some other date.
-#
-# By the way, the article continues by noting that:
-#
-# Some cities in the United States have pushed the deadline back
-# three weeks and will change over from daylight saving in October.
-
-# From Arthur David Olson (2010-07-17):
-#
-# "Standard Time and Time Zones in Canada" appeared in
-# 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):
-#
-# A list of the places in Canada using daylight saving time would
-# require yearly revision. From information kindly furnished by
-# the provincial governments and by the postmasters in many cities
-# and towns, it is found that the following places used daylight sav-
-# ing in 1930. The information for the province of Quebec is definite,
-# for the other provinces only approximate:
-#
-# 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
-# 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 northwesterly part.
-# Manitoba Not used.
-# Saskatchewan In Regina only.
-# Alberta Not used.
-# British Columbia Not used.
-#
-# With some exceptions, the use of daylight saving may be said to be limited
-# to those cities and towns lying between Quebec city and Windsor, Ont.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Toronto 1919 only - Mar 30 23:30 1:00 D
-Rule Toronto 1919 only - Oct 26 0:00 0 S
-Rule Toronto 1920 only - May 2 2:00 1:00 D
-Rule Toronto 1920 only - Sep 26 0:00 0 S
-Rule Toronto 1921 only - May 15 2:00 1:00 D
-Rule Toronto 1921 only - Sep 15 2:00 0 S
-Rule Toronto 1922 1923 - May Sun>=8 2:00 1:00 D
-# Shanks & Pottenger say 1923-09-19; assume it's a typo and that "-16"
-# was meant.
-Rule Toronto 1922 1926 - Sep Sun>=15 2:00 0 S
-Rule Toronto 1924 1927 - May Sun>=1 2:00 1:00 D
-# The 1927-to-1939 rules can be expressed more simply as
-# Rule Toronto 1927 1937 - Sep Sun>=25 2:00 0 S
-# Rule Toronto 1928 1937 - Apr Sun>=25 2:00 1:00 D
-# Rule Toronto 1938 1940 - Apr lastSun 2:00 1:00 D
-# Rule Toronto 1938 1939 - Sep lastSun 2:00 0 S
-# The rules below avoid use of Sun>=25
-# (which pre-2004 versions of zic cannot handle).
-Rule Toronto 1927 1932 - Sep lastSun 2:00 0 S
-Rule Toronto 1928 1931 - Apr lastSun 2:00 1:00 D
-Rule Toronto 1932 only - May 1 2:00 1:00 D
-Rule Toronto 1933 1940 - Apr lastSun 2:00 1:00 D
-Rule Toronto 1933 only - Oct 1 2:00 0 S
-Rule Toronto 1934 1939 - Sep lastSun 2:00 0 S
-Rule Toronto 1945 1946 - Sep lastSun 2:00 0 S
-Rule Toronto 1946 only - Apr lastSun 2:00 1:00 D
-Rule Toronto 1947 1949 - Apr lastSun 0:00 1:00 D
-Rule Toronto 1947 1948 - Sep lastSun 0:00 0 S
-Rule Toronto 1949 only - Nov lastSun 0:00 0 S
-Rule Toronto 1950 1973 - Apr lastSun 2:00 1:00 D
-Rule Toronto 1950 only - Nov lastSun 2:00 0 S
-Rule Toronto 1951 1956 - Sep lastSun 2:00 0 S
-# Shanks & Pottenger say Toronto ended DST a week early in 1971,
-# namely on 1971-10-24, but Mark Brader wrote (2003-05-31) that this
-# is wrong, and that he had confirmed it by checking the 1971-10-30
-# Toronto Star, which said that DST was ending 1971-10-31 as usual.
-Rule Toronto 1957 1973 - Oct lastSun 2:00 0 S
-
-# From Paul Eggert (2003-07-27):
-# Willett (1914-03) writes (p. 17) "In the Cities of Fort William, and
-# Port Arthur, Ontario, the principle of the Bill has been in
-# operation for the past three years, and in the City of Moose Jaw,
-# Saskatchewan, for one year."
-
-# From David Bryan via Tory Tronrud, Director/Curator,
-# Thunder Bay Museum (2003-11-12):
-# There is some suggestion, however, that, by-law or not, daylight
-# savings time was being practiced in Fort William and Port Arthur
-# before 1909.... [I]n 1910, the line between the Eastern and Central
-# Time Zones was permanently moved about two hundred miles west to
-# include the Thunder Bay area.... When Canada adopted daylight
-# savings time in 1916, Fort William and Port Arthur, having done so
-# already, did not change their clocks.... During the Second World
-# War,... [t]he cities agreed to implement DST during the summer
-# months for the remainder of the war years.
-
-# 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 Canada E%sT 1946
- -5:00 Toronto E%sT 1974
- -5:00 Canada E%sT
-Zone America/Thunder_Bay -5:57:00 - LMT 1895
- -6:00 - CST 1910
- -5:00 - EST 1942
- -5:00 Canada E%sT 1970
- -5:00 Toronto E%sT 1973
- -5:00 - EST 1974
- -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 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 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
- -5:00 - EST
-
-
-# Manitoba
-
-# From Rob Douglas (2006-04-06):
-# the old Manitoba Time Act - as amended by Bill 2, assented to
-# March 27, 1987 ... said ...
-# "between two o'clock Central Standard Time in the morning of
-# the first Sunday of April of each year and two o'clock Central
-# Standard Time in the morning of the last Sunday of October next
-# following, one hour in advance of Central Standard Time."...
-# I believe that the English legislation [of the old time act] had
-# been assented to (March 22, 1967)....
-# Also, as far as I can tell, there was no order-in-council varying
-# the time of Daylight Saving Time for 2005 and so the provisions of
-# the 1987 version would apply - the changeover was at 2:00 Central
-# Standard Time (i.e. not until 3:00 Central Daylight Time).
-
-# From Paul Eggert (2006-04-10):
-# Shanks & Pottenger say Manitoba switched at 02:00 (not 02:00s)
-# starting 1966. Since 02:00s is clearly correct for 1967 on, assume
-# it was also 02:00s in 1966.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Winn 1916 only - Apr 23 0:00 1:00 D
-Rule Winn 1916 only - Sep 17 0:00 0 S
-Rule Winn 1918 only - Apr 14 2:00 1:00 D
-Rule Winn 1918 only - Oct 27 2:00 0 S
-Rule Winn 1937 only - May 16 2:00 1:00 D
-Rule Winn 1937 only - Sep 26 2:00 0 S
-Rule Winn 1942 only - Feb 9 2:00 1:00 W # War
-Rule Winn 1945 only - Aug 14 23:00u 1:00 P # Peace
-Rule Winn 1945 only - Sep lastSun 2:00 0 S
-Rule Winn 1946 only - May 12 2:00 1:00 D
-Rule Winn 1946 only - Oct 13 2:00 0 S
-Rule Winn 1947 1949 - Apr lastSun 2:00 1:00 D
-Rule Winn 1947 1949 - Sep lastSun 2:00 0 S
-Rule Winn 1950 only - May 1 2:00 1:00 D
-Rule Winn 1950 only - Sep 30 2:00 0 S
-Rule Winn 1951 1960 - Apr lastSun 2:00 1:00 D
-Rule Winn 1951 1958 - Sep lastSun 2:00 0 S
-Rule Winn 1959 only - Oct lastSun 2:00 0 S
-Rule Winn 1960 only - Sep lastSun 2:00 0 S
-Rule Winn 1963 only - Apr lastSun 2:00 1:00 D
-Rule Winn 1963 only - Sep 22 2:00 0 S
-Rule Winn 1966 1986 - Apr lastSun 2:00s 1:00 D
-Rule Winn 1966 2005 - Oct lastSun 2:00s 0 S
-Rule Winn 1987 2005 - Apr Sun>=1 2:00s 1:00 D
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Winnipeg -6:28:36 - LMT 1887 Jul 16
- -6:00 Winn C%sT 2006
- -6:00 Canada C%sT
-
-
-# Saskatchewan
-
-# From Mark Brader (2003-07-26):
-# The first actual adoption of DST in Canada was at the municipal
-# level. As the [Toronto] Star put it (1912-06-07), "While people
-# elsewhere have long been talking of legislation to save daylight,
-# the city of Moose Jaw [Saskatchewan] has acted on its own hook."
-# DST in Moose Jaw began on Saturday, 1912-06-01 (no time mentioned:
-# presumably late evening, as below), and would run until "the end of
-# the summer". The discrepancy between municipal time and railroad
-# time was noted.
-
-# From Paul Eggert (2003-07-27):
-# Willett (1914-03) notes that DST "has been in operation ... in the
-# City of Moose Jaw, Saskatchewan, for one year."
-
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger say that since 1970 this region has mostly been as Regina.
-# Some western towns (e.g. Swift Current) switched from MST/MDT to CST in 1972.
-# Other western towns (e.g. Lloydminster) are like Edmonton.
-# Matthews and Vincent (1998) write that Denare Beach and Creighton
-# are like Winnipeg, in violation of Saskatchewan law.
-
-# From W. Jones (1992-11-06):
-# The. . .below is based on information I got from our law library, the
-# provincial archives, and the provincial Community Services department.
-# A precise history would require digging through newspaper archives, and
-# since you didn't say what you wanted, I didn't bother.
-#
-# Saskatchewan is split by a time zone meridian (105W) and over the years
-# the boundary became pretty ragged as communities near it reevaluated
-# their affiliations in one direction or the other. In 1965 a provincial
-# referendum favoured legislating common time practices.
-#
-# On 15 April 1966 the Time Act (c. T-14, Revised Statutes of
-# Saskatchewan 1978) was proclaimed, and established that the eastern
-# part of Saskatchewan would use CST year round, that districts in
-# northwest Saskatchewan would by default follow CST but could opt to
-# follow Mountain Time rules (thus 1 hour difference in the winter and
-# zero in the summer), and that districts in southwest Saskatchewan would
-# by default follow MT but could opt to follow CST.
-#
-# It took a few years for the dust to settle (I know one story of a town
-# on one time zone having its school in another, such that a mom had to
-# serve her family lunch in two shifts), but presently it seems that only
-# a few towns on the border with Alberta (e.g. Lloydminster) follow MT
-# rules any more; all other districts appear to have used CST year round
-# since sometime in the 1960s.
-
-# From Chris Walton (2006-06-26):
-# The Saskatchewan time act which was last updated in 1996 is about 30 pages
-# long and rather painful to read.
-# http://www.qp.gov.sk.ca/documents/English/Statutes/Statutes/T14.pdf
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Regina 1918 only - Apr 14 2:00 1:00 D
-Rule Regina 1918 only - Oct 27 2:00 0 S
-Rule Regina 1930 1934 - May Sun>=1 0:00 1:00 D
-Rule Regina 1930 1934 - Oct Sun>=1 0:00 0 S
-Rule Regina 1937 1941 - Apr Sun>=8 0:00 1:00 D
-Rule Regina 1937 only - Oct Sun>=8 0:00 0 S
-Rule Regina 1938 only - Oct Sun>=1 0:00 0 S
-Rule Regina 1939 1941 - Oct Sun>=8 0:00 0 S
-Rule Regina 1942 only - Feb 9 2:00 1:00 W # War
-Rule Regina 1945 only - Aug 14 23:00u 1:00 P # Peace
-Rule Regina 1945 only - Sep lastSun 2:00 0 S
-Rule Regina 1946 only - Apr Sun>=8 2:00 1:00 D
-Rule Regina 1946 only - Oct Sun>=8 2:00 0 S
-Rule Regina 1947 1957 - Apr lastSun 2:00 1:00 D
-Rule Regina 1947 1957 - Sep lastSun 2:00 0 S
-Rule Regina 1959 only - Apr lastSun 2:00 1:00 D
-Rule Regina 1959 only - Oct lastSun 2:00 0 S
-#
-Rule Swift 1957 only - Apr lastSun 2:00 1:00 D
-Rule Swift 1957 only - Oct lastSun 2:00 0 S
-Rule Swift 1959 1961 - Apr lastSun 2:00 1:00 D
-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
- -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 Regina M%sT 1950
- -7:00 Swift M%sT 1972 Apr lastSun 2:00
- -6:00 - CST
-
-
-# Alberta
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Edm 1918 1919 - Apr Sun>=8 2:00 1:00 D
-Rule Edm 1918 only - Oct 27 2:00 0 S
-Rule Edm 1919 only - May 27 2:00 0 S
-Rule Edm 1920 1923 - Apr lastSun 2:00 1:00 D
-Rule Edm 1920 only - Oct lastSun 2:00 0 S
-Rule Edm 1921 1923 - Sep lastSun 2:00 0 S
-Rule Edm 1942 only - Feb 9 2:00 1:00 W # War
-Rule Edm 1945 only - Aug 14 23:00u 1:00 P # Peace
-Rule Edm 1945 only - Sep lastSun 2:00 0 S
-Rule Edm 1947 only - Apr lastSun 2:00 1:00 D
-Rule Edm 1947 only - Sep lastSun 2:00 0 S
-Rule Edm 1967 only - Apr lastSun 2:00 1:00 D
-Rule Edm 1967 only - Oct lastSun 2:00 0 S
-Rule Edm 1969 only - Apr lastSun 2:00 1:00 D
-Rule Edm 1969 only - Oct lastSun 2:00 0 S
-Rule Edm 1972 1986 - Apr lastSun 2:00 1:00 D
-Rule Edm 1972 2006 - Oct lastSun 2:00 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Edmonton -7:33:52 - LMT 1906 Sep
- -7:00 Edm M%sT 1987
- -7:00 Canada M%sT
-
-
-# British Columbia
-
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that since 1970 most of this region has
-# been like Vancouver.
-# Dawson Creek uses MST. Much of east BC is like Edmonton.
-# Matthews and Vincent (1998) write that Creston is like Dawson Creek.
-
-# It seems though that (re: Creston) is not entirely correct:
-
-# From Chris Walton (2011-12-01):
-# There are two areas within the Canadian province of British Columbia
-# that do not currently observe daylight saving:
-# a) The Creston Valley (includes the town of Creston and surrounding area)
-# b) The eastern half of the Peace River Regional District
-# (includes the cities of Dawson Creek and Fort St. John)
-
-# 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 UT-7 for 93 years.
-# Dawson Creek, on the other hand, changed its clocks as recently as April 1972.
-
-# 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.
-# 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.
-# 3. June 1918: switch to Pacific Daylight Time (GMT-7)
-# Exact date in June unknown; Sunday June 2 is a reasonable guess.
-# note 1:
-# On Oct 27/1918 when daylight saving ended in the rest of Canada,
-# Creston did not change its clocks.
-# note 2:
-# During WWII when the Federal Government legislated a mandatory clock change,
-# Creston did not oblige.
-# note 3:
-# 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
-# summer time to cause the offset to be -7:00, the same as it had been before
-# the change. It can be argued that the timezone abbreviation during this
-# period should be PDT rather than MST, but that doesn't seem important enough
-# (to anyone) to further complicate the rules.
-
-# The transition dates (and times) are guesses.
-
-# From Matt Johnson (2015-09-21):
-# Fort Nelson, BC, Canada will cancel DST this year. So while previously they
-# were aligned with America/Vancouver, they're now aligned with
-# America/Dawson_Creek.
-# http://www.northernrockies.ca/EN/meta/news/archives/2015/northern-rockies-time-change.html
-#
-# From Tim Parenti (2015-09-23):
-# This requires a new zone for the Northern Rockies Regional Municipality,
-# America/Fort_Nelson. The resolution of 2014-12-08 was reached following a
-# 2014-11-15 poll with nearly 75% support. Effectively, the municipality has
-# been on MST (-0700) like Dawson Creek since it advanced its clocks on
-# 2015-03-08.
-#
-# From Paul Eggert (2015-09-23):
-# Shanks says Fort Nelson did not observe DST in 1946, unlike Vancouver.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Vanc 1918 only - Apr 14 2:00 1:00 D
-Rule Vanc 1918 only - Oct 27 2:00 0 S
-Rule Vanc 1942 only - Feb 9 2:00 1:00 W # War
-Rule Vanc 1945 only - Aug 14 23:00u 1:00 P # Peace
-Rule Vanc 1945 only - Sep 30 2:00 0 S
-Rule Vanc 1946 1986 - Apr lastSun 2:00 1:00 D
-Rule Vanc 1946 only - Oct 13 2:00 0 S
-Rule Vanc 1947 1961 - Sep lastSun 2:00 0 S
-Rule Vanc 1962 2006 - Oct lastSun 2:00 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Vancouver -8:12:28 - LMT 1884
- -8:00 Vanc P%sT 1987
- -8:00 Canada P%sT
-Zone America/Dawson_Creek -8:00:56 - LMT 1884
- -8:00 Canada P%sT 1947
- -8:00 Vanc P%sT 1972 Aug 30 2:00
- -7:00 - MST
-Zone America/Fort_Nelson -8:10:47 - LMT 1884
- -8:00 Vanc P%sT 1946
- -8:00 - PST 1947
- -8:00 Vanc P%sT 1987
- -8:00 Canada P%sT 2015 Mar 8 2:00
- -7:00 - MST
-Zone America/Creston -7:46:04 - LMT 1884
- -7:00 - MST 1916 Oct 1
- -8:00 - PST 1918 Jun 2
- -7:00 - MST
-
-# Northwest Territories, Nunavut, Yukon
-
-# From Paul Eggert (2006-03-22):
-# Dawson switched to PST in 1973. Inuvik switched to MST in 1979.
-# Mathew Englander (1996-10-07) gives the following refs:
-# * 1967. Paragraph 28(34)(g) of the Interpretation Act, S.C. 1967-68,
-# c. 7 defines Yukon standard time as UTC-9....
-# see Interpretation Act, R.S.C. 1985, c. I-21, s. 35(1).
-# [https://www.canlii.org/en/ca/laws/stat/rsc-1985-c-i-21/latest/rsc-1985-c-i-21.html]
-# * C.O. 1973/214 switched Yukon to PST on 1973-10-28 00:00.
-# * O.I.C. 1980/02 established DST.
-# * O.I.C. 1987/056 changed DST to Apr firstSun 2:00 to Oct lastSun 2:00.
-
-# From Brian Inglis (2015-04-14):
-#
-# I tried to trace the history of Yukon time and found the following
-# regulations, giving the reference title and URL if found, regulation name,
-# and relevant quote if available. Each regulation specifically revokes its
-# predecessor. The final reference is to the current Interpretation Act
-# authorizing and resulting from these regulatory changes.
-#
-# Only recent regulations were retrievable via Yukon government site search or
-# index, and only some via Canadian legal sources. Other sources used include
-# articles titled "Standard Time and Time Zones in Canada" from JRASC via ADS
-# Abstracts, cited by ADO for 1932 ..., and updated versions from 1958 and
-# 1970 quoted below; each article includes current extracts from provincial
-# and territorial ST and DST regulations at the end, summaries and details of
-# standard times and daylight saving time at many locations across Canada,
-# with time zone maps, tables and calculations for Canadian Sunrise, Sunset,
-# and LMST; they also cover many countries and global locations, with a chart
-# and table showing current Universal Time offsets, and may be useful as
-# another source of information for 1970 and earlier.
-#
-# * Standard Time and Time Zones in Canada; Smith, C.C.; JRASC, Vol. 26,
-# pp.49-77; February 1932; SAO/NASA Astrophysics Data System (ADS)
-# http://adsabs.harvard.edu/abs/1932JRASC..26...49S from p.75:
-# Yukon Interpretation Ordinance
-# Yukon standard time is the local mean time at the one hundred and
-# thirty-fifth meridian.
-#
-# * Standard Time and Time Zones in Canada; Smith, C.C.; Thomson, Malcolm M.;
-# JRASC, Vol. 52, pp.193-223; October 1958; SAO/NASA Astrophysics Data System
-# (ADS) http://adsabs.harvard.edu/abs/1958JRASC..52..193S from pp.220-1:
-# Yukon Interpretation Ordinance, 1955, Chap. 16.
-#
-# (1) Subject to this section, standard time shall be reckoned as nine
-# hours behind Greenwich Time and called Yukon Standard Time.
-#
-# (2) Notwithstanding subsection (1), the Commissioner may make regulations
-# varying the manner of reckoning standard time.
-#
-# * Yukon Territory Commissioner's Order 1966-20 Interpretation Ordinance
-# http://? - no online source found
-#
-# * Standard Time and Time Zones in Canada; Thomson, Malcolm M.; JRASC,
-# Vol. 64, pp.129-162; June 1970; SAO/NASA Astrophysics Data System (ADS)
-# http://adsabs.harvard.edu/abs/1970JRASC..64..129T from p.156: Yukon
-# Territory Commissioner's Order 1967-59 Interpretation Ordinance ...
-#
-# 1. Commissioner's Order 1966-20 dated at Whitehorse in the Yukon
-# Territory on 27th January, 1966, is hereby revoked.
-#
-# 2. Yukon (East) Standard Time as defined by section 36 of the
-# Interpretation Ordinance from and after mid-night on the 28th day of May,
-# 1967 shall be reckoned in the same manner as Pacific Standard Time, that
-# is to say, eight hours behind Greenwich Time in the area of the Yukon
-# Territory lying east of the 138th degree longitude west.
-#
-# 3. In the remainder of the Territory, lying west of the 138th degree
-# longitude west, Yukon (West) Standard Time shall be reckoned as nine
-# hours behind Greenwich Time.
-#
-# * Yukon Standard Time defined as Pacific Standard Time, YCO 1973/214
-# https://www.canlii.org/en/yk/laws/regu/yco-1973-214/latest/yco-1973-214.html
-# C.O. 1973/214 INTERPRETATION ACT ...
-#
-# 1. Effective October 28, 1973 Commissioner's Order 1967/59 is hereby
-# revoked.
-#
-# 2. Yukon Standard Time as defined by section 36 of the Interpretation
-# Act from and after midnight on the twenty-eighth day of October, 1973
-# shall be reckoned in the same manner as Pacific Standard Time, that is
-# to say eight hours behind Greenwich Time.
-#
-# * O.I.C. 1980/02 INTERPRETATION ACT
-# http://? - no online source found
-#
-# * Yukon Daylight Saving Time, YOIC 1987/56
-# https://www.canlii.org/en/yk/laws/regu/yoic-1987-56/latest/yoic-1987-56.html
-# O.I.C. 1987/056 INTERPRETATION ACT ...
-#
-# In every year between
-# (a) two o'clock in the morning in the first Sunday in April, and
-# (b) two o'clock in the morning in the last Sunday in October,
-# Standard Time shall be reckoned as seven hours behind Greenwich Time and
-# called Yukon Daylight Saving Time.
-# ...
-# Dated ... 9th day of March, A.D., 1987.
-#
-# * Yukon Daylight Saving Time 2006, YOIC 2006/127
-# https://www.canlii.org/en/yk/laws/regu/yoic-2006-127/latest/yoic-2006-127.html
-# O.I.C. 2006/127 INTERPRETATION ACT ...
-#
-# 1. In Yukon each year the time for general purposes shall be 7 hours
-# behind Greenwich mean time during the period commencing at two o'clock
-# in the forenoon on the second Sunday of March and ending at two o'clock
-# in the forenoon on the first Sunday of November and shall be called
-# Yukon Daylight Saving Time.
-#
-# 2. Order-in-Council 1987/56 is revoked.
-#
-# 3. This order comes into force January 1, 2007.
-#
-# * Interpretation Act, RSY 2002, c 125
-# https://www.canlii.org/en/yk/laws/stat/rsy-2002-c-125/latest/rsy-2002-c-125.html
-
-# 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
-# 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.
-
-# From Rives McDow (1999-11-08):
-# On October 31, when the rest of Nunavut went to Central time,
-# Pangnirtung wobbled. Here is the result of their wobble:
-#
-# The following businesses and organizations in Pangnirtung use Central Time:
-#
-# First Air, Power Corp, Nunavut Construction, Health Center, RCMP,
-# Eastern Arctic National Parks, A & D Specialist
-#
-# The following businesses and organizations in Pangnirtung use Eastern Time:
-#
-# Hamlet office, All other businesses, Both schools, Airport operator
-#
-# This has made for an interesting situation there, which warranted the news.
-# No one there that I spoke with seems concerned, or has plans to
-# change the local methods of keeping time, as it evidently does not
-# really interfere with any activities or make things difficult locally.
-# They plan to celebrate New Year's turn-over twice, one hour apart,
-# so it appears that the situation will last at least that long.
-# The Nunavut Intergovernmental Affairs hopes that they will "come to
-# their senses", but the locals evidently don't see any problem with
-# the current state of affairs.
-
-# From Michaela Rodrigue, writing in the
-# Nunatsiaq News (1999-11-19):
-# http://www.nunatsiaqonline.ca/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]
-# made the switch to central time on Saturday, Nov. 6.
-
-# From Paul Eggert (2000-10-02):
-# Matthews and Vincent (1998) say the following, but we lack histories
-# for these potential new Zones.
-#
-# The Canadian Forces station at Alert uses Eastern Time while the
-# handful of residents at the Eureka weather station [in the Central
-# zone] skip daylight savings. Baffin Island, which is crossed by the
-# Central, Eastern and Atlantic Time zones only uses Eastern Time.
-# Gjoa Haven, Taloyoak and Pelly Bay all use Mountain instead of
-# Central Time and Southampton Island [in the Central zone] is not
-# required to use daylight savings.
-
-# From <http://www.nunatsiaqonline.ca/archives/nunavut001130/nvt21110_02.html>
-# Nunavut now has two time zones (2000-11-10):
-# The Nunavut government would allow its employees in Kugluktuk and
-# Cambridge Bay to operate on central time year-round, putting them
-# one hour behind the rest of Nunavut for six months during the winter.
-# At the end of October the two communities had rebelled against
-# Nunavut's unified time zone, refusing to shift to eastern time with
-# the rest of the territory for the winter. Cambridge Bay remained on
-# central time, while Kugluktuk, even farther west, reverted to
-# mountain time, which they had used before the advent of Nunavut's
-# unified time zone in 1999.
-#
-# From Rives McDow (2001-01-20), quoting the Nunavut government:
-# The preceding decision came into effect at midnight, Saturday Nov 4, 2000.
-
-# From Paul Eggert (2000-12-04):
-# Let's just keep track of the official times for now.
-
-# From Rives McDow (2001-03-07):
-# The premier of Nunavut has issued a ministerial statement advising
-# that effective 2001-04-01, the territory of Nunavut will revert
-# back to three time zones (mountain, central, and eastern). Of the
-# cities in Nunavut, Coral Harbor is the only one that I know of that
-# has said it will not observe dst, staying on EST year round. I'm
-# checking for more info, and will get back to you if I come up with
-# more.
-# [Also see <http://www.nunatsiaq.com/nunavut/nvt10309_06.html> (2001-03-09).]
-
-# From Gwillim Law (2005-05-21):
-# According to ...
-# http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp
-# (from a 1998 Canadian Geographic article), the de facto and de jure time
-# for Southampton Island (at the north end of Hudson Bay) is UTC-5 all year
-# round. Using Google, it's easy to find other websites that confirm this.
-# I wasn't able to find how far back this time regimen goes, but since it
-# predates the creation of Nunavut, it probably goes back many years....
-# The Inuktitut name of Coral Harbour is Sallit, but it's rarely used.
-#
-# From Paul Eggert (2014-10-17):
-# For lack of better information, assume that Southampton Island observed
-# daylight saving only during wartime. Gwillim Law's email also
-# mentioned maps now maintained by National Research Council Canada;
-# see above for an up-to-date link.
-
-# From Chris Walton (2007-03-01):
-# ... the community of Resolute (located on Cornwallis Island in
-# Nunavut) moved from Central Time to Eastern Time last November.
-# Basically the community did not change its clocks at the end of
-# daylight saving....
-# http://www.nnsl.com/frames/newspapers/2006-11/nov13_06none.html
-
-# From Chris Walton (2011-03-21):
-# Back in 2007 I initiated the creation of a new "zone file" for Resolute
-# Bay. Resolute Bay is a small community located about 900km north of
-# the Arctic Circle. The zone file was required because Resolute Bay had
-# decided to use UTC-5 instead of UTC-6 for the winter of 2006-2007.
-#
-# According to new information which I received last week, Resolute Bay
-# went back to using UTC-6 in the winter of 2007-2008...
-#
-# On March 11/2007 most of Canada went onto daylight saving. On March
-# 14/2007 I phoned the Resolute Bay hamlet office to do a "time check." I
-# talked to somebody that was both knowledgeable and helpful. I was able
-# to confirm that Resolute Bay was still operating on UTC-5. It was
-# explained to me that Resolute Bay had been on the Eastern Time zone
-# (EST) in the winter, and was now back on the Central Time zone (CDT).
-# i.e. the time zone had changed twice in the last year but the clocks
-# had not moved. The residents had to know which time zone they were in
-# so they could follow the correct TV schedule...
-#
-# On Nov 02/2008 most of Canada went onto standard time. On Nov 03/2008 I
-# phoned the Resolute Bay hamlet office...[D]ue to the challenging nature
-# of the phone call, I decided to seek out an alternate source of
-# information. I found an e-mail address for somebody by the name of
-# Stephanie Adams whose job was listed as "Inns North Support Officer for
-# Arctic Co-operatives." I was under the impression that Stephanie lived
-# and worked in Resolute Bay...
-#
-# On March 14/2011 I phoned the hamlet office again. I was told that
-# Resolute Bay had been using Central Standard Time over the winter of
-# 2010-2011 and that the clocks had therefore been moved one hour ahead
-# on March 13/2011. The person I talked to was aware that Resolute Bay
-# had previously experimented with Eastern Standard Time but he could not
-# tell me when the practice had stopped.
-#
-# On March 17/2011 I searched the Web to find an e-mail address of
-# somebody that might be able to tell me exactly when Resolute Bay went
-# off Eastern Standard Time. I stumbled on the name "Aziz Kheraj." Aziz
-# 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.
-#
-# Aziz responded quickly with this: "hi, The time was not changed for the
-# 1 year only, the following year, the community went back to the old way
-# of "spring ahead-fall behind" currently we are zulu plus 5 hrs and in
-# the winter Zulu plus 6 hrs"
-#
-# This of course conflicted with everything I had ascertained in November 2008.
-#
-# I sent Aziz a copy of my 2008 e-mail exchange with Stephanie. Aziz
-# responded with this: "Hi, Stephanie lives in Winnipeg. I live here, You
-# may want to check with the weather office in Resolute Bay or do a
-# search on the weather through Env. Canada. web site"
-#
-# If I had realized the Stephanie did not live in Resolute Bay I would
-# never have contacted her. I now believe that all the information I
-# obtained in November 2008 should be ignored...
-# I apologize for reporting incorrect information in 2008.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule NT_YK 1918 only - Apr 14 2:00 1:00 D
-Rule NT_YK 1918 only - Oct 27 2:00 0 S
-Rule NT_YK 1919 only - May 25 2:00 1:00 D
-Rule NT_YK 1919 only - Nov 1 0:00 0 S
-Rule NT_YK 1942 only - Feb 9 2:00 1:00 W # War
-Rule NT_YK 1945 only - Aug 14 23:00u 1:00 P # Peace
-Rule NT_YK 1945 only - Sep 30 2:00 0 S
-Rule NT_YK 1965 only - Apr lastSun 0:00 2:00 DD
-Rule NT_YK 1965 only - Oct lastSun 2:00 0 S
-Rule NT_YK 1980 1986 - Apr lastSun 2:00 1:00 D
-Rule NT_YK 1980 2006 - Oct lastSun 2:00 0 S
-Rule NT_YK 1987 2006 - Apr Sun>=1 2:00 1:00 D
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-# aka Panniqtuuq
-Zone America/Pangnirtung 0 - -00 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
- -5:00 Canada E%sT
-# formerly Frobisher Bay
-Zone America/Iqaluit 0 - -00 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 Canada E%sT
-# aka Qausuittuq
-Zone America/Resolute 0 - -00 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 Canada C%sT
-# aka Kangiqiniq
-Zone America/Rankin_Inlet 0 - -00 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 Canada C%sT
-# aka Iqaluktuuttiaq
-Zone America/Cambridge_Bay 0 - -00 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 Canada M%sT
-Zone America/Yellowknife 0 - -00 1935 # Yellowknife founded?
- -7:00 NT_YK M%sT 1980
- -7:00 Canada M%sT
-Zone America/Inuvik 0 - -00 1953 # Inuvik founded
- -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 1967 May 28 0: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
- -8:00 NT_YK P%sT 1980
- -8:00 Canada P%sT
-
-
-###############################################################################
-
-# Mexico
-
-# From Paul Eggert (2014-12-07):
-# The Investigation and Analysis Service of the
-# Mexican Library of Congress (MLoC) has published a
-# history of Mexican local time (in Spanish)
-# http://www.diputados.gob.mx/bibliot/publica/inveyana/polisoc/horver/index.htm
-#
-# Here are the discrepancies between Shanks & Pottenger (S&P) and the MLoC.
-# (In all cases we go with the MLoC.)
-# S&P report that Baja was at -8:00 in 1922/1923.
-# S&P say the 1930 transition in Baja was 1930-11-16.
-# S&P report no DST during summer 1931.
-# S&P report a transition at 1932-03-30 23:00, not 1932-04-01.
-
-# From Gwillim Law (2001-02-20):
-# There are some other discrepancies between the Decrees page and the
-# tz database. I think they can best be explained by supposing that
-# the researchers who prepared the Decrees page failed to find some of
-# the relevant documents.
-
-# From Alan Perry (1996-02-15):
-# A guy from our Mexico subsidiary finally found the Presidential Decree
-# outlining the timezone changes in Mexico.
-#
-# ------------- Begin Forwarded Message -------------
-#
-# I finally got my hands on the Official Presidential Decree that sets up the
-# rules for the DST changes. The rules are:
-#
-# 1. The country is divided in 3 timezones:
-# - Baja California Norte (the Mexico/BajaNorte TZ)
-# - Baja California Sur, Nayarit, Sinaloa and Sonora (the Mexico/BajaSur TZ)
-# - The rest of the country (the Mexico/General TZ)
-#
-# 2. From the first Sunday in April at 2:00 AM to the last Sunday in October
-# at 2:00 AM, the times in each zone are as follows:
-# BajaNorte: GMT+7
-# BajaSur: GMT+6
-# General: GMT+5
-#
-# 3. The rest of the year, the times are as follows:
-# BajaNorte: GMT+8
-# BajaSur: GMT+7
-# General: GMT+6
-#
-# The Decree was published in Mexico's Official Newspaper on January 4th.
-#
-# -------------- End Forwarded Message --------------
-# From 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
-# (i.e. UTC -0600 and -0500 as of 1998-08-02).
-
-# From Rives McDow (2000-01-10):
-# Effective April 4, 1999 at 2:00 AM local time, Sonora changed to the time
-# zone 5 hours from the International Date Line, and will not observe daylight
-# savings time so as to stay on the same time zone as the southern part of
-# Arizona year round.
-
-# From Jesper NĂžrgaard, translating
-# <http://www.reforma.com/nacional/articulo/064327/> (2001-01-17):
-# In Oaxaca, the 55.000 teachers from the Section 22 of the National
-# Syndicate of Education Workers, refuse to apply daylight saving each
-# year, so that the more than 10,000 schools work at normal hour the
-# whole year.
-
-# From Gwillim Law (2001-01-19):
-# <http://www.reforma.com/negocios_y_dinero/articulo/064481/> ... says
-# (translated):...
-# 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.
-
-# From Arthur David Olson (2001-01-25):
-# 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 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, LĂłpez Obrador would abolish
-# observation of Daylight Saving Time.
-
-# Official statute published by the Energy Department
-# 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 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
-# the airport, banks, hospitals, and schools.
-#
-# For now we'll assume that the Federal District will bow to federal rules.
-
-# 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
-# saving. The modification reverts this to only cover Baja California
-# (Norte), while all other states (except Sonora, who has no daylight
-# 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" <http://www.diariodemonterrey.com/index.asp>
-# Palabra <http://palabra.infosel.com/010331/primera/ppri3101.pdf> (2001-03-31)
-
-# From Reuters (2001-09-04):
-# Mexico's Supreme Court on Tuesday declared that daylight savings was
-# unconstitutional in Mexico City, creating the possibility the
-# capital will be in a different time zone from the rest of the nation
-# next year.... The Supreme Court's ruling takes effect at 2:00
-# a.m. (0800 GMT) on Sept. 30, when Mexico is scheduled to revert to
-# 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 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)
-# confirms this. Sonora as usual is the only state where DST is not applied.
-
-# From Steffen Thorsen (2009-12-28):
-#
-# Steffen Thorsen wrote:
-# > Mexico's House of Representatives has approved a proposal for northern
-# > Mexico's border cities to share the same daylight saving schedule as
-# > 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:
-# https://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
-# 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
-# las dos horas del primer domingo de noviembre.
-
-# From Steffen Thorsen (2014-12-08), translated by Gwillim Law:
-# The Mexican state of Quintana Roo will likely change to EST in 2015.
-#
-# http://www.unioncancun.mx/articulo/2014/12/04/medio-ambiente/congreso-aprueba-una-hora-mas-de-sol-en-qroo
-# "With this change, the time conflict that has existed between the municipios
-# of Quintana Roo and the municipio of Felipe Carrillo Puerto may come to an
-# end. The latter declared itself in rebellion 15 years ago when a time change
-# was initiated in Mexico, and since then it has refused to change its time
-# zone along with the rest of the country."
-#
-# From Steffen Thorsen (2015-01-14), translated by Gwillim Law:
-# http://sipse.com/novedades/confirman-aplicacion-de-nueva-zona-horaria-para-quintana-roo-132331.html
-# "...the new time zone will come into effect at two o'clock on the first Sunday
-# of February, when we will have to advance the clock one hour from its current
-# time..."
-# Also, the new zone will not use DST.
-#
-# From Carlos RaĂșl Perasso (2015-02-02):
-# The decree that modifies the Mexican Hour System Law has finally
-# been published at the Diario Oficial de la FederaciĂłn
-# http://www.dof.gob.mx/nota_detalle.php?codigo=5380123&fecha=31/01/2015
-# It establishes 5 zones for Mexico:
-# 1- Zona Centro (Central Zone): Corresponds to longitude 90 W,
-# includes most of Mexico, excluding what's mentioned below.
-# 2- Zona PacĂfico (Pacific Zone): Longitude 105 W, includes the
-# states of Baja California Sur; Chihuahua; Nayarit (excluding BahĂa
-# de Banderas which lies in Central Zone); Sinaloa and Sonora.
-# 3- Zona Noroeste (Northwest Zone): Longitude 120 W, includes the
-# state of Baja California.
-# 4- Zona Sureste (Southeast Zone): Longitude 75 W, includes the state
-# of Quintana Roo.
-# 5- The islands, reefs and keys shall take their timezone from the
-# longitude they are located at.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Mexico 1939 only - Feb 5 0:00 1:00 D
-Rule Mexico 1939 only - Jun 25 0:00 0 S
-Rule Mexico 1940 only - Dec 9 0:00 1:00 D
-Rule Mexico 1941 only - Apr 1 0:00 0 S
-Rule Mexico 1943 only - Dec 16 0:00 1:00 W # War
-Rule Mexico 1944 only - May 1 0:00 0 S
-Rule Mexico 1950 only - Feb 12 0:00 1:00 D
-Rule Mexico 1950 only - Jul 30 0:00 0 S
-Rule Mexico 1996 2000 - Apr Sun>=1 2:00 1:00 D
-Rule Mexico 1996 2000 - Oct lastSun 2:00 0 S
-Rule Mexico 2001 only - May Sun>=1 2:00 1:00 D
-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; 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 2015 Feb 1 2:00
- -5:00 - EST
-# 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, Nuevo LeĂłn, Tamaulipas (near US border)
-# This includes the following municipalities:
-# in Coahuila: Ocampo, Acuña, Zaragoza, Jiménez, Piedras Negras, Nava,
-# Guerrero, Hidalgo.
-# in Nuevo LeĂłn: AnĂĄhuac, Los Aldama.
-# in Tamaulipas: Nuevo Laredo, Guerrero, Mier, Miguel AlemĂĄn, Camargo,
-# Gustavo DĂaz Ordaz, Reynosa, RĂo Bravo, Valle Hermoso, Matamoros.
-# See: Inicia mañana Horario de Verano en zona fronteriza, El Universal,
-# 2016-03-12
-# http://www.eluniversal.com.mx/articulo/estados/2016/03/12/inicia-manana-horario-de-verano-en-zona-fronteriza
-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
-# Durango; Coahuila, 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
- -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 2:00
- -6:00 - CST 2002 Feb 20
- -6:00 Mexico C%sT
-# Chihuahua (near US border)
-# This includes the municipalities of Janos, AscensiĂłn, JuĂĄrez, Guadalupe,
-# PrĂĄxedis G Guerrero, Coyame del Sotol, Ojinaga, and Manuel Benavides.
-# (See the 2016-03-12 El Universal source mentioned above.)
-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
- -6:00 - CST 1931 Oct
- -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
- -7:00 Mexico M%sT 2010
- -7:00 US M%sT
-# Chihuahua (away from US border)
-Zone America/Chihuahua -7:04:20 - LMT 1921 Dec 31 23:55:40
- -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 - CST 1996
- -6:00 Mexico C%sT 1998
- -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
- -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 - CST 1942 Apr 24
- -7:00 - MST 1949 Jan 14
- -8:00 - PST 1970
- -7:00 Mexico M%sT 1999
- -7:00 - MST
-
-# From Alexander Krivenyshev (2010-04-21):
-# 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
-# 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
-#
-# (English)
-# 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
-# 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
-# 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
- -7:00 - MST 1931 May 1 23:00
- -6:00 - CST 1931 Oct
- -7:00 - MST 1932 Apr 1
- -6:00 - CST 1942 Apr 24
- -7:00 - MST 1949 Jan 14
- -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
- -7:00 - MST 1931 May 1 23:00
- -6:00 - CST 1931 Oct
- -7:00 - MST 1932 Apr 1
- -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
- -6:00 Mexico C%sT
-
-# Baja California
-Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56
- -7:00 - MST 1924
- -8:00 - PST 1927 Jun 10 23:00
- -7:00 - MST 1930 Nov 15
- -8:00 - PST 1931 Apr 1
- -8:00 1:00 PDT 1931 Sep 30
- -8:00 - PST 1942 Apr 24
- -8:00 1:00 PWT 1945 Aug 14 23:00u
- -8:00 1:00 PPT 1945 Nov 12 # Peace
- -8:00 - PST 1948 Apr 5
- -8:00 1:00 PDT 1949 Jan 14
- -8:00 - PST 1954
- -8:00 CA P%sT 1961
- -8:00 - PST 1976
- -8:00 US P%sT 1996
- -8:00 Mexico P%sT 2001
- -8:00 US P%sT 2002 Feb 20
- -8:00 Mexico P%sT 2010
- -8:00 US P%sT
-# From Paul Eggert (2006-03-22):
-# Formerly there was an America/Ensenada zone, which differed from
-# America/Tijuana only in that it did not observe DST from 1976
-# through 1995. This was as per Shanks (1999). But Shanks & Pottenger say
-# Ensenada did not observe DST from 1948 through 1975. Guy Harris reports
-# 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
-# other than America/Tijuana for Baja, but it's not clear yet what its
-# name or contents should be.
-#
-# From Paul Eggert (2015-10-08):
-# Formerly there was an America/Santa_Isabel zone, but this appears to
-# have come from a misreading of
-# http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010
-# It has been moved to the 'backward' file.
-#
-#
-# Revillagigedo Is
-# no information
-
-###############################################################################
-
-# Anguilla
-# Antigua and Barbuda
-# See America/Port_of_Spain.
-
-# Bahamas
-#
-# For 1899 Milne gives -5:09:29.5; round that.
-#
-# From Sue Williams (2006-12-07):
-# The Bahamas announced about a month ago that they plan to change their DST
-# rules to sync with the U.S. starting in 2007....
-# http://www.jonesbahamas.com/?c=45&a=10412
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Bahamas 1964 1975 - Oct lastSun 2:00 0 S
-Rule Bahamas 1964 1975 - Apr lastSun 2:00 1:00 D
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Nassau -5:09:30 - LMT 1912 Mar 2
- -5:00 Bahamas E%sT 1976
- -5:00 US E%sT
-
-# Barbados
-
-# For 1899 Milne gives -3:58:29.2; round that.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Barb 1977 only - Jun 12 2:00 1:00 D
-Rule Barb 1977 1978 - Oct Sun>=1 2:00 0 S
-Rule Barb 1978 1980 - Apr Sun>=15 2:00 1:00 D
-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
- -4:00 Barb A%sT
-
-# Belize
-# Whitman entirely disagrees with Shanks; go with Shanks & Pottenger.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Belize 1918 1942 - Oct Sun>=2 0:00 0:30 -0530
-Rule Belize 1919 1943 - Feb Sun>=9 0:00 0 CST
-Rule Belize 1973 only - Dec 5 0:00 1:00 CDT
-Rule Belize 1974 only - Feb 9 0:00 0 CST
-Rule Belize 1982 only - Dec 18 0:00 1:00 CDT
-Rule Belize 1983 only - Feb 12 0:00 0 CST
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Belize -5:52:48 - LMT 1912 Apr
- -6:00 Belize %s
-
-# Bermuda
-
-# For 1899 Milne gives -4:19:18.3 as the meridian of the clock tower,
-# Bermuda dockyard, Ireland I; round that.
-
-# From Dan Jones, reporting in The Royal Gazette (2006-06-26):
-
-# Next year, however, clocks in the US will go forward on the second Sunday
-# in March, until the first Sunday in November. And, after the Time Zone
-# (Seasonal Variation) Bill 2006 was passed in the House of Assembly on
-# Friday, the same thing will happen in Bermuda.
-# 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
- -4:00 Canada A%sT 1976
- -4:00 US A%sT
-
-# Cayman Is
-# See America/Panama.
-
-# Costa Rica
-
-# 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
-Rule CR 1979 1980 - Jun Sun>=1 0:00 0 S
-Rule CR 1991 1992 - Jan Sat>=15 0:00 1:00 D
-# IATA SSIM (1991-09) says the following was at 1:00;
-# go with Shanks & 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 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 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
-
-# Cuba
-
-# From Paul Eggert (2013-02-21):
-# Milne gives -5:28:50.45 for the observatory at Havana, -5:29:23.57
-# for the port, and -5:30 for meteorological observations.
-# For now, stick with Shanks & Pottenger.
-
-# From Arthur David Olson (1999-03-29):
-# The 1999-03-28 exhibition baseball game held in Havana, Cuba, between
-# the Cuban National Team and the Baltimore Orioles was carried live on
-# the Orioles Radio Network, including affiliate WTOP in Washington, DC.
-# 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
-# returned to Baltimore, which switches on that date.)
-
-# From Steffen Thorsen (2013-11-11):
-# DST start in Cuba in 2004 ... does not follow the same rules as the
-# years before. The correct date should be Sunday 2004-03-28 00:00 ...
-# https://web.archive.org/web/20040402060750/http://www.granma.cu/espanol/2004/marzo/sab27/reloj.html
-
-# From Evert van der Veer via Steffen Thorsen (2004-10-28):
-# Cuba is not going back to standard time this year.
-# From Paul Eggert (2006-03-22):
-# http://www.granma.cu/ingles/2004/septiembre/juev30/41medid-i.html
-# says that it's due to a problem at the Antonio Guiteras
-# thermoelectric plant, and says "This October there will be no return
-# to normal hours (after daylight saving time)".
-# For now, let's assume that it's a temporary measure.
-
-# From Carlos A. Carnero Delgado (2005-11-12):
-# This year (just like in 2004-2005) there's no change in time zone
-# adjustment in Cuba. We will stay in daylight saving time:
-# http://www.granma.cu/espanol/2005/noviembre/mier9/horario.html
-
-# 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
-# to the normal schedule....
-
-# From Paul Eggert (2007-03-02):
-# <http://www.granma.cubaweb.cu/english/news/art89.html>, dated yesterday,
-# says Cuban clocks will advance at midnight on March 10.
-# For lack of better information, assume Cuba will use US rules,
-# except that it switches at midnight standard time as usual.
-#
-# From Steffen Thorsen (2007-10-25):
-# Carlos Alberto Fonseca Arauz informed me that Cuba will end DST one week
-# earlier - on the last Sunday of October, just like in 2006.
-#
-# He supplied these references:
-#
-# 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 Krivenyshev (2007-10-25):
-# Here is also article from Granma (Cuba):
-#
-# 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
-
-# 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
-# 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:
-# https://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
-# 1940's). Many other web pages in Cuba also claim that it has been
-# observed since 1963, but with the exception of 1970 - an exception
-# which is not present in tzdata/Shanks. So there is a chance we need to
-# change some historic records as well.
-#
-# One example:
-# http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm
-
-# 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 Thorsen's information, the change
-# will take place midnight between Saturday and Sunday.
-
-# From Arthur David Olson (2008-03-12):
-# Assume Sun>=15 (third Sunday) going forward.
-
-# From Alexander Krivenyshev (2009-03-04)
-# According to the Radio Reloj - Cuba will start Daylight Saving Time on
-# 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
-# that has indeed switched to DST. Assume second Sunday from 2009 forward.
-
-# From Steffen Thorsen (2011-03-08):
-# Granma announced that Cuba is going to start DST on 2011-03-20 00:00:00
-# this year. Nothing about the end date known so far (if that has
-# changed at all).
-#
-# Source:
-# http://granma.co.cu/2011/03/08/nacional/artic01.html
-#
-# Our info:
-# https://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:
-# https://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:
-# https://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
-# to standard time on 2012-11-04:
-# http://www.radioreloj.cu/index.php/noticias-radio-reloj/36-nacionales/9961-regira-horario-normal-en-cuba-desde-el-domingo-cuatro-de-noviembre
-# From Paul Eggert (2012-11-03):
-# For now, assume the future rule is first Sunday in November.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Cuba 1928 only - Jun 10 0:00 1:00 D
-Rule Cuba 1928 only - Oct 10 0:00 0 S
-Rule Cuba 1940 1942 - Jun Sun>=1 0:00 1:00 D
-Rule Cuba 1940 1942 - Sep Sun>=1 0:00 0 S
-Rule Cuba 1945 1946 - Jun Sun>=1 0:00 1:00 D
-Rule Cuba 1945 1946 - Sep Sun>=1 0:00 0 S
-Rule Cuba 1965 only - Jun 1 0:00 1:00 D
-Rule Cuba 1965 only - Sep 30 0:00 0 S
-Rule Cuba 1966 only - May 29 0:00 1:00 D
-Rule Cuba 1966 only - Oct 2 0:00 0 S
-Rule Cuba 1967 only - Apr 8 0:00 1:00 D
-Rule Cuba 1967 1968 - Sep Sun>=8 0:00 0 S
-Rule Cuba 1968 only - Apr 14 0:00 1:00 D
-Rule Cuba 1969 1977 - Apr lastSun 0:00 1:00 D
-Rule Cuba 1969 1971 - Oct lastSun 0:00 0 S
-Rule Cuba 1972 1974 - Oct 8 0:00 0 S
-Rule Cuba 1975 1977 - Oct lastSun 0:00 0 S
-Rule Cuba 1978 only - May 7 0:00 1:00 D
-Rule Cuba 1978 1990 - Oct Sun>=8 0:00 0 S
-Rule Cuba 1979 1980 - Mar Sun>=15 0:00 1:00 D
-Rule Cuba 1981 1985 - May Sun>=5 0:00 1:00 D
-Rule Cuba 1986 1989 - Mar Sun>=14 0:00 1:00 D
-Rule Cuba 1990 1997 - Apr Sun>=1 0:00 1:00 D
-Rule Cuba 1991 1995 - Oct Sun>=8 0:00s 0 S
-Rule Cuba 1996 only - Oct 6 0:00s 0 S
-Rule Cuba 1997 only - Oct 12 0:00s 0 S
-Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D
-Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S
-Rule Cuba 2000 2003 - Apr Sun>=1 0:00s 1:00 D
-Rule Cuba 2004 only - Mar lastSun 0:00s 1:00 D
-Rule Cuba 2006 2010 - Oct lastSun 0:00s 0 S
-Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D
-Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D
-Rule Cuba 2009 2010 - Mar Sun>=8 0:00s 1:00 D
-Rule Cuba 2011 only - Mar Sun>=15 0:00s 1:00 D
-Rule Cuba 2011 only - Nov 13 0:00s 0 S
-Rule Cuba 2012 only - Apr 1 0:00s 1:00 D
-Rule Cuba 2012 max - Nov Sun>=1 0:00s 0 S
-Rule Cuba 2013 max - Mar Sun>=8 0:00s 1:00 D
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Havana -5:29:28 - LMT 1890
- -5:29:36 - HMT 1925 Jul 19 12:00 # Havana MT
- -5:00 Cuba C%sT
-
-# Dominica
-# See America/Port_of_Spain.
-
-# Dominican Republic
-
-# From Steffen Thorsen (2000-10-30):
-# Enrique Morales reported to me that the Dominican Republic has changed the
-# time zone to Eastern Standard Time as of Sunday 29 at 2 am....
-# http://www.listin.com.do/antes/261000/republica/princi.html
-
-# From Paul Eggert (2000-12-04):
-# That URL (2000-10-26, in Spanish) says they planned to use US-style DST.
-
-# From Rives McDow (2000-12-01):
-# Dominican Republic changed its mind and presidential decree on Tuesday,
-# November 28, 2000, with a new decree. On Sunday, December 3 at 1:00 AM the
-# Dominican Republic will be reverting to 8 hours from the International Date
-# Line, and will not be using DST in the foreseeable future. The reason they
-# decided to use DST was to be in synch with Puerto Rico, who was also going
-# to implement DST. When Puerto Rico didn't implement DST, the president
-# decided to revert.
-
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule DR 1966 only - Oct 30 0:00 1:00 EDT
-Rule DR 1967 only - Feb 28 0:00 0 EST
-Rule DR 1969 1973 - Oct lastSun 0:00 0:30 -0430
-Rule DR 1970 only - Feb 21 0:00 0 EST
-Rule DR 1971 only - Jan 20 0:00 0 EST
-Rule DR 1972 1974 - Jan 21 0:00 0 EST
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Santo_Domingo -4:39:36 - LMT 1890
- -4:40 - SDMT 1933 Apr 1 12:00 # S. Dom. MT
- -5:00 DR %s 1974 Oct 27
- -4:00 - AST 2000 Oct 29 2:00
- -5:00 US E%sT 2000 Dec 3 1:00
- -4:00 - AST
-
-# El Salvador
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Salv 1987 1988 - May Sun>=1 0:00 1:00 D
-Rule Salv 1987 1988 - Sep lastSun 0:00 0 S
-# There are too many San Salvadors elsewhere, so 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
- -6:00 Salv C%sT
-
-# Grenada
-# Guadeloupe
-# St Barthélemy
-# St Martin (French part)
-# 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
-# 2006-04-29 24:00 (Guatemalan standard time) to 2006-09-30 (time unspecified).
-# 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
-Rule Guat 1974 only - Feb 24 0:00 0 S
-Rule Guat 1983 only - May 21 0:00 1:00 D
-Rule Guat 1983 only - Sep 22 0:00 0 S
-Rule Guat 1991 only - Mar 23 0:00 1:00 D
-Rule Guat 1991 only - Sep 7 0:00 0 S
-Rule Guat 2006 only - Apr 30 0:00 1:00 D
-Rule Guat 2006 only - Oct 1 0:00 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5
- -6:00 Guat C%sT
-
-# Haiti
-# From Gwillim Law (2005-04-15):
-# 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),
-# <http://www.haitianconsulate.org/time.doc>. Translated from French, it says:
-#
-# "The Prime Minister's Communication Office notifies the public in general
-# and the press in particular that, following a decision of the Interior
-# Ministry and the Territorial Collectivities [I suppose that means the
-# provinces], Haiti will move to Eastern Daylight Time in the night from next
-# Saturday the 2nd to Sunday the 3rd.
-#
-# "Consequently, the Prime Minister's Communication Office wishes to inform
-# the population that the country's clocks will be set forward one hour
-# starting at midnight. This provision will hold until the last Saturday in
-# October 2005.
-#
-# "Port-au-Prince, March 31, 2005"
-#
-# From Steffen Thorsen (2006-04-04):
-# I have been informed by users that Haiti observes DST this year like
-# last year, so the current "only" rule for 2005 might be changed to a
-# "max" rule or to last until 2006. (Who knows if they will observe DST
-# next year or if they will extend their DST like US/Canada next year).
-#
-# I have found this article about it (in French):
-# http://www.haitipressnetwork.com/news.cfm?articleID=7612
-#
-# The reason seems to be an energy crisis.
-
-# From Stephen Colebourne (2007-02-22):
-# Some IATA info: Haiti won't be having DST in 2007.
-
-# From Steffen Thorsen (2012-03-11):
-# According to several news sources, Haiti will observe DST this year,
-# apparently using the same start and end date as USA/Canada.
-# So this means they have already changed their time.
-#
-# http://www.alterpresse.org/spip.php?article12510
-# http://radiovision2000haiti.net/home/?p=13253
-#
-# From Arthur David Olson (2012-03-11):
-# The alterpresse.org source seems to show a US-style leap from 2:00 a.m. to
-# 3:00 a.m. rather than the traditional Haitian jump at midnight.
-# Assume a US-style fall back as well.
-
-# From Steffen Thorsen (2013-03-10):
-# It appears that Haiti is observing DST this year as well, same rules
-# as US/Canada. They did it last year as well, and it looks like they
-# are going to observe DST every year now...
-#
-# http://radiovision2000haiti.net/public/haiti-avis-changement-dheure-dimanche/
-# http://www.canalplushaiti.net/?p=6714
-
-# From Steffen Thorsen (2016-03-12):
-# Jean Antoine, editor of www.haiti-reference.com informed us that Haiti
-# are not going on DST this year. Several other resources confirm this: ...
-# https://www.radiotelevisioncaraibes.com/presse/heure_d_t_pas_de_changement_d_heure_pr_vu_pour_cet_ann_e.html
-# https://www.vantbefinfo.com/changement-dheure-pas-pour-haiti/
-# http://news.anmwe.com/haiti-lheure-nationale-ne-sera-ni-avancee-ni-reculee-cette-annee/
-
-# From Steffen Thorsen (2017-03-12):
-# We have received 4 mails from different people telling that Haiti
-# has started DST again today, and this source seems to confirm that,
-# I have not been able to find a more authoritative source:
-# https://www.haitilibre.com/en/news-20319-haiti-notices-time-change-in-haiti.html
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Haiti 1983 only - May 8 0:00 1:00 D
-Rule Haiti 1984 1987 - Apr lastSun 0:00 1:00 D
-Rule Haiti 1983 1987 - Oct lastSun 0:00 0 S
-# Shanks & Pottenger say AT is 2:00, but IATA SSIM (1991/1997) says 1:00s.
-# Go with IATA.
-Rule Haiti 1988 1997 - Apr Sun>=1 1:00s 1:00 D
-Rule Haiti 1988 1997 - Oct lastSun 1:00s 0 S
-Rule Haiti 2005 2006 - Apr Sun>=1 0:00 1:00 D
-Rule Haiti 2005 2006 - Oct lastSun 0:00 0 S
-Rule Haiti 2012 2015 - Mar Sun>=8 2:00 1:00 D
-Rule Haiti 2012 2015 - Nov Sun>=1 2:00 0 S
-Rule Haiti 2017 max - Mar Sun>=8 2:00 1:00 D
-Rule Haiti 2017 max - Nov Sun>=1 2:00 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Port-au-Prince -4:49:20 - LMT 1890
- -4:49 - PPMT 1917 Jan 24 12:00 # P-a-P MT
- -5:00 Haiti E%sT
-
-# Honduras
-# Shanks & Pottenger say 1921 Jan 1; go with Whitman's more precise Apr 1.
-
-# From Paul Eggert (2006-05-05):
-# worldtimezone.com reports a 2006-05-02 Spanish-language AP article
-# saying Honduras will start using DST midnight Saturday, effective 4
-# months until September. La Tribuna reported today
-# <http://www.latribuna.hn/99299.html> that Manuel Zelaya, the president
-# of Honduras, refused to back down on this.
-
-# From Jesper NĂžrgaard Welen (2006-08-08):
-# It seems that Honduras has returned from DST to standard time this Monday at
-# 00:00 hours (prolonging Sunday to 25 hours duration).
-# http://www.worldtimezone.com/dst_news/dst_news_honduras04.html
-
-# From Paul Eggert (2006-08-08):
-# Also see Diario El Heraldo, The country returns to standard time (2006-08-08).
-# http://www.elheraldo.hn/nota.php?nid=54941&sec=12
-# It mentions executive decree 18-2006.
-
-# From Steffen Thorsen (2006-08-17):
-# Honduras will observe DST from 2007 to 2009, exact dates are not
-# published, I have located this authoritative source:
-# http://www.presidencia.gob.hn/noticia.aspx?nId=47
-
-# From Steffen Thorsen (2007-03-30):
-# http://www.laprensahn.com/pais_nota.php?id04962=7386
-# So it seems that Honduras will not enter DST this year....
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Hond 1987 1988 - May Sun>=1 0:00 1:00 D
-Rule Hond 1987 1988 - Sep lastSun 0:00 0 S
-Rule Hond 2006 only - May Sun>=1 0:00 1:00 D
-Rule Hond 2006 only - Aug Mon>=1 0:00 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Tegucigalpa -5:48:52 - LMT 1921 Apr
- -6:00 Hond C%sT
-#
-# Great Swan I ceded by US to Honduras in 1972
-
-# Jamaica
-# Shanks & Pottenger give -5:07:12, but Milne records -5:07:10.41 from an
-# unspecified official document, and says "This time is used throughout the
-# island". Go with Milne. Round to the nearest second as required by zic.
-#
-# Shanks & Pottenger give April 28 for the 1974 spring-forward transition, but
-# Lance Neita writes that Prime Minister Michael Manley decreed it January 5.
-# Assume Neita meant Jan 6 02:00, the same as the US. Neita also writes that
-# Manley's supporters associated this act with Manley's nickname "Joshua"
-# (recall that in the Bible the sun stood still at Joshua's request),
-# and with the Rod of Correction which Manley said he had received from
-# Haile Selassie, Emperor of Ethiopia. See:
-# Neita L. The politician in all of us. Jamaica Observer 2014-09-20
-# http://www.jamaicaobserver.com/columns/The-politician-in-all-of-us_17573647
-#
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Jamaica -5:07:10 - LMT 1890 # Kingston
- -5:07:10 - KMT 1912 Feb # Kingston Mean Time
- -5:00 - EST 1974
- -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
- -4:00 - AST 1980 Apr 6
- -4:00 1:00 ADT 1980 Sep 28
- -4:00 - AST
-
-# Montserrat
-# See America/Port_of_Spain.
-
-# Nicaragua
-#
-# This uses Shanks & Pottenger for times before 2005.
-#
-# From Steffen Thorsen (2005-04-12):
-# I've got reports from 8 different people that Nicaragua just started
-# DST on Sunday 2005-04-10, in order to save energy because of
-# expensive petroleum. The exact end date for DST is not yet
-# announced, only "September" but some sites also say "mid-September".
-# Some background information is available on the President's official site:
-# http://www.presidencia.gob.ni/Presidencia/Files_index/Secretaria/Notas%20de%20Prensa/Presidente/2005/ABRIL/Gobierno-de-nicaragua-adelanta-hora-oficial-06abril.htm
-# The Decree, no 23-2005 is available here:
-# http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2005/Decreto%2023-2005%20Se%20adelanta%20en%20una%20hora%20en%20todo%20el%20territorio%20nacional%20apartir%20de%20las%2024horas%20del%2009%20de%20Abril.pdf
-#
-# From Paul Eggert (2005-05-01):
-# The decree doesn't say anything about daylight saving, but for now let's
-# assume that it is daylight saving....
-#
-# 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
-# time that a change of clocks was applied to save energy was in the year 2000
-# 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 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 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 Bolaños, Nicaragua
-# advanced by sixty minutes their official time, yesterday at 2 in the
-# morning, and will stay that way until 30th of September.
-#
-# 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
-# time is returned one hour at 01:00 am of October 1 of 2006.
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Nic 1979 1980 - Mar Sun>=16 0:00 1:00 D
-Rule Nic 1979 1980 - Jun Mon>=23 0:00 0 S
-Rule Nic 2005 only - Apr 10 0:00 1:00 D
-Rule Nic 2005 only - Oct Sun>=1 0:00 0 S
-Rule Nic 2006 only - Apr 30 2:00 1:00 D
-Rule Nic 2006 only - Oct Sun>=1 1:00 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Managua -5:45:08 - LMT 1890
- -5:45:12 - MMT 1934 Jun 23 # Managua Mean Time?
- -6:00 - CST 1973 May
- -5:00 - EST 1975 Feb 16
- -6:00 Nic C%sT 1992 Jan 1 4:00
- -5:00 - EST 1992 Sep 24
- -6:00 - CST 1993
- -5:00 - EST 1997
- -6:00 Nic C%sT
-
-# Panama
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Panama -5:18:08 - LMT 1890
- -5:19:36 - CMT 1908 Apr 22 # ColĂłn Mean Time
- -5:00 - EST
-Link America/Panama America/Cayman
-
-# 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
- -4:00 - AST 1942 May 3
- -4:00 US A%sT 1946
- -4:00 - AST
-
-# St Kitts-Nevis
-# St Lucia
-# 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
- -4:00 - AST 1980 May
- -3:00 - -03 1987
- -3:00 Canada -03/-02
-
-# St Vincent and the Grenadines
-# See America/Port_of_Spain.
-
-# Turks and Caicos
-#
-# From Chris Dunn in
-# https://bugs.debian.org/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.
-#
-# From Brian Inglis (2007-04-28):
-# http://www.turksandcaicos.tc/calendar/index.htm [2007-04-26]
-# there is an entry for Nov 4 "Daylight Savings Time Ends 2007" and three
-# rows before that there is an out of date entry for Oct:
-# "Eastern Standard Times Begins 2007
-# 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 (2014-08-19):
-# The 2014-08-13 Cabinet meeting decided to stay on UT -04 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 ...
-# From Chris Walton (2014-11-04):
-# ... the TCI government appears to have delayed the switch to
-# "permanent daylight saving time" by one year....
-# http://tcweeklynews.com/time-change-to-go-ahead-this-november-p5437-127.htm
-#
-# From the Turks & Caicos Cabinet (2017-07-20), heads-up from Steffen Thorsen:
-# ... agreed to the reintroduction in TCI of Daylight Saving Time (DST)
-# during the summer months and Standard Time, also known as Local
-# Time, during the winter months with effect from April 2018 ...
-# https://www.gov.uk/government/news/turks-and-caicos-post-cabinet-meeting-statement--3
-#
-# From Paul Eggert (2017-08-26):
-# The date of effect of the spring 2018 change appears to be March 11,
-# which makes more sense. See: Hamilton D. Time change back
-# by March 2018 for TCI. Magnetic Media. 2017-08-25.
-# http://magneticmediatv.com/2017/08/time-change-back-by-march-2018-for-tci/
-#
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Grand_Turk -4:44:32 - LMT 1890
- -5:07:10 - KMT 1912 Feb # Kingston Mean Time
- -5:00 - EST 1979
- -5:00 US E%sT 2015 Nov Sun>=1 2:00
- -4:00 - AST 2018 Mar 11 3:00
- -5:00 US E%sT
-
-# British Virgin Is
-# Virgin Is
-# See America/Port_of_Spain.
-
-
-# Local Variables:
-# coding: utf-8
-# End:
--- a/test/jdk/sun/util/calendar/zi/tzdata/pacificnew Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-#
-# 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.
-#
-# tzdb data for proposed US election time (this file is obsolete)
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# From Arthur David Olson (1989-04-05):
-# On 1989-04-05, the U. S. House of Representatives passed (238-154) a bill
-# establishing "Pacific Presidential Election Time"; it was not acted on
-# by the Senate or signed into law by the President.
-# You might want to change the "PE" (Presidential Election) below to
-# "Q" (Quadrennial) to maintain three-character zone abbreviations.
-# If you're really conservative, you might want to change it to "D".
-# Avoid "L" (Leap Year), which won't be true in 2100.
-
-# If Presidential Election Time is ever established, replace "XXXX" below
-# with the year the law takes effect and uncomment the "##" lines.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-## Rule Twilite XXXX max - Apr Sun>=1 2:00 1:00 D
-## Rule Twilite XXXX max uspres Oct lastSun 2:00 1:00 PE
-## Rule Twilite XXXX max uspres Nov Sun>=7 2:00 0 S
-## Rule Twilite XXXX max nonpres Oct lastSun 2:00 0 S
-
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-## Zone America/Los_Angeles-PET -8:00 US P%sT XXXX
-## -8:00 Twilite P%sT
-
-# For now...
-Link America/Los_Angeles US/Pacific-New ##
--- a/test/jdk/sun/util/calendar/zi/tzdata/solar87 Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,411 +0,0 @@
-#
-# 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.
-#
-# <pre>
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# So much for footnotes about Saudi Arabia.
-# Apparent noon times below are for Riyadh; your mileage will vary.
-# Times were computed using formulas in the U.S. Naval Observatory's
-# Almanac for Computers 1987; the formulas "will give EqT to an accuracy of
-# [plus or minus two] seconds during the current year."
-#
-# Rounding to the nearest five seconds results in fewer than
-# 256 different "time types"--a limit that's faced because time types are
-# stored on disk as unsigned chars.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule sol87 1987 only - Jan 1 12:03:20s -0:03:20 -
-Rule sol87 1987 only - Jan 2 12:03:50s -0:03:50 -
-Rule sol87 1987 only - Jan 3 12:04:15s -0:04:15 -
-Rule sol87 1987 only - Jan 4 12:04:45s -0:04:45 -
-Rule sol87 1987 only - Jan 5 12:05:10s -0:05:10 -
-Rule sol87 1987 only - Jan 6 12:05:40s -0:05:40 -
-Rule sol87 1987 only - Jan 7 12:06:05s -0:06:05 -
-Rule sol87 1987 only - Jan 8 12:06:30s -0:06:30 -
-Rule sol87 1987 only - Jan 9 12:06:55s -0:06:55 -
-Rule sol87 1987 only - Jan 10 12:07:20s -0:07:20 -
-Rule sol87 1987 only - Jan 11 12:07:45s -0:07:45 -
-Rule sol87 1987 only - Jan 12 12:08:10s -0:08:10 -
-Rule sol87 1987 only - Jan 13 12:08:30s -0:08:30 -
-Rule sol87 1987 only - Jan 14 12:08:55s -0:08:55 -
-Rule sol87 1987 only - Jan 15 12:09:15s -0:09:15 -
-Rule sol87 1987 only - Jan 16 12:09:35s -0:09:35 -
-Rule sol87 1987 only - Jan 17 12:09:55s -0:09:55 -
-Rule sol87 1987 only - Jan 18 12:10:15s -0:10:15 -
-Rule sol87 1987 only - Jan 19 12:10:35s -0:10:35 -
-Rule sol87 1987 only - Jan 20 12:10:55s -0:10:55 -
-Rule sol87 1987 only - Jan 21 12:11:10s -0:11:10 -
-Rule sol87 1987 only - Jan 22 12:11:30s -0:11:30 -
-Rule sol87 1987 only - Jan 23 12:11:45s -0:11:45 -
-Rule sol87 1987 only - Jan 24 12:12:00s -0:12:00 -
-Rule sol87 1987 only - Jan 25 12:12:15s -0:12:15 -
-Rule sol87 1987 only - Jan 26 12:12:30s -0:12:30 -
-Rule sol87 1987 only - Jan 27 12:12:40s -0:12:40 -
-Rule sol87 1987 only - Jan 28 12:12:55s -0:12:55 -
-Rule sol87 1987 only - Jan 29 12:13:05s -0:13:05 -
-Rule sol87 1987 only - Jan 30 12:13:15s -0:13:15 -
-Rule sol87 1987 only - Jan 31 12:13:25s -0:13:25 -
-Rule sol87 1987 only - Feb 1 12:13:35s -0:13:35 -
-Rule sol87 1987 only - Feb 2 12:13:40s -0:13:40 -
-Rule sol87 1987 only - Feb 3 12:13:50s -0:13:50 -
-Rule sol87 1987 only - Feb 4 12:13:55s -0:13:55 -
-Rule sol87 1987 only - Feb 5 12:14:00s -0:14:00 -
-Rule sol87 1987 only - Feb 6 12:14:05s -0:14:05 -
-Rule sol87 1987 only - Feb 7 12:14:10s -0:14:10 -
-Rule sol87 1987 only - Feb 8 12:14:10s -0:14:10 -
-Rule sol87 1987 only - Feb 9 12:14:15s -0:14:15 -
-Rule sol87 1987 only - Feb 10 12:14:15s -0:14:15 -
-Rule sol87 1987 only - Feb 11 12:14:15s -0:14:15 -
-Rule sol87 1987 only - Feb 12 12:14:15s -0:14:15 -
-Rule sol87 1987 only - Feb 13 12:14:15s -0:14:15 -
-Rule sol87 1987 only - Feb 14 12:14:15s -0:14:15 -
-Rule sol87 1987 only - Feb 15 12:14:10s -0:14:10 -
-Rule sol87 1987 only - Feb 16 12:14:10s -0:14:10 -
-Rule sol87 1987 only - Feb 17 12:14:05s -0:14:05 -
-Rule sol87 1987 only - Feb 18 12:14:00s -0:14:00 -
-Rule sol87 1987 only - Feb 19 12:13:55s -0:13:55 -
-Rule sol87 1987 only - Feb 20 12:13:50s -0:13:50 -
-Rule sol87 1987 only - Feb 21 12:13:45s -0:13:45 -
-Rule sol87 1987 only - Feb 22 12:13:35s -0:13:35 -
-Rule sol87 1987 only - Feb 23 12:13:30s -0:13:30 -
-Rule sol87 1987 only - Feb 24 12:13:20s -0:13:20 -
-Rule sol87 1987 only - Feb 25 12:13:10s -0:13:10 -
-Rule sol87 1987 only - Feb 26 12:13:00s -0:13:00 -
-Rule sol87 1987 only - Feb 27 12:12:50s -0:12:50 -
-Rule sol87 1987 only - Feb 28 12:12:40s -0:12:40 -
-Rule sol87 1987 only - Mar 1 12:12:30s -0:12:30 -
-Rule sol87 1987 only - Mar 2 12:12:20s -0:12:20 -
-Rule sol87 1987 only - Mar 3 12:12:05s -0:12:05 -
-Rule sol87 1987 only - Mar 4 12:11:55s -0:11:55 -
-Rule sol87 1987 only - Mar 5 12:11:40s -0:11:40 -
-Rule sol87 1987 only - Mar 6 12:11:25s -0:11:25 -
-Rule sol87 1987 only - Mar 7 12:11:15s -0:11:15 -
-Rule sol87 1987 only - Mar 8 12:11:00s -0:11:00 -
-Rule sol87 1987 only - Mar 9 12:10:45s -0:10:45 -
-Rule sol87 1987 only - Mar 10 12:10:30s -0:10:30 -
-Rule sol87 1987 only - Mar 11 12:10:15s -0:10:15 -
-Rule sol87 1987 only - Mar 12 12:09:55s -0:09:55 -
-Rule sol87 1987 only - Mar 13 12:09:40s -0:09:40 -
-Rule sol87 1987 only - Mar 14 12:09:25s -0:09:25 -
-Rule sol87 1987 only - Mar 15 12:09:10s -0:09:10 -
-Rule sol87 1987 only - Mar 16 12:08:50s -0:08:50 -
-Rule sol87 1987 only - Mar 17 12:08:35s -0:08:35 -
-Rule sol87 1987 only - Mar 18 12:08:15s -0:08:15 -
-Rule sol87 1987 only - Mar 19 12:08:00s -0:08:00 -
-Rule sol87 1987 only - Mar 20 12:07:40s -0:07:40 -
-Rule sol87 1987 only - Mar 21 12:07:25s -0:07:25 -
-Rule sol87 1987 only - Mar 22 12:07:05s -0:07:05 -
-Rule sol87 1987 only - Mar 23 12:06:50s -0:06:50 -
-Rule sol87 1987 only - Mar 24 12:06:30s -0:06:30 -
-Rule sol87 1987 only - Mar 25 12:06:10s -0:06:10 -
-Rule sol87 1987 only - Mar 26 12:05:55s -0:05:55 -
-Rule sol87 1987 only - Mar 27 12:05:35s -0:05:35 -
-Rule sol87 1987 only - Mar 28 12:05:15s -0:05:15 -
-Rule sol87 1987 only - Mar 29 12:05:00s -0:05:00 -
-Rule sol87 1987 only - Mar 30 12:04:40s -0:04:40 -
-Rule sol87 1987 only - Mar 31 12:04:25s -0:04:25 -
-Rule sol87 1987 only - Apr 1 12:04:05s -0:04:05 -
-Rule sol87 1987 only - Apr 2 12:03:45s -0:03:45 -
-Rule sol87 1987 only - Apr 3 12:03:30s -0:03:30 -
-Rule sol87 1987 only - Apr 4 12:03:10s -0:03:10 -
-Rule sol87 1987 only - Apr 5 12:02:55s -0:02:55 -
-Rule sol87 1987 only - Apr 6 12:02:35s -0:02:35 -
-Rule sol87 1987 only - Apr 7 12:02:20s -0:02:20 -
-Rule sol87 1987 only - Apr 8 12:02:05s -0:02:05 -
-Rule sol87 1987 only - Apr 9 12:01:45s -0:01:45 -
-Rule sol87 1987 only - Apr 10 12:01:30s -0:01:30 -
-Rule sol87 1987 only - Apr 11 12:01:15s -0:01:15 -
-Rule sol87 1987 only - Apr 12 12:00:55s -0:00:55 -
-Rule sol87 1987 only - Apr 13 12:00:40s -0:00:40 -
-Rule sol87 1987 only - Apr 14 12:00:25s -0:00:25 -
-Rule sol87 1987 only - Apr 15 12:00:10s -0:00:10 -
-Rule sol87 1987 only - Apr 16 11:59:55s 0:00:05 -
-Rule sol87 1987 only - Apr 17 11:59:45s 0:00:15 -
-Rule sol87 1987 only - Apr 18 11:59:30s 0:00:30 -
-Rule sol87 1987 only - Apr 19 11:59:15s 0:00:45 -
-Rule sol87 1987 only - Apr 20 11:59:05s 0:00:55 -
-Rule sol87 1987 only - Apr 21 11:58:50s 0:01:10 -
-Rule sol87 1987 only - Apr 22 11:58:40s 0:01:20 -
-Rule sol87 1987 only - Apr 23 11:58:25s 0:01:35 -
-Rule sol87 1987 only - Apr 24 11:58:15s 0:01:45 -
-Rule sol87 1987 only - Apr 25 11:58:05s 0:01:55 -
-Rule sol87 1987 only - Apr 26 11:57:55s 0:02:05 -
-Rule sol87 1987 only - Apr 27 11:57:45s 0:02:15 -
-Rule sol87 1987 only - Apr 28 11:57:35s 0:02:25 -
-Rule sol87 1987 only - Apr 29 11:57:25s 0:02:35 -
-Rule sol87 1987 only - Apr 30 11:57:15s 0:02:45 -
-Rule sol87 1987 only - May 1 11:57:10s 0:02:50 -
-Rule sol87 1987 only - May 2 11:57:00s 0:03:00 -
-Rule sol87 1987 only - May 3 11:56:55s 0:03:05 -
-Rule sol87 1987 only - May 4 11:56:50s 0:03:10 -
-Rule sol87 1987 only - May 5 11:56:45s 0:03:15 -
-Rule sol87 1987 only - May 6 11:56:40s 0:03:20 -
-Rule sol87 1987 only - May 7 11:56:35s 0:03:25 -
-Rule sol87 1987 only - May 8 11:56:30s 0:03:30 -
-Rule sol87 1987 only - May 9 11:56:25s 0:03:35 -
-Rule sol87 1987 only - May 10 11:56:25s 0:03:35 -
-Rule sol87 1987 only - May 11 11:56:20s 0:03:40 -
-Rule sol87 1987 only - May 12 11:56:20s 0:03:40 -
-Rule sol87 1987 only - May 13 11:56:20s 0:03:40 -
-Rule sol87 1987 only - May 14 11:56:20s 0:03:40 -
-Rule sol87 1987 only - May 15 11:56:20s 0:03:40 -
-Rule sol87 1987 only - May 16 11:56:20s 0:03:40 -
-Rule sol87 1987 only - May 17 11:56:20s 0:03:40 -
-Rule sol87 1987 only - May 18 11:56:20s 0:03:40 -
-Rule sol87 1987 only - May 19 11:56:25s 0:03:35 -
-Rule sol87 1987 only - May 20 11:56:25s 0:03:35 -
-Rule sol87 1987 only - May 21 11:56:30s 0:03:30 -
-Rule sol87 1987 only - May 22 11:56:35s 0:03:25 -
-Rule sol87 1987 only - May 23 11:56:40s 0:03:20 -
-Rule sol87 1987 only - May 24 11:56:45s 0:03:15 -
-Rule sol87 1987 only - May 25 11:56:50s 0:03:10 -
-Rule sol87 1987 only - May 26 11:56:55s 0:03:05 -
-Rule sol87 1987 only - May 27 11:57:00s 0:03:00 -
-Rule sol87 1987 only - May 28 11:57:10s 0:02:50 -
-Rule sol87 1987 only - May 29 11:57:15s 0:02:45 -
-Rule sol87 1987 only - May 30 11:57:25s 0:02:35 -
-Rule sol87 1987 only - May 31 11:57:30s 0:02:30 -
-Rule sol87 1987 only - Jun 1 11:57:40s 0:02:20 -
-Rule sol87 1987 only - Jun 2 11:57:50s 0:02:10 -
-Rule sol87 1987 only - Jun 3 11:58:00s 0:02:00 -
-Rule sol87 1987 only - Jun 4 11:58:10s 0:01:50 -
-Rule sol87 1987 only - Jun 5 11:58:20s 0:01:40 -
-Rule sol87 1987 only - Jun 6 11:58:30s 0:01:30 -
-Rule sol87 1987 only - Jun 7 11:58:40s 0:01:20 -
-Rule sol87 1987 only - Jun 8 11:58:50s 0:01:10 -
-Rule sol87 1987 only - Jun 9 11:59:05s 0:00:55 -
-Rule sol87 1987 only - Jun 10 11:59:15s 0:00:45 -
-Rule sol87 1987 only - Jun 11 11:59:30s 0:00:30 -
-Rule sol87 1987 only - Jun 12 11:59:40s 0:00:20 -
-Rule sol87 1987 only - Jun 13 11:59:50s 0:00:10 -
-Rule sol87 1987 only - Jun 14 12:00:05s -0:00:05 -
-Rule sol87 1987 only - Jun 15 12:00:15s -0:00:15 -
-Rule sol87 1987 only - Jun 16 12:00:30s -0:00:30 -
-Rule sol87 1987 only - Jun 17 12:00:45s -0:00:45 -
-Rule sol87 1987 only - Jun 18 12:00:55s -0:00:55 -
-Rule sol87 1987 only - Jun 19 12:01:10s -0:01:10 -
-Rule sol87 1987 only - Jun 20 12:01:20s -0:01:20 -
-Rule sol87 1987 only - Jun 21 12:01:35s -0:01:35 -
-Rule sol87 1987 only - Jun 22 12:01:50s -0:01:50 -
-Rule sol87 1987 only - Jun 23 12:02:00s -0:02:00 -
-Rule sol87 1987 only - Jun 24 12:02:15s -0:02:15 -
-Rule sol87 1987 only - Jun 25 12:02:25s -0:02:25 -
-Rule sol87 1987 only - Jun 26 12:02:40s -0:02:40 -
-Rule sol87 1987 only - Jun 27 12:02:50s -0:02:50 -
-Rule sol87 1987 only - Jun 28 12:03:05s -0:03:05 -
-Rule sol87 1987 only - Jun 29 12:03:15s -0:03:15 -
-Rule sol87 1987 only - Jun 30 12:03:30s -0:03:30 -
-Rule sol87 1987 only - Jul 1 12:03:40s -0:03:40 -
-Rule sol87 1987 only - Jul 2 12:03:50s -0:03:50 -
-Rule sol87 1987 only - Jul 3 12:04:05s -0:04:05 -
-Rule sol87 1987 only - Jul 4 12:04:15s -0:04:15 -
-Rule sol87 1987 only - Jul 5 12:04:25s -0:04:25 -
-Rule sol87 1987 only - Jul 6 12:04:35s -0:04:35 -
-Rule sol87 1987 only - Jul 7 12:04:45s -0:04:45 -
-Rule sol87 1987 only - Jul 8 12:04:55s -0:04:55 -
-Rule sol87 1987 only - Jul 9 12:05:05s -0:05:05 -
-Rule sol87 1987 only - Jul 10 12:05:15s -0:05:15 -
-Rule sol87 1987 only - Jul 11 12:05:20s -0:05:20 -
-Rule sol87 1987 only - Jul 12 12:05:30s -0:05:30 -
-Rule sol87 1987 only - Jul 13 12:05:40s -0:05:40 -
-Rule sol87 1987 only - Jul 14 12:05:45s -0:05:45 -
-Rule sol87 1987 only - Jul 15 12:05:50s -0:05:50 -
-Rule sol87 1987 only - Jul 16 12:06:00s -0:06:00 -
-Rule sol87 1987 only - Jul 17 12:06:05s -0:06:05 -
-Rule sol87 1987 only - Jul 18 12:06:10s -0:06:10 -
-Rule sol87 1987 only - Jul 19 12:06:15s -0:06:15 -
-Rule sol87 1987 only - Jul 20 12:06:15s -0:06:15 -
-Rule sol87 1987 only - Jul 21 12:06:20s -0:06:20 -
-Rule sol87 1987 only - Jul 22 12:06:25s -0:06:25 -
-Rule sol87 1987 only - Jul 23 12:06:25s -0:06:25 -
-Rule sol87 1987 only - Jul 24 12:06:25s -0:06:25 -
-Rule sol87 1987 only - Jul 25 12:06:30s -0:06:30 -
-Rule sol87 1987 only - Jul 26 12:06:30s -0:06:30 -
-Rule sol87 1987 only - Jul 27 12:06:30s -0:06:30 -
-Rule sol87 1987 only - Jul 28 12:06:30s -0:06:30 -
-Rule sol87 1987 only - Jul 29 12:06:25s -0:06:25 -
-Rule sol87 1987 only - Jul 30 12:06:25s -0:06:25 -
-Rule sol87 1987 only - Jul 31 12:06:25s -0:06:25 -
-Rule sol87 1987 only - Aug 1 12:06:20s -0:06:20 -
-Rule sol87 1987 only - Aug 2 12:06:15s -0:06:15 -
-Rule sol87 1987 only - Aug 3 12:06:10s -0:06:10 -
-Rule sol87 1987 only - Aug 4 12:06:05s -0:06:05 -
-Rule sol87 1987 only - Aug 5 12:06:00s -0:06:00 -
-Rule sol87 1987 only - Aug 6 12:05:55s -0:05:55 -
-Rule sol87 1987 only - Aug 7 12:05:50s -0:05:50 -
-Rule sol87 1987 only - Aug 8 12:05:40s -0:05:40 -
-Rule sol87 1987 only - Aug 9 12:05:35s -0:05:35 -
-Rule sol87 1987 only - Aug 10 12:05:25s -0:05:25 -
-Rule sol87 1987 only - Aug 11 12:05:15s -0:05:15 -
-Rule sol87 1987 only - Aug 12 12:05:05s -0:05:05 -
-Rule sol87 1987 only - Aug 13 12:04:55s -0:04:55 -
-Rule sol87 1987 only - Aug 14 12:04:45s -0:04:45 -
-Rule sol87 1987 only - Aug 15 12:04:35s -0:04:35 -
-Rule sol87 1987 only - Aug 16 12:04:25s -0:04:25 -
-Rule sol87 1987 only - Aug 17 12:04:10s -0:04:10 -
-Rule sol87 1987 only - Aug 18 12:04:00s -0:04:00 -
-Rule sol87 1987 only - Aug 19 12:03:45s -0:03:45 -
-Rule sol87 1987 only - Aug 20 12:03:30s -0:03:30 -
-Rule sol87 1987 only - Aug 21 12:03:15s -0:03:15 -
-Rule sol87 1987 only - Aug 22 12:03:00s -0:03:00 -
-Rule sol87 1987 only - Aug 23 12:02:45s -0:02:45 -
-Rule sol87 1987 only - Aug 24 12:02:30s -0:02:30 -
-Rule sol87 1987 only - Aug 25 12:02:15s -0:02:15 -
-Rule sol87 1987 only - Aug 26 12:02:00s -0:02:00 -
-Rule sol87 1987 only - Aug 27 12:01:40s -0:01:40 -
-Rule sol87 1987 only - Aug 28 12:01:25s -0:01:25 -
-Rule sol87 1987 only - Aug 29 12:01:05s -0:01:05 -
-Rule sol87 1987 only - Aug 30 12:00:50s -0:00:50 -
-Rule sol87 1987 only - Aug 31 12:00:30s -0:00:30 -
-Rule sol87 1987 only - Sep 1 12:00:10s -0:00:10 -
-Rule sol87 1987 only - Sep 2 11:59:50s 0:00:10 -
-Rule sol87 1987 only - Sep 3 11:59:35s 0:00:25 -
-Rule sol87 1987 only - Sep 4 11:59:15s 0:00:45 -
-Rule sol87 1987 only - Sep 5 11:58:55s 0:01:05 -
-Rule sol87 1987 only - Sep 6 11:58:35s 0:01:25 -
-Rule sol87 1987 only - Sep 7 11:58:15s 0:01:45 -
-Rule sol87 1987 only - Sep 8 11:57:55s 0:02:05 -
-Rule sol87 1987 only - Sep 9 11:57:30s 0:02:30 -
-Rule sol87 1987 only - Sep 10 11:57:10s 0:02:50 -
-Rule sol87 1987 only - Sep 11 11:56:50s 0:03:10 -
-Rule sol87 1987 only - Sep 12 11:56:30s 0:03:30 -
-Rule sol87 1987 only - Sep 13 11:56:10s 0:03:50 -
-Rule sol87 1987 only - Sep 14 11:55:45s 0:04:15 -
-Rule sol87 1987 only - Sep 15 11:55:25s 0:04:35 -
-Rule sol87 1987 only - Sep 16 11:55:05s 0:04:55 -
-Rule sol87 1987 only - Sep 17 11:54:45s 0:05:15 -
-Rule sol87 1987 only - Sep 18 11:54:20s 0:05:40 -
-Rule sol87 1987 only - Sep 19 11:54:00s 0:06:00 -
-Rule sol87 1987 only - Sep 20 11:53:40s 0:06:20 -
-Rule sol87 1987 only - Sep 21 11:53:15s 0:06:45 -
-Rule sol87 1987 only - Sep 22 11:52:55s 0:07:05 -
-Rule sol87 1987 only - Sep 23 11:52:35s 0:07:25 -
-Rule sol87 1987 only - Sep 24 11:52:15s 0:07:45 -
-Rule sol87 1987 only - Sep 25 11:51:55s 0:08:05 -
-Rule sol87 1987 only - Sep 26 11:51:35s 0:08:25 -
-Rule sol87 1987 only - Sep 27 11:51:10s 0:08:50 -
-Rule sol87 1987 only - Sep 28 11:50:50s 0:09:10 -
-Rule sol87 1987 only - Sep 29 11:50:30s 0:09:30 -
-Rule sol87 1987 only - Sep 30 11:50:10s 0:09:50 -
-Rule sol87 1987 only - Oct 1 11:49:50s 0:10:10 -
-Rule sol87 1987 only - Oct 2 11:49:35s 0:10:25 -
-Rule sol87 1987 only - Oct 3 11:49:15s 0:10:45 -
-Rule sol87 1987 only - Oct 4 11:48:55s 0:11:05 -
-Rule sol87 1987 only - Oct 5 11:48:35s 0:11:25 -
-Rule sol87 1987 only - Oct 6 11:48:20s 0:11:40 -
-Rule sol87 1987 only - Oct 7 11:48:00s 0:12:00 -
-Rule sol87 1987 only - Oct 8 11:47:45s 0:12:15 -
-Rule sol87 1987 only - Oct 9 11:47:25s 0:12:35 -
-Rule sol87 1987 only - Oct 10 11:47:10s 0:12:50 -
-Rule sol87 1987 only - Oct 11 11:46:55s 0:13:05 -
-Rule sol87 1987 only - Oct 12 11:46:40s 0:13:20 -
-Rule sol87 1987 only - Oct 13 11:46:25s 0:13:35 -
-Rule sol87 1987 only - Oct 14 11:46:10s 0:13:50 -
-Rule sol87 1987 only - Oct 15 11:45:55s 0:14:05 -
-Rule sol87 1987 only - Oct 16 11:45:45s 0:14:15 -
-Rule sol87 1987 only - Oct 17 11:45:30s 0:14:30 -
-Rule sol87 1987 only - Oct 18 11:45:20s 0:14:40 -
-Rule sol87 1987 only - Oct 19 11:45:05s 0:14:55 -
-Rule sol87 1987 only - Oct 20 11:44:55s 0:15:05 -
-Rule sol87 1987 only - Oct 21 11:44:45s 0:15:15 -
-Rule sol87 1987 only - Oct 22 11:44:35s 0:15:25 -
-Rule sol87 1987 only - Oct 23 11:44:25s 0:15:35 -
-Rule sol87 1987 only - Oct 24 11:44:20s 0:15:40 -
-Rule sol87 1987 only - Oct 25 11:44:10s 0:15:50 -
-Rule sol87 1987 only - Oct 26 11:44:05s 0:15:55 -
-Rule sol87 1987 only - Oct 27 11:43:55s 0:16:05 -
-Rule sol87 1987 only - Oct 28 11:43:50s 0:16:10 -
-Rule sol87 1987 only - Oct 29 11:43:45s 0:16:15 -
-Rule sol87 1987 only - Oct 30 11:43:45s 0:16:15 -
-Rule sol87 1987 only - Oct 31 11:43:40s 0:16:20 -
-Rule sol87 1987 only - Nov 1 11:43:40s 0:16:20 -
-Rule sol87 1987 only - Nov 2 11:43:35s 0:16:25 -
-Rule sol87 1987 only - Nov 3 11:43:35s 0:16:25 -
-Rule sol87 1987 only - Nov 4 11:43:35s 0:16:25 -
-Rule sol87 1987 only - Nov 5 11:43:35s 0:16:25 -
-Rule sol87 1987 only - Nov 6 11:43:40s 0:16:20 -
-Rule sol87 1987 only - Nov 7 11:43:40s 0:16:20 -
-Rule sol87 1987 only - Nov 8 11:43:45s 0:16:15 -
-Rule sol87 1987 only - Nov 9 11:43:50s 0:16:10 -
-Rule sol87 1987 only - Nov 10 11:43:55s 0:16:05 -
-Rule sol87 1987 only - Nov 11 11:44:00s 0:16:00 -
-Rule sol87 1987 only - Nov 12 11:44:05s 0:15:55 -
-Rule sol87 1987 only - Nov 13 11:44:15s 0:15:45 -
-Rule sol87 1987 only - Nov 14 11:44:20s 0:15:40 -
-Rule sol87 1987 only - Nov 15 11:44:30s 0:15:30 -
-Rule sol87 1987 only - Nov 16 11:44:40s 0:15:20 -
-Rule sol87 1987 only - Nov 17 11:44:50s 0:15:10 -
-Rule sol87 1987 only - Nov 18 11:45:05s 0:14:55 -
-Rule sol87 1987 only - Nov 19 11:45:15s 0:14:45 -
-Rule sol87 1987 only - Nov 20 11:45:30s 0:14:30 -
-Rule sol87 1987 only - Nov 21 11:45:45s 0:14:15 -
-Rule sol87 1987 only - Nov 22 11:46:00s 0:14:00 -
-Rule sol87 1987 only - Nov 23 11:46:15s 0:13:45 -
-Rule sol87 1987 only - Nov 24 11:46:30s 0:13:30 -
-Rule sol87 1987 only - Nov 25 11:46:50s 0:13:10 -
-Rule sol87 1987 only - Nov 26 11:47:10s 0:12:50 -
-Rule sol87 1987 only - Nov 27 11:47:25s 0:12:35 -
-Rule sol87 1987 only - Nov 28 11:47:45s 0:12:15 -
-Rule sol87 1987 only - Nov 29 11:48:05s 0:11:55 -
-Rule sol87 1987 only - Nov 30 11:48:30s 0:11:30 -
-Rule sol87 1987 only - Dec 1 11:48:50s 0:11:10 -
-Rule sol87 1987 only - Dec 2 11:49:10s 0:10:50 -
-Rule sol87 1987 only - Dec 3 11:49:35s 0:10:25 -
-Rule sol87 1987 only - Dec 4 11:50:00s 0:10:00 -
-Rule sol87 1987 only - Dec 5 11:50:25s 0:09:35 -
-Rule sol87 1987 only - Dec 6 11:50:50s 0:09:10 -
-Rule sol87 1987 only - Dec 7 11:51:15s 0:08:45 -
-Rule sol87 1987 only - Dec 8 11:51:40s 0:08:20 -
-Rule sol87 1987 only - Dec 9 11:52:05s 0:07:55 -
-Rule sol87 1987 only - Dec 10 11:52:30s 0:07:30 -
-Rule sol87 1987 only - Dec 11 11:53:00s 0:07:00 -
-Rule sol87 1987 only - Dec 12 11:53:25s 0:06:35 -
-Rule sol87 1987 only - Dec 13 11:53:55s 0:06:05 -
-Rule sol87 1987 only - Dec 14 11:54:25s 0:05:35 -
-Rule sol87 1987 only - Dec 15 11:54:50s 0:05:10 -
-Rule sol87 1987 only - Dec 16 11:55:20s 0:04:40 -
-Rule sol87 1987 only - Dec 17 11:55:50s 0:04:10 -
-Rule sol87 1987 only - Dec 18 11:56:20s 0:03:40 -
-Rule sol87 1987 only - Dec 19 11:56:50s 0:03:10 -
-Rule sol87 1987 only - Dec 20 11:57:20s 0:02:40 -
-Rule sol87 1987 only - Dec 21 11:57:50s 0:02:10 -
-Rule sol87 1987 only - Dec 22 11:58:20s 0:01:40 -
-Rule sol87 1987 only - Dec 23 11:58:50s 0:01:10 -
-Rule sol87 1987 only - Dec 24 11:59:20s 0:00:40 -
-Rule sol87 1987 only - Dec 25 11:59:50s 0:00:10 -
-Rule sol87 1987 only - Dec 26 12:00:20s -0:00:20 -
-Rule sol87 1987 only - Dec 27 12:00:45s -0:00:45 -
-Rule sol87 1987 only - Dec 28 12:01:15s -0:01:15 -
-Rule sol87 1987 only - Dec 29 12:01:45s -0:01:45 -
-Rule sol87 1987 only - Dec 30 12:02:15s -0:02:15 -
-Rule sol87 1987 only - Dec 31 12:02:45s -0:02:45 -
-
-# Riyadh is at about 46 degrees 46 minutes East: 3 hrs, 7 mins, 4 secs
-# Before and after 1987, we'll operate on local mean solar time.
-
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone Asia/Riyadh87 3:07:04 - zzz 1987
- 3:07:04 sol87 zzz 1988
- 3:07:04 - zzz
-# For backward compatibility...
-Link Asia/Riyadh87 Mideast/Riyadh87
--- a/test/jdk/sun/util/calendar/zi/tzdata/solar88 Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,411 +0,0 @@
-#
-# 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.
-#
-# <pre>
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# Apparent noon times below are for Riyadh; they're a bit off for other places.
-# Times were computed using formulas in the U.S. Naval Observatory's
-# Almanac for Computers 1988; the formulas "will give EqT to an accuracy of
-# [plus or minus two] seconds during the current year."
-#
-# Rounding to the nearest five seconds results in fewer than
-# 256 different "time types"--a limit that's faced because time types are
-# stored on disk as unsigned chars.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule sol88 1988 only - Jan 1 12:03:15s -0:03:15 -
-Rule sol88 1988 only - Jan 2 12:03:40s -0:03:40 -
-Rule sol88 1988 only - Jan 3 12:04:10s -0:04:10 -
-Rule sol88 1988 only - Jan 4 12:04:40s -0:04:40 -
-Rule sol88 1988 only - Jan 5 12:05:05s -0:05:05 -
-Rule sol88 1988 only - Jan 6 12:05:30s -0:05:30 -
-Rule sol88 1988 only - Jan 7 12:06:00s -0:06:00 -
-Rule sol88 1988 only - Jan 8 12:06:25s -0:06:25 -
-Rule sol88 1988 only - Jan 9 12:06:50s -0:06:50 -
-Rule sol88 1988 only - Jan 10 12:07:15s -0:07:15 -
-Rule sol88 1988 only - Jan 11 12:07:40s -0:07:40 -
-Rule sol88 1988 only - Jan 12 12:08:05s -0:08:05 -
-Rule sol88 1988 only - Jan 13 12:08:25s -0:08:25 -
-Rule sol88 1988 only - Jan 14 12:08:50s -0:08:50 -
-Rule sol88 1988 only - Jan 15 12:09:10s -0:09:10 -
-Rule sol88 1988 only - Jan 16 12:09:30s -0:09:30 -
-Rule sol88 1988 only - Jan 17 12:09:50s -0:09:50 -
-Rule sol88 1988 only - Jan 18 12:10:10s -0:10:10 -
-Rule sol88 1988 only - Jan 19 12:10:30s -0:10:30 -
-Rule sol88 1988 only - Jan 20 12:10:50s -0:10:50 -
-Rule sol88 1988 only - Jan 21 12:11:05s -0:11:05 -
-Rule sol88 1988 only - Jan 22 12:11:25s -0:11:25 -
-Rule sol88 1988 only - Jan 23 12:11:40s -0:11:40 -
-Rule sol88 1988 only - Jan 24 12:11:55s -0:11:55 -
-Rule sol88 1988 only - Jan 25 12:12:10s -0:12:10 -
-Rule sol88 1988 only - Jan 26 12:12:25s -0:12:25 -
-Rule sol88 1988 only - Jan 27 12:12:40s -0:12:40 -
-Rule sol88 1988 only - Jan 28 12:12:50s -0:12:50 -
-Rule sol88 1988 only - Jan 29 12:13:00s -0:13:00 -
-Rule sol88 1988 only - Jan 30 12:13:10s -0:13:10 -
-Rule sol88 1988 only - Jan 31 12:13:20s -0:13:20 -
-Rule sol88 1988 only - Feb 1 12:13:30s -0:13:30 -
-Rule sol88 1988 only - Feb 2 12:13:40s -0:13:40 -
-Rule sol88 1988 only - Feb 3 12:13:45s -0:13:45 -
-Rule sol88 1988 only - Feb 4 12:13:55s -0:13:55 -
-Rule sol88 1988 only - Feb 5 12:14:00s -0:14:00 -
-Rule sol88 1988 only - Feb 6 12:14:05s -0:14:05 -
-Rule sol88 1988 only - Feb 7 12:14:10s -0:14:10 -
-Rule sol88 1988 only - Feb 8 12:14:10s -0:14:10 -
-Rule sol88 1988 only - Feb 9 12:14:15s -0:14:15 -
-Rule sol88 1988 only - Feb 10 12:14:15s -0:14:15 -
-Rule sol88 1988 only - Feb 11 12:14:15s -0:14:15 -
-Rule sol88 1988 only - Feb 12 12:14:15s -0:14:15 -
-Rule sol88 1988 only - Feb 13 12:14:15s -0:14:15 -
-Rule sol88 1988 only - Feb 14 12:14:15s -0:14:15 -
-Rule sol88 1988 only - Feb 15 12:14:10s -0:14:10 -
-Rule sol88 1988 only - Feb 16 12:14:10s -0:14:10 -
-Rule sol88 1988 only - Feb 17 12:14:05s -0:14:05 -
-Rule sol88 1988 only - Feb 18 12:14:00s -0:14:00 -
-Rule sol88 1988 only - Feb 19 12:13:55s -0:13:55 -
-Rule sol88 1988 only - Feb 20 12:13:50s -0:13:50 -
-Rule sol88 1988 only - Feb 21 12:13:45s -0:13:45 -
-Rule sol88 1988 only - Feb 22 12:13:40s -0:13:40 -
-Rule sol88 1988 only - Feb 23 12:13:30s -0:13:30 -
-Rule sol88 1988 only - Feb 24 12:13:20s -0:13:20 -
-Rule sol88 1988 only - Feb 25 12:13:15s -0:13:15 -
-Rule sol88 1988 only - Feb 26 12:13:05s -0:13:05 -
-Rule sol88 1988 only - Feb 27 12:12:55s -0:12:55 -
-Rule sol88 1988 only - Feb 28 12:12:45s -0:12:45 -
-Rule sol88 1988 only - Feb 29 12:12:30s -0:12:30 -
-Rule sol88 1988 only - Mar 1 12:12:20s -0:12:20 -
-Rule sol88 1988 only - Mar 2 12:12:10s -0:12:10 -
-Rule sol88 1988 only - Mar 3 12:11:55s -0:11:55 -
-Rule sol88 1988 only - Mar 4 12:11:45s -0:11:45 -
-Rule sol88 1988 only - Mar 5 12:11:30s -0:11:30 -
-Rule sol88 1988 only - Mar 6 12:11:15s -0:11:15 -
-Rule sol88 1988 only - Mar 7 12:11:00s -0:11:00 -
-Rule sol88 1988 only - Mar 8 12:10:45s -0:10:45 -
-Rule sol88 1988 only - Mar 9 12:10:30s -0:10:30 -
-Rule sol88 1988 only - Mar 10 12:10:15s -0:10:15 -
-Rule sol88 1988 only - Mar 11 12:10:00s -0:10:00 -
-Rule sol88 1988 only - Mar 12 12:09:45s -0:09:45 -
-Rule sol88 1988 only - Mar 13 12:09:30s -0:09:30 -
-Rule sol88 1988 only - Mar 14 12:09:10s -0:09:10 -
-Rule sol88 1988 only - Mar 15 12:08:55s -0:08:55 -
-Rule sol88 1988 only - Mar 16 12:08:40s -0:08:40 -
-Rule sol88 1988 only - Mar 17 12:08:20s -0:08:20 -
-Rule sol88 1988 only - Mar 18 12:08:05s -0:08:05 -
-Rule sol88 1988 only - Mar 19 12:07:45s -0:07:45 -
-Rule sol88 1988 only - Mar 20 12:07:30s -0:07:30 -
-Rule sol88 1988 only - Mar 21 12:07:10s -0:07:10 -
-Rule sol88 1988 only - Mar 22 12:06:50s -0:06:50 -
-Rule sol88 1988 only - Mar 23 12:06:35s -0:06:35 -
-Rule sol88 1988 only - Mar 24 12:06:15s -0:06:15 -
-Rule sol88 1988 only - Mar 25 12:06:00s -0:06:00 -
-Rule sol88 1988 only - Mar 26 12:05:40s -0:05:40 -
-Rule sol88 1988 only - Mar 27 12:05:20s -0:05:20 -
-Rule sol88 1988 only - Mar 28 12:05:05s -0:05:05 -
-Rule sol88 1988 only - Mar 29 12:04:45s -0:04:45 -
-Rule sol88 1988 only - Mar 30 12:04:25s -0:04:25 -
-Rule sol88 1988 only - Mar 31 12:04:10s -0:04:10 -
-Rule sol88 1988 only - Apr 1 12:03:50s -0:03:50 -
-Rule sol88 1988 only - Apr 2 12:03:35s -0:03:35 -
-Rule sol88 1988 only - Apr 3 12:03:15s -0:03:15 -
-Rule sol88 1988 only - Apr 4 12:03:00s -0:03:00 -
-Rule sol88 1988 only - Apr 5 12:02:40s -0:02:40 -
-Rule sol88 1988 only - Apr 6 12:02:25s -0:02:25 -
-Rule sol88 1988 only - Apr 7 12:02:05s -0:02:05 -
-Rule sol88 1988 only - Apr 8 12:01:50s -0:01:50 -
-Rule sol88 1988 only - Apr 9 12:01:35s -0:01:35 -
-Rule sol88 1988 only - Apr 10 12:01:15s -0:01:15 -
-Rule sol88 1988 only - Apr 11 12:01:00s -0:01:00 -
-Rule sol88 1988 only - Apr 12 12:00:45s -0:00:45 -
-Rule sol88 1988 only - Apr 13 12:00:30s -0:00:30 -
-Rule sol88 1988 only - Apr 14 12:00:15s -0:00:15 -
-Rule sol88 1988 only - Apr 15 12:00:00s 0:00:00 -
-Rule sol88 1988 only - Apr 16 11:59:45s 0:00:15 -
-Rule sol88 1988 only - Apr 17 11:59:30s 0:00:30 -
-Rule sol88 1988 only - Apr 18 11:59:20s 0:00:40 -
-Rule sol88 1988 only - Apr 19 11:59:05s 0:00:55 -
-Rule sol88 1988 only - Apr 20 11:58:55s 0:01:05 -
-Rule sol88 1988 only - Apr 21 11:58:40s 0:01:20 -
-Rule sol88 1988 only - Apr 22 11:58:30s 0:01:30 -
-Rule sol88 1988 only - Apr 23 11:58:15s 0:01:45 -
-Rule sol88 1988 only - Apr 24 11:58:05s 0:01:55 -
-Rule sol88 1988 only - Apr 25 11:57:55s 0:02:05 -
-Rule sol88 1988 only - Apr 26 11:57:45s 0:02:15 -
-Rule sol88 1988 only - Apr 27 11:57:35s 0:02:25 -
-Rule sol88 1988 only - Apr 28 11:57:30s 0:02:30 -
-Rule sol88 1988 only - Apr 29 11:57:20s 0:02:40 -
-Rule sol88 1988 only - Apr 30 11:57:10s 0:02:50 -
-Rule sol88 1988 only - May 1 11:57:05s 0:02:55 -
-Rule sol88 1988 only - May 2 11:56:55s 0:03:05 -
-Rule sol88 1988 only - May 3 11:56:50s 0:03:10 -
-Rule sol88 1988 only - May 4 11:56:45s 0:03:15 -
-Rule sol88 1988 only - May 5 11:56:40s 0:03:20 -
-Rule sol88 1988 only - May 6 11:56:35s 0:03:25 -
-Rule sol88 1988 only - May 7 11:56:30s 0:03:30 -
-Rule sol88 1988 only - May 8 11:56:25s 0:03:35 -
-Rule sol88 1988 only - May 9 11:56:25s 0:03:35 -
-Rule sol88 1988 only - May 10 11:56:20s 0:03:40 -
-Rule sol88 1988 only - May 11 11:56:20s 0:03:40 -
-Rule sol88 1988 only - May 12 11:56:20s 0:03:40 -
-Rule sol88 1988 only - May 13 11:56:20s 0:03:40 -
-Rule sol88 1988 only - May 14 11:56:20s 0:03:40 -
-Rule sol88 1988 only - May 15 11:56:20s 0:03:40 -
-Rule sol88 1988 only - May 16 11:56:20s 0:03:40 -
-Rule sol88 1988 only - May 17 11:56:20s 0:03:40 -
-Rule sol88 1988 only - May 18 11:56:25s 0:03:35 -
-Rule sol88 1988 only - May 19 11:56:25s 0:03:35 -
-Rule sol88 1988 only - May 20 11:56:30s 0:03:30 -
-Rule sol88 1988 only - May 21 11:56:35s 0:03:25 -
-Rule sol88 1988 only - May 22 11:56:40s 0:03:20 -
-Rule sol88 1988 only - May 23 11:56:45s 0:03:15 -
-Rule sol88 1988 only - May 24 11:56:50s 0:03:10 -
-Rule sol88 1988 only - May 25 11:56:55s 0:03:05 -
-Rule sol88 1988 only - May 26 11:57:00s 0:03:00 -
-Rule sol88 1988 only - May 27 11:57:05s 0:02:55 -
-Rule sol88 1988 only - May 28 11:57:15s 0:02:45 -
-Rule sol88 1988 only - May 29 11:57:20s 0:02:40 -
-Rule sol88 1988 only - May 30 11:57:30s 0:02:30 -
-Rule sol88 1988 only - May 31 11:57:40s 0:02:20 -
-Rule sol88 1988 only - Jun 1 11:57:50s 0:02:10 -
-Rule sol88 1988 only - Jun 2 11:57:55s 0:02:05 -
-Rule sol88 1988 only - Jun 3 11:58:05s 0:01:55 -
-Rule sol88 1988 only - Jun 4 11:58:15s 0:01:45 -
-Rule sol88 1988 only - Jun 5 11:58:30s 0:01:30 -
-Rule sol88 1988 only - Jun 6 11:58:40s 0:01:20 -
-Rule sol88 1988 only - Jun 7 11:58:50s 0:01:10 -
-Rule sol88 1988 only - Jun 8 11:59:00s 0:01:00 -
-Rule sol88 1988 only - Jun 9 11:59:15s 0:00:45 -
-Rule sol88 1988 only - Jun 10 11:59:25s 0:00:35 -
-Rule sol88 1988 only - Jun 11 11:59:35s 0:00:25 -
-Rule sol88 1988 only - Jun 12 11:59:50s 0:00:10 -
-Rule sol88 1988 only - Jun 13 12:00:00s 0:00:00 -
-Rule sol88 1988 only - Jun 14 12:00:15s -0:00:15 -
-Rule sol88 1988 only - Jun 15 12:00:25s -0:00:25 -
-Rule sol88 1988 only - Jun 16 12:00:40s -0:00:40 -
-Rule sol88 1988 only - Jun 17 12:00:55s -0:00:55 -
-Rule sol88 1988 only - Jun 18 12:01:05s -0:01:05 -
-Rule sol88 1988 only - Jun 19 12:01:20s -0:01:20 -
-Rule sol88 1988 only - Jun 20 12:01:30s -0:01:30 -
-Rule sol88 1988 only - Jun 21 12:01:45s -0:01:45 -
-Rule sol88 1988 only - Jun 22 12:02:00s -0:02:00 -
-Rule sol88 1988 only - Jun 23 12:02:10s -0:02:10 -
-Rule sol88 1988 only - Jun 24 12:02:25s -0:02:25 -
-Rule sol88 1988 only - Jun 25 12:02:35s -0:02:35 -
-Rule sol88 1988 only - Jun 26 12:02:50s -0:02:50 -
-Rule sol88 1988 only - Jun 27 12:03:00s -0:03:00 -
-Rule sol88 1988 only - Jun 28 12:03:15s -0:03:15 -
-Rule sol88 1988 only - Jun 29 12:03:25s -0:03:25 -
-Rule sol88 1988 only - Jun 30 12:03:40s -0:03:40 -
-Rule sol88 1988 only - Jul 1 12:03:50s -0:03:50 -
-Rule sol88 1988 only - Jul 2 12:04:00s -0:04:00 -
-Rule sol88 1988 only - Jul 3 12:04:10s -0:04:10 -
-Rule sol88 1988 only - Jul 4 12:04:25s -0:04:25 -
-Rule sol88 1988 only - Jul 5 12:04:35s -0:04:35 -
-Rule sol88 1988 only - Jul 6 12:04:45s -0:04:45 -
-Rule sol88 1988 only - Jul 7 12:04:55s -0:04:55 -
-Rule sol88 1988 only - Jul 8 12:05:05s -0:05:05 -
-Rule sol88 1988 only - Jul 9 12:05:10s -0:05:10 -
-Rule sol88 1988 only - Jul 10 12:05:20s -0:05:20 -
-Rule sol88 1988 only - Jul 11 12:05:30s -0:05:30 -
-Rule sol88 1988 only - Jul 12 12:05:35s -0:05:35 -
-Rule sol88 1988 only - Jul 13 12:05:45s -0:05:45 -
-Rule sol88 1988 only - Jul 14 12:05:50s -0:05:50 -
-Rule sol88 1988 only - Jul 15 12:05:55s -0:05:55 -
-Rule sol88 1988 only - Jul 16 12:06:00s -0:06:00 -
-Rule sol88 1988 only - Jul 17 12:06:05s -0:06:05 -
-Rule sol88 1988 only - Jul 18 12:06:10s -0:06:10 -
-Rule sol88 1988 only - Jul 19 12:06:15s -0:06:15 -
-Rule sol88 1988 only - Jul 20 12:06:20s -0:06:20 -
-Rule sol88 1988 only - Jul 21 12:06:25s -0:06:25 -
-Rule sol88 1988 only - Jul 22 12:06:25s -0:06:25 -
-Rule sol88 1988 only - Jul 23 12:06:25s -0:06:25 -
-Rule sol88 1988 only - Jul 24 12:06:30s -0:06:30 -
-Rule sol88 1988 only - Jul 25 12:06:30s -0:06:30 -
-Rule sol88 1988 only - Jul 26 12:06:30s -0:06:30 -
-Rule sol88 1988 only - Jul 27 12:06:30s -0:06:30 -
-Rule sol88 1988 only - Jul 28 12:06:30s -0:06:30 -
-Rule sol88 1988 only - Jul 29 12:06:25s -0:06:25 -
-Rule sol88 1988 only - Jul 30 12:06:25s -0:06:25 -
-Rule sol88 1988 only - Jul 31 12:06:20s -0:06:20 -
-Rule sol88 1988 only - Aug 1 12:06:15s -0:06:15 -
-Rule sol88 1988 only - Aug 2 12:06:15s -0:06:15 -
-Rule sol88 1988 only - Aug 3 12:06:10s -0:06:10 -
-Rule sol88 1988 only - Aug 4 12:06:05s -0:06:05 -
-Rule sol88 1988 only - Aug 5 12:05:55s -0:05:55 -
-Rule sol88 1988 only - Aug 6 12:05:50s -0:05:50 -
-Rule sol88 1988 only - Aug 7 12:05:45s -0:05:45 -
-Rule sol88 1988 only - Aug 8 12:05:35s -0:05:35 -
-Rule sol88 1988 only - Aug 9 12:05:25s -0:05:25 -
-Rule sol88 1988 only - Aug 10 12:05:20s -0:05:20 -
-Rule sol88 1988 only - Aug 11 12:05:10s -0:05:10 -
-Rule sol88 1988 only - Aug 12 12:05:00s -0:05:00 -
-Rule sol88 1988 only - Aug 13 12:04:50s -0:04:50 -
-Rule sol88 1988 only - Aug 14 12:04:35s -0:04:35 -
-Rule sol88 1988 only - Aug 15 12:04:25s -0:04:25 -
-Rule sol88 1988 only - Aug 16 12:04:15s -0:04:15 -
-Rule sol88 1988 only - Aug 17 12:04:00s -0:04:00 -
-Rule sol88 1988 only - Aug 18 12:03:50s -0:03:50 -
-Rule sol88 1988 only - Aug 19 12:03:35s -0:03:35 -
-Rule sol88 1988 only - Aug 20 12:03:20s -0:03:20 -
-Rule sol88 1988 only - Aug 21 12:03:05s -0:03:05 -
-Rule sol88 1988 only - Aug 22 12:02:50s -0:02:50 -
-Rule sol88 1988 only - Aug 23 12:02:35s -0:02:35 -
-Rule sol88 1988 only - Aug 24 12:02:20s -0:02:20 -
-Rule sol88 1988 only - Aug 25 12:02:00s -0:02:00 -
-Rule sol88 1988 only - Aug 26 12:01:45s -0:01:45 -
-Rule sol88 1988 only - Aug 27 12:01:30s -0:01:30 -
-Rule sol88 1988 only - Aug 28 12:01:10s -0:01:10 -
-Rule sol88 1988 only - Aug 29 12:00:50s -0:00:50 -
-Rule sol88 1988 only - Aug 30 12:00:35s -0:00:35 -
-Rule sol88 1988 only - Aug 31 12:00:15s -0:00:15 -
-Rule sol88 1988 only - Sep 1 11:59:55s 0:00:05 -
-Rule sol88 1988 only - Sep 2 11:59:35s 0:00:25 -
-Rule sol88 1988 only - Sep 3 11:59:20s 0:00:40 -
-Rule sol88 1988 only - Sep 4 11:59:00s 0:01:00 -
-Rule sol88 1988 only - Sep 5 11:58:40s 0:01:20 -
-Rule sol88 1988 only - Sep 6 11:58:20s 0:01:40 -
-Rule sol88 1988 only - Sep 7 11:58:00s 0:02:00 -
-Rule sol88 1988 only - Sep 8 11:57:35s 0:02:25 -
-Rule sol88 1988 only - Sep 9 11:57:15s 0:02:45 -
-Rule sol88 1988 only - Sep 10 11:56:55s 0:03:05 -
-Rule sol88 1988 only - Sep 11 11:56:35s 0:03:25 -
-Rule sol88 1988 only - Sep 12 11:56:15s 0:03:45 -
-Rule sol88 1988 only - Sep 13 11:55:50s 0:04:10 -
-Rule sol88 1988 only - Sep 14 11:55:30s 0:04:30 -
-Rule sol88 1988 only - Sep 15 11:55:10s 0:04:50 -
-Rule sol88 1988 only - Sep 16 11:54:50s 0:05:10 -
-Rule sol88 1988 only - Sep 17 11:54:25s 0:05:35 -
-Rule sol88 1988 only - Sep 18 11:54:05s 0:05:55 -
-Rule sol88 1988 only - Sep 19 11:53:45s 0:06:15 -
-Rule sol88 1988 only - Sep 20 11:53:25s 0:06:35 -
-Rule sol88 1988 only - Sep 21 11:53:00s 0:07:00 -
-Rule sol88 1988 only - Sep 22 11:52:40s 0:07:20 -
-Rule sol88 1988 only - Sep 23 11:52:20s 0:07:40 -
-Rule sol88 1988 only - Sep 24 11:52:00s 0:08:00 -
-Rule sol88 1988 only - Sep 25 11:51:40s 0:08:20 -
-Rule sol88 1988 only - Sep 26 11:51:15s 0:08:45 -
-Rule sol88 1988 only - Sep 27 11:50:55s 0:09:05 -
-Rule sol88 1988 only - Sep 28 11:50:35s 0:09:25 -
-Rule sol88 1988 only - Sep 29 11:50:15s 0:09:45 -
-Rule sol88 1988 only - Sep 30 11:49:55s 0:10:05 -
-Rule sol88 1988 only - Oct 1 11:49:35s 0:10:25 -
-Rule sol88 1988 only - Oct 2 11:49:20s 0:10:40 -
-Rule sol88 1988 only - Oct 3 11:49:00s 0:11:00 -
-Rule sol88 1988 only - Oct 4 11:48:40s 0:11:20 -
-Rule sol88 1988 only - Oct 5 11:48:25s 0:11:35 -
-Rule sol88 1988 only - Oct 6 11:48:05s 0:11:55 -
-Rule sol88 1988 only - Oct 7 11:47:50s 0:12:10 -
-Rule sol88 1988 only - Oct 8 11:47:30s 0:12:30 -
-Rule sol88 1988 only - Oct 9 11:47:15s 0:12:45 -
-Rule sol88 1988 only - Oct 10 11:47:00s 0:13:00 -
-Rule sol88 1988 only - Oct 11 11:46:45s 0:13:15 -
-Rule sol88 1988 only - Oct 12 11:46:30s 0:13:30 -
-Rule sol88 1988 only - Oct 13 11:46:15s 0:13:45 -
-Rule sol88 1988 only - Oct 14 11:46:00s 0:14:00 -
-Rule sol88 1988 only - Oct 15 11:45:45s 0:14:15 -
-Rule sol88 1988 only - Oct 16 11:45:35s 0:14:25 -
-Rule sol88 1988 only - Oct 17 11:45:20s 0:14:40 -
-Rule sol88 1988 only - Oct 18 11:45:10s 0:14:50 -
-Rule sol88 1988 only - Oct 19 11:45:00s 0:15:00 -
-Rule sol88 1988 only - Oct 20 11:44:45s 0:15:15 -
-Rule sol88 1988 only - Oct 21 11:44:40s 0:15:20 -
-Rule sol88 1988 only - Oct 22 11:44:30s 0:15:30 -
-Rule sol88 1988 only - Oct 23 11:44:20s 0:15:40 -
-Rule sol88 1988 only - Oct 24 11:44:10s 0:15:50 -
-Rule sol88 1988 only - Oct 25 11:44:05s 0:15:55 -
-Rule sol88 1988 only - Oct 26 11:44:00s 0:16:00 -
-Rule sol88 1988 only - Oct 27 11:43:55s 0:16:05 -
-Rule sol88 1988 only - Oct 28 11:43:50s 0:16:10 -
-Rule sol88 1988 only - Oct 29 11:43:45s 0:16:15 -
-Rule sol88 1988 only - Oct 30 11:43:40s 0:16:20 -
-Rule sol88 1988 only - Oct 31 11:43:40s 0:16:20 -
-Rule sol88 1988 only - Nov 1 11:43:35s 0:16:25 -
-Rule sol88 1988 only - Nov 2 11:43:35s 0:16:25 -
-Rule sol88 1988 only - Nov 3 11:43:35s 0:16:25 -
-Rule sol88 1988 only - Nov 4 11:43:35s 0:16:25 -
-Rule sol88 1988 only - Nov 5 11:43:40s 0:16:20 -
-Rule sol88 1988 only - Nov 6 11:43:40s 0:16:20 -
-Rule sol88 1988 only - Nov 7 11:43:45s 0:16:15 -
-Rule sol88 1988 only - Nov 8 11:43:45s 0:16:15 -
-Rule sol88 1988 only - Nov 9 11:43:50s 0:16:10 -
-Rule sol88 1988 only - Nov 10 11:44:00s 0:16:00 -
-Rule sol88 1988 only - Nov 11 11:44:05s 0:15:55 -
-Rule sol88 1988 only - Nov 12 11:44:10s 0:15:50 -
-Rule sol88 1988 only - Nov 13 11:44:20s 0:15:40 -
-Rule sol88 1988 only - Nov 14 11:44:30s 0:15:30 -
-Rule sol88 1988 only - Nov 15 11:44:40s 0:15:20 -
-Rule sol88 1988 only - Nov 16 11:44:50s 0:15:10 -
-Rule sol88 1988 only - Nov 17 11:45:00s 0:15:00 -
-Rule sol88 1988 only - Nov 18 11:45:15s 0:14:45 -
-Rule sol88 1988 only - Nov 19 11:45:25s 0:14:35 -
-Rule sol88 1988 only - Nov 20 11:45:40s 0:14:20 -
-Rule sol88 1988 only - Nov 21 11:45:55s 0:14:05 -
-Rule sol88 1988 only - Nov 22 11:46:10s 0:13:50 -
-Rule sol88 1988 only - Nov 23 11:46:30s 0:13:30 -
-Rule sol88 1988 only - Nov 24 11:46:45s 0:13:15 -
-Rule sol88 1988 only - Nov 25 11:47:05s 0:12:55 -
-Rule sol88 1988 only - Nov 26 11:47:20s 0:12:40 -
-Rule sol88 1988 only - Nov 27 11:47:40s 0:12:20 -
-Rule sol88 1988 only - Nov 28 11:48:00s 0:12:00 -
-Rule sol88 1988 only - Nov 29 11:48:25s 0:11:35 -
-Rule sol88 1988 only - Nov 30 11:48:45s 0:11:15 -
-Rule sol88 1988 only - Dec 1 11:49:05s 0:10:55 -
-Rule sol88 1988 only - Dec 2 11:49:30s 0:10:30 -
-Rule sol88 1988 only - Dec 3 11:49:55s 0:10:05 -
-Rule sol88 1988 only - Dec 4 11:50:15s 0:09:45 -
-Rule sol88 1988 only - Dec 5 11:50:40s 0:09:20 -
-Rule sol88 1988 only - Dec 6 11:51:05s 0:08:55 -
-Rule sol88 1988 only - Dec 7 11:51:35s 0:08:25 -
-Rule sol88 1988 only - Dec 8 11:52:00s 0:08:00 -
-Rule sol88 1988 only - Dec 9 11:52:25s 0:07:35 -
-Rule sol88 1988 only - Dec 10 11:52:55s 0:07:05 -
-Rule sol88 1988 only - Dec 11 11:53:20s 0:06:40 -
-Rule sol88 1988 only - Dec 12 11:53:50s 0:06:10 -
-Rule sol88 1988 only - Dec 13 11:54:15s 0:05:45 -
-Rule sol88 1988 only - Dec 14 11:54:45s 0:05:15 -
-Rule sol88 1988 only - Dec 15 11:55:15s 0:04:45 -
-Rule sol88 1988 only - Dec 16 11:55:45s 0:04:15 -
-Rule sol88 1988 only - Dec 17 11:56:15s 0:03:45 -
-Rule sol88 1988 only - Dec 18 11:56:40s 0:03:20 -
-Rule sol88 1988 only - Dec 19 11:57:10s 0:02:50 -
-Rule sol88 1988 only - Dec 20 11:57:40s 0:02:20 -
-Rule sol88 1988 only - Dec 21 11:58:10s 0:01:50 -
-Rule sol88 1988 only - Dec 22 11:58:40s 0:01:20 -
-Rule sol88 1988 only - Dec 23 11:59:10s 0:00:50 -
-Rule sol88 1988 only - Dec 24 11:59:40s 0:00:20 -
-Rule sol88 1988 only - Dec 25 12:00:10s -0:00:10 -
-Rule sol88 1988 only - Dec 26 12:00:40s -0:00:40 -
-Rule sol88 1988 only - Dec 27 12:01:10s -0:01:10 -
-Rule sol88 1988 only - Dec 28 12:01:40s -0:01:40 -
-Rule sol88 1988 only - Dec 29 12:02:10s -0:02:10 -
-Rule sol88 1988 only - Dec 30 12:02:35s -0:02:35 -
-Rule sol88 1988 only - Dec 31 12:03:05s -0:03:05 -
-
-# Riyadh is at about 46 degrees 46 minutes East: 3 hrs, 7 mins, 4 secs
-# Before and after 1988, we'll operate on local mean solar time.
-
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone Asia/Riyadh88 3:07:04 - zzz 1988
- 3:07:04 sol88 zzz 1989
- 3:07:04 - zzz
-# For backward compatibility...
-Link Asia/Riyadh88 Mideast/Riyadh88
--- a/test/jdk/sun/util/calendar/zi/tzdata/solar89 Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,416 +0,0 @@
-#
-# 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.
-#
-# <pre>
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# Apparent noon times below are for Riyadh; they're a bit off for other places.
-# Times were computed using a formula provided by the U. S. Naval Observatory:
-# eqt = -105.8 * sin(l) + 596.2 * sin(2 * l) + 4.4 * sin(3 * l)
-# -12.7 * sin(4 * l) - 429.0 * cos(l) - 2.1 * cos (2 * l)
-# + 19.3 * cos(3 * l);
-# where l is the "mean longitude of the Sun" given by
-# l = 279.642 degrees + 0.985647 * d
-# and d is the interval in days from January 0, 0 hours Universal Time
-# (equaling the day of the year plus the fraction of a day from zero hours).
-# The accuracy of the formula is plus or minus three seconds.
-#
-# Rounding to the nearest five seconds results in fewer than
-# 256 different "time types"--a limit that's faced because time types are
-# stored on disk as unsigned chars.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule sol89 1989 only - Jan 1 12:03:35s -0:03:35 -
-Rule sol89 1989 only - Jan 2 12:04:05s -0:04:05 -
-Rule sol89 1989 only - Jan 3 12:04:30s -0:04:30 -
-Rule sol89 1989 only - Jan 4 12:05:00s -0:05:00 -
-Rule sol89 1989 only - Jan 5 12:05:25s -0:05:25 -
-Rule sol89 1989 only - Jan 6 12:05:50s -0:05:50 -
-Rule sol89 1989 only - Jan 7 12:06:15s -0:06:15 -
-Rule sol89 1989 only - Jan 8 12:06:45s -0:06:45 -
-Rule sol89 1989 only - Jan 9 12:07:10s -0:07:10 -
-Rule sol89 1989 only - Jan 10 12:07:35s -0:07:35 -
-Rule sol89 1989 only - Jan 11 12:07:55s -0:07:55 -
-Rule sol89 1989 only - Jan 12 12:08:20s -0:08:20 -
-Rule sol89 1989 only - Jan 13 12:08:45s -0:08:45 -
-Rule sol89 1989 only - Jan 14 12:09:05s -0:09:05 -
-Rule sol89 1989 only - Jan 15 12:09:25s -0:09:25 -
-Rule sol89 1989 only - Jan 16 12:09:45s -0:09:45 -
-Rule sol89 1989 only - Jan 17 12:10:05s -0:10:05 -
-Rule sol89 1989 only - Jan 18 12:10:25s -0:10:25 -
-Rule sol89 1989 only - Jan 19 12:10:45s -0:10:45 -
-Rule sol89 1989 only - Jan 20 12:11:05s -0:11:05 -
-Rule sol89 1989 only - Jan 21 12:11:20s -0:11:20 -
-Rule sol89 1989 only - Jan 22 12:11:35s -0:11:35 -
-Rule sol89 1989 only - Jan 23 12:11:55s -0:11:55 -
-Rule sol89 1989 only - Jan 24 12:12:10s -0:12:10 -
-Rule sol89 1989 only - Jan 25 12:12:20s -0:12:20 -
-Rule sol89 1989 only - Jan 26 12:12:35s -0:12:35 -
-Rule sol89 1989 only - Jan 27 12:12:50s -0:12:50 -
-Rule sol89 1989 only - Jan 28 12:13:00s -0:13:00 -
-Rule sol89 1989 only - Jan 29 12:13:10s -0:13:10 -
-Rule sol89 1989 only - Jan 30 12:13:20s -0:13:20 -
-Rule sol89 1989 only - Jan 31 12:13:30s -0:13:30 -
-Rule sol89 1989 only - Feb 1 12:13:40s -0:13:40 -
-Rule sol89 1989 only - Feb 2 12:13:45s -0:13:45 -
-Rule sol89 1989 only - Feb 3 12:13:55s -0:13:55 -
-Rule sol89 1989 only - Feb 4 12:14:00s -0:14:00 -
-Rule sol89 1989 only - Feb 5 12:14:05s -0:14:05 -
-Rule sol89 1989 only - Feb 6 12:14:10s -0:14:10 -
-Rule sol89 1989 only - Feb 7 12:14:10s -0:14:10 -
-Rule sol89 1989 only - Feb 8 12:14:15s -0:14:15 -
-Rule sol89 1989 only - Feb 9 12:14:15s -0:14:15 -
-Rule sol89 1989 only - Feb 10 12:14:20s -0:14:20 -
-Rule sol89 1989 only - Feb 11 12:14:20s -0:14:20 -
-Rule sol89 1989 only - Feb 12 12:14:20s -0:14:20 -
-Rule sol89 1989 only - Feb 13 12:14:15s -0:14:15 -
-Rule sol89 1989 only - Feb 14 12:14:15s -0:14:15 -
-Rule sol89 1989 only - Feb 15 12:14:10s -0:14:10 -
-Rule sol89 1989 only - Feb 16 12:14:10s -0:14:10 -
-Rule sol89 1989 only - Feb 17 12:14:05s -0:14:05 -
-Rule sol89 1989 only - Feb 18 12:14:00s -0:14:00 -
-Rule sol89 1989 only - Feb 19 12:13:55s -0:13:55 -
-Rule sol89 1989 only - Feb 20 12:13:50s -0:13:50 -
-Rule sol89 1989 only - Feb 21 12:13:40s -0:13:40 -
-Rule sol89 1989 only - Feb 22 12:13:35s -0:13:35 -
-Rule sol89 1989 only - Feb 23 12:13:25s -0:13:25 -
-Rule sol89 1989 only - Feb 24 12:13:15s -0:13:15 -
-Rule sol89 1989 only - Feb 25 12:13:05s -0:13:05 -
-Rule sol89 1989 only - Feb 26 12:12:55s -0:12:55 -
-Rule sol89 1989 only - Feb 27 12:12:45s -0:12:45 -
-Rule sol89 1989 only - Feb 28 12:12:35s -0:12:35 -
-Rule sol89 1989 only - Mar 1 12:12:25s -0:12:25 -
-Rule sol89 1989 only - Mar 2 12:12:10s -0:12:10 -
-Rule sol89 1989 only - Mar 3 12:12:00s -0:12:00 -
-Rule sol89 1989 only - Mar 4 12:11:45s -0:11:45 -
-Rule sol89 1989 only - Mar 5 12:11:35s -0:11:35 -
-Rule sol89 1989 only - Mar 6 12:11:20s -0:11:20 -
-Rule sol89 1989 only - Mar 7 12:11:05s -0:11:05 -
-Rule sol89 1989 only - Mar 8 12:10:50s -0:10:50 -
-Rule sol89 1989 only - Mar 9 12:10:35s -0:10:35 -
-Rule sol89 1989 only - Mar 10 12:10:20s -0:10:20 -
-Rule sol89 1989 only - Mar 11 12:10:05s -0:10:05 -
-Rule sol89 1989 only - Mar 12 12:09:50s -0:09:50 -
-Rule sol89 1989 only - Mar 13 12:09:30s -0:09:30 -
-Rule sol89 1989 only - Mar 14 12:09:15s -0:09:15 -
-Rule sol89 1989 only - Mar 15 12:09:00s -0:09:00 -
-Rule sol89 1989 only - Mar 16 12:08:40s -0:08:40 -
-Rule sol89 1989 only - Mar 17 12:08:25s -0:08:25 -
-Rule sol89 1989 only - Mar 18 12:08:05s -0:08:05 -
-Rule sol89 1989 only - Mar 19 12:07:50s -0:07:50 -
-Rule sol89 1989 only - Mar 20 12:07:30s -0:07:30 -
-Rule sol89 1989 only - Mar 21 12:07:15s -0:07:15 -
-Rule sol89 1989 only - Mar 22 12:06:55s -0:06:55 -
-Rule sol89 1989 only - Mar 23 12:06:35s -0:06:35 -
-Rule sol89 1989 only - Mar 24 12:06:20s -0:06:20 -
-Rule sol89 1989 only - Mar 25 12:06:00s -0:06:00 -
-Rule sol89 1989 only - Mar 26 12:05:40s -0:05:40 -
-Rule sol89 1989 only - Mar 27 12:05:25s -0:05:25 -
-Rule sol89 1989 only - Mar 28 12:05:05s -0:05:05 -
-Rule sol89 1989 only - Mar 29 12:04:50s -0:04:50 -
-Rule sol89 1989 only - Mar 30 12:04:30s -0:04:30 -
-Rule sol89 1989 only - Mar 31 12:04:10s -0:04:10 -
-Rule sol89 1989 only - Apr 1 12:03:55s -0:03:55 -
-Rule sol89 1989 only - Apr 2 12:03:35s -0:03:35 -
-Rule sol89 1989 only - Apr 3 12:03:20s -0:03:20 -
-Rule sol89 1989 only - Apr 4 12:03:00s -0:03:00 -
-Rule sol89 1989 only - Apr 5 12:02:45s -0:02:45 -
-Rule sol89 1989 only - Apr 6 12:02:25s -0:02:25 -
-Rule sol89 1989 only - Apr 7 12:02:10s -0:02:10 -
-Rule sol89 1989 only - Apr 8 12:01:50s -0:01:50 -
-Rule sol89 1989 only - Apr 9 12:01:35s -0:01:35 -
-Rule sol89 1989 only - Apr 10 12:01:20s -0:01:20 -
-Rule sol89 1989 only - Apr 11 12:01:05s -0:01:05 -
-Rule sol89 1989 only - Apr 12 12:00:50s -0:00:50 -
-Rule sol89 1989 only - Apr 13 12:00:35s -0:00:35 -
-Rule sol89 1989 only - Apr 14 12:00:20s -0:00:20 -
-Rule sol89 1989 only - Apr 15 12:00:05s -0:00:05 -
-Rule sol89 1989 only - Apr 16 11:59:50s 0:00:10 -
-Rule sol89 1989 only - Apr 17 11:59:35s 0:00:25 -
-Rule sol89 1989 only - Apr 18 11:59:20s 0:00:40 -
-Rule sol89 1989 only - Apr 19 11:59:10s 0:00:50 -
-Rule sol89 1989 only - Apr 20 11:58:55s 0:01:05 -
-Rule sol89 1989 only - Apr 21 11:58:45s 0:01:15 -
-Rule sol89 1989 only - Apr 22 11:58:30s 0:01:30 -
-Rule sol89 1989 only - Apr 23 11:58:20s 0:01:40 -
-Rule sol89 1989 only - Apr 24 11:58:10s 0:01:50 -
-Rule sol89 1989 only - Apr 25 11:58:00s 0:02:00 -
-Rule sol89 1989 only - Apr 26 11:57:50s 0:02:10 -
-Rule sol89 1989 only - Apr 27 11:57:40s 0:02:20 -
-Rule sol89 1989 only - Apr 28 11:57:30s 0:02:30 -
-Rule sol89 1989 only - Apr 29 11:57:20s 0:02:40 -
-Rule sol89 1989 only - Apr 30 11:57:15s 0:02:45 -
-Rule sol89 1989 only - May 1 11:57:05s 0:02:55 -
-Rule sol89 1989 only - May 2 11:57:00s 0:03:00 -
-Rule sol89 1989 only - May 3 11:56:50s 0:03:10 -
-Rule sol89 1989 only - May 4 11:56:45s 0:03:15 -
-Rule sol89 1989 only - May 5 11:56:40s 0:03:20 -
-Rule sol89 1989 only - May 6 11:56:35s 0:03:25 -
-Rule sol89 1989 only - May 7 11:56:30s 0:03:30 -
-Rule sol89 1989 only - May 8 11:56:30s 0:03:30 -
-Rule sol89 1989 only - May 9 11:56:25s 0:03:35 -
-Rule sol89 1989 only - May 10 11:56:25s 0:03:35 -
-Rule sol89 1989 only - May 11 11:56:20s 0:03:40 -
-Rule sol89 1989 only - May 12 11:56:20s 0:03:40 -
-Rule sol89 1989 only - May 13 11:56:20s 0:03:40 -
-Rule sol89 1989 only - May 14 11:56:20s 0:03:40 -
-Rule sol89 1989 only - May 15 11:56:20s 0:03:40 -
-Rule sol89 1989 only - May 16 11:56:20s 0:03:40 -
-Rule sol89 1989 only - May 17 11:56:20s 0:03:40 -
-Rule sol89 1989 only - May 18 11:56:25s 0:03:35 -
-Rule sol89 1989 only - May 19 11:56:25s 0:03:35 -
-Rule sol89 1989 only - May 20 11:56:30s 0:03:30 -
-Rule sol89 1989 only - May 21 11:56:35s 0:03:25 -
-Rule sol89 1989 only - May 22 11:56:35s 0:03:25 -
-Rule sol89 1989 only - May 23 11:56:40s 0:03:20 -
-Rule sol89 1989 only - May 24 11:56:45s 0:03:15 -
-Rule sol89 1989 only - May 25 11:56:55s 0:03:05 -
-Rule sol89 1989 only - May 26 11:57:00s 0:03:00 -
-Rule sol89 1989 only - May 27 11:57:05s 0:02:55 -
-Rule sol89 1989 only - May 28 11:57:15s 0:02:45 -
-Rule sol89 1989 only - May 29 11:57:20s 0:02:40 -
-Rule sol89 1989 only - May 30 11:57:30s 0:02:30 -
-Rule sol89 1989 only - May 31 11:57:35s 0:02:25 -
-Rule sol89 1989 only - Jun 1 11:57:45s 0:02:15 -
-Rule sol89 1989 only - Jun 2 11:57:55s 0:02:05 -
-Rule sol89 1989 only - Jun 3 11:58:05s 0:01:55 -
-Rule sol89 1989 only - Jun 4 11:58:15s 0:01:45 -
-Rule sol89 1989 only - Jun 5 11:58:25s 0:01:35 -
-Rule sol89 1989 only - Jun 6 11:58:35s 0:01:25 -
-Rule sol89 1989 only - Jun 7 11:58:45s 0:01:15 -
-Rule sol89 1989 only - Jun 8 11:59:00s 0:01:00 -
-Rule sol89 1989 only - Jun 9 11:59:10s 0:00:50 -
-Rule sol89 1989 only - Jun 10 11:59:20s 0:00:40 -
-Rule sol89 1989 only - Jun 11 11:59:35s 0:00:25 -
-Rule sol89 1989 only - Jun 12 11:59:45s 0:00:15 -
-Rule sol89 1989 only - Jun 13 12:00:00s 0:00:00 -
-Rule sol89 1989 only - Jun 14 12:00:10s -0:00:10 -
-Rule sol89 1989 only - Jun 15 12:00:25s -0:00:25 -
-Rule sol89 1989 only - Jun 16 12:00:35s -0:00:35 -
-Rule sol89 1989 only - Jun 17 12:00:50s -0:00:50 -
-Rule sol89 1989 only - Jun 18 12:01:05s -0:01:05 -
-Rule sol89 1989 only - Jun 19 12:01:15s -0:01:15 -
-Rule sol89 1989 only - Jun 20 12:01:30s -0:01:30 -
-Rule sol89 1989 only - Jun 21 12:01:40s -0:01:40 -
-Rule sol89 1989 only - Jun 22 12:01:55s -0:01:55 -
-Rule sol89 1989 only - Jun 23 12:02:10s -0:02:10 -
-Rule sol89 1989 only - Jun 24 12:02:20s -0:02:20 -
-Rule sol89 1989 only - Jun 25 12:02:35s -0:02:35 -
-Rule sol89 1989 only - Jun 26 12:02:45s -0:02:45 -
-Rule sol89 1989 only - Jun 27 12:03:00s -0:03:00 -
-Rule sol89 1989 only - Jun 28 12:03:10s -0:03:10 -
-Rule sol89 1989 only - Jun 29 12:03:25s -0:03:25 -
-Rule sol89 1989 only - Jun 30 12:03:35s -0:03:35 -
-Rule sol89 1989 only - Jul 1 12:03:45s -0:03:45 -
-Rule sol89 1989 only - Jul 2 12:04:00s -0:04:00 -
-Rule sol89 1989 only - Jul 3 12:04:10s -0:04:10 -
-Rule sol89 1989 only - Jul 4 12:04:20s -0:04:20 -
-Rule sol89 1989 only - Jul 5 12:04:30s -0:04:30 -
-Rule sol89 1989 only - Jul 6 12:04:40s -0:04:40 -
-Rule sol89 1989 only - Jul 7 12:04:50s -0:04:50 -
-Rule sol89 1989 only - Jul 8 12:05:00s -0:05:00 -
-Rule sol89 1989 only - Jul 9 12:05:10s -0:05:10 -
-Rule sol89 1989 only - Jul 10 12:05:20s -0:05:20 -
-Rule sol89 1989 only - Jul 11 12:05:25s -0:05:25 -
-Rule sol89 1989 only - Jul 12 12:05:35s -0:05:35 -
-Rule sol89 1989 only - Jul 13 12:05:40s -0:05:40 -
-Rule sol89 1989 only - Jul 14 12:05:50s -0:05:50 -
-Rule sol89 1989 only - Jul 15 12:05:55s -0:05:55 -
-Rule sol89 1989 only - Jul 16 12:06:00s -0:06:00 -
-Rule sol89 1989 only - Jul 17 12:06:05s -0:06:05 -
-Rule sol89 1989 only - Jul 18 12:06:10s -0:06:10 -
-Rule sol89 1989 only - Jul 19 12:06:15s -0:06:15 -
-Rule sol89 1989 only - Jul 20 12:06:20s -0:06:20 -
-Rule sol89 1989 only - Jul 21 12:06:20s -0:06:20 -
-Rule sol89 1989 only - Jul 22 12:06:25s -0:06:25 -
-Rule sol89 1989 only - Jul 23 12:06:25s -0:06:25 -
-Rule sol89 1989 only - Jul 24 12:06:30s -0:06:30 -
-Rule sol89 1989 only - Jul 25 12:06:30s -0:06:30 -
-Rule sol89 1989 only - Jul 26 12:06:30s -0:06:30 -
-Rule sol89 1989 only - Jul 27 12:06:30s -0:06:30 -
-Rule sol89 1989 only - Jul 28 12:06:30s -0:06:30 -
-Rule sol89 1989 only - Jul 29 12:06:25s -0:06:25 -
-Rule sol89 1989 only - Jul 30 12:06:25s -0:06:25 -
-Rule sol89 1989 only - Jul 31 12:06:20s -0:06:20 -
-Rule sol89 1989 only - Aug 1 12:06:20s -0:06:20 -
-Rule sol89 1989 only - Aug 2 12:06:15s -0:06:15 -
-Rule sol89 1989 only - Aug 3 12:06:10s -0:06:10 -
-Rule sol89 1989 only - Aug 4 12:06:05s -0:06:05 -
-Rule sol89 1989 only - Aug 5 12:06:00s -0:06:00 -
-Rule sol89 1989 only - Aug 6 12:05:50s -0:05:50 -
-Rule sol89 1989 only - Aug 7 12:05:45s -0:05:45 -
-Rule sol89 1989 only - Aug 8 12:05:35s -0:05:35 -
-Rule sol89 1989 only - Aug 9 12:05:30s -0:05:30 -
-Rule sol89 1989 only - Aug 10 12:05:20s -0:05:20 -
-Rule sol89 1989 only - Aug 11 12:05:10s -0:05:10 -
-Rule sol89 1989 only - Aug 12 12:05:00s -0:05:00 -
-Rule sol89 1989 only - Aug 13 12:04:50s -0:04:50 -
-Rule sol89 1989 only - Aug 14 12:04:40s -0:04:40 -
-Rule sol89 1989 only - Aug 15 12:04:30s -0:04:30 -
-Rule sol89 1989 only - Aug 16 12:04:15s -0:04:15 -
-Rule sol89 1989 only - Aug 17 12:04:05s -0:04:05 -
-Rule sol89 1989 only - Aug 18 12:03:50s -0:03:50 -
-Rule sol89 1989 only - Aug 19 12:03:35s -0:03:35 -
-Rule sol89 1989 only - Aug 20 12:03:25s -0:03:25 -
-Rule sol89 1989 only - Aug 21 12:03:10s -0:03:10 -
-Rule sol89 1989 only - Aug 22 12:02:55s -0:02:55 -
-Rule sol89 1989 only - Aug 23 12:02:40s -0:02:40 -
-Rule sol89 1989 only - Aug 24 12:02:20s -0:02:20 -
-Rule sol89 1989 only - Aug 25 12:02:05s -0:02:05 -
-Rule sol89 1989 only - Aug 26 12:01:50s -0:01:50 -
-Rule sol89 1989 only - Aug 27 12:01:30s -0:01:30 -
-Rule sol89 1989 only - Aug 28 12:01:15s -0:01:15 -
-Rule sol89 1989 only - Aug 29 12:00:55s -0:00:55 -
-Rule sol89 1989 only - Aug 30 12:00:40s -0:00:40 -
-Rule sol89 1989 only - Aug 31 12:00:20s -0:00:20 -
-Rule sol89 1989 only - Sep 1 12:00:00s 0:00:00 -
-Rule sol89 1989 only - Sep 2 11:59:45s 0:00:15 -
-Rule sol89 1989 only - Sep 3 11:59:25s 0:00:35 -
-Rule sol89 1989 only - Sep 4 11:59:05s 0:00:55 -
-Rule sol89 1989 only - Sep 5 11:58:45s 0:01:15 -
-Rule sol89 1989 only - Sep 6 11:58:25s 0:01:35 -
-Rule sol89 1989 only - Sep 7 11:58:05s 0:01:55 -
-Rule sol89 1989 only - Sep 8 11:57:45s 0:02:15 -
-Rule sol89 1989 only - Sep 9 11:57:20s 0:02:40 -
-Rule sol89 1989 only - Sep 10 11:57:00s 0:03:00 -
-Rule sol89 1989 only - Sep 11 11:56:40s 0:03:20 -
-Rule sol89 1989 only - Sep 12 11:56:20s 0:03:40 -
-Rule sol89 1989 only - Sep 13 11:56:00s 0:04:00 -
-Rule sol89 1989 only - Sep 14 11:55:35s 0:04:25 -
-Rule sol89 1989 only - Sep 15 11:55:15s 0:04:45 -
-Rule sol89 1989 only - Sep 16 11:54:55s 0:05:05 -
-Rule sol89 1989 only - Sep 17 11:54:35s 0:05:25 -
-Rule sol89 1989 only - Sep 18 11:54:10s 0:05:50 -
-Rule sol89 1989 only - Sep 19 11:53:50s 0:06:10 -
-Rule sol89 1989 only - Sep 20 11:53:30s 0:06:30 -
-Rule sol89 1989 only - Sep 21 11:53:10s 0:06:50 -
-Rule sol89 1989 only - Sep 22 11:52:45s 0:07:15 -
-Rule sol89 1989 only - Sep 23 11:52:25s 0:07:35 -
-Rule sol89 1989 only - Sep 24 11:52:05s 0:07:55 -
-Rule sol89 1989 only - Sep 25 11:51:45s 0:08:15 -
-Rule sol89 1989 only - Sep 26 11:51:25s 0:08:35 -
-Rule sol89 1989 only - Sep 27 11:51:05s 0:08:55 -
-Rule sol89 1989 only - Sep 28 11:50:40s 0:09:20 -
-Rule sol89 1989 only - Sep 29 11:50:20s 0:09:40 -
-Rule sol89 1989 only - Sep 30 11:50:00s 0:10:00 -
-Rule sol89 1989 only - Oct 1 11:49:45s 0:10:15 -
-Rule sol89 1989 only - Oct 2 11:49:25s 0:10:35 -
-Rule sol89 1989 only - Oct 3 11:49:05s 0:10:55 -
-Rule sol89 1989 only - Oct 4 11:48:45s 0:11:15 -
-Rule sol89 1989 only - Oct 5 11:48:30s 0:11:30 -
-Rule sol89 1989 only - Oct 6 11:48:10s 0:11:50 -
-Rule sol89 1989 only - Oct 7 11:47:50s 0:12:10 -
-Rule sol89 1989 only - Oct 8 11:47:35s 0:12:25 -
-Rule sol89 1989 only - Oct 9 11:47:20s 0:12:40 -
-Rule sol89 1989 only - Oct 10 11:47:00s 0:13:00 -
-Rule sol89 1989 only - Oct 11 11:46:45s 0:13:15 -
-Rule sol89 1989 only - Oct 12 11:46:30s 0:13:30 -
-Rule sol89 1989 only - Oct 13 11:46:15s 0:13:45 -
-Rule sol89 1989 only - Oct 14 11:46:00s 0:14:00 -
-Rule sol89 1989 only - Oct 15 11:45:50s 0:14:10 -
-Rule sol89 1989 only - Oct 16 11:45:35s 0:14:25 -
-Rule sol89 1989 only - Oct 17 11:45:20s 0:14:40 -
-Rule sol89 1989 only - Oct 18 11:45:10s 0:14:50 -
-Rule sol89 1989 only - Oct 19 11:45:00s 0:15:00 -
-Rule sol89 1989 only - Oct 20 11:44:50s 0:15:10 -
-Rule sol89 1989 only - Oct 21 11:44:40s 0:15:20 -
-Rule sol89 1989 only - Oct 22 11:44:30s 0:15:30 -
-Rule sol89 1989 only - Oct 23 11:44:20s 0:15:40 -
-Rule sol89 1989 only - Oct 24 11:44:10s 0:15:50 -
-Rule sol89 1989 only - Oct 25 11:44:05s 0:15:55 -
-Rule sol89 1989 only - Oct 26 11:44:00s 0:16:00 -
-Rule sol89 1989 only - Oct 27 11:43:50s 0:16:10 -
-Rule sol89 1989 only - Oct 28 11:43:45s 0:16:15 -
-Rule sol89 1989 only - Oct 29 11:43:40s 0:16:20 -
-Rule sol89 1989 only - Oct 30 11:43:40s 0:16:20 -
-Rule sol89 1989 only - Oct 31 11:43:35s 0:16:25 -
-Rule sol89 1989 only - Nov 1 11:43:35s 0:16:25 -
-Rule sol89 1989 only - Nov 2 11:43:35s 0:16:25 -
-Rule sol89 1989 only - Nov 3 11:43:30s 0:16:30 -
-Rule sol89 1989 only - Nov 4 11:43:35s 0:16:25 -
-Rule sol89 1989 only - Nov 5 11:43:35s 0:16:25 -
-Rule sol89 1989 only - Nov 6 11:43:35s 0:16:25 -
-Rule sol89 1989 only - Nov 7 11:43:40s 0:16:20 -
-Rule sol89 1989 only - Nov 8 11:43:45s 0:16:15 -
-Rule sol89 1989 only - Nov 9 11:43:50s 0:16:10 -
-Rule sol89 1989 only - Nov 10 11:43:55s 0:16:05 -
-Rule sol89 1989 only - Nov 11 11:44:00s 0:16:00 -
-Rule sol89 1989 only - Nov 12 11:44:05s 0:15:55 -
-Rule sol89 1989 only - Nov 13 11:44:15s 0:15:45 -
-Rule sol89 1989 only - Nov 14 11:44:25s 0:15:35 -
-Rule sol89 1989 only - Nov 15 11:44:35s 0:15:25 -
-Rule sol89 1989 only - Nov 16 11:44:45s 0:15:15 -
-Rule sol89 1989 only - Nov 17 11:44:55s 0:15:05 -
-Rule sol89 1989 only - Nov 18 11:45:10s 0:14:50 -
-Rule sol89 1989 only - Nov 19 11:45:20s 0:14:40 -
-Rule sol89 1989 only - Nov 20 11:45:35s 0:14:25 -
-Rule sol89 1989 only - Nov 21 11:45:50s 0:14:10 -
-Rule sol89 1989 only - Nov 22 11:46:05s 0:13:55 -
-Rule sol89 1989 only - Nov 23 11:46:25s 0:13:35 -
-Rule sol89 1989 only - Nov 24 11:46:40s 0:13:20 -
-Rule sol89 1989 only - Nov 25 11:47:00s 0:13:00 -
-Rule sol89 1989 only - Nov 26 11:47:20s 0:12:40 -
-Rule sol89 1989 only - Nov 27 11:47:35s 0:12:25 -
-Rule sol89 1989 only - Nov 28 11:47:55s 0:12:05 -
-Rule sol89 1989 only - Nov 29 11:48:20s 0:11:40 -
-Rule sol89 1989 only - Nov 30 11:48:40s 0:11:20 -
-Rule sol89 1989 only - Dec 1 11:49:00s 0:11:00 -
-Rule sol89 1989 only - Dec 2 11:49:25s 0:10:35 -
-Rule sol89 1989 only - Dec 3 11:49:50s 0:10:10 -
-Rule sol89 1989 only - Dec 4 11:50:15s 0:09:45 -
-Rule sol89 1989 only - Dec 5 11:50:35s 0:09:25 -
-Rule sol89 1989 only - Dec 6 11:51:00s 0:09:00 -
-Rule sol89 1989 only - Dec 7 11:51:30s 0:08:30 -
-Rule sol89 1989 only - Dec 8 11:51:55s 0:08:05 -
-Rule sol89 1989 only - Dec 9 11:52:20s 0:07:40 -
-Rule sol89 1989 only - Dec 10 11:52:50s 0:07:10 -
-Rule sol89 1989 only - Dec 11 11:53:15s 0:06:45 -
-Rule sol89 1989 only - Dec 12 11:53:45s 0:06:15 -
-Rule sol89 1989 only - Dec 13 11:54:10s 0:05:50 -
-Rule sol89 1989 only - Dec 14 11:54:40s 0:05:20 -
-Rule sol89 1989 only - Dec 15 11:55:10s 0:04:50 -
-Rule sol89 1989 only - Dec 16 11:55:40s 0:04:20 -
-Rule sol89 1989 only - Dec 17 11:56:05s 0:03:55 -
-Rule sol89 1989 only - Dec 18 11:56:35s 0:03:25 -
-Rule sol89 1989 only - Dec 19 11:57:05s 0:02:55 -
-Rule sol89 1989 only - Dec 20 11:57:35s 0:02:25 -
-Rule sol89 1989 only - Dec 21 11:58:05s 0:01:55 -
-Rule sol89 1989 only - Dec 22 11:58:35s 0:01:25 -
-Rule sol89 1989 only - Dec 23 11:59:05s 0:00:55 -
-Rule sol89 1989 only - Dec 24 11:59:35s 0:00:25 -
-Rule sol89 1989 only - Dec 25 12:00:05s -0:00:05 -
-Rule sol89 1989 only - Dec 26 12:00:35s -0:00:35 -
-Rule sol89 1989 only - Dec 27 12:01:05s -0:01:05 -
-Rule sol89 1989 only - Dec 28 12:01:35s -0:01:35 -
-Rule sol89 1989 only - Dec 29 12:02:00s -0:02:00 -
-Rule sol89 1989 only - Dec 30 12:02:30s -0:02:30 -
-Rule sol89 1989 only - Dec 31 12:03:00s -0:03:00 -
-
-# Riyadh is at about 46 degrees 46 minutes East: 3 hrs, 7 mins, 4 secs
-# Before and after 1989, we'll operate on local mean solar time.
-
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone Asia/Riyadh89 3:07:04 - zzz 1989
- 3:07:04 sol89 zzz 1990
- 3:07:04 - zzz
-# For backward compatibility...
-Link Asia/Riyadh89 Mideast/Riyadh89
--- a/test/jdk/sun/util/calendar/zi/tzdata/southamerica Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1987 +0,0 @@
-#
-# 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.
-#
-# tzdb data for South America and environs
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# 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). For more, please see
-# the file CONTRIBUTING in the tz distribution.
-
-# From Paul Eggert (2016-12-05):
-#
-# Unless otherwise specified, the source for data through 1990 is:
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
-# Unfortunately this book contains many errors and cites no sources.
-#
-# Many years ago Gwillim Law wrote that a good source
-# for time zone data was the International Air Transport
-# Association's Standard Schedules Information Manual (IATA SSIM),
-# published semiannually. Law sent in several helpful summaries
-# of the IATA's data after 1990. Except where otherwise noted,
-# IATA SSIM is the source for entries after 1990.
-#
-# For data circa 1899, a common source is:
-# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
-# https://www.jstor.org/stable/1774359
-#
-# These tables use numeric abbreviations like -03 and -0330 for
-# integer hour and minute UT offsets. Although earlier editions used
-# alphabetic time zone abbreviations, these abbreviations were
-# invented and did not reflect common practice.
-
-###############################################################################
-
-###############################################################################
-
-# Argentina
-
-# From Bob Devine (1988-01-28):
-# 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-19):
-# ARGENTINA 3 H BEHIND UTC
-
-# From Hernan G. Otero (1995-06-26):
-# I am sending modifications to the Argentine time zone table...
-# AR was chosen because they are the ISO letters that represent Argentina.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Arg 1930 only - Dec 1 0:00 1:00 -
-Rule Arg 1931 only - Apr 1 0:00 0 -
-Rule Arg 1931 only - Oct 15 0:00 1:00 -
-Rule Arg 1932 1940 - Mar 1 0:00 0 -
-Rule Arg 1932 1939 - Nov 1 0:00 1:00 -
-Rule Arg 1940 only - Jul 1 0:00 1:00 -
-Rule Arg 1941 only - Jun 15 0:00 0 -
-Rule Arg 1941 only - Oct 15 0:00 1:00 -
-Rule Arg 1943 only - Aug 1 0:00 0 -
-Rule Arg 1943 only - Oct 15 0:00 1:00 -
-Rule Arg 1946 only - Mar 1 0:00 0 -
-Rule Arg 1946 only - Oct 1 0:00 1:00 -
-Rule Arg 1963 only - Oct 1 0:00 0 -
-Rule Arg 1963 only - Dec 15 0:00 1:00 -
-Rule Arg 1964 1966 - Mar 1 0:00 0 -
-Rule Arg 1964 1966 - Oct 15 0:00 1:00 -
-Rule Arg 1967 only - Apr 2 0:00 0 -
-Rule Arg 1967 1968 - Oct Sun>=1 0:00 1:00 -
-Rule Arg 1968 1969 - Apr Sun>=1 0:00 0 -
-Rule Arg 1974 only - Jan 23 0:00 1:00 -
-Rule Arg 1974 only - May 1 0:00 0 -
-Rule Arg 1988 only - Dec 1 0:00 1:00 -
-#
-# From Hernan G. Otero (1995-06-26):
-# These corrections were contributed by InterSoft Argentina S.A.,
-# obtaining the data from the:
-# 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 -
-#
-# From Hernan G. Otero (1995-06-26):
-# From this moment on, the law that mandated the daylight saving
-# time corrections was derogated and no more modifications
-# to the time zones (for daylight saving) are now made.
-#
-# From Rives McDow (2000-01-10):
-# On October 3, 1999, 0:00 local, Argentina implemented daylight savings time,
-# which did not result in the switch of a time zone, as they stayed 9 hours
-# from the International Date Line.
-Rule Arg 1999 only - Oct Sun>=1 0:00 1:00 -
-# From Paul Eggert (2007-12-28):
-# DST was set to expire on March 5, not March 3, but since it was converted
-# to standard time on March 3 it's more convenient for us to pretend that
-# it ended on March 3.
-Rule Arg 2000 only - Mar 3 0:00 0 -
-#
-# From Peter Gradelski via Steffen Thorsen (2000-03-01):
-# 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 Fabiån L. Arce Jofré (2000-04-04):
-# The law that claimed DST for Argentina was derogated by President Fernando
-# 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):
-# one of the major newspapers here in Argentina said that the 1999
-# Timezone Law (which never was effectively applied) will (would?) be
-# in effect.... The article is at
-# http://ar.clarin.com/diario/2001-06-06/e-01701.htm
-# ... The Law itself is "Ley No. 25155", sanctioned on 1999-08-25, enacted
-# 1999-09-17, and published 1999-09-21. The official publication is at:
-# http://www.boletin.jus.gov.ar/BON/Primera/1999/09-Septiembre/21/PDF/BO21-09-99LEG.PDF
-# Regretfully, you have to subscribe (and pay) for the on-line version....
-#
-# (2001-06-12):
-# the timezone for Argentina will not change next Sunday.
-# Apparently it will do so on Sunday 24th....
-# http://ar.clarin.com/diario/2001-06-12/s-03501.htm
-#
-# (2001-06-25):
-# Last Friday (yes, the last working day before the date of the change), the
-# Senate annulled the 1999 law that introduced the changes later postponed.
-# http://www.clarin.com.ar/diario/2001-06-22/s-03601.htm
-# It remains the vote of the Deputies..., but it will be the same....
-# This kind of things had always been done this way in Argentina.
-# We are still -03:00 all year round in all of the country.
-#
-# From Steffen Thorsen (2007-12-21):
-# A user (Leonardo Chaim) reported that Argentina will adopt DST....
-# all of the country (all Zone-entries) are affected. News reports like
-# http://www.lanacion.com.ar/opinion/nota.asp?nota_id=973037 indicate
-# that Argentina will use DST next year as well, from October to
-# March, although exact rules are not given.
-#
-# 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 (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
-# are quite possibly wrong, but are more likely than no DST at all.
-
-# From Alexander Krivenyshev (2008-09-05):
-# 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
-# http://www.impulsobaires.com.ar/nota.php?id=57832 (in spanish)
-
-# From Juan Manuel Docile in https://bugs.gentoo.org/240339 (2008-10-07)
-# via Rodrigo Severo:
-# Argentinian law No. 25.155 is no longer valid.
-# http://www.infoleg.gov.ar/infolegInternet/anexos/60000-64999/60036/norma.htm
-# The new one is law No. 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.
-# 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, 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).
-# 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").
-#
-# "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 -
-Rule Arg 2008 2009 - Mar Sun>=15 0:00 0 -
-Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 -
-
-# From Mariano Absatz (2004-05-21):
-# Today it was officially published that the Province of Mendoza is changing
-# its timezone this winter... starting tomorrow night....
-# http://www.gobernac.mendoza.gov.ar/boletin/pdf/20040521-27158-normas.pdf
-# From Paul Eggert (2004-05-24):
-# 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 (2018-01-31):
-# 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. It is upward compatible with Milne, who
-# says CĂłrdoba time was -4:16:48.2.
-
-#
-# From Mariano Absatz (2004-06-05):
-# These media articles from a major newspaper mostly cover the current state:
-# http://www.lanacion.com.ar/04/05/27/de_604825.asp
-# http://www.lanacion.com.ar/04/05/28/de_605203.asp
-#
-# The following eight (8) provinces pulled clocks back to UTC-04:00 at
-# midnight Monday May 31st. (that is, the night between 05/31 and 06/01).
-# Apparently, all nine provinces would go back to UTC-03:00 at the same
-# time in October 17th.
-#
-# Catamarca, Chubut, La Rioja, San Juan, San Luis, Santa Cruz,
-# Tierra del Fuego, TucumĂĄn.
-#
-# From Mariano Absatz (2004-06-14):
-# ... 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....
-#
-# From Gwillim Law (2004-06-14):
-# http://www.lanacion.com.ar/04/06/10/de_609078.asp ...
-# "The time change in Tierra del Fuego was a conflicted decision from
-# the start. The government had decreed that the measure would take
-# effect on June 1, but a normative error forced the new time to begin
-# three days earlier, from a Saturday to a Sunday....
-# Our understanding was that the change was originally scheduled to take place
-# on June 1 at 00:00 in Chubut, Santa Cruz, Tierra del Fuego (and some other
-# provinces). Sunday was May 30, only two days earlier. So the article
-# contains a contradiction. I would give more credence to the Saturday/Sunday
-# date than the "three days earlier" phrase, and conclude that Tierra del
-# Fuego set its clocks back at 2004-05-30 00:00.
-#
-# From Steffen Thorsen (2004-10-05):
-# The previous law 7210 which changed the province of Mendoza's time zone
-# back in May have been modified slightly in a new law 7277, which set the
-# new end date to 2004-09-26 (original date was 2004-10-17).
-# http://www.gobernac.mendoza.gov.ar/boletin/pdf/20040924-27244-normas.pdf
-#
-# From Mariano Absatz (2004-10-05):
-# San Juan changed from UTC-03:00 to UTC-04:00 at midnight between
-# Sunday, May 30th and Monday, May 31st. It changed back to UTC-03:00
-# at midnight between Saturday, July 24th and Sunday, July 25th....
-# http://www.sanjuan.gov.ar/prensa/archivo/000329.html
-# http://www.sanjuan.gov.ar/prensa/archivo/000426.html
-# http://www.sanjuan.gov.ar/prensa/archivo/000441.html
-
-# From Alex Krivenyshev (2008-01-17):
-# 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 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)
-# https://www.lagaceta.com.ar/nota/253414/Economia/Es-inminente-que-en-San-Luis-atrasen-una-hora-los-relojes.html
-# http://www.worldtimezone.com/dst_news/dst_news_argentina02.html
-
-# 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 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 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.
-
-# From Mariano Absatz (2008-01-28):
-# I can confirm that the Province of San Luis (and so far only that
-# province) decided to go back to UTC-3 effective midnight Jan 20th 2008
-# (that is, Monday 21st at 0:00 is the time the clocks were delayed back
-# 1 hour), and they intend to keep UTC-3 as their timezone all year round
-# (that is, unless they change their mind any minute now).
-#
-# So we'll have to add yet another city to 'southamerica' (I think San
-# Luis city is the mos populated city in the Province, so it'd be
-# America/Argentina/San_Luis... of course I can't remember if San Luis's
-# history of particular changes goes along with Mendoza or San Juan :-(
-# (I only remember not being able to collect hard facts about San Luis
-# 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 (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
-# other 5 subregions.
-
-# From Mariano Absatz (2009-03-13):
-# Yesterday (with our usual 2-day notice) the Province of San Luis
-# decided that next Sunday instead of "staying" @utc-03:00 they will go
-# 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.)
-#
-# There's also a note in only one of the major national papers ...
-# http://www.lanacion.com.ar/nota.asp?nota_id=1107912
-#
-# The press release says [quick and dirty translation]:
-# ... announced that next Sunday, at 00:00, Puntanos (the San Luis
-# inhabitants) will have to turn back one hour their clocks
-#
-# Since then, San Luis will establish its own Province timezone. Thus,
-# during 2009, this timezone change will run from 00:00 the third Sunday
-# in March until 24:00 of the second Saturday in October.
-
-# From Mariano Absatz (2009-10-16):
-# ...the Province of San Luis is a case in itself.
-#
-# The Law at
-# http://www.diputadossanluis.gov.ar/diputadosasp/paginas/verNorma.asp?NormaID=276
-# 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
-# ending on the 2nd Saturday of March at 24:00.
-#
-# This clearly breaks every time the 1st of March or October is a Sunday.
-#
-# IMHO, the "spirit of the Law" is to make the changes at 0:00 on the 2nd
-# Sunday of October and March.
-#
-# The problem is that the changes in the rest of the Provinces that did
-# change in 2007/2008, were made according to the Federal Law and Decrees
-# that did so on the 3rd Sunday of October and March.
-#
-# In fact, San Luis actually switched from UTC-4 to UTC-3 last Sunday
-# (October 11th) at 0:00.
-#
-# So I guess a new set of rules, besides "Arg", must be made and the last
-# America/Argentina/San_Luis entries should change to use these...
-# ...
-
-# From Alexander Krivenyshev (2010-04-09):
-# 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
-# Argentina (UTC-3) (no DST).
-#
-# 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
-# UTC-03:00 "summer time", we should't just let San Luis go back to "Arg"
-# rules...San Luis is still using "Western ARgentina Time" and it got
-# stuck on Summer daylight savings time even though the summer is over.
-
-# From Paul Eggert (2018-01-23):
-# Perhaps San Luis operates on the legal fiction that it is at -04
-# with perpetual daylight saving time, but ordinary usage typically seems to
-# just say it's at -03; see, for example,
-# https://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
-# plus is that this silences a zic complaint that there's no POSIX TZ
-# setting for timestamps past 2038.
-
-# 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 # CĂłrdoba Mean Time
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 Arg -03/-02
-#
-# 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:
-# - Formosa switched to -3:00 on 1991-01-07.
-# - Misiones switched to -3:00 on 1990-12-29.
-# - Chaco switched to -3:00 on 1991-01-04.
-# - Santiago del Estero switched to -4:00 on 1991-04-01,
-# then to -3:00 on 1991-04-26.
-#
-Zone America/Argentina/Cordoba -4:16:48 - LMT 1894 Oct 31
- -4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1991 Mar 3
- -4:00 - -04 1991 Oct 20
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 Arg -03/-02
-#
-# 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 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1991 Mar 3
- -4:00 - -04 1991 Oct 20
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 Arg -03/-02 2008 Oct 18
- -3:00 - -03
-#
-# TucumĂĄn (TM)
-Zone America/Argentina/Tucuman -4:20:52 - LMT 1894 Oct 31
- -4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1991 Mar 3
- -4:00 - -04 1991 Oct 20
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 - -03 2004 Jun 1
- -4:00 - -04 2004 Jun 13
- -3:00 Arg -03/-02
-#
-# La Rioja (LR)
-Zone America/Argentina/La_Rioja -4:27:24 - LMT 1894 Oct 31
- -4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1991 Mar 1
- -4:00 - -04 1991 May 7
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 - -03 2004 Jun 1
- -4:00 - -04 2004 Jun 20
- -3:00 Arg -03/-02 2008 Oct 18
- -3:00 - -03
-#
-# San Juan (SJ)
-Zone America/Argentina/San_Juan -4:34:04 - LMT 1894 Oct 31
- -4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1991 Mar 1
- -4:00 - -04 1991 May 7
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 - -03 2004 May 31
- -4:00 - -04 2004 Jul 25
- -3:00 Arg -03/-02 2008 Oct 18
- -3:00 - -03
-#
-# Jujuy (JY)
-Zone America/Argentina/Jujuy -4:21:12 - LMT 1894 Oct 31
- -4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1990 Mar 4
- -4:00 - -04 1990 Oct 28
- -4:00 1:00 -03 1991 Mar 17
- -4:00 - -04 1991 Oct 6
- -3:00 1:00 -02 1992
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 Arg -03/-02 2008 Oct 18
- -3:00 - -03
-#
-# Catamarca (CT), Chubut (CH)
-Zone America/Argentina/Catamarca -4:23:08 - LMT 1894 Oct 31
- -4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1991 Mar 3
- -4:00 - -04 1991 Oct 20
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 - -03 2004 Jun 1
- -4:00 - -04 2004 Jun 20
- -3:00 Arg -03/-02 2008 Oct 18
- -3:00 - -03
-#
-# Mendoza (MZ)
-Zone America/Argentina/Mendoza -4:35:16 - LMT 1894 Oct 31
- -4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1990 Mar 4
- -4:00 - -04 1990 Oct 15
- -4:00 1:00 -03 1991 Mar 1
- -4:00 - -04 1991 Oct 15
- -4:00 1:00 -03 1992 Mar 1
- -4:00 - -04 1992 Oct 18
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 - -03 2004 May 23
- -4:00 - -04 2004 Sep 26
- -3:00 Arg -03/-02 2008 Oct 18
- -3:00 - -03
-#
-# San Luis (SL)
-
-Rule SanLuis 2008 2009 - Mar Sun>=8 0:00 0 -
-Rule SanLuis 2007 2008 - Oct Sun>=8 0:00 1:00 -
-
-Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31
- -4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1990
- -3:00 1:00 -02 1990 Mar 14
- -4:00 - -04 1990 Oct 15
- -4:00 1:00 -03 1991 Mar 1
- -4:00 - -04 1991 Jun 1
- -3:00 - -03 1999 Oct 3
- -4:00 1:00 -03 2000 Mar 3
- -3:00 - -03 2004 May 31
- -4:00 - -04 2004 Jul 25
- -3:00 Arg -03/-02 2008 Jan 21
- -4:00 SanLuis -04/-03 2009 Oct 11
- -3:00 - -03
-#
-# Santa Cruz (SC)
-Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
- -4:16:48 - CMT 1920 May
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 - -03 2004 Jun 1
- -4:00 - -04 2004 Jun 20
- -3:00 Arg -03/-02 2008 Oct 18
- -3:00 - -03
-#
-# 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
- -4:00 - -04 1930 Dec
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1999 Oct 3
- -4:00 Arg -04/-03 2000 Mar 3
- -3:00 - -03 2004 May 30
- -4:00 - -04 2004 Jun 20
- -3:00 Arg -03/-02 2008 Oct 18
- -3:00 - -03
-
-# Aruba
-Link America/Curacao America/Aruba
-
-# Bolivia
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/La_Paz -4:32:36 - LMT 1890
- -4:32:36 - CMT 1931 Oct 15 # Calamarca MT
- -4:32:36 1:00 BST 1932 Mar 21 # Bolivia ST
- -4:00 - -04
-
-# Brazil
-
-# From Paul Eggert (1993-11-18):
-# The mayor of Rio recently attempted to change the time zone rules
-# just in his city, in order to leave more summer time for the tourist trade.
-# The rule change lasted only part of the day;
-# the federal government refused to follow the city's rules, and business
-# was in a chaos, so the mayor backed down that afternoon.
-
-# From IATA SSIM (1996-02):
-# _Only_ the following states in BR1 observe DST: Rio Grande do Sul (RS),
-# 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 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
-# 9/95 says that DST is observed only in the ten states I quoted from 9/95,
-# along with Mato Grosso (MT) and Mato Grosso do Sul (MS), which are in BR2
-# (UTC-4).... The other two time zones given for Brazil are BR3, which is
-# UTC-5, no DST, and applies only in the state of Acre (AC); and BR4, which is
-# UTC-2, and applies to Fernando de Noronha (formerly FN, but I believe it's
-# become part of the state of Pernambuco). The boundary between BR1 and BR2
-# has never been clearly stated. They've simply been called East and West.
-# 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 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 <http://pcdsh01.on.br/verao1.html>
-
-# 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
-
-# From Celso Doria via David Madeo (2002-10-09):
-# The reason for the delay this year has to do with elections in Brazil.
-#
-# Unlike in the United States, elections in Brazil are 100% computerized and
-# the results are known almost immediately. Yesterday, it was the first
-# round of the elections when 115 million Brazilians voted for President,
-# Governor, Senators, Federal Deputies, and State Deputies. Nobody is
-# counting (or re-counting) votes anymore and we know there will be a second
-# round for the Presidency and also for some Governors. The 2nd round will
-# take place on October 27th.
-#
-# The reason why the DST will only begin November 3rd is that the thousands
-# of electoral machines used cannot have their time changed, and since the
-# Constitution says the elections must begin at 8:00 AM and end at 5:00 PM,
-# the Government decided to postpone DST, instead of changing the Constitution
-# (maybe, for the next elections, it will be possible to change the clock)...
-
-# From Rodrigo Severo (2004-10-04):
-# It's just the biannual change made necessary by the much hyped, supposedly
-# modern Brazilian eletronic voting machines which, apparently, can't deal
-# with a time change between the first and the second rounds of the elections.
-
-# From Steffen Thorsen (2007-09-20):
-# Brazil will start DST on 2007-10-14 00:00 and end on 2008-02-17 00:00:
-# http://www.mme.gov.br/site/news/detail.do;jsessionid=BBA06811AFCAAC28F0285210913513DA?newsId=13975
-
-# From Paul Schulze (2008-06-24):
-# ...by law number 11.662 of April 24, 2008 (published in the "Diario
-# 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 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 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
-# proposed it due to concerns about open television channels displaying
-# programs inappropriate to youths in the states that had the timezone
-# UTC+5 too early in the night. In the occasion, some more corrections
-# were proposed, trying to unify the timezones of any given state. This
-# change modifies timezone rules defined in decree 2.784 of 18 June,
-# 1913.
-
-# 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 ParĂĄ State. I
-# suggest this new timezone be called Santarem as the most
-# important/populated city in the affected area.
-#
-# This new timezone would be the same as the Rio_Branco timezone up to
-# the 2008/06/24 change which would be to UTC-3 instead of UTC-4.
-
-# 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).
-
-# From Paul Eggert (2002-10-10):
-# The official decrees referenced below are mostly taken from
-# 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
-# yesterday, Brazil will start DST on 2008-10-19 (need to change rule) and
-# it will end on 2009-02-15 (current rule for Brazil is fine). Based on
-# past years experience with the elections, there was a good chance that
-# the start was postponed to November, but it did not happen this year.
-#
-# 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:
-# https://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.
-# The announcement was made by Governor Jaques Wagner in an interview to a
-# television station in Salvador.
-
-# In Portuguese:
-# http://g1.globo.com/bahia/noticia/2011/10/governador-jaques-wagner-confirma-horario-de-verao-na-bahia.html
-# https://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
-# official agency about time in Brazil, and she confirmed that the old rule is
-# still in force.
-
-# From Guilherme Bernardes Rodrigues (2011-10-14)
-# It's official, the President signed a decree that includes Bahia in summer
-# time.
-# [ and in a second message (same day): ]
-# I found the decree.
-#
-# 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
-# due to public pressure, he is reversing the DST policy they implemented
-# last year and will not be going to Summer Time on October 21st....
-# http://www.correio24horas.com.br/r/artigo/apos-pressoes-wagner-suspende-horario-de-verao-na-bahia
-
-# From Rodrigo Severo (2012-10-16):
-# Tocantins state will have DST.
-# https://noticias.terra.com.br/brasil/noticias/0,,OI6232536-EI306.html
-
-# From Steffen Thorsen (2013-09-20):
-# Tocantins in Brazil is very likely not to observe DST from October....
-# http://conexaoto.com.br/2013/09/18/ministerio-confirma-que-tocantins-esta-fora-do-horario-de-verao-em-2013-mas-falta-publicacao-de-decreto
-# We will keep this article updated when this is confirmed:
-# https://www.timeanddate.com/news/time/brazil-starts-dst-2013.html
-
-# From Steffen Thorsen (2013-10-17):
-# https://www.timeanddate.com/news/time/acre-amazonas-change-time-zone.html
-# Senator Jorge Viana announced that Acre will change time zone on November 10.
-# He did not specify the time of the change, nor if western parts of Amazonas
-# will change as well.
-#
-# From Paul Eggert (2013-10-17):
-# For now, assume western Amazonas will change as well.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# Decree 20,466 <http://pcdsh01.on.br/HV20466.htm> (1931-10-01)
-# Decree 21,896 <http://pcdsh01.on.br/HV21896.htm> (1932-01-10)
-Rule Brazil 1931 only - Oct 3 11:00 1:00 -
-Rule Brazil 1932 1933 - Apr 1 0:00 0 -
-Rule Brazil 1932 only - Oct 3 0:00 1:00 -
-# Decree 23,195 <http://pcdsh01.on.br/HV23195.htm> (1933-10-10)
-# revoked DST.
-# Decree 27,496 <http://pcdsh01.on.br/HV27496.htm> (1949-11-24)
-# Decree 27,998 <http://pcdsh01.on.br/HV27998.htm> (1950-04-13)
-Rule Brazil 1949 1952 - Dec 1 0:00 1:00 -
-Rule Brazil 1950 only - Apr 16 1:00 0 -
-Rule Brazil 1951 1952 - Apr 1 0:00 0 -
-# Decree 32,308 <http://pcdsh01.on.br/HV32308.htm> (1953-02-24)
-Rule Brazil 1953 only - Mar 1 0:00 0 -
-# Decree 34,724 <http://pcdsh01.on.br/HV34724.htm> (1953-11-30)
-# revoked DST.
-# Decree 52,700 <http://pcdsh01.on.br/HV52700.htm> (1963-10-18)
-# established DST from 1963-10-23 00:00 to 1964-02-29 00:00
-# in SP, RJ, GB, MG, ES, due to the prolongation of the drought.
-# Decree 53,071 <http://pcdsh01.on.br/HV53071.htm> (1963-12-03)
-# extended the above decree to all of the national territory on 12-09.
-Rule Brazil 1963 only - Dec 9 0:00 1:00 -
-# Decree 53,604 <http://pcdsh01.on.br/HV53604.htm> (1964-02-25)
-# extended summer time by one day to 1964-03-01 00:00 (start of school).
-Rule Brazil 1964 only - Mar 1 0:00 0 -
-# Decree 55,639 <http://pcdsh01.on.br/HV55639.htm> (1965-01-27)
-Rule Brazil 1965 only - Jan 31 0:00 1:00 -
-Rule Brazil 1965 only - Mar 31 0:00 0 -
-# Decree 57,303 <http://pcdsh01.on.br/HV57303.htm> (1965-11-22)
-Rule Brazil 1965 only - Dec 1 0:00 1:00 -
-# Decree 57,843 <http://pcdsh01.on.br/HV57843.htm> (1966-02-18)
-Rule Brazil 1966 1968 - Mar 1 0:00 0 -
-Rule Brazil 1966 1967 - Nov 1 0:00 1:00 -
-# Decree 63,429 <http://pcdsh01.on.br/HV63429.htm> (1968-10-15)
-# revoked DST.
-# Decree 91,698 <http://pcdsh01.on.br/HV91698.htm> (1985-09-27)
-Rule Brazil 1985 only - Nov 2 0:00 1:00 -
-# Decree 92,310 (1986-01-21)
-# Decree 92,463 (1986-03-13)
-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 -
-Rule Brazil 1987 only - Feb 14 0:00 0 -
-# Decree 94,922 <http://pcdsh01.on.br/HV94922.htm> (1987-09-22)
-Rule Brazil 1987 only - Oct 25 0:00 1:00 -
-Rule Brazil 1988 only - Feb 7 0:00 0 -
-# Decree 96,676 <http://pcdsh01.on.br/HV96676.htm> (1988-09-12)
-# except for the states of AC, AM, PA, RR, RO, and AP (then a territory)
-Rule Brazil 1988 only - Oct 16 0:00 1:00 -
-Rule Brazil 1989 only - Jan 29 0:00 0 -
-# Decree 98,077 <http://pcdsh01.on.br/HV98077.htm> (1989-08-21)
-# with the same exceptions
-Rule Brazil 1989 only - Oct 15 0:00 1:00 -
-Rule Brazil 1990 only - Feb 11 0:00 0 -
-# Decree 99,530 <http://pcdsh01.on.br/HV99530.htm> (1990-09-17)
-# adopted by RS, SC, PR, SP, RJ, ES, MG, GO, MS, DF.
-# Decree 99,629 (1990-10-19) adds BA, MT.
-Rule Brazil 1990 only - Oct 21 0:00 1:00 -
-Rule Brazil 1991 only - Feb 17 0:00 0 -
-# Unnumbered decree <http://pcdsh01.on.br/HV1991.htm> (1991-09-25)
-# adopted by RS, SC, PR, SP, RJ, ES, MG, BA, GO, MT, MS, DF.
-Rule Brazil 1991 only - Oct 20 0:00 1:00 -
-Rule Brazil 1992 only - Feb 9 0:00 0 -
-# Unnumbered decree <http://pcdsh01.on.br/HV1992.htm> (1992-10-16)
-# adopted by same states.
-Rule Brazil 1992 only - Oct 25 0:00 1:00 -
-Rule Brazil 1993 only - Jan 31 0:00 0 -
-# Decree 942 <http://pcdsh01.on.br/HV942.htm> (1993-09-28)
-# adopted by same states, plus AM.
-# Decree 1,252 <http://pcdsh01.on.br/HV1252.htm> (1994-09-22;
-# web page corrected 2004-01-07) adopted by same states, minus AM.
-# Decree 1,636 <http://pcdsh01.on.br/HV1636.htm> (1995-09-14)
-# adopted by same states, plus MT and TO.
-# Decree 1,674 <http://pcdsh01.on.br/HV1674.htm> (1995-10-13)
-# adds AL, SE.
-Rule Brazil 1993 1995 - Oct Sun>=11 0:00 1:00 -
-Rule Brazil 1994 1995 - Feb Sun>=15 0:00 0 -
-Rule Brazil 1996 only - Feb 11 0:00 0 -
-# Decree 2,000 <http://pcdsh01.on.br/HV2000.htm> (1996-09-04)
-# adopted by same states, minus AL, SE.
-Rule Brazil 1996 only - Oct 6 0:00 1:00 -
-Rule Brazil 1997 only - Feb 16 0:00 0 -
-# From Daniel C. Sobral (1998-02-12):
-# In 1997, the DS began on October 6. The stated reason was that
-# because international television networks ignored Brazil's policy on DS,
-# they bought the wrong times on satellite for coverage of Pope's visit.
-# This year, the ending date of DS was postponed to March 1
-# to help dealing with the shortages of electric power.
-#
-# Decree 2,317 (1997-09-04), adopted by same states.
-Rule Brazil 1997 only - Oct 6 0:00 1:00 -
-# Decree 2,495 <http://pcdsh01.on.br/figuras/HV2495.JPG>
-# (1998-02-10)
-Rule Brazil 1998 only - Mar 1 0:00 0 -
-# Decree 2,780 <http://pcdsh01.on.br/figuras/Hv98.jpg> (1998-09-11)
-# adopted by the same states as before.
-Rule Brazil 1998 only - Oct 11 0:00 1:00 -
-Rule Brazil 1999 only - Feb 21 0:00 0 -
-# Decree 3,150 <http://pcdsh01.on.br/figuras/HV3150.gif>
-# (1999-08-23) adopted by same states.
-# Decree 3,188 <http://pcdsh01.on.br/DecHV99.gif> (1999-09-30)
-# adds SE, AL, PB, PE, RN, CE, PI, MA and RR.
-Rule Brazil 1999 only - Oct 3 0:00 1:00 -
-Rule Brazil 2000 only - Feb 27 0:00 0 -
-# Decree 3,592 <http://pcdsh01.on.br/DEC3592.htm> (2000-09-06)
-# adopted by the same states as before.
-# Decree 3,630 <http://pcdsh01.on.br/Dec3630.jpg> (2000-10-13)
-# repeals DST in PE and RR, effective 2000-10-15 00:00.
-# Decree 3,632 <http://pcdsh01.on.br/Dec3632.jpg> (2000-10-17)
-# repeals DST in SE, AL, PB, RN, CE, PI and MA, effective 2000-10-22 00:00.
-# Decree 3,916 <http://pcdsh01.on.br/figuras/HV3916.gif>
-# (2001-09-13) reestablishes DST in AL, CE, MA, PB, PE, PI, RN, SE.
-Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 -
-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 <http://www.presidencia.gov.br/CCIVIL/decreto/2002/D4399.htm>
-Rule Brazil 2002 only - Nov 3 0:00 1:00 -
-# Decree 4,844 (2003-09-24; corrected 2003-09-26) repeals DST in BA, MT, TO.
-# 4,844 <http://www.presidencia.gov.br/CCIVIL/decreto/2003/D4844.htm>
-Rule Brazil 2003 only - Oct 19 0:00 1:00 -
-# Decree 5,223 (2004-10-01) reestablishes DST in MT.
-# 5,223 <http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm>
-Rule Brazil 2004 only - Nov 2 0:00 1:00 -
-# Decree 5,539 <http://pcdsh01.on.br/DecHV5539.gif> (2005-09-19),
-# adopted by the same states as before.
-Rule Brazil 2005 only - Oct 16 0:00 1:00 -
-# Decree 5,920 <http://pcdsh01.on.br/DecHV5920.gif> (2006-10-03),
-# adopted by the same states as before.
-Rule Brazil 2006 only - Nov 5 0:00 1:00 -
-Rule Brazil 2007 only - Feb 25 0:00 0 -
-# Decree 6,212 <http://pcdsh01.on.br/DecHV6212.gif> (2007-09-26),
-# adopted by the same states as before.
-Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 -
-# 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...
-Rule Brazil 2008 2017 - Oct Sun>=15 0:00 1:00 -
-Rule Brazil 2008 2011 - Feb Sun>=15 0:00 0 -
-# Decree 7,584 <http://pcdsh01.on.br/HVdecreto7584_20111013.jpg> (2011-10-13)
-# added Bahia.
-Rule Brazil 2012 only - Feb Sun>=22 0:00 0 -
-# Decree 7,826 <http://pcdsh01.on.br/HVdecreto7826_20121015.jpg> (2012-10-15)
-# removed Bahia and added Tocantins.
-# Decree 8,112 <http://pcdsh01.on.br/HVdecreto8112_20130930.JPG> (2013-09-30)
-# removed Tocantins.
-Rule Brazil 2013 2014 - Feb Sun>=15 0:00 0 -
-Rule Brazil 2015 only - Feb Sun>=22 0:00 0 -
-Rule Brazil 2016 2022 - Feb Sun>=15 0:00 0 -
-# From Steffen Thorsen (2017-12-18):
-# According to many media sources, next year's DST start in Brazil will move to
-# the first Sunday of November, and it will stay like that for the years after.
-# ... https://www.timeanddate.com/news/time/brazil-delays-dst-2018.html
-# From Steffen Thorsen (2017-12-20):
-# http://www.planalto.gov.br/ccivil_03/_ato2015-2018/2017/decreto/D9242.htm
-#
-# From FĂĄbio Gomes (2018-10-04):
-# The Brazilian president just announced a new change on this year DST.
-# It was scheduled to start on November 4th and it was changed to November 18th.
-# From Rodrigo BrĂŒning Wessler (2018-10-15):
-# The Brazilian government just announced that the change in DST was
-# canceled.... Maybe the president Michel Temer also woke up one hour
-# earlier today. :)
-Rule Brazil 2018 max - Nov Sun>=1 0:00 1:00 -
-Rule Brazil 2023 only - Feb Sun>=22 0:00 0 -
-Rule Brazil 2024 2025 - Feb Sun>=15 0:00 0 -
-Rule Brazil 2026 only - Feb Sun>=22 0:00 0 -
-Rule Brazil 2027 2033 - Feb Sun>=15 0:00 0 -
-Rule Brazil 2034 only - Feb Sun>=22 0:00 0 -
-Rule Brazil 2035 2036 - Feb Sun>=15 0:00 0 -
-Rule Brazil 2037 only - Feb Sun>=22 0:00 0 -
-# From Arthur David Olson (2008-09-29):
-# The next is wrong in some years but is better than nothing.
-Rule Brazil 2038 max - Feb Sun>=15 0:00 0 -
-
-# The latest ruleset listed above says that the following states observe DST:
-# DF, ES, GO, MG, MS, MT, PR, RJ, RS, SC, SP.
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-#
-# Fernando de Noronha (administratively part of PE)
-Zone America/Noronha -2:09:40 - LMT 1914
- -2:00 Brazil -02/-01 1990 Sep 17
- -2:00 - -02 1999 Sep 30
- -2:00 Brazil -02/-01 2000 Oct 15
- -2:00 - -02 2001 Sep 13
- -2:00 Brazil -02/-01 2002 Oct 1
- -2:00 - -02
-# Other Atlantic islands have no permanent settlement.
-# 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.
-#
-# 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 AmapĂĄ) to the Amazon, then to the Xingu.
-Zone America/Belem -3:13:56 - LMT 1914
- -3:00 Brazil -03/-02 1988 Sep 12
- -3:00 - -03
-#
-# west ParĂĄ (PA)
-# West ParĂĄ includes Altamira, Ăbidos, Prainha, OriximinĂĄ, and SantarĂ©m.
-Zone America/Santarem -3:38:48 - LMT 1914
- -4:00 Brazil -04/-03 1988 Sep 12
- -4:00 - -04 2008 Jun 24 0:00
- -3:00 - -03
-#
-# 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 -03/-02 1990 Sep 17
- -3:00 - -03 1999 Sep 30
- -3:00 Brazil -03/-02 2000 Oct 22
- -3:00 - -03 2001 Sep 13
- -3:00 Brazil -03/-02 2002 Oct 1
- -3:00 - -03
-#
-# Pernambuco (PE) (except Atlantic islands)
-Zone America/Recife -2:19:36 - LMT 1914
- -3:00 Brazil -03/-02 1990 Sep 17
- -3:00 - -03 1999 Sep 30
- -3:00 Brazil -03/-02 2000 Oct 15
- -3:00 - -03 2001 Sep 13
- -3:00 Brazil -03/-02 2002 Oct 1
- -3:00 - -03
-#
-# Tocantins (TO)
-Zone America/Araguaina -3:12:48 - LMT 1914
- -3:00 Brazil -03/-02 1990 Sep 17
- -3:00 - -03 1995 Sep 14
- -3:00 Brazil -03/-02 2003 Sep 24
- -3:00 - -03 2012 Oct 21
- -3:00 Brazil -03/-02 2013 Sep
- -3:00 - -03
-#
-# Alagoas (AL), Sergipe (SE)
-Zone America/Maceio -2:22:52 - LMT 1914
- -3:00 Brazil -03/-02 1990 Sep 17
- -3:00 - -03 1995 Oct 13
- -3:00 Brazil -03/-02 1996 Sep 4
- -3:00 - -03 1999 Sep 30
- -3:00 Brazil -03/-02 2000 Oct 22
- -3:00 - -03 2001 Sep 13
- -3:00 Brazil -03/-02 2002 Oct 1
- -3:00 - -03
-#
-# Bahia (BA)
-# There are too many Salvadors elsewhere, so use America/Bahia instead
-# of America/Salvador.
-Zone America/Bahia -2:34:04 - LMT 1914
- -3:00 Brazil -03/-02 2003 Sep 24
- -3:00 - -03 2011 Oct 16
- -3:00 Brazil -03/-02 2012 Oct 21
- -3:00 - -03
-#
-# 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 -03/-02 1963 Oct 23 0:00
- -3:00 1:00 -02 1964
- -3:00 Brazil -03/-02
-#
-# Mato Grosso do Sul (MS)
-Zone America/Campo_Grande -3:38:28 - LMT 1914
- -4:00 Brazil -04/-03
-#
-# Mato Grosso (MT)
-Zone America/Cuiaba -3:44:20 - LMT 1914
- -4:00 Brazil -04/-03 2003 Sep 24
- -4:00 - -04 2004 Oct 1
- -4:00 Brazil -04/-03
-#
-# RondĂŽnia (RO)
-Zone America/Porto_Velho -4:15:36 - LMT 1914
- -4:00 Brazil -04/-03 1988 Sep 12
- -4:00 - -04
-#
-# Roraima (RR)
-Zone America/Boa_Vista -4:02:40 - LMT 1914
- -4:00 Brazil -04/-03 1988 Sep 12
- -4:00 - -04 1999 Sep 30
- -4:00 Brazil -04/-03 2000 Oct 15
- -4:00 - -04
-#
-# 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
- -4:00 Brazil -04/-03 1988 Sep 12
- -4:00 - -04 1993 Sep 28
- -4:00 Brazil -04/-03 1994 Sep 22
- -4:00 - -04
-#
-# west Amazonas (AM): Atalaia do Norte, Boca do Maoco, Benjamin Constant,
-# Eirunepé, Envira, Ipixuna
-Zone America/Eirunepe -4:39:28 - LMT 1914
- -5:00 Brazil -05/-04 1988 Sep 12
- -5:00 - -05 1993 Sep 28
- -5:00 Brazil -05/-04 1994 Sep 22
- -5:00 - -05 2008 Jun 24 0:00
- -4:00 - -04 2013 Nov 10
- -5:00 - -05
-#
-# Acre (AC)
-Zone America/Rio_Branco -4:31:12 - LMT 1914
- -5:00 Brazil -05/-04 1988 Sep 12
- -5:00 - -05 2008 Jun 24 0:00
- -4:00 - -04 2013 Nov 10
- -5:00 - -05
-
-# Chile
-
-# From Paul Eggert (2015-04-03):
-# Shanks & Pottenger says America/Santiago introduced standard time in
-# 1890 and rounds its UT offset to 70W40; guess that in practice this
-# was the same offset as in 1916-1919. It also says Pacific/Easter
-# standardized on 109W22 in 1890; assume this didn't change the clocks.
-#
-# Dates for America/Santiago from 1910 to 2004 are primarily from
-# the following source, cited by Oscar van Vlijmen (2006-10-08):
-# [1] Chile Law
-# http://www.webexhibits.org/daylightsaving/chile.html
-# This contains a copy of this official table:
-# Cambios en la hora oficial de Chile desde 1900 (retrieved 2008-03-30)
-# https://web.archive.org/web/20080330200901/http://www.horaoficial.cl/cambio.htm
-# [1] needs several corrections, though.
-#
-# The first set of corrections is from:
-# [2] History of the Official Time of Chile
-# http://www.horaoficial.cl/ing/horaof_ing.html (retrieved 2012-03-06). See:
-# https://web.archive.org/web/20120306042032/http://www.horaoficial.cl/ing/horaof_ing.html
-# This is an English translation of:
-# Historia de la hora oficial de Chile (retrieved 2012-10-24). See:
-# https://web.archive.org/web/20121024234627/http://www.horaoficial.cl/horaof.htm
-# A fancier Spanish version (requiring mouse-clicking) is at:
-# http://www.horaoficial.cl/historia_hora.html
-# Conflicts between [1] and [2] were resolved as follows:
-#
-# - [1] says the 1910 transition was Jan 1, [2] says Jan 10 and cites
-# BoletĂn No. 1, Aviso No. 1 (1910). Go with [2].
-#
-# - [1] says SMT was -4:42:45, [2] says Chile's official time from
-# 1916 to 1919 was -4:42:46.3, the meridian of Chile's National
-# Astronomical Observatory (OAN), then located in what is now
-# Quinta Normal in Santiago. Go with [2], rounding it to -4:42:46.
-#
-# - [1] says the 1918 transition was Sep 1, [2] says Sep 10 and cites
-# BoletĂn No. 22, Aviso No. 129/1918 (1918-08-23). Go with [2].
-#
-# - [1] does not give times for transitions; assume they occur
-# at midnight mainland time, the current common practice. However,
-# go with [2]'s specification of 23:00 for the 1947-05-21 transition.
-#
-# Another correction to [1] is from Jesper NĂžrgaard Welen, who
-# wrote (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."
-#
-# Data for Pacific/Easter from 1910 through 1967 come from Shanks &
-# Pottenger. After that, for lack of better info assume
-# Pacific/Easter is always two hours behind America/Santiago;
-# this is known to work for DST transitions starting in 2008 and
-# may well be true for earlier transitions.
-
-# From Eduardo Krell (1995-10-19):
-# The law says to switch to DST at midnight [24:00] on the second SATURDAY
-# of October.... The law is the same for March and October.
-# (1998-09-29):
-# Because of the drought this year, the government decided to go into
-# DST earlier (saturday 9/26 at 24:00). This is a one-time change only ...
-# (unless there's another dry season next year, I guess).
-
-# From Julio I. Pacheco Troncoso (1999-03-18):
-# Because of the same drought, the government decided to end DST later,
-# on April 3, (one-time change).
-
-# 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
-#
-# From José Miguel Garrido (2008-03-05):
-# 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
-#
-# From Arthur David Olson (2010-03-06):
-# Angel Chiang's message confirmed by Julio Pacheco; Julio provided a patch.
-
-# From Glenn Eychaner (2011-03-28):
-# 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
-# of this Saturday. They will go forward again the 3rd Saturday in
-# August, not in October as they have since 1968.
-
-# From Mauricio Parada (2012-02-22), translated by Glenn Eychaner (2012-02-23):
-# As stated in the website of the Chilean Energy Ministry
-# http://www.minenergia.cl/ministerio/noticias/generales/gobierno-anuncia-fechas-de-cambio-de.html
-# The Chilean Government has decided to postpone the entrance into winter time
-# (to leave DST) from March 11 2012 to April 28th 2012....
-# Quote from the website communication:
-#
-# 6. For the year 2012, the dates of entry into winter time will be as follows:
-# a. Saturday April 28, 2012, clocks should go back 60 minutes; that is, at
-# 23:59:59, instead of passing to 0:00, the time should be adjusted to be 23:00
-# of the same day.
-# b. Saturday, September 1, 2012, clocks should go forward 60 minutes; that is,
-# at 23:59:59, instead of passing to 0:00, the time should be adjusted to be
-# 01:00 on September 2.
-
-# From Steffen Thorsen (2013-02-15):
-# According to several news sources, Chile has extended DST this year,
-# they will end DST later and start DST earlier than planned. They
-# hope to save energy. The new end date is 2013-04-28 00:00 and new
-# 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 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)
-# DST Start: first Saturday of September 2014 (Sun 07 Sep 2014 04:00 UTC)
-# http://www.diariooficial.interior.gob.cl//media/2014/02/19/do-20140219.pdf
-
-# From Eduardo Romero Urra (2015-03-03):
-# Today has been published officially that Chile will use the DST time
-# permanently until March 25 of 2017
-# http://www.diariooficial.interior.gob.cl/media/2015/03/03/1-large.jpg
-#
-# From Paul Eggert (2015-03-03):
-# For now, assume that the extension will persist indefinitely.
-
-# From Juan Correa (2016-03-18):
-# The decree regarding DST has been published in today's Official Gazette:
-# http://www.diariooficial.interior.gob.cl/versiones-anteriores/do/20160318/
-# http://www.leychile.cl/Navegar?idNorma=1088502
-# It does consider the second Saturday of May and August as the dates
-# for the transition; and it lists DST dates until 2019, but I think
-# this scheme will stick.
-#
-# From Paul Eggert (2016-03-18):
-# For now, assume the pattern holds for the indefinite future.
-# The decree says transitions occur at 24:00; in practice this appears
-# to mean 24:00 mainland time, not 24:00 local time, so that Easter
-# Island is always two hours behind the mainland.
-
-# From Juan Correa (2016-12-04):
-# Magallanes region ... will keep DST (UTC -3) all year round....
-# http://www.soychile.cl/Santiago/Sociedad/2016/12/04/433428/Bachelet-firmo-el-decreto-para-establecer-un-horario-unico-para-la-Region-de-Magallanes.aspx
-#
-# From Deborah Goldsmith (2017-01-19):
-# http://www.diariooficial.interior.gob.cl/publicaciones/2017/01/17/41660/01/1169626.pdf
-# From Paul Eggert (2017-01-19):
-# The above says the Magallanes change expires 2019-05-11 at 24:00,
-# so in theory, they will revert to -04/-03 after that, which means
-# they will switch from -03 to -04 one hour after Santiago does that day.
-# For now, assume that they will not revert.
-
-# From Juan Correa (2018-08-13):
-# As of moments ago, the Ministry of Energy in Chile has announced the new
-# schema for DST. ... Announcement in video (in Spanish):
-# https://twitter.com/MinEnergia/status/1029000399129374720
-# From Yonathan Dossow (2018-08-13):
-# The video says "first Saturday of September", we all know it means Sunday at
-# midnight.
-# From Tim Parenti (2018-08-13):
-# Translating the captions on the video at 0:44-0:55, "We want to announce as
-# Government that from 2019, Winter Time will be increased to 5 months, between
-# the first Saturday of April and the first Saturday of September."
-# At 2:08-2:20, "The Magallanes region will maintain its current time, as
-# decided by the citizens during 2017, but our Government will promote a
-# regional dialogue table to gather their opinion on this matter."
-# https://twitter.com/MinEnergia/status/1029009354001973248
-# "We will keep the new time policy unchanged for at least the next 4 years."
-# So we extend the new rules on Saturdays at 24:00 mainland time indefinitely.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Chile 1927 1931 - Sep 1 0:00 1:00 -
-Rule Chile 1928 1932 - Apr 1 0:00 0 -
-Rule Chile 1968 only - Nov 3 4:00u 1:00 -
-Rule Chile 1969 only - Mar 30 3:00u 0 -
-Rule Chile 1969 only - Nov 23 4:00u 1:00 -
-Rule Chile 1970 only - Mar 29 3:00u 0 -
-Rule Chile 1971 only - Mar 14 3:00u 0 -
-Rule Chile 1970 1972 - Oct Sun>=9 4:00u 1:00 -
-Rule Chile 1972 1986 - Mar Sun>=9 3:00u 0 -
-Rule Chile 1973 only - Sep 30 4:00u 1:00 -
-Rule Chile 1974 1987 - Oct Sun>=9 4:00u 1:00 -
-Rule Chile 1987 only - Apr 12 3:00u 0 -
-Rule Chile 1988 1990 - Mar Sun>=9 3:00u 0 -
-Rule Chile 1988 1989 - Oct Sun>=9 4:00u 1:00 -
-Rule Chile 1990 only - Sep 16 4:00u 1:00 -
-Rule Chile 1991 1996 - Mar Sun>=9 3:00u 0 -
-Rule Chile 1991 1997 - Oct Sun>=9 4:00u 1:00 -
-Rule Chile 1997 only - Mar 30 3:00u 0 -
-Rule Chile 1998 only - Mar Sun>=9 3:00u 0 -
-Rule Chile 1998 only - Sep 27 4:00u 1:00 -
-Rule Chile 1999 only - Apr 4 3:00u 0 -
-Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 -
-Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 -
-# N.B.: the end of March 29 in Chile is March 30 in Universal time,
-# which is used below in specifying the transition.
-Rule Chile 2008 only - Mar 30 3:00u 0 -
-Rule Chile 2009 only - Mar Sun>=9 3:00u 0 -
-Rule Chile 2010 only - Apr Sun>=1 3:00u 0 -
-Rule Chile 2011 only - May Sun>=2 3:00u 0 -
-Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 -
-Rule Chile 2012 2014 - Apr Sun>=23 3:00u 0 -
-Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 -
-Rule Chile 2016 2018 - May Sun>=9 3:00u 0 -
-Rule Chile 2016 2018 - Aug Sun>=9 4:00u 1:00 -
-Rule Chile 2019 max - Apr Sun>=2 3:00u 0 -
-Rule Chile 2019 max - Sep Sun>=2 4:00u 1:00 -
-# IATA SSIM anomalies: (1992-02) says 1992-03-14;
-# (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 Jan 10 # Santiago Mean Time
- -5:00 - -05 1916 Jul 1
- -4:42:46 - SMT 1918 Sep 10
- -4:00 - -04 1919 Jul 1
- -4:42:46 - SMT 1927 Sep 1
- -5:00 Chile -05/-04 1932 Sep 1
- -4:00 - -04 1942 Jun 1
- -5:00 - -05 1942 Aug 1
- -4:00 - -04 1946 Jul 15
- -4:00 1:00 -03 1946 Sep 1 # central Chile
- -4:00 - -04 1947 Apr 1
- -5:00 - -05 1947 May 21 23:00
- -4:00 Chile -04/-03
-Zone America/Punta_Arenas -4:43:40 - LMT 1890
- -4:42:46 - SMT 1910 Jan 10
- -5:00 - -05 1916 Jul 1
- -4:42:46 - SMT 1918 Sep 10
- -4:00 - -04 1919 Jul 1
- -4:42:46 - SMT 1927 Sep 1
- -5:00 Chile -05/-04 1932 Sep 1
- -4:00 - -04 1942 Jun 1
- -5:00 - -05 1942 Aug 1
- -4:00 - -04 1947 Apr 1
- -5:00 - -05 1947 May 21 23:00
- -4:00 Chile -04/-03 2016 Dec 4
- -3:00 - -03
-Zone Pacific/Easter -7:17:28 - LMT 1890
- -7:17:28 - EMT 1932 Sep # Easter Mean Time
- -7:00 Chile -07/-06 1982 Mar 14 3:00u # Easter Time
- -6:00 Chile -06/-05
-#
-# Salas y GĂłmez Island is uninhabited.
-# Other Chilean locations, including Juan FernĂĄndez Is, Desventuradas Is,
-# and Antarctic bases, are like America/Santiago.
-
-# Antarctic base using South American rules
-# (See the file 'antarctica' for more.)
-#
-# Palmer, Anvers Island, since 1965 (moved 2 miles in 1968)
-#
-# From Ethan Dicks (1996-10-06):
-# It keeps the same time as Punta Arenas, Chile, because, just like us
-# and the South Pole, that's the other end of their supply line....
-# I verified with someone who was there that since 1980,
-# Palmer has followed Chile. Prior to that, before the Falklands War,
-# Palmer used to be supplied from Argentina.
-#
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Antarctica/Palmer 0 - -00 1965
- -4:00 Arg -04/-03 1969 Oct 5
- -3:00 Arg -03/-02 1982 May
- -4:00 Chile -04/-03 2016 Dec 4
- -3:00 - -03
-
-# Colombia
-
-# 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
-Rule CO 1992 only - May 3 0:00 1:00 -
-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 # BogotĂĄ Mean Time
- -5:00 CO -05/-04
-# Malpelo, Providencia, San Andres
-# no information; probably like America/Bogota
-
-# Curaçao
-
-# 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 Curaçao.
-# This all predates our 1970 cutoff, though.
-#
-# 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
- -4:30 - -0430 1965
- -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 characters
-# and contains an apostrophe; use "Lower_Princes" below.
-
-Link America/Curacao America/Lower_Princes # Sint Maarten
-Link America/Curacao America/Kralendijk # Caribbean Netherlands
-
-# Ecuador
-#
-# Milne says the Central and South American Telegraph Company used -5:24:15.
-#
-# From Alois Treindl (2016-12-15):
-# https://www.elcomercio.com/actualidad/hora-sixto-1993.html
-# ... Whether the law applied also to GalĂĄpagos, I do not know.
-# From Paul Eggert (2016-12-15):
-# https://www.elcomercio.com/afull/modificacion-husohorario-ecuador-presidentes-decreto.html
-# This says President Sixto Durån Ballén signed decree No. 285, which
-# established DST from 1992-11-28 to 1993-02-05; it does not give transition
-# times. The people called it "hora de Sixto" ("Sixto hour"). The change did
-# not go over well; a popular song "Qué hora es" by Jaime Guevara had lyrics
-# that included "AmanecĂa en mitad de la noche, los guaguas iban a clase sin
-# sol" ("It was dawning in the middle of the night, the buses went to class
-# without sun"). Although Ballén's campaign slogan was "Ni un paso atrås"
-# (Not one step back), the clocks went back in 1993 and the experiment was not
-# repeated. For now, assume transitions were at 00:00 local time country-wide.
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Ecuador 1992 only - Nov 28 0:00 1:00 -
-Rule Ecuador 1993 only - Feb 5 0:00 0 -
-#
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Guayaquil -5:19:20 - LMT 1890
- -5:14:00 - QMT 1931 # Quito Mean Time
- -5:00 Ecuador -05/-04
-Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
- -5:00 - -05 1986
- -6:00 Ecuador -06/-05
-
-# Falklands
-
-# From Paul Eggert (2006-03-22):
-# Between 1990 and 2000 inclusive, Shanks & Pottenger and the IATA agree except
-# the IATA gives 1996-09-08. Go with Shanks & Pottenger.
-
-# From Falkland Islands Government Office, London (2001-01-22)
-# via Jesper 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
-# am on Sunday 21 April 2002 and advance to summer time at 2 am on
-# Sunday 1 September.
-
-# From Rives McDow (2001-02-13):
-#
-# I have communicated several times with people there, and the last
-# time I had communications that was helpful was in 1998. Here is
-# what was said then:
-#
-# "The general rule was that Stanley used daylight saving and the Camp
-# did not. However for various reasons many people in the Camp have
-# started to use daylight saving (known locally as 'Stanley Time')
-# There is no rule as to who uses daylight saving - it is a matter of
-# personal choice and so it is impossible to draw a map showing who
-# uses it and who does not. Any list would be out of date as soon as
-# it was produced. This year daylight saving ended on April 18/19th
-# and started again on September 12/13th. I do not know what the rule
-# is, but can find out if you like. We do not change at the same time
-# as UK or Chile."
-#
-# I did have in my notes that the rule was "Second Saturday in Sep at
-# 0:00 until third Saturday in Apr at 0:00". I think that this does
-# not agree in some cases with Shanks; is this true?
-#
-# Also, there is no mention in the list that some areas in the
-# Falklands do not use DST. I have found in my communications there
-# that these areas are on the western half of East Falkland and all of
-# West Falkland. Stanley is the only place that consistently observes
-# DST. Again, as in other places in the world, the farmers don't like
-# it. West Falkland is almost entirely sheep farmers.
-#
-# I know one lady there that keeps a list of which farm keeps DST and
-# which doesn't each year. She runs a shop in Stanley, and says that
-# the list changes each year. She uses it to communicate to her
-# customers, catching them when they are home for lunch or dinner.
-
-# From Paul Eggert (2001-03-05):
-# For now, we'll just record the time in Stanley, since we have no
-# better info.
-
-# From Steffen Thorsen (2011-04-01):
-# The Falkland Islands will not turn back clocks this winter, but stay on
-# 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
-# third Sunday of April at 0200hrs and advance to Summer Time (UTC/GMT -3
-# hours) on the first Sunday of September at 0200hrs.
-#
-# IMPORTANT NOTE: During 2011, on a trial basis, the Falkland Islands
-# will not revert to local mean time, but clocks will remain on Summer
-# time (UTC/GMT - 3 hours) throughout the whole of 2011. Any long term
-# change to local time following the trial period will be notified.
-#
-# From Andrew Newman (2012-02-24)
-# A letter from Justin McPhee, Chief Executive,
-# Cable & Wireless Falkland Islands (dated 2012-02-22)
-# states...
-# The current Atlantic/Stanley entry under South America expects the
-# clocks to go back to standard Falklands Time (FKT) on the 15th April.
-# The database entry states that in 2011 Stanley was staying on fixed
-# summer time on a trial basis only. FIG need to contact IANA and/or
-# the maintainers of the database to inform them we're adopting
-# the same policy this year and suggest recommendations for future years.
-#
-# For now we will assume permanent -03 for the Falklands
-# until advised differently (to apply for 2012 and beyond, after the 2011
-# experiment was apparently successful.)
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Falk 1937 1938 - Sep lastSun 0:00 1:00 -
-Rule Falk 1938 1942 - Mar Sun>=19 0:00 0 -
-Rule Falk 1939 only - Oct 1 0:00 1:00 -
-Rule Falk 1940 1942 - Sep lastSun 0:00 1:00 -
-Rule Falk 1943 only - Jan 1 0:00 0 -
-Rule Falk 1983 only - Sep lastSun 0:00 1:00 -
-Rule Falk 1984 1985 - Apr lastSun 0:00 0 -
-Rule Falk 1984 only - Sep 16 0:00 1:00 -
-Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 -
-Rule Falk 1986 2000 - Apr Sun>=16 0:00 0 -
-Rule Falk 2001 2010 - Apr Sun>=15 2:00 0 -
-Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 -
-# 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 -04/-03 1983 May
- -3:00 Falk -03/-02 1985 Sep 15
- -4:00 Falk -04/-03 2010 Sep 5 2:00
- -3:00 - -03
-
-# French Guiana
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Cayenne -3:29:20 - LMT 1911 Jul
- -4:00 - -04 1967 Oct
- -3:00 - -03
-
-# Guyana
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown
- -3:45 - -0345 1975 Jul 31
- -3:00 - -03 1991
-# IATA SSIM (1996-06) says -4:00. Assume a 1991 switch.
- -4:00 - -04
-
-# Paraguay
-#
-# From Paul Eggert (2006-03-22):
-# 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):
-# No time of the day is established for the adjustment, so people normally
-# adjust their clocks at 0 hour of the given dates.
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Para 1975 1988 - Oct 1 0:00 1:00 -
-Rule Para 1975 1978 - Mar 1 0:00 0 -
-Rule Para 1979 1991 - Apr 1 0:00 0 -
-Rule Para 1989 only - Oct 22 0:00 1:00 -
-Rule Para 1990 only - Oct 1 0:00 1:00 -
-Rule Para 1991 only - Oct 6 0:00 1:00 -
-Rule Para 1992 only - Mar 1 0:00 0 -
-Rule Para 1992 only - Oct 5 0:00 1:00 -
-Rule Para 1993 only - Mar 31 0:00 0 -
-Rule Para 1993 1995 - Oct 1 0:00 1:00 -
-Rule Para 1994 1995 - Feb lastSun 0:00 0 -
-Rule Para 1996 only - Mar 1 0:00 0 -
-# IATA SSIM (2000-02) says 1999-10-10; ignore this for now.
-# From Steffen Thorsen (2000-10-02):
-# I have three independent reports that Paraguay changed to DST this Sunday
-# (10-01).
-#
-# Translated by Gwillim Law (2001-02-27) from
-# 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
-# decree each year; the new law has the same effect, but permanently. Every
-# year, the time will change on the first Sunday of October; likewise, the
-# clock will be set back on the first Sunday of March.
-#
-Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 -
-# IATA SSIM (1997-09) says Mar 1; go with Shanks & Pottenger.
-Rule Para 1997 only - Feb lastSun 0:00 0 -
-# Shanks & Pottenger say 1999-02-28; IATA SSIM (1999-02) says 1999-02-27, but
-# (1999-09) reports no date; go with above sources and Gerd Knops (2001-02-27).
-Rule Para 1998 2001 - Mar Sun>=1 0:00 0 -
-# From Rives McDow (2002-02-28):
-# A decree was issued in Paraguay (No. 16350) on 2002-02-26 that changed the
-# dst method to be from the first Sunday in September to the first Sunday in
-# April.
-Rule Para 2002 2004 - Apr Sun>=1 0:00 0 -
-Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 -
-#
-# 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 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 -
-Rule Para 2005 2009 - Mar Sun>=8 0:00 0 -
-# 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:
-# ...
-# Art. 1. It is hereby established that from the second Sunday of the month of
-# April of this year (2010), the official time is to be set back 60 minutes,
-# and that on the first Sunday of the month of October, it is to be set
-# forward 60 minutes, in all the territory of the Paraguayan Republic.
-# ...
-Rule Para 2010 max - Oct Sun>=1 0:00 1:00 -
-Rule Para 2010 2012 - Apr Sun>=8 0:00 0 -
-#
-# From Steffen Thorsen (2013-03-07):
-# Paraguay will end DST on 2013-03-24 00:00....
-# http://www.ande.gov.py/interna.php?id=1075
-#
-# 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 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 # AsunciĂłn Mean Time
- -4:00 - -04 1972 Oct
- -3:00 - -03 1974 Apr
- -4:00 Para -04/-03
-
-# Peru
-#
-# From Evelyn C. Leeper via Mark Brader (2003-10-26)
-# <news:xrGmb.39935$gA1.13896113@news4.srv.hcvlny.cv.net>:
-# When we were in Peru in 1985-1986, they apparently switched over
-# sometime between December 29 and January 3 while we were on the Amazon.
-#
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger don't have this transition. Assume 1986 was like 1987.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Peru 1938 only - Jan 1 0:00 1:00 -
-Rule Peru 1938 only - Apr 1 0:00 0 -
-Rule Peru 1938 1939 - Sep lastSun 0:00 1:00 -
-Rule Peru 1939 1940 - Mar Sun>=24 0:00 0 -
-Rule Peru 1986 1987 - Jan 1 0:00 1:00 -
-Rule Peru 1986 1987 - Apr 1 0:00 0 -
-Rule Peru 1990 only - Jan 1 0:00 1:00 -
-Rule Peru 1990 only - Apr 1 0:00 0 -
-# IATA is ambiguous for 1993/1995; go with Shanks & Pottenger.
-Rule Peru 1994 only - Jan 1 0:00 1:00 -
-Rule Peru 1994 only - Apr 1 0:00 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Lima -5:08:12 - LMT 1890
- -5:08:36 - LMT 1908 Jul 28 # Lima Mean Time?
- -5:00 Peru -05/-04
-
-# South Georgia
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
- -2:00 - -02
-
-# South Sandwich Is
-# uninhabited; scientific personnel have wintered
-
-# Suriname
-# 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:30 - -0330 1984 Oct
- -3:00 - -03
-
-# Trinidad and Tobago
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Port_of_Spain -4:06:04 - LMT 1912 Mar 2
- -4:00 - AST
-
-# These all agree with Trinidad and Tobago since 1970.
-Link America/Port_of_Spain America/Anguilla
-Link America/Port_of_Spain America/Antigua
-Link America/Port_of_Spain America/Dominica
-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 # 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)
-Link America/Port_of_Spain America/St_Vincent
-Link America/Port_of_Spain America/Tortola # Virgin Islands (UK)
-
-# Uruguay
-# From Paul Eggert (1993-11-18):
-# Uruguay wins the prize for the strangest peacetime manipulation of the rules.
-#
-# From Tim Parenti (2018-02-20), per Jeremie Bonjour (2018-01-31) and Michael
-# Deckers (2018-02-20):
-# ... At least they kept good records...
-#
-# http://www.armada.mil.uy/ContenidosPDFs/sohma/web/almanaque/almanaque_2018.pdf#page=36
-# Page 36 of Almanaque 2018, published by the Oceanography, Hydrography, and
-# Meteorology Service of the Uruguayan Navy, seems to give many transitions
-# with greater clarity than we've had before. It directly references many laws
-# and decrees which are, in turn, referenced below. They can be viewed in the
-# public archives of the Diario Oficial (in Spanish) at
-# http://www.impo.com.uy/diariooficial/
-#
-# Ley No. 3920 of 1908-06-10 placed the determination of legal time under the
-# auspices of the National Institute for the Prediction of Time. It is unclear
-# exactly what offset was used during this period, though Ley No. 7200 of
-# 1920-04-23 used the Observatory of the National Meteorological Institute in
-# Montevideo (34° 54' 33" S, 56° 12' 45" W) as its reference meridian,
-# retarding legal time by 15 minutes 9 seconds from 1920-04-30 24:00,
-# resulting in UT-04. Assume the corresponding LMT of UT-03:44:51 (given on
-# page 725 of the Proceedings of the Second Pan-American Scientific Congress,
-# 1915-1916) was in use, and merely became official from 1908-06-10.
-# https://www.impo.com.uy/diariooficial/1908/06/18/12
-# https://www.impo.com.uy/diariooficial/1920/04/27/9
-#
-# Ley No. 7594 of 1923-06-28 specified legal time as Observatory time advanced
-# by 44 minutes 51 seconds (UT-03) "from 30 September to 31 March", and by 14
-# minutes 51 seconds (UT-03:30) "the rest of the year"; a message from the
-# National Council of Administration the same day, published directly below the
-# law in the Diario Oficial, specified the first transition to be 1923-09-30
-# 24:00. This effectively established standard time at UT-03:30 with 30
-# minutes DST. Assume transitions at 24:00 on the specified days until Ley No.
-# 7919 of 1926-03-05 ended this arrangement, repealing all "laws and other
-# provisions which oppose" it, resulting in year-round UT-03:30; a ResoluciĂłn
-# of 1926-03-11 puts the final transition at 1926-03-31 24:00, the same as it
-# would have been under the previous law.
-# https://www.impo.com.uy/diariooficial/1923/07/02/2
-# https://www.impo.com.uy/diariooficial/1926/03/10/2
-# https://www.impo.com.uy/diariooficial/1926/03/18/2
-#
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Uruguay 1923 1925 - Oct 1 0:00 0:30 -
-Rule Uruguay 1924 1926 - Apr 1 0:00 0 -
-# From Tim Parenti (2018-02-15):
-# http://www.impo.com.uy/diariooficial/1933/10/27/6
-#
-# It appears Ley No. 9122 of 1933 was never published as such in the Diario
-# Oficial, but instead appeared as Document 26 in the Diario on Friday
-# 1933-10-27 as a decree made Monday 1933-10-23 and filed under the Ministry of
-# National Defense. It reinstituted a DST of 30 minutes (to UT-03) "from the
-# last Sunday of October...until the last Saturday of March." In accordance
-# with this provision, the first transition was explicitly specified in Article
-# 2 of the decree as Saturday 1933-10-28 at 24:00; that is, Sunday 1933-10-29
-# at 00:00. Assume transitions at 00:00 Sunday throughout.
-#
-# Departing from the matter-of-fact nature of previous timekeeping laws, the
-# 1933 decree "consider[s] the advantages of...the advance of legal time":
-#
-# "Whereas: The measure adopted by almost all nations at the time of the last
-# World War still persists in North America and Europe, precisely because of
-# the economic, hygienic, and social advantages derived from such an
-# emergency measure...
-#
-# Whereas: The advance of the legal time during the summer seasons, by
-# displacing social activity near sunrise, favors the citizen populations
-# and especially the society that creates and works..."
-#
-# It further specified that "necessary measures" be taken to ensure that
-# "public spectacles finish, in general, before [01:00]."
-Rule Uruguay 1933 1938 - Oct lastSun 0:00 0:30 -
-Rule Uruguay 1934 1941 - Mar lastSat 24:00 0 -
-# From Tim Parenti (2018-02-15):
-# Most of the Rules below, and their contemporaneous Zone lines, have been
-# updated simply to match the Almanaque 2018. Although the document does not
-# list exact transition times, midnight transitions were already present in our
-# data here for all transitions through 2004-09, and this is both consistent
-# with prior transitions and verified in several decrees marked below between
-# 1939-09 and 2004-09, wherein the relevant text was typically of the form:
-#
-# "From 0 hours on [date], the legal time of the entire Republic will be...
-#
-# In accordance with [the preceding], on [previous date] at 24 hours, all
-# clocks throughout the Republic will be [advanced/retarded] by..."
-#
-# It is possible that there is greater specificity to be found for the Rules
-# below, but it is buried in no fewer than 40 different decrees individually
-# referenced by the Almanaque for the period from 1939-09 to 2014-09.
-# Four-fifths of these were promulgated less than two weeks before taking
-# effect; more than half within a week and none more than 5 weeks. Only the
-# handful with comments below have been checked with any thoroughness.
-Rule Uruguay 1939 only - Oct 1 0:00 0:30 -
-Rule Uruguay 1940 only - Oct 27 0:00 0:30 -
-# From Tim Parenti (2018-02-15):
-# Decreto 1145 of the Ministry of National Defense, dated 1941-07-26, specified
-# UT-03 from Friday 1941-08-01 00:00, citing an "urgent...need to save fuel".
-# http://www.impo.com.uy/diariooficial/1941/08/04/1
-Rule Uruguay 1941 only - Aug 1 0:00 0:30 -
-# From Tim Parenti (2018-02-15):
-# Decreto 1866 of the Ministry of National Defense, dated 1942-12-09, specified
-# further advancement (to UT-02:30) from Sunday 1942-12-13 24:00. Since clocks
-# never went back to UT-03:30 thereafter, this is modeled as advancing standard
-# time by 30 minutes to UT-03, while retaining 30 minutes of DST.
-# http://www.impo.com.uy/diariooficial/1942/12/16/3
-Rule Uruguay 1942 only - Dec 14 0:00 0:30 -
-Rule Uruguay 1943 only - Mar 14 0:00 0 -
-Rule Uruguay 1959 only - May 24 0:00 0:30 -
-Rule Uruguay 1959 only - Nov 15 0:00 0 -
-Rule Uruguay 1960 only - Jan 17 0:00 1:00 -
-Rule Uruguay 1960 only - Mar 6 0:00 0 -
-Rule Uruguay 1965 only - Apr 4 0:00 1:00 -
-Rule Uruguay 1965 only - Sep 26 0:00 0 -
-# From Tim Parenti (2018-02-15):
-# Decreto 321/968 of 1968-05-25, citing emergency drought measures decreed the
-# day before, brought clocks forward 30 minutes from Monday 1968-05-27 00:00.
-# http://www.impo.com.uy/diariooficial/1968/05/30/5
-Rule Uruguay 1968 only - May 27 0:00 0:30 -
-Rule Uruguay 1968 only - Dec 1 0:00 0 -
-# From Tim Parenti (2018-02-15):
-# Decreto 188/970 of 1970-04-23 instituted restrictions on electricity
-# consumption "as a consequence of the current rainfall regime in the country".
-# Articles 13 and 14 advanced clocks by an hour from Saturday 1970-04-25 00:00.
-# http://www.impo.com.uy/diariooficial/1970/04/29/4
-Rule Uruguay 1970 only - Apr 25 0:00 1:00 -
-Rule Uruguay 1970 only - Jun 14 0:00 0 -
-Rule Uruguay 1972 only - Apr 23 0:00 1:00 -
-Rule Uruguay 1972 only - Jul 16 0:00 0 -
-# From Tim Parenti (2018-02-15):
-# Decreto 29/974 of 1974-01-11, citing "the international rise in the price of
-# oil", advanced clocks by 90 minutes (to UT-01:30). Decreto 163/974 of
-# 1974-03-04 returned 60 of those minutes (to UT-02:30), and the remaining 30
-# minutes followed in Decreto 679/974 of 1974-08-29.
-# http://www.impo.com.uy/diariooficial/1974/01/22/11
-# http://www.impo.com.uy/diariooficial/1974/03/14/3
-# http://www.impo.com.uy/diariooficial/1974/09/04/6
-Rule Uruguay 1974 only - Jan 13 0:00 1:30 -
-Rule Uruguay 1974 only - Mar 10 0:00 0:30 -
-Rule Uruguay 1974 only - Sep 1 0:00 0 -
-Rule Uruguay 1974 only - Dec 22 0:00 1:00 -
-Rule Uruguay 1975 only - Mar 30 0:00 0 -
-Rule Uruguay 1976 only - Dec 19 0:00 1:00 -
-Rule Uruguay 1977 only - Mar 6 0:00 0 -
-Rule Uruguay 1977 only - Dec 4 0:00 1:00 -
-Rule Uruguay 1978 1979 - Mar Sun>=1 0:00 0 -
-Rule Uruguay 1978 only - Dec 17 0:00 1:00 -
-Rule Uruguay 1979 only - Apr 29 0:00 1:00 -
-Rule Uruguay 1980 only - Mar 16 0:00 0 -
-# From Tim Parenti (2018-02-15):
-# Decreto 725/987 of 1987-12-04 cited "better use of national tourist
-# attractions" to advance clocks one hour from Monday 1987-12-14 00:00.
-# http://www.impo.com.uy/diariooficial/1988/01/25/1
-Rule Uruguay 1987 only - Dec 14 0:00 1:00 -
-Rule Uruguay 1988 only - Feb 28 0:00 0 -
-Rule Uruguay 1988 only - Dec 11 0:00 1:00 -
-Rule Uruguay 1989 only - Mar 5 0:00 0 -
-Rule Uruguay 1989 only - Oct 29 0:00 1:00 -
-Rule Uruguay 1990 only - Feb 25 0:00 0 -
-# From Tim Parenti (2018-02-15), per Paul Eggert (1999-11-04):
-# IATA agrees as below for 1990-10 through 1993-02. Per Almanaque 2018, the
-# 1992/1993 season appears to be the first in over half a century where DST
-# both began and ended pursuant to the same decree.
-Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 -
-Rule Uruguay 1991 1992 - Mar Sun>=1 0:00 0 -
-Rule Uruguay 1992 only - Oct 18 0:00 1:00 -
-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....
-# From Tim Parenti (2018-02-15):
-# Decreto 328/004 of 2004-09-15.
-# http://www.impo.com.uy/diariooficial/2004/09/23/documentos.pdf#page=1
-Rule Uruguay 2004 only - Sep 19 0:00 1:00 -
-# From Steffen Thorsen (2005-03-11):
-# Uruguay's DST was scheduled to end on Sunday, 2005-03-13, but in order to
-# save energy ... it was postponed two weeks....
-# From Tim Parenti (2018-02-15):
-# This 2005 postponement is not in Almanaque 2018. Go with the contemporaneous
-# reporting, which is confirmed by Decreto 107/005 of 2005-03-10 amending
-# Decreto 328/004:
-# http://www.impo.com.uy/diariooficial/2005/03/15/documentos.pdf#page=1
-# The original decree specified a transition of 2005-03-12 24:00, but the new
-# one specified 2005-03-27 02:00.
-Rule Uruguay 2005 only - Mar 27 2:00 0 -
-# From Eduardo Cota (2005-09-27):
-# ...from 2005-10-09 at 02:00 local time, until 2006-03-12 at 02:00 local time,
-# official time in Uruguay will be at GMT -2.
-# From Tim Parenti (2018-02-15):
-# Decreto 318/005 of 2005-09-19.
-# http://www.impo.com.uy/diariooficial/2005/09/23/documentos.pdf#page=1
-Rule Uruguay 2005 only - Oct 9 2:00 1:00 -
-Rule Uruguay 2006 2015 - Mar Sun>=8 2:00 0 -
-# From Tim Parenti (2018-02-15), per Jesper NĂžrgaard Welen (2006-09-06):
-# Decreto 311/006 of 2006-09-04 established regular DST from the first Sunday
-# of October at 02:00 through the second Sunday of March at 02:00. Almanaque
-# 2018 appears to have a few typoed dates through this period; ignore them.
-# http://www.impo.com.uy/diariooficial/2006/09/08/documentos.pdf#page=1
-Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 -
-# From Steffen Thorsen (2015-06-30):
-# ... it looks like they will not be using DST the coming summer:
-# http://www.elobservador.com.uy/gobierno-resolvio-que-no-habra-cambio-horario-verano-n656787
-# http://www.republica.com.uy/este-ano-no-se-modificara-el-huso-horario-en-uruguay/523760/
-# From Paul Eggert (2015-06-30):
-# Apparently restaurateurs complained that DST caused people to go to the beach
-# instead of out to dinner.
-# From Pablo Camargo (2015-07-13):
-# http://archivo.presidencia.gub.uy/sci/decretos/2015/06/cons_min_201.pdf
-# From Tim Parenti (2018-02-15):
-# Decreto 178/015 of 2015-06-29; repeals Decreto 311/006.
-
-# This Zone can be simplified once we assume zic %z.
-Zone America/Montevideo -3:44:51 - LMT 1908 Jun 10
- -3:44:51 - MMT 1920 May 1 # Montevideo MT
- -4:00 - -04 1923 Oct 1
- -3:30 Uruguay -0330/-03 1942 Dec 14
- -3:00 Uruguay -03/-0230 1960
- -3:00 Uruguay -03/-02 1968
- -3:00 Uruguay -03/-0230 1970
- -3:00 Uruguay -03/-02 1974
- -3:00 Uruguay -03/-0130 1974 Mar 10
- -3:00 Uruguay -03/-0230 1974 Dec 22
- -3:00 Uruguay -03/-02
-
-# Venezuela
-#
-# From Paul Eggert (2015-07-28):
-# For the 1965 transition see Gaceta Oficial No. 27.619 (1964-12-15), p 205.533
-# http://www.pgr.gob.ve/dmdocuments/1964/27619.pdf
-#
-# 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 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
-
-# From Alexander Krivenyshev (2016-04-15):
-# https://actualidad.rt.com/actualidad/204758-venezuela-modificar-huso-horario-sequia-elnino
-#
-# From Paul Eggert (2016-04-15):
-# Clocks advance 30 minutes on 2016-05-01 at 02:30....
-# "'Venezuela's new time-zone: hours without light, hours without water,
-# hours of presidential broadcasts, hours of lines,' quipped comedian
-# Jean Mary CurrĂł ...". See: Cawthorne A, Kai D. Venezuela scraps
-# half-hour time difference set by Chavez. Reuters 2016-04-15 14:50 -0400
-# https://www.reuters.com/article/us-venezuela-timezone-idUSKCN0XC2BE
-#
-# From Matt Johnson (2016-04-20):
-# ... published in the official Gazette [2016-04-18], here:
-# http://historico.tsj.gob.ve/gaceta_ext/abril/1842016/E-1842016-4551.pdf
-
-# 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 - -0430 1965 Jan 1 0:00
- -4:00 - -04 2007 Dec 9 3:00
- -4:30 - -0430 2016 May 1 2:30
- -4:00 - -04
--- a/test/jdk/sun/util/calendar/zi/tzdata/systemv Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-#
-# 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.
-#
-# tzdb data for System V rules (this file is obsolete)
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# Old rules, should the need arise.
-# No attempt is made to handle Newfoundland, since it cannot be expressed
-# using the System V "TZ" scheme (half-hour offset), or anything outside
-# North America (no support for non-standard DST start/end dates), nor
-# the changes in the DST rules in the US after 1976 (which occurred after
-# the old rules were written).
-#
-# If you need the old rules, uncomment ## lines.
-# Compile this *without* leap second correction for true conformance.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule SystemV min 1973 - Apr lastSun 2:00 1:00 D
-Rule SystemV min 1973 - Oct lastSun 2:00 0 S
-Rule SystemV 1974 only - Jan 6 2:00 1:00 D
-Rule SystemV 1974 only - Nov lastSun 2:00 0 S
-Rule SystemV 1975 only - Feb 23 2:00 1:00 D
-Rule SystemV 1975 only - Oct lastSun 2:00 0 S
-Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D
-Rule SystemV 1976 max - Oct lastSun 2:00 0 S
-
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-## Zone SystemV/AST4ADT -4:00 SystemV A%sT
-## Zone SystemV/EST5EDT -5:00 SystemV E%sT
-## Zone SystemV/CST6CDT -6:00 SystemV C%sT
-## Zone SystemV/MST7MDT -7:00 SystemV M%sT
-## Zone SystemV/PST8PDT -8:00 SystemV P%sT
-## Zone SystemV/YST9YDT -9:00 SystemV Y%sT
-## Zone SystemV/AST4 -4:00 - AST
-## Zone SystemV/EST5 -5:00 - EST
-## Zone SystemV/CST6 -6:00 - CST
-## Zone SystemV/MST7 -7:00 - MST
-## Zone SystemV/PST8 -8:00 - PST
-## Zone SystemV/YST9 -9:00 - YST
-## Zone SystemV/HST10 -10:00 - HST
--- a/test/jdk/sun/util/calendar/zi/tzdata/zone.tab Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,470 +0,0 @@
-#
-# 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.
-#
-# tzdb timezone descriptions (deprecated version)
-#
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-#
-# From Paul Eggert (2018-06-27):
-# 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:
-#
-# 1. This file contains only ASCII characters.
-# 2. The first data column contains exactly one country code.
-#
-# Because of (2), each row stands for an area that is the intersection
-# of a region identified by a country code and of a timezone 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 timezones
-# 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
-AD +4230+00131 Europe/Andorra
-AE +2518+05518 Asia/Dubai
-AF +3431+06912 Asia/Kabul
-AG +1703-06148 America/Antigua
-AI +1812-06304 America/Anguilla
-AL +4120+01950 Europe/Tirane
-AM +4011+04430 Asia/Yerevan
-AO -0848+01314 Africa/Luanda
-AQ -7750+16636 Antarctica/McMurdo New Zealand time - McMurdo, South Pole
-AQ -6617+11031 Antarctica/Casey Casey
-AQ -6835+07758 Antarctica/Davis Davis
-AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville
-AQ -6736+06253 Antarctica/Mawson Mawson
-AQ -6448-06406 Antarctica/Palmer Palmer
-AQ -6734-06808 Antarctica/Rothera Rothera
-AQ -690022+0393524 Antarctica/Syowa Syowa
-AQ -720041+0023206 Antarctica/Troll Troll
-AQ -7824+10654 Antarctica/Vostok Vostok
-AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF)
-AR -3124-06411 America/Argentina/Cordoba Argentina (most areas: CB, CC, CN, ER, FM, MN, SE, SF)
-AR -2447-06525 America/Argentina/Salta Salta (SA, LP, NQ, RN)
-AR -2411-06518 America/Argentina/Jujuy Jujuy (JY)
-AR -2649-06513 America/Argentina/Tucuman Tucuman (TM)
-AR -2828-06547 America/Argentina/Catamarca Catamarca (CT); Chubut (CH)
-AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR)
-AR -3132-06831 America/Argentina/San_Juan San Juan (SJ)
-AR -3253-06849 America/Argentina/Mendoza Mendoza (MZ)
-AR -3319-06621 America/Argentina/San_Luis San Luis (SL)
-AR -5138-06913 America/Argentina/Rio_Gallegos Santa Cruz (SC)
-AR -5448-06818 America/Argentina/Ushuaia Tierra del Fuego (TF)
-AS -1416-17042 Pacific/Pago_Pago
-AT +4813+01620 Europe/Vienna
-AU -3133+15905 Australia/Lord_Howe Lord Howe Island
-AU -5430+15857 Antarctica/Macquarie Macquarie Island
-AU -4253+14719 Australia/Hobart Tasmania (most areas)
-AU -3956+14352 Australia/Currie Tasmania (King Island)
-AU -3749+14458 Australia/Melbourne Victoria
-AU -3352+15113 Australia/Sydney New South Wales (most areas)
-AU -3157+14127 Australia/Broken_Hill New South Wales (Yancowinna)
-AU -2728+15302 Australia/Brisbane Queensland (most areas)
-AU -2016+14900 Australia/Lindeman Queensland (Whitsunday Islands)
-AU -3455+13835 Australia/Adelaide South Australia
-AU -1228+13050 Australia/Darwin Northern Territory
-AU -3157+11551 Australia/Perth Western Australia (most areas)
-AU -3143+12852 Australia/Eucla Western Australia (Eucla)
-AW +1230-06958 America/Aruba
-AX +6006+01957 Europe/Mariehamn
-AZ +4023+04951 Asia/Baku
-BA +4352+01825 Europe/Sarajevo
-BB +1306-05937 America/Barbados
-BD +2343+09025 Asia/Dhaka
-BE +5050+00420 Europe/Brussels
-BF +1222-00131 Africa/Ouagadougou
-BG +4241+02319 Europe/Sofia
-BH +2623+05035 Asia/Bahrain
-BI -0323+02922 Africa/Bujumbura
-BJ +0629+00237 Africa/Porto-Novo
-BL +1753-06251 America/St_Barthelemy
-BM +3217-06446 Atlantic/Bermuda
-BN +0456+11455 Asia/Brunei
-BO -1630-06809 America/La_Paz
-BQ +120903-0681636 America/Kralendijk
-BR -0351-03225 America/Noronha Atlantic islands
-BR -0127-04829 America/Belem Para (east); Amapa
-BR -0343-03830 America/Fortaleza Brazil (northeast: MA, PI, CE, RN, PB)
-BR -0803-03454 America/Recife Pernambuco
-BR -0712-04812 America/Araguaina Tocantins
-BR -0940-03543 America/Maceio Alagoas, Sergipe
-BR -1259-03831 America/Bahia Bahia
-BR -2332-04637 America/Sao_Paulo Brazil (southeast: GO, DF, MG, ES, RJ, SP, PR, SC, RS)
-BR -2027-05437 America/Campo_Grande Mato Grosso do Sul
-BR -1535-05605 America/Cuiaba Mato Grosso
-BR -0226-05452 America/Santarem Para (west)
-BR -0846-06354 America/Porto_Velho Rondonia
-BR +0249-06040 America/Boa_Vista Roraima
-BR -0308-06001 America/Manaus Amazonas (east)
-BR -0640-06952 America/Eirunepe Amazonas (west)
-BR -0958-06748 America/Rio_Branco Acre
-BS +2505-07721 America/Nassau
-BT +2728+08939 Asia/Thimphu
-BW -2439+02555 Africa/Gaborone
-BY +5354+02734 Europe/Minsk
-BZ +1730-08812 America/Belize
-CA +4734-05243 America/St_Johns Newfoundland; Labrador (southeast)
-CA +4439-06336 America/Halifax Atlantic - NS (most areas); PE
-CA +4612-05957 America/Glace_Bay Atlantic - NS (Cape Breton)
-CA +4606-06447 America/Moncton Atlantic - New Brunswick
-CA +5320-06025 America/Goose_Bay Atlantic - Labrador (most areas)
-CA +5125-05707 America/Blanc-Sablon AST - QC (Lower North Shore)
-CA +4339-07923 America/Toronto Eastern - ON, QC (most areas)
-CA +4901-08816 America/Nipigon Eastern - ON, QC (no DST 1967-73)
-CA +4823-08915 America/Thunder_Bay Eastern - ON (Thunder Bay)
-CA +6344-06828 America/Iqaluit Eastern - NU (most east areas)
-CA +6608-06544 America/Pangnirtung Eastern - NU (Pangnirtung)
-CA +484531-0913718 America/Atikokan EST - ON (Atikokan); NU (Coral H)
-CA +4953-09709 America/Winnipeg Central - ON (west); Manitoba
-CA +4843-09434 America/Rainy_River Central - ON (Rainy R, Ft Frances)
-CA +744144-0944945 America/Resolute Central - NU (Resolute)
-CA +624900-0920459 America/Rankin_Inlet Central - NU (central)
-CA +5024-10439 America/Regina CST - SK (most areas)
-CA +5017-10750 America/Swift_Current CST - SK (midwest)
-CA +5333-11328 America/Edmonton Mountain - AB; BC (E); SK (W)
-CA +690650-1050310 America/Cambridge_Bay Mountain - NU (west)
-CA +6227-11421 America/Yellowknife Mountain - NT (central)
-CA +682059-1334300 America/Inuvik Mountain - NT (west)
-CA +4906-11631 America/Creston MST - BC (Creston)
-CA +5946-12014 America/Dawson_Creek MST - BC (Dawson Cr, Ft St John)
-CA +5848-12242 America/Fort_Nelson MST - BC (Ft Nelson)
-CA +4916-12307 America/Vancouver Pacific - BC (most areas)
-CA +6043-13503 America/Whitehorse Pacific - Yukon (south)
-CA +6404-13925 America/Dawson Pacific - Yukon (north)
-CC -1210+09655 Indian/Cocos
-CD -0418+01518 Africa/Kinshasa Dem. Rep. of Congo (west)
-CD -1140+02728 Africa/Lubumbashi Dem. Rep. of Congo (east)
-CF +0422+01835 Africa/Bangui
-CG -0416+01517 Africa/Brazzaville
-CH +4723+00832 Europe/Zurich
-CI +0519-00402 Africa/Abidjan
-CK -2114-15946 Pacific/Rarotonga
-CL -3327-07040 America/Santiago Chile (most areas)
-CL -5309-07055 America/Punta_Arenas Region of Magallanes
-CL -2709-10926 Pacific/Easter Easter Island
-CM +0403+00942 Africa/Douala
-CN +3114+12128 Asia/Shanghai Beijing Time
-CN +4348+08735 Asia/Urumqi Xinjiang Time
-CO +0436-07405 America/Bogota
-CR +0956-08405 America/Costa_Rica
-CU +2308-08222 America/Havana
-CV +1455-02331 Atlantic/Cape_Verde
-CW +1211-06900 America/Curacao
-CX -1025+10543 Indian/Christmas
-CY +3510+03322 Asia/Nicosia Cyprus (most areas)
-CY +3507+03357 Asia/Famagusta Northern Cyprus
-CZ +5005+01426 Europe/Prague
-DE +5230+01322 Europe/Berlin Germany (most areas)
-DE +4742+00841 Europe/Busingen Busingen
-DJ +1136+04309 Africa/Djibouti
-DK +5540+01235 Europe/Copenhagen
-DM +1518-06124 America/Dominica
-DO +1828-06954 America/Santo_Domingo
-DZ +3647+00303 Africa/Algiers
-EC -0210-07950 America/Guayaquil Ecuador (mainland)
-EC -0054-08936 Pacific/Galapagos Galapagos Islands
-EE +5925+02445 Europe/Tallinn
-EG +3003+03115 Africa/Cairo
-EH +2709-01312 Africa/El_Aaiun
-ER +1520+03853 Africa/Asmara
-ES +4024-00341 Europe/Madrid Spain (mainland)
-ES +3553-00519 Africa/Ceuta Ceuta, Melilla
-ES +2806-01524 Atlantic/Canary Canary Islands
-ET +0902+03842 Africa/Addis_Ababa
-FI +6010+02458 Europe/Helsinki
-FJ -1808+17825 Pacific/Fiji
-FK -5142-05751 Atlantic/Stanley
-FM +0725+15147 Pacific/Chuuk Chuuk/Truk, Yap
-FM +0658+15813 Pacific/Pohnpei Pohnpei/Ponape
-FM +0519+16259 Pacific/Kosrae Kosrae
-FO +6201-00646 Atlantic/Faroe
-FR +4852+00220 Europe/Paris
-GA +0023+00927 Africa/Libreville
-GB +513030-0000731 Europe/London
-GD +1203-06145 America/Grenada
-GE +4143+04449 Asia/Tbilisi
-GF +0456-05220 America/Cayenne
-GG +492717-0023210 Europe/Guernsey
-GH +0533-00013 Africa/Accra
-GI +3608-00521 Europe/Gibraltar
-GL +6411-05144 America/Godthab Greenland (most areas)
-GL +7646-01840 America/Danmarkshavn National Park (east coast)
-GL +7029-02158 America/Scoresbysund Scoresbysund/Ittoqqortoormiit
-GL +7634-06847 America/Thule Thule/Pituffik
-GM +1328-01639 Africa/Banjul
-GN +0931-01343 Africa/Conakry
-GP +1614-06132 America/Guadeloupe
-GQ +0345+00847 Africa/Malabo
-GR +3758+02343 Europe/Athens
-GS -5416-03632 Atlantic/South_Georgia
-GT +1438-09031 America/Guatemala
-GU +1328+14445 Pacific/Guam
-GW +1151-01535 Africa/Bissau
-GY +0648-05810 America/Guyana
-HK +2217+11409 Asia/Hong_Kong
-HN +1406-08713 America/Tegucigalpa
-HR +4548+01558 Europe/Zagreb
-HT +1832-07220 America/Port-au-Prince
-HU +4730+01905 Europe/Budapest
-ID -0610+10648 Asia/Jakarta Java, Sumatra
-ID -0002+10920 Asia/Pontianak Borneo (west, central)
-ID -0507+11924 Asia/Makassar Borneo (east, south); Sulawesi/Celebes, Bali, Nusa Tengarra; Timor (west)
-ID -0232+14042 Asia/Jayapura New Guinea (West Papua / Irian Jaya); Malukus/Moluccas
-IE +5320-00615 Europe/Dublin
-IL +314650+0351326 Asia/Jerusalem
-IM +5409-00428 Europe/Isle_of_Man
-IN +2232+08822 Asia/Kolkata
-IO -0720+07225 Indian/Chagos
-IQ +3321+04425 Asia/Baghdad
-IR +3540+05126 Asia/Tehran
-IS +6409-02151 Atlantic/Reykjavik
-IT +4154+01229 Europe/Rome
-JE +491101-0020624 Europe/Jersey
-JM +175805-0764736 America/Jamaica
-JO +3157+03556 Asia/Amman
-JP +353916+1394441 Asia/Tokyo
-KE -0117+03649 Africa/Nairobi
-KG +4254+07436 Asia/Bishkek
-KH +1133+10455 Asia/Phnom_Penh
-KI +0125+17300 Pacific/Tarawa Gilbert Islands
-KI -0308-17105 Pacific/Enderbury Phoenix Islands
-KI +0152-15720 Pacific/Kiritimati Line Islands
-KM -1141+04316 Indian/Comoro
-KN +1718-06243 America/St_Kitts
-KP +3901+12545 Asia/Pyongyang
-KR +3733+12658 Asia/Seoul
-KW +2920+04759 Asia/Kuwait
-KY +1918-08123 America/Cayman
-KZ +4315+07657 Asia/Almaty Kazakhstan (most areas)
-KZ +4448+06528 Asia/Qyzylorda Qyzylorda/Kyzylorda/Kzyl-Orda
-KZ +5312+06337 Asia/Qostanay Qostanay/Kostanay/Kustanay
-KZ +5017+05710 Asia/Aqtobe Aqtobe/Aktobe
-KZ +4431+05016 Asia/Aqtau Mangghystau/Mankistau
-KZ +4707+05156 Asia/Atyrau Atyrau/Atirau/Gur'yev
-KZ +5113+05121 Asia/Oral West Kazakhstan
-LA +1758+10236 Asia/Vientiane
-LB +3353+03530 Asia/Beirut
-LC +1401-06100 America/St_Lucia
-LI +4709+00931 Europe/Vaduz
-LK +0656+07951 Asia/Colombo
-LR +0618-01047 Africa/Monrovia
-LS -2928+02730 Africa/Maseru
-LT +5441+02519 Europe/Vilnius
-LU +4936+00609 Europe/Luxembourg
-LV +5657+02406 Europe/Riga
-LY +3254+01311 Africa/Tripoli
-MA +3339-00735 Africa/Casablanca
-MC +4342+00723 Europe/Monaco
-MD +4700+02850 Europe/Chisinau
-ME +4226+01916 Europe/Podgorica
-MF +1804-06305 America/Marigot
-MG -1855+04731 Indian/Antananarivo
-MH +0709+17112 Pacific/Majuro Marshall Islands (most areas)
-MH +0905+16720 Pacific/Kwajalein Kwajalein
-MK +4159+02126 Europe/Skopje
-ML +1239-00800 Africa/Bamako
-MM +1647+09610 Asia/Yangon
-MN +4755+10653 Asia/Ulaanbaatar Mongolia (most areas)
-MN +4801+09139 Asia/Hovd Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan
-MN +4804+11430 Asia/Choibalsan Dornod, Sukhbaatar
-MO +221150+1133230 Asia/Macau
-MP +1512+14545 Pacific/Saipan
-MQ +1436-06105 America/Martinique
-MR +1806-01557 Africa/Nouakchott
-MS +1643-06213 America/Montserrat
-MT +3554+01431 Europe/Malta
-MU -2010+05730 Indian/Mauritius
-MV +0410+07330 Indian/Maldives
-MW -1547+03500 Africa/Blantyre
-MX +1924-09909 America/Mexico_City Central Time
-MX +2105-08646 America/Cancun Eastern Standard Time - Quintana Roo
-MX +2058-08937 America/Merida Central Time - Campeche, Yucatan
-MX +2540-10019 America/Monterrey Central Time - Durango; Coahuila, Nuevo Leon, Tamaulipas (most areas)
-MX +2550-09730 America/Matamoros Central Time US - Coahuila, Nuevo Leon, Tamaulipas (US border)
-MX +2313-10625 America/Mazatlan Mountain Time - Baja California Sur, Nayarit, Sinaloa
-MX +2838-10605 America/Chihuahua Mountain Time - Chihuahua (most areas)
-MX +2934-10425 America/Ojinaga Mountain Time US - Chihuahua (US border)
-MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora
-MX +3232-11701 America/Tijuana Pacific Time US - Baja California
-MX +2048-10515 America/Bahia_Banderas Central Time - Bahia de Banderas
-MY +0310+10142 Asia/Kuala_Lumpur Malaysia (peninsula)
-MY +0133+11020 Asia/Kuching Sabah, Sarawak
-MZ -2558+03235 Africa/Maputo
-NA -2234+01706 Africa/Windhoek
-NC -2216+16627 Pacific/Noumea
-NE +1331+00207 Africa/Niamey
-NF -2903+16758 Pacific/Norfolk
-NG +0627+00324 Africa/Lagos
-NI +1209-08617 America/Managua
-NL +5222+00454 Europe/Amsterdam
-NO +5955+01045 Europe/Oslo
-NP +2743+08519 Asia/Kathmandu
-NR -0031+16655 Pacific/Nauru
-NU -1901-16955 Pacific/Niue
-NZ -3652+17446 Pacific/Auckland New Zealand (most areas)
-NZ -4357-17633 Pacific/Chatham Chatham Islands
-OM +2336+05835 Asia/Muscat
-PA +0858-07932 America/Panama
-PE -1203-07703 America/Lima
-PF -1732-14934 Pacific/Tahiti Society Islands
-PF -0900-13930 Pacific/Marquesas Marquesas Islands
-PF -2308-13457 Pacific/Gambier Gambier Islands
-PG -0930+14710 Pacific/Port_Moresby Papua New Guinea (most areas)
-PG -0613+15534 Pacific/Bougainville Bougainville
-PH +1435+12100 Asia/Manila
-PK +2452+06703 Asia/Karachi
-PL +5215+02100 Europe/Warsaw
-PM +4703-05620 America/Miquelon
-PN -2504-13005 Pacific/Pitcairn
-PR +182806-0660622 America/Puerto_Rico
-PS +3130+03428 Asia/Gaza Gaza Strip
-PS +313200+0350542 Asia/Hebron West Bank
-PT +3843-00908 Europe/Lisbon Portugal (mainland)
-PT +3238-01654 Atlantic/Madeira Madeira Islands
-PT +3744-02540 Atlantic/Azores Azores
-PW +0720+13429 Pacific/Palau
-PY -2516-05740 America/Asuncion
-QA +2517+05132 Asia/Qatar
-RE -2052+05528 Indian/Reunion
-RO +4426+02606 Europe/Bucharest
-RS +4450+02030 Europe/Belgrade
-RU +5443+02030 Europe/Kaliningrad MSK-01 - Kaliningrad
-RU +554521+0373704 Europe/Moscow MSK+00 - Moscow area
-RU +4457+03406 Europe/Simferopol MSK+00 - Crimea
-RU +5836+04939 Europe/Kirov MSK+00 - Kirov
-RU +4621+04803 Europe/Astrakhan MSK+01 - Astrakhan
-RU +4844+04425 Europe/Volgograd MSK+01 - Volgograd
-RU +5134+04602 Europe/Saratov MSK+01 - Saratov
-RU +5420+04824 Europe/Ulyanovsk MSK+01 - Ulyanovsk
-RU +5312+05009 Europe/Samara MSK+01 - Samara, Udmurtia
-RU +5651+06036 Asia/Yekaterinburg MSK+02 - Urals
-RU +5500+07324 Asia/Omsk MSK+03 - Omsk
-RU +5502+08255 Asia/Novosibirsk MSK+04 - Novosibirsk
-RU +5322+08345 Asia/Barnaul MSK+04 - Altai
-RU +5630+08458 Asia/Tomsk MSK+04 - Tomsk
-RU +5345+08707 Asia/Novokuznetsk MSK+04 - Kemerovo
-RU +5601+09250 Asia/Krasnoyarsk MSK+04 - Krasnoyarsk area
-RU +5216+10420 Asia/Irkutsk MSK+05 - Irkutsk, Buryatia
-RU +5203+11328 Asia/Chita MSK+06 - Zabaykalsky
-RU +6200+12940 Asia/Yakutsk MSK+06 - Lena River
-RU +623923+1353314 Asia/Khandyga MSK+06 - Tomponsky, Ust-Maysky
-RU +4310+13156 Asia/Vladivostok MSK+07 - Amur River
-RU +643337+1431336 Asia/Ust-Nera MSK+07 - Oymyakonsky
-RU +5934+15048 Asia/Magadan MSK+08 - Magadan
-RU +4658+14242 Asia/Sakhalin MSK+08 - Sakhalin Island
-RU +6728+15343 Asia/Srednekolymsk MSK+08 - Sakha (E); North Kuril Is
-RU +5301+15839 Asia/Kamchatka MSK+09 - Kamchatka
-RU +6445+17729 Asia/Anadyr MSK+09 - Bering Sea
-RW -0157+03004 Africa/Kigali
-SA +2438+04643 Asia/Riyadh
-SB -0932+16012 Pacific/Guadalcanal
-SC -0440+05528 Indian/Mahe
-SD +1536+03232 Africa/Khartoum
-SE +5920+01803 Europe/Stockholm
-SG +0117+10351 Asia/Singapore
-SH -1555-00542 Atlantic/St_Helena
-SI +4603+01431 Europe/Ljubljana
-SJ +7800+01600 Arctic/Longyearbyen
-SK +4809+01707 Europe/Bratislava
-SL +0830-01315 Africa/Freetown
-SM +4355+01228 Europe/San_Marino
-SN +1440-01726 Africa/Dakar
-SO +0204+04522 Africa/Mogadishu
-SR +0550-05510 America/Paramaribo
-SS +0451+03137 Africa/Juba
-ST +0020+00644 Africa/Sao_Tome
-SV +1342-08912 America/El_Salvador
-SX +180305-0630250 America/Lower_Princes
-SY +3330+03618 Asia/Damascus
-SZ -2618+03106 Africa/Mbabane
-TC +2128-07108 America/Grand_Turk
-TD +1207+01503 Africa/Ndjamena
-TF -492110+0701303 Indian/Kerguelen
-TG +0608+00113 Africa/Lome
-TH +1345+10031 Asia/Bangkok
-TJ +3835+06848 Asia/Dushanbe
-TK -0922-17114 Pacific/Fakaofo
-TL -0833+12535 Asia/Dili
-TM +3757+05823 Asia/Ashgabat
-TN +3648+01011 Africa/Tunis
-TO -2110-17510 Pacific/Tongatapu
-TR +4101+02858 Europe/Istanbul
-TT +1039-06131 America/Port_of_Spain
-TV -0831+17913 Pacific/Funafuti
-TW +2503+12130 Asia/Taipei
-TZ -0648+03917 Africa/Dar_es_Salaam
-UA +5026+03031 Europe/Kiev Ukraine (most areas)
-UA +4837+02218 Europe/Uzhgorod Ruthenia
-UA +4750+03510 Europe/Zaporozhye Zaporozh'ye/Zaporizhia; Lugansk/Luhansk (east)
-UG +0019+03225 Africa/Kampala
-UM +2813-17722 Pacific/Midway Midway Islands
-UM +1917+16637 Pacific/Wake Wake Island
-US +404251-0740023 America/New_York Eastern (most areas)
-US +421953-0830245 America/Detroit Eastern - MI (most areas)
-US +381515-0854534 America/Kentucky/Louisville Eastern - KY (Louisville area)
-US +364947-0845057 America/Kentucky/Monticello Eastern - KY (Wayne)
-US +394606-0860929 America/Indiana/Indianapolis Eastern - IN (most areas)
-US +384038-0873143 America/Indiana/Vincennes Eastern - IN (Da, Du, K, Mn)
-US +410305-0863611 America/Indiana/Winamac Eastern - IN (Pulaski)
-US +382232-0862041 America/Indiana/Marengo Eastern - IN (Crawford)
-US +382931-0871643 America/Indiana/Petersburg Eastern - IN (Pike)
-US +384452-0850402 America/Indiana/Vevay Eastern - IN (Switzerland)
-US +415100-0873900 America/Chicago Central (most areas)
-US +375711-0864541 America/Indiana/Tell_City Central - IN (Perry)
-US +411745-0863730 America/Indiana/Knox Central - IN (Starke)
-US +450628-0873651 America/Menominee Central - MI (Wisconsin border)
-US +470659-1011757 America/North_Dakota/Center Central - ND (Oliver)
-US +465042-1012439 America/North_Dakota/New_Salem Central - ND (Morton rural)
-US +471551-1014640 America/North_Dakota/Beulah Central - ND (Mercer)
-US +394421-1045903 America/Denver Mountain (most areas)
-US +433649-1161209 America/Boise Mountain - ID (south); OR (east)
-US +332654-1120424 America/Phoenix MST - Arizona (except Navajo)
-US +340308-1181434 America/Los_Angeles Pacific
-US +611305-1495401 America/Anchorage Alaska (most areas)
-US +581807-1342511 America/Juneau Alaska - Juneau area
-US +571035-1351807 America/Sitka Alaska - Sitka area
-US +550737-1313435 America/Metlakatla Alaska - Annette Island
-US +593249-1394338 America/Yakutat Alaska - Yakutat
-US +643004-1652423 America/Nome Alaska (west)
-US +515248-1763929 America/Adak Aleutian Islands
-US +211825-1575130 Pacific/Honolulu Hawaii
-UY -345433-0561245 America/Montevideo
-UZ +3940+06648 Asia/Samarkand Uzbekistan (west)
-UZ +4120+06918 Asia/Tashkent Uzbekistan (east)
-VA +415408+0122711 Europe/Vatican
-VC +1309-06114 America/St_Vincent
-VE +1030-06656 America/Caracas
-VG +1827-06437 America/Tortola
-VI +1821-06456 America/St_Thomas
-VN +1045+10640 Asia/Ho_Chi_Minh
-VU -1740+16825 Pacific/Efate
-WF -1318-17610 Pacific/Wallis
-WS -1350-17144 Pacific/Apia
-YE +1245+04512 Asia/Aden
-YT -1247+04514 Indian/Mayotte
-ZA -2615+02800 Africa/Johannesburg
-ZM -1525+02817 Africa/Lusaka
-ZW -1750+03103 Africa/Harare
--- a/test/jdk/sun/util/calendar/zi/tzdata_jdk/gmt Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-#
-# Copyright (c) 2000, 2018, 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.
-#
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone GMT 0:00 - GMT
--- a/test/jdk/sun/util/calendar/zi/tzdata_jdk/jdk11_full_backward Thu Jul 25 17:27:53 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-#
-# Copyright (c) 2001, 2018, 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.
-#
-# JDK 1.1.x compatible time zone IDs
-#
-
-Link Australia/Darwin ACT
-Link Australia/Sydney AET
-Link America/Argentina/Buenos_Aires AGT
-Link Africa/Cairo ART
-Link America/Anchorage AST
-Link America/Sao_Paulo BET
-Link Asia/Dhaka BST
-Link Africa/Harare CAT
-Link America/St_Johns CNT
-Link America/Chicago CST
-Link Asia/Shanghai CTT
-Link Africa/Addis_Ababa EAT
-Link Europe/Paris ECT
-Link America/New_York EST
-Link Pacific/Honolulu HST
-Link America/Indiana/Indianapolis IET
-Link Asia/Calcutta IST
-Link Asia/Tokyo JST
-Link Pacific/Apia MIT
-Link America/Denver MST
-Link Asia/Yerevan NET
-Link Pacific/Auckland NST
-Link Asia/Karachi PLT
-Link America/Phoenix PNT
-Link America/Puerto_Rico PRT
-Link America/Los_Angeles PST
-Link Pacific/Guadalcanal SST
-Link Asia/Saigon VST
-
-# The follwong link is required to generate JDK 1.2.x and 1.3.x
-# compatible zones. In the Olson public source, MET is defined as
-# GMT+1:00 with the C-Eur rules. In JDK, MET is defined as an alias
-# of Asia/Tehran. This line must be removed if a full set of Olson
-# zones is generated. Otherwise, MET appears twice in the
-# ZoneInfoMappings.IDs table.
-Link Asia/Tehran MET
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule SystemV min 1973 - Apr lastSun 2:00 1:00 D
-Rule SystemV min 1973 - Oct lastSun 2:00 0 S
-Rule SystemV 1974 only - Jan 6 2:00 1:00 D
-Rule SystemV 1974 only - Nov lastSun 2:00 0 S
-Rule SystemV 1975 only - Feb 23 2:00 1:00 D
-Rule SystemV 1975 only - Oct lastSun 2:00 0 S
-Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D
-Rule SystemV 1976 max - Oct lastSun 2:00 0 S
-
-# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone SystemV/AST4ADT -4:00 SystemV A%sT
-Zone SystemV/EST5EDT -5:00 SystemV E%sT
-Zone SystemV/CST6CDT -6:00 SystemV C%sT
-Zone SystemV/MST7MDT -7:00 SystemV M%sT
-Zone SystemV/PST8PDT -8:00 SystemV P%sT
-Zone SystemV/YST9YDT -9:00 SystemV Y%sT
-Zone SystemV/AST4 -4:00 - AST
-Zone SystemV/EST5 -5:00 - EST
-Zone SystemV/CST6 -6:00 - CST
-Zone SystemV/MST7 -7:00 - MST
-Zone SystemV/PST8 -8:00 - PST
-Zone SystemV/YST9 -9:00 - YST
-Zone SystemV/HST10 -10:00 - HST
-
-#
-# For the UTC change in Mustang
-#
-Link GMT UTC
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/ProblemList-graal.txt Fri Jul 26 19:11:34 2019 -0400
@@ -0,0 +1,31 @@
+#
+# Copyright (c) 2019, 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.
+#
+
+#############################################################################
+#
+# List of quarantined tests for testing in Graal JIT mode.
+#
+#############################################################################
+
+tools/javac/file/LimitedImage.java 8228642 generic-all
+tools/javac/modules/InheritRuntimeEnvironmentTest.java 8228642 generic-all
--- a/test/langtools/tools/javac/file/LimitedImage.java Thu Jul 25 17:27:53 2019 -0400
+++ b/test/langtools/tools/javac/file/LimitedImage.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, 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 @@
* @library /tools/lib
* @modules jdk.compiler/com.sun.tools.javac.api
* jdk.compiler/com.sun.tools.javac.main
- * @run main/othervm --limit-modules jdk.compiler,jdk.internal.vm.compiler LimitedImage
+ * @run main/othervm --limit-modules jdk.compiler LimitedImage
*/
import java.io.IOException;
--- a/test/langtools/tools/javac/modules/InheritRuntimeEnvironmentTest.java Thu Jul 25 17:27:53 2019 -0400
+++ b/test/langtools/tools/javac/modules/InheritRuntimeEnvironmentTest.java Fri Jul 26 19:11:34 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, 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
@@ -130,8 +130,7 @@
// This is the test, to verify that the module being compiled will not be able to read
// modules on the module path when a --limit-modules is used
new TestCase(base)
- .testOpts("--module-path", modules.toString(),
- "--limit-modules", "jdk.compiler,jdk.internal.vm.compiler")
+ .testOpts("--module-path", modules.toString(), "--limit-modules", "jdk.compiler")
.otherOpts("-XDrawDiagnostics",
"--module-source-path", src.toString(),
"-classpath", emptyClassPath.toString())