--- a/jdk/.hgtags Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/.hgtags Fri Mar 10 09:20:55 2017 -0800
@@ -402,3 +402,4 @@
fdfa7b2fe9a7db06792eae20f97748f3e85bb83a jdk-9+157
c476ca73750698fa5654e101af699ee45db38e2a jdk-9+158
49b54a4d9e84b7ba956b8c27fced5035465146ae jdk-9+159
+cac788454598b95d8b0153c021a7fae3cd7e6fda jdk-9+160
--- a/jdk/make/copy/Copy-java.base.gmk Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/make/copy/Copy-java.base.gmk Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 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
@@ -235,8 +235,8 @@
# JDK license and assembly exception files to be packaged in JMOD
-JDK_LICENSE ?= $(JDK_TOPDIR)/LICENSE
-JDK_NOTICE ?= $(JDK_TOPDIR)/ASSEMBLY_EXCEPTION
+JDK_LICENSE ?= $(TOPDIR)/LICENSE
+JDK_NOTICE ?= $(TOPDIR)/ASSEMBLY_EXCEPTION
$(eval $(call SetupCopyFiles, COPY_JDK_NOTICES, \
FILES := $(JDK_LICENSE) $(JDK_NOTICE), \
--- a/jdk/make/data/tzdata/VERSION Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/make/data/tzdata/VERSION Fri Mar 10 09:20:55 2017 -0800
@@ -21,4 +21,4 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-tzdata2016j
+tzdata2017a
--- a/jdk/make/data/tzdata/africa Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/make/data/tzdata/africa Fri Mar 10 09:20:55 2017 -0800
@@ -29,15 +29,15 @@
# tz@iana.org for general use in the future). For more, please see
# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2014-10-31):
+# From Paul Eggert (2017-02-20):
#
# 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.
#
-# Gwillim Law writes that a good source
-# for recent time zone data is the International Air Transport
+# 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,
@@ -54,39 +54,33 @@
# 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 +0:00 through +3:00, respectively,
-# but Mark R V Murray reports that
-# 'SAST' is the official abbreviation for +2:00 in the country of South Africa,
-# 'CAT' is commonly used for +2:00 in countries north of South Africa, and
-# 'WAT' is probably the best name for +1:00, as the common phrase for
+# 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".
-# He has heard of "Western Sahara Time" for +0:00 but can find no reference.
#
-# To make things confusing, 'WAT' seems to have been used for -1:00 long ago;
-# I'd guess that this was because people needed _some_ name for -1:00,
-# and at the time, far west Africa was the only major land area in -1:00.
-# This usage is now obsolete, as the last use of -1:00 on the African
-# mainland seems to have been 1976 in Western Sahara.
-#
-# To summarize, the following abbreviations seem to have some currency:
-# -1:00 WAT West Africa Time (no longer used)
-# 0:00 GMT Greenwich Mean Time
-# 2:00 CAT Central Africa Time
-# 2:00 SAST South Africa Standard Time
-# and Murray suggests the following abbreviation:
-# 1:00 WAT West Africa Time
-# I realize that this leads to 'WAT' being used for both -1:00 and 1:00
-# for times before 1976, but this is the best I can think of
-# until we get more information.
+# 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; corrections are welcome!
-# 2:00 WAST West Africa Summer Time
-# 2:30 BEAT British East Africa Time (no longer used)
-# 2:45 BEAUT British East Africa Unified Time (no longer used)
-# 3:00 CAST Central Africa Summer Time (no longer used)
-# 3:00 SAST South Africa Summer Time (no longer used)
-# 3:00 EAT East Africa Time
+# +02 WAST West Africa Summer Time
+# +03 CAST Central Africa Summer Time (no longer used)
+# +03 SAST South Africa Summer Time (no longer used)
+# +03 EAT East Africa Time
+# 'EAT' also seems to have caught on; the others are rare but are paired
+# with better-attested non-DST abbreviations.
# Algeria
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -144,17 +138,17 @@
# Cape Verde / Cabo Verde
#
-# Shanks gives 1907 for the transition to CVT.
+# Shanks gives 1907 for the transition to +02.
# Perhaps the 1911-05-26 Portuguese decree
-# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
# merely made it official?
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia
- -2:00 - CVT 1942 Sep
- -2:00 1:00 CVST 1945 Oct 15
- -2:00 - CVT 1975 Nov 25 2:00
- -1:00 - CVT
+ -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.
@@ -411,7 +405,7 @@
Rule Ghana 1920 1942 - Dec 31 0:00 0 GMT
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Accra -0:00:52 - LMT 1918
- 0:00 Ghana %s
+ 0:00 Ghana GMT/+0020
# Guinea
# See Africa/Abidjan.
@@ -420,20 +414,20 @@
#
# Shanks gives 1911-05-26 for the transition to WAT,
# evidently confusing the date of the Portuguese decree
-# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
# with the date that it took effect, namely 1912-01-01.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1
- -1:00 - WAT 1975
+ -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 - BEAT 1940
- 2:45 - BEAUT 1960
+ 2:30 - +0230 1940
+ 2:45 - +0245 1960
3:00 - EAT
Link Africa/Nairobi Africa/Addis_Ababa # Ethiopia
Link Africa/Nairobi Africa/Asmara # Eritrea
@@ -460,7 +454,7 @@
# 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 - LRT 1972 May # Liberia Time
+ -0:44:30 - -004430 1972 May
0:00 - GMT
###############################################################################
@@ -619,7 +613,7 @@
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 MU%sT # Mauritius Time
+ 4:00 Mauritius +04/+05
# Agalega Is, Rodriguez
# no information; probably like Indian/Mauritius
@@ -938,14 +932,14 @@
# since most of it was then controlled by Morocco.
Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan # El Aaiún
- -1:00 - WAT 1976 Apr 14
+ -1:00 - -01 1976 Apr 14
0:00 Morocco WE%sT
# Mozambique
#
# Shanks gives 1903-03-01 for the transition to CAT.
# Perhaps the 1911-05-26 Portuguese decree
-# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
# merely made it official?
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -972,16 +966,19 @@
# the country are close to 40 minutes earlier in sunrise than the rest
# of the country.
#
-# From Paul Eggert (2007-03-31):
-# Apparently the Caprivi Strip informally observes Botswana time, but
-# we have no details. In the meantime people there can use Africa/Gaborone.
+# 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.
+# http://www.namibian.com.na/51480/read/Time-change-divides-lawmakers
# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Namibia 1994 max - Sep Sun>=1 2:00 1:00 S
Rule Namibia 1995 max - Apr Sun>=1 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
- 1:30 - SWAT 1903 Mar # SW Africa Time
+ 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
@@ -1008,7 +1005,7 @@
# Réunion
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
- 4:00 - RET # Réunion Time
+ 4:00 - +04
#
# Crozet Islands also observes Réunion time; see the 'antarctica' file.
#
@@ -1043,7 +1040,7 @@
# Seychelles
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
- 4:00 - SCT # Seychelles Time
+ 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
--- a/jdk/make/data/tzdata/antarctica Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/make/data/tzdata/antarctica Fri Mar 10 09:20:55 2017 -0800
@@ -133,7 +133,8 @@
# O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
# Prat, -6230-05941
# Villa Las Estrellas (a town), around the Frei base, since 1984-04-09
-# These locations have always used Santiago time; use TZ='America/Santiago'.
+# 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
--- a/jdk/make/data/tzdata/asia Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/make/data/tzdata/asia Fri Mar 10 09:20:55 2017 -0800
@@ -29,15 +29,15 @@
# tz@iana.org for general use in the future). For more, please see
# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2015-08-08):
+# From Paul Eggert (2017-01-13):
#
# 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.
#
-# Gwillim Law writes that a good source
-# for recent time zone data is the International Air Transport
+# 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,
@@ -58,29 +58,24 @@
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
-# I invented the abbreviations marked '*' in the following table;
-# the rest are from earlier versions of this file, or from other sources.
-# Corrections are welcome!
+# The following alphabetic abbreviations appear in these tables:
# std dst
# LMT Local Mean Time
# 2:00 EET EEST Eastern European Time
# 2:00 IST IDT Israel
-# 3:00 AST ADT Arabia*
-# 3:30 IRST IRDT Iran*
-# 4:00 GST Gulf*
# 5:30 IST India
-# 7:00 ICT Indochina, most times and locations*
# 7:00 WIB west Indonesia (Waktu Indonesia Barat)
# 8:00 WITA central Indonesia (Waktu Indonesia Tengah)
# 8:00 CST China
-# 8:00 IDT Indochina, 1943-45, 1947-55, 1960-75 (some locations)*
-# 8:00 JWST Western Standard Time (Japan, 1896/1937)*
-# 8:30 KST KDT Korea when at +0830*
-# 9:00 JCST Central Standard Time (Japan, 1896/1937)
+# 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
+# Otherwise, these tables typically use numeric abbreviations like +03
+# and +0330 for integer hour and minute UTC 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.
@@ -88,7 +83,7 @@
# 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). The names for time zones are guesses.
+# Worldwide Edition).
###############################################################################
@@ -109,8 +104,8 @@
# Afghanistan
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Kabul 4:36:48 - LMT 1890
- 4:00 - AFT 1945
- 4:30 - AFT
+ 4:00 - +04 1945
+ 4:30 - +0430
# Armenia
# From Paul Eggert (2006-03-22):
@@ -253,18 +248,17 @@
# 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 - BURT 1942 May 15 # Burma Time
- 5:30 - IST 1942 Sep
- 6:30 - BURT 1951 Sep 30
- 6:00 - DACT 1971 Mar 26 # Dacca Time
- 6:00 - BDT 2009
- 6:00 Dhaka BD%sT
+ 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 - IST 1987 Oct
- 6:00 - BTT # Bhutan Time
+ 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
@@ -274,14 +268,14 @@
# then contained the Chagos Archipelago).
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Chagos 4:49:40 - LMT 1907
- 5:00 - IOT 1996 # BIOT Time
- 6:00 - IOT
+ 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 - BNT 1933
- 8:00 - BNT
+ 7:30 - +0730 1933
+ 8:00 - +08
# Burma / Myanmar
@@ -290,9 +284,9 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Yangon 6:24:40 - LMT 1880 # or Rangoon
6:24:40 - RMT 1920 # Rangoon Mean Time?
- 6:30 - BURT 1942 May # Burma Time
- 9:00 - JST 1945 May 3
- 6:30 - MMT # Myanmar Time
+ 6:30 - +0630 1942 May
+ 9:00 - +09 1945 May 3
+ 6:30 - +0630
# Cambodia
# See Asia/Bangkok.
@@ -355,7 +349,7 @@
# (could be true), for the moment I am assuming that those two
# counties are mistakes in the astro.com data.
-# From Paul Eggert (2014-06-30):
+# From Paul Eggert (2017-01-05):
# Alois Treindl kindly sent me translations of the following two sources:
#
# (1)
@@ -413,28 +407,26 @@
# mainly observed in coastal areas), the five zones were:
#
# Changbai Time ("Long-white Time", Long-white = Heilongjiang area) UT +08:30
-# Asia/Harbin (currently a link to Asia/Shanghai)
+# 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
-# Asia/Shanghai
+# Now part of Asia/Shanghai.
# most of China
-# This currently represents most other zones as well,
-# as apparently these regions have been the same since 1970.
# Milne gives 8:05:43.2 for Xujiahui Observatory time; round to nearest.
# Guo says Shanghai switched to UT +08 "from the end of the 19th century".
#
-# Long-shu Time (probably due to Long and Shu being two names of the area) UT +07
-# Asia/Chongqing (currently a link to Asia/Shanghai)
+# 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; west Qinghai; and the Guangdong
+# 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
-# Asia/Urumqi
-# This currently represents Kunlun Time as well,
-# as apparently the two regions have been the same since 1970.
+# 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;
@@ -445,7 +437,7 @@
# Fukang, Kuitun, Kumukuli, Miquan, Qitai, and Turfan.
#
# Kunlun Time UT +05:30
-# Asia/Kashgar (currently a link to Asia/Urumqi)
+# 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,
@@ -546,7 +538,7 @@
# Xinjiang time, used by many in western China; represented by Ürümqi / Ürümchi
# / Wulumuqi. (Please use Asia/Shanghai if you prefer Beijing time.)
Zone Asia/Urumqi 5:50:20 - LMT 1928
- 6:00 - XJT
+ 6:00 - +06
# Hong Kong (Xianggang)
@@ -765,30 +757,29 @@
# 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 - JWST 1937 Oct 1
+ 8:00 - CST 1937 Oct 1
9:00 - JST 1945 Sep 21 1:00
8:00 Taiwan C%sT
# Macau (Macao, Aomen)
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Macau 1961 1962 - Mar Sun>=16 3:30 1:00 S
-Rule Macau 1961 1964 - Nov Sun>=1 3:30 0 -
-Rule Macau 1963 only - Mar Sun>=16 0:00 1:00 S
-Rule Macau 1964 only - Mar Sun>=16 3:30 1:00 S
-Rule Macau 1965 only - Mar Sun>=16 0:00 1:00 S
-Rule Macau 1965 only - Oct 31 0:00 0 -
-Rule Macau 1966 1971 - Apr Sun>=16 3:30 1:00 S
-Rule Macau 1966 1971 - Oct Sun>=16 3:30 0 -
-Rule Macau 1972 1974 - Apr Sun>=15 0:00 1:00 S
-Rule Macau 1972 1973 - Oct Sun>=15 0:00 0 -
-Rule Macau 1974 1977 - Oct Sun>=15 3:30 0 -
-Rule Macau 1975 1977 - Apr Sun>=15 3:30 1:00 S
-Rule Macau 1978 1980 - Apr Sun>=15 0:00 1:00 S
-Rule Macau 1978 1980 - Oct Sun>=15 0:00 0 -
+Rule Macau 1961 1962 - Mar Sun>=16 3:30 1:00 D
+Rule Macau 1961 1964 - Nov Sun>=1 3:30 0 S
+Rule Macau 1963 only - Mar Sun>=16 0:00 1:00 D
+Rule Macau 1964 only - Mar Sun>=16 3:30 1:00 D
+Rule Macau 1965 only - Mar Sun>=16 0:00 1:00 D
+Rule Macau 1965 only - Oct 31 0:00 0 S
+Rule Macau 1966 1971 - Apr Sun>=16 3:30 1:00 D
+Rule Macau 1966 1971 - Oct Sun>=16 3:30 0 S
+Rule Macau 1972 1974 - Apr Sun>=15 0:00 1:00 D
+Rule Macau 1972 1973 - Oct Sun>=15 0:00 0 S
+Rule Macau 1974 1977 - Oct Sun>=15 3:30 0 S
+Rule Macau 1975 1977 - Apr Sun>=15 3:30 1:00 D
+Rule Macau 1978 1980 - Apr Sun>=15 0:00 1:00 D
+Rule Macau 1978 1980 - Oct Sun>=15 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Macau 7:34:20 - LMT 1912 Jan 1
- 8:00 Macau MO%sT 1999 Dec 20 # return to China
- 8:00 PRC C%sT
+ 8:00 Macau C%sT
###############################################################################
@@ -904,11 +895,10 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Dili 8:22:20 - LMT 1912 Jan 1
- 8:00 - TLT 1942 Feb 21 23:00 # E Timor Time
- 9:00 - JST 1945 Sep 23
- 9:00 - TLT 1976 May 3
- 8:00 - WITA 2000 Sep 17 0:00
- 9:00 - TLT
+ 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
@@ -923,9 +913,9 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata
5:53:20 - HMT 1941 Oct # Howrah Mean Time?
- 6:30 - BURT 1942 May 15 # Burma Time
+ 6:30 - +0630 1942 May 15
5:30 - IST 1942 Sep
- 5:30 1:00 IST 1945 Oct 15
+ 5:30 1:00 +0630 1945 Oct 15
5:30 - IST
# The following are like Asia/Kolkata:
# Andaman Is
@@ -976,33 +966,33 @@
# Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
# but this must be a typo.
7:07:12 - BMT 1923 Dec 31 23:47:12 # Batavia
- 7:20 - JAVT 1932 Nov # Java Time
- 7:30 - WIB 1942 Mar 23
- 9:00 - JST 1945 Sep 23
- 7:30 - WIB 1948 May
- 8:00 - WIB 1950 May
- 7:30 - WIB 1964
+ 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 - WIB 1942 Jan 29
- 9:00 - JST 1945 Sep 23
- 7:30 - WIB 1948 May
- 8:00 - WIB 1950 May
- 7:30 - WIB 1964
+ 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 - WITA 1942 Feb 9
- 9:00 - JST 1945 Sep 23
+ 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 - WIT 1944 Sep 1
- 9:30 - ACST 1964
+ 9:00 - +09 1944 Sep 1
+ 9:30 - +0930 1964
9:00 - WIT
# Iran
@@ -1034,8 +1024,6 @@
# 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....
-# I have also changed the abbreviations to what is considered correct
-# here in Iran, IRST for regular time and IRDT for daylight saving time.
#
# From Roozbeh Pournader (2005-04-05):
# The text of the Iranian law, in effect since 1925, clearly mentions
@@ -1142,9 +1130,9 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tehran 3:25:44 - LMT 1916
3:25:44 - TMT 1946 # Tehran Mean Time
- 3:30 - IRST 1977 Nov
- 4:00 Iran IR%sT 1979
- 3:30 Iran IR%sT
+ 3:30 - +0330 1977 Nov
+ 4:00 Iran +04/+05 1979
+ 3:30 Iran +0330/+0430
# Iraq
@@ -1187,8 +1175,8 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Baghdad 2:57:40 - LMT 1890
2:57:36 - BMT 1918 # Baghdad Mean Time?
- 3:00 - AST 1982 May
- 3:00 Iraq A%sT
+ 3:00 - +03 1982 May
+ 3:00 Iraq +03/+04
###############################################################################
@@ -1487,8 +1475,6 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
- 9:00 - JST 1896 Jan 1
- 9:00 - JCST 1937 Oct 1
9:00 Japan J%sT
# Since 1938, all Japanese possessions have been like Asia/Tokyo.
@@ -1764,7 +1750,23 @@
# 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 Paul Eggert (2016-11-07):
+# 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 Paul Eggert (2016-12-06):
# The tables below reflect Golosunov's remarks, with exceptions as noted.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1794,7 +1796,7 @@
6:00 - +06
# The following zone is like Asia/Qyzylorda except for being one
# hour earlier from 1991-09-29 to 1992-03-29. The 1991/2 rules for
-# Qostenay are unclear partly because of the 1997 Turgai
+# Qostanay are unclear partly because of the 1997 Turgai
# reorganization, so this zone is commented out for now.
#Zone Asia/Qostanay 4:14:20 - LMT 1924 May 2
# 4:00 - +04 1930 Jun 21
@@ -1831,7 +1833,7 @@
# 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
- 4:00 - +04 1930 Jun 21
+ 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
@@ -1843,7 +1845,7 @@
# 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
- 4:00 - +04 1930 Jun 21
+ 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
@@ -1949,14 +1951,12 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Seoul 8:27:52 - LMT 1908 Apr 1
8:30 - KST 1912 Jan 1
- 9:00 - JCST 1937 Oct 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 - JCST 1937 Oct 1
9:00 - JST 1945 Aug 24
9:00 - KST 2015 Aug 15 00:00
8:30 - KST
@@ -2011,30 +2011,29 @@
# 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 - MALT 1933 Jan 1 # Malaya Time
- 7:00 0:20 MALST 1936 Jan 1
- 7:20 - MALT 1941 Sep 1
- 7:30 - MALT 1942 Feb 16
- 9:00 - JST 1945 Sep 12
- 7:30 - MALT 1982 Jan 1
- 8:00 - MYT # Malaysia Time
+ 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 - BORT 1933 # Borneo Time
- 8:00 NBorneo BOR%sT 1942 Feb 16
- 9:00 - JST 1945 Sep 12
- 8:00 - BORT 1982 Jan 1
- 8:00 - MYT
+ 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 # Male
4:54:00 - MMT 1960 # Male Mean Time
- 5:00 - MVT # Maldives Time
+ 5:00 - +05
# Mongolia
@@ -2161,37 +2160,41 @@
# 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 S
Rule Mongol 1984 1998 - Sep lastSun 0:00 0 -
# IATA SSIM (1999-09) says Mongolia no longer observes DST.
Rule Mongol 2001 only - Apr lastSat 2:00 1:00 S
Rule Mongol 2001 2006 - Sep lastSat 2:00 0 -
Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 S
-Rule Mongol 2015 max - Mar lastSat 2:00 1:00 S
-Rule Mongol 2015 max - Sep lastSat 0:00 0 -
+Rule Mongol 2015 2016 - Mar lastSat 2:00 1:00 S
+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 - HOVT 1978 # Hovd Time
- 7:00 Mongol HOV%sT
+ 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 - ULAT 1978 # Ulaanbaatar Time
- 8:00 Mongol ULA%sT
+ 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 - ULAT 1978
- 8:00 - ULAT 1983 Apr
- 9:00 Mongol CHO%sT 2008 Mar 31 # Choibalsan Time
- 8:00 Mongol CHO%sT
+ 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 - IST 1986
- 5:45 - NPT # Nepal Time
+ 5:30 - +0530 1986
+ 5:45 - +0545
# Oman
# See Asia/Dubai.
@@ -2340,10 +2343,10 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Karachi 4:28:12 - LMT 1907
- 5:30 - IST 1942 Sep
- 5:30 1:00 IST 1945 Oct 15
- 5:30 - IST 1951 Sep 30
- 5:00 - KART 1971 Mar 26 # Karachi Time
+ 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
@@ -2708,15 +2711,15 @@
# 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 PH%sT 1942 May
- 9:00 - JST 1944 Nov
- 8:00 Phil PH%sT
+ 8:00 Phil +08/+09 1942 May
+ 9:00 - +09 1944 Nov
+ 8:00 Phil +08/+09
# Qatar
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha
- 4:00 - GST 1972 Jun
- 3:00 - AST
+ 4:00 - +04 1972 Jun
+ 3:00 - +03
Link Asia/Qatar Asia/Bahrain
# Saudi Arabia
@@ -2743,7 +2746,7 @@
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Riyadh 3:06:52 - LMT 1947 Mar 14
- 3:00 - AST
+ 3:00 - +03
Link Asia/Riyadh Asia/Aden # Yemen
Link Asia/Riyadh Asia/Kuwait
@@ -2753,14 +2756,13 @@
# 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 - MALT 1933 Jan 1 # Malaya Time
- 7:00 0:20 MALST 1936 Jan 1
- 7:20 - MALT 1941 Sep 1
- 7:30 - MALT 1942 Feb 16
- 9:00 - JST 1945 Sep 12
- 7:30 - MALT 1965 Aug 9 # independence
- 7:30 - SGT 1982 Jan 1 # Singapore Time
- 8:00 - SGT
+ 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
@@ -2819,8 +2821,8 @@
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 +0530/+06 1942 Sep
- 5:30 1:00 +0530/+0630 1945 Oct 16 2:00
+ 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
@@ -3002,7 +3004,7 @@
# 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 - ICT
+ 7:00 - +07
Link Asia/Bangkok Asia/Phnom_Penh # Cambodia
Link Asia/Bangkok Asia/Vientiane # Laos
@@ -3018,7 +3020,7 @@
# United Arab Emirates
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Dubai 3:41:12 - LMT 1920
- 4:00 - GST
+ 4:00 - +04
Link Asia/Dubai Asia/Muscat # Oman
# Uzbekistan
@@ -3091,15 +3093,15 @@
# 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
- 7:00 - ICT 1942 Dec 31 23:00
- 8:00 - IDT 1945 Mar 14 23:00
- 9:00 - JST 1945 Sep 2
- 7:00 - ICT 1947 Apr 1
- 8:00 - IDT 1955 Jul 1
- 7:00 - ICT 1959 Dec 31 23:00
- 8:00 - IDT 1975 Jun 13
- 7:00 - ICT
+ 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
# Yemen
# See Asia/Riyadh.
--- a/jdk/make/data/tzdata/australasia Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/make/data/tzdata/australasia Fri Mar 10 09:20:55 2017 -0800
@@ -67,8 +67,8 @@
8:00 Aus AW%sT 1943 Jul
8:00 AW AW%sT
Zone Australia/Eucla 8:35:28 - LMT 1895 Dec
- 8:45 Aus ACW%sT 1943 Jul
- 8:45 AW ACW%sT
+ 8:45 Aus +0845/+0945 1943 Jul
+ 8:45 AW +0845/+0945
# Queensland
#
@@ -235,7 +235,8 @@
Rule LH 2008 max - Oct Sun>=1 2:00 0:30 D
Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
10:00 - AEST 1981 Mar
- 10:30 LH LH%sT
+ 10:30 LH +1030/+1130 1985 Jul
+ 10:30 LH +1030/+11
# Australian miscellany
#
@@ -273,19 +274,19 @@
0 - -00 1948 Mar 25
10:00 Aus AE%sT 1967
10:00 AT AE%sT 2010 Apr 4 3:00
- 11:00 - MIST # Macquarie I Standard Time
+ 11:00 - +11
# Christmas
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Christmas 7:02:52 - LMT 1895 Feb
- 7:00 - CXT # Christmas Island Time
+ 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 - CCT # Cocos Islands Time
+ 6:30 - +0630
# Fiji
@@ -398,16 +399,16 @@
Rule Fiji 2015 max - Jan Sun>=15 3:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
- 12:00 Fiji FJ%sT # Fiji Time
+ 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 - GAMT # Gambier Time
+ -9:00 - -09
Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct
- -9:30 - MART # Marquesas Time
+ -9:30 - -0930
Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete
- -10:00 - TAHT # Tahiti Time
+ -10:00 - -10
# Clipperton (near North America) is administered from French Polynesia;
# it is uninhabited.
@@ -422,15 +423,15 @@
# Kiribati
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
- 12:00 - GILT # Gilbert Is Time
+ 12:00 - +12
Zone Pacific/Enderbury -11:24:20 - LMT 1901
- -12:00 - PHOT 1979 Oct # Phoenix Is Time
- -11:00 - PHOT 1995
- 13:00 - PHOT
+ -12:00 - -12 1979 Oct
+ -11:00 - -11 1995
+ 13:00 - +13
Zone Pacific/Kiritimati -10:29:20 - LMT 1901
- -10:40 - LINT 1979 Oct # Line Is Time
- -10:00 - LINT 1995
- 14:00 - LINT
+ -10:40 - -1040 1979 Oct
+ -10:00 - -10 1995
+ 14:00 - +14
# N Mariana Is
# See Pacific/Guam.
@@ -438,31 +439,31 @@
# Marshall Is
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Majuro 11:24:48 - LMT 1901
- 11:00 - MHT 1969 Oct # Marshall Islands Time
- 12:00 - MHT
+ 11:00 - +11 1969 Oct
+ 12:00 - +12
Zone Pacific/Kwajalein 11:09:20 - LMT 1901
- 11:00 - MHT 1969 Oct
- -12:00 - KWAT 1993 Aug 20 # Kwajalein Time
- 12:00 - MHT
+ 11:00 - +11 1969 Oct
+ -12:00 - -12 1993 Aug 20
+ 12:00 - +12
# Micronesia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Chuuk 10:07:08 - LMT 1901
- 10:00 - CHUT # Chuuk Time
+ 10:00 - +10
Zone Pacific/Pohnpei 10:32:52 - LMT 1901 # Kolonia
- 11:00 - PONT # Pohnpei Time
+ 11:00 - +11
Zone Pacific/Kosrae 10:51:56 - LMT 1901
- 11:00 - KOST 1969 Oct # Kosrae Time
- 12:00 - KOST 1999
- 11:00 - KOST
+ 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 - NRT 1942 Mar 15 # Nauru Time
- 9:00 - JST 1944 Aug 15
- 11:30 - NRT 1979 May
- 12:00 - NRT
+ 11:30 - +1130 1942 Mar 15
+ 9:00 - +09 1944 Aug 15
+ 11:30 - +1130 1979 May
+ 12:00 - +12
# New Caledonia
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -473,7 +474,7 @@
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 NC%sT
+ 11:00 NC +11/+12
###############################################################################
@@ -514,8 +515,8 @@
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 - CHAST 1946 Jan 1
- 12:45 Chatham CHA%sT
+ 12:15 - +1215 1946 Jan 1
+ 12:45 Chatham +1245/+1345
Link Pacific/Auckland Antarctica/McMurdo
@@ -537,8 +538,8 @@
Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 HS
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
- -10:30 - CKT 1978 Nov 12 # Cook Is Time
- -10:00 Cook CK%sT
+ -10:30 - -1030 1978 Nov 12
+ -10:00 Cook -10/-0930
###############################################################################
@@ -546,29 +547,29 @@
# Niue
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Niue -11:19:40 - LMT 1901 # Alofi
- -11:20 - NUT 1951 # Niue Time
- -11:30 - NUT 1978 Oct 1
- -11:00 - NUT
+ -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 - NMT 1951 # Norfolk Mean Time
- 11:30 - NFT 1974 Oct 27 02:00 # Norfolk T.
- 11:30 1:00 NFST 1975 Mar 2 02:00
- 11:30 - NFT 2015 Oct 4 02:00
- 11:00 - NFT
+ 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 8:57:56 - LMT 1901 # Koror
- 9:00 - PWT # Palau Time
+ 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 - PGT # Papua New Guinea Time
+ 10:00 - +10
#
# From Paul Eggert (2014-10-13):
# Base the Bougainville entry on the Arawa-Kieta region, which appears to have
@@ -583,28 +584,26 @@
# 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";
-# abbreviate this as BST. See:
+# 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 - PGT 1942 Jul
- 9:00 - JST 1945 Aug 21
- 10:00 - PGT 2014 Dec 28 2:00
- 11:00 - BST
+ 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 - PNT 1998 Apr 27 0:00
- -8:00 - PST # Pitcairn Standard Time
+ -8:30 - -0830 1998 Apr 27 0:00
+ -8:00 - -08
# American Samoa
Zone Pacific/Pago_Pago 12:37:12 - LMT 1879 Jul 5
-11:22:48 - LMT 1911
- -11:00 - NST 1967 Apr # N=Nome
- -11:00 - BST 1983 Nov 30 # B=Bering
-11:00 - SST # S=Samoa
Link Pacific/Pago_Pago Pacific/Midway # in US minor outlying islands
@@ -685,17 +684,17 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5
-11:26:56 - LMT 1911
- -11:30 - WSST 1950
- -11:00 WS S%sT 2011 Dec 29 24:00 # S=Samoa
- 13:00 WS WS%sT
+ -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 - SBT # Solomon Is Time
+ 11:00 - +11
-# Tokelau Is
+# Tokelau
#
# From Gwillim Law (2011-12-29)
# A correspondent informed me that Tokelau, like Samoa, will be skipping
@@ -716,8 +715,8 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Fakaofo -11:24:56 - LMT 1901
- -11:00 - TKT 2011 Dec 30 # Tokelau Time
- 13:00 - TKT
+ -11:00 - -11 2011 Dec 30
+ 13:00 - +13
# Tonga
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -736,7 +735,7 @@
# Tuvalu
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Funafuti 11:56:52 - LMT 1901
- 12:00 - TVT # Tuvalu Time
+ 12:00 - +12
# US minor outlying islands
@@ -760,10 +759,11 @@
# Johnston
#
-# From Paul Eggert (2014-03-11):
+# 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.
+# 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,
@@ -783,8 +783,6 @@
# 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".
-#
-# See 'northamerica' for Pacific/Johnston.
# Kingman
# uninhabited
@@ -798,7 +796,7 @@
# Wake
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Wake 11:06:28 - LMT 1901
- 12:00 - WAKT # Wake Time
+ 12:00 - +12
# Vanuatu
@@ -811,12 +809,12 @@
Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
- 11:00 Vanuatu VU%sT # Vanuatu Time
+ 11:00 Vanuatu +11/+12
# Wallis and Futuna
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Wallis 12:15:20 - LMT 1901
- 12:00 - WFT # Wallis & Futuna Time
+ 12:00 - +12
###############################################################################
@@ -827,15 +825,15 @@
# tz@iana.org for general use in the future). For more, please see
# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2014-10-31):
+# 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.
#
-# Gwillim Law writes that a good source
-# for recent time zone data is the International Air Transport
+# 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,
@@ -852,28 +850,19 @@
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
-# I invented the abbreviations marked '*' in the following table;
-# the rest are from earlier versions of this file, or from other sources.
+# The following abbreviations are from other sources.
# Corrections are welcome!
# std dst
# LMT Local Mean Time
# 8:00 AWST AWDT Western Australia
-# 8:45 ACWST ACWDT Central Western Australia*
-# 9:00 JST Japan
# 9:30 ACST ACDT Central Australia
# 10:00 AEST AEDT Eastern Australia
+# 10:00 GST Guam through 2000
# 10:00 ChST Chamorro
-# 10:30 LHST LHDT Lord Howe*
-# 11:00 BST Bougainville*
# 11:30 NZMT NZST New Zealand through 1945
# 12:00 NZST NZDT New Zealand 1946-present
-# 12:15 CHAST Chatham through 1945*
-# 12:45 CHAST CHADT Chatham 1946-present*
-# 13:00 WSST WSDT (western) Samoa 2011-present*
-# -11:30 WSST Western Samoa through 1950*
# -11:00 SST Samoa
# -10:00 HST Hawaii
-# - 8:00 PST Pitcairn*
#
# See the 'northamerica' file for Hawaii.
# See the 'southamerica' file for Easter I and the Galápagos Is.
--- a/jdk/make/data/tzdata/backward Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/make/data/tzdata/backward Fri Mar 10 09:20:55 2017 -0800
@@ -119,6 +119,7 @@
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
--- a/jdk/make/data/tzdata/europe Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/make/data/tzdata/europe Fri Mar 10 09:20:55 2017 -0800
@@ -29,15 +29,15 @@
# tz@iana.org for general use in the future). For more, please see
# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2014-10-31):
+# 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.
#
-# Gwillim Law writes that a good source
-# for recent time zone data is the International Air Transport
+# 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,
@@ -79,26 +79,23 @@
# 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 from earlier versions of this file, or from other sources.
-# Corrections are welcome!
-# std dst 2dst
-# LMT Local Mean Time
-# -4:00 AST ADT Atlantic
-# -3:00 WGT WGST Western Greenland*
-# -1:00 EGT EGST Eastern Greenland*
-# 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)*
-# 0:20 NET NEST Netherlands (1937-1940)*
-# 1:00 BST British Standard (1968-1971)
-# 1:00 CET CEST CEMT Central Europe
-# 1:00:14 SET Swedish (1879-1899)*
-# 2:00 EET EEST Eastern Europe
-# 3:00 MSK MSD Moscow
+# 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 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),
# The original six [EU members]: Belgium, France, (West) Germany, Italy,
@@ -498,7 +495,7 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2
- -0:25:21 - DMT 1916 May 21 2:00
+ -0:25:21 - DMT 1916 May 21 2:00 # Dublin MT
-0:25:21 1:00 IST 1916 Oct 1 2:00s
0:00 GB-Eire %s 1921 Dec 6 # independence
0:00 GB-Eire GMT/IST 1940 Feb 25 2:00
@@ -1087,16 +1084,16 @@
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28
- -3:00 - WGT 1980 Apr 6 2:00
- -3:00 EU WG%sT 1996
+ -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 - CGT 1980 Apr 6 2:00
- -2:00 C-Eur CG%sT 1981 Mar 29
- -1:00 EU EG%sT
+ -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 - WGT 1980 Apr 6 2:00
- -3:00 EU WG%sT
+ -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
@@ -1511,7 +1508,7 @@
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 IS%sT 1968 Apr 7 1:00s
+ -1:00 Iceland -01/+00 1968 Apr 7 1:00s
0:00 - GMT
# Italy
@@ -1975,7 +1972,7 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Amsterdam 0:19:32 - LMT 1835
0:19:32 Neth %s 1937 Jul 1
- 0:20 Neth NE%sT 1940 May 16 0:00 # Dutch Time
+ 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
@@ -2192,16 +2189,34 @@
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 # Horta Mean Time
- -2:00 Port AZO%sT 1966 Apr 3 2:00 # Azores Time
- -1:00 Port AZO%sT 1983 Sep 25 1:00s
- -1:00 W-Eur AZO%sT 1992 Sep 27 1:00s
+ -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 AZO%sT
+ -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 # Funchal Mean Time
- -1:00 Port MAD%sT 1966 Apr 3 2:00 # Madeira Time
+ -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
@@ -2559,10 +2574,8 @@
3:00 - MSK
-# From Tim Parenti (2014-07-03):
-# Europe/Simferopol covers...
-# ** **** Crimea, Republic of
-# ** **** Sevastopol
+# 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
@@ -3255,46 +3268,77 @@
# 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
-# For 1917-1919 Whitman gives Apr Sat>=1 - Oct Sat>=1;
-# go with Shanks & Pottenger.
-Rule Spain 1917 only - May 5 23:00s 1:00 S
-Rule Spain 1917 1919 - Oct 6 23:00s 0 -
-Rule Spain 1918 only - Apr 15 23:00s 1:00 S
-Rule Spain 1919 only - Apr 5 23:00s 1:00 S
-# Whitman gives 1921 Feb 28 - Oct 14; go with Shanks & Pottenger.
-Rule Spain 1924 only - Apr 16 23:00s 1:00 S
-# Whitman gives 1924 Oct 14; go with Shanks & Pottenger.
-Rule Spain 1924 only - Oct 4 23:00s 0 -
-Rule Spain 1926 only - Apr 17 23:00s 1:00 S
-# Whitman says no DST in 1929; go with Shanks & Pottenger.
-Rule Spain 1926 1929 - Oct Sat>=1 23:00s 0 -
-Rule Spain 1927 only - Apr 9 23:00s 1:00 S
-Rule Spain 1928 only - Apr 14 23:00s 1:00 S
-Rule Spain 1929 only - Apr 20 23:00s 1:00 S
-# Whitman gives 1937 Jun 16, 1938 Apr 16, 1940 Apr 13;
-# go with Shanks & Pottenger.
-Rule Spain 1937 only - May 22 23:00s 1:00 S
-Rule Spain 1937 1939 - Oct Sat>=1 23:00s 0 -
-Rule Spain 1938 only - Mar 22 23:00s 1:00 S
-Rule Spain 1939 only - Apr 15 23:00s 1:00 S
-Rule Spain 1940 only - Mar 16 23:00s 1:00 S
-# Whitman says no DST 1942-1945; go with Shanks & Pottenger.
-Rule Spain 1942 only - May 2 22:00s 2:00 M # Midsummer
-Rule Spain 1942 only - Sep 1 22:00s 1:00 S
-Rule Spain 1943 1946 - Apr Sat>=13 22:00s 2:00 M
-Rule Spain 1943 only - Oct 3 22:00s 1:00 S
-Rule Spain 1944 only - Oct 10 22:00s 1:00 S
-Rule Spain 1945 only - Sep 30 1:00 1:00 S
-Rule Spain 1946 only - Sep 30 0:00 0 -
+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 - Sep 30 1:00 0 -
-Rule Spain 1974 1975 - Apr Sat>=13 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 1978 - Apr 2 23:00 1:00 S
-Rule Spain 1978 only - Oct 1 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.
Rule SpainAfrica 1967 only - Jun 3 12:00 1:00 S
Rule SpainAfrica 1967 only - Oct 1 0:00 0 -
@@ -3306,11 +3350,11 @@
Rule SpainAfrica 1978 only - Jun 1 0:00 1:00 S
Rule SpainAfrica 1978 only - Aug 4 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Madrid -0:14:44 - LMT 1901 Jan 1 0:00s
- 0:00 Spain WE%sT 1946 Sep 30
+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 1901
+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
@@ -3319,7 +3363,7 @@
1:00 - CET 1986
1:00 EU CE%sT
Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
- -1:00 - CANT 1946 Sep 30 1:00 # Canaries T
+ -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
@@ -3732,7 +3776,7 @@
# 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 - CUT 1924 May 2 # Central Ukraine T
+ 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
--- a/jdk/make/data/tzdata/leapseconds Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/make/data/tzdata/leapseconds Fri Mar 10 09:20:55 2017 -0800
@@ -81,5 +81,5 @@
Leap 2015 Jun 30 23:59:60 + S
Leap 2016 Dec 31 23:59:60 + S
-# Updated through IERS Bulletin C52
-# File expires on: 28 June 2017
+# Updated through IERS Bulletin C53
+# File expires on: 28 December 2017
--- a/jdk/make/data/tzdata/northamerica Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/make/data/tzdata/northamerica Fri Mar 10 09:20:55 2017 -0800
@@ -201,22 +201,6 @@
Zone MST7MDT -7:00 US M%sT
Zone PST8PDT -8:00 US P%sT
-# From Bob Devine (1988-01-28):
-# ...Alaska (and Hawaii) had the timezone names changed in 1967.
-# old new
-# Pacific Standard Time(PST) -same-
-# Yukon Standard Time(YST) -same-
-# Central Alaska S.T. (CAT) Alaska-Hawaii St[an]dard Time (AHST)
-# Nome Standard Time (NT) Bering Standard Time (BST)
-#
-# ...Alaska's timezone lines were redrawn in 1983 to give only 2 tz.
-# The YST zone now covers nearly all of the state, AHST just part
-# of the Aleutian islands. No DST.
-
-# From Paul Eggert (1995-12-19):
-# The tables below use 'NST', not 'NT', for Nome Standard Time.
-# I invented 'CAWT' for Central Alaska War Time.
-
# 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
@@ -273,6 +257,21 @@
# 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".
@@ -328,6 +327,15 @@
# 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
@@ -505,7 +513,7 @@
-8:00 US P%sT
# Alaska
-# AK%sT is the modern abbreviation for -9:00 per USNO.
+# AK%sT is the modern abbreviation for -09 per USNO.
#
# From Paul Eggert (2001-05-30):
# Howse writes that Alaska switched from the Julian to the Gregorian calendar,
@@ -611,10 +619,8 @@
-9:00 US AK%sT
Zone America/Anchorage 14:00:24 - LMT 1867 Oct 18
-9:59:36 - LMT 1900 Aug 20 12:00
- -10:00 - CAT 1942
- -10:00 US CAT/CAWT 1945 Aug 14 23:00u
- -10:00 US CAT/CAPT 1946 # Peace
- -10:00 - CAT 1967 Apr
+ -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
@@ -703,7 +709,6 @@
-10:30 1:00 HDT 1945 Sep 30 2:00
-10:30 - HST 1947 Jun 8 2:00
-10:00 - HST
-Link Pacific/Honolulu Pacific/Johnston
# Now we turn to US areas that have diverged from the consensus since 1970.
@@ -1091,15 +1096,15 @@
################################################################################
-# From Paul Eggert (2014-10-31):
+# 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.
#
-# Gwillim Law writes that a good source
-# for recent time zone data is the International Air Transport
+# 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,
@@ -2757,15 +2762,15 @@
# 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 HD
-Rule Belize 1919 1943 - Feb Sun>=9 0:00 0 S
-Rule Belize 1973 only - Dec 5 0:00 1:00 D
-Rule Belize 1974 only - Feb 9 0:00 0 S
-Rule Belize 1982 only - Dec 18 0:00 1:00 D
-Rule Belize 1983 only - Feb 12 0:00 0 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 C%sT
+ -6:00 Belize %s
# Bermuda
@@ -3037,16 +3042,16 @@
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule DR 1966 only - Oct 30 0:00 1:00 D
-Rule DR 1967 only - Feb 28 0:00 0 S
-Rule DR 1969 1973 - Oct lastSun 0:00 0:30 HD
-Rule DR 1970 only - Feb 21 0:00 0 S
-Rule DR 1971 only - Jan 20 0:00 0 S
-Rule DR 1972 1974 - Jan 21 0:00 0 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 E%sT 1974 Oct 27
+ -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
@@ -3336,8 +3341,8 @@
# 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 - PMST 1987 # Pierre & Miquelon Time
- -3:00 Canada PM%sT
+ -3:00 - -03 1987
+ -3:00 Canada -03/-02
# St Vincent and the Grenadines
# See America/Port_of_Spain.
--- a/jdk/make/data/tzdata/southamerica Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/make/data/tzdata/southamerica Fri Mar 10 09:20:55 2017 -0800
@@ -29,15 +29,15 @@
# tz@iana.org for general use in the future). For more, please see
# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2014-10-31):
+# 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.
#
-# Gwillim Law writes that a good source
-# for recent time zone data is the International Air Transport
+# 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,
@@ -47,32 +47,10 @@
# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
# http://www.jstor.org/stable/1774359
#
-# Earlier editions of these tables used the North American style (e.g. ARST and
-# ARDT for Argentine Standard and Daylight Time), but the following quote
-# suggests that it's better to use European style (e.g. ART and ARST).
-# I suggest the use of _Summer time_ instead of the more cumbersome
-# _daylight-saving time_. _Summer time_ seems to be in general use
-# in Europe and South America.
-# -- E O Cutler, _New York Times_ (1937-02-14), quoted in
-# H L Mencken, _The American Language: Supplement I_ (1960), p 466
-#
-# Earlier editions of these tables also used the North American style
-# for time zones in Brazil, but this was incorrect, as Brazilians say
-# "summer time". Reinaldo Goulart, a São Paulo businessman active in
-# the railroad sector, writes (1999-07-06):
-# The subject of time zones is currently a matter of discussion/debate in
-# Brazil. Let's say that "the Brasília time" is considered the
-# "official time" because Brasília is the capital city.
-# The other three time zones are called "Brasília time "minus one" or
-# "plus one" or "plus two". As far as I know there is no such
-# name/designation as "Eastern Time" or "Central Time".
-# So I invented the following (English-language) abbreviations for now.
-# Corrections are welcome!
-# std dst
-# -2:00 FNT FNST Fernando de Noronha
-# -3:00 BRT BRST Brasília
-# -4:00 AMT AMST Amazon
-# -5:00 ACT ACST Acre
+# These tables use numeric abbreviations like -03 and -0330 for
+# integer hour and minute UTC offsets. Although earlier editions used
+# alphabetic time zone abbreviations, these abbreviations were
+# invented and did not reflect common practice.
###############################################################################
@@ -407,12 +385,6 @@
#
# 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...
-#
-# I'm enclosing a patch that does what I say... regretfully, the San Luis
-# timezone must be called "WART/WARST" even when most of the time (like,
-# right now) WARST == ART... that is, since last Sunday, all the country
-# is using UTC-3, but in my patch, San Luis calls it "WARST" and the rest
-# of the country calls it "ART".
# ...
# From Alexander Krivenyshev (2010-04-09):
@@ -451,11 +423,11 @@
# 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 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 Arg AR%sT
+ -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)
@@ -469,113 +441,113 @@
#
Zone America/Argentina/Cordoba -4:16:48 - LMT 1894 Oct 31
-4:16:48 - CMT 1920 May
- -4:00 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1991 Mar 3
- -4:00 - WART 1991 Oct 20
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 Arg AR%sT
+ -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 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1991 Mar 3
- -4:00 - WART 1991 Oct 20
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 Arg AR%sT 2008 Oct 18
- -3:00 - ART
+ -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 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1991 Mar 3
- -4:00 - WART 1991 Oct 20
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 - ART 2004 Jun 1
- -4:00 - WART 2004 Jun 13
- -3:00 Arg AR%sT
+ -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 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1991 Mar 1
- -4:00 - WART 1991 May 7
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 - ART 2004 Jun 1
- -4:00 - WART 2004 Jun 20
- -3:00 Arg AR%sT 2008 Oct 18
- -3:00 - ART
+ -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 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1991 Mar 1
- -4:00 - WART 1991 May 7
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 - ART 2004 May 31
- -4:00 - WART 2004 Jul 25
- -3:00 Arg AR%sT 2008 Oct 18
- -3:00 - ART
+ -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 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1990 Mar 4
- -4:00 - WART 1990 Oct 28
- -4:00 1:00 WARST 1991 Mar 17
- -4:00 - WART 1991 Oct 6
- -3:00 1:00 ARST 1992
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 Arg AR%sT 2008 Oct 18
- -3:00 - ART
+ -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 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1991 Mar 3
- -4:00 - WART 1991 Oct 20
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 - ART 2004 Jun 1
- -4:00 - WART 2004 Jun 20
- -3:00 Arg AR%sT 2008 Oct 18
- -3:00 - ART
+ -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 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1990 Mar 4
- -4:00 - WART 1990 Oct 15
- -4:00 1:00 WARST 1991 Mar 1
- -4:00 - WART 1991 Oct 15
- -4:00 1:00 WARST 1992 Mar 1
- -4:00 - WART 1992 Oct 18
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 - ART 2004 May 23
- -4:00 - WART 2004 Sep 26
- -3:00 Arg AR%sT 2008 Oct 18
- -3:00 - ART
+ -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)
@@ -584,44 +556,44 @@
Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31
-4:16:48 - CMT 1920 May
- -4:00 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1990
- -3:00 1:00 ARST 1990 Mar 14
- -4:00 - WART 1990 Oct 15
- -4:00 1:00 WARST 1991 Mar 1
- -4:00 - WART 1991 Jun 1
- -3:00 - ART 1999 Oct 3
- -4:00 1:00 WARST 2000 Mar 3
- -3:00 - ART 2004 May 31
- -4:00 - WART 2004 Jul 25
- -3:00 Arg AR%sT 2008 Jan 21
- -4:00 SanLuis WAR%sT 2009 Oct 11
- -3:00 - ART
+ -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 # Córdoba Mean Time
- -4:00 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 - ART 2004 Jun 1
- -4:00 - WART 2004 Jun 20
- -3:00 Arg AR%sT 2008 Oct 18
- -3:00 - ART
+ -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 # Córdoba Mean Time
- -4:00 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 - ART 2004 May 30
- -4:00 - WART 2004 Jun 20
- -3:00 Arg AR%sT 2008 Oct 18
- -3:00 - ART
+ -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
@@ -631,7 +603,7 @@
Zone America/La_Paz -4:32:36 - LMT 1890
-4:32:36 - CMT 1931 Oct 15 # Calamarca MT
-4:32:36 1:00 BOST 1932 Mar 21 # Bolivia ST
- -4:00 - BOT # Bolivia Time
+ -4:00 - -04
# Brazil
@@ -983,12 +955,12 @@
#
# Fernando de Noronha (administratively part of PE)
Zone America/Noronha -2:09:40 - LMT 1914
- -2:00 Brazil FN%sT 1990 Sep 17
- -2:00 - FNT 1999 Sep 30
- -2:00 Brazil FN%sT 2000 Oct 15
- -2:00 - FNT 2001 Sep 13
- -2:00 Brazil FN%sT 2002 Oct 1
- -2:00 - FNT
+ -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).
@@ -1001,119 +973,119 @@
# 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 BR%sT 1988 Sep 12
- -3:00 - BRT
+ -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 AM%sT 1988 Sep 12
- -4:00 - AMT 2008 Jun 24 0:00
- -3:00 - BRT
+ -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 BR%sT 1990 Sep 17
- -3:00 - BRT 1999 Sep 30
- -3:00 Brazil BR%sT 2000 Oct 22
- -3:00 - BRT 2001 Sep 13
- -3:00 Brazil BR%sT 2002 Oct 1
- -3:00 - BRT
+ -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 BR%sT 1990 Sep 17
- -3:00 - BRT 1999 Sep 30
- -3:00 Brazil BR%sT 2000 Oct 15
- -3:00 - BRT 2001 Sep 13
- -3:00 Brazil BR%sT 2002 Oct 1
- -3:00 - BRT
+ -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 BR%sT 1990 Sep 17
- -3:00 - BRT 1995 Sep 14
- -3:00 Brazil BR%sT 2003 Sep 24
- -3:00 - BRT 2012 Oct 21
- -3:00 Brazil BR%sT 2013 Sep
- -3:00 - BRT
+ -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 BR%sT 1990 Sep 17
- -3:00 - BRT 1995 Oct 13
- -3:00 Brazil BR%sT 1996 Sep 4
- -3:00 - BRT 1999 Sep 30
- -3:00 Brazil BR%sT 2000 Oct 22
- -3:00 - BRT 2001 Sep 13
- -3:00 Brazil BR%sT 2002 Oct 1
- -3:00 - BRT
+ -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 BR%sT 2003 Sep 24
- -3:00 - BRT 2011 Oct 16
- -3:00 Brazil BR%sT 2012 Oct 21
- -3:00 - BRT
+ -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 BR%sT 1963 Oct 23 0:00
- -3:00 1:00 BRST 1964
- -3:00 Brazil BR%sT
+ -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 AM%sT
+ -4:00 Brazil -04/-03
#
# Mato Grosso (MT)
Zone America/Cuiaba -3:44:20 - LMT 1914
- -4:00 Brazil AM%sT 2003 Sep 24
- -4:00 - AMT 2004 Oct 1
- -4:00 Brazil AM%sT
+ -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 AM%sT 1988 Sep 12
- -4:00 - AMT
+ -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 AM%sT 1988 Sep 12
- -4:00 - AMT 1999 Sep 30
- -4:00 Brazil AM%sT 2000 Oct 15
- -4:00 - AMT
+ -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 AM%sT 1988 Sep 12
- -4:00 - AMT 1993 Sep 28
- -4:00 Brazil AM%sT 1994 Sep 22
- -4:00 - AMT
+ -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 AC%sT 1988 Sep 12
- -5:00 - ACT 1993 Sep 28
- -5:00 Brazil AC%sT 1994 Sep 22
- -5:00 - ACT 2008 Jun 24 0:00
- -4:00 - AMT 2013 Nov 10
- -5:00 - ACT
+ -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 AC%sT 1988 Sep 12
- -5:00 - ACT 2008 Jun 24 0:00
- -4:00 - AMT 2013 Nov 10
- -5:00 - ACT
+ -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
@@ -1258,6 +1230,18 @@
# 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.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Chile 1927 1931 - Sep 1 0:00 1:00 S
Rule Chile 1928 1932 - Apr 1 0:00 0 -
@@ -1298,22 +1282,35 @@
# 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 - CLT 1916 Jul 1 # Chile Time
+ -5:00 - -05 1916 Jul 1
-4:42:46 - SMT 1918 Sep 10
- -4:00 - CLT 1919 Jul 1
+ -4:00 - -04 1919 Jul 1
-4:42:46 - SMT 1927 Sep 1
- -5:00 Chile CL%sT 1932 Sep 1
- -4:00 - CLT 1942 Jun 1
- -5:00 - CLT 1942 Aug 1
- -4:00 - CLT 1946 Jul 15
- -4:00 1:00 CLST 1946 Sep 1 # central Chile
- -4:00 - CLT 1947 Apr 1
- -5:00 - CLT 1947 May 21 23:00
- -4:00 Chile CL%sT
+ -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 EAS%sT 1982 Mar 14 3:00u # Easter Time
- -6:00 Chile EAS%sT
+ -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,
@@ -1333,9 +1330,10 @@
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Palmer 0 - -00 1965
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1982 May
- -4:00 Chile CL%sT
+ -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
@@ -1348,7 +1346,7 @@
# 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 CO%sT # Colombia Time
+ -5:00 CO -05/-04
# Malpelo, Providencia, San Andres
# no information; probably like America/Bogota
@@ -1372,7 +1370,7 @@
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Curacao -4:35:47 - LMT 1912 Feb 12 # Willemstad
- -4:30 - ANT 1965 # Netherlands Antilles Time
+ -4:30 - -0430 1965
-4:00 - AST
# From Arthur David Olson (2011-06-15):
@@ -1387,19 +1385,32 @@
#
# Milne says the Central and South American Telegraph Company used -5:24:15.
#
-# From Paul Eggert (2007-03-04):
-# Apparently Ecuador had a failed experiment with DST in 1992.
-# <http://midena.gov.ec/content/view/1261/208/> (2007-02-27) and
-# <http://www.hoy.com.ec/NoticiaNue.asp?row_id=249856> (2006-11-06) both
-# talk about "hora Sixto". Leave this alone for now, as we have no data.
+# From Alois Treindl (2016-12-15):
+# http://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):
+# http://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 S
+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 - ECT # Ecuador Time
+ -5:00 Ecuador -05/-04
Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
- -5:00 - ECT 1986
- -6:00 - GALT # Galápagos Time
+ -5:00 - -05 1986
+ -6:00 Ecuador -06/-05
# Falklands
@@ -1499,25 +1510,24 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/Stanley -3:51:24 - LMT 1890
-3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
- -4:00 Falk FK%sT 1983 May # Falkland Is Time
- -3:00 Falk FK%sT 1985 Sep 15
- -4:00 Falk FK%sT 2010 Sep 5 2:00
- -3:00 - FKST
+ -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 - GFT 1967 Oct # French Guiana Time
- -3:00 - GFT
+ -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 - GBGT 1966 May 26 # Br Guiana Time
- -3:45 - GYT 1975 Jul 31 # Guyana Time
- -3:00 - GYT 1991
+ -3:45 - -0345 1975 Jul 31
+ -3:00 - -03 1991
# IATA SSIM (1996-06) says -4:00. Assume a 1991 switch.
- -4:00 - GYT
+ -4:00 - -04
# Paraguay
#
@@ -1609,9 +1619,9 @@
# 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 - PYT 1972 Oct # Paraguay Time
- -3:00 - PYT 1974 Apr
- -4:00 Para PY%sT
+ -4:00 - -04 1972 Oct
+ -3:00 - -03 1974 Apr
+ -4:00 Para -04/-03
# Peru
#
@@ -1638,12 +1648,12 @@
# 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 PE%sT # Peru 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 - GST # South Georgia Time
+ -2:00 - -02
# South Sandwich Is
# uninhabited; scientific personnel have wintered
@@ -1653,9 +1663,8 @@
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 - NEGT 1975 Nov 20 # Dutch Guiana Time
- -3:30 - SRT 1984 Oct # Suriname Time
- -3:00 - SRT
+ -3:30 - -0330 1984 Oct
+ -3:00 - -03
# Trinidad and Tobago
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1758,11 +1767,16 @@
# [dated 2015-06-29; repeals Decree 311/006 dated 2006-09-04]
Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 S
Rule Uruguay 2007 2015 - Mar Sun>=8 2:00 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+
+# This Zone can be simplified once we assume zic %z.
Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28
-3:44:44 - MMT 1920 May 1 # Montevideo MT
- -3:30 Uruguay UY%sT 1942 Dec 14 # Uruguay Time
- -3:00 Uruguay UY%sT
+ -3:30 Uruguay -0330/-03 1942 Dec 14
+ -3:00 Uruguay -03/-02 1968
+ -3:00 Uruguay -03/-0230 1971
+ -3:00 Uruguay -03/-02 1974
+ -3:00 Uruguay -03/-0230 1974 Dec 22
+ -3:00 Uruguay -03/-02
# Venezuela
#
@@ -1796,7 +1810,7 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Caracas -4:27:44 - LMT 1890
-4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time?
- -4:30 - VET 1965 Jan 1 0:00 # Venezuela T.
- -4:00 - VET 2007 Dec 9 3:00
- -4:30 - VET 2016 May 1 2:30
- -4:00 - VET
+ -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/jdk/make/data/tzdata/zone.tab Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/make/data/tzdata/zone.tab Fri Mar 10 09:20:55 2017 -0800
@@ -165,6 +165,7 @@
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
@@ -420,7 +421,6 @@
UA +4837+02218 Europe/Uzhgorod Ruthenia
UA +4750+03510 Europe/Zaporozhye Zaporozh'ye/Zaporizhia; Lugansk/Luhansk (east)
UG +0019+03225 Africa/Kampala
-UM +1645-16931 Pacific/Johnston Johnston Atoll
UM +2813-17722 Pacific/Midway Midway Islands
UM +1917+16637 Pacific/Wake Wake Island
US +404251-0740023 America/New_York Eastern (most areas)
--- a/jdk/make/src/classes/build/tools/taglet/Incubating.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/make/src/classes/build/tools/taglet/Incubating.java Fri Mar 10 09:20:55 2017 -0800
@@ -29,8 +29,8 @@
import java.util.List;
import java.util.Set;
import com.sun.source.doctree.DocTree;
-import jdk.javadoc.doclet.taglet.Taglet;
-import static jdk.javadoc.doclet.taglet.Taglet.Location.*;
+import jdk.javadoc.doclet.Taglet;
+import static jdk.javadoc.doclet.Taglet.Location.*;
/**
* An inline tag to conveniently insert a standard Incubating warning. For
@@ -59,11 +59,6 @@
+ " Will be removed in a future release.</b>";
@Override
- public String toString(DocTree tag) {
- return MESSAGE;
- }
-
- @Override
public String toString(List<? extends DocTree> tags) {
return MESSAGE;
}
--- a/jdk/src/java.base/macosx/native/libjava/java_props_macosx.c Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/java.base/macosx/native/libjava/java_props_macosx.c Fri Mar 10 09:20:55 2017 -0800
@@ -46,6 +46,8 @@
#define LOCALEIDLENGTH 128
char *getMacOSXLocale(int cat) {
+ const char* retVal = NULL;
+
switch (cat) {
case LC_MESSAGES:
{
@@ -72,41 +74,7 @@
}
CFRelease(languages);
- // Language IDs use the language designators and (optional) region
- // and script designators of BCP 47. So possible formats are:
- //
- // "en" (language designator only)
- // "haw" (3-letter lanuage designator)
- // "en-GB" (language with alpha-2 region designator)
- // "es-419" (language with 3-digit UN M.49 area code)
- // "zh-Hans" (language with ISO 15924 script designator)
- // "zh-Hans-US" (language with ISO 15924 script designator and region)
- // "zh-Hans-419" (language with ISO 15924 script designator and UN M.49)
- //
- // In the case of region designators (alpha-2 and/or UN M.49), we convert
- // to our locale string format by changing '-' to '_'. That is, if
- // the '-' is followed by fewer than 4 chars.
- char* scriptOrRegion = strchr(languageString, '-');
- if (scriptOrRegion != NULL) {
- int length = strlen(scriptOrRegion);
- if (length > 5) {
- // Region and script both exist. Honor the script for now
- scriptOrRegion[5] = '\0';
- } else if (length < 5) {
- *scriptOrRegion = '_';
-
- assert((length == 3 &&
- // '-' followed by a 2 character region designator
- isalpha(scriptOrRegion[1]) &&
- isalpha(scriptOrRegion[2])) ||
- (length == 4 &&
- // '-' followed by a 3-digit UN M.49 area code
- isdigit(scriptOrRegion[1]) &&
- isdigit(scriptOrRegion[2]) &&
- isdigit(scriptOrRegion[3])));
- }
- }
- const char* retVal = languageString;
+ retVal = languageString;
// Special case for Portuguese in Brazil:
// The language code needs the "_BR" region code (to distinguish it
@@ -120,20 +88,58 @@
strcmp(localeString, "pt_BR") == 0) {
retVal = localeString;
}
- return strdup(retVal);
}
break;
default:
{
char localeString[LOCALEIDLENGTH];
- if (CFStringGetCString(CFLocaleGetIdentifier(CFLocaleCopyCurrent()),
- localeString, LOCALEIDLENGTH, CFStringGetSystemEncoding())) {
- return strdup(localeString);
+ if (!CFStringGetCString(CFLocaleGetIdentifier(CFLocaleCopyCurrent()),
+ localeString, LOCALEIDLENGTH, CFStringGetSystemEncoding())) {
+ return NULL;
}
+ retVal = localeString;
}
break;
}
+ if (retVal != NULL) {
+ // Language IDs use the language designators and (optional) region
+ // and script designators of BCP 47. So possible formats are:
+ //
+ // "en" (language designator only)
+ // "haw" (3-letter lanuage designator)
+ // "en-GB" (language with alpha-2 region designator)
+ // "es-419" (language with 3-digit UN M.49 area code)
+ // "zh-Hans" (language with ISO 15924 script designator)
+ // "zh-Hans-US" (language with ISO 15924 script designator and region)
+ // "zh-Hans-419" (language with ISO 15924 script designator and UN M.49)
+ //
+ // In the case of region designators (alpha-2 and/or UN M.49), we convert
+ // to our locale string format by changing '-' to '_'. That is, if
+ // the '-' is followed by fewer than 4 chars.
+ char* scriptOrRegion = strchr(retVal, '-');
+ if (scriptOrRegion != NULL) {
+ int length = strlen(scriptOrRegion);
+ if (length > 5) {
+ // Region and script both exist. Honor the script for now
+ scriptOrRegion[5] = '\0';
+ } else if (length < 5) {
+ *scriptOrRegion = '_';
+
+ assert((length == 3 &&
+ // '-' followed by a 2 character region designator
+ isalpha(scriptOrRegion[1]) &&
+ isalpha(scriptOrRegion[2])) ||
+ (length == 4 &&
+ // '-' followed by a 3-digit UN M.49 area code
+ isdigit(scriptOrRegion[1]) &&
+ isdigit(scriptOrRegion[2]) &&
+ isdigit(scriptOrRegion[3])));
+ }
+ }
+
+ return strdup(retVal);
+ }
return NULL;
}
--- a/jdk/src/java.base/share/classes/java/lang/ref/FinalReference.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/ref/FinalReference.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 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
@@ -33,4 +33,9 @@
public FinalReference(T referent, ReferenceQueue<? super T> q) {
super(referent, q);
}
+
+ @Override
+ public boolean enqueue() {
+ throw new InternalError("should never reach here");
+ }
}
--- a/jdk/src/java.base/share/classes/java/lang/ref/Reference.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/ref/Reference.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 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
@@ -140,15 +140,24 @@
}
}
- /* Atomically get and clear (set to null) the VM's pending list.
+ /*
+ * system property to disable clearing before enqueuing.
+ */
+ private static final boolean disableClearBeforeEnqueue
+ = Boolean.getBoolean("jdk.lang.ref.disableClearBeforeEnqueue");
+
+ /*
+ * Atomically get and clear (set to null) the VM's pending list.
*/
private static native Reference<Object> getAndClearReferencePendingList();
- /* Test whether the VM's pending list contains any entries.
+ /*
+ * Test whether the VM's pending list contains any entries.
*/
private static native boolean hasReferencePendingList();
- /* Wait until the VM's pending list may be non-null.
+ /*
+ * Wait until the VM's pending list may be non-null.
*/
private static native void waitForReferencePendingList();
@@ -261,7 +270,6 @@
this.referent = null;
}
-
/* -- Queue operations -- */
/**
@@ -278,8 +286,8 @@
}
/**
- * Adds this reference object to the queue with which it is registered,
- * if any.
+ * Clears this reference object and adds it to the queue with which
+ * it is registered, if any.
*
* <p> This method is invoked only by Java code; when the garbage collector
* enqueues references it does so directly, without invoking this method.
@@ -289,10 +297,11 @@
* it was not registered with a queue when it was created
*/
public boolean enqueue() {
+ if (!disableClearBeforeEnqueue)
+ this.referent = null;
return this.queue.enqueue(this);
}
-
/* -- Constructors -- */
Reference(T referent) {
@@ -419,5 +428,4 @@
// HotSpot needs to retain the ref and not GC it before a call to this
// method
}
-
}
--- a/jdk/src/java.base/share/classes/java/net/NetworkInterface.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/java.base/share/classes/java/net/NetworkInterface.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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
@@ -175,14 +175,16 @@
*/
public java.util.List<InterfaceAddress> getInterfaceAddresses() {
java.util.List<InterfaceAddress> lst = new java.util.ArrayList<>(1);
- SecurityManager sec = System.getSecurityManager();
- for (int j=0; j<bindings.length; j++) {
- try {
- if (sec != null) {
- sec.checkConnect(bindings[j].getAddress().getHostAddress(), -1);
- }
- lst.add(bindings[j]);
- } catch (SecurityException e) { }
+ if (bindings != null) {
+ SecurityManager sec = System.getSecurityManager();
+ for (int j=0; j<bindings.length; j++) {
+ try {
+ if (sec != null) {
+ sec.checkConnect(bindings[j].getAddress().getHostAddress(), -1);
+ }
+ lst.add(bindings[j]);
+ } catch (SecurityException e) { }
+ }
}
return lst;
}
--- a/jdk/src/java.base/share/classes/java/util/concurrent/Flow.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/Flow.java Fri Mar 10 09:20:55 2017 -0800
@@ -271,11 +271,11 @@
/**
* Adds the given number {@code n} of items to the current
* unfulfilled demand for this subscription. If {@code n} is
- * negative, the Subscriber will receive an {@code onError}
- * signal with an {@link IllegalArgumentException} argument.
- * Otherwise, the Subscriber will receive up to {@code n}
- * additional {@code onNext} invocations (or fewer if
- * terminated).
+ * less than or equal to zero, the Subscriber will receive an
+ * {@code onError} signal with an {@link
+ * IllegalArgumentException} argument. Otherwise, the
+ * Subscriber will receive up to {@code n} additional {@code
+ * onNext} invocations (or fewer if terminated).
*
* @param n the increment of demand; a value of {@code
* Long.MAX_VALUE} may be considered as effectively unbounded
--- a/jdk/src/java.base/share/classes/java/util/concurrent/SubmissionPublisher.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/SubmissionPublisher.java Fri Mar 10 09:20:55 2017 -0800
@@ -588,6 +588,7 @@
if (!closed) {
BufferedSubscription<T> b;
synchronized (this) {
+ // no need to re-check closed here
b = clients;
clients = null;
closed = true;
@@ -619,9 +620,11 @@
BufferedSubscription<T> b;
synchronized (this) {
b = clients;
- clients = null;
- closed = true;
- closedException = error;
+ if (!closed) { // don't clobber racing close
+ clients = null;
+ closedException = error;
+ closed = true;
+ }
}
while (b != null) {
BufferedSubscription<T> next = b.next;
@@ -1362,9 +1365,9 @@
}
}
}
- else if (n < 0L)
+ else
onError(new IllegalArgumentException(
- "negative subscription request"));
+ "non-positive subscription request"));
}
public final boolean isReleasable() { // for ManagedBlocker
--- a/jdk/src/java.base/share/classes/java/util/regex/Pattern.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/java.base/share/classes/java/util/regex/Pattern.java Fri Mar 10 09:20:55 2017 -0800
@@ -3867,8 +3867,10 @@
return next.match(matcher, i + 1, seq);
if (ch == 0x0D) {
i++;
- if (i < matcher.to && seq.charAt(i) == 0x0A)
- i++;
+ if (i < matcher.to && seq.charAt(i) == 0x0A &&
+ next.match(matcher, i + 1, seq)) {
+ return true;
+ }
return next.match(matcher, i, seq);
}
} else {
--- a/jdk/src/java.base/share/classes/sun/security/pkcs10/PKCS10.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/java.base/share/classes/sun/security/pkcs10/PKCS10.java Fri Mar 10 09:20:55 2017 -0800
@@ -167,7 +167,8 @@
// key and signature algorithm we found.
//
try {
- sig = Signature.getInstance(id.getName());
+ sigAlg = id.getName();
+ sig = Signature.getInstance(sigAlg);
sig.initVerify(subjectPublicKeyInfo);
sig.update(data);
if (!sig.verify(sigData))
@@ -218,6 +219,7 @@
signature.update(certificateRequestInfo, 0,
certificateRequestInfo.length);
sig = signature.sign();
+ sigAlg = signature.getAlgorithm();
/*
* Build guts of SIGNED macro
@@ -251,6 +253,11 @@
{ return subjectPublicKeyInfo; }
/**
+ * Returns the signature algorithm.
+ */
+ public String getSigAlg() { return sigAlg; }
+
+ /**
* Returns the additional attributes requested.
*/
public PKCS10Attributes getAttributes()
@@ -348,6 +355,7 @@
private X500Name subject;
private PublicKey subjectPublicKeyInfo;
+ private String sigAlg;
private PKCS10Attributes attributeSet;
private byte[] encoded; // signed
}
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/BasicChecker.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/java.base/share/classes/sun/security/provider/certpath/BasicChecker.java Fri Mar 10 09:20:55 2017 -0800
@@ -51,7 +51,7 @@
/**
* BasicChecker is a PKIXCertPathChecker that checks the basic information
- * on a PKIX certificate, namely the signature, timestamp, and subject/issuer
+ * on a PKIX certificate, namely the signature, validity, and subject/issuer
* name chaining.
*
* @since 1.4
@@ -125,7 +125,7 @@
}
/**
- * Performs the signature, timestamp, and subject/issuer name chaining
+ * Performs the signature, validity, and subject/issuer name chaining
* checks on the certificate using its internal state. This method does
* not remove any critical extensions from the Collection.
*
@@ -141,7 +141,7 @@
X509Certificate currCert = (X509Certificate)cert;
if (!sigOnly) {
- verifyTimestamp(currCert);
+ verifyValidity(currCert);
verifyNameChaining(currCert);
}
verifySignature(currCert);
@@ -177,12 +177,12 @@
}
/**
- * Internal method to verify the timestamp on a certificate
+ * Internal method to verify the validity on a certificate
*/
- private void verifyTimestamp(X509Certificate cert)
+ private void verifyValidity(X509Certificate cert)
throws CertPathValidatorException
{
- String msg = "timestamp";
+ String msg = "validity";
if (debug != null)
debug.println("---checking " + msg + ":" + date.toString() + "...");
--- a/jdk/src/java.base/share/classes/sun/security/tools/keytool/Main.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/java.base/share/classes/sun/security/tools/keytool/Main.java Fri Mar 10 09:20:55 2017 -0800
@@ -27,6 +27,7 @@
import java.io.*;
import java.security.CodeSigner;
+import java.security.CryptoPrimitive;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.MessageDigest;
@@ -156,6 +157,7 @@
private boolean protectedPath = false;
private boolean srcprotectedPath = false;
private boolean cacerts = false;
+ private boolean nowarn = false;
private CertificateFactory cf = null;
private KeyStore caks = null; // "cacerts" keystore
private char[] srcstorePass = null;
@@ -166,6 +168,16 @@
private List<String> ids = new ArrayList<>(); // used in GENCRL
private List<String> v3ext = new ArrayList<>();
+ // Warnings on weak algorithms
+ private List<String> weakWarnings = new ArrayList<>();
+
+ private static final DisabledAlgorithmConstraints DISABLED_CHECK =
+ new DisabledAlgorithmConstraints(
+ DisabledAlgorithmConstraints.PROPERTY_CERTPATH_DISABLED_ALGS);
+
+ private static final Set<CryptoPrimitive> SIG_PRIMITIVE_SET = Collections
+ .unmodifiableSet(EnumSet.of(CryptoPrimitive.SIGNATURE));
+
enum Command {
CERTREQ("Generates.a.certificate.request",
ALIAS, SIGALG, FILEOUT, KEYPASS, KEYSTORE, DNAME,
@@ -351,7 +363,7 @@
private static final String NONE = "NONE";
private static final String P11KEYSTORE = "PKCS11";
private static final String P12KEYSTORE = "PKCS12";
- private final String keyAlias = "mykey";
+ private static final String keyAlias = "mykey";
// for i18n
private static final java.util.ResourceBundle rb =
@@ -387,6 +399,7 @@
throw e;
}
} finally {
+ printWeakWarnings(false);
for (char[] pass : passwords) {
if (pass != null) {
Arrays.fill(pass, ' ');
@@ -476,6 +489,8 @@
help = true;
} else if (collator.compare(flags, "-conf") == 0) {
i++;
+ } else if (collator.compare(flags, "-nowarn") == 0) {
+ nowarn = true;
} else if (collator.compare(flags, "-keystore") == 0) {
ksfname = args[++i];
if (new File(ksfname).getCanonicalPath().equals(
@@ -1152,11 +1167,11 @@
} else if (command == LIST) {
if (storePass == null
&& !KeyStoreUtil.isWindowsKeyStore(storetype)) {
- printWarning();
+ printNoIntegrityWarning();
}
if (alias != null) {
- doPrintEntry(alias, out);
+ doPrintEntry(rb.getString("the.certificate"), alias, out);
} else {
doPrintEntries(out);
}
@@ -1253,6 +1268,12 @@
throws Exception {
+ if (keyStore.containsAlias(alias) == false) {
+ MessageFormat form = new MessageFormat
+ (rb.getString("Alias.alias.does.not.exist"));
+ Object[] source = {alias};
+ throw new Exception(form.format(source));
+ }
Certificate signerCert = keyStore.getCertificate(alias);
byte[] encoded = signerCert.getEncoded();
X509CertImpl signerCertImpl = new X509CertImpl(encoded);
@@ -1306,6 +1327,8 @@
byte[] rawReq = Pem.decode(new String(sb));
PKCS10 req = new PKCS10(rawReq);
+ checkWeak(rb.getString("the.certificate.request"), req);
+
info.set(X509CertInfo.KEY, new CertificateX509Key(req.getSubjectPublicKeyInfo()));
info.set(X509CertInfo.SUBJECT,
dname==null?req.getSubjectName():new X500Name(dname));
@@ -1335,6 +1358,9 @@
}
}
}
+
+ checkWeak(rb.getString("the.issuer"), keyStore.getCertificateChain(alias));
+ checkWeak(rb.getString("the.generated.certificate"), cert);
}
private void doGenCRL(PrintStream out)
@@ -1385,6 +1411,7 @@
} else {
out.write(crl.getEncodedInternal());
}
+ checkWeak(rb.getString("the.generated.crl"), crl, privateKey);
}
/**
@@ -1431,6 +1458,8 @@
// Sign the request and base-64 encode it
request.encodeAndSign(subject, signature);
request.print(out);
+
+ checkWeak(rb.getString("the.generated.certificate.request"), request);
}
/**
@@ -1454,7 +1483,7 @@
{
if (storePass == null
&& !KeyStoreUtil.isWindowsKeyStore(storetype)) {
- printWarning();
+ printNoIntegrityWarning();
}
if (alias == null) {
alias = keyAlias;
@@ -1474,6 +1503,7 @@
throw new Exception(form.format(source));
}
dumpCert(cert, out);
+ checkWeak(rb.getString("the.certificate"), cert);
}
/**
@@ -1729,6 +1759,8 @@
keyPass = promptForKeyPass(alias, null, storePass);
}
keyStore.setKeyEntry(alias, privKey, keyPass, chain);
+
+ checkWeak(rb.getString("the.generated.certificate"), chain[0]);
}
/**
@@ -1810,7 +1842,7 @@
/**
* Prints a single keystore entry.
*/
- private void doPrintEntry(String alias, PrintStream out)
+ private void doPrintEntry(String label, String alias, PrintStream out)
throws Exception
{
if (keyStore.containsAlias(alias) == false) {
@@ -1881,12 +1913,14 @@
} else {
dumpCert(chain[i], out);
}
+ checkWeak(label, chain[i]);
}
} else {
// Print the digest of the user cert only
out.println
(rb.getString("Certificate.fingerprint.SHA.256.") +
getCertFingerPrint("SHA-256", chain[0]));
+ checkWeak(label, chain);
}
}
} else if (keyStore.entryInstanceOf(alias,
@@ -1909,6 +1943,7 @@
out.println(rb.getString("Certificate.fingerprint.SHA.256.")
+ getCertFingerPrint("SHA-256", cert));
}
+ checkWeak(label, cert);
} else {
out.println(rb.getString("Unknown.Entry.Type"));
}
@@ -1992,7 +2027,7 @@
if (srcstorePass == null
&& !KeyStoreUtil.isWindowsKeyStore(srcstoretype)) {
- // anti refactoring, copied from printWarning(),
+ // anti refactoring, copied from printNoIntegrityWarning(),
// but change 2 lines
System.err.println();
System.err.println(rb.getString
@@ -2092,6 +2127,10 @@
"The.destination.pkcs12.keystore.has.different.storepass.and.keypass.Please.retry.with.destkeypass.specified."));
}
}
+ Certificate c = srckeystore.getCertificate(alias);
+ if (c != null) {
+ checkWeak("<" + newAlias + ">", c);
+ }
return 1;
} catch (KeyStoreException kse) {
Object[] source2 = {alias, kse.toString()};
@@ -2154,7 +2193,7 @@
for (Enumeration<String> e = keyStore.aliases();
e.hasMoreElements(); ) {
String alias = e.nextElement();
- doPrintEntry(alias, out);
+ doPrintEntry("<" + alias + ">", alias, out);
if (verbose || rfc) {
out.println(rb.getString("NEWLINE"));
out.println(rb.getString
@@ -2300,19 +2339,28 @@
for (CRL crl: loadCRLs(src)) {
printCRL(crl, out);
String issuer = null;
+ Certificate signer = null;
if (caks != null) {
issuer = verifyCRL(caks, crl);
if (issuer != null) {
+ signer = caks.getCertificate(issuer);
out.printf(rb.getString(
- "verified.by.s.in.s"), issuer, "cacerts");
+ "verified.by.s.in.s.weak"),
+ issuer,
+ "cacerts",
+ withWeak(signer.getPublicKey()));
out.println();
}
}
if (issuer == null && keyStore != null) {
issuer = verifyCRL(keyStore, crl);
if (issuer != null) {
+ signer = keyStore.getCertificate(issuer);
out.printf(rb.getString(
- "verified.by.s.in.s"), issuer, "keystore");
+ "verified.by.s.in.s.weak"),
+ issuer,
+ "keystore",
+ withWeak(signer.getPublicKey()));
out.println();
}
}
@@ -2324,18 +2372,26 @@
out.println(rb.getString
("STARNN"));
}
+ checkWeak(rb.getString("the.crl"), crl, signer == null ? null : signer.getPublicKey());
}
}
private void printCRL(CRL crl, PrintStream out)
throws Exception {
+ X509CRL xcrl = (X509CRL)crl;
if (rfc) {
- X509CRL xcrl = (X509CRL)crl;
out.println("-----BEGIN X509 CRL-----");
out.println(Base64.getMimeEncoder(64, CRLF).encodeToString(xcrl.getEncoded()));
out.println("-----END X509 CRL-----");
} else {
- out.println(crl.toString());
+ String s;
+ if (crl instanceof X509CRLImpl) {
+ X509CRLImpl x509crl = (X509CRLImpl) crl;
+ s = x509crl.toStringWithAlgName(withWeak("" + x509crl.getSigAlgId()));
+ } else {
+ s = crl.toString();
+ }
+ out.println(s);
}
}
@@ -2362,8 +2418,11 @@
PKCS10 req = new PKCS10(Pem.decode(new String(sb)));
PublicKey pkey = req.getSubjectPublicKeyInfo();
- out.printf(rb.getString("PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key."),
- req.getSubjectName(), pkey.getFormat(), pkey.getAlgorithm());
+ out.printf(rb.getString("PKCS.10.with.weak"),
+ req.getSubjectName(),
+ pkey.getFormat(),
+ withWeak(pkey),
+ withWeak(req.getSigAlg()));
for (PKCS10Attribute attr: req.getAttributes().getAttributes()) {
ObjectIdentifier oid = attr.getAttributeId();
if (oid.equals(PKCS9Attribute.EXTENSION_REQUEST_OID)) {
@@ -2386,6 +2445,7 @@
if (debug) {
out.println(req); // Just to see more, say, public key length...
}
+ checkWeak(rb.getString("the.certificate.request"), req);
}
/**
@@ -2425,6 +2485,15 @@
if (i < (certs.length-1)) {
out.println();
}
+ checkWeak(oneInMany(rb.getString("the.certificate"), i, certs.length), x509Cert);
+ }
+ }
+
+ private static String oneInMany(String label, int i, int num) {
+ if (num == 1) {
+ return label;
+ } else {
+ return String.format(rb.getString("one.in.many"), label, i+1, num);
}
}
@@ -2458,7 +2527,11 @@
out.println();
out.println(rb.getString("Signature."));
out.println();
- for (Certificate cert: signer.getSignerCertPath().getCertificates()) {
+
+ List<? extends Certificate> certs
+ = signer.getSignerCertPath().getCertificates();
+ int cc = 0;
+ for (Certificate cert: certs) {
X509Certificate x = (X509Certificate)cert;
if (rfc) {
out.println(rb.getString("Certificate.owner.") + x.getSubjectDN() + "\n");
@@ -2467,12 +2540,15 @@
printX509Cert(x, out);
}
out.println();
+ checkWeak(oneInMany(rb.getString("the.certificate"), cc++, certs.size()), x);
}
Timestamp ts = signer.getTimestamp();
if (ts != null) {
out.println(rb.getString("Timestamp."));
out.println();
- for (Certificate cert: ts.getSignerCertPath().getCertificates()) {
+ certs = ts.getSignerCertPath().getCertificates();
+ cc = 0;
+ for (Certificate cert: certs) {
X509Certificate x = (X509Certificate)cert;
if (rfc) {
out.println(rb.getString("Certificate.owner.") + x.getSubjectDN() + "\n");
@@ -2481,6 +2557,7 @@
printX509Cert(x, out);
}
out.println();
+ checkWeak(oneInMany(rb.getString("the.tsa.certificate"), cc++, certs.size()), x);
}
}
}
@@ -2523,6 +2600,7 @@
printX509Cert((X509Certificate)cert, out);
out.println();
}
+ checkWeak(oneInMany(rb.getString("the.certificate"), i, chain.size()), cert);
} catch (Exception e) {
if (debug) {
e.printStackTrace();
@@ -2698,7 +2776,7 @@
}
// Now store the newly established chain in the keystore. The new
- // chain replaces the old one.
+ // chain replaces the old one. The chain can be null if user chooses no.
if (newChain != null) {
keyStore.setKeyEntry(alias, privKey,
(keyPass != null) ? keyPass : storePass,
@@ -2735,6 +2813,12 @@
throw new Exception(rb.getString("Input.not.an.X.509.certificate"));
}
+ if (noprompt) {
+ keyStore.setCertificateEntry(alias, cert);
+ checkWeak(rb.getString("the.input"), cert);
+ return true;
+ }
+
// if certificate is self-signed, make sure it verifies
boolean selfSigned = false;
if (KeyStoreUtil.isSelfSigned(cert)) {
@@ -2742,11 +2826,6 @@
selfSigned = true;
}
- if (noprompt) {
- keyStore.setCertificateEntry(alias, cert);
- return true;
- }
-
// check if cert already exists in keystore
String reply = null;
String trustalias = keyStore.getCertificateAlias(cert);
@@ -2755,6 +2834,8 @@
("Certificate.already.exists.in.keystore.under.alias.trustalias."));
Object[] source = {trustalias};
System.err.println(form.format(source));
+ checkWeak(rb.getString("the.input"), cert);
+ printWeakWarnings(true);
reply = getYesNoReply
(rb.getString("Do.you.still.want.to.add.it.no."));
} else if (selfSigned) {
@@ -2764,6 +2845,8 @@
("Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias."));
Object[] source = {trustalias};
System.err.println(form.format(source));
+ checkWeak(rb.getString("the.input"), cert);
+ printWeakWarnings(true);
reply = getYesNoReply
(rb.getString("Do.you.still.want.to.add.it.to.your.own.keystore.no."));
}
@@ -2771,6 +2854,8 @@
// Print the cert and ask user if they really want to add
// it to their keystore
printX509Cert(cert, System.out);
+ checkWeak(rb.getString("the.input"), cert);
+ printWeakWarnings(true);
reply = getYesNoReply
(rb.getString("Trust.this.certificate.no."));
}
@@ -2784,6 +2869,7 @@
}
}
+ // Not found in this keystore and not self-signed
// Try to establish trust chain
try {
Certificate[] chain = establishCertChain(null, cert);
@@ -2795,6 +2881,8 @@
// Print the cert and ask user if they really want to add it to
// their keystore
printX509Cert(cert, System.out);
+ checkWeak(rb.getString("the.input"), cert);
+ printWeakWarnings(true);
reply = getYesNoReply
(rb.getString("Trust.this.certificate.no."));
if ("YES".equals(reply)) {
@@ -2933,6 +3021,24 @@
return keyPass;
}
+ private String withWeak(String alg) {
+ if (DISABLED_CHECK.permits(SIG_PRIMITIVE_SET, alg, null)) {
+ return alg;
+ } else {
+ return String.format(rb.getString("with.weak"), alg);
+ }
+ }
+
+ private String withWeak(PublicKey key) {
+ if (DISABLED_CHECK.permits(SIG_PRIMITIVE_SET, key)) {
+ return String.format(rb.getString("key.bit"),
+ KeyUtil.getKeySize(key), key.getAlgorithm());
+ } else {
+ return String.format(rb.getString("key.bit.weak"),
+ KeyUtil.getKeySize(key), key.getAlgorithm());
+ }
+ }
+
/**
* Prints a certificate in a human readable format.
*/
@@ -2941,7 +3047,7 @@
{
MessageFormat form = new MessageFormat
- (rb.getString(".PATTERN.printX509Cert"));
+ (rb.getString(".PATTERN.printX509Cert.with.weak"));
PublicKey pkey = cert.getPublicKey();
Object[] source = {cert.getSubjectDN().toString(),
cert.getIssuerDN().toString(),
@@ -2950,10 +3056,9 @@
cert.getNotAfter().toString(),
getCertFingerPrint("SHA-1", cert),
getCertFingerPrint("SHA-256", cert),
- cert.getSigAlgName(),
- pkey.getAlgorithm(),
- KeyUtil.getKeySize(pkey),
- cert.getVersion(),
+ withWeak(cert.getSigAlgName()),
+ withWeak(pkey),
+ cert.getVersion()
};
out.println(form.format(source));
@@ -3003,12 +3108,12 @@
* @param ks the keystore to search with, not null
* @return <code>cert</code> itself if it's already inside <code>ks</code>,
* or a certificate inside <code>ks</code> who signs <code>cert</code>,
- * or null otherwise.
+ * or null otherwise. A label is added.
*/
- private static Certificate getTrustedSigner(Certificate cert, KeyStore ks)
- throws Exception {
+ private static Pair<String,Certificate>
+ getTrustedSigner(Certificate cert, KeyStore ks) throws Exception {
if (ks.getCertificateAlias(cert) != null) {
- return cert;
+ return new Pair<>("", cert);
}
for (Enumeration<String> aliases = ks.aliases();
aliases.hasMoreElements(); ) {
@@ -3017,7 +3122,7 @@
if (trustedCert != null) {
try {
cert.verify(trustedCert.getPublicKey());
- return trustedCert;
+ return new Pair<>(name, trustedCert);
} catch (Exception e) {
// Not verified, skip to the next one
}
@@ -3281,7 +3386,7 @@
/**
* Prints warning about missing integrity check.
*/
- private void printWarning() {
+ private void printNoIntegrityWarning() {
System.err.println();
System.err.println(rb.getString
(".WARNING.WARNING.WARNING."));
@@ -3306,6 +3411,9 @@
Certificate[] replyCerts)
throws Exception
{
+
+ checkWeak(rb.getString("reply"), replyCerts);
+
// order the certs in the reply (bottom-up).
// we know that all certs in the reply are of type X.509, because
// we parsed them using an X.509 certificate factory
@@ -3358,9 +3466,11 @@
// do we trust the cert at the top?
Certificate topCert = replyCerts[replyCerts.length-1];
- Certificate root = getTrustedSigner(topCert, keyStore);
+ boolean fromKeyStore = true;
+ Pair<String,Certificate> root = getTrustedSigner(topCert, keyStore);
if (root == null && trustcacerts && caks != null) {
root = getTrustedSigner(topCert, caks);
+ fromKeyStore = false;
}
if (root == null) {
System.err.println();
@@ -3369,33 +3479,42 @@
printX509Cert((X509Certificate)topCert, System.out);
System.err.println();
System.err.print(rb.getString(".is.not.trusted."));
+ printWeakWarnings(true);
String reply = getYesNoReply
(rb.getString("Install.reply.anyway.no."));
if ("NO".equals(reply)) {
return null;
}
} else {
- if (root != topCert) {
+ if (root.snd != topCert) {
// append the root CA cert to the chain
Certificate[] tmpCerts =
new Certificate[replyCerts.length+1];
System.arraycopy(replyCerts, 0, tmpCerts, 0,
replyCerts.length);
- tmpCerts[tmpCerts.length-1] = root;
+ tmpCerts[tmpCerts.length-1] = root.snd;
replyCerts = tmpCerts;
+ checkWeak(String.format(rb.getString(fromKeyStore ?
+ "alias.in.keystore" :
+ "alias.in.cacerts"),
+ root.fst),
+ root.snd);
}
}
-
return replyCerts;
}
/**
* Establishes a certificate chain (using trusted certificates in the
- * keystore), starting with the user certificate
+ * keystore and cacerts), starting with the reply (certToVerify)
* and ending at a self-signed certificate found in the keystore.
*
- * @param userCert the user certificate of the alias
- * @param certToVerify the single certificate provided in the reply
+ * @param userCert optional existing certificate, mostly likely be the
+ * original self-signed cert created by -genkeypair.
+ * It must have the same public key as certToVerify
+ * but cannot be the same cert.
+ * @param certToVerify the starting certificate to build the chain
+ * @returns the established chain, might be null if user decides not
*/
private Certificate[] establishCertChain(Certificate userCert,
Certificate certToVerify)
@@ -3423,30 +3542,37 @@
// Use the subject distinguished name as the key into the hash table.
// All certificates associated with the same subject distinguished
// name are stored in the same hash table entry as a vector.
- Hashtable<Principal, Vector<Certificate>> certs = null;
+ Hashtable<Principal, Vector<Pair<String,X509Certificate>>> certs = null;
if (keyStore.size() > 0) {
- certs = new Hashtable<Principal, Vector<Certificate>>(11);
+ certs = new Hashtable<>(11);
keystorecerts2Hashtable(keyStore, certs);
}
if (trustcacerts) {
if (caks!=null && caks.size()>0) {
if (certs == null) {
- certs = new Hashtable<Principal, Vector<Certificate>>(11);
+ certs = new Hashtable<>(11);
}
keystorecerts2Hashtable(caks, certs);
}
}
// start building chain
- Vector<Certificate> chain = new Vector<>(2);
- if (buildChain((X509Certificate)certToVerify, chain, certs)) {
- Certificate[] newChain = new Certificate[chain.size()];
+ Vector<Pair<String,X509Certificate>> chain = new Vector<>(2);
+ if (buildChain(
+ new Pair<>(rb.getString("the.input"),
+ (X509Certificate) certToVerify),
+ chain, certs)) {
+ for (Pair<String,X509Certificate> p : chain) {
+ checkWeak(p.fst, p.snd);
+ }
+ Certificate[] newChain =
+ new Certificate[chain.size()];
// buildChain() returns chain with self-signed root-cert first and
// user-cert last, so we need to invert the chain before we store
// it
int j=0;
for (int i=chain.size()-1; i>=0; i--) {
- newChain[j] = chain.elementAt(i);
+ newChain[j] = chain.elementAt(i).snd;
j++;
}
return newChain;
@@ -3457,7 +3583,17 @@
}
/**
- * Recursively tries to establish chain from pool of trusted certs.
+ * Recursively tries to establish chain from pool of certs starting from
+ * certToVerify until a self-signed cert is found, and fill the certs found
+ * into chain. Each cert in the chain signs the next one.
+ *
+ * This method is able to recover from an error, say, if certToVerify
+ * is signed by certA but certA has no issuer in certs and itself is not
+ * self-signed, the method can try another certB that also signs
+ * certToVerify and look for signer of certB, etc, etc.
+ *
+ * Each cert in chain comes with a label showing its origin. The label is
+ * used in the warning message when the cert is considered a risk.
*
* @param certToVerify the cert that needs to be verified.
* @param chain the chain that's being built.
@@ -3465,19 +3601,20 @@
*
* @return true if successful, false otherwise.
*/
- private boolean buildChain(X509Certificate certToVerify,
- Vector<Certificate> chain,
- Hashtable<Principal, Vector<Certificate>> certs) {
- Principal issuer = certToVerify.getIssuerDN();
- if (KeyStoreUtil.isSelfSigned(certToVerify)) {
+ private boolean buildChain(Pair<String,X509Certificate> certToVerify,
+ Vector<Pair<String,X509Certificate>> chain,
+ Hashtable<Principal, Vector<Pair<String,X509Certificate>>> certs) {
+ if (KeyStoreUtil.isSelfSigned(certToVerify.snd)) {
// reached self-signed root cert;
// no verification needed because it's trusted.
chain.addElement(certToVerify);
return true;
}
+ Principal issuer = certToVerify.snd.getIssuerDN();
+
// Get the issuer's certificate(s)
- Vector<Certificate> vec = certs.get(issuer);
+ Vector<Pair<String,X509Certificate>> vec = certs.get(issuer);
if (vec == null) {
return false;
}
@@ -3485,13 +3622,12 @@
// Try out each certificate in the vector, until we find one
// whose public key verifies the signature of the certificate
// in question.
- for (Enumeration<Certificate> issuerCerts = vec.elements();
- issuerCerts.hasMoreElements(); ) {
- X509Certificate issuerCert
- = (X509Certificate)issuerCerts.nextElement();
- PublicKey issuerPubKey = issuerCert.getPublicKey();
+ for (Enumeration<Pair<String,X509Certificate>> issuerCerts = vec.elements();
+ issuerCerts.hasMoreElements(); ) {
+ Pair<String,X509Certificate> issuerCert = issuerCerts.nextElement();
+ PublicKey issuerPubKey = issuerCert.snd.getPublicKey();
try {
- certToVerify.verify(issuerPubKey);
+ certToVerify.snd.verify(issuerPubKey);
} catch (Exception e) {
continue;
}
@@ -3541,10 +3677,11 @@
/**
* Stores the (leaf) certificates of a keystore in a hashtable.
* All certs belonging to the same CA are stored in a vector that
- * in turn is stored in the hashtable, keyed by the CA's subject DN
+ * in turn is stored in the hashtable, keyed by the CA's subject DN.
+ * Each cert comes with a string label that shows its origin and alias.
*/
private void keystorecerts2Hashtable(KeyStore ks,
- Hashtable<Principal, Vector<Certificate>> hash)
+ Hashtable<Principal, Vector<Pair<String,X509Certificate>>> hash)
throws Exception {
for (Enumeration<String> aliases = ks.aliases();
@@ -3553,13 +3690,20 @@
Certificate cert = ks.getCertificate(alias);
if (cert != null) {
Principal subjectDN = ((X509Certificate)cert).getSubjectDN();
- Vector<Certificate> vec = hash.get(subjectDN);
+ Pair<String,X509Certificate> pair = new Pair<>(
+ String.format(
+ rb.getString(ks == caks ?
+ "alias.in.cacerts" :
+ "alias.in.keystore"),
+ alias),
+ (X509Certificate)cert);
+ Vector<Pair<String,X509Certificate>> vec = hash.get(subjectDN);
if (vec == null) {
- vec = new Vector<Certificate>();
- vec.addElement(cert);
+ vec = new Vector<>();
+ vec.addElement(pair);
} else {
- if (!vec.contains(cert)) {
- vec.addElement(cert);
+ if (!vec.contains(pair)) {
+ vec.addElement(pair);
}
}
hash.put(subjectDN, vec);
@@ -4157,6 +4301,67 @@
return result;
}
+ private void checkWeak(String label, String sigAlg, Key key) {
+
+ if (!DISABLED_CHECK.permits(SIG_PRIMITIVE_SET, sigAlg, null)) {
+ weakWarnings.add(String.format(
+ rb.getString("whose.sigalg.risk"), label, sigAlg));
+ }
+ if (key != null && !DISABLED_CHECK.permits(SIG_PRIMITIVE_SET, key)) {
+ weakWarnings.add(String.format(
+ rb.getString("whose.key.risk"),
+ label,
+ String.format(rb.getString("key.bit"),
+ KeyUtil.getKeySize(key), key.getAlgorithm())));
+ }
+ }
+
+ private void checkWeak(String label, Certificate[] certs) {
+ for (int i = 0; i < certs.length; i++) {
+ Certificate cert = certs[i];
+ if (cert instanceof X509Certificate) {
+ X509Certificate xc = (X509Certificate)cert;
+ String fullLabel = label;
+ if (certs.length > 1) {
+ fullLabel = oneInMany(label, i, certs.length);
+ }
+ checkWeak(fullLabel, xc.getSigAlgName(), xc.getPublicKey());
+ }
+ }
+ }
+
+ private void checkWeak(String label, Certificate cert) {
+ if (cert instanceof X509Certificate) {
+ X509Certificate xc = (X509Certificate)cert;
+ checkWeak(label, xc.getSigAlgName(), xc.getPublicKey());
+ }
+ }
+
+ private void checkWeak(String label, PKCS10 p10) {
+ checkWeak(label, p10.getSigAlg(), p10.getSubjectPublicKeyInfo());
+ }
+
+ private void checkWeak(String label, CRL crl, Key key) {
+ if (crl instanceof X509CRLImpl) {
+ X509CRLImpl impl = (X509CRLImpl)crl;
+ checkWeak(label, impl.getSigAlgName(), key);
+ }
+ }
+
+ private void printWeakWarnings(boolean newLine) {
+ if (!weakWarnings.isEmpty() && !nowarn) {
+ System.err.println("\nWarning:");
+ for (String warning : weakWarnings) {
+ System.err.println(warning);
+ }
+ if (newLine) {
+ // When calling before a yes/no prompt, add a new line
+ System.err.println();
+ }
+ }
+ weakWarnings.clear();
+ }
+
/**
* Prints the usage of this tool.
*/
--- a/jdk/src/java.base/share/classes/sun/security/tools/keytool/Resources.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/java.base/share/classes/sun/security/tools/keytool/Resources.java Fri Mar 10 09:20:55 2017 -0800
@@ -360,8 +360,6 @@
{"Enter.alias.name.", "Enter alias name: "},
{".RETURN.if.same.as.for.otherAlias.",
"\t(RETURN if same as for <{0}>)"},
- {".PATTERN.printX509Cert",
- "Owner: {0}\nIssuer: {1}\nSerial number: {2}\nValid from: {3} until: {4}\nCertificate fingerprints:\n\t SHA1: {5}\n\t SHA256: {6}\nSignature algorithm name: {7}\nSubject Public Key Algorithm: {8} ({9,number,#})\nVersion: {10}"},
{"What.is.your.first.and.last.name.",
"What is your first and last name?"},
{"What.is.the.name.of.your.organizational.unit.",
@@ -428,16 +426,12 @@
{"Please.provide.keysize.for.secret.key.generation",
"Please provide -keysize for secret key generation"},
- {"verified.by.s.in.s", "Verified by %s in %s"},
{"warning.not.verified.make.sure.keystore.is.correct",
"WARNING: not verified. Make sure -keystore is correct."},
{"Extensions.", "Extensions: "},
{".Empty.value.", "(Empty value)"},
{"Extension.Request.", "Extension Request:"},
- {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.",
- "PKCS #10 Certificate Request (Version 1.0)\n" +
- "Subject: %s\nPublic Key: %s format %s key\n"},
{"Unknown.keyUsage.type.", "Unknown keyUsage type: "},
{"Unknown.extendedkeyUsage.type.", "Unknown extendedkeyUsage type: "},
{"Unknown.AccessDescription.type.", "Unknown AccessDescription type: "},
@@ -446,7 +440,34 @@
"This extension cannot be marked as critical. "},
{"Odd.number.of.hex.digits.found.", "Odd number of hex digits found: "},
{"Unknown.extension.type.", "Unknown extension type: "},
- {"command.{0}.is.ambiguous.", "command {0} is ambiguous:"}
+ {"command.{0}.is.ambiguous.", "command {0} is ambiguous:"},
+
+ // 8171319: keytool should print out warnings when reading or
+ // generating cert/cert req using weak algorithms
+ {"the.certificate.request", "The certificate request"},
+ {"the.issuer", "The issuer"},
+ {"the.generated.certificate", "The generated certificate"},
+ {"the.generated.crl", "The generated CRL"},
+ {"the.generated.certificate.request", "The generated certificate request"},
+ {"the.certificate", "The certificate"},
+ {"the.crl", "The CRL"},
+ {"the.tsa.certificate", "The TSA certificate"},
+ {"the.input", "The input"},
+ {"reply", "Reply"},
+ {"one.in.many", "%s #%d of %d"},
+ {"alias.in.cacerts", "Issuer <%s> in cacerts"},
+ {"alias.in.keystore", "Issuer <%s>"},
+ {"with.weak", "%s (weak)"},
+ {"key.bit", "%d-bit %s key"},
+ {"key.bit.weak", "%d-bit %s key (weak)"},
+ {".PATTERN.printX509Cert.with.weak",
+ "Owner: {0}\nIssuer: {1}\nSerial number: {2}\nValid from: {3} until: {4}\nCertificate fingerprints:\n\t SHA1: {5}\n\t SHA256: {6}\nSignature algorithm name: {7}\nSubject Public Key Algorithm: {8}\nVersion: {9}"},
+ {"PKCS.10.with.weak",
+ "PKCS #10 Certificate Request (Version 1.0)\n" +
+ "Subject: %s\nFormat: %s\nPublic Key: %s\nSignature algorithm: %s\n"},
+ {"verified.by.s.in.s.weak", "Verified by %s in %s with a %s"},
+ {"whose.sigalg.risk", "%s uses the %s signature algorithm which is considered a security risk."},
+ {"whose.key.risk", "%s uses a %s which is considered a security risk."},
};
--- a/jdk/src/java.base/share/classes/sun/security/x509/X509CRLImpl.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/java.base/share/classes/sun/security/x509/X509CRLImpl.java Fri Mar 10 09:20:55 2017 -0800
@@ -536,13 +536,18 @@
* @return value of this CRL in a printable form.
*/
public String toString() {
+ return toStringWithAlgName("" + sigAlgId);
+ }
+
+ // Specifically created for keytool to append a (weak) label to sigAlg
+ public String toStringWithAlgName(String name) {
StringBuilder sb = new StringBuilder();
sb.append("X.509 CRL v")
.append(version+1)
.append('\n');
if (sigAlgId != null)
sb.append("Signature Algorithm: ")
- .append(sigAlgId)
+ .append(name)
.append(", OID=")
.append(sigAlgId.getOID())
.append('\n');
--- a/jdk/src/java.sql/share/classes/java/sql/package.html Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/java.sql/share/classes/java/sql/package.html Fri Mar 10 09:20:55 2017 -0800
@@ -2,7 +2,7 @@
<html>
<head>
<!--
- Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 1998, 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
@@ -32,32 +32,32 @@
<body bgcolor="white">
-Provides the API for accessing and processing data stored in a
-data source (usually a relational database) using the
-Java™ programming language.
+Provides the API for accessing and processing data stored in a
+data source (usually a relational database) using the
+Java™ programming language.
This API includes a framework whereby different
drivers can be installed dynamically to access different data sources.
-Although the JDBC™ API is mainly geared
+Although the JDBC™ API is mainly geared
to passing SQL statements to a database, it provides for reading and
writing data from any data source with a tabular format.
-The reader/writer facility, available through the
+The reader/writer facility, available through the
<code>javax.sql.RowSet</code> group of interfaces, can be customized to
-use and update data from a spread sheet, flat file, or any other tabular
+use and update data from a spread sheet, flat file, or any other tabular
data source.
-<h2>What the JDBC™ 4.2 API Includes</h2>
-The JDBC™ 4.2 API includes both
+<h2>What the JDBC™ 4.3 API Includes</h2>
+The JDBC™ 4.3 API includes both
the <code>java.sql</code> package, referred to as the JDBC core API,
and the <code>javax.sql</code> package, referred to as the JDBC Optional
Package API. This complete JDBC API
is included in the Java™ Standard Edition (Java SE™), version 7.
-The <code>javax.sql</code> package extends the functionality of the JDBC API
+The <code>javax.sql</code> package extends the functionality of the JDBC API
from a client-side API to a server-side API, and it is an essential part
of the Java™ Enterprise Edition
-(Java EE™) technology.
+(Java EE™) technology.
<h2>Versions</h2>
-The JDBC 4.2 API incorporates all of the previous JDBC API versions:
+The JDBC 4.3 API incorporates all of the previous JDBC API versions:
<UL>
<LI> The JDBC 4.1 API</li>
<LI> The JDBC 4.0 API</li>
@@ -70,33 +70,35 @@
<LI> The JDBC 1.0 API</li>
</UL>
<P>
-Classes, interfaces, methods, fields, constructors, and exceptions
-have the following "since" tags that indicate when they were introduced
+Classes, interfaces, methods, fields, constructors, and exceptions
+have the following "since" tags that indicate when they were introduced
into the Java platform. When these "since" tags are used in
Javadoc™ comments for the JDBC API,
they indicate the following:
<UL>
- <LI>Since 1.8 -- new in the JDBC 4.2 API and part of the Java SE platform,
+ <LI>Since 9 -- new in the JDBC 4.3 API and part of the Java SE platform,
+ version 9</li>
+ <LI>Since 1.8 -- new in the JDBC 4.2 API and part of the Java SE platform,
version 8</li>
<LI>Since 1.7 -- new in the JDBC 4.1 API and part of the Java SE platform,
version 7</li>
<LI>Since 1.6 -- new in the JDBC 4.0 API and part of the Java SE platform,
version 6</li>
- <LI>Since 1.4 -- new in the JDBC 3.0 API and part of the J2SE platform,
+ <LI>Since 1.4 -- new in the JDBC 3.0 API and part of the J2SE platform,
version 1.4</li>
- <LI>Since 1.2 -- new in the JDBC 2.0 API and part of the J2SE platform,
+ <LI>Since 1.2 -- new in the JDBC 2.0 API and part of the J2SE platform,
version 1.2</li>
<LI>Since 1.1 or no "since" tag -- in the original JDBC 1.0 API and part of
the JDK™, version 1.1</li>
</UL>
<P>
-<b>NOTE:</b> Many of the new features are optional; consequently, there is
-some variation in drivers and the features they support. Always
+<b>NOTE:</b> Many of the new features are optional; consequently, there is
+some variation in drivers and the features they support. Always
check your driver's documentation to see whether it supports a feature before
you try to use it.
<P>
<b>NOTE:</b> The class <code>SQLPermission</code> was added in the
-Java™ 2 SDK, Standard Edition,
+Java™ 2 SDK, Standard Edition,
version 1.3 release. This class is used to prevent unauthorized
access to the logging stream associated with the <code>DriverManager</code>,
which may contain information such as table names, column data, and so on.
@@ -112,7 +114,7 @@
attempts to set up a logging stream through the
<code>DriverManager</code>
<LI><code>Driver</code> interface -- provides the API for registering
- and connecting drivers based on JDBC technology ("JDBC drivers");
+ and connecting drivers based on JDBC technology ("JDBC drivers");
generally used only by the <code>DriverManager</code> class
<LI><code>DriverPropertyInfo</code> class -- provides properties for a
JDBC driver; not used by the general user
@@ -120,9 +122,9 @@
<LI>Sending SQL statements to a database
<UL>
<LI><code>Statement</code> -- used to send basic SQL statements
- <LI><code>PreparedStatement</code> -- used to send prepared statements or
+ <LI><code>PreparedStatement</code> -- used to send prepared statements or
basic SQL statements (derived from <code>Statement</code>)
- <LI><code>CallableStatement</code> -- used to call database stored
+ <LI><code>CallableStatement</code> -- used to call database stored
procedures (derived from <code>PreparedStatement</code>)
<LI><code>Connection</code> interface -- provides methods for creating
statements and managing connections and their properties
@@ -133,20 +135,20 @@
<UL>
<LI><code>ResultSet</code> interface
</UL>
- <LI>Standard mappings for SQL types to classes and interfaces in the
+ <LI>Standard mappings for SQL types to classes and interfaces in the
Java programming language
<UL>
- <LI><code>Array</code> interface -- mapping for SQL <code>ARRAY</code>
- <LI><code>Blob</code> interface -- mapping for SQL <code>BLOB</code>
+ <LI><code>Array</code> interface -- mapping for SQL <code>ARRAY</code>
+ <LI><code>Blob</code> interface -- mapping for SQL <code>BLOB</code>
<LI><code>Clob</code> interface -- mapping for SQL <code>CLOB</code>
- <LI><code>Date</code> class -- mapping for SQL <code>DATE</code>
+ <LI><code>Date</code> class -- mapping for SQL <code>DATE</code>
<LI><code>NClob</code> interface -- mapping for SQL <code>NCLOB</code>
- <LI><code>Ref</code> interface -- mapping for SQL <code>REF</code>
+ <LI><code>Ref</code> interface -- mapping for SQL <code>REF</code>
<LI><code>RowId</code> interface -- mapping for SQL <code>ROWID</code>
- <LI><code>Struct</code> interface -- mapping for SQL <code>STRUCT</code>
+ <LI><code>Struct</code> interface -- mapping for SQL <code>STRUCT</code>
<LI><code>SQLXML</code> interface -- mapping for SQL <code>XML</code>
- <LI><code>Time</code> class -- mapping for SQL <code>TIME</code>
- <LI><code>Timestamp</code> class -- mapping for SQL <code>TIMESTAMP</code>
+ <LI><code>Time</code> class -- mapping for SQL <code>TIME</code>
+ <LI><code>Timestamp</code> class -- mapping for SQL <code>TIMESTAMP</code>
<LI><code>Types</code> class -- provides constants for SQL types
</UL>
<LI>Custom mapping an SQL user-defined type (UDT) to a class in the
@@ -180,10 +182,26 @@
</UL>
</UL>
+ <h3><code>java.sql</code> and <code>javax.sql</code> Features Introduced in the JDBC 4.3 API</h3>
+<UL>
+ <LI>Added <code>Sharding</code> support</LI>
+ <LI>Enhanced <code>Connection</code> to be able to provide hints
+ to the driver that a request, an independent unit of work,
+ is beginning or ending</LI>
+ <LI>Enhanced <code>DatabaseMetaData</code> to determine if Sharding is
+ supported</LI>
+ <LI>Added the method <code>drivers</code> to <code>DriverManager</code>
+ to return a Stream of the currently loaded and
+ available JDBC drivers</LI>
+ <LI>Added support to <code>Statement</code> for enquoting literals
+ and simple identifiers</LI>
+ <LI>Clarified the Java SE version that methods were deprecated</LI>
+</UL>
+
<h3><code>java.sql</code> and <code>javax.sql</code> Features Introduced in the JDBC 4.2 API</h3>
<UL>
<LI>Added <code>JDBCType</code> enum and <code>SQLType</code> interface</li>
- <LI>Support for <code>REF CURSORS</code> in <code>CallableStatement</code>
+ <LI>Support for <code>REF CURSORS</code> in <code>CallableStatement</code>
</LI>
<LI><code>DatabaseMetaData</code> methods to return maximum Logical LOB size
and if Ref Cursors are supported</LI>
@@ -196,7 +214,7 @@
<LI>Allow <code>Connection</code>,
<code>ResultSet</code> and <code>Statement</code> objects to be
used with the try-with-resources statement</LI>
- <LI>Supported added to <code>CallableStatement</code> and
+ <LI>Support added to <code>CallableStatement</code> and
<code>ResultSet</code> to specify the Java type to convert to via the
<code>getObject</code> method</LI>
<LI><code>DatabaseMetaData</code> methods to return PseudoColumns and if a
@@ -212,7 +230,7 @@
</UL>
<h3><code>java.sql</code> and <code>javax.sql</code> Features Introduced in the JDBC 4.0 API</h3>
<UL>
- <LI>auto java.sql.Driver discovery -- no longer need to load a
+ <LI>auto java.sql.Driver discovery -- no longer need to load a
<code>java.sql.Driver</code> class via <code>Class.forName</code>
<LI>National Character Set support added
<li>Support added for the SQL:2003 XML data type
@@ -222,18 +240,18 @@
as well as additional methods added to improve accessibility
<li>Support added for accessing a SQL ROWID
<li>Support added to allow a JDBC application to access an instance of a JDBC resource
- that has been wrapped by a vendor, usually in an application server or connection
+ that has been wrapped by a vendor, usually in an application server or connection
pooling environment.
<li>Availability to be notified when a <code>PreparedStatement</code> that is associated
with a <code>PooledConnection</code> has been closed or the driver determines is invalid
-
-
+
+
</UL>
<h3><code>java.sql</code> and <code>javax.sql</code> Features Introduced in the JDBC 3.0 API</h3>
<UL>
- <LI>Pooled statements -- reuse of statements associated with a pooled
+ <LI>Pooled statements -- reuse of statements associated with a pooled
connection
<LI>Savepoints -- allow a transaction to be rolled back to a designated
savepoint
@@ -241,7 +259,7 @@
how connections are to be pooled
<LI>Metadata for parameters of a <code>PreparedStatement</code> object
<LI>Ability to retrieve values from automatically generated columns
- <LI>Ability to have multiple <code>ResultSet</code> objects
+ <LI>Ability to have multiple <code>ResultSet</code> objects
returned from <code>CallableStatement</code> objects open at the
same time
<LI>Ability to identify parameters to <code>CallableStatement</code>
@@ -252,7 +270,7 @@
<code>Ref</code> object references
<LI>Ability to programmatically update <code>BLOB</code>,
<code>CLOB</code>, <code>ARRAY</code>, and <code>REF</code> values.
- <LI>Addition of the <code>java.sql.Types.DATALINK</code> data type --
+ <LI>Addition of the <code>java.sql.Types.DATALINK</code> data type --
allows JDBC drivers access to objects stored outside a data source
<LI>Addition of metadata for retrieving SQL type hierarchies
</UL>
@@ -269,7 +287,7 @@
<LI>Miscellaneous features, including performance hints, the use of character
streams, full precision for <code>java.math.BigDecimal</code> values,
additional security, and
- support for time zones in date, time, and timestamp values.
+ support for time zones in date, time, and timestamp values.
</UL>
<h3><code>javax.sql</code> Features Introduced in the JDBC 2.0 Optional
@@ -277,7 +295,7 @@
<UL>
<LI>The <code>DataSource</code> interface as a means of making a connection. The
Java Naming and Directory Interface™
- (JNDI) is used for registering a <code>DataSource</code> object with a
+ (JNDI) is used for registering a <code>DataSource</code> object with a
naming service and also for retrieving it.
<LI>Pooled connections -- allowing connections to be used and reused
<LI>Distributed transactions -- allowing a transaction to span diverse
@@ -301,13 +319,13 @@
that contains two things:
<ul>
<li>the fully-qualified SQL name of the UDT
- <li>the <code>Class</code> object for the class that implements the
+ <li>the <code>Class</code> object for the class that implements the
<code>SQLData</code> interface
</ul>
</ol>
<p>
When these are in place for a UDT, calling the methods
-<code>ResultSet.getObject</code> or <code>CallableStatement.getObject</code>
+<code>ResultSet.getObject</code> or <code>CallableStatement.getObject</code>
on that UDT will automatically retrieve the custom mapping for it. Also, the
<code>PreparedStatement.setObject</code> method will automatically map the
object back to its SQL type to store it in the data source.
@@ -315,7 +333,7 @@
<h2>Package Specification</h2>
<ul>
- <li><a href="https://jcp.org/en/jsr/detail?id=221">JDBC 4.2 Specification</a>
+ <li><a href="https://jcp.org/en/jsr/detail?id=221">JDBC 4.3 Specification</a>
</ul>
<h2>Related Documentation</h2>
--- a/jdk/src/java.sql/share/classes/javax/sql/package.html Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/java.sql/share/classes/javax/sql/package.html Fri Mar 10 09:20:55 2017 -0800
@@ -2,7 +2,7 @@
<html>
<head>
<!--
-Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 2000, 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
@@ -281,15 +281,12 @@
ways, and anyone may write an implementation. Developers are encouraged
to use their imaginations in coming up with new ways to use rowsets.
<P>
-<B>IMPORTANT NOTE:</B> Code that uses API marked "Since 1.6" must be run using a
-JDBC technology driver that implements the JDBC 4.0 API.
-You must check your driver documentation to be sure that it implements
-the particular features you want to use.
+
<h2>Package Specification</h2>
<ul>
- <li><a href="https://jcp.org/en/jsr/detail?id=221">JDBC 4.2 Specification</a>
+ <li><a href="https://jcp.org/en/jsr/detail?id=221">JDBC 4.3 Specification</a>
</ul>
<h2>Related Documentation</h2>
--- a/jdk/src/jdk.crypto.cryptoki/share/classes/module-info.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/jdk.crypto.cryptoki/share/classes/module-info.java Fri Mar 10 09:20:55 2017 -0800
@@ -23,6 +23,11 @@
* questions.
*/
+/**
+ * The SunPKCS11 security provider.
+ *
+ * @since 9
+ */
module jdk.crypto.cryptoki {
// Depends on SunEC provider for EC related functionality
requires jdk.crypto.ec;
--- a/jdk/src/jdk.crypto.ec/share/classes/module-info.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/jdk.crypto.ec/share/classes/module-info.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 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
@@ -23,6 +23,11 @@
* questions.
*/
+/**
+ * The SunEC security provider.
+ *
+ * @since 9
+ */
module jdk.crypto.ec {
provides java.security.Provider with sun.security.ec.SunEC;
}
--- a/jdk/src/jdk.crypto.mscapi/windows/classes/module-info.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/jdk.crypto.mscapi/windows/classes/module-info.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 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
@@ -23,6 +23,11 @@
* questions.
*/
+/**
+ * The SunMSCAPI security provider.
+ *
+ * @since 9
+ */
module jdk.crypto.mscapi {
provides java.security.Provider with sun.security.mscapi.SunMSCAPI;
}
--- a/jdk/src/jdk.crypto.ucrypto/solaris/classes/module-info.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/jdk.crypto.ucrypto/solaris/classes/module-info.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 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
@@ -23,6 +23,11 @@
* questions.
*/
+/**
+ * The OracleUCrypto security provider.
+ *
+ * @since 9
+ */
module jdk.crypto.ucrypto {
provides java.security.Provider with com.oracle.security.ucrypto.UcryptoProvider;
}
--- a/jdk/src/jdk.policytool/share/classes/module-info.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/src/jdk.policytool/share/classes/module-info.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 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
@@ -23,6 +23,14 @@
* questions.
*/
+/**
+ * GUI tool for managing policy files.
+ *
+ * @since 9
+ * @deprecated The policytool tool has been deprecated and
+ * is planned to be removed in a future release.
+ */
+@Deprecated
module jdk.policytool {
requires java.desktop;
requires java.logging;
--- a/jdk/test/ProblemList.txt Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/ProblemList.txt Fri Mar 10 09:20:55 2017 -0800
@@ -186,8 +186,6 @@
java/nio/file/WatchService/MayFlies.java 7158947 solaris-all Solaris 11
java/nio/file/WatchService/LotsOfEvents.java 7158947 solaris-all Solaris 11
-sun/nio/cs/OLD/TestIBMDB.java 8167525 generic-all
-
############################################################################
# jdk_rmi
@@ -217,8 +215,9 @@
javax/net/ssl/DTLS/PacketLossRetransmission.java 8169086 macosx-x64
javax/net/ssl/DTLS/RespondToRetransmit.java 8169086 macosx-x64
-sun/security/mscapi/SignedObjectChain.java 8176183 windows-all
+sun/security/krb5/auto/Basic.java 8176296 generic-all
+sun/security/ssl/X509KeyManager/PreferredKey.java 8176354 generic-all
############################################################################
# jdk_sound
--- a/jdk/test/com/sun/jndi/dns/Parser.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/com/sun/jndi/dns/Parser.java Fri Mar 10 09:20:55 2017 -0800
@@ -26,9 +26,6 @@
* @bug 8035105
* @summary DNS resource record parsing
* @modules jdk.naming.dns/com.sun.jndi.dns:+open
- *
- * @compile --add-modules jdk.naming.dns Parser.java
- * @run main Parser
*/
import com.sun.jndi.dns.ResourceRecord;
--- a/jdk/test/com/sun/jndi/dns/Test6991580.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/com/sun/jndi/dns/Test6991580.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,6 +1,6 @@
/*
- * Copyright (c) 2015, 2016, 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
@@ -37,7 +37,6 @@
* @summary IPv6 Nameservers in resolv.conf throws NumberFormatException
* @modules java.desktop
* jdk.naming.dns/com.sun.jndi.dns
- * @compile --add-modules jdk.naming.dns IPv6NameserverPlatformParsingTest.java
* @run main/manual Test6991580
*/
--- a/jdk/test/com/sun/jndi/rmi/registry/RegistryContext/ContextWithNullProperties.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/com/sun/jndi/rmi/registry/RegistryContext/ContextWithNullProperties.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 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
@@ -29,7 +29,6 @@
* java.rmi/sun.rmi.server java.rmi/sun.rmi.transport java.rmi/sun.rmi.transport.tcp
* @library ../../../../../../java/rmi/testlibrary
* @build TestLibrary
- * @compile --add-modules jdk.naming.rmi ContextWithNullProperties.java
* @run main/othervm ContextWithNullProperties
*/
--- a/jdk/test/java/beans/XMLDecoder/8028054/TestConstructorFinder.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/beans/XMLDecoder/8028054/TestConstructorFinder.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -39,7 +39,7 @@
* java.corba
* java.xml.bind
* @compile -XDignore.symbol.file TestConstructorFinder.java
- * @run main/othervm --add-modules=java.activation,java.transaction,java.corba,java.xml.bind TestConstructorFinder
+ * @run main TestConstructorFinder
*/
public class TestConstructorFinder {
--- a/jdk/test/java/beans/XMLDecoder/8028054/TestMethodFinder.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/beans/XMLDecoder/8028054/TestMethodFinder.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -39,7 +39,7 @@
* java.corba
* java.xml.bind
* @compile -XDignore.symbol.file TestMethodFinder.java
- * @run main/othervm --add-modules=java.activation,java.transaction,java.corba,java.xml.bind TestMethodFinder
+ * @run main TestMethodFinder
*/
public class TestMethodFinder {
--- a/jdk/test/java/io/FileInputStream/LargeFileAvailable.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/io/FileInputStream/LargeFileAvailable.java Fri Mar 10 09:20:55 2017 -0800
@@ -24,6 +24,7 @@
/*
* @test
* @bug 6402006 7030573 8011136
+ * @key intermittent
* @summary Test if available returns correct value when reading
* a large file.
*/
--- a/jdk/test/java/io/FilePermission/ReadFileOnPath.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/io/FilePermission/ReadFileOnPath.java Fri Mar 10 09:20:55 2017 -0800
@@ -26,6 +26,7 @@
* @bug 8164705
* @library /lib/testlibrary /test/lib
* @modules java.base/jdk.internal.misc
+ * java.compiler
* @run main ReadFileOnPath
* @summary Still able to read file on the same path
*/
--- a/jdk/test/java/lang/ClassLoader/platformClassLoader/DefinePlatformClass.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/lang/ClassLoader/platformClassLoader/DefinePlatformClass.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 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
@@ -26,7 +26,6 @@
* @summary Test java.* class defined by the platform class loader
* @modules jdk.zipfs/java.fake
* @build jdk.zipfs/java.fake.Fake
- * @compile --add-modules jdk.zipfs DefinePlatformClass.java
* @run main DefinePlatformClass
*/
--- a/jdk/test/java/lang/ProcessBuilder/Basic.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/lang/ProcessBuilder/Basic.java Fri Mar 10 09:20:55 2017 -0800
@@ -28,6 +28,7 @@
* 6464154 6523983 6206031 4960438 6631352 6631966 6850957 6850958
* 4947220 7018606 7034570 4244896 5049299 8003488 8054494 8058464
* 8067796
+ * @key intermittent
* @summary Basic tests for Process and Environment Variable code
* @modules java.base/java.lang:open
* @run main/othervm/timeout=300 Basic
--- a/jdk/test/java/lang/ref/ReferenceEnqueue.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/lang/ref/ReferenceEnqueue.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -22,17 +22,23 @@
*/
/* @test
- * @bug 4268317 8132306
+ * @bug 4268317 8132306 8175797
* @summary Test if Reference.enqueue() works properly with GC
+ * @run main ReferenceEnqueue
+ * @run main/othervm -Djdk.lang.ref.disableClearAndEnqueue=true ReferenceEnqueue
*/
import java.lang.ref.*;
+import java.util.ArrayList;
+import java.util.List;
public class ReferenceEnqueue {
public static void main(String args[]) throws Exception {
- for (int i=0; i < 5; i++)
+ for (int i=0; i < 5; i++) {
new WeakRef().run();
+ new ExplicitEnqueue().run();
+ }
System.out.println("Test passed.");
}
@@ -76,4 +82,50 @@
}
}
}
+
+ static class ExplicitEnqueue {
+ final ReferenceQueue<Object> queue = new ReferenceQueue<>();
+ final List<Reference<Object>> refs = new ArrayList<>();
+ final int iterations = 1000;
+ final boolean disableClearAndEnqueue =
+ Boolean.parseBoolean("jdk.lang.ref.disableClearAndEnqueue");
+
+ ExplicitEnqueue() {
+ this.refs.add(new SoftReference<>(new Object(), queue));
+ this.refs.add(new WeakReference<>(new Object(), queue));
+ this.refs.add(new PhantomReference<>(new Object(), queue));
+ }
+
+ void run() throws InterruptedException {
+ for (Reference<Object> ref : refs) {
+ if (ref.enqueue() == false) {
+ throw new RuntimeException("Error: enqueue failed");
+ }
+ if (disableClearAndEnqueue && ref.get() == null) {
+ throw new RuntimeException("Error: clearing should be disabled");
+ }
+ if (!disableClearAndEnqueue && ref.get() != null) {
+ throw new RuntimeException("Error: referent must be cleared");
+ }
+ }
+
+ System.gc();
+ for (int i = 0; refs.size() > 0 && i < iterations; i++) {
+ Reference<Object> ref = (Reference<Object>)queue.poll();
+ if (ref == null) {
+ System.gc();
+ Thread.sleep(100);
+ continue;
+ }
+
+ if (refs.remove(ref) == false) {
+ throw new RuntimeException("Error: unknown reference " + ref);
+ }
+ }
+
+ if (!refs.isEmpty()) {
+ throw new RuntimeException("Error: not all references are removed");
+ }
+ }
+ }
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/MulticastSocket/NetworkInterfaceEmptyGetInetAddressesTest.java Fri Mar 10 09:20:55 2017 -0800
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 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
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8175325
+ * @summary test NetworkInterface getInterfaceAddresses method on the NetworkInterface returned
+ * from the getNetworkInterface invocation on a MulticastSocket bound to a wildcard address.
+ *
+ */
+
+import java.net.MulticastSocket;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+
+public class NetworkInterfaceEmptyGetInetAddressesTest {
+
+ static int exceptionCount = 0;
+
+ public static void testMethods(NetworkInterface netIf) throws Exception {
+ testNetworkInterface_getInterfaceAddresses(netIf);
+
+ if (exceptionCount > 0) {
+ throw new RuntimeException("Unexpected Exceptions in test");
+ }
+ }
+
+ private static void testNetworkInterface_getInterfaceAddresses(
+ NetworkInterface netIf) {
+ try {
+ netIf.getInterfaceAddresses();
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ incrementExceptionCount();
+ }
+ }
+
+ private static void incrementExceptionCount() {
+ exceptionCount++;
+ }
+
+ public static void main(String[] args) throws Exception {
+ MulticastSocket mcastSock = null;
+ try {
+ mcastSock = new MulticastSocket();
+ System.out.println("macst socket address == "
+ + mcastSock.getLocalAddress());
+ NetworkInterface netIf = mcastSock.getNetworkInterface();
+ testMethods(netIf);
+ } finally {
+ if (mcastSock != null) {
+ mcastSock.close();
+ }
+ }
+ }
+}
--- a/jdk/test/java/nio/channels/AsynchronousSocketChannel/Basic.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/nio/channels/AsynchronousSocketChannel/Basic.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 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
@@ -23,24 +23,27 @@
/* @test
* @bug 4607272 6842687 6878369 6944810 7023403
- * @summary Unit test for AsynchronousSocketChannel
+ * @summary Unit test for AsynchronousSocketChannel(use -Dseed=X to set PRNG seed)
+ * @library /lib/testlibrary/
+ * @build jdk.testlibrary.*
* @run main Basic -skipSlowConnectTest
* @key randomness intermittent
*/
+import java.io.Closeable;
+import java.io.IOException;
+import java.net.*;
+import static java.net.StandardSocketOptions.*;
import java.nio.ByteBuffer;
import java.nio.channels.*;
-import static java.net.StandardSocketOptions.*;
-import java.net.*;
import java.util.Random;
+import java.util.Set;
import java.util.concurrent.*;
import java.util.concurrent.atomic.*;
-import java.io.Closeable;
-import java.io.IOException;
-import java.util.Set;
+import jdk.testlibrary.RandomFactory;
public class Basic {
- static final Random rand = new Random();
+ private static final Random RAND = RandomFactory.getRandom();
static boolean skipSlowConnectTest = false;
@@ -327,8 +330,10 @@
new AtomicReference<Throwable>();
// write bytes to fill socket buffer
+ final AtomicInteger numCompleted = new AtomicInteger();
ch.write(genBuffer(), ch, new CompletionHandler<Integer,AsynchronousSocketChannel>() {
public void completed(Integer result, AsynchronousSocketChannel ch) {
+ numCompleted.incrementAndGet();
ch.write(genBuffer(), ch, this);
}
public void failed(Throwable x, AsynchronousSocketChannel ch) {
@@ -336,10 +341,21 @@
}
});
- // give time for socket buffer to fill up.
- Thread.sleep(5*1000);
+ // give time for socket buffer to fill up -
+ // take pauses until the handler is no longer being invoked
+ // because all writes are being pended which guarantees that
+ // the internal channel state indicates it is writing
+ int prevNumCompleted = numCompleted.get();
+ do {
+ Thread.sleep(1000);
+ if (numCompleted.get() == prevNumCompleted) {
+ break;
+ }
+ prevNumCompleted = numCompleted.get();
+ } while (true);
- // attempt a concurrent write - should fail with WritePendingException
+ // attempt a concurrent write -
+ // should fail with WritePendingException
try {
ch.write(genBuffer());
throw new RuntimeException("WritePendingException expected");
@@ -497,12 +513,12 @@
// trickle the writing
do {
int rem = src.remaining();
- int size = (rem <= 100) ? rem : 50 + rand.nextInt(rem - 100);
+ int size = (rem <= 100) ? rem : 50 + RAND.nextInt(rem - 100);
ByteBuffer buf = ByteBuffer.allocate(size);
for (int i=0; i<size; i++)
buf.put(src.get());
buf.flip();
- Thread.sleep(50 + rand.nextInt(1500));
+ Thread.sleep(50 + RAND.nextInt(1500));
while (buf.hasRemaining())
sc.write(buf);
} while (src.hasRemaining());
@@ -715,7 +731,7 @@
}
static void testShutdown() throws Exception {
- System.out.println("-- shutdown--");
+ System.out.println("-- shutdown --");
try (Server server = new Server();
AsynchronousSocketChannel ch = AsynchronousSocketChannel.open())
@@ -759,6 +775,7 @@
}
static void testTimeout(final long timeout, final TimeUnit unit) throws Exception {
+ System.out.printf("---- timeout: %d ms%n", unit.toMillis(timeout));
try (Server server = new Server()) {
AsynchronousSocketChannel ch = AsynchronousSocketChannel.open();
ch.connect(server.address()).get();
@@ -847,10 +864,10 @@
// returns ByteBuffer with random bytes
static ByteBuffer genBuffer() {
- int size = 1024 + rand.nextInt(16000);
+ int size = 1024 + RAND.nextInt(16000);
byte[] buf = new byte[size];
- rand.nextBytes(buf);
- boolean useDirect = rand.nextBoolean();
+ RAND.nextBytes(buf);
+ boolean useDirect = RAND.nextBoolean();
if (useDirect) {
ByteBuffer bb = ByteBuffer.allocateDirect(buf.length);
bb.put(buf);
@@ -865,7 +882,7 @@
static ByteBuffer[] genBuffers(int max) {
int len = 1;
if (max > 1)
- len += rand.nextInt(max);
+ len += RAND.nextInt(max);
ByteBuffer[] bufs = new ByteBuffer[len];
for (int i=0; i<len; i++)
bufs[i] = genBuffer();
@@ -875,17 +892,17 @@
// return random SocketAddress
static SocketAddress genSocketAddress() {
StringBuilder sb = new StringBuilder("10.");
- sb.append(rand.nextInt(256));
+ sb.append(RAND.nextInt(256));
sb.append('.');
- sb.append(rand.nextInt(256));
+ sb.append(RAND.nextInt(256));
sb.append('.');
- sb.append(rand.nextInt(256));
+ sb.append(RAND.nextInt(256));
InetAddress rh;
try {
rh = InetAddress.getByName(sb.toString());
} catch (UnknownHostException x) {
throw new InternalError("Should not happen");
}
- return new InetSocketAddress(rh, rand.nextInt(65535)+1);
+ return new InetSocketAddress(rh, RAND.nextInt(65535)+1);
}
}
--- a/jdk/test/java/nio/channels/AsynchronousSocketChannel/Leaky.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/nio/channels/AsynchronousSocketChannel/Leaky.java Fri Mar 10 09:20:55 2017 -0800
@@ -24,6 +24,7 @@
/* @test
* @bug 4607272 6999915 7185340
* @summary Unit test for AsynchronousSocketChannel
+ * @modules java.management
* @run main/othervm -XX:+DisableExplicitGC -XX:MaxDirectMemorySize=75m Leaky
*/
--- a/jdk/test/java/nio/channels/FileChannel/InterruptDeadlock.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/nio/channels/FileChannel/InterruptDeadlock.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 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
@@ -58,7 +58,7 @@
if (n > 0)
pos += n;
// fc.size is important here as it is position sensitive
- if (pos > fc.size())
+ if (pos >= fc.size())
pos = 0L;
}
} catch (ClosedChannelException x) {
--- a/jdk/test/java/nio/channels/FileChannel/LoopingTruncate.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/nio/channels/FileChannel/LoopingTruncate.java Fri Mar 10 09:20:55 2017 -0800
@@ -24,6 +24,7 @@
/**
* @test
* @bug 8137121 8137230
+ * @key intermittent
* @summary (fc) Infinite loop FileChannel.truncate
* @library /lib/testlibrary
* @build jdk.testlibrary.Utils
--- a/jdk/test/java/nio/channels/FileChannel/Transfer.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/nio/channels/FileChannel/Transfer.java Fri Mar 10 09:20:55 2017 -0800
@@ -24,6 +24,7 @@
/* @test
* @bug 4434723 4482726 4559072 4638365 4795550 5081340 5103988 6253145
* 6984545
+ * @key intermittent
* @summary Test FileChannel.transferFrom and transferTo (use -Dseed=X to set PRNG seed)
* @library ..
* @library /lib/testlibrary/
--- a/jdk/test/java/nio/channels/FileChannel/Transfers.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/nio/channels/FileChannel/Transfers.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,6 +22,7 @@
*/
/* @test
+ * @key intermittent
* @summary Comprehensive test for FileChannel.transfer{From,To}
* @bug 4708120
* @author Mark Reinhold
--- a/jdk/test/java/nio/channels/Selector/ChangingInterests.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/nio/channels/Selector/ChangingInterests.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -51,12 +51,26 @@
return "(" + s + ")";
}
- static void write1(SocketChannel peer) throws IOException {
- peer.write(ByteBuffer.wrap(new byte[1]));
- // give time for other end to be readable
- try {
- Thread.sleep(50);
- } catch (InterruptedException ignore) { }
+ /**
+ * Writes two bytes to 'out' and reads one byte from 'in' so
+ * as to make 'in' readable.
+ */
+ static void makeReadable(SocketChannel out, SocketChannel in) throws IOException {
+ out.write(ByteBuffer.wrap(new byte[2]));
+ ByteBuffer oneByte = ByteBuffer.wrap(new byte[1]);
+ do {
+ int n = in.read(oneByte);
+ if (n == 1) {
+ break;
+ } else if (n == 0) {
+ try {
+ Thread.sleep(50);
+ } catch (InterruptedException ignore) { }
+ } else {
+ throw new RuntimeException
+ ("Expected to read 0 or 1 byte; actual number was " + n);
+ }
+ } while (true);
}
static void drain(SocketChannel sc) throws IOException {
@@ -147,7 +161,7 @@
sc.configureBlocking(false);
// ensure that channel "sc" is readable
- write1(peer);
+ makeReadable(peer, sc);
try (Selector sel = Selector.open()) {
SelectionKey key = sc.register(sel, 0);
@@ -172,7 +186,7 @@
drain(sc);
testForSpin(sel);
System.out.println("Make channel readable again");
- write1(peer);
+ makeReadable(peer, sc);
}
System.out.println();
--- a/jdk/test/java/nio/charset/Charset/CharsetContainmentTest.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/nio/charset/Charset/CharsetContainmentTest.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 4626545 4696726
- @summary Checks the inter containment relationships between NIO charsets
+ * @bug 4626545 4696726
+ * @summary Checks the inter containment relationships between NIO charsets
+ * @modules jdk.charsets
*/
import java.nio.charset.*;
--- a/jdk/test/java/nio/charset/Charset/Contains.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/nio/charset/Charset/Contains.java Fri Mar 10 09:20:55 2017 -0800
@@ -24,6 +24,7 @@
/* @test
* @summary Unit test for charset containment
* @bug 6798572
+ * @modules jdk.charsets
*/
import java.nio.charset.*;
--- a/jdk/test/java/nio/charset/Charset/NIOCharsetAvailabilityTest.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/nio/charset/Charset/NIOCharsetAvailabilityTest.java Fri Mar 10 09:20:55 2017 -0800
@@ -25,6 +25,7 @@
* @test
* @bug 4777124 6920545 6911753 8073924
* @summary Verify that all Charset subclasses are available through the API
+ * @modules jdk.charsets
*/
import java.net.URI;
--- a/jdk/test/java/nio/charset/Charset/RegisteredCharsets.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/nio/charset/Charset/RegisteredCharsets.java Fri Mar 10 09:20:55 2017 -0800
@@ -25,6 +25,7 @@
* @bug 4473201 4696726 4652234 4482298 4784385 4966197 4267354 5015668
6911753 8071447
* @summary Check that registered charsets are actually registered
+ * @modules jdk.charsets
*/
import java.io.*;
--- a/jdk/test/java/nio/charset/CharsetEncoder/Flush.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/nio/charset/CharsetEncoder/Flush.java Fri Mar 10 09:20:55 2017 -0800
@@ -24,6 +24,7 @@
/* @test
* @bug 6227608
* @summary Test proper handling of flush()
+ * @modules jdk.charsets
* @author Martin Buchholz
*/
--- a/jdk/test/java/nio/charset/RemovingSunIO/SunioAlias.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/nio/charset/RemovingSunIO/SunioAlias.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 4454622
- @summary Check if all supported sun.io encoding names are supported in nio.charset
+ * @bug 4454622
+ * @summary Check if all supported sun.io encoding names are supported in nio.charset
+ * @modules jdk.charsets
*/
import java.util.HashMap;
--- a/jdk/test/java/nio/charset/coders/Check.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/nio/charset/coders/Check.java Fri Mar 10 09:20:55 2017 -0800
@@ -24,6 +24,7 @@
/* @test
* @bug 4712786
* @summary Check charsets against reference files
+ * @modules jdk.charsets
*
* @build Util
* @run main Check shift_jis ref.shift_jis
--- a/jdk/test/java/nio/charset/coders/ResetISO2022JP.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/nio/charset/coders/ResetISO2022JP.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,9 +22,10 @@
*/
/* @test
- @bug 6226510
- @summary Check that ISO-2022-JP's encoder correctly resets to ASCII mode
- @author Martin Buchholz
+ * @bug 6226510
+ * @summary Check that ISO-2022-JP's encoder correctly resets to ASCII mode
+ * @modules jdk.charsets
+ * @author Martin Buchholz
*/
import java.nio.*;
--- a/jdk/test/java/nio/file/FileStore/Basic.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/nio/file/FileStore/Basic.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 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
@@ -24,8 +24,11 @@
/* @test
* @bug 4313887 6873621 6979526 7006126 7020517
* @summary Unit test for java.nio.file.FileStore
+ * @key intermittent
* @library ..
- * @key intermittent
+ * @library .. /lib/testlibrary
+ * @build jdk.testlibrary.FileUtils
+ * @run main Basic
*/
import java.nio.file.*;
@@ -33,6 +36,8 @@
import java.io.File;
import java.io.IOException;
import java.util.*;
+import jdk.testlibrary.FileUtils;
+
public class Basic {
@@ -110,31 +115,36 @@
/**
* Test: Enumerate all FileStores
*/
- FileStore prev = null;
- for (FileStore store: FileSystems.getDefault().getFileStores()) {
- System.out.format("%s (name=%s type=%s)\n", store, store.name(),
- store.type());
+ if (FileUtils.areFileSystemsAccessible()) {
+ FileStore prev = null;
+ for (FileStore store: FileSystems.getDefault().getFileStores()) {
+ System.out.format("%s (name=%s type=%s)\n", store, store.name(),
+ store.type());
- // check space attributes are accessible
- try {
- store.getTotalSpace();
- store.getUnallocatedSpace();
- store.getUsableSpace();
- } catch (NoSuchFileException nsfe) {
- // ignore exception as the store could have been
- // deleted since the iterator was instantiated
- System.err.format("%s was not found\n", store);
- } catch (AccessDeniedException ade) {
- // ignore exception as the lack of ability to access the
- // store due to lack of file permission or similar does not
- // reflect whether the space attributes would be accessible
- // were access to be permitted
- System.err.format("%s is inaccessible\n", store);
+ // check space attributes are accessible
+ try {
+ store.getTotalSpace();
+ store.getUnallocatedSpace();
+ store.getUsableSpace();
+ } catch (NoSuchFileException nsfe) {
+ // ignore exception as the store could have been
+ // deleted since the iterator was instantiated
+ System.err.format("%s was not found\n", store);
+ } catch (AccessDeniedException ade) {
+ // ignore exception as the lack of ability to access the
+ // store due to lack of file permission or similar does not
+ // reflect whether the space attributes would be accessible
+ // were access to be permitted
+ System.err.format("%s is inaccessible\n", store);
+ }
+
+ // two distinct FileStores should not be equal
+ assertTrue(!store.equals(prev));
+ prev = store;
}
-
- // two distinct FileStores should not be equal
- assertTrue(!store.equals(prev));
- prev = store;
+ } else {
+ System.err.println
+ ("Skipping FileStore check due to file system access failure");
}
}
}
--- a/jdk/test/java/nio/file/FileSystem/Basic.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/nio/file/FileSystem/Basic.java Fri Mar 10 09:20:55 2017 -0800
@@ -41,7 +41,6 @@
import java.nio.file.Paths;
import java.nio.file.ProviderNotFoundException;
import java.util.HashMap;
-import java.util.concurrent.TimeUnit;
import jdk.testlibrary.FileUtils;
/**
@@ -54,41 +53,17 @@
throw new RuntimeException(msg);
}
- static void checkFileStores(String os, FileSystem fs) throws IOException {
- boolean checkFileStores = true;
- if (!os.equals("Windows")) {
- // try to check whether 'df' hangs
- System.out.println("\n--- Begin df output ---");
- System.out.flush();
- Process proc = new ProcessBuilder("df").inheritIO().start();
- try {
- proc.waitFor(90, TimeUnit.SECONDS);
- } catch (InterruptedException ignored) {
- }
- System.out.println("--- End df output ---\n");
- System.out.flush();
- try {
- int exitValue = proc.exitValue();
- if (exitValue != 0) {
- System.err.printf("df process exited with %d != 0%n",
- exitValue);
- checkFileStores = false;
- }
- } catch (IllegalThreadStateException ignored) {
- System.err.println("df command apparently hung");
- checkFileStores = false;
- }
- }
-
+ static void checkFileStores(FileSystem fs) throws IOException {
// sanity check method
- if (checkFileStores) {
+ if (FileUtils.areFileSystemsAccessible()) {
System.out.println("\n--- Begin FileStores ---");
for (FileStore store: fs.getFileStores()) {
System.out.println(store);
}
System.out.println("--- EndFileStores ---\n");
} else {
- System.err.println("Skipping FileStore check due to df failure");
+ System.err.println
+ ("Skipping FileStore check due to file system access failure");
}
}
@@ -133,7 +108,7 @@
"should use 'file' scheme");
// sanity check FileStores
- checkFileStores(os, fs);
+ checkFileStores(fs);
// sanity check supportedFileAttributeViews
checkSupported(fs, "basic");
--- a/jdk/test/java/security/SignedObject/Chain.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/security/SignedObject/Chain.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, 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
@@ -137,8 +137,17 @@
PrivateKey[] privKeys = new PrivateKey[N];
PublicKey[] pubKeys = new PublicKey[N];
PublicKey[] anotherPubKeys = new PublicKey[N];
- KeyPairGenerator kpg = KeyPairGenerator.getInstance(
- test.keyAlg.name);
+ Signature signature;
+ KeyPairGenerator kpg;
+ if (test.provider != Provider.Default) {
+ signature = Signature.getInstance(test.sigAlg.name,
+ test.provider.name);
+ kpg = KeyPairGenerator.getInstance(
+ test.keyAlg.name, test.provider.name);
+ } else {
+ signature = Signature.getInstance(test.sigAlg.name);
+ kpg = KeyPairGenerator.getInstance(test.keyAlg.name);
+ }
for (int j=0; j < N; j++) {
KeyPair kp = kpg.genKeyPair();
KeyPair anotherKp = kpg.genKeyPair();
@@ -154,14 +163,6 @@
}
}
- Signature signature;
- if (test.provider != Provider.Default) {
- signature = Signature.getInstance(test.sigAlg.name,
- test.provider.name);
- } else {
- signature = Signature.getInstance(test.sigAlg.name);
- }
-
// Create a chain of signed objects
SignedObject[] objects = new SignedObject[N];
objects[0] = new SignedObject(str, privKeys[0], signature);
--- a/jdk/test/java/util/ServiceLoader/modules/Basic.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/util/ServiceLoader/modules/Basic.java Fri Mar 10 09:20:55 2017 -0800
@@ -24,6 +24,7 @@
/**
* @test
* @library modules
+ * @modules java.scripting
* @build bananascript/*
* @compile src/pearscript/org/pear/PearScriptEngineFactory.java
* src/pearscript/org/pear/PearScript.java
--- a/jdk/test/java/util/concurrent/tck/SubmissionPublisherTest.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/util/concurrent/tck/SubmissionPublisherTest.java Fri Mar 10 09:20:55 2017 -0800
@@ -560,17 +560,21 @@
}
/**
- * Negative request causes error
+ * Non-positive request causes error
*/
public void testRequest3() {
SubmissionPublisher<Integer> p = basicPublisher();
TestSubscriber s1 = new TestSubscriber();
TestSubscriber s2 = new TestSubscriber();
+ TestSubscriber s3 = new TestSubscriber();
p.subscribe(s1);
p.subscribe(s2);
+ p.subscribe(s3);
+ s3.awaitSubscribe();
s2.awaitSubscribe();
s1.awaitSubscribe();
s1.sn.request(-1L);
+ s3.sn.request(0L);
p.submit(1);
p.submit(2);
p.close();
@@ -580,6 +584,9 @@
s1.awaitError();
assertEquals(1, s1.errors);
assertTrue(s1.lastError instanceof IllegalArgumentException);
+ s3.awaitError();
+ assertEquals(1, s3.errors);
+ assertTrue(s3.lastError instanceof IllegalArgumentException);
}
/**
--- a/jdk/test/java/util/regex/RegExTest.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/java/util/regex/RegExTest.java Fri Mar 10 09:20:55 2017 -0800
@@ -35,6 +35,7 @@
* 8027645 8035076 8039124 8035975 8074678 6854417 8143854 8147531 7071819
* 8151481 4867170 7080302 6728861 6995635 6736245 4916384
* 6328855 6192895 6345469 6988218 6693451 7006761 8140212 8143282 8158482
+ * 8176029
*
* @library /lib/testlibrary
* @build jdk.testlibrary.*
@@ -4567,10 +4568,15 @@
String linebreaks = new String (new char[] {
0x0A, 0x0B, 0x0C, 0x0D, 0x85, 0x2028, 0x2029 });
String crnl = "\r\n";
- if (!Pattern.compile("\\R+").matcher(linebreaks).matches() ||
- !Pattern.compile("\\R").matcher(crnl).matches() ||
- Pattern.compile("\\R\\R").matcher(crnl).matches())
- failCount++;
+ if (!(Pattern.compile("\\R+").matcher(linebreaks).matches() &&
+ Pattern.compile("\\R").matcher(crnl).matches() &&
+ Pattern.compile("\\Rabc").matcher(crnl + "abc").matches() &&
+ Pattern.compile("\\Rabc").matcher("\rabc").matches() &&
+ Pattern.compile("\\R\\R").matcher(crnl).matches() && // backtracking
+ Pattern.compile("\\R\\n").matcher(crnl).matches()) && // backtracking
+ !Pattern.compile("((?<!\\R)\\s)*").matcher(crnl).matches()) { // #8176029
+ failCount++;
+ }
report("linebreakTest");
}
--- a/jdk/test/javax/management/monitor/MultiMonitorTest.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/javax/management/monitor/MultiMonitorTest.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 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
@@ -116,6 +116,7 @@
// A couple of granularity periods to detect bad behaviour
Thread.sleep(2);
+ System.out.println("Checking for all listeners to be 0");
if (!listenersAreAll(0, listeners)) {
System.out.println("TEST FAILED: listeners not all 0");
System.exit(1);
@@ -124,20 +125,18 @@
for (int i = 0; i < 3; i++)
proxies[i].start();
- long startTime = System.currentTimeMillis();
- while (!listenersAreAll(N, listeners)
- && System.currentTimeMillis() < startTime + 5000)
- Thread.sleep(1);
+ System.out.println("Waiting for listeners to all : " + N);
+ int iterations = 0;
+ while (!listenersAreAll(N, listeners)) {
+ Thread.sleep(500);
- // More time for bad behaviour
- Thread.sleep(1000);
-
- if (!listenersAreAll(N, listeners)) {
- System.out.print("TEST FAILED: listener counts wrong:");
- for (int i = 0; i < listeners.length; i++)
- System.out.print(" " + listeners[i].getCount());
- System.out.println();
- System.exit(1);
+ if (++iterations == 10) {
+ for (int i = 0; i < listeners.length; i++) {
+ System.out.print(" " + listeners[i].getCount());
+ }
+ System.out.println();
+ iterations = 0;
+ }
}
for (int i = 0; i < 3; i++) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/naming/TEST.properties Fri Mar 10 09:20:55 2017 -0800
@@ -0,0 +1,1 @@
+modules = java.naming
--- a/jdk/test/javax/net/ssl/DTLS/CipherSuite.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/javax/net/ssl/DTLS/CipherSuite.java Fri Mar 10 09:20:55 2017 -0800
@@ -27,6 +27,7 @@
/*
* @test
* @bug 8043758
+ * @key intermittent
* @summary Datagram Transport Layer Security (DTLS)
* @modules java.base/sun.security.util
* jdk.crypto.ec
--- a/jdk/test/javax/smartcardio/CommandAPDUTest.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/javax/smartcardio/CommandAPDUTest.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 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
@@ -26,8 +26,7 @@
* @bug 8049021
* @summary Test different constructors for CommandAPDU and check CLA,INS,NC,NE,
* P1,and P2
- * @compile --add-modules=java.smartcardio CommandAPDUTest.java
- * @run testng/othervm --add-modules=java.smartcardio CommandAPDUTest
+ * @run testng CommandAPDUTest
*/
import java.nio.ByteBuffer;
import javax.smartcardio.CommandAPDU;
--- a/jdk/test/javax/smartcardio/HistoricalBytes.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/javax/smartcardio/HistoricalBytes.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 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
@@ -26,8 +26,6 @@
* @bug 6445367
* @summary Verify that ATR.getHistoricalBytes() works
* @author Andreas Sterbenz
- * @compile --add-modules=java.smartcardio HistoricalBytes.java
- * @run main/othervm --add-modules=java.smartcardio HistoricalBytes
*/
import java.util.Arrays;
--- a/jdk/test/javax/smartcardio/ResponseAPDUTest.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/javax/smartcardio/ResponseAPDUTest.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 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
@@ -25,8 +25,7 @@
* @test
* @bug 8049021
* @summary Construct ResponseAPDU from byte array and check NR< SW, SW1 and SW2
- * @compile --add-modules=java.smartcardio ResponseAPDUTest.java
- * @run testng/othervm --add-modules=java.smartcardio ResponseAPDUTest
+ * @run testng ResponseAPDUTest
*/
import javax.smartcardio.ResponseAPDU;
import static org.testng.Assert.*;
--- a/jdk/test/javax/smartcardio/Serialize.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/javax/smartcardio/Serialize.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 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
@@ -26,8 +26,6 @@
* @bug 6445367
* @summary make sure serialization works
* @author Andreas Sterbenz
- * @compile --add-modules=java.smartcardio Serialize.java
- * @run main/othervm --add-modules=java.smartcardio Serialize
*/
import java.io.*;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/smartcardio/TEST.properties Fri Mar 10 09:20:55 2017 -0800
@@ -0,0 +1,1 @@
+modules = java.smartcardio
--- a/jdk/test/javax/smartcardio/TerminalFactorySpiTest.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/javax/smartcardio/TerminalFactorySpiTest.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 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
@@ -25,8 +25,7 @@
* @test
* @bug 8049021
* @summary Test if we can write new provider for smart card
- * @compile --add-modules=java.smartcardio TerminalFactorySpiTest.java
- * @run main/othervm/java.security.policy=policy --add-modules=java.smartcardio TerminalFactorySpiTest
+ * @run main/othervm/java.security.policy=policy TerminalFactorySpiTest
*/
import java.security.Provider;
import java.security.Security;
--- a/jdk/test/javax/smartcardio/TestCardPermission.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/javax/smartcardio/TestCardPermission.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -26,8 +26,6 @@
* @bug 6293767 6469513
* @summary Test for the CardPermission class
* @author Andreas Sterbenz
- * @compile --add-modules=java.smartcardio TestCardPermission.java
- * @run main/othervm --add-modules=java.smartcardio TestCardPermission
*/
import javax.smartcardio.*;
--- a/jdk/test/javax/smartcardio/TestCommandAPDU.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/javax/smartcardio/TestCommandAPDU.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -27,8 +27,6 @@
* @summary Test for the CommandAPDU class
* @author Andreas Sterbenz
* @key randomness
- * @compile --add-modules=java.smartcardio TestCommandAPDU.java
- * @run main/othervm --add-modules=java.smartcardio TestCommandAPDU
*/
import java.util.*;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/sql/rowset/TEST.properties Fri Mar 10 09:20:55 2017 -0800
@@ -0,0 +1,1 @@
+modules = java.sql.rowset
--- a/jdk/test/lib/testlibrary/jdk/testlibrary/FileUtils.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/lib/testlibrary/jdk/testlibrary/FileUtils.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 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
@@ -33,6 +33,7 @@
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.TimeUnit;
/**
@@ -190,4 +191,40 @@
}
return excs;
}
+
+ /**
+ * Checks whether all file systems are accessible. This is performed
+ * by checking free disk space on all mounted file systems via a
+ * separate, spawned process. File systems are considered to be
+ * accessible if this process completes successfully before a given
+ * fixed duration has elapsed.
+ *
+ * @implNote On Unix this executes the {@code df} command in a separate
+ * process and on Windows always returns {@code true}.
+ */
+ public static boolean areFileSystemsAccessible() throws IOException {
+ boolean areFileSystemsAccessible = true;
+ if (!isWindows) {
+ // try to check whether 'df' hangs
+ System.out.println("\n--- df output ---");
+ System.out.flush();
+ Process proc = new ProcessBuilder("df").inheritIO().start();
+ try {
+ proc.waitFor(90, TimeUnit.SECONDS);
+ } catch (InterruptedException ignored) {
+ }
+ try {
+ int exitValue = proc.exitValue();
+ if (exitValue != 0) {
+ System.err.printf("df process exited with %d != 0%n",
+ exitValue);
+ areFileSystemsAccessible = false;
+ }
+ } catch (IllegalThreadStateException ignored) {
+ System.err.println("df command apparently hung");
+ areFileSystemsAccessible = false;
+ }
+ }
+ return areFileSystemsAccessible;
+ }
}
--- a/jdk/test/sun/net/www/http/KeepAliveCache/B5045306.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/net/www/http/KeepAliveCache/B5045306.java Fri Mar 10 09:20:55 2017 -0800
@@ -25,6 +25,7 @@
* @test
* @bug 5045306 6356004 6993490
* @modules java.base/sun.net.www
+ * java.management
* @library ../../httptest/
* @build HttpCallback TestHttpServer HttpTransaction
* @run main/othervm B5045306
--- a/jdk/test/sun/nio/cs/CheckHistoricalNames.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/CheckHistoricalNames.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 4513767 4961027 6217210
- @summary Checks canonical names match between old and (NIO) core charsets
+ * @bug 4513767 4961027 6217210
+ * @summary Checks canonical names match between old and (NIO) core charsets
+ * @modules jdk.charsets
*/
import java.io.InputStreamReader;
import java.io.IOException;
--- a/jdk/test/sun/nio/cs/EuroConverter.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/EuroConverter.java Fri Mar 10 09:20:55 2017 -0800
@@ -27,6 +27,7 @@
* @summary Make sure the euro converters, which are derived from
* existing converters, only differ from their parents at the expected
* code point.
+ * @modules jdk.charsets
*/
import java.text.*;
--- a/jdk/test/sun/nio/cs/HWKatakanaMS932EncodeTest.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/HWKatakanaMS932EncodeTest.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 4715330
- @summary Check MS932/windows-31j encoding (char->byte) for halfwidth katakana chars
+ * @bug 4715330
+ * @summary Check MS932/windows-31j encoding (char->byte) for halfwidth katakana chars
+ * @modules jdk.charsets
*/
/*
--- a/jdk/test/sun/nio/cs/ISCIITest.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/ISCIITest.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 4328178
- @summary Performs baseline and regression test on the ISCII91 charset
+ * @bug 4328178
+ * @summary Performs baseline and regression test on the ISCII91 charset
+ * @modules jdk.charsets
*/
import java.io.*;
--- a/jdk/test/sun/nio/cs/JISAutoDetectTest.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/JISAutoDetectTest.java Fri Mar 10 09:20:55 2017 -0800
@@ -26,6 +26,7 @@
* @bug 4087261 4184592
* @summary Make sure to determine Japanese text encoding as correctly
* as possible.
+ * @modules jdk.charsets
*/
import java.nio.charset.*;
--- a/jdk/test/sun/nio/cs/NIOJISAutoDetectTest.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/NIOJISAutoDetectTest.java Fri Mar 10 09:20:55 2017 -0800
@@ -25,6 +25,7 @@
* @test
* @bug 4831163 5053096 5056440 8022224
* @summary NIO charset basic verification of JISAutodetect decoder
+ * @modules jdk.charsets
* @author Martin Buchholz
*/
--- a/jdk/test/sun/nio/cs/SJISCanEncode.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/SJISCanEncode.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 4913702
- @summary validates canEncode(char c) method for sun.nio.cs.Shift_JIS
+ * @bug 4913702
+ * @summary validates canEncode(char c) method for sun.nio.cs.Shift_JIS
+ * @modules jdk.charsets
*/
--- a/jdk/test/sun/nio/cs/StreamEncoderClose.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/StreamEncoderClose.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,10 +22,11 @@
*/
/* @test
- @bug 5005426
- @summary Check if StreamEncoder close() method works correctly from
- error recovery after the underneath OutputStream failed to
- close the first time.
+ * @bug 5005426
+ * @summary Check if StreamEncoder close() method works correctly from
+ * error recovery after the underneath OutputStream failed to
+ * close the first time.
+ * @modules jdk.charsets
*/
import java.io.*;
--- a/jdk/test/sun/nio/cs/Test6254467.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/Test6254467.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,9 +22,10 @@
*/
/* @test
- @bug 6254467
- @summary Checks if Charset.forName() accepts legal IANA alias names
- for charset IBM037.
+ * @bug 6254467
+ * @summary Checks if Charset.forName() accepts legal IANA alias names
+ * for charset IBM037.
+ * @modules jdk.charsets
*/
import java.nio.charset.Charset;
--- a/jdk/test/sun/nio/cs/TestConverterDroppedCharacters.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/TestConverterDroppedCharacters.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,11 +22,12 @@
*/
/* @test
- @bug 4122961
- @summary Verify that converters don't drop characters on buffer boundaries
+ * @bug 4122961
+ * @summary Verify that converters don't drop characters on buffer boundaries
- This is a slightly modified version of the attachment supplied with the
- bug report.
+ * This is a slightly modified version of the attachment supplied with the
+ * bug report.
+ * @modules jdk.charsets
*/
import java.io.*;
--- a/jdk/test/sun/nio/cs/TestCp834_SBCS.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/TestCp834_SBCS.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 6379808
- @summary Check all Cp933 SBCS characters are not supported in Cp834
+ * @bug 6379808
+ * @summary Check all Cp933 SBCS characters are not supported in Cp834
+ * @modules jdk.charsets
*/
import java.io.*;
--- a/jdk/test/sun/nio/cs/TestCp93xSISO.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/TestCp93xSISO.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 4429358
- @summary Remove illegal SI/SO char to byte mappings
+ * @bug 4429358
+ * @summary Remove illegal SI/SO char to byte mappings
+ * @modules jdk.charsets
*/
public class TestCp93xSISO {
--- a/jdk/test/sun/nio/cs/TestIBM1364.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/TestIBM1364.java Fri Mar 10 09:20:55 2017 -0800
@@ -23,8 +23,9 @@
/* @test
- @bug 6803681
- @summary Test IBM1364
+ * @bug 6803681
+ * @summary Test IBM1364
+ * @modules jdk.charsets
*/
import java.util.Arrays;
--- a/jdk/test/sun/nio/cs/TestIBMBugs.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/TestIBMBugs.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 6371437 6371422 6371416 6371619 5058184 6371431 6639450 6569191 6577466
- @summary Check if the problems reported in above bugs have been fixed
+ * @bug 6371437 6371422 6371416 6371619 5058184 6371431 6639450 6569191 6577466
+ * @summary Check if the problems reported in above bugs have been fixed
+ * @modules jdk.charsets
*/
import java.io.*;
--- a/jdk/test/sun/nio/cs/TestISO2022CNDecoder.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/TestISO2022CNDecoder.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 4779029 4924625 6392664 6730652
- @summary Test decoding of various permutations of valid ISO-2022-CN byte sequences
+ * @bug 4779029 4924625 6392664 6730652
+ * @summary Test decoding of various permutations of valid ISO-2022-CN byte sequences
+ * @modules jdk.charsets
*/
/*
--- a/jdk/test/sun/nio/cs/TestISO2022JP.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/TestISO2022JP.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 4626545 4879522 4913711 4119445 8042125
- @summary Check full coverage encode/decode for ISO-2022-JP
+ * @bug 4626545 4879522 4913711 4119445 8042125
+ * @summary Check full coverage encode/decode for ISO-2022-JP
+ * @modules jdk.charsets
*/
/*
--- a/jdk/test/sun/nio/cs/TestISO2022JPEncoder.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/TestISO2022JPEncoder.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 4251646
- @summary Make sure buffer boundary convert works
+ * @bug 4251646
+ * @summary Make sure buffer boundary convert works
+ * @modules jdk.charsets
*/
import java.nio.*;
--- a/jdk/test/sun/nio/cs/TestISO2022JPSubBytes.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/TestISO2022JPSubBytes.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 4262894 6233303
- @summary Testing substitute character Escape sequence
+ * @bug 4262894 6233303
+ * @summary Testing substitute character Escape sequence
+ * @modules jdk.charsets
*/
import java.nio.*;
--- a/jdk/test/sun/nio/cs/TestIllegalISO2022Esc.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/TestIllegalISO2022Esc.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 4429369
- @summary ISO2022CN and ISO2022KR converters throw exception
+ * @bug 4429369
+ * @summary ISO2022CN and ISO2022KR converters throw exception
+ * @modules jdk.charsets
*/
import java.io.*;
--- a/jdk/test/sun/nio/cs/TestIllegalSJIS.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/TestIllegalSJIS.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 4117820
- @summary Verify that SJIS.Decoder works properly for values between 0xA000 and 0xA0FC
+ * @bug 4117820
+ * @summary Verify that SJIS.Decoder works properly for values between 0xA000 and 0xA0FC
+ * @modules jdk.charsets
*/
import java.nio.charset.*;
--- a/jdk/test/sun/nio/cs/TestMS5022X.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/TestMS5022X.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,9 +22,10 @@
*/
/* @test
- @bug 6173388 6319716
- @summary Check full coverage encode/decode for Microsoft
- ISO2022_JP variants MS50220, MS50221 and MSISO2022JP
+ * @bug 6173388 6319716
+ * @summary Check full coverage encode/decode for Microsoft
+ * ISO2022_JP variants MS50220, MS50221 and MSISO2022JP
+ * @modules jdk.charsets
*/
import java.io.*;
--- a/jdk/test/sun/nio/cs/TestSJIS0213.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/TestSJIS0213.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 6529796 6710199
- @summary Test SJIS/MS932_0213 charsets
+ * @bug 6529796 6710199
+ * @summary Test SJIS/MS932_0213 charsets
+ * @modules jdk.charsets
*/
import java.util.Arrays;
--- a/jdk/test/sun/nio/cs/TestSJIS0213_SM.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/TestSJIS0213_SM.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 7152690
- @summary Initialize SJIS_0213 charset with SecurityManager enabled
+ * @bug 7152690
+ * @summary Initialize SJIS_0213 charset with SecurityManager enabled
+ * @modules jdk.charsets
*/
public class TestSJIS0213_SM {
public static void main(String[] args) throws Throwable {
--- a/jdk/test/sun/nio/cs/TestTrailingEscapesISO2022JP.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/nio/cs/TestTrailingEscapesISO2022JP.java Fri Mar 10 09:20:55 2017 -0800
@@ -22,8 +22,9 @@
*/
/* @test
- @bug 4697605 4741233
- @summary Check decoder behaves correctly in ISO2022_JP
+ * @bug 4697605 4741233
+ * @summary Check decoder behaves correctly in ISO2022_JP
+ * @modules jdk.charsets
*/
import java.io.*;
--- a/jdk/test/sun/security/ec/TestEC.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/security/ec/TestEC.java Fri Mar 10 09:20:55 2017 -0800
@@ -35,7 +35,6 @@
* @library ../pkcs11/sslecc
* @library ../../../java/security/testlibrary
* @modules jdk.crypto.cryptoki/sun.security.pkcs11.wrapper
- * @compile --add-modules jdk.crypto.cryptoki TestEC.java
* @run main/othervm -Djdk.tls.namedGroups="secp256r1,sect193r1" TestEC
* @run main/othervm/java.security.policy=TestEC.policy -Djdk.tls.namedGroups="secp256r1,sect193r1" TestEC
*/
--- a/jdk/test/sun/security/krb5/auto/HttpNegotiateServer.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/security/krb5/auto/HttpNegotiateServer.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 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
@@ -24,6 +24,15 @@
/*
* @test
* @bug 6578647 6829283 8171340
+ * @modules java.base/sun.security.util
+ * java.security.jgss/sun.security.krb5.internal:+open
+ * java.security.jgss/sun.security.jgss
+ * java.security.jgss/sun.security.krb5:+open
+ * java.security.jgss/sun.security.krb5.internal.crypto
+ * java.security.jgss/sun.security.krb5.internal.ktab
+ * jdk.security.auth
+ * jdk.security.jgss
+ * jdk.httpserver
* @run main/othervm HttpNegotiateServer
* @summary Undefined requesting URL in java.net.Authenticator
* .getPasswordAuthentication()
--- a/jdk/test/sun/security/krb5/auto/Renew.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/security/krb5/auto/Renew.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016 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
@@ -26,12 +26,6 @@
* @bug 8058290
* @summary JAAS Krb5LoginModule has suspect ticket-renewal logic,
* relies on clockskew grace
- * @modules java.base/sun.security.util
- * java.security.jgss/sun.security.krb5:+open
- * java.security.jgss/sun.security.krb5.internal:+open
- * java.security.jgss/sun.security.krb5.internal.ccache
- * java.security.jgss/sun.security.krb5.internal.crypto
- * java.security.jgss/sun.security.krb5.internal.ktab
* @compile -XDignore.symbol.file Renew.java
* @run main/othervm Renew 1
* @run main/othervm Renew 2
--- a/jdk/test/sun/security/krb5/auto/TEST.properties Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/security/krb5/auto/TEST.properties Fri Mar 10 09:20:55 2017 -0800
@@ -6,4 +6,6 @@
java.security.jgss/sun.security.krb5.internal.ccache \
java.security.jgss/sun.security.krb5.internal.rcache \
java.security.jgss/sun.security.krb5.internal.crypto \
- java.security.jgss/sun.security.krb5.internal.ktab
+ java.security.jgss/sun.security.krb5.internal.ktab \
+ jdk.security.auth \
+ jdk.security.jgss
--- a/jdk/test/sun/security/mscapi/IsSunMSCAPIAvailable.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/security/mscapi/IsSunMSCAPIAvailable.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -26,7 +26,6 @@
* @bug 6318171 6931562
* @requires os.family == "windows"
* @modules jdk.crypto.mscapi/sun.security.mscapi
- * @compile --add-modules jdk.crypto.mscapi IsSunMSCAPIAvailable.java
* @run main/othervm IsSunMSCAPIAvailable
*/
--- a/jdk/test/sun/security/pkcs11/ec/TestCurves.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/security/pkcs11/ec/TestCurves.java Fri Mar 10 09:20:55 2017 -0800
@@ -28,7 +28,6 @@
* @author Andreas Sterbenz
* @library ..
* @modules jdk.crypto.cryptoki/sun.security.pkcs11.wrapper
- * @compile --add-modules jdk.crypto.cryptoki TestCurves.java
* @run main/othervm TestCurves
* @run main/othervm TestCurves sm
* @key randomness
--- a/jdk/test/sun/security/provider/PolicyFile/Modules.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/security/provider/PolicyFile/Modules.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, 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
@@ -39,7 +39,6 @@
* jdk.net
* jdk.security.auth
* jdk.security.jgss
- * @compile --add-modules=java.xml.ws,java.smartcardio Modules.java
* @run main/othervm/java.security.policy==modules.policy Modules
*/
--- a/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java Fri Mar 10 09:20:55 2017 -0800
@@ -43,6 +43,7 @@
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
+import jdk.test.lib.SecurityTools;
import jdk.testlibrary.*;
import jdk.testlibrary.JarUtils;
import sun.security.pkcs.ContentInfo;
@@ -66,6 +67,7 @@
* java.base/sun.security.util
* java.base/sun.security.tools.keytool
* @library /lib/testlibrary
+ * @library /test/lib
* @run main/timeout=600 TimestampCheck
*/
public class TimestampCheck {
@@ -457,6 +459,18 @@
verify(file, "-J-Djava.security.debug=jar")
.shouldHaveExitValue(0)
.shouldMatch("SignatureException:.*disabled");
+
+ // For 8171319: keytool should print out warnings when reading or
+ // generating cert/cert req using weak algorithms.
+ // Must call keytool the command, otherwise doPrintCert() might not
+ // be able to reset "jdk.certpath.disabledAlgorithms".
+ String sout = SecurityTools.keytool("-printcert -jarfile weak.jar")
+ .stderrShouldContain("The TSA certificate uses a 512-bit RSA key" +
+ " which is considered a security risk.")
+ .getStdout();
+ if (sout.indexOf("weak", sout.indexOf("Timestamp:")) < 0) {
+ throw new RuntimeException("timestamp not weak: " + sout);
+ }
}
static void checkHalfWeak(String file) throws Throwable {
--- a/jdk/test/sun/security/tools/jarsigner/TsacertOptionTest.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/security/tools/jarsigner/TsacertOptionTest.java Fri Mar 10 09:20:55 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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
@@ -26,9 +26,10 @@
/**
* @test
- * @bug 8024302 8026037
+ * @bug 8024302 8026037 8176320
* @summary The test signs and verifies a jar file with -tsacert option
* @library /lib/testlibrary warnings
+ * @library /test/lib
* @modules java.base/sun.security.pkcs
* java.base/sun.security.timestamp
* java.base/sun.security.tools.keytool
--- a/jdk/test/sun/security/tools/keytool/DefaultSignatureAlgorithm.java Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/security/tools/keytool/DefaultSignatureAlgorithm.java Fri Mar 10 09:20:55 2017 -0800
@@ -24,6 +24,7 @@
/*
* @test
* @bug 8138766
+ * @key intermittent
* @summary New default -sigalg for keytool
* @modules java.base/sun.security.tools.keytool
* @modules jdk.crypto.ec
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/tools/keytool/WeakAlg.java Fri Mar 10 09:20:55 2017 -0800
@@ -0,0 +1,557 @@
+/*
+ * Copyright (c) 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
+ * 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 8171319
+ * @summary keytool should print out warnings when reading or generating
+ * cert/cert req using weak algorithms
+ * @library /test/lib
+ * @modules java.base/sun.security.tools.keytool
+ * java.base/sun.security.tools
+ * java.base/sun.security.util
+ * @run main/othervm/timeout=600 -Duser.language=en -Duser.country=US WeakAlg
+ */
+
+import jdk.test.lib.SecurityTools;
+import jdk.test.lib.process.OutputAnalyzer;
+import sun.security.tools.KeyStoreUtil;
+import sun.security.util.DisabledAlgorithmConstraints;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.security.CryptoPrimitive;
+import java.security.KeyStore;
+import java.security.cert.X509Certificate;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public class WeakAlg {
+
+ public static void main(String[] args) throws Throwable {
+
+ rm("ks");
+
+ // -genkeypair, and -printcert, -list -alias, -exportcert
+ // (w/ different formats)
+ checkGenKeyPair("a", "-keyalg RSA -sigalg MD5withRSA", "MD5withRSA");
+ checkGenKeyPair("b", "-keyalg RSA -keysize 512", "512-bit RSA key");
+ checkGenKeyPair("c", "-keyalg RSA", null);
+
+ kt("-list")
+ .shouldContain("Warning:")
+ .shouldMatch("<a>.*MD5withRSA.*risk")
+ .shouldMatch("<b>.*512-bit RSA key.*risk");
+ kt("-list -v")
+ .shouldContain("Warning:")
+ .shouldMatch("<a>.*MD5withRSA.*risk")
+ .shouldContain("MD5withRSA (weak)")
+ .shouldMatch("<b>.*512-bit RSA key.*risk")
+ .shouldContain("512-bit RSA key (weak)");
+
+ // Multiple warnings for multiple cert in -printcert or -list or -exportcert
+
+ // -certreq, -printcertreq, -gencert
+ checkCertReq("a", "", null);
+ gencert("c-a", "")
+ .shouldNotContain("Warning"); // new sigalg is not weak
+ gencert("c-a", "-sigalg MD2withRSA")
+ .shouldContain("Warning:")
+ .shouldMatch("The generated certificate.*MD2withRSA.*risk");
+
+ checkCertReq("a", "-sigalg MD5withRSA", "MD5withRSA");
+ gencert("c-a", "")
+ .shouldContain("Warning:")
+ .shouldMatch("The certificate request.*MD5withRSA.*risk");
+ gencert("c-a", "-sigalg MD2withRSA")
+ .shouldContain("Warning:")
+ .shouldMatch("The certificate request.*MD5withRSA.*risk")
+ .shouldMatch("The generated certificate.*MD2withRSA.*risk");
+
+ checkCertReq("b", "", "512-bit RSA key");
+ gencert("c-b", "")
+ .shouldContain("Warning:")
+ .shouldMatch("The certificate request.*512-bit RSA key.*risk")
+ .shouldMatch("The generated certificate.*512-bit RSA key.*risk");
+
+ checkCertReq("c", "", null);
+ gencert("a-c", "")
+ .shouldContain("Warning:")
+ .shouldMatch("The issuer.*MD5withRSA.*risk");
+
+ // but the new cert is not weak
+ kt("-printcert -file a-c.cert")
+ .shouldNotContain("Warning")
+ .shouldNotContain("weak");
+
+ gencert("b-c", "")
+ .shouldContain("Warning:")
+ .shouldMatch("The issuer.*512-bit RSA key.*risk");
+
+ // -importcert
+ checkImport();
+
+ // -importkeystore
+ checkImportKeyStore();
+
+ // -gencrl, -printcrl
+
+ checkGenCRL("a", "", null);
+ checkGenCRL("a", "-sigalg MD5withRSA", "MD5withRSA");
+ checkGenCRL("b", "", "512-bit RSA key");
+ checkGenCRL("c", "", null);
+
+ kt("-delete -alias b");
+ kt("-printcrl -file b.crl")
+ .shouldContain("WARNING: not verified");
+ }
+
+ static void checkImportKeyStore() throws Exception {
+
+ saveStore();
+
+ rm("ks");
+ kt("-importkeystore -srckeystore ks2 -srcstorepass changeit")
+ .shouldContain("3 entries successfully imported")
+ .shouldContain("Warning")
+ .shouldMatch("<b>.*512-bit RSA key.*risk")
+ .shouldMatch("<a>.*MD5withRSA.*risk");
+
+ rm("ks");
+ kt("-importkeystore -srckeystore ks2 -srcstorepass changeit -srcalias a")
+ .shouldContain("Warning")
+ .shouldMatch("<a>.*MD5withRSA.*risk");
+
+ reStore();
+ }
+
+ static void checkImport() throws Exception {
+
+ saveStore();
+
+ // add trusted cert
+
+ // cert already in
+ kt("-importcert -alias d -file a.cert", "no")
+ .shouldContain("Certificate already exists in keystore")
+ .shouldContain("Warning")
+ .shouldMatch("The input.*MD5withRSA.*risk")
+ .shouldContain("Do you still want to add it?");
+ kt("-importcert -alias d -file a.cert -noprompt")
+ .shouldContain("Warning")
+ .shouldMatch("The input.*MD5withRSA.*risk")
+ .shouldNotContain("[no]");
+
+ // cert is self-signed
+ kt("-delete -alias a");
+ kt("-delete -alias d");
+ kt("-importcert -alias d -file a.cert", "no")
+ .shouldContain("Warning")
+ .shouldContain("MD5withRSA (weak)")
+ .shouldMatch("The input.*MD5withRSA.*risk")
+ .shouldContain("Trust this certificate?");
+ kt("-importcert -alias d -file a.cert -noprompt")
+ .shouldContain("Warning")
+ .shouldMatch("The input.*MD5withRSA.*risk")
+ .shouldNotContain("[no]");
+
+ // cert is self-signed cacerts
+ String weakSigAlgCA = null;
+ KeyStore ks = KeyStoreUtil.getCacertsKeyStore();
+ if (ks != null) {
+ DisabledAlgorithmConstraints disabledCheck =
+ new DisabledAlgorithmConstraints(
+ DisabledAlgorithmConstraints.PROPERTY_CERTPATH_DISABLED_ALGS);
+ Set<CryptoPrimitive> sigPrimitiveSet = Collections
+ .unmodifiableSet(EnumSet.of(CryptoPrimitive.SIGNATURE));
+
+ for (String s : Collections.list(ks.aliases())) {
+ if (ks.isCertificateEntry(s)) {
+ X509Certificate c = (X509Certificate)ks.getCertificate(s);
+ String sigAlg = c.getSigAlgName();
+ if (!disabledCheck.permits(sigPrimitiveSet, sigAlg, null)) {
+ weakSigAlgCA = sigAlg;
+ Files.write(Paths.get("ca.cert"),
+ ks.getCertificate(s).getEncoded());
+ break;
+ }
+ }
+ }
+ }
+ if (weakSigAlgCA != null) {
+ kt("-delete -alias d");
+ kt("-importcert -alias d -trustcacerts -file ca.cert", "no")
+ .shouldContain("Certificate already exists in system-wide CA")
+ .shouldContain("Warning")
+ .shouldMatch("The input.*" + weakSigAlgCA + ".*risk")
+ .shouldContain("Do you still want to add it to your own keystore?");
+ kt("-importcert -alias d -file ca.cert -noprompt")
+ .shouldContain("Warning")
+ .shouldMatch("The input.*" + weakSigAlgCA + ".*risk")
+ .shouldNotContain("[no]");
+ }
+
+ // a non self-signed weak cert
+ reStore();
+ certreq("b", "");
+ gencert("c-b", "");
+ kt("-importcert -alias d -file c-b.cert") // weak only, no prompt
+ .shouldContain("Warning")
+ .shouldNotContain("512-bit RSA key (weak)")
+ .shouldMatch("The input.*512-bit RSA key.*risk")
+ .shouldNotContain("[no]");
+
+ kt("-delete -alias b");
+ kt("-delete -alias c");
+ kt("-delete -alias d");
+
+ kt("-importcert -alias d -file c-b.cert", "no") // weak and not trusted
+ .shouldContain("Warning")
+ .shouldContain("512-bit RSA key (weak)")
+ .shouldMatch("The input.*512-bit RSA key.*risk")
+ .shouldContain("Trust this certificate?");
+ kt("-importcert -alias d -file c-b.cert -noprompt")
+ .shouldContain("Warning")
+ .shouldMatch("The input.*512-bit RSA key.*risk")
+ .shouldNotContain("[no]");
+
+ // a non self-signed strong cert
+ reStore();
+ certreq("a", "");
+ gencert("c-a", "");
+ kt("-importcert -alias d -file c-a.cert") // trusted
+ .shouldNotContain("Warning")
+ .shouldNotContain("[no]");
+
+ kt("-delete -alias a");
+ kt("-delete -alias c");
+ kt("-delete -alias d");
+
+ kt("-importcert -alias d -file c-a.cert", "no") // not trusted
+ .shouldNotContain("Warning")
+ .shouldContain("Trust this certificate?");
+ kt("-importcert -alias d -file c-a.cert -noprompt")
+ .shouldNotContain("Warning")
+ .shouldNotContain("[no]");
+
+ // install reply
+
+ reStore();
+
+ gencert("a-b", "");
+ gencert("b-c", "");
+
+ // Full chain with root
+ cat("a-a-b-c.cert", "b-c.cert", "a-b.cert", "a.cert");
+ kt("-importcert -alias c -file a-a-b-c.cert") // only weak
+ .shouldContain("Warning")
+ .shouldMatch("Reply #2 of 3.*512-bit RSA key.*risk")
+ .shouldMatch("Reply #3 of 3.*MD5withRSA.*risk")
+ .shouldNotContain("[no]");
+
+ // Without root
+ cat("a-b-c.cert", "b-c.cert", "a-b.cert");
+ kt("-importcert -alias c -file a-b-c.cert") // only weak
+ .shouldContain("Warning")
+ .shouldMatch("Reply #2 of 2.*512-bit RSA key.*risk")
+ .shouldMatch("Issuer <a>.*MD5withRSA.*risk")
+ .shouldNotContain("[no]");
+
+ reStore();
+ gencert("b-a", "");
+
+ kt("-importcert -alias a -file b-a.cert")
+ .shouldContain("Warning")
+ .shouldMatch("Issuer <b>.*512-bit RSA key.*risk")
+ .shouldNotContain("[no]");
+
+ kt("-importcert -alias a -file c-a.cert")
+ .shouldNotContain("Warning");
+
+ kt("-importcert -alias b -file c-b.cert")
+ .shouldContain("Warning")
+ .shouldMatch("The input.*512-bit RSA key.*risk")
+ .shouldNotContain("[no]");
+
+ reStore();
+ gencert("b-a", "");
+
+ cat("c-b-a.cert", "b-a.cert", "c-b.cert");
+
+ kt("-printcert -file c-b-a.cert")
+ .shouldContain("Warning")
+ .shouldMatch("The certificate #2 of 2.*512-bit RSA key.*risk");
+
+ kt("-delete -alias b");
+
+ kt("-importcert -alias a -file c-b-a.cert")
+ .shouldContain("Warning")
+ .shouldMatch("Reply #2 of 2.*512-bit RSA key.*risk")
+ .shouldNotContain("[no]");
+
+ kt("-delete -alias c");
+ kt("-importcert -alias a -file c-b-a.cert", "no")
+ .shouldContain("Top-level certificate in reply:")
+ .shouldContain("512-bit RSA key (weak)")
+ .shouldContain("Warning")
+ .shouldMatch("Reply #2 of 2.*512-bit RSA key.*risk")
+ .shouldContain("Install reply anyway?");
+ kt("-importcert -alias a -file c-b-a.cert -noprompt")
+ .shouldContain("Warning")
+ .shouldMatch("Reply #2 of 2.*512-bit RSA key.*risk")
+ .shouldNotContain("[no]");
+
+ reStore();
+ }
+
+ private static void cat(String dest, String... src) throws IOException {
+ System.out.println("---------------------------------------------");
+ System.out.printf("$ cat ");
+
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ for (String s : src) {
+ System.out.printf(s + " ");
+ bout.write(Files.readAllBytes(Paths.get(s)));
+ }
+ Files.write(Paths.get(dest), bout.toByteArray());
+ System.out.println("> " + dest);
+ }
+
+ static void checkGenCRL(String alias, String options, String bad) {
+
+ OutputAnalyzer oa = kt("-gencrl -alias " + alias
+ + " -id 1 -file " + alias + ".crl " + options);
+ if (bad == null) {
+ oa.shouldNotContain("Warning");
+ } else {
+ oa.shouldContain("Warning")
+ .shouldMatch("The generated CRL.*" + bad + ".*risk");
+ }
+
+ oa = kt("-printcrl -file " + alias + ".crl");
+ if (bad == null) {
+ oa.shouldNotContain("Warning")
+ .shouldContain("Verified by " + alias + " in keystore")
+ .shouldNotContain("(weak");
+ } else {
+ oa.shouldContain("Warning:")
+ .shouldMatch("The CRL.*" + bad + ".*risk")
+ .shouldContain("Verified by " + alias + " in keystore")
+ .shouldContain(bad + " (weak)");
+ }
+ }
+
+ static void checkCertReq(
+ String alias, String options, String bad) {
+
+ OutputAnalyzer oa = certreq(alias, options);
+ if (bad == null) {
+ oa.shouldNotContain("Warning");
+ } else {
+ oa.shouldContain("Warning")
+ .shouldMatch("The generated certificate request.*" + bad + ".*risk");
+ }
+
+ oa = kt("-printcertreq -file " + alias + ".req");
+ if (bad == null) {
+ oa.shouldNotContain("Warning")
+ .shouldNotContain("(weak)");
+ } else {
+ oa.shouldContain("Warning")
+ .shouldMatch("The certificate request.*" + bad + ".*risk")
+ .shouldContain(bad + " (weak)");
+ }
+ }
+
+ static void checkGenKeyPair(
+ String alias, String options, String bad) {
+
+ OutputAnalyzer oa = genkeypair(alias, options);
+ if (bad == null) {
+ oa.shouldNotContain("Warning");
+ } else {
+ oa.shouldContain("Warning")
+ .shouldMatch("The generated certificate.*" + bad + ".*risk");
+ }
+
+ oa = kt("-exportcert -alias " + alias + " -file " + alias + ".cert");
+ if (bad == null) {
+ oa.shouldNotContain("Warning");
+ } else {
+ oa.shouldContain("Warning")
+ .shouldMatch("The certificate.*" + bad + ".*risk");
+ }
+
+ oa = kt("-exportcert -rfc -alias " + alias + " -file " + alias + ".cert");
+ if (bad == null) {
+ oa.shouldNotContain("Warning");
+ } else {
+ oa.shouldContain("Warning")
+ .shouldMatch("The certificate.*" + bad + ".*risk");
+ }
+
+ oa = kt("-printcert -rfc -file " + alias + ".cert");
+ if (bad == null) {
+ oa.shouldNotContain("Warning");
+ } else {
+ oa.shouldContain("Warning")
+ .shouldMatch("The certificate.*" + bad + ".*risk");
+ }
+
+ oa = kt("-list -alias " + alias);
+ if (bad == null) {
+ oa.shouldNotContain("Warning");
+ } else {
+ oa.shouldContain("Warning")
+ .shouldMatch("The certificate.*" + bad + ".*risk");
+ }
+
+ // With cert content
+
+ oa = kt("-printcert -file " + alias + ".cert");
+ if (bad == null) {
+ oa.shouldNotContain("Warning");
+ } else {
+ oa.shouldContain("Warning")
+ .shouldContain(bad + " (weak)")
+ .shouldMatch("The certificate.*" + bad + ".*risk");
+ }
+
+ oa = kt("-list -v -alias " + alias);
+ if (bad == null) {
+ oa.shouldNotContain("Warning");
+ } else {
+ oa.shouldContain("Warning")
+ .shouldContain(bad + " (weak)")
+ .shouldMatch("The certificate.*" + bad + ".*risk");
+ }
+ }
+
+ // This is slow, but real keytool process is launched.
+ static OutputAnalyzer kt1(String cmd, String... input) {
+ cmd = "-keystore ks -storepass changeit " +
+ "-keypass changeit " + cmd;
+ System.out.println("---------------------------------------------");
+ try {
+ SecurityTools.setResponse(input);
+ return SecurityTools.keytool(cmd);
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ // Fast keytool execution by directly calling its main() method
+ static OutputAnalyzer kt(String cmd, String... input) {
+ PrintStream out = System.out;
+ PrintStream err = System.err;
+ InputStream ins = System.in;
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ ByteArrayOutputStream berr = new ByteArrayOutputStream();
+ boolean succeed = true;
+ try {
+ cmd = "-keystore ks -storepass changeit " +
+ "-keypass changeit " + cmd;
+ System.out.println("---------------------------------------------");
+ System.out.println("$ keytool " + cmd);
+ System.out.println();
+ String feed = "";
+ if (input.length > 0) {
+ feed = Stream.of(input).collect(Collectors.joining("\n")) + "\n";
+ }
+ System.setIn(new ByteArrayInputStream(feed.getBytes()));
+ System.setOut(new PrintStream(bout));
+ System.setErr(new PrintStream(berr));
+ sun.security.tools.keytool.Main.main(
+ cmd.trim().split("\\s+"));
+ } catch (Exception e) {
+ // Might be a normal exception when -debug is on or
+ // SecurityException (thrown by jtreg) when System.exit() is called
+ if (!(e instanceof SecurityException)) {
+ e.printStackTrace();
+ }
+ succeed = false;
+ } finally {
+ System.setOut(out);
+ System.setErr(err);
+ System.setIn(ins);
+ }
+ String sout = new String(bout.toByteArray());
+ String serr = new String(berr.toByteArray());
+ System.out.println("STDOUT:\n" + sout + "\nSTDERR:\n" + serr);
+ if (!succeed) {
+ throw new RuntimeException();
+ }
+ return new OutputAnalyzer(sout, serr);
+ }
+
+ static OutputAnalyzer genkeypair(String alias, String options) {
+ return kt("-genkeypair -alias " + alias + " -dname CN=" + alias
+ + " -keyalg RSA -storetype JKS " + options);
+ }
+
+ static OutputAnalyzer certreq(String alias, String options) {
+ return kt("-certreq -alias " + alias
+ + " -file " + alias + ".req " + options);
+ }
+
+ static OutputAnalyzer exportcert(String alias) {
+ return kt("-exportcert -alias " + alias + " -file " + alias + ".cert");
+ }
+
+ static OutputAnalyzer gencert(String relation, String options) {
+ int pos = relation.indexOf("-");
+ String issuer = relation.substring(0, pos);
+ String subject = relation.substring(pos + 1);
+ return kt(" -gencert -alias " + issuer + " -infile " + subject
+ + ".req -outfile " + relation + ".cert " + options);
+ }
+
+ static void saveStore() throws IOException {
+ System.out.println("---------------------------------------------");
+ System.out.println("$ cp ks ks2");
+ Files.copy(Paths.get("ks"), Paths.get("ks2"),
+ StandardCopyOption.REPLACE_EXISTING);
+ }
+
+ static void reStore() throws IOException {
+ System.out.println("---------------------------------------------");
+ System.out.println("$ cp ks2 ks");
+ Files.copy(Paths.get("ks2"), Paths.get("ks"),
+ StandardCopyOption.REPLACE_EXISTING);
+ }
+
+ static void rm(String s) throws IOException {
+ System.out.println("---------------------------------------------");
+ System.out.println("$ rm " + s);
+ Files.deleteIfExists(Paths.get(s));
+ }
+}
--- a/jdk/test/sun/util/calendar/zi/tzdata/VERSION Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/util/calendar/zi/tzdata/VERSION Fri Mar 10 09:20:55 2017 -0800
@@ -21,4 +21,4 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-tzdata2016j
+tzdata2017a
--- a/jdk/test/sun/util/calendar/zi/tzdata/africa Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/util/calendar/zi/tzdata/africa Fri Mar 10 09:20:55 2017 -0800
@@ -29,15 +29,15 @@
# tz@iana.org for general use in the future). For more, please see
# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2014-10-31):
+# From Paul Eggert (2017-02-20):
#
# 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.
#
-# Gwillim Law writes that a good source
-# for recent time zone data is the International Air Transport
+# 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,
@@ -54,39 +54,33 @@
# 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 +0:00 through +3:00, respectively,
-# but Mark R V Murray reports that
-# 'SAST' is the official abbreviation for +2:00 in the country of South Africa,
-# 'CAT' is commonly used for +2:00 in countries north of South Africa, and
-# 'WAT' is probably the best name for +1:00, as the common phrase for
+# 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".
-# He has heard of "Western Sahara Time" for +0:00 but can find no reference.
#
-# To make things confusing, 'WAT' seems to have been used for -1:00 long ago;
-# I'd guess that this was because people needed _some_ name for -1:00,
-# and at the time, far west Africa was the only major land area in -1:00.
-# This usage is now obsolete, as the last use of -1:00 on the African
-# mainland seems to have been 1976 in Western Sahara.
-#
-# To summarize, the following abbreviations seem to have some currency:
-# -1:00 WAT West Africa Time (no longer used)
-# 0:00 GMT Greenwich Mean Time
-# 2:00 CAT Central Africa Time
-# 2:00 SAST South Africa Standard Time
-# and Murray suggests the following abbreviation:
-# 1:00 WAT West Africa Time
-# I realize that this leads to 'WAT' being used for both -1:00 and 1:00
-# for times before 1976, but this is the best I can think of
-# until we get more information.
+# 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; corrections are welcome!
-# 2:00 WAST West Africa Summer Time
-# 2:30 BEAT British East Africa Time (no longer used)
-# 2:45 BEAUT British East Africa Unified Time (no longer used)
-# 3:00 CAST Central Africa Summer Time (no longer used)
-# 3:00 SAST South Africa Summer Time (no longer used)
-# 3:00 EAT East Africa Time
+# +02 WAST West Africa Summer Time
+# +03 CAST Central Africa Summer Time (no longer used)
+# +03 SAST South Africa Summer Time (no longer used)
+# +03 EAT East Africa Time
+# 'EAT' also seems to have caught on; the others are rare but are paired
+# with better-attested non-DST abbreviations.
# Algeria
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -144,17 +138,17 @@
# Cape Verde / Cabo Verde
#
-# Shanks gives 1907 for the transition to CVT.
+# Shanks gives 1907 for the transition to +02.
# Perhaps the 1911-05-26 Portuguese decree
-# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
# merely made it official?
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia
- -2:00 - CVT 1942 Sep
- -2:00 1:00 CVST 1945 Oct 15
- -2:00 - CVT 1975 Nov 25 2:00
- -1:00 - CVT
+ -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.
@@ -411,7 +405,7 @@
Rule Ghana 1920 1942 - Dec 31 0:00 0 GMT
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Accra -0:00:52 - LMT 1918
- 0:00 Ghana %s
+ 0:00 Ghana GMT/+0020
# Guinea
# See Africa/Abidjan.
@@ -420,20 +414,20 @@
#
# Shanks gives 1911-05-26 for the transition to WAT,
# evidently confusing the date of the Portuguese decree
-# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
# with the date that it took effect, namely 1912-01-01.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1
- -1:00 - WAT 1975
+ -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 - BEAT 1940
- 2:45 - BEAUT 1960
+ 2:30 - +0230 1940
+ 2:45 - +0245 1960
3:00 - EAT
Link Africa/Nairobi Africa/Addis_Ababa # Ethiopia
Link Africa/Nairobi Africa/Asmara # Eritrea
@@ -460,7 +454,7 @@
# 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 - LRT 1972 May # Liberia Time
+ -0:44:30 - -004430 1972 May
0:00 - GMT
###############################################################################
@@ -619,7 +613,7 @@
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 MU%sT # Mauritius Time
+ 4:00 Mauritius +04/+05
# Agalega Is, Rodriguez
# no information; probably like Indian/Mauritius
@@ -938,14 +932,14 @@
# since most of it was then controlled by Morocco.
Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan # El Aaiún
- -1:00 - WAT 1976 Apr 14
+ -1:00 - -01 1976 Apr 14
0:00 Morocco WE%sT
# Mozambique
#
# Shanks gives 1903-03-01 for the transition to CAT.
# Perhaps the 1911-05-26 Portuguese decree
-# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
# merely made it official?
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -972,16 +966,19 @@
# the country are close to 40 minutes earlier in sunrise than the rest
# of the country.
#
-# From Paul Eggert (2007-03-31):
-# Apparently the Caprivi Strip informally observes Botswana time, but
-# we have no details. In the meantime people there can use Africa/Gaborone.
+# 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.
+# http://www.namibian.com.na/51480/read/Time-change-divides-lawmakers
# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Namibia 1994 max - Sep Sun>=1 2:00 1:00 S
Rule Namibia 1995 max - Apr Sun>=1 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
- 1:30 - SWAT 1903 Mar # SW Africa Time
+ 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
@@ -1008,7 +1005,7 @@
# Réunion
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
- 4:00 - RET # Réunion Time
+ 4:00 - +04
#
# Crozet Islands also observes Réunion time; see the 'antarctica' file.
#
@@ -1043,7 +1040,7 @@
# Seychelles
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
- 4:00 - SCT # Seychelles Time
+ 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
--- a/jdk/test/sun/util/calendar/zi/tzdata/antarctica Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/util/calendar/zi/tzdata/antarctica Fri Mar 10 09:20:55 2017 -0800
@@ -133,7 +133,8 @@
# O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
# Prat, -6230-05941
# Villa Las Estrellas (a town), around the Frei base, since 1984-04-09
-# These locations have always used Santiago time; use TZ='America/Santiago'.
+# 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
--- a/jdk/test/sun/util/calendar/zi/tzdata/asia Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/util/calendar/zi/tzdata/asia Fri Mar 10 09:20:55 2017 -0800
@@ -29,15 +29,15 @@
# tz@iana.org for general use in the future). For more, please see
# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2015-08-08):
+# From Paul Eggert (2017-01-13):
#
# 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.
#
-# Gwillim Law writes that a good source
-# for recent time zone data is the International Air Transport
+# 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,
@@ -58,29 +58,24 @@
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
-# I invented the abbreviations marked '*' in the following table;
-# the rest are from earlier versions of this file, or from other sources.
-# Corrections are welcome!
+# The following alphabetic abbreviations appear in these tables:
# std dst
# LMT Local Mean Time
# 2:00 EET EEST Eastern European Time
# 2:00 IST IDT Israel
-# 3:00 AST ADT Arabia*
-# 3:30 IRST IRDT Iran*
-# 4:00 GST Gulf*
# 5:30 IST India
-# 7:00 ICT Indochina, most times and locations*
# 7:00 WIB west Indonesia (Waktu Indonesia Barat)
# 8:00 WITA central Indonesia (Waktu Indonesia Tengah)
# 8:00 CST China
-# 8:00 IDT Indochina, 1943-45, 1947-55, 1960-75 (some locations)*
-# 8:00 JWST Western Standard Time (Japan, 1896/1937)*
-# 8:30 KST KDT Korea when at +0830*
-# 9:00 JCST Central Standard Time (Japan, 1896/1937)
+# 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
+# Otherwise, these tables typically use numeric abbreviations like +03
+# and +0330 for integer hour and minute UTC 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.
@@ -88,7 +83,7 @@
# 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). The names for time zones are guesses.
+# Worldwide Edition).
###############################################################################
@@ -109,8 +104,8 @@
# Afghanistan
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Kabul 4:36:48 - LMT 1890
- 4:00 - AFT 1945
- 4:30 - AFT
+ 4:00 - +04 1945
+ 4:30 - +0430
# Armenia
# From Paul Eggert (2006-03-22):
@@ -253,18 +248,17 @@
# 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 - BURT 1942 May 15 # Burma Time
- 5:30 - IST 1942 Sep
- 6:30 - BURT 1951 Sep 30
- 6:00 - DACT 1971 Mar 26 # Dacca Time
- 6:00 - BDT 2009
- 6:00 Dhaka BD%sT
+ 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 - IST 1987 Oct
- 6:00 - BTT # Bhutan Time
+ 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
@@ -274,14 +268,14 @@
# then contained the Chagos Archipelago).
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Chagos 4:49:40 - LMT 1907
- 5:00 - IOT 1996 # BIOT Time
- 6:00 - IOT
+ 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 - BNT 1933
- 8:00 - BNT
+ 7:30 - +0730 1933
+ 8:00 - +08
# Burma / Myanmar
@@ -290,9 +284,9 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Yangon 6:24:40 - LMT 1880 # or Rangoon
6:24:40 - RMT 1920 # Rangoon Mean Time?
- 6:30 - BURT 1942 May # Burma Time
- 9:00 - JST 1945 May 3
- 6:30 - MMT # Myanmar Time
+ 6:30 - +0630 1942 May
+ 9:00 - +09 1945 May 3
+ 6:30 - +0630
# Cambodia
# See Asia/Bangkok.
@@ -355,7 +349,7 @@
# (could be true), for the moment I am assuming that those two
# counties are mistakes in the astro.com data.
-# From Paul Eggert (2014-06-30):
+# From Paul Eggert (2017-01-05):
# Alois Treindl kindly sent me translations of the following two sources:
#
# (1)
@@ -413,28 +407,26 @@
# mainly observed in coastal areas), the five zones were:
#
# Changbai Time ("Long-white Time", Long-white = Heilongjiang area) UT +08:30
-# Asia/Harbin (currently a link to Asia/Shanghai)
+# 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
-# Asia/Shanghai
+# Now part of Asia/Shanghai.
# most of China
-# This currently represents most other zones as well,
-# as apparently these regions have been the same since 1970.
# Milne gives 8:05:43.2 for Xujiahui Observatory time; round to nearest.
# Guo says Shanghai switched to UT +08 "from the end of the 19th century".
#
-# Long-shu Time (probably due to Long and Shu being two names of the area) UT +07
-# Asia/Chongqing (currently a link to Asia/Shanghai)
+# 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; west Qinghai; and the Guangdong
+# 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
-# Asia/Urumqi
-# This currently represents Kunlun Time as well,
-# as apparently the two regions have been the same since 1970.
+# 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;
@@ -445,7 +437,7 @@
# Fukang, Kuitun, Kumukuli, Miquan, Qitai, and Turfan.
#
# Kunlun Time UT +05:30
-# Asia/Kashgar (currently a link to Asia/Urumqi)
+# 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,
@@ -546,7 +538,7 @@
# Xinjiang time, used by many in western China; represented by Ürümqi / Ürümchi
# / Wulumuqi. (Please use Asia/Shanghai if you prefer Beijing time.)
Zone Asia/Urumqi 5:50:20 - LMT 1928
- 6:00 - XJT
+ 6:00 - +06
# Hong Kong (Xianggang)
@@ -765,30 +757,29 @@
# 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 - JWST 1937 Oct 1
+ 8:00 - CST 1937 Oct 1
9:00 - JST 1945 Sep 21 1:00
8:00 Taiwan C%sT
# Macau (Macao, Aomen)
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Macau 1961 1962 - Mar Sun>=16 3:30 1:00 S
-Rule Macau 1961 1964 - Nov Sun>=1 3:30 0 -
-Rule Macau 1963 only - Mar Sun>=16 0:00 1:00 S
-Rule Macau 1964 only - Mar Sun>=16 3:30 1:00 S
-Rule Macau 1965 only - Mar Sun>=16 0:00 1:00 S
-Rule Macau 1965 only - Oct 31 0:00 0 -
-Rule Macau 1966 1971 - Apr Sun>=16 3:30 1:00 S
-Rule Macau 1966 1971 - Oct Sun>=16 3:30 0 -
-Rule Macau 1972 1974 - Apr Sun>=15 0:00 1:00 S
-Rule Macau 1972 1973 - Oct Sun>=15 0:00 0 -
-Rule Macau 1974 1977 - Oct Sun>=15 3:30 0 -
-Rule Macau 1975 1977 - Apr Sun>=15 3:30 1:00 S
-Rule Macau 1978 1980 - Apr Sun>=15 0:00 1:00 S
-Rule Macau 1978 1980 - Oct Sun>=15 0:00 0 -
+Rule Macau 1961 1962 - Mar Sun>=16 3:30 1:00 D
+Rule Macau 1961 1964 - Nov Sun>=1 3:30 0 S
+Rule Macau 1963 only - Mar Sun>=16 0:00 1:00 D
+Rule Macau 1964 only - Mar Sun>=16 3:30 1:00 D
+Rule Macau 1965 only - Mar Sun>=16 0:00 1:00 D
+Rule Macau 1965 only - Oct 31 0:00 0 S
+Rule Macau 1966 1971 - Apr Sun>=16 3:30 1:00 D
+Rule Macau 1966 1971 - Oct Sun>=16 3:30 0 S
+Rule Macau 1972 1974 - Apr Sun>=15 0:00 1:00 D
+Rule Macau 1972 1973 - Oct Sun>=15 0:00 0 S
+Rule Macau 1974 1977 - Oct Sun>=15 3:30 0 S
+Rule Macau 1975 1977 - Apr Sun>=15 3:30 1:00 D
+Rule Macau 1978 1980 - Apr Sun>=15 0:00 1:00 D
+Rule Macau 1978 1980 - Oct Sun>=15 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Macau 7:34:20 - LMT 1912 Jan 1
- 8:00 Macau MO%sT 1999 Dec 20 # return to China
- 8:00 PRC C%sT
+ 8:00 Macau C%sT
###############################################################################
@@ -904,11 +895,10 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Dili 8:22:20 - LMT 1912 Jan 1
- 8:00 - TLT 1942 Feb 21 23:00 # E Timor Time
- 9:00 - JST 1945 Sep 23
- 9:00 - TLT 1976 May 3
- 8:00 - WITA 2000 Sep 17 0:00
- 9:00 - TLT
+ 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
@@ -923,9 +913,9 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata
5:53:20 - HMT 1941 Oct # Howrah Mean Time?
- 6:30 - BURT 1942 May 15 # Burma Time
+ 6:30 - +0630 1942 May 15
5:30 - IST 1942 Sep
- 5:30 1:00 IST 1945 Oct 15
+ 5:30 1:00 +0630 1945 Oct 15
5:30 - IST
# The following are like Asia/Kolkata:
# Andaman Is
@@ -976,33 +966,33 @@
# Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
# but this must be a typo.
7:07:12 - BMT 1923 Dec 31 23:47:12 # Batavia
- 7:20 - JAVT 1932 Nov # Java Time
- 7:30 - WIB 1942 Mar 23
- 9:00 - JST 1945 Sep 23
- 7:30 - WIB 1948 May
- 8:00 - WIB 1950 May
- 7:30 - WIB 1964
+ 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 - WIB 1942 Jan 29
- 9:00 - JST 1945 Sep 23
- 7:30 - WIB 1948 May
- 8:00 - WIB 1950 May
- 7:30 - WIB 1964
+ 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 - WITA 1942 Feb 9
- 9:00 - JST 1945 Sep 23
+ 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 - WIT 1944 Sep 1
- 9:30 - ACST 1964
+ 9:00 - +09 1944 Sep 1
+ 9:30 - +0930 1964
9:00 - WIT
# Iran
@@ -1034,8 +1024,6 @@
# 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....
-# I have also changed the abbreviations to what is considered correct
-# here in Iran, IRST for regular time and IRDT for daylight saving time.
#
# From Roozbeh Pournader (2005-04-05):
# The text of the Iranian law, in effect since 1925, clearly mentions
@@ -1142,9 +1130,9 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tehran 3:25:44 - LMT 1916
3:25:44 - TMT 1946 # Tehran Mean Time
- 3:30 - IRST 1977 Nov
- 4:00 Iran IR%sT 1979
- 3:30 Iran IR%sT
+ 3:30 - +0330 1977 Nov
+ 4:00 Iran +04/+05 1979
+ 3:30 Iran +0330/+0430
# Iraq
@@ -1187,8 +1175,8 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Baghdad 2:57:40 - LMT 1890
2:57:36 - BMT 1918 # Baghdad Mean Time?
- 3:00 - AST 1982 May
- 3:00 Iraq A%sT
+ 3:00 - +03 1982 May
+ 3:00 Iraq +03/+04
###############################################################################
@@ -1487,8 +1475,6 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
- 9:00 - JST 1896 Jan 1
- 9:00 - JCST 1937 Oct 1
9:00 Japan J%sT
# Since 1938, all Japanese possessions have been like Asia/Tokyo.
@@ -1764,7 +1750,23 @@
# 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 Paul Eggert (2016-11-07):
+# 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 Paul Eggert (2016-12-06):
# The tables below reflect Golosunov's remarks, with exceptions as noted.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1794,7 +1796,7 @@
6:00 - +06
# The following zone is like Asia/Qyzylorda except for being one
# hour earlier from 1991-09-29 to 1992-03-29. The 1991/2 rules for
-# Qostenay are unclear partly because of the 1997 Turgai
+# Qostanay are unclear partly because of the 1997 Turgai
# reorganization, so this zone is commented out for now.
#Zone Asia/Qostanay 4:14:20 - LMT 1924 May 2
# 4:00 - +04 1930 Jun 21
@@ -1831,7 +1833,7 @@
# 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
- 4:00 - +04 1930 Jun 21
+ 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
@@ -1843,7 +1845,7 @@
# 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
- 4:00 - +04 1930 Jun 21
+ 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
@@ -1949,14 +1951,12 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Seoul 8:27:52 - LMT 1908 Apr 1
8:30 - KST 1912 Jan 1
- 9:00 - JCST 1937 Oct 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 - JCST 1937 Oct 1
9:00 - JST 1945 Aug 24
9:00 - KST 2015 Aug 15 00:00
8:30 - KST
@@ -2011,30 +2011,29 @@
# 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 - MALT 1933 Jan 1 # Malaya Time
- 7:00 0:20 MALST 1936 Jan 1
- 7:20 - MALT 1941 Sep 1
- 7:30 - MALT 1942 Feb 16
- 9:00 - JST 1945 Sep 12
- 7:30 - MALT 1982 Jan 1
- 8:00 - MYT # Malaysia Time
+ 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 - BORT 1933 # Borneo Time
- 8:00 NBorneo BOR%sT 1942 Feb 16
- 9:00 - JST 1945 Sep 12
- 8:00 - BORT 1982 Jan 1
- 8:00 - MYT
+ 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 # Male
4:54:00 - MMT 1960 # Male Mean Time
- 5:00 - MVT # Maldives Time
+ 5:00 - +05
# Mongolia
@@ -2161,37 +2160,41 @@
# 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 S
Rule Mongol 1984 1998 - Sep lastSun 0:00 0 -
# IATA SSIM (1999-09) says Mongolia no longer observes DST.
Rule Mongol 2001 only - Apr lastSat 2:00 1:00 S
Rule Mongol 2001 2006 - Sep lastSat 2:00 0 -
Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 S
-Rule Mongol 2015 max - Mar lastSat 2:00 1:00 S
-Rule Mongol 2015 max - Sep lastSat 0:00 0 -
+Rule Mongol 2015 2016 - Mar lastSat 2:00 1:00 S
+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 - HOVT 1978 # Hovd Time
- 7:00 Mongol HOV%sT
+ 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 - ULAT 1978 # Ulaanbaatar Time
- 8:00 Mongol ULA%sT
+ 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 - ULAT 1978
- 8:00 - ULAT 1983 Apr
- 9:00 Mongol CHO%sT 2008 Mar 31 # Choibalsan Time
- 8:00 Mongol CHO%sT
+ 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 - IST 1986
- 5:45 - NPT # Nepal Time
+ 5:30 - +0530 1986
+ 5:45 - +0545
# Oman
# See Asia/Dubai.
@@ -2340,10 +2343,10 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Karachi 4:28:12 - LMT 1907
- 5:30 - IST 1942 Sep
- 5:30 1:00 IST 1945 Oct 15
- 5:30 - IST 1951 Sep 30
- 5:00 - KART 1971 Mar 26 # Karachi Time
+ 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
@@ -2708,15 +2711,15 @@
# 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 PH%sT 1942 May
- 9:00 - JST 1944 Nov
- 8:00 Phil PH%sT
+ 8:00 Phil +08/+09 1942 May
+ 9:00 - +09 1944 Nov
+ 8:00 Phil +08/+09
# Qatar
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha
- 4:00 - GST 1972 Jun
- 3:00 - AST
+ 4:00 - +04 1972 Jun
+ 3:00 - +03
Link Asia/Qatar Asia/Bahrain
# Saudi Arabia
@@ -2743,7 +2746,7 @@
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Riyadh 3:06:52 - LMT 1947 Mar 14
- 3:00 - AST
+ 3:00 - +03
Link Asia/Riyadh Asia/Aden # Yemen
Link Asia/Riyadh Asia/Kuwait
@@ -2753,14 +2756,13 @@
# 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 - MALT 1933 Jan 1 # Malaya Time
- 7:00 0:20 MALST 1936 Jan 1
- 7:20 - MALT 1941 Sep 1
- 7:30 - MALT 1942 Feb 16
- 9:00 - JST 1945 Sep 12
- 7:30 - MALT 1965 Aug 9 # independence
- 7:30 - SGT 1982 Jan 1 # Singapore Time
- 8:00 - SGT
+ 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
@@ -2819,8 +2821,8 @@
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 +0530/+06 1942 Sep
- 5:30 1:00 +0530/+0630 1945 Oct 16 2:00
+ 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
@@ -3002,7 +3004,7 @@
# 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 - ICT
+ 7:00 - +07
Link Asia/Bangkok Asia/Phnom_Penh # Cambodia
Link Asia/Bangkok Asia/Vientiane # Laos
@@ -3018,7 +3020,7 @@
# United Arab Emirates
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Dubai 3:41:12 - LMT 1920
- 4:00 - GST
+ 4:00 - +04
Link Asia/Dubai Asia/Muscat # Oman
# Uzbekistan
@@ -3091,15 +3093,15 @@
# 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
- 7:00 - ICT 1942 Dec 31 23:00
- 8:00 - IDT 1945 Mar 14 23:00
- 9:00 - JST 1945 Sep 2
- 7:00 - ICT 1947 Apr 1
- 8:00 - IDT 1955 Jul 1
- 7:00 - ICT 1959 Dec 31 23:00
- 8:00 - IDT 1975 Jun 13
- 7:00 - ICT
+ 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
# Yemen
# See Asia/Riyadh.
--- a/jdk/test/sun/util/calendar/zi/tzdata/australasia Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/util/calendar/zi/tzdata/australasia Fri Mar 10 09:20:55 2017 -0800
@@ -67,8 +67,8 @@
8:00 Aus AW%sT 1943 Jul
8:00 AW AW%sT
Zone Australia/Eucla 8:35:28 - LMT 1895 Dec
- 8:45 Aus ACW%sT 1943 Jul
- 8:45 AW ACW%sT
+ 8:45 Aus +0845/+0945 1943 Jul
+ 8:45 AW +0845/+0945
# Queensland
#
@@ -235,7 +235,8 @@
Rule LH 2008 max - Oct Sun>=1 2:00 0:30 D
Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
10:00 - AEST 1981 Mar
- 10:30 LH LH%sT
+ 10:30 LH +1030/+1130 1985 Jul
+ 10:30 LH +1030/+11
# Australian miscellany
#
@@ -273,19 +274,19 @@
0 - -00 1948 Mar 25
10:00 Aus AE%sT 1967
10:00 AT AE%sT 2010 Apr 4 3:00
- 11:00 - MIST # Macquarie I Standard Time
+ 11:00 - +11
# Christmas
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Christmas 7:02:52 - LMT 1895 Feb
- 7:00 - CXT # Christmas Island Time
+ 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 - CCT # Cocos Islands Time
+ 6:30 - +0630
# Fiji
@@ -398,16 +399,16 @@
Rule Fiji 2015 max - Jan Sun>=15 3:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
- 12:00 Fiji FJ%sT # Fiji Time
+ 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 - GAMT # Gambier Time
+ -9:00 - -09
Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct
- -9:30 - MART # Marquesas Time
+ -9:30 - -0930
Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete
- -10:00 - TAHT # Tahiti Time
+ -10:00 - -10
# Clipperton (near North America) is administered from French Polynesia;
# it is uninhabited.
@@ -422,15 +423,15 @@
# Kiribati
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
- 12:00 - GILT # Gilbert Is Time
+ 12:00 - +12
Zone Pacific/Enderbury -11:24:20 - LMT 1901
- -12:00 - PHOT 1979 Oct # Phoenix Is Time
- -11:00 - PHOT 1995
- 13:00 - PHOT
+ -12:00 - -12 1979 Oct
+ -11:00 - -11 1995
+ 13:00 - +13
Zone Pacific/Kiritimati -10:29:20 - LMT 1901
- -10:40 - LINT 1979 Oct # Line Is Time
- -10:00 - LINT 1995
- 14:00 - LINT
+ -10:40 - -1040 1979 Oct
+ -10:00 - -10 1995
+ 14:00 - +14
# N Mariana Is
# See Pacific/Guam.
@@ -438,31 +439,31 @@
# Marshall Is
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Majuro 11:24:48 - LMT 1901
- 11:00 - MHT 1969 Oct # Marshall Islands Time
- 12:00 - MHT
+ 11:00 - +11 1969 Oct
+ 12:00 - +12
Zone Pacific/Kwajalein 11:09:20 - LMT 1901
- 11:00 - MHT 1969 Oct
- -12:00 - KWAT 1993 Aug 20 # Kwajalein Time
- 12:00 - MHT
+ 11:00 - +11 1969 Oct
+ -12:00 - -12 1993 Aug 20
+ 12:00 - +12
# Micronesia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Chuuk 10:07:08 - LMT 1901
- 10:00 - CHUT # Chuuk Time
+ 10:00 - +10
Zone Pacific/Pohnpei 10:32:52 - LMT 1901 # Kolonia
- 11:00 - PONT # Pohnpei Time
+ 11:00 - +11
Zone Pacific/Kosrae 10:51:56 - LMT 1901
- 11:00 - KOST 1969 Oct # Kosrae Time
- 12:00 - KOST 1999
- 11:00 - KOST
+ 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 - NRT 1942 Mar 15 # Nauru Time
- 9:00 - JST 1944 Aug 15
- 11:30 - NRT 1979 May
- 12:00 - NRT
+ 11:30 - +1130 1942 Mar 15
+ 9:00 - +09 1944 Aug 15
+ 11:30 - +1130 1979 May
+ 12:00 - +12
# New Caledonia
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -473,7 +474,7 @@
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 NC%sT
+ 11:00 NC +11/+12
###############################################################################
@@ -514,8 +515,8 @@
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 - CHAST 1946 Jan 1
- 12:45 Chatham CHA%sT
+ 12:15 - +1215 1946 Jan 1
+ 12:45 Chatham +1245/+1345
Link Pacific/Auckland Antarctica/McMurdo
@@ -537,8 +538,8 @@
Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 HS
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
- -10:30 - CKT 1978 Nov 12 # Cook Is Time
- -10:00 Cook CK%sT
+ -10:30 - -1030 1978 Nov 12
+ -10:00 Cook -10/-0930
###############################################################################
@@ -546,29 +547,29 @@
# Niue
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Niue -11:19:40 - LMT 1901 # Alofi
- -11:20 - NUT 1951 # Niue Time
- -11:30 - NUT 1978 Oct 1
- -11:00 - NUT
+ -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 - NMT 1951 # Norfolk Mean Time
- 11:30 - NFT 1974 Oct 27 02:00 # Norfolk T.
- 11:30 1:00 NFST 1975 Mar 2 02:00
- 11:30 - NFT 2015 Oct 4 02:00
- 11:00 - NFT
+ 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 8:57:56 - LMT 1901 # Koror
- 9:00 - PWT # Palau Time
+ 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 - PGT # Papua New Guinea Time
+ 10:00 - +10
#
# From Paul Eggert (2014-10-13):
# Base the Bougainville entry on the Arawa-Kieta region, which appears to have
@@ -583,28 +584,26 @@
# 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";
-# abbreviate this as BST. See:
+# 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 - PGT 1942 Jul
- 9:00 - JST 1945 Aug 21
- 10:00 - PGT 2014 Dec 28 2:00
- 11:00 - BST
+ 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 - PNT 1998 Apr 27 0:00
- -8:00 - PST # Pitcairn Standard Time
+ -8:30 - -0830 1998 Apr 27 0:00
+ -8:00 - -08
# American Samoa
Zone Pacific/Pago_Pago 12:37:12 - LMT 1879 Jul 5
-11:22:48 - LMT 1911
- -11:00 - NST 1967 Apr # N=Nome
- -11:00 - BST 1983 Nov 30 # B=Bering
-11:00 - SST # S=Samoa
Link Pacific/Pago_Pago Pacific/Midway # in US minor outlying islands
@@ -685,17 +684,17 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5
-11:26:56 - LMT 1911
- -11:30 - WSST 1950
- -11:00 WS S%sT 2011 Dec 29 24:00 # S=Samoa
- 13:00 WS WS%sT
+ -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 - SBT # Solomon Is Time
+ 11:00 - +11
-# Tokelau Is
+# Tokelau
#
# From Gwillim Law (2011-12-29)
# A correspondent informed me that Tokelau, like Samoa, will be skipping
@@ -716,8 +715,8 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Fakaofo -11:24:56 - LMT 1901
- -11:00 - TKT 2011 Dec 30 # Tokelau Time
- 13:00 - TKT
+ -11:00 - -11 2011 Dec 30
+ 13:00 - +13
# Tonga
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -736,7 +735,7 @@
# Tuvalu
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Funafuti 11:56:52 - LMT 1901
- 12:00 - TVT # Tuvalu Time
+ 12:00 - +12
# US minor outlying islands
@@ -760,10 +759,11 @@
# Johnston
#
-# From Paul Eggert (2014-03-11):
+# 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.
+# 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,
@@ -783,8 +783,6 @@
# 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".
-#
-# See 'northamerica' for Pacific/Johnston.
# Kingman
# uninhabited
@@ -798,7 +796,7 @@
# Wake
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Wake 11:06:28 - LMT 1901
- 12:00 - WAKT # Wake Time
+ 12:00 - +12
# Vanuatu
@@ -811,12 +809,12 @@
Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
- 11:00 Vanuatu VU%sT # Vanuatu Time
+ 11:00 Vanuatu +11/+12
# Wallis and Futuna
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Wallis 12:15:20 - LMT 1901
- 12:00 - WFT # Wallis & Futuna Time
+ 12:00 - +12
###############################################################################
@@ -827,15 +825,15 @@
# tz@iana.org for general use in the future). For more, please see
# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2014-10-31):
+# 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.
#
-# Gwillim Law writes that a good source
-# for recent time zone data is the International Air Transport
+# 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,
@@ -852,28 +850,19 @@
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
-# I invented the abbreviations marked '*' in the following table;
-# the rest are from earlier versions of this file, or from other sources.
+# The following abbreviations are from other sources.
# Corrections are welcome!
# std dst
# LMT Local Mean Time
# 8:00 AWST AWDT Western Australia
-# 8:45 ACWST ACWDT Central Western Australia*
-# 9:00 JST Japan
# 9:30 ACST ACDT Central Australia
# 10:00 AEST AEDT Eastern Australia
+# 10:00 GST Guam through 2000
# 10:00 ChST Chamorro
-# 10:30 LHST LHDT Lord Howe*
-# 11:00 BST Bougainville*
# 11:30 NZMT NZST New Zealand through 1945
# 12:00 NZST NZDT New Zealand 1946-present
-# 12:15 CHAST Chatham through 1945*
-# 12:45 CHAST CHADT Chatham 1946-present*
-# 13:00 WSST WSDT (western) Samoa 2011-present*
-# -11:30 WSST Western Samoa through 1950*
# -11:00 SST Samoa
# -10:00 HST Hawaii
-# - 8:00 PST Pitcairn*
#
# See the 'northamerica' file for Hawaii.
# See the 'southamerica' file for Easter I and the Galápagos Is.
--- a/jdk/test/sun/util/calendar/zi/tzdata/backward Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/util/calendar/zi/tzdata/backward Fri Mar 10 09:20:55 2017 -0800
@@ -119,6 +119,7 @@
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
--- a/jdk/test/sun/util/calendar/zi/tzdata/europe Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/util/calendar/zi/tzdata/europe Fri Mar 10 09:20:55 2017 -0800
@@ -29,15 +29,15 @@
# tz@iana.org for general use in the future). For more, please see
# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2014-10-31):
+# 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.
#
-# Gwillim Law writes that a good source
-# for recent time zone data is the International Air Transport
+# 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,
@@ -79,26 +79,23 @@
# 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 from earlier versions of this file, or from other sources.
-# Corrections are welcome!
-# std dst 2dst
-# LMT Local Mean Time
-# -4:00 AST ADT Atlantic
-# -3:00 WGT WGST Western Greenland*
-# -1:00 EGT EGST Eastern Greenland*
-# 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)*
-# 0:20 NET NEST Netherlands (1937-1940)*
-# 1:00 BST British Standard (1968-1971)
-# 1:00 CET CEST CEMT Central Europe
-# 1:00:14 SET Swedish (1879-1899)*
-# 2:00 EET EEST Eastern Europe
-# 3:00 MSK MSD Moscow
+# 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 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),
# The original six [EU members]: Belgium, France, (West) Germany, Italy,
@@ -498,7 +495,7 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2
- -0:25:21 - DMT 1916 May 21 2:00
+ -0:25:21 - DMT 1916 May 21 2:00 # Dublin MT
-0:25:21 1:00 IST 1916 Oct 1 2:00s
0:00 GB-Eire %s 1921 Dec 6 # independence
0:00 GB-Eire GMT/IST 1940 Feb 25 2:00
@@ -1087,16 +1084,16 @@
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28
- -3:00 - WGT 1980 Apr 6 2:00
- -3:00 EU WG%sT 1996
+ -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 - CGT 1980 Apr 6 2:00
- -2:00 C-Eur CG%sT 1981 Mar 29
- -1:00 EU EG%sT
+ -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 - WGT 1980 Apr 6 2:00
- -3:00 EU WG%sT
+ -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
@@ -1511,7 +1508,7 @@
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 IS%sT 1968 Apr 7 1:00s
+ -1:00 Iceland -01/+00 1968 Apr 7 1:00s
0:00 - GMT
# Italy
@@ -1975,7 +1972,7 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Amsterdam 0:19:32 - LMT 1835
0:19:32 Neth %s 1937 Jul 1
- 0:20 Neth NE%sT 1940 May 16 0:00 # Dutch Time
+ 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
@@ -2192,16 +2189,34 @@
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 # Horta Mean Time
- -2:00 Port AZO%sT 1966 Apr 3 2:00 # Azores Time
- -1:00 Port AZO%sT 1983 Sep 25 1:00s
- -1:00 W-Eur AZO%sT 1992 Sep 27 1:00s
+ -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 AZO%sT
+ -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 # Funchal Mean Time
- -1:00 Port MAD%sT 1966 Apr 3 2:00 # Madeira Time
+ -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
@@ -2559,10 +2574,8 @@
3:00 - MSK
-# From Tim Parenti (2014-07-03):
-# Europe/Simferopol covers...
-# ** **** Crimea, Republic of
-# ** **** Sevastopol
+# 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
@@ -3255,46 +3268,77 @@
# 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
-# For 1917-1919 Whitman gives Apr Sat>=1 - Oct Sat>=1;
-# go with Shanks & Pottenger.
-Rule Spain 1917 only - May 5 23:00s 1:00 S
-Rule Spain 1917 1919 - Oct 6 23:00s 0 -
-Rule Spain 1918 only - Apr 15 23:00s 1:00 S
-Rule Spain 1919 only - Apr 5 23:00s 1:00 S
-# Whitman gives 1921 Feb 28 - Oct 14; go with Shanks & Pottenger.
-Rule Spain 1924 only - Apr 16 23:00s 1:00 S
-# Whitman gives 1924 Oct 14; go with Shanks & Pottenger.
-Rule Spain 1924 only - Oct 4 23:00s 0 -
-Rule Spain 1926 only - Apr 17 23:00s 1:00 S
-# Whitman says no DST in 1929; go with Shanks & Pottenger.
-Rule Spain 1926 1929 - Oct Sat>=1 23:00s 0 -
-Rule Spain 1927 only - Apr 9 23:00s 1:00 S
-Rule Spain 1928 only - Apr 14 23:00s 1:00 S
-Rule Spain 1929 only - Apr 20 23:00s 1:00 S
-# Whitman gives 1937 Jun 16, 1938 Apr 16, 1940 Apr 13;
-# go with Shanks & Pottenger.
-Rule Spain 1937 only - May 22 23:00s 1:00 S
-Rule Spain 1937 1939 - Oct Sat>=1 23:00s 0 -
-Rule Spain 1938 only - Mar 22 23:00s 1:00 S
-Rule Spain 1939 only - Apr 15 23:00s 1:00 S
-Rule Spain 1940 only - Mar 16 23:00s 1:00 S
-# Whitman says no DST 1942-1945; go with Shanks & Pottenger.
-Rule Spain 1942 only - May 2 22:00s 2:00 M # Midsummer
-Rule Spain 1942 only - Sep 1 22:00s 1:00 S
-Rule Spain 1943 1946 - Apr Sat>=13 22:00s 2:00 M
-Rule Spain 1943 only - Oct 3 22:00s 1:00 S
-Rule Spain 1944 only - Oct 10 22:00s 1:00 S
-Rule Spain 1945 only - Sep 30 1:00 1:00 S
-Rule Spain 1946 only - Sep 30 0:00 0 -
+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 - Sep 30 1:00 0 -
-Rule Spain 1974 1975 - Apr Sat>=13 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 1978 - Apr 2 23:00 1:00 S
-Rule Spain 1978 only - Oct 1 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.
Rule SpainAfrica 1967 only - Jun 3 12:00 1:00 S
Rule SpainAfrica 1967 only - Oct 1 0:00 0 -
@@ -3306,11 +3350,11 @@
Rule SpainAfrica 1978 only - Jun 1 0:00 1:00 S
Rule SpainAfrica 1978 only - Aug 4 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Madrid -0:14:44 - LMT 1901 Jan 1 0:00s
- 0:00 Spain WE%sT 1946 Sep 30
+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 1901
+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
@@ -3319,7 +3363,7 @@
1:00 - CET 1986
1:00 EU CE%sT
Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
- -1:00 - CANT 1946 Sep 30 1:00 # Canaries T
+ -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
@@ -3732,7 +3776,7 @@
# 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 - CUT 1924 May 2 # Central Ukraine T
+ 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
--- a/jdk/test/sun/util/calendar/zi/tzdata/leapseconds Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/util/calendar/zi/tzdata/leapseconds Fri Mar 10 09:20:55 2017 -0800
@@ -81,5 +81,5 @@
Leap 2015 Jun 30 23:59:60 + S
Leap 2016 Dec 31 23:59:60 + S
-# Updated through IERS Bulletin C52
-# File expires on: 28 June 2017
+# Updated through IERS Bulletin C53
+# File expires on: 28 December 2017
--- a/jdk/test/sun/util/calendar/zi/tzdata/northamerica Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/util/calendar/zi/tzdata/northamerica Fri Mar 10 09:20:55 2017 -0800
@@ -201,22 +201,6 @@
Zone MST7MDT -7:00 US M%sT
Zone PST8PDT -8:00 US P%sT
-# From Bob Devine (1988-01-28):
-# ...Alaska (and Hawaii) had the timezone names changed in 1967.
-# old new
-# Pacific Standard Time(PST) -same-
-# Yukon Standard Time(YST) -same-
-# Central Alaska S.T. (CAT) Alaska-Hawaii St[an]dard Time (AHST)
-# Nome Standard Time (NT) Bering Standard Time (BST)
-#
-# ...Alaska's timezone lines were redrawn in 1983 to give only 2 tz.
-# The YST zone now covers nearly all of the state, AHST just part
-# of the Aleutian islands. No DST.
-
-# From Paul Eggert (1995-12-19):
-# The tables below use 'NST', not 'NT', for Nome Standard Time.
-# I invented 'CAWT' for Central Alaska War Time.
-
# 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
@@ -273,6 +257,21 @@
# 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".
@@ -328,6 +327,15 @@
# 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
@@ -505,7 +513,7 @@
-8:00 US P%sT
# Alaska
-# AK%sT is the modern abbreviation for -9:00 per USNO.
+# AK%sT is the modern abbreviation for -09 per USNO.
#
# From Paul Eggert (2001-05-30):
# Howse writes that Alaska switched from the Julian to the Gregorian calendar,
@@ -611,10 +619,8 @@
-9:00 US AK%sT
Zone America/Anchorage 14:00:24 - LMT 1867 Oct 18
-9:59:36 - LMT 1900 Aug 20 12:00
- -10:00 - CAT 1942
- -10:00 US CAT/CAWT 1945 Aug 14 23:00u
- -10:00 US CAT/CAPT 1946 # Peace
- -10:00 - CAT 1967 Apr
+ -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
@@ -703,7 +709,6 @@
-10:30 1:00 HDT 1945 Sep 30 2:00
-10:30 - HST 1947 Jun 8 2:00
-10:00 - HST
-Link Pacific/Honolulu Pacific/Johnston
# Now we turn to US areas that have diverged from the consensus since 1970.
@@ -1091,15 +1096,15 @@
################################################################################
-# From Paul Eggert (2014-10-31):
+# 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.
#
-# Gwillim Law writes that a good source
-# for recent time zone data is the International Air Transport
+# 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,
@@ -2757,15 +2762,15 @@
# 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 HD
-Rule Belize 1919 1943 - Feb Sun>=9 0:00 0 S
-Rule Belize 1973 only - Dec 5 0:00 1:00 D
-Rule Belize 1974 only - Feb 9 0:00 0 S
-Rule Belize 1982 only - Dec 18 0:00 1:00 D
-Rule Belize 1983 only - Feb 12 0:00 0 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 C%sT
+ -6:00 Belize %s
# Bermuda
@@ -3037,16 +3042,16 @@
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule DR 1966 only - Oct 30 0:00 1:00 D
-Rule DR 1967 only - Feb 28 0:00 0 S
-Rule DR 1969 1973 - Oct lastSun 0:00 0:30 HD
-Rule DR 1970 only - Feb 21 0:00 0 S
-Rule DR 1971 only - Jan 20 0:00 0 S
-Rule DR 1972 1974 - Jan 21 0:00 0 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 E%sT 1974 Oct 27
+ -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
@@ -3336,8 +3341,8 @@
# 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 - PMST 1987 # Pierre & Miquelon Time
- -3:00 Canada PM%sT
+ -3:00 - -03 1987
+ -3:00 Canada -03/-02
# St Vincent and the Grenadines
# See America/Port_of_Spain.
--- a/jdk/test/sun/util/calendar/zi/tzdata/southamerica Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/util/calendar/zi/tzdata/southamerica Fri Mar 10 09:20:55 2017 -0800
@@ -29,15 +29,15 @@
# tz@iana.org for general use in the future). For more, please see
# the file CONTRIBUTING in the tz distribution.
-# From Paul Eggert (2014-10-31):
+# 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.
#
-# Gwillim Law writes that a good source
-# for recent time zone data is the International Air Transport
+# 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,
@@ -47,32 +47,10 @@
# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
# http://www.jstor.org/stable/1774359
#
-# Earlier editions of these tables used the North American style (e.g. ARST and
-# ARDT for Argentine Standard and Daylight Time), but the following quote
-# suggests that it's better to use European style (e.g. ART and ARST).
-# I suggest the use of _Summer time_ instead of the more cumbersome
-# _daylight-saving time_. _Summer time_ seems to be in general use
-# in Europe and South America.
-# -- E O Cutler, _New York Times_ (1937-02-14), quoted in
-# H L Mencken, _The American Language: Supplement I_ (1960), p 466
-#
-# Earlier editions of these tables also used the North American style
-# for time zones in Brazil, but this was incorrect, as Brazilians say
-# "summer time". Reinaldo Goulart, a São Paulo businessman active in
-# the railroad sector, writes (1999-07-06):
-# The subject of time zones is currently a matter of discussion/debate in
-# Brazil. Let's say that "the Brasília time" is considered the
-# "official time" because Brasília is the capital city.
-# The other three time zones are called "Brasília time "minus one" or
-# "plus one" or "plus two". As far as I know there is no such
-# name/designation as "Eastern Time" or "Central Time".
-# So I invented the following (English-language) abbreviations for now.
-# Corrections are welcome!
-# std dst
-# -2:00 FNT FNST Fernando de Noronha
-# -3:00 BRT BRST Brasília
-# -4:00 AMT AMST Amazon
-# -5:00 ACT ACST Acre
+# These tables use numeric abbreviations like -03 and -0330 for
+# integer hour and minute UTC offsets. Although earlier editions used
+# alphabetic time zone abbreviations, these abbreviations were
+# invented and did not reflect common practice.
###############################################################################
@@ -407,12 +385,6 @@
#
# 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...
-#
-# I'm enclosing a patch that does what I say... regretfully, the San Luis
-# timezone must be called "WART/WARST" even when most of the time (like,
-# right now) WARST == ART... that is, since last Sunday, all the country
-# is using UTC-3, but in my patch, San Luis calls it "WARST" and the rest
-# of the country calls it "ART".
# ...
# From Alexander Krivenyshev (2010-04-09):
@@ -451,11 +423,11 @@
# 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 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 Arg AR%sT
+ -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)
@@ -469,113 +441,113 @@
#
Zone America/Argentina/Cordoba -4:16:48 - LMT 1894 Oct 31
-4:16:48 - CMT 1920 May
- -4:00 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1991 Mar 3
- -4:00 - WART 1991 Oct 20
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 Arg AR%sT
+ -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 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1991 Mar 3
- -4:00 - WART 1991 Oct 20
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 Arg AR%sT 2008 Oct 18
- -3:00 - ART
+ -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 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1991 Mar 3
- -4:00 - WART 1991 Oct 20
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 - ART 2004 Jun 1
- -4:00 - WART 2004 Jun 13
- -3:00 Arg AR%sT
+ -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 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1991 Mar 1
- -4:00 - WART 1991 May 7
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 - ART 2004 Jun 1
- -4:00 - WART 2004 Jun 20
- -3:00 Arg AR%sT 2008 Oct 18
- -3:00 - ART
+ -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 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1991 Mar 1
- -4:00 - WART 1991 May 7
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 - ART 2004 May 31
- -4:00 - WART 2004 Jul 25
- -3:00 Arg AR%sT 2008 Oct 18
- -3:00 - ART
+ -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 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1990 Mar 4
- -4:00 - WART 1990 Oct 28
- -4:00 1:00 WARST 1991 Mar 17
- -4:00 - WART 1991 Oct 6
- -3:00 1:00 ARST 1992
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 Arg AR%sT 2008 Oct 18
- -3:00 - ART
+ -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 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1991 Mar 3
- -4:00 - WART 1991 Oct 20
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 - ART 2004 Jun 1
- -4:00 - WART 2004 Jun 20
- -3:00 Arg AR%sT 2008 Oct 18
- -3:00 - ART
+ -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 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1990 Mar 4
- -4:00 - WART 1990 Oct 15
- -4:00 1:00 WARST 1991 Mar 1
- -4:00 - WART 1991 Oct 15
- -4:00 1:00 WARST 1992 Mar 1
- -4:00 - WART 1992 Oct 18
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 - ART 2004 May 23
- -4:00 - WART 2004 Sep 26
- -3:00 Arg AR%sT 2008 Oct 18
- -3:00 - ART
+ -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)
@@ -584,44 +556,44 @@
Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31
-4:16:48 - CMT 1920 May
- -4:00 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1990
- -3:00 1:00 ARST 1990 Mar 14
- -4:00 - WART 1990 Oct 15
- -4:00 1:00 WARST 1991 Mar 1
- -4:00 - WART 1991 Jun 1
- -3:00 - ART 1999 Oct 3
- -4:00 1:00 WARST 2000 Mar 3
- -3:00 - ART 2004 May 31
- -4:00 - WART 2004 Jul 25
- -3:00 Arg AR%sT 2008 Jan 21
- -4:00 SanLuis WAR%sT 2009 Oct 11
- -3:00 - ART
+ -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 # Córdoba Mean Time
- -4:00 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 - ART 2004 Jun 1
- -4:00 - WART 2004 Jun 20
- -3:00 Arg AR%sT 2008 Oct 18
- -3:00 - ART
+ -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 # Córdoba Mean Time
- -4:00 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1999 Oct 3
- -4:00 Arg AR%sT 2000 Mar 3
- -3:00 - ART 2004 May 30
- -4:00 - WART 2004 Jun 20
- -3:00 Arg AR%sT 2008 Oct 18
- -3:00 - ART
+ -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
@@ -631,7 +603,7 @@
Zone America/La_Paz -4:32:36 - LMT 1890
-4:32:36 - CMT 1931 Oct 15 # Calamarca MT
-4:32:36 1:00 BOST 1932 Mar 21 # Bolivia ST
- -4:00 - BOT # Bolivia Time
+ -4:00 - -04
# Brazil
@@ -983,12 +955,12 @@
#
# Fernando de Noronha (administratively part of PE)
Zone America/Noronha -2:09:40 - LMT 1914
- -2:00 Brazil FN%sT 1990 Sep 17
- -2:00 - FNT 1999 Sep 30
- -2:00 Brazil FN%sT 2000 Oct 15
- -2:00 - FNT 2001 Sep 13
- -2:00 Brazil FN%sT 2002 Oct 1
- -2:00 - FNT
+ -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).
@@ -1001,119 +973,119 @@
# 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 BR%sT 1988 Sep 12
- -3:00 - BRT
+ -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 AM%sT 1988 Sep 12
- -4:00 - AMT 2008 Jun 24 0:00
- -3:00 - BRT
+ -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 BR%sT 1990 Sep 17
- -3:00 - BRT 1999 Sep 30
- -3:00 Brazil BR%sT 2000 Oct 22
- -3:00 - BRT 2001 Sep 13
- -3:00 Brazil BR%sT 2002 Oct 1
- -3:00 - BRT
+ -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 BR%sT 1990 Sep 17
- -3:00 - BRT 1999 Sep 30
- -3:00 Brazil BR%sT 2000 Oct 15
- -3:00 - BRT 2001 Sep 13
- -3:00 Brazil BR%sT 2002 Oct 1
- -3:00 - BRT
+ -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 BR%sT 1990 Sep 17
- -3:00 - BRT 1995 Sep 14
- -3:00 Brazil BR%sT 2003 Sep 24
- -3:00 - BRT 2012 Oct 21
- -3:00 Brazil BR%sT 2013 Sep
- -3:00 - BRT
+ -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 BR%sT 1990 Sep 17
- -3:00 - BRT 1995 Oct 13
- -3:00 Brazil BR%sT 1996 Sep 4
- -3:00 - BRT 1999 Sep 30
- -3:00 Brazil BR%sT 2000 Oct 22
- -3:00 - BRT 2001 Sep 13
- -3:00 Brazil BR%sT 2002 Oct 1
- -3:00 - BRT
+ -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 BR%sT 2003 Sep 24
- -3:00 - BRT 2011 Oct 16
- -3:00 Brazil BR%sT 2012 Oct 21
- -3:00 - BRT
+ -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 BR%sT 1963 Oct 23 0:00
- -3:00 1:00 BRST 1964
- -3:00 Brazil BR%sT
+ -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 AM%sT
+ -4:00 Brazil -04/-03
#
# Mato Grosso (MT)
Zone America/Cuiaba -3:44:20 - LMT 1914
- -4:00 Brazil AM%sT 2003 Sep 24
- -4:00 - AMT 2004 Oct 1
- -4:00 Brazil AM%sT
+ -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 AM%sT 1988 Sep 12
- -4:00 - AMT
+ -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 AM%sT 1988 Sep 12
- -4:00 - AMT 1999 Sep 30
- -4:00 Brazil AM%sT 2000 Oct 15
- -4:00 - AMT
+ -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 AM%sT 1988 Sep 12
- -4:00 - AMT 1993 Sep 28
- -4:00 Brazil AM%sT 1994 Sep 22
- -4:00 - AMT
+ -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 AC%sT 1988 Sep 12
- -5:00 - ACT 1993 Sep 28
- -5:00 Brazil AC%sT 1994 Sep 22
- -5:00 - ACT 2008 Jun 24 0:00
- -4:00 - AMT 2013 Nov 10
- -5:00 - ACT
+ -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 AC%sT 1988 Sep 12
- -5:00 - ACT 2008 Jun 24 0:00
- -4:00 - AMT 2013 Nov 10
- -5:00 - ACT
+ -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
@@ -1258,6 +1230,18 @@
# 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.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Chile 1927 1931 - Sep 1 0:00 1:00 S
Rule Chile 1928 1932 - Apr 1 0:00 0 -
@@ -1298,22 +1282,35 @@
# 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 - CLT 1916 Jul 1 # Chile Time
+ -5:00 - -05 1916 Jul 1
-4:42:46 - SMT 1918 Sep 10
- -4:00 - CLT 1919 Jul 1
+ -4:00 - -04 1919 Jul 1
-4:42:46 - SMT 1927 Sep 1
- -5:00 Chile CL%sT 1932 Sep 1
- -4:00 - CLT 1942 Jun 1
- -5:00 - CLT 1942 Aug 1
- -4:00 - CLT 1946 Jul 15
- -4:00 1:00 CLST 1946 Sep 1 # central Chile
- -4:00 - CLT 1947 Apr 1
- -5:00 - CLT 1947 May 21 23:00
- -4:00 Chile CL%sT
+ -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 EAS%sT 1982 Mar 14 3:00u # Easter Time
- -6:00 Chile EAS%sT
+ -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,
@@ -1333,9 +1330,10 @@
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Palmer 0 - -00 1965
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1982 May
- -4:00 Chile CL%sT
+ -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
@@ -1348,7 +1346,7 @@
# 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 CO%sT # Colombia Time
+ -5:00 CO -05/-04
# Malpelo, Providencia, San Andres
# no information; probably like America/Bogota
@@ -1372,7 +1370,7 @@
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Curacao -4:35:47 - LMT 1912 Feb 12 # Willemstad
- -4:30 - ANT 1965 # Netherlands Antilles Time
+ -4:30 - -0430 1965
-4:00 - AST
# From Arthur David Olson (2011-06-15):
@@ -1387,19 +1385,32 @@
#
# Milne says the Central and South American Telegraph Company used -5:24:15.
#
-# From Paul Eggert (2007-03-04):
-# Apparently Ecuador had a failed experiment with DST in 1992.
-# <http://midena.gov.ec/content/view/1261/208/> (2007-02-27) and
-# <http://www.hoy.com.ec/NoticiaNue.asp?row_id=249856> (2006-11-06) both
-# talk about "hora Sixto". Leave this alone for now, as we have no data.
+# From Alois Treindl (2016-12-15):
+# http://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):
+# http://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 S
+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 - ECT # Ecuador Time
+ -5:00 Ecuador -05/-04
Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
- -5:00 - ECT 1986
- -6:00 - GALT # Galápagos Time
+ -5:00 - -05 1986
+ -6:00 Ecuador -06/-05
# Falklands
@@ -1499,25 +1510,24 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/Stanley -3:51:24 - LMT 1890
-3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
- -4:00 Falk FK%sT 1983 May # Falkland Is Time
- -3:00 Falk FK%sT 1985 Sep 15
- -4:00 Falk FK%sT 2010 Sep 5 2:00
- -3:00 - FKST
+ -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 - GFT 1967 Oct # French Guiana Time
- -3:00 - GFT
+ -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 - GBGT 1966 May 26 # Br Guiana Time
- -3:45 - GYT 1975 Jul 31 # Guyana Time
- -3:00 - GYT 1991
+ -3:45 - -0345 1975 Jul 31
+ -3:00 - -03 1991
# IATA SSIM (1996-06) says -4:00. Assume a 1991 switch.
- -4:00 - GYT
+ -4:00 - -04
# Paraguay
#
@@ -1609,9 +1619,9 @@
# 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 - PYT 1972 Oct # Paraguay Time
- -3:00 - PYT 1974 Apr
- -4:00 Para PY%sT
+ -4:00 - -04 1972 Oct
+ -3:00 - -03 1974 Apr
+ -4:00 Para -04/-03
# Peru
#
@@ -1638,12 +1648,12 @@
# 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 PE%sT # Peru 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 - GST # South Georgia Time
+ -2:00 - -02
# South Sandwich Is
# uninhabited; scientific personnel have wintered
@@ -1653,9 +1663,8 @@
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 - NEGT 1975 Nov 20 # Dutch Guiana Time
- -3:30 - SRT 1984 Oct # Suriname Time
- -3:00 - SRT
+ -3:30 - -0330 1984 Oct
+ -3:00 - -03
# Trinidad and Tobago
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1758,11 +1767,16 @@
# [dated 2015-06-29; repeals Decree 311/006 dated 2006-09-04]
Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 S
Rule Uruguay 2007 2015 - Mar Sun>=8 2:00 0 -
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+
+# This Zone can be simplified once we assume zic %z.
Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28
-3:44:44 - MMT 1920 May 1 # Montevideo MT
- -3:30 Uruguay UY%sT 1942 Dec 14 # Uruguay Time
- -3:00 Uruguay UY%sT
+ -3:30 Uruguay -0330/-03 1942 Dec 14
+ -3:00 Uruguay -03/-02 1968
+ -3:00 Uruguay -03/-0230 1971
+ -3:00 Uruguay -03/-02 1974
+ -3:00 Uruguay -03/-0230 1974 Dec 22
+ -3:00 Uruguay -03/-02
# Venezuela
#
@@ -1796,7 +1810,7 @@
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Caracas -4:27:44 - LMT 1890
-4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time?
- -4:30 - VET 1965 Jan 1 0:00 # Venezuela T.
- -4:00 - VET 2007 Dec 9 3:00
- -4:30 - VET 2016 May 1 2:30
- -4:00 - VET
+ -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/jdk/test/sun/util/calendar/zi/tzdata/zone.tab Tue Mar 07 13:00:23 2017 +0300
+++ b/jdk/test/sun/util/calendar/zi/tzdata/zone.tab Fri Mar 10 09:20:55 2017 -0800
@@ -165,6 +165,7 @@
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
@@ -420,7 +421,6 @@
UA +4837+02218 Europe/Uzhgorod Ruthenia
UA +4750+03510 Europe/Zaporozhye Zaporozh'ye/Zaporizhia; Lugansk/Luhansk (east)
UG +0019+03225 Africa/Kampala
-UM +1645-16931 Pacific/Johnston Johnston Atoll
UM +2813-17722 Pacific/Midway Midway Islands
UM +1917+16637 Pacific/Wake Wake Island
US +404251-0740023 America/New_York Eastern (most areas)