summaryrefslogtreecommitdiff
path: root/src/timezone
diff options
context:
space:
mode:
authorPavan Deolasee2017-06-14 05:42:18 +0000
committerPavan Deolasee2017-06-14 05:42:18 +0000
commit15dd5274c323fb93e4e3ea9ad2185aaaec10f79c (patch)
tree9dafb4c7f735d9429ea461dc792933af87493c33 /src/timezone
parentdfbb88e3bbb526dcb204b456b9e5cfd9d10d0d0a (diff)
parentd5cb3bab564e0927ffac7c8729eacf181a12dd40 (diff)
Merge from PG master upto d5cb3bab564e0927ffac7c8729eacf181a12dd40
This is the result of the "git merge remotes/PGSQL/master" upto the said commit point. We have done some basic analysis, fixed compilation problems etc, but bulk of the logical problems in conflict resolution etc will be handled by subsequent commits.
Diffstat (limited to 'src/timezone')
-rw-r--r--src/timezone/README10
-rw-r--r--src/timezone/data/africa130
-rw-r--r--src/timezone/data/antarctica67
-rw-r--r--src/timezone/data/asia644
-rw-r--r--src/timezone/data/australasia209
-rw-r--r--src/timezone/data/backward2
-rw-r--r--src/timezone/data/backzone152
-rw-r--r--src/timezone/data/etcetera74
-rw-r--r--src/timezone/data/europe709
-rw-r--r--src/timezone/data/factory9
-rw-r--r--src/timezone/data/northamerica160
-rw-r--r--src/timezone/data/southamerica558
-rw-r--r--src/timezone/known_abbrevs.txt192
-rw-r--r--src/timezone/localtime.c103
-rw-r--r--src/timezone/pgtz.c58
-rw-r--r--src/timezone/pgtz.h2
-rw-r--r--src/timezone/private.h77
-rw-r--r--src/timezone/strftime.c15
-rw-r--r--src/timezone/tzfile.h52
-rw-r--r--src/timezone/tznames/Africa.txt2
-rw-r--r--src/timezone/tznames/America.txt112
-rw-r--r--src/timezone/tznames/Antarctica.txt29
-rw-r--r--src/timezone/tznames/Asia.txt151
-rw-r--r--src/timezone/tznames/Atlantic.txt15
-rw-r--r--src/timezone/tznames/Australia12
-rw-r--r--src/timezone/tznames/Australia.txt45
-rw-r--r--src/timezone/tznames/Default391
-rw-r--r--src/timezone/tznames/Etc.txt2
-rw-r--r--src/timezone/tznames/Europe.txt16
-rw-r--r--src/timezone/tznames/Indian.txt27
-rw-r--r--src/timezone/tznames/Pacific.txt114
-rw-r--r--src/timezone/tznames/README12
-rw-r--r--src/timezone/zic.c712
33 files changed, 2478 insertions, 2385 deletions
diff --git a/src/timezone/README b/src/timezone/README
index 1df4ce1f69..912e0c1b39 100644
--- a/src/timezone/README
+++ b/src/timezone/README
@@ -34,6 +34,11 @@ in the same commit. Usually, if a known abbreviation has changed meaning,
the appropriate fix is to make it refer to a long-form zone name instead
of a fixed GMT offset.
+The core regression test suite does some simple validation of the zone
+data and abbreviations data (notably by checking that the pg_timezone_names
+and pg_timezone_abbrevs views don't throw errors). It's worth running it
+as a cross-check on proposed updates.
+
When there has been a new release of Windows (probably including Service
Packs), the list of matching timezones need to be updated. Run the
script in src/tools/win32tzlist.pl on a Windows machine running this new
@@ -45,7 +50,7 @@ match properly on the old version.
Time Zone code
==============
-The code in this directory is currently synced with tzcode release 2016c.
+The code in this directory is currently synced with tzcode release 2017b.
There are many cosmetic (and not so cosmetic) differences from the
original tzcode library, but diffs in the upstream version should usually
be propagated to our version. Here are some notes about that.
@@ -74,6 +79,9 @@ other exposed names.
slightly modified the API of the former, in part because it now relies
on our own pg_open_tzfile() rather than opening files for itself.
+* tzparse() is adjusted to cache the result of loading the TZDEFRULES
+zone, so that that's not repeated more than once per process.
+
* There's a fair amount of code we don't need and have removed,
including all the nonstandard optional APIs. We have also added
a few functions of our own at the bottom of localtime.c.
diff --git a/src/timezone/data/africa b/src/timezone/data/africa
index 50f29d5dd5..dcc20b9b1c 100644
--- a/src/timezone/data/africa
+++ b/src/timezone/data/africa
@@ -6,15 +6,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,
@@ -31,39 +31,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
@@ -119,19 +113,19 @@ Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01
# Cameroon
# See Africa/Lagos.
-# Cape Verde
+# 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.
@@ -388,7 +382,7 @@ Rule Ghana 1920 1942 - Sep 1 0:00 0:20 GHST
Rule Ghana 1920 1942 - Dec 31 0:00 0 GMT
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Accra -0:00:52 - LMT 1918
- 0:00 Ghana %s
+ 0:00 Ghana GMT/+0020
# Guinea
# See Africa/Abidjan.
@@ -397,20 +391,20 @@ Zone Africa/Accra -0:00:52 - LMT 1918
#
# 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
@@ -426,18 +420,25 @@ Link Africa/Nairobi Indian/Mayotte
# See Africa/Johannesburg.
# Liberia
-# From Paul Eggert (2006-03-22):
-# In 1972 Liberia was the last country to switch
-# from a UTC offset that was not a multiple of 15 or 20 minutes.
-# Howse reports that it was in honor of their president's birthday.
-# Shank & Pottenger report the date as May 1, whereas Howse reports Jan;
-# go with Shanks & Pottenger.
-# For Liberia before 1972, Shanks & Pottenger report -0:44, whereas Howse and
-# Whitman each report -0:44:30; go with the more precise figure.
+#
+# From Paul Eggert (2017-03-02):
+#
+# The Nautical Almanac for the Year 1970, p 264, is the source for -0:44:30.
+#
+# In 1972 Liberia was the last country to switch from a UTC offset
+# that was not a multiple of 15 or 20 minutes. The 1972 change was on
+# 1972-01-07, according to an entry dated 1972-01-04 on p 330 of:
+# Presidential Papers: First year of the administration of
+# President William R. Tolbert, Jr., July 23, 1971-July 31, 1972.
+# Monrovia: Executive Mansion.
+#
+# Use the abbreviation "MMT" before 1972, as the more-accurate numeric
+# abbreviation "-004430" would be one byte over the POSIX limit.
+#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Monrovia -0:43:08 - LMT 1882
-0:43:08 - MMT 1919 Mar # Monrovia Mean Time
- -0:44:30 - LRT 1972 May # Liberia Time
+ -0:44:30 - MMT 1972 Jan 7 # approximately MMT
0:00 - GMT
###############################################################################
@@ -464,7 +465,7 @@ Zone Africa/Monrovia -0:43:08 - LMT 1882
# http://www.libyaherald.com/2013/10/24/correction-no-time-change-tomorrow/
#
# From Paul Eggert (2013-10-25):
-# For now, assume they're reverting to the pre-2012 rules of permanent UTC+2.
+# For now, assume they're reverting to the pre-2012 rules of permanent UT +02.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Libya 1951 only - Oct 14 2:00 1:00 S
@@ -596,7 +597,7 @@ Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 S
Rule Mauritius 2009 only - Mar lastSun 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
- 4:00 Mauritius MU%sT # Mauritius Time
+ 4:00 Mauritius +04/+05
# Agalega Is, Rodriguez
# no information; probably like Indian/Mauritius
@@ -915,14 +916,14 @@ Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
# 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]
@@ -949,16 +950,19 @@ Link Africa/Maputo Africa/Lusaka # Zambia
# 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
@@ -985,7 +989,7 @@ Link Africa/Lagos Africa/Porto-Novo # Benin
# Réunion
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
- 4:00 - RET # Réunion Time
+ 4:00 - +04
#
# Crozet Islands also observes Réunion time; see the 'antarctica' file.
#
@@ -1020,7 +1024,7 @@ Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
# 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
diff --git a/src/timezone/data/antarctica b/src/timezone/data/antarctica
index a537832954..3332d66842 100644
--- a/src/timezone/data/antarctica
+++ b/src/timezone/data/antarctica
@@ -10,9 +10,7 @@
# http://www.spri.cam.ac.uk/bob/periant.htm
# for information.
# Unless otherwise specified, we have no time zone information.
-#
-# Except for the French entries,
-# I made up all time zone abbreviations mentioned here; corrections welcome!
+
# FORMAT is '-00' and GMTOFF is 0 for locations while uninhabited.
# Argentina - year-round bases
@@ -29,7 +27,7 @@
# previously sealers and scientific personnel wintered
# Margaret Turner reports
# http://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html
-# (1999-09-30) that they're UTC+5, with no DST;
+# (1999-09-30) that they're UT +05, with no DST;
# presumably this is when they have visitors.
#
# year-round bases
@@ -66,25 +64,29 @@
# Background:
# http://www.timeanddate.com/news/time/antartica-time-changes-2010.html
+# From Steffen Thorsen (2016-10-28):
+# Australian Antarctica Division informed us that Casey changed time
+# zone to UTC+11 in "the morning of 22nd October 2016".
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Casey 0 - -00 1969
- 8:00 - AWST 2009 Oct 18 2:00
- # Australian Western Std Time
- 11:00 - CAST 2010 Mar 5 2:00 # Casey Time
- 8:00 - AWST 2011 Oct 28 2:00
- 11:00 - CAST 2012 Feb 21 17:00u
- 8:00 - AWST
+ 8:00 - +08 2009 Oct 18 2:00
+ 11:00 - +11 2010 Mar 5 2:00
+ 8:00 - +08 2011 Oct 28 2:00
+ 11:00 - +11 2012 Feb 21 17:00u
+ 8:00 - +08 2016 Oct 22
+ 11:00 - +11
Zone Antarctica/Davis 0 - -00 1957 Jan 13
- 7:00 - DAVT 1964 Nov # Davis Time
+ 7:00 - +07 1964 Nov
0 - -00 1969 Feb
- 7:00 - DAVT 2009 Oct 18 2:00
- 5:00 - DAVT 2010 Mar 10 20:00u
- 7:00 - DAVT 2011 Oct 28 2:00
- 5:00 - DAVT 2012 Feb 21 20:00u
- 7:00 - DAVT
+ 7:00 - +07 2009 Oct 18 2:00
+ 5:00 - +05 2010 Mar 10 20:00u
+ 7:00 - +07 2011 Oct 28 2:00
+ 5:00 - +05 2012 Feb 21 20:00u
+ 7:00 - +07
Zone Antarctica/Mawson 0 - -00 1954 Feb 13
- 6:00 - MAWT 2009 Oct 18 2:00 # Mawson Time
- 5:00 - MAWT
+ 6:00 - +06 2009 Oct 18 2:00
+ 5:00 - +05
# References:
# Casey Weather (1998-02-26)
# http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html
@@ -108,7 +110,8 @@ Zone Antarctica/Mawson 0 - -00 1954 Feb 13
# 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
@@ -138,7 +141,7 @@ Zone Antarctica/Mawson 0 - -00 1954 Feb 13
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Kerguelen 0 - -00 1950 # Port-aux-Français
- 5:00 - TFT # ISO code TF Time
+ 5:00 - +05
#
# year-round base in the main continent
# Dumont d'Urville, Île des Pétrels, -6640+14001, since 1956-11
@@ -149,9 +152,9 @@ Zone Indian/Kerguelen 0 - -00 1950 # Port-aux-Français
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/DumontDUrville 0 - -00 1947
- 10:00 - PMT 1952 Jan 14 # Port-Martin Time
+ 10:00 - +10 1952 Jan 14
0 - -00 1956 Nov
- 10:00 - DDUT # Dumont-d'Urville Time
+ 10:00 - +10
# France & Italy - year-round base
# Concordia, -750600+1232000, since 2005
@@ -177,7 +180,7 @@ Zone Antarctica/DumontDUrville 0 - -00 1947
# station of Japan, it's appropriate for the principal location.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Syowa 0 - -00 1957 Jan 29
- 3:00 - SYOT # Syowa Time
+ 3:00 - +03
# See:
# NIPR Antarctic Research Activities (1999-08-17)
# http://www.nipr.ac.jp/english/ara01.html
@@ -214,17 +217,17 @@ Zone Antarctica/Syowa 0 - -00 1957 Jan 29
# correct, but they should be quite close to the actual dates.
#
# From Paul Eggert (2014-03-21):
-# The CET-switching Troll rules require zic from tzcode 2014b or later, so as
+# The CET-switching Troll rules require zic from tz 2014b or later, so as
# suggested by Bengt-Inge Larsson comment them out for now, and approximate
# with only UTC and CEST. Uncomment them when 2014b is more prevalent.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-#Rule Troll 2005 max - Mar 1 1:00u 1:00 CET
-Rule Troll 2005 max - Mar lastSun 1:00u 2:00 CEST
-#Rule Troll 2005 max - Oct lastSun 1:00u 1:00 CET
-#Rule Troll 2004 max - Nov 7 1:00u 0:00 UTC
+#Rule Troll 2005 max - Mar 1 1:00u 1:00 +01
+Rule Troll 2005 max - Mar lastSun 1:00u 2:00 +02
+#Rule Troll 2005 max - Oct lastSun 1:00u 1:00 +01
+#Rule Troll 2004 max - Nov 7 1:00u 0:00 +00
# Remove the following line when uncommenting the above '#Rule' lines.
-Rule Troll 2004 max - Oct lastSun 1:00u 0:00 UTC
+Rule Troll 2004 max - Oct lastSun 1:00u 0:00 +00
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Troll 0 - -00 2005 Feb 12
0:00 Troll %s
@@ -265,10 +268,10 @@ Zone Antarctica/Troll 0 - -00 2005 Feb 12
# changes during the year and does not necessarily correspond to mean
# solar noon. So the Vostok time might have been whatever the clocks
# happened to be during their visit. So we still don't really know what time
-# it is at Vostok. But we'll guess UTC+6.
+# it is at Vostok. But we'll guess +06.
#
Zone Antarctica/Vostok 0 - -00 1957 Dec 16
- 6:00 - VOST # Vostok time
+ 6:00 - +06
# S Africa - year-round bases
# Marion Island, -4653+03752
@@ -301,7 +304,7 @@ Zone Antarctica/Vostok 0 - -00 1957 Dec 16
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Rothera 0 - -00 1976 Dec 1
- -3:00 - ROTT # Rothera time
+ -3:00 - -03
# Uruguay - year round base
# Artigas, King George Island, -621104-0585107
diff --git a/src/timezone/data/asia b/src/timezone/data/asia
index 533e2186d2..35774c6d7e 100644
--- a/src/timezone/data/asia
+++ b/src/timezone/data/asia
@@ -6,15 +6,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,
@@ -35,29 +35,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.
@@ -65,7 +60,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).
###############################################################################
@@ -86,8 +81,8 @@ Rule RussiaAsia 1996 2011 - Oct lastSun 2:00s 0 -
# 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):
@@ -116,13 +111,11 @@ Zone Asia/Kabul 4:36:48 - LMT 1890
# http://www.worldtimezone.com/dst_news/dst_news_armenia03.html
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
- 3:00 - YERT 1957 Mar # Yerevan Time
- 4:00 RussiaAsia YER%sT 1991 Mar 31 2:00s
- 3:00 1:00 YERST 1991 Sep 23 # independence
- 3:00 RussiaAsia AM%sT 1995 Sep 24 2:00s
- 4:00 - AMT 1997
- 4:00 RussiaAsia AM%sT 2012 Feb 9
- 4:00 - AMT
+ 3:00 - +03 1957 Mar
+ 4:00 RussiaAsia +04/+05 1991 Mar 31 2:00s
+ 3:00 RussiaAsia +03/+04 1995 Sep 24 2:00s
+ 4:00 - +04 1997
+ 4:00 RussiaAsia +04/+05
# Azerbaijan
@@ -143,13 +136,12 @@ Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 S
Rule Azer 1997 2015 - Oct lastSun 5:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Baku 3:19:24 - LMT 1924 May 2
- 3:00 - BAKT 1957 Mar # Baku Time
- 4:00 RussiaAsia BAK%sT 1991 Mar 31 2:00s
- 3:00 1:00 BAKST 1991 Aug 30 # independence
- 3:00 RussiaAsia AZ%sT 1992 Sep lastSun 2:00s
- 4:00 - AZT 1996 # Azerbaijan Time
- 4:00 EUAsia AZ%sT 1997
- 4:00 Azer AZ%sT
+ 3:00 - +03 1957 Mar
+ 4:00 RussiaAsia +04/+05 1991 Mar 31 2:00s
+ 3:00 RussiaAsia +03/+04 1992 Sep lastSun 2:00s
+ 4:00 - +04 1996
+ 4:00 EUAsia +04/+05 1997
+ 4:00 Azer +04/+05
# Bahrain
# See Asia/Qatar.
@@ -233,18 +225,17 @@ Rule Dhaka 2009 only - Dec 31 24:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Dhaka 6:01:40 - LMT 1890
5:53:20 - HMT 1941 Oct # Howrah Mean Time?
- 6:30 - 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
@@ -254,25 +245,25 @@ Zone Asia/Thimphu 5:58:36 - LMT 1947 Aug 15 # or Thimbu
# 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
# Milne says 6:24:40 was the meridian of the time ball observatory at Rangoon.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Rangoon 6:24:40 - LMT 1880 # or Yangon
+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.
@@ -335,7 +326,7 @@ Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
# (could be true), for the moment I am assuming that those two
# counties are mistakes in the astro.com data.
-# From Paul Eggert (2014-06-30):
+# From Paul Eggert (2017-01-05):
# Alois Treindl kindly sent me translations of the following two sources:
#
# (1)
@@ -383,7 +374,7 @@ Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
# Lewiston (ME) Daily Sun (1939-05-29), p 17, said "Even the time is
# different - the occupied districts going by Tokyo time, an hour
# ahead of that prevailing in the rest of Shanghai." Guess that the
-# Xujiahui Observatory was under French control and stuck with UT+8.
+# Xujiahui Observatory was under French control and stuck with UT +08.
#
# In earlier versions of this file, China had many separate Zone entries, but
# this was based on what were apparently incorrect data in Shanks & Pottenger.
@@ -392,29 +383,27 @@ Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
# Proposed in 1918 and theoretically in effect until 1949 (although in practice
# mainly observed in coastal areas), the five zones were:
#
-# Changbai Time ("Long-white Time", Long-white = Heilongjiang area) UT+8.5
-# Asia/Harbin (currently a link to Asia/Shanghai)
+# Changbai Time ("Long-white Time", Long-white = Heilongjiang area) UT +08:30
+# Now part of Asia/Shanghai; its pre-1970 times are not recorded here.
# Heilongjiang (except Mohe county), Jilin
#
-# Zhongyuan Time ("Central plain Time") UT+8
-# Asia/Shanghai
+# Zhongyuan Time ("Central plain Time") UT +08
+# 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+8 "from the end of the 19th century".
+# 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 that area) UT+7
-# 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+6
-# Asia/Urumqi
-# This currently represents Kunlun Time as well,
-# as apparently the two regions have been the same since 1970.
+# Xin-zang Time ("Xinjiang-Tibet Time") UT +06
+# This region is now part of either Asia/Urumqi or Asia/Shanghai with
+# current boundaries uncertain; times before 1970 for areas that
+# disagree with Ürümqi or Shanghai are not recorded here.
# The Gansu counties Aksay, Anxi, Dunhuang, Subei; west Qinghai;
# the Guangdong counties Xuwen, Haikang, Suixi, Lianjiang,
# Zhanjiang, Wuchuan, Huazhou, Gaozhou, Maoming, Dianbai, and Xinyi;
@@ -424,8 +413,8 @@ Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
# Shihezi, Changji, Yanqi, Heshuo, Tuokexun, Tulufan, Shanshan, Hami,
# Fukang, Kuitun, Kumukuli, Miquan, Qitai, and Turfan.
#
-# Kunlun Time UT+5.5
-# Asia/Kashgar (currently a link to Asia/Urumqi)
+# Kunlun Time UT +05:30
+# This region is now in the same status as Xin-zang Time (see above).
# West Tibet, including Pulan, Aheqi, Shufu, Shule;
# West Xinjiang, including Aksu, Atushi, Yining, Hetian, Cele, Luopu, Nileke,
# Zhaosu, Tekesi, Gongliu, Chabuchaer, Huocheng, Bole, Pishan, Suiding,
@@ -440,7 +429,7 @@ Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
#
# On the other hand, ethnic Uyghurs, who make up about half the
# population of Xinjiang, typically use "Xinjiang time" which is two
-# hours behind Beijing time, or UTC +0600. The government of the Xinjiang
+# hours behind Beijing time, or UT +06. The government of the Xinjiang
# Uyghur Autonomous Region, (XAUR, or just Xinjiang for short) as well as
# local governments such as the Ürümqi city government use both times in
# publications, referring to what is popularly called Xinjiang time as
@@ -496,8 +485,8 @@ Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
# having the same time as Beijing.
# From Paul Eggert (2014-06-30):
-# In the early days of the PRC, Tibet was given its own time zone (UT+6) but
-# this was withdrawn in 1959 and never reinstated; see Tubten Khétsun,
+# In the early days of the PRC, Tibet was given its own time zone (UT +06)
+# but this was withdrawn in 1959 and never reinstated; see Tubten Khétsun,
# Memories of life in Lhasa under Chinese Rule, Columbia U Press, ISBN
# 978-0231142861 (2008), translator's introduction by Matthew Akester, p x.
# As this is before our 1970 cutoff, Tibet doesn't need a separate zone.
@@ -511,12 +500,12 @@ Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
# Republics, the Soviet Union, the Kuomintang, and the People's Republic of
# China, and tracking down all these organizations' timekeeping rules would be
# quite a trick. Approximate this lost history by a transition from LMT to
-# XJT at the start of 1928, the year of accession of the warlord Jin Shuren,
+# UT +06 at the start of 1928, the year of accession of the warlord Jin Shuren,
# which happens to be the date given by Shanks & Pottenger (no doubt as a
-# guess) as the transition from LMT. Ignore the usage of UT+8 before
-# 1986-02-01 under the theory that the transition date to UT+8 is unknown and
+# guess) as the transition from LMT. Ignore the usage of +08 before
+# 1986-02-01 under the theory that the transition date to +08 is unknown and
# that the sort of users who prefer Asia/Urumqi now typically ignored the
-# UT+8 mandate back then.
+# +08 mandate back then.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
# Beijing time, used throughout China; represented by Shanghai.
@@ -526,7 +515,7 @@ Zone Asia/Shanghai 8:05:43 - LMT 1901
# 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)
@@ -721,7 +710,7 @@ Zone Asia/Hong_Kong 7:36:42 - LMT 1904 Oct 30
# be found from historical government announcement database.
# From Paul Eggert (2014-07-03):
-# As per Yu-Cheng Chuang, say that Taiwan was at UT+9 from 1937-10-01
+# As per Yu-Cheng Chuang, say that Taiwan was at UT +09 from 1937-10-01
# until 1945-09-21 at 01:00, overriding Shanks & Pottenger.
# Likewise, use Yu-Cheng Chuang's data for DST in Taiwan.
@@ -745,38 +734,47 @@ Rule Taiwan 1979 only - Oct 1 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
# Taipei or Taibei or T'ai-pei
Zone Asia/Taipei 8:06:00 - LMT 1896 Jan 1
- 8:00 - 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
###############################################################################
# Cyprus
-#
+
# Milne says the Eastern Telegraph Company used 2:14:00. Stick with LMT.
+# IATA SSIM (1998-09) has Cyprus using EU rules for the first time.
+
+# From Paul Eggert (2016-09-09):
+# Yesterday's Cyprus Mail reports that Northern Cyprus followed Turkey's
+# lead and switched from +02/+03 to +03 year-round.
+# http://cyprus-mail.com/2016/09/08/two-time-zones-cyprus-turkey-will-not-turn-clocks-back-next-month/
#
+# From Even Scharning (2016-10-31):
+# Looks like the time zone split in Cyprus went through last night.
+# http://cyprus-mail.com/2016/10/30/cyprus-new-division-two-time-zones-now-reality/
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Cyprus 1975 only - Apr 13 0:00 1:00 S
Rule Cyprus 1975 only - Oct 12 0:00 0 -
@@ -791,7 +789,10 @@ Rule Cyprus 1981 1998 - Mar lastSun 0:00 1:00 S
Zone Asia/Nicosia 2:13:28 - LMT 1921 Nov 14
2:00 Cyprus EE%sT 1998 Sep
2:00 EUAsia EE%sT
-# IATA SSIM (1998-09) has Cyprus using EU rules for the first time.
+Zone Asia/Famagusta 2:15:48 - LMT 1921 Nov 14
+ 2:00 Cyprus EE%sT 1998 Sep
+ 2:00 EUAsia EE%sT 2016 Sep 8
+ 3:00 - +03
# Classically, Cyprus belongs to Asia; e.g. see Herodotus, Histories, I.72.
# However, for various reasons many users expect to find it under Europe.
@@ -835,16 +836,15 @@ Link Asia/Nicosia Europe/Nicosia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tbilisi 2:59:11 - LMT 1880
2:59:11 - TBMT 1924 May 2 # Tbilisi Mean Time
- 3:00 - TBIT 1957 Mar # Tbilisi Time
- 4:00 RussiaAsia TBI%sT 1991 Mar 31 2:00s
- 3:00 1:00 TBIST 1991 Apr 9 # independence
- 3:00 RussiaAsia GE%sT 1992 # Georgia Time
- 3:00 E-EurAsia GE%sT 1994 Sep lastSun
- 4:00 E-EurAsia GE%sT 1996 Oct lastSun
- 4:00 1:00 GEST 1997 Mar lastSun
- 4:00 E-EurAsia GE%sT 2004 Jun 27
- 3:00 RussiaAsia GE%sT 2005 Mar lastSun 2:00
- 4:00 - GET
+ 3:00 - +03 1957 Mar
+ 4:00 RussiaAsia +04/+05 1991 Mar 31 2:00s
+ 3:00 RussiaAsia +03/+04 1992
+ 3:00 E-EurAsia +03/+04 1994 Sep lastSun
+ 4:00 E-EurAsia +04/+05 1996 Oct lastSun
+ 4:00 1:00 +05 1997 Mar lastSun
+ 4:00 E-EurAsia +04/+05 2004 Jun 27
+ 3:00 RussiaAsia +03/+04 2005 Mar lastSun 2:00
+ 4:00 - +04
# East Timor
@@ -872,11 +872,10 @@ Zone Asia/Tbilisi 2:59:11 - LMT 1880
# 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
@@ -891,9 +890,9 @@ Zone Asia/Dili 8:22:20 - LMT 1912 Jan 1
# 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
@@ -921,7 +920,7 @@ Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata
# These would be the earliest possible times for a change.
# Régimes horaires pour le monde entier, by Henri Le Corre, (Éditions
# Traditionnelles, 1987, Paris) says that Java and Madura switched
-# from JST to UTC+07:30 on 1945-09-23, and gives 1944-09-01 for Jayapura
+# from UT +09 to +07:30 on 1945-09-23, and gives 1944-09-01 for Jayapura
# (Hollandia). For now, assume all Indonesian locations other than Jayapura
# switched on 1945-09-23.
#
@@ -932,11 +931,11 @@ Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata
# summary published by the Time and Frequency Laboratory of the
# Research Center for Calibration, Instrumentation and Metrology,
# Indonesia, <http://time.kim.lipi.go.id/time-eng.php> (2006-09-29).
-# The abbreviations are:
+# The time zone abbreviations and UT offsets are:
#
-# WIB - UTC+7 - Waktu Indonesia Barat (Indonesia western time)
-# WITA - UTC+8 - Waktu Indonesia Tengah (Indonesia central time)
-# WIT - UTC+9 - Waktu Indonesia Timur (Indonesia eastern time)
+# WIB - +07 - Waktu Indonesia Barat (Indonesia western time)
+# WITA - +08 - Waktu Indonesia Tengah (Indonesia central time)
+# WIT - +09 - Waktu Indonesia Timur (Indonesia eastern time)
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
# Java, Sumatra
@@ -944,33 +943,33 @@ Zone Asia/Jakarta 7:07:12 - LMT 1867 Aug 10
# Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
# but this must be a typo.
7:07:12 - BMT 1923 Dec 31 23:47:12 # Batavia
- 7:20 - JAVT 1932 Nov # Java Time
- 7: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
@@ -1002,8 +1001,6 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
# 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
@@ -1110,9 +1107,9 @@ Rule Iran 2036 max - Sep 21 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tehran 3:25:44 - LMT 1916
3:25:44 - TMT 1946 # Tehran Mean Time
- 3: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
@@ -1155,8 +1152,8 @@ Rule Iraq 1991 2007 - Oct 1 3:00s 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Baghdad 2:57:40 - LMT 1890
2:57:36 - BMT 1918 # Baghdad Mean Time?
- 3:00 - AST 1982 May
- 3:00 Iraq A%sT
+ 3:00 - +03 1982 May
+ 3:00 Iraq +03/+04
###############################################################################
@@ -1455,8 +1452,6 @@ Rule Japan 1950 1951 - May Sun>=1 2:00 1:00 D
# 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.
@@ -1574,12 +1569,12 @@ Zone Asia/Amman 2:23:44 - LMT 1931
# was "blended" with the Central zone. Therefore, Kazakhstan now has
# two time zones, and difference between them is one hour. The zone
# closer to UTC is the former Western zone (probably still called the
-# same), encompassing four provinces in the west: Aqtobe, Atyrau,
-# Mangghystau, and West Kazakhstan. The other zone encompasses
+# same), encompassing four provinces in the west: Aqtöbe, Atyraū,
+# Mangghystaū, and West Kazakhstan. The other zone encompasses
# everything else.... I guess that would make Kazakhstan time zones
# de jure UTC+5 and UTC+6 respectively.
-# From Stepan Golosunov (2016-03-27) ([*] means see later comments below):
+# From Stepan Golosunov (2016-03-27):
# Review of the linked documents from http://adilet.zan.kz/
# produced the following data for post-1991 Kazakhstan:
#
@@ -1625,7 +1620,7 @@ Zone Asia/Amman 2:23:44 - LMT 1931
#
# This implies that on 1991-03-31 Asia/Oral remained on +04/+05 while
# the rest of Kazakhstan switched from +06/+07 to +05/06 or from +05/06
-# to +04/+05. It's unclear how Kzyl-Orda oblast moved into the fifth
+# to +04/+05. It's unclear how Qyzylorda oblast moved into the fifth
# time belt. (By switching from +04/+05 to +05/+06 on 1991-09-29?) ...
#
# 1. Act of the Cabinet of Ministers of the Republic of Kazakhstan
@@ -1638,25 +1633,25 @@ Zone Asia/Amman 2:23:44 - LMT 1931
# on the whole territory of Kazakhstan 1 hour forward on 1992-01-19 at
# 2:00, specified DST rules. It acknowledged that Kazakhstan was
# located in the fourth and the fifth time belts and specified the
-# border between them to be located east of Kustanay and Aktyubinsk
-# oblasts (notably including Turgai and Kzyl-Orda oblasts into the fifth
+# border between them to be located east of Qostanay and Aktyubinsk
+# oblasts (notably including Turgai and Qyzylorda oblasts into the fifth
# time belt).
#
# This means switch on 1992-01-19 at 2:00 from +04/+05 to +05/+06 for
-# Asia/Aqtau, Asia/Aqtobe, Asia/Oral, Atyrau and Kustanay oblasts; from
-# +05/+06 to +06/+07 for Asia/Almaty and Asia/Qyzylorda (and Arkalyk) [*]....
+# Asia/Aqtau, Asia/Aqtobe, Asia/Oral, Atyraū and Qostanay oblasts; from
+# +05/+06 to +06/+07 for Asia/Almaty and Asia/Qyzylorda (and Arkalyk)....
#
# 2. Act of the Cabinet of Ministers of the Republic of Kazakhstan
# from 1992-03-27 No. 284
# http://adilet.zan.kz/rus/docs/P920000284_
-# cancels extra hour ("decree time") for Uralsk and Kzyl-Orda oblasts
+# cancels extra hour ("decree time") for Uralsk and Qyzylorda oblasts
# since the last Sunday of March 1992, while keeping them in the fourth
# and the fifth time belts respectively.
#
# 3. Order of the Prime Minister of the Republic of Kazakhstan
# from 1994-09-23 No. 384
# http://adilet.zan.kz/rus/docs/R940000384_
-# cancels the extra hour ("decree time") on the territory of Mangystau
+# cancels the extra hour ("decree time") on the territory of Mangghystaū
# oblast since the last Sunday of September 1994 (saying that time on
# the territory would correspond to the third time belt as a
# result)....
@@ -1670,14 +1665,11 @@ Zone Asia/Amman 2:23:44 - LMT 1931
# 5. Act of the Government of the Republic of Kazakhstan
# from 1999-03-26 No. 305
# http://adilet.zan.kz/rus/docs/P990000305_
-# cancels the extra hour ("decree time") for Atyrau oblast since the
+# cancels the extra hour ("decree time") for Atyraū oblast since the
# last Sunday of March 1999 while retaining the oblast in the fourth
# time belt.
#
-# This means change from +05/+06 to +04/+05.
-#
-# There is no zone for Atyrau currently (listed under Asia/Aqtau in
-# zone1970.tab).[*]
+# This means change from +05/+06 to +04/+05....
#
# 6. Act of the Government of the Republic of Kazakhstan
# from 2000-11-23 No. 1749
@@ -1687,10 +1679,10 @@ Zone Asia/Amman 2:23:44 - LMT 1931
# The only changes I noticed are in definition of the border between the
# fourth and the fifth time belts. They account for changes in spelling
# and administrative division (splitting of Turgai oblast in 1997
-# probably changed time in territories incorporated into Kostanay oblast
-# (including Arkalyk) from +06/+07 to +05/+06) and move Kyzylorda oblast
+# probably changed time in territories incorporated into Qostanay oblast
+# (including Arkalyk) from +06/+07 to +05/+06) and move Qyzylorda oblast
# from being in the fifth time belt and not using decree time into the
-# fourth time belt (no change in practice).[*]
+# fourth time belt (no change in practice).
#
# 7. Act of the Government of the Republic of Kazakhstan
# from 2003-12-29 No. 1342
@@ -1700,7 +1692,7 @@ Zone Asia/Amman 2:23:44 - LMT 1931
# 8. Act of the Government of the Republic of Kazakhstan
# from 2004-07-20 No. 775
# http://adilet.zan.kz/rus/archive/docs/P040000775_/20.07.2004
-# modified the 2000-11-23 act to move Kostanay and Kyzylorda oblasts into
+# modified the 2000-11-23 act to move Qostanay and Qyzylorda oblasts into
# the fifth time belt and add Aktobe oblast to the list of regions not
# using extra hour ("decree time"), leaving Kazakhstan with only 2 time
# zones (+04/+05 and +06/+07). The changes were to be implemented
@@ -1712,14 +1704,14 @@ Zone Asia/Amman 2:23:44 - LMT 1931
# http://adilet.zan.kz/rus/docs/P040001059_
# modified the 2000-11-23 act to remove exceptions from the "decree time"
# (leaving Kazakhstan in +05/+06 and +06/+07 zones), amended the
-# 2004-07-20 act to implement changes for Atyrau, West Kazakhstan,
-# Kostanay, Kyzylorda and Mangystau oblasts by not moving clocks
-# during the 2014 transition to "winter" time.
+# 2004-07-20 act to implement changes for Atyraū, West Kazakhstan,
+# Qostanay, Qyzylorda and Mangghystaū oblasts by not moving clocks
+# during the 2004 transition to "winter" time.
#
-# This means transition from +04/+05 to +05/+06 for Atyrau oblast (no
+# This means transition from +04/+05 to +05/+06 for Atyraū oblast (no
# zone currently), Asia/Oral, Asia/Aqtau and transition from +05/+06 to
-# +06/+07 for Kostanay oblast (Kostanay and Arkalyk, no zones currently)
-# and Asia/Qyzylorda on 2004-10-31 at 3:00....[*]
+# +06/+07 for Qostanay oblast (Qostanay and Arkalyk, no zones currently)
+# and Asia/Qyzylorda on 2004-10-31 at 3:00....
#
# 10. Act of the Government of the Republic of Kazakhstan
# from 2005-03-15 No. 231
@@ -1735,14 +1727,25 @@ Zone Asia/Amman 2:23:44 - LMT 1931
# 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-04-15):
-# The tables below should reflect Stepan Golosunov's remarks above,
-# except for the items marked "[*]" which I haven't gotten to yet.
-# It looks like we will need new zones Asia/Atyrau and Asia/Qostanay
-# to handle changes from 1992 through 2004 that we did not previously
-# know about.
-
+# 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]
#
# Almaty (formerly Alma-Ata), representing most locations in Kazakhstan
@@ -1755,6 +1758,8 @@ Zone Asia/Almaty 5:07:48 - LMT 1924 May 2 # or Alma-Ata
6:00 RussiaAsia +06/+07 2004 Oct 31 2:00s
6:00 - +06
# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) (KZ-KZY)
+# This currently includes Qostanay (aka Kostanay, Kustanay) (KZ-KUS);
+# see comments below.
Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2
4:00 - +04 1930 Jun 21
5:00 - +05 1981 Apr 1
@@ -1766,7 +1771,21 @@ Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2
6:00 RussiaAsia +06/+07 1992 Mar 29 2:00s
5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
6:00 - +06
-# Aqtobe (aka Aktobe, formerly Aktyubinsk) (KZ-AKT)
+# 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
+# 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
+# 5:00 - +05 1981 Apr 1
+# 5:00 1:00 +06 1981 Oct 1
+# 6:00 - +06 1982 Apr 1
+# 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
+# 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
+# 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
+# 6:00 - +06
+#
+# Aqtöbe (aka Aktobe, formerly Aktyubinsk) (KZ-AKT)
Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2
4:00 - +04 1930 Jun 21
5:00 - +05 1981 Apr 1
@@ -1776,14 +1795,11 @@ Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2
4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
5:00 - +05
-# Qostanay (KZ-KUS)
-
-# Mangghystau (KZ-MAN)
+# Mangghystaū (KZ-MAN)
# Aqtau was not founded until 1963, but it represents an inhabited region,
# so include time stamps before 1963.
Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2
4:00 - +04 1930 Jun 21
- 5:00 - +05 1963
5:00 - +05 1981 Oct 1
6:00 - +06 1982 Apr 1
5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
@@ -1791,12 +1807,22 @@ Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2
5:00 RussiaAsia +05/+06 1994 Sep 25 2:00s
4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s
5:00 - +05
-
+# Atyraū (KZ-ATY) is like Mangghystaū except it switched from
+# +04/+05 to +05/+06 in spring 1999, not fall 1994.
+Zone Asia/Atyrau 3:27:44 - LMT 1924 May 2
+ 3:00 - +03 1930 Jun 21
+ 5:00 - +05 1981 Oct 1
+ 6:00 - +06 1982 Apr 1
+ 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
+ 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
+ 5:00 RussiaAsia +05/+06 1999 Mar 28 2:00s
+ 4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s
+ 5:00 - +05
# West Kazakhstan (KZ-ZAP)
# From Paul Eggert (2016-03-18):
# The 1989 transition is from USSR act No. 227 (1989-03-14).
Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk
- 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
@@ -1825,11 +1851,11 @@ Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 S
Rule Kyrgyz 1997 2004 - Oct lastSun 2:30 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2
- 5:00 - FRUT 1930 Jun 21 # Frunze Time
- 6:00 RussiaAsia FRU%sT 1991 Mar 31 2:00s
- 5:00 1:00 FRUST 1991 Aug 31 2:00 # independence
- 5:00 Kyrgyz KG%sT 2005 Aug 12 # Kyrgyzstan Time
- 6:00 - KGT
+ 5:00 - +05 1930 Jun 21
+ 6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
+ 5:00 RussiaAsia +05/+06 1991 Aug 31 2:00
+ 5:00 Kyrgyz +05/+06 2005 Aug 12
+ 6:00 - +06
###############################################################################
@@ -1868,25 +1894,24 @@ Rule ROK 1957 1960 - Sep Sun>=18 0:00 0 S
Rule ROK 1987 1988 - May Sun>=8 2:00 1:00 D
Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S
-# From Paul Eggert (2014-10-30):
+# From Paul Eggert (2016-08-23):
# The Korean Wikipedia entry gives the following sources for UT offsets:
#
-# 1908: Official Journal Article No. 3994 (Edict No. 5)
+# 1908: Official Journal Article No. 3994 (decree No. 5)
# 1912: Governor-General of Korea Official Gazette Issue No. 367
# (Announcement No. 338)
# 1954: Presidential Decree No. 876 (1954-03-17)
# 1961: Law No. 676 (1961-08-07)
-# 1987: Law No. 3919 (1986-12-31)
#
-# The Wikipedia entry also has confusing information about a change
-# to UT+9 in April 1910, but then what would be the point of the later change
-# to UT+9 on 1912-01-01? Omit the 1910 change for now.
+# (Another source "1987: Law No. 3919 (1986-12-31)" was in the 2014-10-30
+# edition of the Korean Wikipedia entry.)
#
# I guessed that time zone abbreviations through 1945 followed the same
# rules as discussed under Taiwan, with nominal switches from JST to KST
# when the respective cities were taken over by the Allies after WWII.
#
-# For Pyongyang we have no information; guess no changes since World War II.
+# For Pyongyang, guess no changes from World War II until 2015, as we
+# have no information otherwise.
# From Steffen Thorsen (2015-08-07):
# According to many news sources, North Korea is going to change to
@@ -1903,14 +1928,12 @@ Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S
# 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
@@ -1965,30 +1988,29 @@ Rule NBorneo 1935 1941 - Dec 14 0:00 0 -
# 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
@@ -2046,7 +2068,7 @@ Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
# Bill Bonnet (2005-05-19) reports that the US Embassy in Ulaanbaatar says
# there is only one time zone and that DST is observed, citing Microsoft
# Windows XP as the source. Risto Nykänen (2005-05-16) reports that
-# travelmongolia.org says there are two time zones (UTC+7, UTC+8) with no DST.
+# travelmongolia.org says there are two time zones (UT +07, +08) with no DST.
# Oscar van Vlijmen (2005-05-20) reports that the Mongolian Embassy in
# Washington, DC says there are two time zones, with DST observed.
# He also found
@@ -2115,37 +2137,41 @@ Rule Mongol 1983 only - Oct 1 0:00 0 -
# 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.
@@ -2294,10 +2320,10 @@ Rule Pakistan 2009 only - Apr 15 0:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Karachi 4:28:12 - LMT 1907
- 5:30 - 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
@@ -2549,11 +2575,6 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# From Paul Eggert (2015-03-03):
# http://www.timeanddate.com/time/change/west-bank/ramallah?year=2014
# says that the fall 2014 transition was Oct 23 at 24:00.
-# For future dates, guess the last Friday in March at 24:00 through
-# the first Friday on or after October 21 at 00:00. This is consistent with
-# the predictions in today's editions of the following URLs:
-# http://www.timeanddate.com/time/change/gaza-strip/gaza
-# http://www.timeanddate.com/time/change/west-bank/hebron
# From Hannah Kreitem (2016-03-09):
# http://www.palestinecabinet.gov.ps/WebSite/ar/ViewDetails?ID=31728
@@ -2563,7 +2584,21 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
#
# From Paul Eggert (2016-03-12):
# Predict spring transitions on March's last Saturday at 01:00 from now on.
-# Leave fall predictions alone for now.
+
+# From Sharef Mustafa (2016-10-19):
+# [T]he Palestinian cabinet decision (Mar 8th 2016) published on
+# http://www.palestinecabinet.gov.ps/WebSite/Upload/Decree/GOV_17/16032016134830.pdf
+# states that summer time will end on Oct 29th at 01:00.
+#
+# From Tim Parenti (2016-10-19):
+# Predict fall transitions on October's last Saturday at 01:00 from now on.
+# This is consistent with the 2016 transition as well as our spring
+# predictions.
+#
+# From Paul Eggert (2016-10-19):
+# It's also consistent with predictions in the following URLs today:
+# http://www.timeanddate.com/time/change/gaza-strip/gaza
+# http://www.timeanddate.com/time/change/west-bank/hebron
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule EgyptAsia 1957 only - May 10 0:00 1:00 S
@@ -2592,13 +2627,14 @@ Rule Palestine 2011 only - Sep 30 0:00 0 -
Rule Palestine 2012 2014 - Mar lastThu 24:00 1:00 S
Rule Palestine 2012 only - Sep 21 1:00 0 -
Rule Palestine 2013 only - Sep Fri>=21 0:00 0 -
-Rule Palestine 2014 max - Oct Fri>=21 0:00 0 -
+Rule Palestine 2014 2015 - Oct Fri>=21 0:00 0 -
Rule Palestine 2015 only - Mar lastFri 24:00 1:00 S
Rule Palestine 2016 max - Mar lastSat 1:00 1:00 S
+Rule Palestine 2016 max - Oct lastSat 1:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
- 2:00 Zion EET 1948 May 15
+ 2:00 Zion EET/EEST 1948 May 15
2:00 EgyptAsia EE%sT 1967 Jun 5
2:00 Zion I%sT 1996
2:00 Jordan EE%sT 1999
@@ -2611,7 +2647,7 @@ Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
2:00 Palestine EE%sT
Zone Asia/Hebron 2:20:23 - LMT 1900 Oct
- 2:00 Zion EET 1948 May 15
+ 2:00 Zion EET/EEST 1948 May 15
2:00 EgyptAsia EE%sT 1967 Jun 5
2:00 Zion I%sT 1996
2:00 Jordan EE%sT 1999
@@ -2652,15 +2688,15 @@ Rule Phil 1978 only - Sep 21 0:00 0 -
# 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
@@ -2682,12 +2718,12 @@ Link Asia/Qatar Asia/Bahrain
# earlier date.
#
# Shanks & Pottenger also state that until 1968-05-01 Saudi Arabia had two
-# time zones; the other zone, at UTC+4, was in the far eastern part of
+# time zones; the other zone, at UT +04, was in the far eastern part of
# the country. Ignore this, as it's before our 1970 cutoff.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Riyadh 3:06:52 - LMT 1947 Mar 14
- 3:00 - AST
+ 3:00 - +03
Link Asia/Riyadh Asia/Aden # Yemen
Link Asia/Riyadh Asia/Kuwait
@@ -2697,14 +2733,13 @@ Link Asia/Riyadh Asia/Kuwait
# 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
@@ -2744,45 +2779,31 @@ Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
# People who live in regions under Tamil control can use [TZ='Asia/Kolkata'],
# as that zone has agreed with the Tamil areas since our cutoff date of 1970.
-# From K Sethu (2006-04-25):
-# I think the abbreviation LKT originated from the world of computers at
-# the time of or subsequent to the time zone changes by SL Government
-# twice in 1996 and probably SL Government or its standardization
-# agencies never declared an abbreviation as a national standard.
-#
-# I recollect before the recent change the government announcements
-# mentioning it as simply changing Sri Lanka Standard Time or Sri Lanka
-# Time and no mention was made about the abbreviation.
-#
-# If we look at Sri Lanka Department of Government's "Official News
-# Website of Sri Lanka" ... http://www.news.lk/ we can see that they
-# use SLT as abbreviation in time stamp at the beginning of each news
-# item....
-#
-# Within Sri Lanka I think LKT is well known among computer users and
-# administrators. In my opinion SLT may not be a good choice because the
-# nation's largest telcom / internet operator Sri Lanka Telcom is well
-# known by that abbreviation - simply as SLT (there IP domains are
-# slt.lk and sltnet.lk).
-#
-# But if indeed our government has adopted SLT as standard abbreviation
-# (that we have not known so far) then it is better that it be used for
-# all computers.
-
-# From Paul Eggert (2006-04-25):
-# One possibility is that we wait for a bit for the dust to settle down
-# and then see what people actually say in practice.
+# From Sadika Sumanapala (2016-10-19):
+# According to http://www.sltime.org (maintained by Measurement Units,
+# Standards & Services Department, Sri Lanka) abbreviation for Sri Lanka
+# standard time is SLST.
+#
+# From Paul Eggert (2016-10-18):
+# "SLST" seems to be reasonably recent and rarely-used outside time
+# zone nerd sources. I searched Google News and found three uses of
+# it in the International Business Times of India in February and
+# March of this year when discussing cricket match times, but nothing
+# since then (though there has been a lot of cricket) and nothing in
+# other English-language news sources. Our old abbreviation "LKT" is
+# even worse. For now, let's use a numeric abbreviation; we can
+# switch to "SLST" if it catches on.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Colombo 5:19:24 - LMT 1880
5:19:32 - MMT 1906 # Moratuwa Mean Time
- 5:30 - IST 1942 Jan 5
- 5:30 0:30 IHST 1942 Sep
- 5:30 1:00 IST 1945 Oct 16 2:00
- 5:30 - IST 1996 May 25 0:00
- 6:30 - LKT 1996 Oct 26 0:30
- 6:00 - LKT 2006 Apr 15 0:30
- 5:30 - IST
+ 5:30 - +0530 1942 Jan 5
+ 5:30 0:30 +06 1942 Sep
+ 5:30 1:00 +0630 1945 Oct 16 2:00
+ 5:30 - +0530 1996 May 25 0:00
+ 6:30 - +0630 1996 Oct 26 0:30
+ 6:00 - +06 2006 Apr 15 0:30
+ 5:30 - +0530
# Syria
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -2951,16 +2972,16 @@ Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
# From Shanks & Pottenger.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
- 5:00 - DUST 1930 Jun 21 # Dushanbe Time
- 6:00 RussiaAsia DUS%sT 1991 Mar 31 2:00s
- 5:00 1:00 DUSST 1991 Sep 9 2:00s
- 5:00 - TJT # Tajikistan Time
+ 5:00 - +05 1930 Jun 21
+ 6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
+ 5:00 1:00 +05/+06 1991 Sep 9 2:00s
+ 5:00 - +05
# Thailand
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Bangkok 6:42:04 - LMT 1880
6:42:04 - BMT 1920 Apr # Bangkok Mean Time
- 7:00 - ICT
+ 7:00 - +07
Link Asia/Bangkok Asia/Phnom_Penh # Cambodia
Link Asia/Bangkok Asia/Vientiane # Laos
@@ -2968,36 +2989,33 @@ Link Asia/Bangkok Asia/Vientiane # Laos
# From Shanks & Pottenger.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad
- 4:00 - ASHT 1930 Jun 21 # Ashkhabad Time
- 5:00 RussiaAsia ASH%sT 1991 Mar 31 2:00
- 4:00 RussiaAsia ASH%sT 1991 Oct 27 # independence
- 4:00 RussiaAsia TM%sT 1992 Jan 19 2:00
- 5:00 - TMT
+ 4:00 - +04 1930 Jun 21
+ 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00
+ 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00
+ 5:00 - +05
# United Arab Emirates
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Dubai 3:41:12 - LMT 1920
- 4:00 - GST
+ 4:00 - +04
Link Asia/Dubai Asia/Muscat # Oman
# Uzbekistan
# Byalokoz 1919 says Uzbekistan was 4:27:53.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Samarkand 4:27:53 - LMT 1924 May 2
- 4:00 - SAMT 1930 Jun 21 # Samarkand Time
- 5:00 - SAMT 1981 Apr 1
- 5:00 1:00 SAMST 1981 Oct 1
- 6:00 - TAST 1982 Apr 1 # Tashkent Time
- 5:00 RussiaAsia SAM%sT 1991 Sep 1 # independence
- 5:00 RussiaAsia UZ%sT 1992
- 5:00 - UZT
+ 4:00 - +04 1930 Jun 21
+ 5:00 - +05 1981 Apr 1
+ 5:00 1:00 +06 1981 Oct 1
+ 6:00 - +06 1982 Apr 1
+ 5:00 RussiaAsia +05/+06 1992
+ 5:00 - +05
# Milne says Tashkent was 4:37:10.8; round to nearest.
Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
- 5:00 - TAST 1930 Jun 21 # Tashkent Time
- 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00
- 5:00 RussiaAsia TAS%sT 1991 Sep 1 # independence
- 5:00 RussiaAsia UZ%sT 1992
- 5:00 - UZT
+ 5:00 - +05 1930 Jun 21
+ 6:00 RussiaAsia +06/+07 1991 Mar 31 2:00
+ 5:00 RussiaAsia +05/+06 1992
+ 5:00 - +05
# Vietnam
@@ -3052,15 +3070,15 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
# 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.
diff --git a/src/timezone/data/australasia b/src/timezone/data/australasia
index 0b33f67ed4..d389ae134a 100644
--- a/src/timezone/data/australasia
+++ b/src/timezone/data/australasia
@@ -44,8 +44,8 @@ Zone Australia/Perth 7:43:24 - LMT 1895 Dec
8:00 Aus AW%sT 1943 Jul
8:00 AW AW%sT
Zone Australia/Eucla 8:35:28 - LMT 1895 Dec
- 8:45 Aus ACW%sT 1943 Jul
- 8:45 AW ACW%sT
+ 8:45 Aus +0845/+0945 1943 Jul
+ 8:45 AW +0845/+0945
# Queensland
#
@@ -212,7 +212,8 @@ Rule LH 2008 max - Apr Sun>=1 2:00 0 S
Rule LH 2008 max - Oct Sun>=1 2:00 0:30 D
Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
10:00 - AEST 1981 Mar
- 10:30 LH LH%sT
+ 10:30 LH +1030/+1130 1985 Jul
+ 10:30 LH +1030/+11
# Australian miscellany
#
@@ -250,19 +251,19 @@ Zone Antarctica/Macquarie 0 - -00 1899 Nov
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
@@ -350,7 +351,13 @@ Zone Indian/Cocos 6:27:40 - LMT 1900
# commencing at 2.00 am on Sunday 1st November, 2015 and ending at
# 3.00 am on Sunday 17th January, 2016.
-# From Paul Eggert (2015-09-01):
+# From Raymond Kumar (2016-10-04):
+# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-6th-NOVEMBER,-2016.aspx
+# "Fiji's daylight savings will begin on Sunday, 6 November 2016, when
+# clocks go forward an hour at 2am to 3am.... Daylight Saving will
+# end at 3.00am on Sunday 15th January 2017."
+
+# From Paul Eggert (2016-10-03):
# For now, guess DST from 02:00 the first Sunday in November to
# 03:00 the third Sunday in January. Although ad hoc, it matches
# transitions since late 2014 and seems more likely to match future
@@ -369,16 +376,16 @@ Rule Fiji 2014 max - Nov Sun>=1 2:00 1:00 S
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.
@@ -393,15 +400,15 @@ Link Pacific/Guam Pacific/Saipan # N Mariana Is
# Kiribati
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
- 12:00 - 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.
@@ -409,31 +416,31 @@ Zone Pacific/Kiritimati -10:29:20 - LMT 1901
# 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
@@ -444,7 +451,7 @@ Rule NC 1996 only - Dec 1 2:00s 1:00 S
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
###############################################################################
@@ -485,8 +492,8 @@ Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2
11:30 NZ NZ%sT 1946 Jan 1
12:00 NZ NZ%sT
Zone Pacific/Chatham 12:13:48 - LMT 1868 Nov 2
- 12:15 - 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
@@ -508,8 +515,8 @@ Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 HS
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
- -10:30 - CKT 1978 Nov 12 # Cook Is Time
- -10:00 Cook CK%sT
+ -10:30 - -1030 1978 Nov 12
+ -10:00 Cook -10/-0930
###############################################################################
@@ -517,35 +524,35 @@ Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
# 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
# the most people even though it was devastated in the Bougainville Civil War.
#
-# Although Shanks gives 1942-03-15 / 1943-11-01 for JST, these dates
+# Although Shanks gives 1942-03-15 / 1943-11-01 for UT +09, these dates
# are apparently rough guesswork from the starts of military campaigns.
# The World War II entries below are instead based on Arawa-Kieta.
# The Japanese occupied Kieta in July 1942,
@@ -553,29 +560,27 @@ Zone Pacific/Port_Moresby 9:48:40 - LMT 1880
# http://pwencycl.kgbudge.com/B/o/Bougainville.htm
# and seem to have controlled it until their 1945-08-21 surrender.
#
-# The Autonomous Region of Bougainville plans to switch from UTC+10 to UTC+11
-# on 2014-12-28 at 02:00. They call UTC+11 "Bougainville Standard Time";
-# abbreviate this as BST. See:
+# The Autonomous Region of Bougainville switched from UT +10 to +11
+# on 2014-12-28 at 02:00. They call +11 "Bougainville Standard Time".
+# See:
# http://www.bougainville24.com/bougainville-issues/bougainville-gets-own-timezone/
#
Zone Pacific/Bougainville 10:22:16 - LMT 1880
9:48:32 - PMMT 1895
- 10:00 - 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
@@ -620,7 +625,7 @@ Link Pacific/Pago_Pago Pacific/Midway # in US minor outlying islands
# From Paul Eggert (2014-06-27):
# The International Date Line Act 2011
# http://www.parliament.gov.ws/images/ACTS/International_Date_Line_Act__2011_-_Eng.pdf
-# changed Samoa from UTC-11 to UTC+13, effective "12 o'clock midnight, on
+# changed Samoa from UT -11 to +13, effective "12 o'clock midnight, on
# Thursday 29th December 2011". The International Date Line was adjusted
# accordingly.
@@ -656,17 +661,17 @@ Rule WS 2012 max - Sep lastSun 3:00 1 D
# 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
@@ -687,8 +692,8 @@ Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Fakaofo -11:24:56 - LMT 1901
- -11:00 - TKT 2011 Dec 30 # Tokelau Time
- 13:00 - TKT
+ -11:00 - -11 2011 Dec 30
+ 13:00 - +13
# Tonga
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -696,16 +701,18 @@ Rule Tonga 1999 only - Oct 7 2:00s 1:00 S
Rule Tonga 2000 only - Mar 19 2:00s 0 -
Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 S
Rule Tonga 2001 2002 - Jan lastSun 2:00 0 -
+Rule Tonga 2016 max - Nov Sun>=1 2:00 1:00 S
+Rule Tonga 2017 max - Jan Sun>=15 3:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Tongatapu 12:19:20 - LMT 1901
- 12:20 - TOT 1941 # Tonga Time
- 13:00 - TOT 1999
- 13:00 Tonga TO%sT
+ 12:20 - +1220 1941
+ 13:00 - +13 1999
+ 13:00 Tonga +13/+14
# Tuvalu
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Funafuti 11:56:52 - LMT 1901
- 12:00 - TVT # Tuvalu Time
+ 12:00 - +12
# US minor outlying islands
@@ -715,7 +722,7 @@ Zone Pacific/Funafuti 11:56:52 - LMT 1901
# 1886-1891; Baker was similar but exact dates are not known.
# Inhabited by civilians 1935-1942; U.S. military bases 1943-1944;
# uninhabited thereafter.
-# Howland observed Hawaii Standard Time (UT-10:30) in 1937;
+# Howland observed Hawaii Standard Time (UT -10:30) in 1937;
# see page 206 of Elgen M. Long and Marie K. Long,
# Amelia Earhart: the Mystery Solved, Simon & Schuster (2000).
# So most likely Howland and Baker observed Hawaii Time from 1935
@@ -729,10 +736,11 @@ Zone Pacific/Funafuti 11:56:52 - LMT 1901
# 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,
@@ -752,8 +760,6 @@ Zone Pacific/Funafuti 11:56:52 - LMT 1901
# 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
@@ -767,7 +773,7 @@ Zone Pacific/Funafuti 11:56:52 - LMT 1901
# Wake
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Wake 11:06:28 - LMT 1901
- 12:00 - WAKT # Wake Time
+ 12:00 - +12
# Vanuatu
@@ -780,12 +786,12 @@ Rule Vanuatu 1992 1993 - Jan Sun>=23 0:00 0 -
Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
- 11:00 Vanuatu VU%sT # Vanuatu Time
+ 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
###############################################################################
@@ -796,15 +802,15 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# 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,
@@ -821,28 +827,19 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# 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.
@@ -1473,7 +1470,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# Zealand time. I understand that is the time they keep locally, anyhow."
# For now, assume this practice goes back to the introduction of standard time
# in New Zealand, as this would make Chatham Islands time almost exactly match
-# LMT back when New Zealand was at UTC+11:30; also, assume Chatham Islands did
+# LMT back when New Zealand was at UT +11:30; also, assume Chatham Islands did
# not observe New Zealand's prewar DST.
###############################################################################
@@ -1529,7 +1526,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# For now, we assume the Ladrones switched at the same time as the Philippines;
# see Asia/Manila.
-# US Public Law 106-564 (2000-12-23) made UTC+10 the official standard time,
+# US Public Law 106-564 (2000-12-23) made UT +10 the official standard time,
# under the name "Chamorro Standard Time". There is no official abbreviation,
# but Congressman Robert A. Underwood, author of the bill that became law,
# wrote in a press release (2000-12-27) that he will seek the use of "ChST".
@@ -1541,15 +1538,15 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# "I am certain, having lived there for the past decade, that 'Truk'
# (now properly known as Chuuk) ... is in the time zone GMT+10."
#
-# Shanks & Pottenger write that Truk switched from UTC+10 to UTC+11
+# Shanks & Pottenger write that Truk switched from UT +10 to +11
# on 1978-10-01; ignore this for now.
# From Paul Eggert (1999-10-29):
# The Federated States of Micronesia Visitors Board writes in
# The Federated States of Micronesia - Visitor Information (1999-01-26)
# http://www.fsmgov.org/info/clocks.html
-# that Truk and Yap are UTC+10, and Ponape and Kosrae are UTC+11.
-# We don't know when Kosrae switched from UTC+12; assume January 1 for now.
+# that Truk and Yap are UT +10, and Ponape and Kosrae are +11.
+# We don't know when Kosrae switched from +12; assume January 1 for now.
# Midway
@@ -1615,11 +1612,11 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# ordaining - by a masterpiece of diplomatic flattery - that
# the Fourth of July should be celebrated twice in that year."
-# Although Shanks & Pottenger says they both switched to UTC-11:30
-# in 1911, and to UTC-11 in 1950. many earlier sources give UTC-11
+# Although Shanks & Pottenger says they both switched to UT -11:30
+# in 1911, and to -11 in 1950. many earlier sources give -11
# for American Samoa, e.g., the US National Bureau of Standards
# circular "Standard Time Throughout the World", 1932.
-# Assume American Samoa switched to UTC-11 in 1911, not 1950,
+# Assume American Samoa switched to -11 in 1911, not 1950,
# and that after 1950 they agreed until (western) Samoa skipped a
# day in 2011. Assume also that the Samoas follow the US and New
# Zealand's "ST"/"DT" style of daylight-saving abbreviations.
@@ -1706,9 +1703,17 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# of January the standard time in the Kingdom shall be moved backward by one
# hour to 1:00am.
-# From Pulu 'Anau (2002-11-05):
+# From Pulu ʻAnau (2002-11-05):
# The law was for 3 years, supposedly to get renewed. It wasn't.
+# From Pulu ʻAnau (2016-10-27):
+# http://mic.gov.to/news-today/press-releases/6375-daylight-saving-set-to-run-from-6-november-2016-to-15-january-2017
+# Cannot find anyone who knows the rules, has seen the duration or has seen
+# the cabinet decision, but it appears we are following Fiji's rule set.
+#
+# From Tim Parenti (2016-10-26):
+# Assume Tonga will observe DST from the first Sunday in November at 02:00
+# through the third Sunday in January at 03:00, like Fiji, for now.
# Wake
diff --git a/src/timezone/data/backward b/src/timezone/data/backward
index aab237a5e2..09f2a31b68 100644
--- a/src/timezone/data/backward
+++ b/src/timezone/data/backward
@@ -36,6 +36,7 @@ Link Asia/Shanghai Asia/Harbin
Link Asia/Urumqi Asia/Kashgar
Link Asia/Kathmandu Asia/Katmandu
Link Asia/Macau Asia/Macao
+Link Asia/Yangon Asia/Rangoon
Link Asia/Ho_Chi_Minh Asia/Saigon
Link Asia/Jerusalem Asia/Tel_Aviv
Link Asia/Thimphu Asia/Thimbu
@@ -95,6 +96,7 @@ Link Pacific/Auckland NZ
Link Pacific/Chatham NZ-CHAT
Link America/Denver Navajo
Link Asia/Shanghai PRC
+Link Pacific/Honolulu Pacific/Johnston
Link Pacific/Pohnpei Pacific/Ponape
Link Pacific/Pago_Pago Pacific/Samoa
Link Pacific/Chuuk Pacific/Truk
diff --git a/src/timezone/data/backzone b/src/timezone/data/backzone
index 13dc8d4d13..9ce78316c2 100644
--- a/src/timezone/data/backzone
+++ b/src/timezone/data/backzone
@@ -65,7 +65,7 @@ Link Africa/Asmara Africa/Asmera
# Mali (southern)
Zone Africa/Bamako -0:32:00 - LMT 1912
0:00 - GMT 1934 Feb 26
- -1:00 - WAT 1960 Jun 20
+ -1:00 - -01 1960 Jun 20
0:00 - GMT
# Central African Republic
@@ -75,7 +75,7 @@ Zone Africa/Bangui 1:14:20 - LMT 1912
# Gambia
Zone Africa/Banjul -1:06:36 - LMT 1912
-1:06:36 - BMT 1935 # Banjul Mean Time
- -1:00 - WAT 1964
+ -1:00 - -01 1964
0:00 - GMT
# Malawi
@@ -93,18 +93,18 @@ Zone Africa/Bujumbura 1:57:28 - LMT 1890
# Guinea
Zone Africa/Conakry -0:54:52 - LMT 1912
0:00 - GMT 1934 Feb 26
- -1:00 - WAT 1960
+ -1:00 - -01 1960
0:00 - GMT
# Senegal
Zone Africa/Dakar -1:09:44 - LMT 1912
- -1:00 - WAT 1941 Jun
+ -1:00 - -01 1941 Jun
0:00 - GMT
# Tanzania
Zone Africa/Dar_es_Salaam 2:37:08 - LMT 1931
3:00 - EAT 1948
- 2:45 - BEAUT 1961
+ 2:45 - +0245 1961
3:00 - EAT
# Djibouti
@@ -122,14 +122,14 @@ Zone Africa/Douala 0:38:48 - LMT 1912
# The International Hydrographic Bulletin, 1932-33, p 63 says that
# Sierra Leone would advance its clocks by 20 minutes on 1933-10-01.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule SL 1935 1942 - Jun 1 0:00 0:40 SLST
-Rule SL 1935 1942 - Oct 1 0:00 0 WAT
-Rule SL 1957 1962 - Jun 1 0:00 1:00 SLST
+Rule SL 1935 1942 - Jun 1 0:00 0:40 -0020
+Rule SL 1935 1942 - Oct 1 0:00 0 -01
+Rule SL 1957 1962 - Jun 1 0:00 1:00 +01
Rule SL 1957 1962 - Sep 1 0:00 0 GMT
Zone Africa/Freetown -0:53:00 - LMT 1882
-0:53:00 - FMT 1913 Jun # Freetown Mean Time
-1:00 SL %s 1957
- 0:00 SL %s
+ 0:00 SL GMT/+01
# Botswana
# From Paul Eggert (2013-02-21):
@@ -153,8 +153,8 @@ Zone Africa/Juba 2:06:24 - LMT 1931
# Uganda
Zone Africa/Kampala 2:09:40 - LMT 1928 Jul
3:00 - EAT 1930
- 2:30 - BEAT 1948
- 2:45 - BEAUT 1957
+ 2:30 - +0230 1948
+ 2:45 - +0245 1957
3:00 - EAT
# Rwanda
@@ -177,11 +177,11 @@ Zone Africa/Lome 0:04:52 - LMT 1893
#
# 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 Africa/Luanda 0:52:56 - LMT 1892
- 0:52:04 - AOT 1912 Jan 1 # Angola Time
+ 0:52:04 - +005204 1912 Jan 1
1:00 - WAT
# Democratic Republic of the Congo (east)
@@ -194,9 +194,9 @@ Zone Africa/Lusaka 1:53:08 - LMT 1903 Mar
# Equatorial Guinea
#
-# Although Shanks says that Malabo switched from UTC to UTC+1 on 1963-12-15,
+# Although Shanks says that Malabo switched from UT +00 to +01 on 1963-12-15,
# a Google Books search says that London Calling, Issues 432-465 (1948), p 19,
-# says that Spanish Guinea was at GMT+1 back then. The Shanks data entries
+# says that Spanish Guinea was at +01 back then. The Shanks data entries
# are most likely wrong, but we have nothing better; use them here for now.
#
Zone Africa/Malabo 0:35:08 - LMT 1912
@@ -216,19 +216,19 @@ Zone Africa/Mbabane 2:04:24 - LMT 1903 Mar
# Somalia
Zone Africa/Mogadishu 3:01:28 - LMT 1893 Nov
3:00 - EAT 1931
- 2:30 - BEAT 1957
+ 2:30 - +0230 1957
3:00 - EAT
# Niger
Zone Africa/Niamey 0:08:28 - LMT 1912
- -1:00 - WAT 1934 Feb 26
+ -1:00 - -01 1934 Feb 26
0:00 - GMT 1960
1:00 - WAT
# Mauritania
Zone Africa/Nouakchott -1:03:48 - LMT 1912
0:00 - GMT 1934 Feb 26
- -1:00 - WAT 1960 Nov 28
+ -1:00 - -01 1960 Nov 28
0:00 - GMT
# Burkina Faso
@@ -264,19 +264,19 @@ Zone America/Antigua -4:07:12 - LMT 1912 Mar 2
# The name "Comodoro Rivadavia" exceeds the 14-byte POSIX limit.
Zone America/Argentina/ComodRivadavia -4:30:00 - 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 - 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 - -03
# Aruba
Zone America/Aruba -4:40:24 - LMT 1912 Feb 12 # Oranjestad
- -4:30 - ANT 1965 # Netherlands Antilles Time
+ -4:30 - -0430 1965
-4:00 - AST
# Cayman Is
@@ -365,12 +365,12 @@ Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Cork Hill
# Formosa (FM), La Pampa (LP), Chubut (CH)
Zone America/Rosario -4:02:40 - LMT 1894 Nov
-4:16:44 - CMT 1920 May
- -4:00 - ART 1930 Dec
- -4:00 Arg AR%sT 1969 Oct 5
- -3:00 Arg AR%sT 1991 Jul
- -3:00 - ART 1999 Oct 3 0:00
- -4:00 Arg AR%sT 2000 Mar 3 0:00
- -3:00 - ART
+ -4:00 - -04 1930 Dec
+ -4:00 Arg -04/-03 1969 Oct 5
+ -3:00 Arg -03/-02 1991 Jul
+ -3:00 - -03 1999 Oct 3 0:00
+ -4:00 Arg -04/-03 2000 Mar 3 0:00
+ -3:00 - -03
# St Kitts-Nevis
Zone America/St_Kitts -4:10:52 - LMT 1912 Mar 2 # Basseterre
@@ -403,12 +403,12 @@ Link Antarctica/McMurdo Antarctica/South_Pole
# Milne says 2:59:54 was the meridian of the saluting battery at Aden,
# and that Yemen was at 1:55:56, the meridian of the Hagia Sophia.
Zone Asia/Aden 2:59:54 - LMT 1950
- 3:00 - AST
+ 3:00 - +03
# Bahrain
Zone Asia/Bahrain 3:22:20 - LMT 1920 # Manamah
- 4:00 - GST 1972 Jun
- 3:00 - AST
+ 4:00 - +04 1972 Jun
+ 3:00 - +03
# India
#
@@ -431,7 +431,7 @@ Zone Asia/Bahrain 3:22:20 - LMT 1920 # Manamah
# counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing,
# Yangchun, Yangjiang, Yu'nan, and Yunfu.
Zone Asia/Chongqing 7:06:20 - LMT 1928 # or Chungking
- 7:00 - LONT 1980 May # Long-shu Time
+ 7:00 - +07 1980 May
8:00 PRC C%sT
Link Asia/Chongqing Asia/Chungking
@@ -442,61 +442,61 @@ Link Asia/Chongqing Asia/Chungking
# October 1954, with exact date and time unspecified.
Zone Asia/Hanoi 7:03:24 - 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 1954 Oct
- 7:00 - ICT
+ 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 1954 Oct
+ 7:00 - +07
# China
# Changbai Time ("Long-white Time", Long-white = Heilongjiang area)
# Heilongjiang (except Mohe county), Jilin
Zone Asia/Harbin 8:26:44 - LMT 1928 # or Haerbin
- 8:30 - CHAT 1932 Mar # Changbai Time
+ 8:30 - +0830 1932 Mar
8:00 - CST 1940
- 9:00 - CHAT 1966 May
- 8:30 - CHAT 1980 May
+ 9:00 - +09 1966 May
+ 8:30 - +0830 1980 May
8:00 PRC C%sT
# far west China
Zone Asia/Kashgar 5:03:56 - LMT 1928 # or Kashi or Kaxgar
- 5:30 - KAST 1940 # Kashgar Time
- 5:00 - KAST 1980 May
+ 5:30 - +0530 1940
+ 5:00 - +05 1980 May
8:00 PRC C%sT
# Kuwait
Zone Asia/Kuwait 3:11:56 - LMT 1950
- 3:00 - AST
+ 3:00 - +03
# Oman
# Milne says 3:54:24 was the meridian of the Muscat Tidal Observatory.
Zone Asia/Muscat 3:54:24 - LMT 1920
- 4:00 - GST
+ 4:00 - +04
# India
# From Paul Eggert (2014-08-11), after a heads-up from Stephen Colebourne:
# According to a Portuguese decree (1911-05-26)
-# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
-# Portuguese India switched to GMT+5 on 1912-01-01.
+# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# Portuguese India switched to UT +05 on 1912-01-01.
#Zone Asia/Panaji [not enough info to complete]
# Cambodia
# From Paul Eggert (2014-10-11):
# See Asia/Ho_Chi_Minh for the source for most of this data. Also, guess
-# (1) Cambodia reverted to UT+7 on 1945-09-02, when Vietnam did, and
-# (2) they also reverted to UT+7 on 1953-11-09, the date of independence.
+# (1) Cambodia reverted to UT +07 on 1945-09-02, when Vietnam did, and
+# (2) they also reverted to +07 on 1953-11-09, the date of independence.
# These guesses are probably wrong but they're better than guessing no
# transitions there.
Zone Asia/Phnom_Penh 6:59: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 1953 Nov 9
- 7:00 - ICT
+ 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 1953 Nov 9
+ 7:00 - +07
# Israel
Zone Asia/Tel_Aviv 2:19:04 - LMT 1880
@@ -506,21 +506,21 @@ Zone Asia/Tel_Aviv 2:19:04 - LMT 1880
# Laos
# From Paul Eggert (2014-10-11):
# See Asia/Ho_Chi_Minh for the source for most of this data.
-# Trần's book says that Laos reverted to UT+7 on 1955-04-15.
-# Also, guess that Laos reverted to UT+7 on 1945-09-02, when Vietnam did;
+# Trần's book says that Laos reverted to UT +07 on 1955-04-15.
+# Also, guess that Laos reverted to +07 on 1945-09-02, when Vietnam did;
# this is probably wrong but it's better than guessing no transition.
Zone Asia/Vientiane 6:50:24 - 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 Apr 15
- 7:00 - ICT
+ 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 Apr 15
+ 7:00 - +07
# Jan Mayen
# From Whitman:
-Zone Atlantic/Jan_Mayen -1:00 - EGT
+Zone Atlantic/Jan_Mayen -1:00 - -01
# St Helena
Zone Atlantic/St_Helena -0:22:48 - LMT 1890 # Jamestown
@@ -663,15 +663,13 @@ Zone Pacific/Johnston -10:00 - HST
# " 3:00P Ar. MIDWAY ISLAND . . . . . . . . . M.L.T. Lv. 6:00A "
#
Zone Pacific/Midway -11:49:28 - LMT 1901
- -11:00 - NST 1956 Jun 3
- -11:00 1:00 NDT 1956 Sep 2
- -11:00 - NST 1967 Apr # N=Nome
- -11:00 - BST 1983 Nov 30 # B=Bering
- -11:00 - SST # S=Samoa
+ -11:00 - -11 1956 Jun 3
+ -11:00 1:00 -10 1956 Sep 2
+ -11:00 - -11
# N Mariana Is
Zone Pacific/Saipan -14:17:00 - LMT 1844 Dec 31
9:43:00 - LMT 1901
- 9:00 - MPT 1969 Oct # N Mariana Is Time
- 10:00 - MPT 2000 Dec 23
+ 9:00 - +09 1969 Oct
+ 10:00 - +10 2000 Dec 23
10:00 - ChST # Chamorro Standard Time
diff --git a/src/timezone/data/etcetera b/src/timezone/data/etcetera
index c2e25328d5..f5fa4c94b4 100644
--- a/src/timezone/data/etcetera
+++ b/src/timezone/data/etcetera
@@ -8,6 +8,13 @@
# need now for the entries that are not on UTC are for ships at sea
# that cannot use POSIX TZ settings.
+# Starting with POSIX 1003.1-2001, the entries below are all
+# unnecessary as settings for the TZ environment variable. E.g.,
+# instead of TZ='Etc/GMT+4' one can use the POSIX setting TZ='<-04>+4'.
+#
+# Do not use a POSIX TZ setting like TZ='GMT+4', which is four hours
+# behind GMT but uses the completely misleading abbreviation "GMT".
+
Zone Etc/GMT 0 - GMT
Zone Etc/UTC 0 - UTC
Zone Etc/UCT 0 - UCT
@@ -26,23 +33,13 @@ Link Etc/GMT Etc/GMT-0
Link Etc/GMT Etc/GMT+0
Link Etc/GMT Etc/GMT0
-# We use POSIX-style signs in the Zone names and the output abbreviations,
+# Be consistent with POSIX TZ settings in the Zone names,
# even though this is the opposite of what many people expect.
# POSIX has positive signs west of Greenwich, but many people expect
# positive signs east of Greenwich. For example, TZ='Etc/GMT+4' uses
-# the abbreviation "GMT+4" and corresponds to 4 hours behind UT
+# the abbreviation "-04" and corresponds to 4 hours behind UT
# (i.e. west of Greenwich) even though many people would expect it to
# mean 4 hours ahead of UT (i.e. east of Greenwich).
-#
-# In the draft 5 of POSIX 1003.1-200x, the angle bracket notation allows for
-# TZ='<GMT-4>+4'; if you want time zone abbreviations conforming to
-# ISO 8601 you can use TZ='<-0400>+4'. Thus the commonly-expected
-# offset is kept within the angle bracket (and is used for display)
-# while the POSIX sign is kept outside the angle bracket (and is used
-# for calculation).
-#
-# Do not use a TZ setting like TZ='GMT+4', which is four hours behind
-# GMT but uses the completely misleading abbreviation "GMT".
# Earlier incarnations of this package were not POSIX-compliant,
# and had lines such as
@@ -51,30 +48,31 @@ Link Etc/GMT Etc/GMT0
# way does a
# zic -l GMT-12
# so we moved the names into the Etc subdirectory.
+# Also, the time zone abbreviations are now compatible with %z.
-Zone Etc/GMT-14 14 - GMT-14 # 14 hours ahead of GMT
-Zone Etc/GMT-13 13 - GMT-13
-Zone Etc/GMT-12 12 - GMT-12
-Zone Etc/GMT-11 11 - GMT-11
-Zone Etc/GMT-10 10 - GMT-10
-Zone Etc/GMT-9 9 - GMT-9
-Zone Etc/GMT-8 8 - GMT-8
-Zone Etc/GMT-7 7 - GMT-7
-Zone Etc/GMT-6 6 - GMT-6
-Zone Etc/GMT-5 5 - GMT-5
-Zone Etc/GMT-4 4 - GMT-4
-Zone Etc/GMT-3 3 - GMT-3
-Zone Etc/GMT-2 2 - GMT-2
-Zone Etc/GMT-1 1 - GMT-1
-Zone Etc/GMT+1 -1 - GMT+1
-Zone Etc/GMT+2 -2 - GMT+2
-Zone Etc/GMT+3 -3 - GMT+3
-Zone Etc/GMT+4 -4 - GMT+4
-Zone Etc/GMT+5 -5 - GMT+5
-Zone Etc/GMT+6 -6 - GMT+6
-Zone Etc/GMT+7 -7 - GMT+7
-Zone Etc/GMT+8 -8 - GMT+8
-Zone Etc/GMT+9 -9 - GMT+9
-Zone Etc/GMT+10 -10 - GMT+10
-Zone Etc/GMT+11 -11 - GMT+11
-Zone Etc/GMT+12 -12 - GMT+12
+Zone Etc/GMT-14 14 - +14
+Zone Etc/GMT-13 13 - +13
+Zone Etc/GMT-12 12 - +12
+Zone Etc/GMT-11 11 - +11
+Zone Etc/GMT-10 10 - +10
+Zone Etc/GMT-9 9 - +09
+Zone Etc/GMT-8 8 - +08
+Zone Etc/GMT-7 7 - +07
+Zone Etc/GMT-6 6 - +06
+Zone Etc/GMT-5 5 - +05
+Zone Etc/GMT-4 4 - +04
+Zone Etc/GMT-3 3 - +03
+Zone Etc/GMT-2 2 - +02
+Zone Etc/GMT-1 1 - +01
+Zone Etc/GMT+1 -1 - -01
+Zone Etc/GMT+2 -2 - -02
+Zone Etc/GMT+3 -3 - -03
+Zone Etc/GMT+4 -4 - -04
+Zone Etc/GMT+5 -5 - -05
+Zone Etc/GMT+6 -6 - -06
+Zone Etc/GMT+7 -7 - -07
+Zone Etc/GMT+8 -8 - -08
+Zone Etc/GMT+9 -9 - -09
+Zone Etc/GMT+10 -10 - -10
+Zone Etc/GMT+11 -11 - -11
+Zone Etc/GMT+12 -12 - -12
diff --git a/src/timezone/data/europe b/src/timezone/data/europe
index cd3a0883d8..558b9f168f 100644
--- a/src/timezone/data/europe
+++ b/src/timezone/data/europe
@@ -6,15 +6,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,
@@ -56,27 +56,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 FET Further-eastern Europe (2011-2014)*
-# 3:00 MSK MSD MSM* Minsk, 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,
@@ -476,7 +472,7 @@ Link Europe/London Europe/Isle_of_Man
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2
- -0:25:21 - DMT 1916 May 21 2:00
+ -0:25:21 - 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
@@ -583,16 +579,33 @@ Rule E-Eur 1979 1995 - Sep lastSun 0:00 0 -
Rule E-Eur 1981 max - Mar lastSun 0:00 1:00 S
Rule E-Eur 1996 max - Oct lastSun 0:00 0 -
+
+# Daylight saving time for Russia and the Soviet Union
+#
+# The 1917-1921 decree URLs are from Alexander Belopolsky (2016-08-23).
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Russia 1917 only - Jul 1 23:00 1:00 MST # Moscow Summer Time
+#
+# Decree No. 142 (1917-12-22) http://istmat.info/node/28137
Rule Russia 1917 only - Dec 28 0:00 0 MMT # Moscow Mean Time
+#
+# Decree No. 497 (1918-05-30) http://istmat.info/node/30001
Rule Russia 1918 only - May 31 22:00 2:00 MDST # Moscow Double Summer Time
Rule Russia 1918 only - Sep 16 1:00 1:00 MST
+#
+# Decree No. 258 (1919-05-29) http://istmat.info/node/37949
Rule Russia 1919 only - May 31 23:00 2:00 MDST
-Rule Russia 1919 only - Jul 1 2:00 1:00 MSD
+#
+Rule Russia 1919 only - Jul 1 0:00u 1:00 MSD
Rule Russia 1919 only - Aug 16 0:00 0 MSK
+#
+# Decree No. 63 (1921-02-03) http://istmat.info/node/45840
Rule Russia 1921 only - Feb 14 23:00 1:00 MSD
-Rule Russia 1921 only - Mar 20 23:00 2:00 MSM # Midsummer
+#
+# Decree No. 121 (1921-03-07) http://istmat.info/node/45949
+Rule Russia 1921 only - Mar 20 23:00 2:00 +05
+#
Rule Russia 1921 only - Sep 1 0:00 1:00 MSD
Rule Russia 1921 only - Oct 1 0:00 0 -
# Act No. 925 of the Council of Ministers of the USSR (1980-10-24):
@@ -775,8 +788,6 @@ Zone Europe/Vienna 1:05:21 - LMT 1893 Apr
# From Alexander Bokovoy (2014-10-09):
# Belarussian government decided against changing to winter time....
# http://eng.belta.by/all_news/society/Belarus-decides-against-adjusting-time-in-Russias-wake_i_76335.html
-# From Paul Eggert (2014-10-08):
-# Hence Belarus can share time zone abbreviations with Moscow again.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Minsk 1:50:16 - LMT 1880
@@ -787,8 +798,7 @@ Zone Europe/Minsk 1:50:16 - LMT 1880
3:00 Russia MSK/MSD 1990
3:00 - MSK 1991 Mar 31 2:00s
2:00 Russia EE%sT 2011 Mar 27 2:00s
- 3:00 - FET 2014 Oct 26 1:00s
- 3:00 - MSK
+ 3:00 - +03
# Belgium
#
@@ -888,7 +898,7 @@ Zone Europe/Sofia 1:33:16 - LMT 1880
# Cyprus
# Please see the 'asia' file for Asia/Nicosia.
-# Czech Republic
+# Czech Republic / Czechia
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Czech 1945 only - Apr 8 2:00s 1:00 S
Rule Czech 1945 only - Nov 18 2:00s 0 -
@@ -1051,16 +1061,16 @@ Rule Thule 2007 max - Nov Sun>=1 2:00 0 S
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28
- -3:00 - WGT 1980 Apr 6 2:00
- -3:00 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
@@ -1296,7 +1306,7 @@ Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01
# http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf
# says that Bersarin issued an order to use Moscow time on May 20.
# However, Moscow did not observe daylight saving in 1945, so
-# this was equivalent to CEMT (GMT+3), not GMT+4.
+# this was equivalent to UT +03, not +04.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -1475,7 +1485,7 @@ Rule Iceland 1950 1966 - Oct Sun>=22 1:00s 0 -
Rule Iceland 1967 only - Oct 29 1:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/Reykjavik -1:28 - LMT 1908
- -1:00 Iceland IS%sT 1968 Apr 7 1:00s
+ -1:00 Iceland -01/+00 1968 Apr 7 1:00s
0:00 - GMT
# Italy
@@ -1487,73 +1497,84 @@ Zone Atlantic/Reykjavik -1:28 - LMT 1908
# But these events all occurred before the 1970 cutoff,
# so record only the time in Rome.
#
-# From Paul Eggert (2006-03-22):
-# For Italian DST we have three sources: Shanks & Pottenger, Whitman, and
-# F. Pollastri
-# Day-light Saving Time in Italy (2006-02-03)
-# http://toi.iriti.cnr.it/uk/ienitlt.html
-# ('FP' below), taken from an Italian National Electrotechnical Institute
-# publication. When the three sources disagree, guess who's right, as follows:
-#
-# year FP Shanks&P. (S) Whitman (W) Go with:
-# 1916 06-03 06-03 24:00 06-03 00:00 FP & W
-# 09-30 09-30 24:00 09-30 01:00 FP; guess 24:00s
-# 1917 04-01 03-31 24:00 03-31 00:00 FP & S
-# 09-30 09-29 24:00 09-30 01:00 FP & W
-# 1918 03-09 03-09 24:00 03-09 00:00 FP & S
-# 10-06 10-05 24:00 10-06 01:00 FP & W
-# 1919 03-01 03-01 24:00 03-01 00:00 FP & S
-# 10-04 10-04 24:00 10-04 01:00 FP; guess 24:00s
-# 1920 03-20 03-20 24:00 03-20 00:00 FP & S
-# 09-18 09-18 24:00 10-01 01:00 FP; guess 24:00s
-# 1944 04-02 04-03 02:00 S (see C-Eur)
-# 09-16 10-02 03:00 FP; guess 24:00s
-# 1945 09-14 09-16 24:00 FP; guess 24:00s
-# 1970 05-21 05-31 00:00 S
-# 09-20 09-27 00:00 S
+# From Michael Deckers (2016-10-24):
+# http://www.ac-ilsestante.it/MERIDIANE/ora_legale quotes a law of 1893-08-10
+# ... [translated as] "The preceding dispositions will enter into
+# force at the instant at which, according to the time specified in
+# the 1st article, the 1st of November 1893 will begin...."
+#
+# From Pierpaolo Bernardi (2016-10-20):
+# The authoritative source for time in Italy is the national metrological
+# institute, which has a summary page of historical DST data at
+# http://www.inrim.it/res/tf/ora_legale_i.shtml
+# (2016-10-24):
+# http://www.renzobaldini.it/le-ore-legali-in-italia/
+# has still different data for 1944. It divides Italy in two, as
+# there were effectively two governments at the time, north of Gothic
+# Line German controlled territory, official government RSI, and south
+# of the Gothic Line, controlled by allied armies.
+#
+# From Brian Inglis (2016-10-23):
+# Viceregal LEGISLATIVE DECREE. 14 September 1944, no. 219.
+# Restoration of Standard Time. (044U0219) (OJ 62 of 30.9.1944) ...
+# Given the R. law decreed on 1944-03-29, no. 92, by which standard time is
+# advanced to sixty minutes later starting at hour two on 1944-04-02; ...
+# Starting at hour three on the date 1944-09-17 standard time will be resumed.
+#
+# From Paul Eggert (2016-10-27):
+# Go with INRiM for DST rules, except as corrected by Inglis for 1944
+# for the Kingdom of Italy. This is consistent with Renzo Baldini.
+# Model Rome's occupation by using using C-Eur rules from 1943-09-10
+# to 1944-06-04; although Rome was an open city during this period, it
+# was effectively controlled by Germany.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Italy 1916 only - Jun 3 0:00s 1:00 S
-Rule Italy 1916 only - Oct 1 0:00s 0 -
-Rule Italy 1917 only - Apr 1 0:00s 1:00 S
-Rule Italy 1917 only - Sep 30 0:00s 0 -
-Rule Italy 1918 only - Mar 10 0:00s 1:00 S
-Rule Italy 1918 1919 - Oct Sun>=1 0:00s 0 -
-Rule Italy 1919 only - Mar 2 0:00s 1:00 S
-Rule Italy 1920 only - Mar 21 0:00s 1:00 S
-Rule Italy 1920 only - Sep 19 0:00s 0 -
-Rule Italy 1940 only - Jun 15 0:00s 1:00 S
-Rule Italy 1944 only - Sep 17 0:00s 0 -
-Rule Italy 1945 only - Apr 2 2:00 1:00 S
-Rule Italy 1945 only - Sep 15 0:00s 0 -
-Rule Italy 1946 only - Mar 17 2:00s 1:00 S
-Rule Italy 1946 only - Oct 6 2:00s 0 -
-Rule Italy 1947 only - Mar 16 0:00s 1:00 S
-Rule Italy 1947 only - Oct 5 0:00s 0 -
-Rule Italy 1948 only - Feb 29 2:00s 1:00 S
-Rule Italy 1948 only - Oct 3 2:00s 0 -
-Rule Italy 1966 1968 - May Sun>=22 0:00 1:00 S
-Rule Italy 1966 1969 - Sep Sun>=22 0:00 0 -
-Rule Italy 1969 only - Jun 1 0:00 1:00 S
-Rule Italy 1970 only - May 31 0:00 1:00 S
-Rule Italy 1970 only - Sep lastSun 0:00 0 -
-Rule Italy 1971 1972 - May Sun>=22 0:00 1:00 S
-Rule Italy 1971 only - Sep lastSun 1:00 0 -
-Rule Italy 1972 only - Oct 1 0:00 0 -
-Rule Italy 1973 only - Jun 3 0:00 1:00 S
-Rule Italy 1973 1974 - Sep lastSun 0:00 0 -
-Rule Italy 1974 only - May 26 0:00 1:00 S
-Rule Italy 1975 only - Jun 1 0:00s 1:00 S
-Rule Italy 1975 1977 - Sep lastSun 0:00s 0 -
-Rule Italy 1976 only - May 30 0:00s 1:00 S
-Rule Italy 1977 1979 - May Sun>=22 0:00s 1:00 S
-Rule Italy 1978 only - Oct 1 0:00s 0 -
-Rule Italy 1979 only - Sep 30 0:00s 0 -
+Rule Italy 1916 only - Jun 3 24:00 1:00 S
+Rule Italy 1916 1917 - Sep 30 24:00 0 -
+Rule Italy 1917 only - Mar 31 24:00 1:00 S
+Rule Italy 1918 only - Mar 9 24:00 1:00 S
+Rule Italy 1918 only - Oct 6 24:00 0 -
+Rule Italy 1919 only - Mar 1 24:00 1:00 S
+Rule Italy 1919 only - Oct 4 24:00 0 -
+Rule Italy 1920 only - Mar 20 24:00 1:00 S
+Rule Italy 1920 only - Sep 18 24:00 0 -
+Rule Italy 1940 only - Jun 14 24:00 1:00 S
+Rule Italy 1942 only - Nov 2 2:00s 0 -
+Rule Italy 1943 only - Mar 29 2:00s 1:00 S
+Rule Italy 1943 only - Oct 4 2:00s 0 -
+Rule Italy 1944 only - Apr 2 2:00s 1:00 S
+Rule Italy 1944 only - Sep 17 2:00s 0 -
+Rule Italy 1945 only - Apr 2 2:00 1:00 S
+Rule Italy 1945 only - Sep 15 1:00 0 -
+Rule Italy 1946 only - Mar 17 2:00s 1:00 S
+Rule Italy 1946 only - Oct 6 2:00s 0 -
+Rule Italy 1947 only - Mar 16 0:00s 1:00 S
+Rule Italy 1947 only - Oct 5 0:00s 0 -
+Rule Italy 1948 only - Feb 29 2:00s 1:00 S
+Rule Italy 1948 only - Oct 3 2:00s 0 -
+Rule Italy 1966 1968 - May Sun>=22 0:00s 1:00 S
+Rule Italy 1966 only - Sep 24 24:00 0 -
+Rule Italy 1967 1969 - Sep Sun>=22 0:00s 0 -
+Rule Italy 1969 only - Jun 1 0:00s 1:00 S
+Rule Italy 1970 only - May 31 0:00s 1:00 S
+Rule Italy 1970 only - Sep lastSun 0:00s 0 -
+Rule Italy 1971 1972 - May Sun>=22 0:00s 1:00 S
+Rule Italy 1971 only - Sep lastSun 0:00s 0 -
+Rule Italy 1972 only - Oct 1 0:00s 0 -
+Rule Italy 1973 only - Jun 3 0:00s 1:00 S
+Rule Italy 1973 1974 - Sep lastSun 0:00s 0 -
+Rule Italy 1974 only - May 26 0:00s 1:00 S
+Rule Italy 1975 only - Jun 1 0:00s 1:00 S
+Rule Italy 1975 1977 - Sep lastSun 0:00s 0 -
+Rule Italy 1976 only - May 30 0:00s 1:00 S
+Rule Italy 1977 1979 - May Sun>=22 0:00s 1:00 S
+Rule Italy 1978 only - Oct 1 0:00s 0 -
+Rule Italy 1979 only - Sep 30 0:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Rome 0:49:56 - LMT 1866 Sep 22
- 0:49:56 - RMT 1893 Nov 1 0:00s # Rome Mean
- 1:00 Italy CE%sT 1942 Nov 2 2:00s
- 1:00 C-Eur CE%sT 1944 Jul
+ 0:49:56 - RMT 1893 Oct 31 23:49:56 # Rome Mean
+ 1:00 Italy CE%sT 1943 Sep 10
+ 1:00 C-Eur CE%sT 1944 Jun 4
1:00 Italy CE%sT 1980
1:00 EU CE%sT
@@ -1752,6 +1773,10 @@ Zone Europe/Luxembourg 0:24:36 - LMT 1904 Jun
# See Europe/Belgrade.
# Malta
+#
+# From Paul Eggert (2016-10-21):
+# Assume 1900-1972 was like Rome, overriding Shanks.
+#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Malta 1973 only - Mar 31 0:00s 1:00 S
Rule Malta 1973 only - Sep 29 0:00s 0 -
@@ -1762,8 +1787,6 @@ Rule Malta 1975 1980 - Sep Sun>=15 2:00 0 -
Rule Malta 1980 only - Mar 31 2:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
- 1:00 Italy CE%sT 1942 Nov 2 2:00s
- 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
1:00 Italy CE%sT 1973 Mar 31
1:00 Malta CE%sT 1981
1:00 EU CE%sT
@@ -1895,7 +1918,7 @@ Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
# Amsterdam mean time.
# The data entries before 1945 are taken from
-# http://www.phys.uu.nl/~vgent/wettijd/wettijd.htm
+# http://www.staff.science.uu.nl/~gent0113/wettijd/wettijd.htm
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Neth 1916 only - May 1 0:00 1:00 NST # Netherlands Summer Time
@@ -1926,7 +1949,7 @@ Rule Neth 1945 only - Sep 16 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Amsterdam 0:19:32 - LMT 1835
0:19:32 Neth %s 1937 Jul 1
- 0:20 Neth NE%sT 1940 May 16 0:00 # Dutch Time
+ 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
@@ -2143,16 +2166,34 @@ Zone Europe/Lisbon -0:36:45 - LMT 1884
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
@@ -2260,7 +2301,6 @@ Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct
# http://www.worldtimezone.com/dst_news/dst_news_russia-map-2014-07.html
# From Paul Eggert (2006-03-22):
-# Except for Moscow after 1919-07-01, I invented the time zone abbreviations.
# Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991,
# are from Andrey A. Chernov. The rest is from Shanks & Pottenger,
# except we follow Chernov's report that 1992 DST transitions were Sat
@@ -2336,7 +2376,7 @@ Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr
2:00 Poland CE%sT 1946
3:00 Russia MSK/MSD 1989 Mar 26 2:00s
2:00 Russia EE%sT 2011 Mar 27 2:00s
- 3:00 - FET 2014 Oct 26 2:00s
+ 3:00 - +03 2014 Oct 26 2:00s
2:00 - EET
@@ -2389,6 +2429,16 @@ Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr
# 78 RU-SPE Saint Petersburg
# 83 RU-NEN Nenets Autonomous Okrug
+# From Paul Eggert (2016-08-23):
+# The Soviets switched to UT-based time in 1919. Decree No. 59
+# (1919-02-08) http://istmat.info/node/35567 established UT-based time
+# zones, and Decree No. 147 (1919-03-29) http://istmat.info/node/35854
+# specified a transition date of 1919-07-01, apparently at 00:00 UT.
+# No doubt only the Soviet-controlled regions switched on that date;
+# later transitions to UT-based time in other parts of Russia are
+# taken from what appear to be guesses by Shanks.
+# (Thanks to Alexander Belopolsky for pointers to the decrees.)
+
# From Stepan Golosunov (2016-03-07):
# 11. Regions-violators, 1981-1982.
# Wikipedia refers to
@@ -2430,7 +2480,7 @@ Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr
# attributes the 1982 changes to the Act of the Council of Ministers
# of the USSR No. 126 from 18.02.1982. 1980-925.txt also adds
# Udmurtia to the list of affected territories and lists Khatangsky
-# district separately from Taymyr Autonomous Okurg. Probably erroneously.
+# district separately from Taymyr Autonomous Okrug. Probably erroneously.
#
# The affected territories are currently listed under Europe/Moscow,
# Asia/Yekaterinburg and Asia/Krasnoyarsk.
@@ -2490,7 +2540,7 @@ Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr
Zone Europe/Moscow 2:30:17 - LMT 1880
2:30:17 - MMT 1916 Jul 3 # Moscow Mean Time
- 2:31:19 Russia %s 1919 Jul 1 2:00
+ 2:31:19 Russia %s 1919 Jul 1 0:00u
3:00 Russia %s 1921 Oct
3:00 Russia MSK/MSD 1922 Oct
2:00 - EET 1930 Jun 21
@@ -2501,10 +2551,8 @@ Zone Europe/Moscow 2:30:17 - LMT 1880
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
@@ -2566,29 +2614,48 @@ Zone Europe/Astrakhan 3:12:12 - LMT 1924 May
3:00 - +03 2016 Mar 27 2:00s
4:00 - +04
-# From Paul Eggert (2016-03-18):
+# From Paul Eggert (2016-11-11):
# Europe/Volgograd covers:
# 34 RU-VGG Volgograd Oblast
-# 64 RU-SAR Saratov Oblast
# The 1988 transition is from USSR act No. 5 (1988-01-04).
Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3
- 3:00 - TSAT 1925 Apr 6 # Tsaritsyn Time
- 3:00 - STAT 1930 Jun 21 # Stalingrad Time
- 4:00 - STAT 1961 Nov 11
- 4:00 Russia VOL%sT 1988 Mar 27 2:00s # Volgograd T
- 3:00 Russia VOL%sT 1991 Mar 31 2:00s
- 4:00 - VOLT 1992 Mar 29 2:00s
- 3:00 Russia MSK/MSD 2011 Mar 27 2:00s
- 4:00 - MSK 2014 Oct 26 2:00s
- 3:00 - MSK
+ 3:00 - +03 1930 Jun 21
+ 4:00 - +04 1961 Nov 11
+ 4:00 Russia +04/+05 1988 Mar 27 2:00s
+ 3:00 Russia +03/+04 1991 Mar 31 2:00s
+ 4:00 - +04 1992 Mar 29 2:00s
+ 3:00 Russia +03/+04 2011 Mar 27 2:00s
+ 4:00 - +04 2014 Oct 26 2:00s
+ 3:00 - +03
+
+# From Paul Eggert (2016-11-11):
+# Europe/Saratov covers:
+# 64 RU-SAR Saratov Oblast
+
+# From Yuri Konotopov (2016-11-11):
+# Dec 4, 2016 02:00 UTC+3.... Saratov Region's local time will be ... UTC+4.
+# From Stepan Golosunov (2016-11-11):
+# ... Byalokoz listed Saratov on 03:04:18.
+# From Stepan Golosunov (2016-11-22):
+# http://publication.pravo.gov.ru/Document/View/0001201611220031
+
+Zone Europe/Saratov 3:04:18 - LMT 1919 Jul 1 0:00u
+ 3:00 - +03 1930 Jun 21
+ 4:00 Russia +04/+05 1988 Mar 27 2:00s
+ 3:00 Russia +03/+04 1991 Mar 31 2:00s
+ 4:00 - +04 1992 Mar 29 2:00s
+ 3:00 Russia +03/+04 2011 Mar 27 2:00s
+ 4:00 - +04 2014 Oct 26 2:00s
+ 3:00 - +03 2016 Dec 4 2:00s
+ 4:00 - +04
# From Paul Eggert (2016-03-18):
# Europe/Kirov covers:
# 43 RU-KIR Kirov Oblast
# The 1989 transition is from USSR act No. 227 (1989-03-14).
#
-Zone Europe/Kirov 3:18:48 - LMT 1919 Jul 1 2:00
+Zone Europe/Kirov 3:18:48 - LMT 1919 Jul 1 0:00u
3:00 - +03 1930 Jun 21
4:00 Russia +04/+05 1989 Mar 26 2:00s
3:00 Russia +03/+04 1991 Mar 31 2:00s
@@ -2606,16 +2673,16 @@ Zone Europe/Kirov 3:18:48 - LMT 1919 Jul 1 2:00
# Byalokoz 1919 says Samara was 3:20:20.
# The 1989 transition is from USSR act No. 227 (1989-03-14).
-Zone Europe/Samara 3:20:20 - LMT 1919 Jul 1 2:00
- 3:00 - SAMT 1930 Jun 21 # Samara Time
- 4:00 - SAMT 1935 Jan 27
- 4:00 Russia KUY%sT 1989 Mar 26 2:00s # Kuybyshev
- 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
- 2:00 Russia EE%sT 1991 Sep 29 2:00s
- 3:00 - SAMT 1991 Oct 20 3:00
- 4:00 Russia SAM%sT 2010 Mar 28 2:00s
- 3:00 Russia SAM%sT 2011 Mar 27 2:00s
- 4:00 - SAMT
+Zone Europe/Samara 3:20:20 - LMT 1919 Jul 1 0:00u
+ 3:00 - +03 1930 Jun 21
+ 4:00 - +04 1935 Jan 27
+ 4:00 Russia +04/+05 1989 Mar 26 2:00s
+ 3:00 Russia +03/+04 1991 Mar 31 2:00s
+ 2:00 Russia +02/+03 1991 Sep 29 2:00s
+ 3:00 - +03 1991 Oct 20 3:00
+ 4:00 Russia +04/+05 2010 Mar 28 2:00s
+ 3:00 Russia +03/+04 2011 Mar 27 2:00s
+ 4:00 - +04
# From Paul Eggert (2016-03-18):
# Europe/Ulyanovsk covers:
@@ -2630,7 +2697,7 @@ Zone Europe/Samara 3:20:20 - LMT 1919 Jul 1 2:00
# From Matt Johnson (2016-03-09):
# http://publication.pravo.gov.ru/Document/View/0001201603090051
-Zone Europe/Ulyanovsk 3:13:36 - LMT 1919 Jul 1 2:00
+Zone Europe/Ulyanovsk 3:13:36 - LMT 1919 Jul 1 0:00u
3:00 - +03 1930 Jun 21
4:00 Russia +04/+05 1989 Mar 26 2:00s
3:00 Russia +03/+04 1991 Mar 31 2:00s
@@ -2662,12 +2729,12 @@ Zone Europe/Ulyanovsk 3:13:36 - LMT 1919 Jul 1 2:00
Zone Asia/Yekaterinburg 4:02:33 - LMT 1916 Jul 3
3:45:05 - PMT 1919 Jul 15 4:00
- 4:00 - SVET 1930 Jun 21 # Sverdlovsk Time
- 5:00 Russia SVE%sT 1991 Mar 31 2:00s
- 4:00 Russia SVE%sT 1992 Jan 19 2:00s
- 5:00 Russia YEK%sT 2011 Mar 27 2:00s
- 6:00 - YEKT 2014 Oct 26 2:00s
- 5:00 - YEKT
+ 4:00 - +04 1930 Jun 21
+ 5:00 Russia +05/+06 1991 Mar 31 2:00s
+ 4:00 Russia +04/+05 1992 Jan 19 2:00s
+ 5:00 Russia +05/+06 2011 Mar 27 2:00s
+ 6:00 - +06 2014 Oct 26 2:00s
+ 5:00 - +05
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
@@ -2677,12 +2744,12 @@ Zone Asia/Yekaterinburg 4:02:33 - LMT 1916 Jul 3
# Byalokoz 1919 says Omsk was 4:53:30.
Zone Asia/Omsk 4:53:30 - LMT 1919 Nov 14
- 5:00 - OMST 1930 Jun 21 # Omsk Time
- 6:00 Russia OMS%sT 1991 Mar 31 2:00s
- 5:00 Russia OMS%sT 1992 Jan 19 2:00s
- 6:00 Russia OMS%sT 2011 Mar 27 2:00s
- 7:00 - OMST 2014 Oct 26 2:00s
- 6:00 - OMST
+ 5:00 - +05 1930 Jun 21
+ 6:00 Russia +06/+07 1991 Mar 31 2:00s
+ 5:00 Russia +05/+06 1992 Jan 19 2:00s
+ 6:00 Russia +06/+07 2011 Mar 27 2:00s
+ 7:00 - +07 2014 Oct 26 2:00s
+ 6:00 - +06
# From Paul Eggert (2016-02-22):
# Asia/Barnaul covers:
@@ -2762,7 +2829,7 @@ Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
# Note that time belts (numbered from 2 (Moscow) to 12 according to their
# GMT/UTC offset and having too many exceptions like regions formally
# belonging to one belt but using time from another) were replaced
-# with time zones in 2011 with different numberings (there was a
+# with time zones in 2011 with different numbering (there was a
# 2-hour gap between second and third zones in 2011-2014).
# From Stepan Golosunov (2016-04-12):
@@ -2845,12 +2912,12 @@ Zone Asia/Novokuznetsk 5:48:48 - LMT 1924 May 1
# Byalokoz 1919 says Krasnoyarsk was 6:11:26.
Zone Asia/Krasnoyarsk 6:11:26 - LMT 1920 Jan 6
- 6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time
- 7:00 Russia KRA%sT 1991 Mar 31 2:00s
- 6:00 Russia KRA%sT 1992 Jan 19 2:00s
- 7:00 Russia KRA%sT 2011 Mar 27 2:00s
- 8:00 - KRAT 2014 Oct 26 2:00s
- 7:00 - KRAT
+ 6:00 - +06 1930 Jun 21
+ 7:00 Russia +07/+08 1991 Mar 31 2:00s
+ 6:00 Russia +06/+07 1992 Jan 19 2:00s
+ 7:00 Russia +07/+08 2011 Mar 27 2:00s
+ 8:00 - +08 2014 Oct 26 2:00s
+ 7:00 - +07
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
@@ -2867,12 +2934,12 @@ Zone Asia/Krasnoyarsk 6:11:26 - LMT 1920 Jan 6
Zone Asia/Irkutsk 6:57:05 - LMT 1880
6:57:05 - IMT 1920 Jan 25 # Irkutsk Mean Time
- 7:00 - IRKT 1930 Jun 21 # Irkutsk Time
- 8:00 Russia IRK%sT 1991 Mar 31 2:00s
- 7:00 Russia IRK%sT 1992 Jan 19 2:00s
- 8:00 Russia IRK%sT 2011 Mar 27 2:00s
- 9:00 - IRKT 2014 Oct 26 2:00s
- 8:00 - IRKT
+ 7:00 - +07 1930 Jun 21
+ 8:00 Russia +08/+09 1991 Mar 31 2:00s
+ 7:00 Russia +07/+08 1992 Jan 19 2:00s
+ 8:00 Russia +08/+09 2011 Mar 27 2:00s
+ 9:00 - +09 2014 Oct 26 2:00s
+ 8:00 - +08
# From Tim Parenti (2014-07-06):
@@ -2889,13 +2956,13 @@ Zone Asia/Irkutsk 6:57:05 - LMT 1880
# http://publication.pravo.gov.ru/Document/View/0001201512300107
Zone Asia/Chita 7:33:52 - LMT 1919 Dec 15
- 8:00 - YAKT 1930 Jun 21 # Yakutsk Time
- 9:00 Russia YAK%sT 1991 Mar 31 2:00s
- 8:00 Russia YAK%sT 1992 Jan 19 2:00s
- 9:00 Russia YAK%sT 2011 Mar 27 2:00s
- 10:00 - YAKT 2014 Oct 26 2:00s
- 8:00 - IRKT 2016 Mar 27 2:00
- 9:00 - YAKT
+ 8:00 - +08 1930 Jun 21
+ 9:00 Russia +09/+10 1991 Mar 31 2:00s
+ 8:00 Russia +08/+09 1992 Jan 19 2:00s
+ 9:00 Russia +09/+10 2011 Mar 27 2:00s
+ 10:00 - +10 2014 Oct 26 2:00s
+ 8:00 - +08 2016 Mar 27 2:00
+ 9:00 - +09
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
@@ -2935,12 +3002,12 @@ Zone Asia/Chita 7:33:52 - LMT 1919 Dec 15
# Byalokoz 1919 says Yakutsk was 8:38:58.
Zone Asia/Yakutsk 8:38:58 - LMT 1919 Dec 15
- 8:00 - YAKT 1930 Jun 21 # Yakutsk Time
- 9:00 Russia YAK%sT 1991 Mar 31 2:00s
- 8:00 Russia YAK%sT 1992 Jan 19 2:00s
- 9:00 Russia YAK%sT 2011 Mar 27 2:00s
- 10:00 - YAKT 2014 Oct 26 2:00s
- 9:00 - YAKT
+ 8:00 - +08 1930 Jun 21
+ 9:00 Russia +09/+10 1991 Mar 31 2:00s
+ 8:00 Russia +08/+09 1992 Jan 19 2:00s
+ 9:00 Russia +09/+10 2011 Mar 27 2:00s
+ 10:00 - +10 2014 Oct 26 2:00s
+ 9:00 - +09
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
@@ -2958,12 +3025,12 @@ Zone Asia/Yakutsk 8:38:58 - LMT 1919 Dec 15
# Go with Byalokoz.
Zone Asia/Vladivostok 8:47:31 - LMT 1922 Nov 15
- 9:00 - VLAT 1930 Jun 21 # Vladivostok Time
- 10:00 Russia VLA%sT 1991 Mar 31 2:00s
- 9:00 Russia VLA%sT 1992 Jan 19 2:00s
- 10:00 Russia VLA%sT 2011 Mar 27 2:00s
- 11:00 - VLAT 2014 Oct 26 2:00s
- 10:00 - VLAT
+ 9:00 - +09 1930 Jun 21
+ 10:00 Russia +10/+11 1991 Mar 31 2:00s
+ 9:00 Russia +09/+10 1992 Jan 19 2:00s
+ 10:00 Russia +10/+11 2011 Mar 27 2:00s
+ 11:00 - +11 2014 Oct 26 2:00s
+ 10:00 - +10
# From Tim Parenti (2014-07-03):
@@ -2981,14 +3048,14 @@ Zone Asia/Vladivostok 8:47:31 - LMT 1922 Nov 15
# This transition is no doubt wrong, but we have no better info.
Zone Asia/Khandyga 9:02:13 - LMT 1919 Dec 15
- 8:00 - YAKT 1930 Jun 21 # Yakutsk Time
- 9:00 Russia YAK%sT 1991 Mar 31 2:00s
- 8:00 Russia YAK%sT 1992 Jan 19 2:00s
- 9:00 Russia YAK%sT 2004
- 10:00 Russia VLA%sT 2011 Mar 27 2:00s
- 11:00 - VLAT 2011 Sep 13 0:00s # Decree 725?
- 10:00 - YAKT 2014 Oct 26 2:00s
- 9:00 - YAKT
+ 8:00 - +08 1930 Jun 21
+ 9:00 Russia +09/+10 1991 Mar 31 2:00s
+ 8:00 Russia +08/+09 1992 Jan 19 2:00s
+ 9:00 Russia +09/+10 2004
+ 10:00 Russia +10/+11 2011 Mar 27 2:00s
+ 11:00 - +11 2011 Sep 13 0:00s # Decree 725?
+ 10:00 - +10 2014 Oct 26 2:00s
+ 9:00 - +09
# From Tim Parenti (2014-07-03):
@@ -3004,15 +3071,14 @@ Zone Asia/Khandyga 9:02:13 - LMT 1919 Dec 15
# The Zone name should be Asia/Yuzhno-Sakhalinsk, but that's too long.
Zone Asia/Sakhalin 9:30:48 - LMT 1905 Aug 23
- 9:00 - JCST 1937 Oct 1
- 9:00 - JST 1945 Aug 25
- 11:00 Russia SAK%sT 1991 Mar 31 2:00s # Sakhalin T
- 10:00 Russia SAK%sT 1992 Jan 19 2:00s
- 11:00 Russia SAK%sT 1997 Mar lastSun 2:00s
- 10:00 Russia SAK%sT 2011 Mar 27 2:00s
- 11:00 - SAKT 2014 Oct 26 2:00s
- 10:00 - SAKT 2016 Mar 27 2:00s
- 11:00 - SAKT
+ 9:00 - +09 1945 Aug 25
+ 11:00 Russia +11/+12 1991 Mar 31 2:00s # Sakhalin T
+ 10:00 Russia +10/+11 1992 Jan 19 2:00s
+ 11:00 Russia +11/+12 1997 Mar lastSun 2:00s
+ 10:00 Russia +10/+11 2011 Mar 27 2:00s
+ 11:00 - +11 2014 Oct 26 2:00s
+ 10:00 - +10 2016 Mar 27 2:00s
+ 11:00 - +11
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
@@ -3035,13 +3101,13 @@ Zone Asia/Sakhalin 9:30:48 - LMT 1905 Aug 23
# http://publication.pravo.gov.ru/Document/View/0001201604050038
Zone Asia/Magadan 10:03:12 - LMT 1924 May 2
- 10:00 - MAGT 1930 Jun 21 # Magadan Time
- 11:00 Russia MAG%sT 1991 Mar 31 2:00s
- 10:00 Russia MAG%sT 1992 Jan 19 2:00s
- 11:00 Russia MAG%sT 2011 Mar 27 2:00s
- 12:00 - MAGT 2014 Oct 26 2:00s
- 10:00 - MAGT 2016 Apr 24 2:00s
- 11:00 - MAGT
+ 10:00 - +10 1930 Jun 21 # Magadan Time
+ 11:00 Russia +11/+12 1991 Mar 31 2:00s
+ 10:00 Russia +10/+11 1992 Jan 19 2:00s
+ 11:00 Russia +11/+12 2011 Mar 27 2:00s
+ 12:00 - +12 2014 Oct 26 2:00s
+ 10:00 - +10 2016 Apr 24 2:00s
+ 11:00 - +11
# From Tim Parenti (2014-07-06):
@@ -3084,17 +3150,14 @@ Zone Asia/Magadan 10:03:12 - LMT 1924 May 2
# in Russian.) In addition, Srednekolymsk appears to be a much older
# settlement and the population of Zyryanka seems to be declining.
# Go with Srednekolymsk.
-#
-# Since Magadan Oblast moves to UTC+10 on 2014-10-26, we cannot keep using MAGT
-# as the abbreviation. Use SRET instead.
Zone Asia/Srednekolymsk 10:14:52 - LMT 1924 May 2
- 10:00 - MAGT 1930 Jun 21 # Magadan Time
- 11:00 Russia MAG%sT 1991 Mar 31 2:00s
- 10:00 Russia MAG%sT 1992 Jan 19 2:00s
- 11:00 Russia MAG%sT 2011 Mar 27 2:00s
- 12:00 - MAGT 2014 Oct 26 2:00s
- 11:00 - SRET # Srednekolymsk Time
+ 10:00 - +10 1930 Jun 21
+ 11:00 Russia +11/+12 1991 Mar 31 2:00s
+ 10:00 Russia +10/+11 1992 Jan 19 2:00s
+ 11:00 Russia +11/+12 2011 Mar 27 2:00s
+ 12:00 - +12 2014 Oct 26 2:00s
+ 11:00 - +11
# From Tim Parenti (2014-07-03):
@@ -3112,14 +3175,14 @@ Zone Asia/Srednekolymsk 10:14:52 - LMT 1924 May 2
# UTC+12 since at least then, too.
Zone Asia/Ust-Nera 9:32:54 - LMT 1919 Dec 15
- 8:00 - YAKT 1930 Jun 21 # Yakutsk Time
- 9:00 Russia YAKT 1981 Apr 1
- 11:00 Russia MAG%sT 1991 Mar 31 2:00s
- 10:00 Russia MAG%sT 1992 Jan 19 2:00s
- 11:00 Russia MAG%sT 2011 Mar 27 2:00s
- 12:00 - MAGT 2011 Sep 13 0:00s # Decree 725?
- 11:00 - VLAT 2014 Oct 26 2:00s
- 10:00 - VLAT
+ 8:00 - +08 1930 Jun 21
+ 9:00 Russia +09/+10 1981 Apr 1
+ 11:00 Russia +11/+12 1991 Mar 31 2:00s
+ 10:00 Russia +10/+11 1992 Jan 19 2:00s
+ 11:00 Russia +11/+12 2011 Mar 27 2:00s
+ 12:00 - +12 2011 Sep 13 0:00s # Decree 725?
+ 11:00 - +11 2014 Oct 26 2:00s
+ 10:00 - +10
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
@@ -3132,12 +3195,12 @@ Zone Asia/Ust-Nera 9:32:54 - LMT 1919 Dec 15
# The Zone name should be Asia/Petropavlovsk-Kamchatski or perhaps
# Asia/Petropavlovsk-Kamchatsky, but these are too long.
Zone Asia/Kamchatka 10:34:36 - LMT 1922 Nov 10
- 11:00 - PETT 1930 Jun 21 # P-K Time
- 12:00 Russia PET%sT 1991 Mar 31 2:00s
- 11:00 Russia PET%sT 1992 Jan 19 2:00s
- 12:00 Russia PET%sT 2010 Mar 28 2:00s
- 11:00 Russia PET%sT 2011 Mar 27 2:00s
- 12:00 - PETT
+ 11:00 - +11 1930 Jun 21
+ 12:00 Russia +12/+13 1991 Mar 31 2:00s
+ 11:00 Russia +11/+12 1992 Jan 19 2:00s
+ 12:00 Russia +12/+13 2010 Mar 28 2:00s
+ 11:00 Russia +11/+12 2011 Mar 27 2:00s
+ 12:00 - +12
# From Tim Parenti (2014-07-03):
@@ -3145,13 +3208,13 @@ Zone Asia/Kamchatka 10:34:36 - LMT 1922 Nov 10
# 87 RU-CHU Chukotka Autonomous Okrug
Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2
- 12:00 - ANAT 1930 Jun 21 # Anadyr Time
- 13:00 Russia ANA%sT 1982 Apr 1 0:00s
- 12:00 Russia ANA%sT 1991 Mar 31 2:00s
- 11:00 Russia ANA%sT 1992 Jan 19 2:00s
- 12:00 Russia ANA%sT 2010 Mar 28 2:00s
- 11:00 Russia ANA%sT 2011 Mar 27 2:00s
- 12:00 - ANAT
+ 12:00 - +12 1930 Jun 21
+ 13:00 Russia +13/+14 1982 Apr 1 0:00s
+ 12:00 Russia +12/+13 1991 Mar 31 2:00s
+ 11:00 Russia +11/+12 1992 Jan 19 2:00s
+ 12:00 Russia +12/+13 2010 Mar 28 2:00s
+ 11:00 Russia +11/+12 2011 Mar 27 2:00s
+ 12:00 - +12
# San Marino
@@ -3182,46 +3245,77 @@ Link Europe/Prague Europe/Bratislava
# 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 -
@@ -3233,11 +3327,11 @@ Rule SpainAfrica 1977 only - Sep 28 0:00 0 -
Rule SpainAfrica 1978 only - Jun 1 0:00 1:00 S
Rule SpainAfrica 1978 only - Aug 4 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Madrid -0:14:44 - LMT 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
@@ -3246,7 +3340,7 @@ Zone Africa/Ceuta -0:21:16 - LMT 1901
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
@@ -3410,22 +3504,24 @@ Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16 # See above comment.
# Turkey
-# From Amar Devegowda (2007-01-03):
-# The time zone rules for Istanbul, Turkey have not been changed for years now.
-# ... The latest rules are available at:
-# http://www.timeanddate.com/worldclock/timezone.html?n=107
-# From Steffen Thorsen (2007-01-03):
-# I have been able to find press records back to 1996 which all say that
-# DST started 01:00 local time and end at 02:00 local time. I am not sure
-# what happened before that. One example for each year from 1996 to 2001:
-# http://newspot.byegm.gov.tr/arsiv/1996/21/N4.htm
-# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING97/03/97X03X25.TXT
-# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING98/03/98X03X02.HTM
-# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING99/10/99X10X26.HTM#%2016
-# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING2000/03/00X03X06.HTM#%2021
-# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING2001/03/23x03x01.HTM#%2027
-# From Paul Eggert (2007-01-03):
-# Prefer the above source to Shanks & Pottenger for time stamps after 1990.
+# From Kıvanç Yazan (2016-09-25):
+# 1) For 1986-2006, DST started at 01:00 local and ended at 02:00 local, with
+# no exceptions.
+# 2) 1994's lastSun was overridden with Mar 20 ...
+# Here are official papers:
+# http://www.resmigazete.gov.tr/arsiv/19032.pdf - page 2 for 1986
+# http://www.resmigazete.gov.tr/arsiv/19400.pdf - page 4 for 1987
+# http://www.resmigazete.gov.tr/arsiv/19752.pdf - page 15 for 1988
+# http://www.resmigazete.gov.tr/arsiv/20102.pdf - page 6 for 1989
+# http://www.resmigazete.gov.tr/arsiv/20464.pdf - page 1 for 1990 - 1992
+# http://www.resmigazete.gov.tr/arsiv/21531.pdf - page 15 for 1993 - 1995
+# http://www.resmigazete.gov.tr/arsiv/21879.pdf - page 1 for overriding 1994
+# http://www.resmigazete.gov.tr/arsiv/22588.pdf - page 1 for 1996, 1997
+# http://www.resmigazete.gov.tr/arsiv/23286.pdf - page 10 for 1998 - 2000
+# http://www.resmigazete.gov.tr/eskiler/2001/03/20010324.htm#2 - for 2001
+# http://www.resmigazete.gov.tr/eskiler/2002/03/20020316.htm#2 - for 2002-2006
+# From Paul Eggert (2016-09-25):
+# Prefer the above sources to Shanks & Pottenger for time stamps after 1985.
# From Steffen Thorsen (2007-03-09):
# Starting 2007 though, it seems that they are adopting EU's 1:00 UTC
@@ -3472,6 +3568,14 @@ Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16 # See above comment.
# Engineered Standard Time," said Twitter user @aysekarahasan.
# http://www.bbc.com/news/world-europe-34631326
+# From Burak AYDIN (2016-09-08):
+# Turkey will stay in Daylight Saving Time even in winter....
+# http://www.resmigazete.gov.tr/eskiler/2016/09/20160908-2.pdf
+#
+# From Paul Eggert (2016-09-07):
+# The change is permanent, so this is the new standard time in Turkey.
+# It takes effect today, which is not much notice.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Turkey 1916 only - May 1 0:00 1:00 S
Rule Turkey 1916 only - Oct 1 0:00 0 -
@@ -3526,16 +3630,16 @@ Rule Turkey 1983 only - Jul 31 0:00 1:00 S
Rule Turkey 1983 only - Oct 2 0:00 0 -
Rule Turkey 1985 only - Apr 20 0:00 1:00 S
Rule Turkey 1985 only - Sep 28 0:00 0 -
-Rule Turkey 1986 1990 - Mar lastSun 2:00s 1:00 S
-Rule Turkey 1986 1990 - Sep lastSun 2:00s 0 -
-Rule Turkey 1991 2006 - Mar lastSun 1:00s 1:00 S
-Rule Turkey 1991 1995 - Sep lastSun 1:00s 0 -
+Rule Turkey 1986 1993 - Mar lastSun 1:00s 1:00 S
+Rule Turkey 1986 1995 - Sep lastSun 1:00s 0 -
+Rule Turkey 1994 only - Mar 20 1:00s 1:00 S
+Rule Turkey 1995 2006 - Mar lastSun 1:00s 1:00 S
Rule Turkey 1996 2006 - Oct lastSun 1:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Istanbul 1:55:52 - LMT 1880
1:56:56 - IMT 1910 Oct # Istanbul Mean Time?
2:00 Turkey EE%sT 1978 Oct 15
- 3:00 Turkey TR%sT 1985 Apr 20 # Turkey Time
+ 3:00 Turkey +03/+04 1985 Apr 20
2:00 Turkey EE%sT 2007
2:00 EU EE%sT 2011 Mar 27 1:00u
2:00 - EET 2011 Mar 28 1:00u
@@ -3543,7 +3647,8 @@ Zone Europe/Istanbul 1:55:52 - LMT 1880
2:00 - EET 2014 Mar 31 1:00u
2:00 EU EE%sT 2015 Oct 25 1:00u
2:00 1:00 EEST 2015 Nov 8 1:00u
- 2:00 EU EE%sT
+ 2:00 EU EE%sT 2016 Sep 7
+ 3:00 - +03
Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
# Ukraine
@@ -3648,7 +3753,7 @@ Zone Europe/Uzhgorod 1:29:12 - LMT 1890 Oct
# 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
diff --git a/src/timezone/data/factory b/src/timezone/data/factory
index 4304f7cf7b..75fa4a11c3 100644
--- a/src/timezone/data/factory
+++ b/src/timezone/data/factory
@@ -1,9 +1,10 @@
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
-# For companies who don't want to put time zone specification in
-# their installation procedures. When users run date, they'll get the message.
-# Also useful for the "comp.sources" version.
+# For distributors who don't want to put time zone specification in
+# their installation procedures. Users that run 'date' will get the
+# time zone abbreviation "-00", indicating that the actual time zone
+# is unknown.
# Zone NAME GMTOFF RULES FORMAT
-Zone Factory 0 - "Local time zone must be set--see zic manual page"
+Zone Factory 0 - -00
diff --git a/src/timezone/data/northamerica b/src/timezone/data/northamerica
index 6256f970a8..6ede9dcd96 100644
--- a/src/timezone/data/northamerica
+++ b/src/timezone/data/northamerica
@@ -24,8 +24,32 @@
# was the result of his proposals at the Convention of Railroad Trunk Lines
# in New York City (1869-10). His 1870 proposal was based on Washington, DC,
# but in 1872-05 he moved the proposed origin to Greenwich.
-# His proposal was adopted by the railroads on 1883-11-18 at 12:00,
-# and the most of the country soon followed suit.
+
+# From Paul Eggert (2016-09-21):
+# Dowd's proposal left many details unresolved, such as where to draw
+# lines between time zones. The key individual who made time zones
+# work in the US was William Frederick Allen - railway engineer,
+# managing editor of the Travelers' Guide, and secretary of the
+# General Time Convention, a railway standardization group. Allen
+# spent months in dialogs with scientific and railway leaders,
+# developed a workable plan to institute time zones, and presented it
+# to the General Time Convention on 1883-04-11, saying that his plan
+# meant "local time would be practically abolished" - a plus for
+# railway scheduling. By the next convention on 1883-10-11 nearly all
+# railroads had agreed and it took effect on 1883-11-18 at 12:00.
+# That Sunday was called the "day of two noons", as the eastern parts
+# of the new zones observed noon twice. Allen witnessed the
+# transition in New York City, writing:
+#
+# I heard the bells of St. Paul's strike on the old time. Four
+# minutes later, obedient to the electrical signal from the Naval
+# Observatory ... the time-ball made its rapid descent, the chimes
+# of old Trinity rang twelve measured strokes, and local time was
+# abandoned, probably forever.
+#
+# Most of the US soon followed suit. See:
+# Bartky IR. The adoption of standard time. Technol Cult 1989 Jan;30(1):25-56.
+# http://dx.doi.org/10.2307/3105430
# From Paul Eggert (2005-04-16):
# That 1883 transition occurred at 12:00 new time, not at 12:00 old time.
@@ -154,22 +178,6 @@ Zone CST6CDT -6:00 US C%sT
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
@@ -226,6 +234,21 @@ Zone PST8PDT -8:00 US P%sT
# 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".
@@ -281,6 +304,15 @@ Zone PST8PDT -8:00 US P%sT
# 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
@@ -413,11 +445,42 @@ Zone America/Denver -6:59:56 - LMT 1883 Nov 18 12:00:04
# north of the Salmon River, and the towns of Burgdorf and Warren),
# Nevada (except West Wendover), Oregon (except the northern 3/4 of
# Malheur county), and Washington
+
+# From Paul Eggert (2016-08-20):
+# In early February 1948, in response to California's electricity shortage,
+# PG&E changed power frequency from 60 to 59.5 Hz during daylight hours,
+# causing electric clocks to lose six minutes per day. (This did not change
+# legal time, and is not part of the data here.) See:
+# Ross SA. An energy crisis from the past: Northern California in 1948.
+# Working Paper No. 8, Institute of Governmental Studies, UC Berkeley,
+# 1973-11. http://escholarship.org/uc/item/8x22k30c
+#
+# In another measure to save electricity, DST was instituted from 1948-03-14
+# at 02:01 to 1949-01-16 at 02:00, with the governor having the option to move
+# the fallback transition earlier. See pages 3-4 of:
+# http://clerk.assembly.ca.gov/sites/clerk.assembly.ca.gov/files/archive/Statutes/1948/48Vol1_Chapters.pdf
+#
+# In response:
+#
+# Governor Warren received a torrent of objecting mail, and it is not too much
+# to speculate that the objections to Daylight Saving Time were one important
+# factor in the defeat of the Dewey-Warren Presidential ticket in California.
+# -- Ross, p 25
+#
+# On December 8 the governor exercised the option, setting the date to January 1
+# (LA Times 1948-12-09). The transition time was 02:00 (LA Times 1949-01-01).
+#
+# Despite the controversy, in 1949 California voters approved Proposition 12,
+# which established DST from April's last Sunday at 01:00 until September's
+# last Sunday at 02:00. This was amended by 1962's Proposition 6, which changed
+# the fall-back date to October's last Sunday. See:
+# http://repository.uchastings.edu/cgi/viewcontent.cgi?article=1501&context=ca_ballot_props
+# http://repository.uchastings.edu/cgi/viewcontent.cgi?article=1636&context=ca_ballot_props
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-Rule CA 1948 only - Mar 14 2:00 1:00 D
+Rule CA 1948 only - Mar 14 2:01 1:00 D
Rule CA 1949 only - Jan 1 2:00 0 S
-Rule CA 1950 1966 - Apr lastSun 2:00 1:00 D
+Rule CA 1950 1966 - Apr lastSun 1:00 1:00 D
Rule CA 1950 1961 - Sep lastSun 2:00 0 S
Rule CA 1962 1966 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -427,7 +490,7 @@ Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 12:07:02
-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,
@@ -533,10 +596,8 @@ Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18
-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
@@ -625,7 +686,6 @@ Zone Pacific/Honolulu -10:31:26 - LMT 1896 Jan 13 12:00
-10:30 1:00 HDT 1945 Sep 30 2:00
-10:30 - HST 1947 Jun 8 2:00
-10:00 - HST
-Link Pacific/Honolulu Pacific/Johnston
# Now we turn to US areas that have diverged from the consensus since 1970.
@@ -1013,15 +1073,15 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
################################################################################
-# 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,
@@ -2679,15 +2739,15 @@ Zone America/Barbados -3:58:29 - LMT 1924 # Bridgetown
# 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
@@ -2959,16 +3019,16 @@ Zone America/Havana -5:29:28 - LMT 1890
# 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
@@ -3079,6 +3139,12 @@ Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5
# http://www.vantbefinfo.com/changement-dheure-pas-pour-haiti/
# http://news.anmwe.com/haiti-lheure-nationale-ne-sera-ni-avancee-ni-reculee-cette-annee/
+# From Steffen Thorsen (2017-03-12):
+# We have received 4 mails from different people telling that Haiti
+# has started DST again today, and this source seems to confirm that,
+# I have not been able to find a more authoritative source:
+# https://www.haitilibre.com/en/news-20319-haiti-notices-time-change-in-haiti.html
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Haiti 1983 only - May 8 0:00 1:00 D
Rule Haiti 1984 1987 - Apr lastSun 0:00 1:00 D
@@ -3091,6 +3157,8 @@ Rule Haiti 2005 2006 - Apr Sun>=1 0:00 1:00 D
Rule Haiti 2005 2006 - Oct lastSun 0:00 0 S
Rule Haiti 2012 2015 - Mar Sun>=8 2:00 1:00 D
Rule Haiti 2012 2015 - Nov Sun>=1 2:00 0 S
+Rule Haiti 2017 max - Mar Sun>=8 2:00 1:00 D
+Rule Haiti 2017 max - Nov Sun>=1 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Port-au-Prince -4:49:20 - LMT 1890
-4:49 - PPMT 1917 Jan 24 12:00 # P-a-P MT
@@ -3258,8 +3326,8 @@ Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan
# 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.
@@ -3281,7 +3349,7 @@ Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre
# indicating that the normal ET rules are followed.
#
# From Paul Eggert (2014-08-19):
-# The 2014-08-13 Cabinet meeting decided to stay on UTC-4 year-round. See:
+# The 2014-08-13 Cabinet meeting decided to stay on UT -04 year-round. See:
# http://tcweeklynews.com/daylight-savings-time-to-be-maintained-p5353-127.htm
# Model this as a switch from EST/EDT to AST ...
# From Chris Walton (2014-11-04):
diff --git a/src/timezone/data/southamerica b/src/timezone/data/southamerica
index 1c38f63d1c..6038c3b65c 100644
--- a/src/timezone/data/southamerica
+++ b/src/timezone/data/southamerica
@@ -6,15 +6,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,
@@ -24,32 +24,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.
###############################################################################
@@ -384,12 +362,6 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
#
# 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):
@@ -410,9 +382,9 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
# stuck on Summer daylight savings time even though the summer is over.
# From Paul Eggert (2013-09-05):
-# Perhaps San Luis operates on the legal fiction that it is at UTC-4
+# Perhaps San Luis operates on the legal fiction that it is at -04
# with perpetual summer time, but ordinary usage typically seems to
-# just say it's at UTC-3; see, for example,
+# just say it's at -03; see, for example,
# http://es.wikipedia.org/wiki/Hora_oficial_argentina
# We've documented similar situations as being plain changes to
# standard time, so let's do that here too. This does not change UTC
@@ -428,11 +400,11 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
# 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)
@@ -446,113 +418,113 @@ Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
#
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)
@@ -561,44 +533,44 @@ Rule SanLuis 2007 2008 - Oct Sun>=8 0:00 1:00 S
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
@@ -608,7 +580,7 @@ Link America/Curacao America/Aruba
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
@@ -960,12 +932,12 @@ Rule Brazil 2038 max - Feb Sun>=15 0:00 0 -
#
# 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).
@@ -978,119 +950,119 @@ Zone America/Noronha -2:09:40 - LMT 1914
# 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
@@ -1235,6 +1207,18 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
# 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 -
@@ -1275,22 +1259,35 @@ Rule Chile 2016 max - Aug Sun>=9 4:00u 1:00 S
# 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,
@@ -1310,9 +1307,10 @@ Zone Pacific/Easter -7:17:28 - LMT 1890
#
# 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
@@ -1325,7 +1323,7 @@ Rule CO 1993 only - Apr 4 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Bogota -4:56:16 - LMT 1884 Mar 13
-4:56:16 - BMT 1914 Nov 23 # Bogotá Mean Time
- -5:00 CO CO%sT # Colombia Time
+ -5:00 CO -05/-04
# Malpelo, Providencia, San Andres
# no information; probably like America/Bogota
@@ -1349,7 +1347,7 @@ Zone America/Bogota -4:56:16 - LMT 1884 Mar 13
#
# 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):
@@ -1364,19 +1362,32 @@ Link America/Curacao America/Kralendijk # Caribbean Netherlands
#
# 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
@@ -1476,25 +1487,24 @@ Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/Stanley -3:51:24 - LMT 1890
-3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
- -4:00 Falk FK%sT 1983 May # Falkland Is Time
- -3: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
#
@@ -1586,9 +1596,9 @@ Rule Para 2013 max - Mar Sun>=22 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Asuncion -3:50:40 - LMT 1890
-3:50:40 - AMT 1931 Oct 10 # Asunción Mean Time
- -4:00 - 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
#
@@ -1615,12 +1625,12 @@ Rule Peru 1994 only - Apr 1 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Lima -5:08:12 - LMT 1890
-5:08:36 - LMT 1908 Jul 28 # Lima Mean Time?
- -5:00 Peru 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
@@ -1630,9 +1640,8 @@ Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
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]
@@ -1735,11 +1744,16 @@ Rule Uruguay 2006 only - Mar 12 2:00 0 -
# [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
#
@@ -1773,7 +1787,7 @@ Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28
# 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
diff --git a/src/timezone/known_abbrevs.txt b/src/timezone/known_abbrevs.txt
index 015f4c90ba..eb48069d87 100644
--- a/src/timezone/known_abbrevs.txt
+++ b/src/timezone/known_abbrevs.txt
@@ -1,213 +1,105 @@
++00 0
++00 0 D
++01 3600
++02 7200
++02 7200 D
+03 10800
++0330 12600
+04 14400
++0430 16200
++0430 16200 D
+05 18000
++0530 19800
++0545 20700
+06 21600
++0630 23400
+07 25200
++08 28800
++0845 31500
++09 32400
++10 36000
++1030 37800
++11 39600
++11 39600 D
++12 43200
++1245 45900
++13 46800
++13 46800 D
++1345 49500 D
++14 50400
++14 50400 D
+-00 0
+-01 -3600
+-02 -7200
+-02 -7200 D
+-03 -10800
+-03 -10800 D
+-04 -14400
+-05 -18000
+-05 -18000 D
+-06 -21600
+-07 -25200
+-08 -28800
+-09 -32400
+-0930 -34200
+-10 -36000
+-11 -39600
+-12 -43200
ACDT 37800 D
ACST 34200
-ACT -18000
-ACWST 31500
ADT -10800 D
AEDT 39600 D
AEST 36000
-AFT 16200
AKDT -28800 D
AKST -32400
-AMST -10800 D
-AMT -14400
-AMT 14400
-ANAT 43200
-ART -10800
AST -14400
-AST 10800
AWST 28800
-AZOST 0 D
-AZOT -3600
-AZT 14400
-BDT 21600
-BNT 28800
-BOT -14400
-BRST -7200 D
-BRT -10800
BST 3600 D
-BST 39600
-BTT 21600
CAT 7200
-CCT 23400
CDT -14400 D
CDT -18000 D
CEST 7200 D
CET 3600
-CHADT 49500 D
-CHAST 45900
-CHOST 32400 D
-CHOT 28800
-CHUT 36000
-CKT -36000
-CLST -10800 D
-CLT -14400
-COT -18000
CST -18000
CST -21600
CST 28800
-CVT -3600
-CXT 25200
ChST 36000
-DAVT 25200
-DDUT 36000
-EASST -18000 D
-EAST -21600
EAT 10800
-ECT -18000
EDT -14400 D
EEST 10800 D
EET 7200
-EGST 0 D
-EGT -3600
EST -18000
-FJST 46800 D
-FJT 43200
-FKST -10800
-FNT -7200
-GALT -21600
-GAMT -32400
-GET 14400
-GFT -10800
-GILT 43200
GMT 0
-GMT+1 -3600
-GMT+10 -36000
-GMT+11 -39600
-GMT+12 -43200
-GMT+2 -7200
-GMT+3 -10800
-GMT+4 -14400
-GMT+5 -18000
-GMT+6 -21600
-GMT+7 -25200
-GMT+8 -28800
-GMT+9 -32400
-GMT-1 3600
-GMT-10 36000
-GMT-11 39600
-GMT-12 43200
-GMT-13 46800
-GMT-14 50400
-GMT-2 7200
-GMT-3 10800
-GMT-4 14400
-GMT-5 18000
-GMT-6 21600
-GMT-7 25200
-GMT-8 28800
-GMT-9 32400
-GST -7200
-GST 14400
-GYT -14400
HDT -32400 D
HKT 28800
-HOVST 28800 D
-HOVT 25200
HST -36000
-ICT 25200
IDT 10800 D
-IOT 21600
-IRDT 16200 D
-IRKT 28800
-IRST 12600
IST 19800
IST 3600 D
IST 7200
JST 32400
-KGT 21600
-KOST 39600
-KRAT 25200
KST 30600
KST 32400
-LHDT 39600 D
-LHST 37800
-LINT 50400
-MAGT 39600
-MART -34200
-MAWT 18000
MDT -21600 D
MEST 7200 D
MET 3600
-MHT 43200
-MIST 39600
-MMT 23400
MSK 10800
MST -25200
-MUT 14400
-MVT 18000
-MYT 28800
-NCT 39600
NDT -9000 D
-NFT 39600
-NPT 20700
-NRT 43200
NST -12600
-NUT -39600
NZDT 46800 D
NZST 43200
-OMST 21600
PDT -25200 D
-PET -18000
-PETT 43200
-PGT 36000
-PHOT 46800
-PHT 28800
PKT 18000
-PMDT -7200 D
-PMST -10800
-PONT 39600
PST -28800
-PWT 32400
-PYST -10800 D
-PYT -14400
-RET 14400
-ROTT -10800
-SAKT 39600
-SAMT 14400
SAST 7200
-SBT 39600
-SCT 14400
-SGT 28800
-SRET 39600
-SRT -10800
SST -39600
-SYOT 10800
-TAHT -36000
-TFT 18000
-TJT 18000
-TKT 46800
-TLT 32400
-TMT 18000
-TOT 46800
-TVT 43200
UCT 0
-ULAST 32400 D
-ULAT 28800
UTC 0
-UYT -10800
-UZT 18000
-VET -14400
-VLAT 36000
-VOST 21600
-VUT 39600
-WAKT 43200
WAST 7200 D
WAT 3600
WEST 3600 D
WET 0
-WFT 43200
-WGST -7200 D
-WGT -10800
WIB 25200
WIT 32400
WITA 28800
-WSDT 50400 D
-WSST 46800
-XJT 21600
-YAKT 32400
-YEKT 18000
diff --git a/src/timezone/localtime.c b/src/timezone/localtime.c
index a14215d6bd..a2faa82ac8 100644
--- a/src/timezone/localtime.c
+++ b/src/timezone/localtime.c
@@ -17,8 +17,9 @@
#include <fcntl.h>
#include "datatype/timestamp.h"
-#include "private.h"
#include "pgtz.h"
+
+#include "private.h"
#include "tzfile.h"
@@ -54,6 +55,13 @@ static const pg_time_t time_t_min = MINVAL(pg_time_t, TYPE_BIT(pg_time_t));
static const pg_time_t time_t_max = MAXVAL(pg_time_t, TYPE_BIT(pg_time_t));
/*
+ * We cache the result of trying to load the TZDEFRULES zone here.
+ * tzdefrules_loaded is 0 if not tried yet, +1 if good, -1 if failed.
+ */
+static struct state tzdefrules_s;
+static int tzdefrules_loaded = 0;
+
+/*
* The DST rules to use if TZ has no rules and we can't load TZDEFRULES.
* We default to US rules as of 1999-08-17.
* POSIX 1003.1 section 8.1.1 says that the default DST rules are
@@ -414,10 +422,10 @@ tzloadbody(char const * name, char *canonname, struct state * sp, bool doextend,
{
/*
* Attempt to reuse existing abbreviations. Without this,
- * America/Anchorage would stop working after 2037 when
- * TZ_MAX_CHARS is 50, as sp->charcnt equals 42 (for LMT CAT CAWT
- * CAPT AHST AHDT YST AKDT AKST) and ts->charcnt equals 10 (for
- * AKST AKDT). Reusing means sp->charcnt can stay 42 in this
+ * America/Anchorage would be right on the edge after 2037 when
+ * TZ_MAX_CHARS is 50, as sp->charcnt equals 40 (for LMT AST AWT
+ * APT AHST AHDT YST AKDT AKST) and ts->charcnt equals 10 (for
+ * AKST AKDT). Reusing means sp->charcnt can stay 40 in this
* example.
*/
int gotabbr = 0;
@@ -451,6 +459,17 @@ tzloadbody(char const * name, char *canonname, struct state * sp, bool doextend,
if (gotabbr == 2)
{
sp->charcnt = charcnt;
+
+ /*
+ * Ignore any trailing, no-op transitions generated by zic as
+ * they don't help here and can run afoul of bugs in zic 2016j
+ * or earlier.
+ */
+ while (1 < sp->timecnt
+ && (sp->types[sp->timecnt - 1]
+ == sp->types[sp->timecnt - 2]))
+ sp->timecnt--;
+
for (i = 0; i < ts->timecnt; i++)
if (sp->ats[sp->timecnt - 1] < ts->ats[i])
break;
@@ -489,7 +508,7 @@ tzloadbody(char const * name, char *canonname, struct state * sp, bool doextend,
}
/*
- * If type 0 is is unused in transitions, it's the type to use for early
+ * If type 0 is unused in transitions, it's the type to use for early
* times.
*/
for (i = 0; i < sp->timecnt; ++i)
@@ -930,7 +949,21 @@ tzparse(const char *name, struct state * sp, bool lastditch)
charcnt = stdlen + 1;
if (sizeof sp->chars < charcnt)
return false;
- load_ok = tzload(TZDEFRULES, NULL, sp, false) == 0;
+
+ /*
+ * This bit also differs from the IANA code, which doesn't make any
+ * attempt to avoid repetitive loadings of the TZDEFRULES zone.
+ */
+ if (tzdefrules_loaded == 0)
+ {
+ if (tzload(TZDEFRULES, NULL, &tzdefrules_s, false) == 0)
+ tzdefrules_loaded = 1;
+ else
+ tzdefrules_loaded = -1;
+ }
+ load_ok = (tzdefrules_loaded > 0);
+ if (load_ok)
+ memcpy(sp, &tzdefrules_s, sizeof(struct state));
}
if (!load_ok)
sp->leapcnt = 0; /* so, we're off a little */
@@ -974,6 +1007,8 @@ tzparse(const char *name, struct state * sp, bool lastditch)
int yearlim;
int timecnt;
pg_time_t janfirst;
+ int32 janoffset = 0;
+ int yearbeg;
++name;
if ((name = getrule(name, &start)) == NULL)
@@ -994,8 +1029,23 @@ tzparse(const char *name, struct state * sp, bool lastditch)
sp->defaulttype = 0;
timecnt = 0;
janfirst = 0;
- yearlim = EPOCH_YEAR + YEARSPERREPEAT;
- for (year = EPOCH_YEAR; year < yearlim; year++)
+ yearbeg = EPOCH_YEAR;
+
+ do
+ {
+ int32 yearsecs
+ = year_lengths[isleap(yearbeg - 1)] * SECSPERDAY;
+
+ yearbeg--;
+ if (increment_overflow_time(&janfirst, -yearsecs))
+ {
+ janoffset = -yearsecs;
+ break;
+ }
+ } while (EPOCH_YEAR - YEARSPERREPEAT / 2 < yearbeg);
+
+ yearlim = yearbeg + YEARSPERREPEAT + 1;
+ for (year = yearbeg; year < yearlim; year++)
{
int32
starttime = transtime(year, &start, stdoffset),
@@ -1020,24 +1070,34 @@ tzparse(const char *name, struct state * sp, bool lastditch)
{
if (TZ_MAX_TIMES - 2 < timecnt)
break;
- yearlim = year + YEARSPERREPEAT + 1;
sp->ats[timecnt] = janfirst;
- if (increment_overflow_time
- (&sp->ats[timecnt], starttime))
- break;
- sp->types[timecnt++] = reversed;
+ if (!increment_overflow_time
+ (&sp->ats[timecnt],
+ janoffset + starttime))
+ sp->types[timecnt++] = reversed;
+ else if (janoffset)
+ sp->defaulttype = reversed;
sp->ats[timecnt] = janfirst;
- if (increment_overflow_time
- (&sp->ats[timecnt], endtime))
- break;
- sp->types[timecnt++] = !reversed;
+ if (!increment_overflow_time
+ (&sp->ats[timecnt],
+ janoffset + endtime))
+ {
+ sp->types[timecnt++] = !reversed;
+ yearlim = year + YEARSPERREPEAT + 1;
+ }
+ else if (janoffset)
+ sp->defaulttype = !reversed;
}
- if (increment_overflow_time(&janfirst, yearsecs))
+ if (increment_overflow_time
+ (&janfirst, janoffset + yearsecs))
break;
+ janoffset = 0;
}
sp->timecnt = timecnt;
if (!timecnt)
sp->typecnt = 1; /* Perpetual DST. */
+ else if (YEARSPERREPEAT < year - yearbeg)
+ sp->goback = sp->goahead = true;
}
else
{
@@ -1280,9 +1340,8 @@ gmtsub(pg_time_t const * timep, int32 offset, struct pg_tm * tmp)
result = timesub(timep, offset, gmtptr, tmp);
/*
- * Could get fancy here and deliver something such as "UT+xxxx" or
- * "UT-xxxx" if offset is non-zero, but this is no time for a treasure
- * hunt.
+ * Could get fancy here and deliver something such as "+xx" or "-xx" if
+ * offset is non-zero, but this is no time for a treasure hunt.
*/
if (offset != 0)
tmp->tm_zone = wildabbr;
diff --git a/src/timezone/pgtz.c b/src/timezone/pgtz.c
index 4fa3d0da89..846f8898ff 100644
--- a/src/timezone/pgtz.c
+++ b/src/timezone/pgtz.c
@@ -3,7 +3,7 @@
* pgtz.c
* Timezone Library Integration Functions
*
- * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
*
* IDENTIFICATION
* src/timezone/pgtz.c
@@ -17,6 +17,7 @@
#include <sys/stat.h>
#include <time.h>
+#include "datatype/timestamp.h"
#include "miscadmin.h"
#include "pgtz.h"
#include "storage/fd.h"
@@ -79,12 +80,38 @@ pg_open_tzfile(const char *name, char *canonname)
int fullnamelen;
int orignamelen;
+ /* Initialize fullname with base name of tzdata directory */
+ strlcpy(fullname, pg_TZDIR(), sizeof(fullname));
+ orignamelen = fullnamelen = strlen(fullname);
+
+ if (fullnamelen + 1 + strlen(name) >= MAXPGPATH)
+ return -1; /* not gonna fit */
+
+ /*
+ * If the caller doesn't need the canonical spelling, first just try to
+ * open the name as-is. This can be expected to succeed if the given name
+ * is already case-correct, or if the filesystem is case-insensitive; and
+ * we don't need to distinguish those situations if we aren't tasked with
+ * reporting the canonical spelling.
+ */
+ if (canonname == NULL)
+ {
+ int result;
+
+ fullname[fullnamelen] = '/';
+ /* test above ensured this will fit: */
+ strcpy(fullname + fullnamelen + 1, name);
+ result = open(fullname, O_RDONLY | PG_BINARY, 0);
+ if (result >= 0)
+ return result;
+ /* If that didn't work, fall through to do it the hard way */
+ fullname[fullnamelen] = '\0';
+ }
+
/*
* Loop to split the given name into directory levels; for each level,
* search using scan_directory_ci().
*/
- strlcpy(fullname, pg_TZDIR(), sizeof(fullname));
- orignamelen = fullnamelen = strlen(fullname);
fname = name;
for (;;)
{
@@ -96,8 +123,6 @@ pg_open_tzfile(const char *name, char *canonname)
fnamelen = slashptr - fname;
else
fnamelen = strlen(fname);
- if (fullnamelen + 1 + fnamelen >= MAXPGPATH)
- return -1; /* not gonna fit */
if (!scan_directory_ci(fullname, fname, fnamelen,
fullname + fullnamelen + 1,
MAXPGPATH - fullnamelen - 1))
@@ -308,14 +333,14 @@ pg_tzset_offset(long gmtoffset)
char tzname[128];
snprintf(offsetstr, sizeof(offsetstr),
- "%02ld", absoffset / SECSPERHOUR);
- absoffset %= SECSPERHOUR;
+ "%02ld", absoffset / SECS_PER_HOUR);
+ absoffset %= SECS_PER_HOUR;
if (absoffset != 0)
{
snprintf(offsetstr + strlen(offsetstr),
sizeof(offsetstr) - strlen(offsetstr),
- ":%02ld", absoffset / SECSPERMIN);
- absoffset %= SECSPERMIN;
+ ":%02ld", absoffset / SECS_PER_MINUTE);
+ absoffset %= SECS_PER_MINUTE;
if (absoffset != 0)
snprintf(offsetstr + strlen(offsetstr),
sizeof(offsetstr) - strlen(offsetstr),
@@ -412,7 +437,7 @@ pg_tzenumerate_next(pg_tzenum *dir)
while (dir->depth >= 0)
{
struct dirent *direntry;
- char fullname[MAXPGPATH];
+ char fullname[MAXPGPATH * 2];
struct stat statbuf;
direntry = ReadDir(dir->dirdesc[dir->depth], dir->dirname[dir->depth]);
@@ -429,7 +454,7 @@ pg_tzenumerate_next(pg_tzenum *dir)
if (direntry->d_name[0] == '.')
continue;
- snprintf(fullname, MAXPGPATH, "%s/%s",
+ snprintf(fullname, sizeof(fullname), "%s/%s",
dir->dirname[dir->depth], direntry->d_name);
if (stat(fullname, &statbuf) != 0)
ereport(ERROR,
@@ -457,10 +482,11 @@ pg_tzenumerate_next(pg_tzenum *dir)
/*
* Load this timezone using tzload() not pg_tzset(), so we don't fill
- * the cache
+ * the cache. Also, don't ask for the canonical spelling: we already
+ * know it, and pg_open_tzfile's way of finding it out is pretty
+ * inefficient.
*/
- if (tzload(fullname + dir->baselen, dir->tz.TZname, &dir->tz.state,
- true) != 0)
+ if (tzload(fullname + dir->baselen, NULL, &dir->tz.state, true) != 0)
{
/* Zone could not be loaded, ignore it */
continue;
@@ -472,6 +498,10 @@ pg_tzenumerate_next(pg_tzenum *dir)
continue;
}
+ /* OK, return the canonical zone name spelling. */
+ strlcpy(dir->tz.TZname, fullname + dir->baselen,
+ sizeof(dir->tz.TZname));
+
/* Timezone loaded OK. */
return &dir->tz;
}
diff --git a/src/timezone/pgtz.h b/src/timezone/pgtz.h
index 2adec19838..cd193b8255 100644
--- a/src/timezone/pgtz.h
+++ b/src/timezone/pgtz.h
@@ -6,7 +6,7 @@
* Note: this file contains only definitions that are private to the
* timezone library. Public definitions are in pgtime.h.
*
- * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
*
* IDENTIFICATION
* src/timezone/pgtz.h
diff --git a/src/timezone/private.h b/src/timezone/private.h
index 8480d38961..f031b17b7e 100644
--- a/src/timezone/private.h
+++ b/src/timezone/private.h
@@ -23,6 +23,7 @@
#include "pgtime.h"
+/* This string was in the Factory zone through version 2016f. */
#define GRANDPARENTED "Local time zone must be set--see zic manual page"
/*
@@ -66,14 +67,8 @@ extern int unlink(const char *filename);
* Finally, some convenience items.
*/
-#ifndef TYPE_BIT
#define TYPE_BIT(type) (sizeof (type) * CHAR_BIT)
-#endif /* !defined TYPE_BIT */
-
-#ifndef TYPE_SIGNED
#define TYPE_SIGNED(type) (((type) -1) < 0)
-#endif /* !defined TYPE_SIGNED */
-
#define TWOS_COMPLEMENT(t) ((t) ~ (t) 0 < 0)
/*
@@ -87,7 +82,6 @@ extern int unlink(const char *filename);
#define MINVAL(t, b) \
((t) (TYPE_SIGNED(t) ? - TWOS_COMPLEMENT(t) - MAXVAL(t, b) : 0))
-#ifndef INT_STRLEN_MAXIMUM
/*
* 302 / 1000 is log10(2.0) rounded up.
* Subtract one for the sign bit if the type is signed;
@@ -97,7 +91,6 @@ extern int unlink(const char *filename);
#define INT_STRLEN_MAXIMUM(type) \
((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + \
1 + TYPE_SIGNED(type))
-#endif /* !defined INT_STRLEN_MAXIMUM */
/*
* INITIALIZE(x)
@@ -107,24 +100,70 @@ extern int unlink(const char *filename);
#undef _
#define _(msgid) (msgid)
-#ifndef YEARSPERREPEAT
+/* Handy macros that are independent of tzfile implementation. */
+
#define YEARSPERREPEAT 400 /* years before a Gregorian repeat */
-#endif /* !defined YEARSPERREPEAT */
+
+#define SECSPERMIN 60
+#define MINSPERHOUR 60
+#define HOURSPERDAY 24
+#define DAYSPERWEEK 7
+#define DAYSPERNYEAR 365
+#define DAYSPERLYEAR 366
+#define SECSPERHOUR (SECSPERMIN * MINSPERHOUR)
+#define SECSPERDAY ((int32) SECSPERHOUR * HOURSPERDAY)
+#define MONSPERYEAR 12
+
+#define TM_SUNDAY 0
+#define TM_MONDAY 1
+#define TM_TUESDAY 2
+#define TM_WEDNESDAY 3
+#define TM_THURSDAY 4
+#define TM_FRIDAY 5
+#define TM_SATURDAY 6
+
+#define TM_JANUARY 0
+#define TM_FEBRUARY 1
+#define TM_MARCH 2
+#define TM_APRIL 3
+#define TM_MAY 4
+#define TM_JUNE 5
+#define TM_JULY 6
+#define TM_AUGUST 7
+#define TM_SEPTEMBER 8
+#define TM_OCTOBER 9
+#define TM_NOVEMBER 10
+#define TM_DECEMBER 11
+
+#define TM_YEAR_BASE 1900
+
+#define EPOCH_YEAR 1970
+#define EPOCH_WDAY TM_THURSDAY
+
+#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
/*
- * The Gregorian year averages 365.2425 days, which is 31556952 seconds.
+ * Since everything in isleap is modulo 400 (or a factor of 400), we know that
+ * isleap(y) == isleap(y % 400)
+ * and so
+ * isleap(a + b) == isleap((a + b) % 400)
+ * or
+ * isleap(a + b) == isleap(a % 400 + b % 400)
+ * This is true even if % means modulo rather than Fortran remainder
+ * (which is allowed by C89 but not C99).
+ * We use this to avoid addition overflow problems.
*/
-#ifndef AVGSECSPERYEAR
-#define AVGSECSPERYEAR 31556952L
-#endif /* !defined AVGSECSPERYEAR */
+#define isleap_sum(a, b) isleap((a) % 400 + (b) % 400)
-#ifndef SECSPERREPEAT
-#define SECSPERREPEAT ((int64) YEARSPERREPEAT * (int64) AVGSECSPERYEAR)
-#endif /* !defined SECSPERREPEAT */
-#ifndef SECSPERREPEAT_BITS
+/*
+ * The Gregorian year averages 365.2425 days, which is 31556952 seconds.
+ */
+
+#define AVGSECSPERYEAR 31556952L
+#define SECSPERREPEAT \
+ ((int64) YEARSPERREPEAT * (int64) AVGSECSPERYEAR)
#define SECSPERREPEAT_BITS 34 /* ceil(log2(SECSPERREPEAT)) */
-#endif /* !defined SECSPERREPEAT_BITS */
#endif /* !defined PRIVATE_H */
diff --git a/src/timezone/strftime.c b/src/timezone/strftime.c
index 5630619321..3f6ba395c6 100644
--- a/src/timezone/strftime.c
+++ b/src/timezone/strftime.c
@@ -1,4 +1,4 @@
-/* Convert a broken-down time stamp to a string. */
+/* Convert a broken-down timestamp to a string. */
/*
* Copyright 1989 The Regents of the University of California.
@@ -41,10 +41,8 @@
#include "postgres.h"
#include <fcntl.h>
-#include <locale.h>
#include "private.h"
-#include "tzfile.h"
struct lc_time_T
@@ -128,7 +126,7 @@ pg_strftime(char *s, size_t maxsize, const char *format,
int warn;
warn = IN_NONE;
- p = _fmt(((format == NULL) ? "%c" : format), t, s, s + maxsize, &warn);
+ p = _fmt(format, t, s, s + maxsize, &warn);
if (p == s + maxsize)
return 0;
*p = '\0';
@@ -452,11 +450,18 @@ _fmt(const char *format, const struct pg_tm * t, char *pt, const char *ptlim,
{
long diff;
char const *sign;
+ bool negative;
if (t->tm_isdst < 0)
continue;
diff = t->tm_gmtoff;
- if (diff < 0)
+ negative = diff < 0;
+ if (diff == 0)
+ {
+ if (t->tm_zone != NULL)
+ negative = t->tm_zone[0] == '-';
+ }
+ if (negative)
{
sign = "-";
diff = -diff;
diff --git a/src/timezone/tzfile.h b/src/timezone/tzfile.h
index 32d237b827..56a5b43472 100644
--- a/src/timezone/tzfile.h
+++ b/src/timezone/tzfile.h
@@ -100,56 +100,4 @@ struct tzhead
#define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */
-#define SECSPERMIN 60
-#define MINSPERHOUR 60
-#define HOURSPERDAY 24
-#define DAYSPERWEEK 7
-#define DAYSPERNYEAR 365
-#define DAYSPERLYEAR 366
-#define SECSPERHOUR (SECSPERMIN * MINSPERHOUR)
-#define SECSPERDAY ((int32) SECSPERHOUR * HOURSPERDAY)
-#define MONSPERYEAR 12
-
-#define TM_SUNDAY 0
-#define TM_MONDAY 1
-#define TM_TUESDAY 2
-#define TM_WEDNESDAY 3
-#define TM_THURSDAY 4
-#define TM_FRIDAY 5
-#define TM_SATURDAY 6
-
-#define TM_JANUARY 0
-#define TM_FEBRUARY 1
-#define TM_MARCH 2
-#define TM_APRIL 3
-#define TM_MAY 4
-#define TM_JUNE 5
-#define TM_JULY 6
-#define TM_AUGUST 7
-#define TM_SEPTEMBER 8
-#define TM_OCTOBER 9
-#define TM_NOVEMBER 10
-#define TM_DECEMBER 11
-
-#define TM_YEAR_BASE 1900
-
-#define EPOCH_YEAR 1970
-#define EPOCH_WDAY TM_THURSDAY
-
-#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
-
-/*
- * Since everything in isleap is modulo 400 (or a factor of 400), we know that
- * isleap(y) == isleap(y % 400)
- * and so
- * isleap(a + b) == isleap((a + b) % 400)
- * or
- * isleap(a + b) == isleap(a % 400 + b % 400)
- * This is true even if % means modulo rather than Fortran remainder
- * (which is allowed by C89 but not C99).
- * We use this to avoid addition overflow problems.
- */
-
-#define isleap_sum(a, b) isleap((a) % 400 + (b) % 400)
-
#endif /* !defined TZFILE_H */
diff --git a/src/timezone/tznames/Africa.txt b/src/timezone/tznames/Africa.txt
index f80676dc33..0bd0c405f6 100644
--- a/src/timezone/tznames/Africa.txt
+++ b/src/timezone/tznames/Africa.txt
@@ -144,7 +144,7 @@ GMT 0 # Greenwich Mean Time
# (Europe/London)
# CONFLICT! SAST is not unique
# Other timezones:
-# - SAST South Australian Standard Time (not in zic)
+# - SAST South Australian Standard Time (not in IANA database)
SAST 7200 # South Africa Standard Time
# (Africa/Johannesburg)
WAST 7200 D # West Africa Summer Time
diff --git a/src/timezone/tznames/America.txt b/src/timezone/tznames/America.txt
index b76c311f50..1c5eb1f8c5 100644
--- a/src/timezone/tznames/America.txt
+++ b/src/timezone/tznames/America.txt
@@ -9,13 +9,11 @@
# Acre time is sometimes called Acre Standard Time (AST) which leads to a
# conflict with AST (see below at AST)
-ACT -18000 # Acre Time
- # (America/Eirunepe)
- # (America/Rio_Branco)
+ACT -18000 # Acre Time (obsolete)
# CONFLICT! ACST is not unique
# Other timezones:
# - ACST: Australian Central Standard Time
-ACST -14400 D # Acre Summer Time (obsolete, not in zic)
+ACST -14400 D # Acre Summer Time (obsolete, not in IANA database)
ADT -10800 D # Atlantic Daylight Time
# (America/Glace_Bay)
# (America/Goose_Bay)
@@ -35,30 +33,13 @@ AKST -32400 # Alaska Standard Time
# CONFLICT! AMST is not unique
# Other timezones:
# - AMST: Armenia Summer Time (Asia)
-AMST -10800 D # Amazon Summer Time
- # (America/Campo_Grande)
- # (America/Cuiaba)
+AMST -10800 D # Amazon Summer Time (obsolete)
# CONFLICT! AMT is not unique
# Other timezones:
# - AMT: Armenia Time (Asia)
-AMT -14400 # Amazon Time
- # (America/Boa_Vista)
- # (America/Campo_Grande)
- # (America/Cuiaba)
- # (America/Manaus)
- # (America/Porto_Velho)
-ART America/Argentina/Buenos_Aires # Argentina Time
- # (America/Argentina/Buenos_Aires)
- # (America/Argentina/Cordoba)
- # (America/Argentina/Tucuman)
- # (America/Argentina/La_Rioja)
- # (America/Argentina/San_Juan)
- # (America/Argentina/Jujuy)
- # (America/Argentina/Catamarca)
- # (America/Argentina/Mendoza)
- # (America/Argentina/Rio_Gallegos)
- # (America/Argentina/Ushuaia)
-ARST America/Argentina/Buenos_Aires # Argentina Summer Time
+AMT -14400 # Amazon Time (obsolete)
+ART America/Argentina/Buenos_Aires # Argentina Time (obsolete)
+ARST America/Argentina/Buenos_Aires # Argentina Summer Time (obsolete)
# CONFLICT! AST is not unique
# Other timezones:
# - AST: Arabic Standard Time (Asia)
@@ -90,19 +71,10 @@ AST -14400 # Atlantic Standard Time
# (America/Thule)
# (America/Tortola)
# (Atlantic/Bermuda)
-BOT -14400 # Bolivia Time
- # (America/La_Paz)
-BRA -10800 # Brazil Time (not in zic)
-BRST -7200 D # Brasil Summer Time
- # (America/Sao_Paulo)
-BRT -10800 # Brasil Time
- # (America/Araguaina)
- # (America/Bahia)
- # (America/Belem)
- # (America/Fortaleza)
- # (America/Maceio)
- # (America/Recife)
- # (America/Sao_Paulo)
+BOT -14400 # Bolivia Time (obsolete)
+BRA -10800 # Brazil Time (not in IANA database)
+BRST -7200 D # Brasil Summer Time (obsolete)
+BRT -10800 # Brasil Time (obsolete)
# CONFLICT! CDT is not unique
# Other timezones:
# - CDT: Central Daylight Time (America)
@@ -125,13 +97,9 @@ CDT -18000 D # Central Daylight Time
# (America/Rainy_River)
# (America/Rankin_Inlet)
# (America/Winnipeg)
-CLST -10800 D # Chile Summer Time
- # (America/Santiago)
- # (Antarctica/Palmer)
-CLT America/Santiago # Chile Time
- # (America/Santiago)
- # (Antarctica/Palmer)
-COT -18000 # Columbia Time (not in zic)
+CLST -10800 D # Chile Summer Time (obsolete)
+CLT America/Santiago # Chile Time (obsolete)
+COT -18000 # Columbia Time (obsolete)
# CONFLICT! CST is not unique
# Other timezones:
# - CST: Central Standard Time (Australia)
@@ -156,9 +124,7 @@ CST -21600 # Central Standard Time (America)
# (America/Regina)
# (America/Swift_Current)
# (America/Winnipeg)
-ECT -18000 # Ecuador Time
- # Eastern Caribbean Time
- # (America/Guayaquil)
+ECT -18000 # Ecuador Time (obsolete)
EDT -14400 D # Eastern Daylight Saving Time
# (America/Detroit)
# (America/Grand_Turk)
@@ -176,10 +142,8 @@ EDT -14400 D # Eastern Daylight Saving Time
# (America/Pangnirtung)
# (America/Thunder_Bay)
# (America/Toronto)
-EGST 0 D # East Greenland Summer Time
- # (America/Scoresbysund)
-EGT -3600 # East Greenland Time (Svalbard & Jan Mayen)
- # (America/Scoresbysund)
+EGST 0 D # East Greenland Summer Time (obsolete)
+EGT -3600 # East Greenland Time (Svalbard & Jan Mayen) (obsolete)
# CONFLICT! EST is not unique
# Other timezones:
# - EST: Eastern Standard Time (Australia)
@@ -205,12 +169,9 @@ EST -18000 # Eastern Standard Time (America)
# (America/Pangnirtung)
# (America/Thunder_Bay)
# (America/Toronto)
-FNT -7200 # Fernando de Noronha Time
- # (America/Noronha)
-FNST -3600 D # Fernando de Noronha Summer Time (not in zic)
- # (America/Noronha)
-GFT -10800 # French Guiana Time
- # (America/Cayenne)
+FNT -7200 # Fernando de Noronha Time (obsolete)
+FNST -3600 D # Fernando de Noronha Summer Time (obsolete)
+GFT -10800 # French Guiana Time (obsolete)
GMT 0 # Greenwich Mean Time
# (Africa/Abidjan)
# (Africa/Bamako)
@@ -229,8 +190,7 @@ GMT 0 # Greenwich Mean Time
# (Etc/GMT)
# (Europe/Dublin)
# (Europe/London)
-GYT America/Guyana # Guyana Time
- # (America/Guyana)
+GYT America/Guyana # Guyana Time (obsolete)
HADT -32400 D # Hawaii-Aleutian Daylight Time (obsolete abbreviation)
# (America/Adak)
HAST -36000 # Hawaii-Aleutian Standard Time (obsolete abbreviation)
@@ -265,7 +225,7 @@ NDT -9000 D # Newfoundland Daylight Time
# CONFLICT! NFT is not unique
# Other timezones:
# - NFT: Norfolk Time (Pacific)
-NFT -12600 # Newfoundland Time (not in zic)
+NFT -12600 # Newfoundland Time (not in IANA database)
NST -12600 # Newfoundland Standard Time
# (America/St_Johns)
PDT -25200 D # Pacific Daylight Time
@@ -274,11 +234,9 @@ PDT -25200 D # Pacific Daylight Time
# (America/Tijuana)
# (America/Vancouver)
# (America/Whitehorse)
-PET -18000 # Peru Time (not in zic)
-PMDT -7200 D # Pierre & Miquelon Daylight Time
- # (America/Miquelon)
-PMST -10800 # Pierre & Miquelon Standard Time
- # (America/Miquelon)
+PET -18000 # Peru Time (obsolete)
+PMDT -7200 D # Pierre & Miquelon Daylight Time (obsolete)
+PMST -10800 # Pierre & Miquelon Standard Time (obsolete)
PST -28800 # Pacific Standard Time
# (America/Dawson)
# (America/Los_Angeles)
@@ -286,19 +244,11 @@ PST -28800 # Pacific Standard Time
# (America/Vancouver)
# (America/Whitehorse)
# (Pacific/Pitcairn)
-PYST -10800 D # Paraguay Summer Time
- # (America/Asuncion)
-PYT America/Asuncion # Paraguay Time
- # (America/Asuncion)
-SRT America/Paramaribo # Suriname Time
- # (America/Paramaribo)
+PYST -10800 D # Paraguay Summer Time (obsolete)
+PYT America/Asuncion # Paraguay Time (obsolete)
+SRT America/Paramaribo # Suriname Time (obsolete)
UYST -7200 D # Uruguay Summer Time (obsolete)
- # (America/Montevideo)
-UYT -10800 # Uruguay Time
- # (America/Montevideo)
-VET America/Caracas # Venezuela Time
- # (America/Caracas)
-WGST -7200 D # Western Greenland Summer Time
- # (America/Godthab)
-WGT -10800 # West Greenland Time
- # (America/Godthab)
+UYT -10800 # Uruguay Time (obsolete)
+VET America/Caracas # Venezuela Time (obsolete)
+WGST -7200 D # Western Greenland Summer Time (obsolete)
+WGT -10800 # West Greenland Time (obsolete)
diff --git a/src/timezone/tznames/Antarctica.txt b/src/timezone/tznames/Antarctica.txt
index 942e81993a..709f6c023b 100644
--- a/src/timezone/tznames/Antarctica.txt
+++ b/src/timezone/tznames/Antarctica.txt
@@ -10,29 +10,18 @@
AWST 28800 # Australian Western Standard Time
# (Antarctica/Casey)
# (Australia/Perth)
-CLST -10800 D # Chile Summer Time
- # (America/Santiago)
- # (Antarctica/Palmer)
-CLT America/Santiago # Chile Time
- # (America/Santiago)
- # (Antarctica/Palmer)
-DAVT Antarctica/Davis # Davis Time (Antarctica)
- # (Antarctica/Davis)
-DDUT 36000 # Dumont-d`Urville Time (Antarctica)
- # (Antarctica/DumontDUrville)
-MAWT Antarctica/Mawson # Mawson Time (Antarctica)
- # (Antarctica/Mawson)
-MIST 39600 # Macquarie Island Time
- # (Antarctica/Macquarie)
+CLST -10800 D # Chile Summer Time (obsolete)
+CLT America/Santiago # Chile Time (obsolete)
+DAVT Antarctica/Davis # Davis Time (Antarctica) (obsolete)
+DDUT 36000 # Dumont-d`Urville Time (Antarctica) (obsolete)
+MAWT Antarctica/Mawson # Mawson Time (Antarctica) (obsolete)
+MIST 39600 # Macquarie Island Time (obsolete)
NZDT 46800 D # New Zealand Daylight Time
# (Antarctica/McMurdo)
# (Pacific/Auckland)
NZST 43200 # New Zealand Standard Time
# (Antarctica/McMurdo)
# (Pacific/Auckland)
-ROTT -10800 # Rothera Time
- # (Antarctica/Rothera)
-SYOT 10800 # Syowa Time
- # (Antarctica/Syowa)
-VOST 21600 # Vostok time
- # (Antarctica/Vostok)
+ROTT -10800 # Rothera Time (obsolete)
+SYOT 10800 # Syowa Time (obsolete)
+VOST 21600 # Vostok time (obsolete)
diff --git a/src/timezone/tznames/Asia.txt b/src/timezone/tznames/Asia.txt
index 42244501b8..4e365b0028 100644
--- a/src/timezone/tznames/Asia.txt
+++ b/src/timezone/tznames/Asia.txt
@@ -7,23 +7,19 @@
# src/timezone/tznames/Asia.txt
#
-AFT 16200 # Afghanistan Time
- # (Asia/Kabul)
+AFT 16200 # Afghanistan Time (obsolete)
ALMST 25200 D # Alma-Ata Summer Time (obsolete)
ALMT 21600 # Alma-Ata Time (obsolete)
# CONFLICT! AMST is not unique
# Other timezones:
# - AMST: Amazon Summer Time (America)
-AMST Asia/Yerevan # Armenia Summer Time
- # (Asia/Yerevan)
+AMST Asia/Yerevan # Armenia Summer Time (obsolete)
# CONFLICT! AMT is not unique
# Other timezones:
# - AMT: Amazon Time (America)
-AMT Asia/Yerevan # Armenia Time
- # (Asia/Yerevan)
+AMT Asia/Yerevan # Armenia Time (obsolete)
ANAST Asia/Anadyr # Anadyr Summer Time (obsolete)
-ANAT Asia/Anadyr # Anadyr Time
- # (Asia/Anadyr)
+ANAT Asia/Anadyr # Anadyr Time (obsolete)
AQTST Asia/Aqtau # Aqtau Summer Time (obsolete)
AQTT Asia/Aqtau # Aqtau Time (obsolete)
# CONFLICT! AST is not unique
@@ -34,28 +30,16 @@ AQTT Asia/Aqtau # Aqtau Time (obsolete)
# - AST: Antigua Standard Time (America) same offset as Atlantic Standard Time
# - AST: Antilles Standard Time (America) same offset as Atlantic Standard Time
# - AST: Al Manamah Standard Time (Asia) same offset as Arabia Standard Time
-AST 10800 # Arabia Standard Time
- # (Asia/Aden)
- # (Asia/Baghdad)
- # (Asia/Bahrain)
- # (Asia/Kuwait)
- # (Asia/Qatar)
- # (Asia/Riyadh)
+AST 10800 # Arabia Standard Time (obsolete)
AZST Asia/Baku # Azerbaijan Summer Time (obsolete)
-AZT Asia/Baku # Azerbaijan Time
- # (Asia/Baku)
-BDT 21600 # Bangladesh Time
- # (Asia/Dhaka)
-BNT 28800 # Brunei Darussalam Time
- # (Asia/Brunei)
-BORT 28800 # Borneo Time (Indonesia) (not in zic)
-BTT 21600 # Bhutan Time
- # (Asia/Thimphu)
-CCT 28800 # China Coastal Time (not in zic)
-CHOST Asia/Choibalsan # Choibalsan Summer Time
- # (Asia/Choibalsan)
-CHOT Asia/Choibalsan # Choibalsan Time
- # (Asia/Choibalsan)
+AZT Asia/Baku # Azerbaijan Time (obsolete)
+BDT 21600 # Bangladesh Time (obsolete)
+BNT 28800 # Brunei Darussalam Time (obsolete)
+BORT 28800 # Borneo Time (Indonesia) (not in IANA database)
+BTT 21600 # Bhutan Time (obsolete)
+CCT 28800 # China Coastal Time (not in IANA database)
+CHOST Asia/Choibalsan # Choibalsan Summer Time (obsolete)
+CHOT Asia/Choibalsan # Choibalsan Time (obsolete)
CIT 28800 # Central Indonesia Time (obsolete, WITA is now preferred)
# CONFLICT! CST is not unique
# Other timezones:
@@ -115,34 +99,23 @@ EET 7200 # East-Egypt Time
# (Europe/Zaporozhye)
EIT 32400 # East Indonesia Time (obsolete, WIT is now preferred)
GEST Asia/Tbilisi # Georgia Summer Time (obsolete)
-GET Asia/Tbilisi # Georgia Time
- # (Asia/Tbilisi)
+GET Asia/Tbilisi # Georgia Time (obsolete)
# CONFLICT! GST is not unique
# Other timezones:
# - GST: South Georgia Time (Atlantic)
-GST 14400 # Gulf Standard Time
- # (Asia/Dubai)
- # (Asia/Muscat)
-HKT 28800 # Hong Kong Time (not in zic)
-HOVST 28800 D # Hovd Summer Time
- # (Asia/Hovd)
-HOVT Asia/Hovd # Hovd Time
- # (Asia/Hovd)
-ICT 25200 # Indochina Time
- # (Asia/Bangkok)
- # (Asia/Phnom_Penh)
- # (Asia/Saigon)
- # (Asia/Vientiane)
+GST 14400 # Gulf Standard Time (obsolete)
+HKT 28800 # Hong Kong Time
+ # (Asia/Hong_Kong)
+HOVST 28800 D # Hovd Summer Time (obsolete)
+HOVT Asia/Hovd # Hovd Time (obsolete)
+ICT 25200 # Indochina Time (obsolete)
IDT 10800 D # Israel Daylight Time
# (Asia/Jerusalem)
-IRDT Asia/Tehran # Iran Daylight Time
- # (Asia/Tehran)
+IRDT Asia/Tehran # Iran Daylight Time (obsolete)
IRKST Asia/Irkutsk # Irkutsk Summer Time (obsolete)
-IRKT Asia/Irkutsk # Irkutsk Time
- # (Asia/Irkutsk)
-IRST Asia/Tehran # Iran Standard Time
- # (Asia/Tehran)
-IRT 12600 # Iran Time (not in zic)
+IRKT Asia/Irkutsk # Irkutsk Time (obsolete)
+IRST Asia/Tehran # Iran Standard Time (obsolete)
+IRT 12600 # Iran Time (not in IANA database)
# CONFLICT! IST is not unique
# Other timezones:
# - IST: Irish Summer Time (Europe)
@@ -155,73 +128,50 @@ IST 19800 # Indian Standard Time
# - IST: Indian Standard Time (Asia)
IST 7200 # Israel Standard Time
# (Asia/Jerusalem)
-JAYT 32400 # Jayapura Time (Indonesia) (not in zic)
+JAYT 32400 # Jayapura Time (Indonesia) (not in IANA database)
JST 32400 # Japan Standard Time
# (Asia/Tokyo)
-KDT 36000 D # Korean Daylight Time (not in zic)
+KDT 36000 D # Korean Daylight Time (not in IANA database)
KGST 21600 D # Kyrgyzstan Summer Time (obsolete)
-KGT Asia/Bishkek # Kyrgyzstan Time
- # (Asia/Bishkek)
+KGT Asia/Bishkek # Kyrgyzstan Time (obsolete)
KRAST Asia/Krasnoyarsk # Krasnoyarsk Summer Time (obsolete)
-KRAT Asia/Krasnoyarsk # Krasnoyarsk Time
- # (Asia/Krasnoyarsk)
+KRAT Asia/Krasnoyarsk # Krasnoyarsk Time (obsolete)
KST Asia/Pyongyang # Korean Standard Time
# (Asia/Pyongyang)
KST 32400 # Korean Standard Time
# (Asia/Seoul)
LKT Asia/Colombo # Lanka Time (obsolete)
MAGST Asia/Magadan # Magadan Summer Time (obsolete)
-MAGT Asia/Magadan # Magadan Time
- # (Asia/Magadan)
-MMT 23400 # Myanmar Time
- # (Asia/Rangoon)
-MYT 28800 # Malaysia Time
- # (Asia/Kuala_Lumpur)
- # (Asia/Kuching)
+MAGT Asia/Magadan # Magadan Time (obsolete)
+MMT 23400 # Myanmar Time (obsolete)
+MYT 28800 # Malaysia Time (obsolete)
NOVST Asia/Novosibirsk # Novosibirsk Summer Time (obsolete)
NOVT Asia/Novosibirsk # Novosibirsk Time (obsolete)
-NPT 20700 # Nepal Time
- # (Asia/Katmandu)
+NPT 20700 # Nepal Time (obsolete)
OMSST Asia/Omsk # Omsk Summer Time (obsolete)
-OMST Asia/Omsk # Omsk Time
- # (Asia/Omsk)
+OMST Asia/Omsk # Omsk Time (obsolete)
ORAT Asia/Oral # Oral Time (obsolete)
PETST Asia/Kamchatka # Petropavlovsk-Kamchatski Summer Time (obsolete)
-PETT Asia/Kamchatka # Petropavlovsk-Kamchatski Time
- # (Asia/Kamchatka)
-PHT 28800 # Philippine Time
- # (Asia/Manila)
+PETT Asia/Kamchatka # Petropavlovsk-Kamchatski Time (obsolete)
+PHT 28800 # Philippine Time (obsolete)
PKT 18000 # Pakistan Time
# (Asia/Karachi)
PKST 21600 D # Pakistan Summer Time
# (Asia/Karachi)
QYZT 21600 # Kizilorda Time (obsolete)
SAKST Asia/Sakhalin # Sakhalin Summer Time (obsolete)
-SAKT Asia/Sakhalin # Sakhalin Time
- # (Asia/Sakhalin)
-SGT Asia/Singapore # Singapore Time
- # (Asia/Singapore)
-SRET 39600 # Srednekolymsk Time
- # (Asia/Srednekolymsk)
-TJT 18000 # Tajikistan Time
- # (Asia/Dushanbe)
-TLT 32400 # East Timor Time
- # (Asia/Dili)
-TMT Asia/Ashgabat # Turkmenistan Time
- # (Asia/Ashgabat)
-ULAST 32400 D # Ulan Bator Summer Time
- # (Asia/Ulaanbaatar)
-ULAT Asia/Ulaanbaatar # Ulan Bator Time
- # (Asia/Ulaanbaatar)
-UZST 21600 D # Uzbekistan Summer Time
- # (Asia/Samarkand)
- # (Asia/Tashkent)
-UZT 18000 # Uzbekistan Time
- # (Asia/Samarkand)
- # (Asia/Tashkent)
+SAKT Asia/Sakhalin # Sakhalin Time (obsolete)
+SGT Asia/Singapore # Singapore Time (obsolete)
+SRET 39600 # Srednekolymsk Time (obsolete)
+TJT 18000 # Tajikistan Time (obsolete)
+TLT 32400 # East Timor Time (obsolete)
+TMT Asia/Ashgabat # Turkmenistan Time (obsolete)
+ULAST 32400 D # Ulan Bator Summer Time (obsolete)
+ULAT Asia/Ulaanbaatar # Ulan Bator Time (obsolete)
+UZST 21600 D # Uzbekistan Summer Time (obsolete)
+UZT 18000 # Uzbekistan Time (obsolete)
VLAST Asia/Vladivostok # Vladivostok Summer Time (obsolete)
-VLAT Asia/Vladivostok # Vladivostok Time
- # (Asia/Vladivostok)
+VLAT Asia/Vladivostok # Vladivostok Time (obsolete)
WIB 25200 # Waktu Indonesia Barat
# (Asia/Jakarta)
# (Asia/Pontianak)
@@ -229,11 +179,8 @@ WIT 32400 # Waktu Indonesia Timur (caution: this used to mean 25200)
# (Asia/Jayapura)
WITA 28800 # Waktu Indonesia Tengah
# (Asia/Makassar)
-XJT 21600 # Xinjiang Time
- # (Asia/Urumqi)
+XJT 21600 # Xinjiang Time (obsolete)
YAKST Asia/Yakutsk # Yakutsk Summer Time (obsolete)
-YAKT Asia/Yakutsk # Yakutsk Time
- # (Asia/Yakutsk)
+YAKT Asia/Yakutsk # Yakutsk Time (obsolete)
YEKST 21600 D # Yekaterinburg Summer Time (obsolete)
-YEKT Asia/Yekaterinburg # Yekaterinburg Time
- # (Asia/Yekaterinburg)
+YEKT Asia/Yekaterinburg # Yekaterinburg Time (obsolete)
diff --git a/src/timezone/tznames/Atlantic.txt b/src/timezone/tznames/Atlantic.txt
index 1d34d1ed4b..4e036cdda5 100644
--- a/src/timezone/tznames/Atlantic.txt
+++ b/src/timezone/tznames/Atlantic.txt
@@ -44,14 +44,10 @@ AST -14400 # Atlantic Standard Time
# (America/Thule)
# (America/Tortola)
# (Atlantic/Bermuda)
-AZOST 0 D # Azores Summer Time
- # (Atlantic/Azores)
-AZOT -3600 # Azores Time
- # (Atlantic/Azores)
-CVT Atlantic/Cape_Verde # Cape Verde Time
- # (Atlantic/Cape_Verde)
-FKST Atlantic/Stanley # Falkland Islands Summer/Standard Time
- # (Atlantic/Stanley)
+AZOST 0 D # Azores Summer Time (obsolete)
+AZOT -3600 # Azores Time (obsolete)
+CVT Atlantic/Cape_Verde # Cape Verde Time (obsolete)
+FKST Atlantic/Stanley # Falkland Islands Summer/Standard Time (obsolete)
FKT Atlantic/Stanley # Falkland Islands Time (obsolete)
GMT 0 # Greenwich Mean Time
# (Africa/Abidjan)
@@ -74,8 +70,7 @@ GMT 0 # Greenwich Mean Time
# CONFLICT! GST is not unique
# Other timezones:
# - GST: Gulf Standard Time (Asia)
-GST -7200 # South Georgia Time (Atlantic)
- # (Atlantic/South_Georgia)
+GST -7200 # South Georgia Time (Atlantic) (obsolete)
WEST 3600 D # Western Europe Summer Time
# (Atlantic/Canary)
# (Atlantic/Faeroe)
diff --git a/src/timezone/tznames/Australia b/src/timezone/tznames/Australia
index f888fbcd6c..7216e06d6a 100644
--- a/src/timezone/tznames/Australia
+++ b/src/timezone/tznames/Australia
@@ -19,9 +19,9 @@
# in case of a conflict.
@OVERRIDE
-CST 34200 # Central Standard Time (not in zic)
-EAST 36000 # East Australian Standard Time (not in zic)
-EST 36000 # Eastern Standard Time (not in zic)
-SAST 34200 # South Australian Standard Time (not in zic)
-SAT 34200 # South Australian Standard Time (not in zic)
-WST 28800 # Western Standard Time (not in zic)
+CST 34200 # Central Standard Time (not in IANA database)
+EAST 36000 # East Australian Standard Time (not in IANA database)
+EST 36000 # Eastern Standard Time (not in IANA database)
+SAST 34200 # South Australian Standard Time (not in IANA database)
+SAT 34200 # South Australian Standard Time (not in IANA database)
+WST 28800 # Western Standard Time (not in IANA database)
diff --git a/src/timezone/tznames/Australia.txt b/src/timezone/tznames/Australia.txt
index 8f1c1379c1..01629de72a 100644
--- a/src/timezone/tznames/Australia.txt
+++ b/src/timezone/tznames/Australia.txt
@@ -7,7 +7,7 @@
# src/timezone/tznames/Australia.txt
#
-ACSST 37800 D # Central Australia (not in zic)
+ACSST 37800 D # Central Australia (not in IANA database)
ACDT 37800 D # Australian Central Daylight Time
# (Australia/Adelaide)
# (Australia/Broken_Hill)
@@ -16,9 +16,8 @@ ACST 34200 # Australian Central Standard Time
# (Australia/Adelaide)
# (Australia/Broken_Hill)
# (Australia/Darwin)
-ACWST 31500 # Australian Central Western Standard Time
- # (Australia/Eucla)
-AESST 39600 D # Australia Eastern Summer Standard Time (not in zic)
+ACWST 31500 # Australian Central Western Standard Time (obsolete)
+AESST 39600 D # Australia Eastern Summer Standard Time (not in IANA database)
AEDT 39600 D # Australian Eastern Daylight Time
# (Australia/Brisbane)
# (Australia/Currie)
@@ -33,42 +32,40 @@ AEST 36000 # Australian Eastern Standard Time
# (Australia/Lindeman)
# (Australia/Melbourne)
# (Australia/Sydney)
-AWSST 32400 D # Australia Western Summer Standard Time (not in zic)
+AWSST 32400 D # Australia Western Summer Standard Time (not in IANA database)
AWST 28800 # Australian Western Standard Time
# (Australia/Perth)
-CADT 37800 D # Central Australia Daylight-Saving Time (not in zic)
-CAST 34200 # Central Australia Standard Time (not in zic)
+CADT 37800 D # Central Australia Daylight-Saving Time (not in IANA database)
+CAST 34200 # Central Australia Standard Time (not in IANA database)
# CONFLICT! CST is not unique
# Other timezones:
# - CST: Central Standard Time (America)
# - CST: China Standard Time (Asia)
# - CST: Cuba Central Standard Time (America)
-CST 34200 # Central Standard Time (not in zic)
-CWST 31500 # Central Western Standard Time (not in zic)
+CST 34200 # Central Standard Time (not in IANA database)
+CWST 31500 # Central Western Standard Time (not in IANA database)
# CONFLICT! EAST is not unique
# Other timezones:
# - EAST: Easter Island Time (Chile) (Pacific)
-EAST 36000 # East Australian Standard Time (not in zic)
+EAST 36000 # East Australian Standard Time (not in IANA database)
# CONFLICT! EST is not unique
# Other timezones:
# - EST: Eastern Standard Time (America)
-EST 36000 # Eastern Standard Time (not in zic)
-LHDT Australia/Lord_Howe # Lord Howe Daylight Time
- # (Australia/Lord_Howe)
-LHST 37800 # Lord Howe Standard Time
- # (Australia/Lord_Howe)
-LIGT 36000 # Melbourne, Australia (not in zic)
-NZT 43200 # New Zealand Time (not in zic)
-SADT 37800 D # South Australian Daylight-Saving Time (not in zic)
+EST 36000 # Eastern Standard Time (not in IANA database)
+LHDT Australia/Lord_Howe # Lord Howe Daylight Time (obsolete)
+LHST 37800 # Lord Howe Standard Time (obsolete)
+LIGT 36000 # Melbourne, Australia (not in IANA database)
+NZT 43200 # New Zealand Time (not in IANA database)
+SADT 37800 D # South Australian Daylight-Saving Time (not in IANA database)
# CONFLICT! SAST is not unique
# Other timezones:
# - SAST South Africa Standard Time
-SAST 34200 # South Australian Standard Time (not in zic)
-SAT 34200 # South Australian Standard Time (not in zic)
-WADT 28800 D # West Australian Daylight-Saving Time (not in zic)
-WAST 25200 # West Australian Standard Time (not in zic)
-WDT 32400 D # West Australian Daylight-Saving Time (not in zic)
+SAST 34200 # South Australian Standard Time (not in IANA database)
+SAT 34200 # South Australian Standard Time (not in IANA database)
+WADT 28800 D # West Australian Daylight-Saving Time (not in IANA database)
+WAST 25200 # West Australian Standard Time (not in IANA database)
+WDT 32400 D # West Australian Daylight-Saving Time (not in IANA database)
# CONFLICT! WST is not unique
# Other timezones:
# - WST: West Samoa Time
-WST 28800 # Western Standard Time (not in zic)
+WST 28800 # Western Standard Time (not in IANA database)
diff --git a/src/timezone/tznames/Default b/src/timezone/tznames/Default
index fe82a2fac3..80eb1b1290 100644
--- a/src/timezone/tznames/Default
+++ b/src/timezone/tznames/Default
@@ -41,9 +41,7 @@ WAT 3600 # West Africa Time
# Acre time is sometimes called Acre Standard Time (AST) which leads to a
# conflict with AST (see below at AST)
-ACT -18000 # Acre Time
- # (America/Eirunepe)
- # (America/Rio_Branco)
+ACT -18000 # Acre Time (obsolete)
AKDT -28800 D # Alaska Daylight Time
# (America/Anchorage)
# (America/Juneau)
@@ -54,32 +52,13 @@ AKST -32400 # Alaska Standard Time
# (America/Juneau)
# (America/Nome)
# (America/Yakutat)
-ART America/Argentina/Buenos_Aires # Argentina Time
- # (America/Argentina/Buenos_Aires)
- # (America/Argentina/Cordoba)
- # (America/Argentina/Tucuman)
- # (America/Argentina/La_Rioja)
- # (America/Argentina/San_Juan)
- # (America/Argentina/Jujuy)
- # (America/Argentina/Catamarca)
- # (America/Argentina/Mendoza)
- # (America/Argentina/Rio_Gallegos)
- # (America/Argentina/Ushuaia)
-ARST America/Argentina/Buenos_Aires # Argentina Summer Time
-BOT -14400 # Bolivia Time
- # (America/La_Paz)
-BRA -10800 # Brazil Time (not in zic)
-BRST -7200 D # Brasil Summer Time
- # (America/Sao_Paulo)
-BRT -10800 # Brasil Time
- # (America/Araguaina)
- # (America/Bahia)
- # (America/Belem)
- # (America/Fortaleza)
- # (America/Maceio)
- # (America/Recife)
- # (America/Sao_Paulo)
-COT -18000 # Columbia Time (not in zic)
+ART America/Argentina/Buenos_Aires # Argentina Time (obsolete)
+ARST America/Argentina/Buenos_Aires # Argentina Summer Time (obsolete)
+BOT -14400 # Bolivia Time (obsolete)
+BRA -10800 # Brazil Time (not in IANA database)
+BRST -7200 D # Brasil Summer Time (obsolete)
+BRT -10800 # Brasil Time (obsolete)
+COT -18000 # Columbia Time (obsolete)
# CONFLICT! CDT is not unique
# Other timezones:
# - CDT: Mexico Central Daylight Time (America)
@@ -95,12 +74,8 @@ CDT -18000 D # Central Daylight Time
# (America/Rainy_River)
# (America/Rankin_Inlet)
# (America/Winnipeg)
-CLST -10800 D # Chile Summer Time
- # (America/Santiago)
- # (Antarctica/Palmer)
-CLT America/Santiago # Chile Time
- # (America/Santiago)
- # (Antarctica/Palmer)
+CLST -10800 D # Chile Summer Time (obsolete)
+CLT America/Santiago # Chile Time (obsolete)
# CONFLICT! CST is not unique
# Other timezones:
# - CST: Central Standard Time (Australia)
@@ -135,10 +110,8 @@ EDT -14400 D # Eastern Daylight Saving Time
# (America/Pangnirtung)
# (America/Thunder_Bay)
# (America/Toronto)
-EGST 0 D # East Greenland Summer Time
- # (America/Scoresbysund)
-EGT -3600 # East Greenland Time (Svalbard & Jan Mayen)
- # (America/Scoresbysund)
+EGST 0 D # East Greenland Summer Time (obsolete)
+EGT -3600 # East Greenland Time (Svalbard & Jan Mayen) (obsolete)
# CONFLICT! EST is not unique
# Other timezones:
# - EST: Eastern Standard Time (Australia)
@@ -164,14 +137,10 @@ EST -18000 # Eastern Standard Time (America)
# (America/Pangnirtung)
# (America/Thunder_Bay)
# (America/Toronto)
-FNT -7200 # Fernando de Noronha Time
- # (America/Noronha)
-FNST -3600 D # Fernando de Noronha Summer Time (not in zic)
- # (America/Noronha)
-GFT -10800 # French Guiana Time
- # (America/Cayenne)
-GYT America/Guyana # Guyana Time
- # (America/Guyana)
+FNT -7200 # Fernando de Noronha Time (obsolete)
+FNST -3600 D # Fernando de Noronha Summer Time (obsolete)
+GFT -10800 # French Guiana Time (obsolete)
+GYT America/Guyana # Guyana Time (obsolete)
MDT -21600 D # Mexico Mountain Daylight Time
# Mountain Daylight Time
# (America/Boise)
@@ -197,19 +166,21 @@ MST -25200 # Mexico Mountain Standard Time
# (America/Yellowknife)
NDT -9000 D # Newfoundland Daylight Time
# (America/St_Johns)
+# CONFLICT! NFT is not unique
+# Other timezones:
+# - NFT: Norfolk Time (Pacific)
+NFT -12600 # Newfoundland Time (not in IANA database)
NST -12600 # Newfoundland Standard Time
# (America/St_Johns)
-PET -18000 # Peru Time (not in zic)
+PET -18000 # Peru Time (obsolete)
PDT -25200 D # Pacific Daylight Time
# (America/Dawson)
# (America/Los_Angeles)
# (America/Tijuana)
# (America/Vancouver)
# (America/Whitehorse)
-PMDT -7200 D # Pierre & Miquelon Daylight Time
- # (America/Miquelon)
-PMST -10800 # Pierre & Miquelon Standard Time
- # (America/Miquelon)
+PMDT -7200 D # Pierre & Miquelon Daylight Time (obsolete)
+PMST -10800 # Pierre & Miquelon Standard Time (obsolete)
PST -28800 # Pacific Standard Time
# (America/Dawson)
# (America/Los_Angeles)
@@ -217,147 +188,99 @@ PST -28800 # Pacific Standard Time
# (America/Vancouver)
# (America/Whitehorse)
# (Pacific/Pitcairn)
-PYST -10800 D # Paraguay Summer Time
- # (America/Asuncion)
-PYT America/Asuncion # Paraguay Time
- # (America/Asuncion)
+PYST -10800 D # Paraguay Summer Time (obsolete)
+PYT America/Asuncion # Paraguay Time (obsolete)
UYST -7200 D # Uruguay Summer Time (obsolete)
- # (America/Montevideo)
-UYT -10800 # Uruguay Time
- # (America/Montevideo)
-VET America/Caracas # Venezuela Time
- # (America/Caracas)
-WGST -7200 D # Western Greenland Summer Time
- # (America/Godthab)
-WGT -10800 # West Greenland Time
- # (America/Godthab)
+UYT -10800 # Uruguay Time (obsolete)
+VET America/Caracas # Venezuela Time (obsolete)
+WGST -7200 D # Western Greenland Summer Time (obsolete)
+WGT -10800 # West Greenland Time (obsolete)
#################### ANTARCTICA ####################
-DAVT Antarctica/Davis # Davis Time (Antarctica)
- # (Antarctica/Davis)
-DDUT 36000 # Dumont-d'Urville Time (Antarctica)
- # (Antarctica/DumontDUrville)
- # (Antarctica/Palmer)
- # (America/Santiago)
-MAWT Antarctica/Mawson # Mawson Time (Antarctica)
- # (Antarctica/Mawson)
+DAVT Antarctica/Davis # Davis Time (Antarctica) (obsolete)
+DDUT 36000 # Dumont-d'Urville Time (Antarctica) (obsolete)
+MAWT Antarctica/Mawson # Mawson Time (Antarctica) (obsolete)
#################### ASIA ####################
-AFT 16200 # Afghanistan Time
- # (Asia/Kabul)
+AFT 16200 # Afghanistan Time (obsolete)
ALMT 21600 # Alma-Ata Time (obsolete)
ALMST 25200 D # Alma-Ata Summer Time (obsolete)
# CONFLICT! AMST is not unique
# Other timezones:
# - AMST: Amazon Summer Time (America)
-AMST Asia/Yerevan # Armenia Summer Time
- # (Asia/Yerevan)
+AMST Asia/Yerevan # Armenia Summer Time (obsolete)
# CONFLICT! AMT is not unique
# Other timezones:
-# - AMT: Amazon Time (America)
-AMT Asia/Yerevan # Armenia Time
- # (Asia/Yerevan)
+# - AMT: Armenia Time (Asia)
+AMT -14400 # Amazon Time (obsolete)
ANAST Asia/Anadyr # Anadyr Summer Time (obsolete)
-ANAT Asia/Anadyr # Anadyr Time
- # (Asia/Anadyr)
+ANAT Asia/Anadyr # Anadyr Time (obsolete)
AZST Asia/Baku # Azerbaijan Summer Time (obsolete)
-AZT Asia/Baku # Azerbaijan Time
- # (Asia/Baku)
-BDT 21600 # Bangladesh Time
- # (Asia/Dhaka)
-BNT 28800 # Brunei Darussalam Time
- # (Asia/Brunei)
-BORT 28800 # Borneo Time (Indonesia) (not in zic)
-BTT 21600 # Bhutan Time
- # (Asia/Thimphu)
-CCT 28800 # China Coastal Time (not in zic)
+AZT Asia/Baku # Azerbaijan Time (obsolete)
+BDT 21600 # Bangladesh Time (obsolete)
+BNT 28800 # Brunei Darussalam Time (obsolete)
+BORT 28800 # Borneo Time (Indonesia) (not in IANA database)
+BTT 21600 # Bhutan Time (obsolete)
+CCT 28800 # China Coastal Time (not in IANA database)
GEST Asia/Tbilisi # Georgia Summer Time (obsolete)
-GET Asia/Tbilisi # Georgia Time
- # (Asia/Tbilisi)
-HKT 28800 # Hong Kong Time (not in zic)
-ICT 25200 # Indochina Time
- # (Asia/Bangkok)
- # (Asia/Phnom_Penh)
- # (Asia/Saigon)
- # (Asia/Vientiane)
+GET Asia/Tbilisi # Georgia Time (obsolete)
+HKT 28800 # Hong Kong Time
+ # (Asia/Hong_Kong)
+ICT 25200 # Indochina Time (obsolete)
IDT 10800 D # Israel Daylight Time
# (Asia/Jerusalem)
IRKST Asia/Irkutsk # Irkutsk Summer Time (obsolete)
-IRKT Asia/Irkutsk # Irkutsk Time
- # (Asia/Irkutsk)
-IRT 12600 # Iran Time (not in zic)
+IRKT Asia/Irkutsk # Irkutsk Time (obsolete)
+IRT 12600 # Iran Time (not in IANA database)
# CONFLICT! IST is not unique
# Other timezones:
# - IST: Irish Summer Time (Europe)
# - IST: Indian Standard Time (Asia)
IST 7200 # Israel Standard Time
# (Asia/Jerusalem)
-JAYT 32400 # Jayapura Time (Indonesia) (not in zic)
+JAYT 32400 # Jayapura Time (Indonesia) (not in IANA database)
JST 32400 # Japan Standard Time
# (Asia/Tokyo)
-KDT 36000 D # Korean Daylight Time (not in zic)
+KDT 36000 D # Korean Daylight Time (not in IANA database)
KGST 21600 D # Kyrgyzstan Summer Time (obsolete)
-KGT Asia/Bishkek # Kyrgyzstan Time
- # (Asia/Bishkek)
+KGT Asia/Bishkek # Kyrgyzstan Time (obsolete)
KRAST Asia/Krasnoyarsk # Krasnoyarsk Summer Time (obsolete)
-KRAT Asia/Krasnoyarsk # Krasnoyarsk Time
- # (Asia/Krasnoyarsk)
+KRAT Asia/Krasnoyarsk # Krasnoyarsk Time (obsolete)
KST 32400 # Korean Standard Time
# (Asia/Seoul)
LKT Asia/Colombo # Lanka Time (obsolete)
MAGST Asia/Magadan # Magadan Summer Time (obsolete)
-MAGT Asia/Magadan # Magadan Time
- # (Asia/Magadan)
-MMT 23400 # Myanmar Time
- # (Asia/Rangoon)
-MYT 28800 # Malaysia Time
- # (Asia/Kuala_Lumpur)
- # (Asia/Kuching)
+MAGT Asia/Magadan # Magadan Time (obsolete)
+MMT 23400 # Myanmar Time (obsolete)
+MYT 28800 # Malaysia Time (obsolete)
NOVST Asia/Novosibirsk # Novosibirsk Summer Time (obsolete)
NOVT Asia/Novosibirsk # Novosibirsk Time (obsolete)
-NPT 20700 # Nepal Time
- # (Asia/Katmandu)
+NPT 20700 # Nepal Time (obsolete)
OMSST Asia/Omsk # Omsk Summer Time (obsolete)
-OMST Asia/Omsk # Omsk Time
- # (Asia/Omsk)
+OMST Asia/Omsk # Omsk Time (obsolete)
PETST Asia/Kamchatka # Petropavlovsk-Kamchatski Summer Time (obsolete)
-PETT Asia/Kamchatka # Petropavlovsk-Kamchatski Time
- # (Asia/Kamchatka)
-PHT 28800 # Philippine Time
- # (Asia/Manila)
+PETT Asia/Kamchatka # Petropavlovsk-Kamchatski Time (obsolete)
+PHT 28800 # Philippine Time (obsolete)
PKT 18000 # Pakistan Time
# (Asia/Karachi)
PKST 21600 D # Pakistan Summer Time
# (Asia/Karachi)
-SGT Asia/Singapore # Singapore Time
- # (Asia/Singapore)
-TJT 18000 # Tajikistan Time
- # (Asia/Dushanbe)
-TMT Asia/Ashgabat # Turkmenistan Time
- # (Asia/Ashgabat)
-ULAST 32400 D # Ulan Bator Summer Time
- # (Asia/Ulaanbaatar)
-ULAT Asia/Ulaanbaatar # Ulan Bator Time
- # (Asia/Ulaanbaatar)
-UZST 21600 D # Uzbekistan Summer Time
- # (Asia/Samarkand)
- # (Asia/Tashkent)
-UZT 18000 # Uzbekistan Time
- # (Asia/Samarkand)
- # (Asia/Tashkent)
+SGT Asia/Singapore # Singapore Time (obsolete)
+TJT 18000 # Tajikistan Time (obsolete)
+TMT Asia/Ashgabat # Turkmenistan Time (obsolete)
+ULAST 32400 D # Ulan Bator Summer Time (obsolete)
+ULAT Asia/Ulaanbaatar # Ulan Bator Time (obsolete)
+UZST 21600 D # Uzbekistan Summer Time (obsolete)
+UZT 18000 # Uzbekistan Time (obsolete)
VLAST Asia/Vladivostok # Vladivostok Summer Time (obsolete)
-VLAT Asia/Vladivostok # Vladivostok Time
- # (Asia/Vladivostok)
-XJT 21600 # Xinjiang Time
- # (Asia/Urumqi)
+VLAT Asia/Vladivostok # Vladivostok Time (obsolete)
+XJT 21600 # Xinjiang Time (obsolete)
YAKST Asia/Yakutsk # Yakutsk Summer Time (obsolete)
-YAKT Asia/Yakutsk # Yakutsk Time
- # (Asia/Yakutsk)
+YAKT Asia/Yakutsk # Yakutsk Time (obsolete)
YEKST 21600 D # Yekaterinburg Summer Time (obsolete)
-YEKT Asia/Yekaterinburg # Yekaterinburg Time
- # (Asia/Yekaterinburg)
+YEKT Asia/Yekaterinburg # Yekaterinburg Time (obsolete)
#################### ATLANTIC ####################
@@ -398,17 +321,14 @@ AST -14400 # Atlantic Standard Time
# (America/Thule)
# (America/Tortola)
# (Atlantic/Bermuda)
-AZOST 0 D # Azores Summer Time
- # (Atlantic/Azores)
-AZOT -3600 # Azores Time
- # (Atlantic/Azores)
-FKST Atlantic/Stanley # Falkland Islands Summer/Standard Time
- # (Atlantic/Stanley)
+AZOST 0 D # Azores Summer Time (obsolete)
+AZOT -3600 # Azores Time (obsolete)
+FKST Atlantic/Stanley # Falkland Islands Summer/Standard Time (obsolete)
FKT Atlantic/Stanley # Falkland Islands Time (obsolete)
#################### AUSTRALIA ####################
-ACSST 37800 D # Australian Central Summer Standard Time (not in zic)
+ACSST 37800 D # Australian Central Summer Standard Time (not in IANA database)
ACDT 37800 D # Australian Central Daylight Time
# (Australia/Adelaide)
# (Australia/Broken_Hill)
@@ -417,9 +337,8 @@ ACST 34200 # Australian Central Standard Time
# (Australia/Adelaide)
# (Australia/Broken_Hill)
# (Australia/Darwin)
-ACWST 31500 # Australian Central Western Standard Time
- # (Australia/Eucla)
-AESST 39600 D # Australian Eastern Summer Standard Time (not in zic)
+ACWST 31500 # Australian Central Western Standard Time (obsolete)
+AESST 39600 D # Australian Eastern Summer Standard Time (not in IANA database)
AEDT 39600 D # Australian Eastern Daylight Time
# (Australia/Brisbane)
# (Australia/Currie)
@@ -434,21 +353,19 @@ AEST 36000 # Australian Eastern Standard Time
# (Australia/Lindeman)
# (Australia/Melbourne)
# (Australia/Sydney)
-AWSST 32400 D # Australia Western Summer Standard Time (not in zic)
+AWSST 32400 D # Australia Western Summer Standard Time (not in IANA database)
AWST 28800 # Australian Western Standard Time
# (Australia/Perth)
-CADT 37800 D # Central Australia Daylight-Saving Time (not in zic)
-CAST 34200 # Central Australia Standard Time (not in zic)
-LHDT Australia/Lord_Howe # Lord Howe Daylight Time
- # (Australia/Lord_Howe)
-LHST 37800 # Lord Howe Standard Time
- # (Australia/Lord_Howe)
-LIGT 36000 # Melbourne, Australia (not in zic)
-NZT 43200 # New Zealand Time (not in zic)
-SADT 37800 D # South Australian Daylight-Saving Time (not in zic)
-WADT 28800 D # West Australian Daylight-Saving Time (not in zic)
-WAST 25200 # West Australian Standard Time (not in zic)
-WDT 32400 D # West Australian Daylight-Saving Time (not in zic)
+CADT 37800 D # Central Australia Daylight-Saving Time (not in IANA database)
+CAST 34200 # Central Australia Standard Time (not in IANA database)
+LHDT Australia/Lord_Howe # Lord Howe Daylight Time (obsolete)
+LHST 37800 # Lord Howe Standard Time (obsolete)
+LIGT 36000 # Melbourne, Australia (not in IANA database)
+NZT 43200 # New Zealand Time (not in IANA database)
+SADT 37800 D # South Australian Daylight-Saving Time (not in IANA database)
+WADT 28800 D # West Australian Daylight-Saving Time (not in IANA database)
+WAST 25200 # West Australian Standard Time (not in IANA database)
+WDT 32400 D # West Australian Daylight-Saving Time (not in IANA database)
#################### ETC ####################
@@ -472,7 +389,7 @@ GMT 0 # Greenwich Mean Time
# (Europe/London)
UCT 0 # Universal Coordinated Time
# (Etc/UCT)
-UT 0 # Universal Time (not in zic)
+UT 0 # Universal Time (not in IANA database)
UTC 0 # Coordinated Universal Time
Z 0 # Zulu
ZULU 0 # Zulu
@@ -631,10 +548,15 @@ EETDST 10800 D # East-Egypt Summertime
FET 10800 # Further-eastern European Time (obsolete)
# (Europe/Kaliningrad)
# (Europe/Minsk)
-MEST 7200 D # Middle Europe Summer Time (not in zic)
-MET 3600 # Middle Europe Time (not in zic)
-METDST 7200 D # Middle Europe Summer Time (not in zic)
-MEZ 3600 # Mitteleuropaeische Zeit (German) (not in zic)
+MEST 7200 D # Middle Europe Summer Time
+ # (MET)
+MESZ 7200 D # Mitteleuropaeische Sommerzeit (German)
+ # (attested in IANA comments though not their code)
+MET 3600 # Middle Europe Time
+ # (MET)
+METDST 7200 D # Middle Europe Summer Time (not in IANA database)
+MEZ 3600 # Mitteleuropaeische Zeit (German)
+ # (attested in IANA comments though not their code)
MSD 14400 D # Moscow Daylight Time (obsolete)
MSK Europe/Moscow # Moscow Time
# (Europe/Moscow)
@@ -655,94 +577,53 @@ WETDST 3600 D # Western Europe Summer Time
#################### INDIAN ####################
-CXT 25200 # Christmas Island Time (Indian Ocean)
- # (Indian/Christmas)
-IOT Indian/Chagos # British Indian Ocean Territory (Chagos)
- # (Indian/Chagos)
-MUT 14400 # Mauritius Island Time
- # (Indian/Mauritius)
-MUST 18000 D # Mauritius Island Summer Time
- # (Indian/Mauritius)
-MVT 18000 # Maldives Island Time
- # (Indian/Maldives)
-RET 14400 # Reunion Time
- # (Indian/Reunion)
-SCT 14400 # Seychelles Time
- # (Indian/Mahe)
-TFT 18000 # Kerguelen Time
- # (Indian/Kerguelen)
+CXT 25200 # Christmas Island Time (Indian Ocean) (obsolete)
+IOT Indian/Chagos # British Indian Ocean Territory (Chagos) (obsolete)
+MUT 14400 # Mauritius Island Time (obsolete)
+MUST 18000 D # Mauritius Island Summer Time (obsolete)
+MVT 18000 # Maldives Island Time (obsolete)
+RET 14400 # Reunion Time (obsolete)
+SCT 14400 # Seychelles Time (obsolete)
+TFT 18000 # Kerguelen Time (obsolete)
#################### PACIFIC ####################
-CHADT 49500 D # Chatham Daylight Time (New Zealand)
- # (Pacific/Chatham)
-CHAST 45900 # Chatham Standard Time (New Zealand)
- # (Pacific/Chatham)
-CHUT 36000 # Chuuk Time
- # (Pacific/Chuuk)
-CKT Pacific/Rarotonga # Cook Islands Time
- # (Pacific/Rarotonga)
-EASST Pacific/Easter # Easter Island Summer Time
- # (Pacific/Easter)
-EAST Pacific/Easter # Easter Island Time (Chile)
- # (Pacific/Easter)
-FJST 46800 D # Fiji Summer Time
- # (Pacific/Fiji)
-FJT 43200 # Fiji Time
- # (Pacific/Fiji)
-GALT -21600 # Galapagos Time
- # (Pacific/Galapagos)
-GAMT -32400 # Gambier Time
- # (Pacific/Gambier)
-GILT 43200 # Gilbert Islands Time
- # (Pacific/Tarawa)
+CHADT 49500 D # Chatham Daylight Time (New Zealand) (obsolete)
+CHAST 45900 # Chatham Standard Time (New Zealand) (obsolete)
+CHUT 36000 # Chuuk Time (obsolete)
+CKT Pacific/Rarotonga # Cook Islands Time (obsolete)
+EASST Pacific/Easter # Easter Island Summer Time (obsolete)
+EAST Pacific/Easter # Easter Island Time (Chile) (obsolete)
+FJST 46800 D # Fiji Summer Time (obsolete)
+FJT 43200 # Fiji Time (obsolete)
+GALT -21600 # Galapagos Time (obsolete)
+GAMT -32400 # Gambier Time (obsolete)
+GILT 43200 # Gilbert Islands Time (obsolete)
HST -36000 # Hawaiian Standard Time
# (Pacific/Honolulu)
# (Pacific/Johnston)
-KOST Pacific/Kosrae # Kosrae Time
- # (Pacific/Kosrae)
-LINT Pacific/Kiritimati # Line Islands Time (Kiribati)
- # (Pacific/Kiritimati)
-MART -34200 # Marquesas Time
- # (Pacific/Marquesas)
-MHT 43200 # Kwajalein Time
- # (Pacific/Kwajalein)
- # (Pacific/Majuro)
-MPT 36000 # North Mariana Islands Time (not in zic)
-# CONFLICT! NFT is not unique
-# Other timezones:
-# - NFT: Norfolk Time (Pacific)
-NFT -12600 # Newfoundland Time (not in zic)
-NUT Pacific/Niue # Niue Time
- # (Pacific/Niue)
+KOST Pacific/Kosrae # Kosrae Time (obsolete)
+LINT Pacific/Kiritimati # Line Islands Time (Kiribati) (obsolete)
+MART -34200 # Marquesas Time (obsolete)
+MHT 43200 # Kwajalein Time (obsolete)
+MPT 36000 # North Mariana Islands Time (not in IANA database)
+NUT Pacific/Niue # Niue Time (obsolete)
NZDT 46800 D # New Zealand Daylight Time
# (Antarctica/McMurdo)
# (Pacific/Auckland)
NZST 43200 # New Zealand Standard Time
# (Antarctica/McMurdo)
# (Pacific/Auckland)
-PGT 36000 # Papua New Guinea Time
- # (Pacific/Port_Moresby)
-PHOT Pacific/Enderbury # Phoenix Islands Time (Kiribati)
- # (Pacific/Enderbury)
-PONT 39600 # Ponape Time (Micronesia)
- # (Pacific/Ponape)
-PWT 32400 # Palau Time
- # (Pacific/Palau)
-TAHT -36000 # Tahiti Time (zic says "TAHT", other sources "THAT")
- # (Pacific/Tahiti)
-TKT Pacific/Fakaofo # Tokelau Time
- # (Pacific/Fakaofo)
-TOT 46800 # Tonga Time
- # (Pacific/Tongatapu)
-TRUT 36000 # Truk Time (zic used to say "TRUT", other sources say "TRUK")
- # (Pacific/Truk)
-TVT 43200 # Tuvalu Time
- # (Pacific/Funafuti)
-VUT 39600 # Vanuata Time
- # (Pacific/Efate)
-WAKT 43200 # Wake Time
- # (Pacific/Wake)
-WFT 43200 # Wallis and Futuna Time
- # (Pacific/Wallis)
-YAPT 36000 # Yap Time (Micronesia) (not in zic)
+PGT 36000 # Papua New Guinea Time (obsolete)
+PHOT Pacific/Enderbury # Phoenix Islands Time (Kiribati) (obsolete)
+PONT 39600 # Ponape Time (Micronesia) (obsolete)
+PWT 32400 # Palau Time (obsolete)
+TAHT -36000 # Tahiti Time (obsolete)
+TKT Pacific/Fakaofo # Tokelau Time (obsolete)
+TOT 46800 # Tonga Time (obsolete)
+TRUT 36000 # Truk Time (obsolete)
+TVT 43200 # Tuvalu Time (obsolete)
+VUT 39600 # Vanuata Time (obsolete)
+WAKT 43200 # Wake Time (obsolete)
+WFT 43200 # Wallis and Futuna Time (obsolete)
+YAPT 36000 # Yap Time (Micronesia) (not in IANA database)
diff --git a/src/timezone/tznames/Etc.txt b/src/timezone/tznames/Etc.txt
index a4ea1dee68..aa48404819 100644
--- a/src/timezone/tznames/Etc.txt
+++ b/src/timezone/tznames/Etc.txt
@@ -27,7 +27,7 @@ GMT 0 # Greenwich Mean Time
# (Europe/London)
UCT 0 # Universal Coordinated Time
# (Etc/UCT)
-UT 0 # Universal Time (not in zic)
+UT 0 # Universal Time (not in IANA database)
UTC 0 # Coordinated Universal Time
# (Etc/UTC)
Z 0 # Zulu
diff --git a/src/timezone/tznames/Europe.txt b/src/timezone/tznames/Europe.txt
index a4223e5e22..0cb49f156b 100644
--- a/src/timezone/tznames/Europe.txt
+++ b/src/timezone/tznames/Europe.txt
@@ -182,17 +182,21 @@ GMT 0 # Greenwich Mean Time
# - IST: Israel Standard Time (Asia)
IST 3600 D # Irish Summer Time
# (Europe/Dublin)
-MEST 7200 D # Middle Europe Summer Time (not in zic)
-MET 3600 # Middle Europe Time (not in zic)
-METDST 7200 D # Middle Europe Summer Time (not in zic)
-MEZ 3600 # Mitteleuropäische Zeit (German) (not in zic)
+MEST 7200 D # Middle Europe Summer Time
+ # (MET)
+MESZ 7200 D # Mitteleuropäische Sommerzeit (German)
+ # (attested in IANA comments though not their code)
+MET 3600 # Middle Europe Time
+ # (MET)
+METDST 7200 D # Middle Europe Summer Time (not in IANA database)
+MEZ 3600 # Mitteleuropäische Zeit (German)
+ # (attested in IANA comments though not their code)
MSD 14400 D # Moscow Daylight Time (obsolete)
MSK Europe/Moscow # Moscow Time
# (Europe/Moscow)
# (Europe/Volgograd)
SAMST Europe/Samara # Samara Summer Time (obsolete)
-SAMT Europe/Samara # Samara Time
- # (Europe/Samara)
+SAMT Europe/Samara # Samara Time (obsolete)
VOLT Europe/Volgograd # Volgograd Time (obsolete)
WEST 3600 D # Western Europe Summer Time
# (Africa/Casablanca)
diff --git a/src/timezone/tznames/Indian.txt b/src/timezone/tznames/Indian.txt
index 634660075f..8e6fe6094c 100644
--- a/src/timezone/tznames/Indian.txt
+++ b/src/timezone/tznames/Indian.txt
@@ -7,10 +7,8 @@
# src/timezone/tznames/Indian.txt
#
-CCT 23400 # Cocos Islands Time (Indian Ocean)
- # (Indian/Cocos)
-CXT 25200 # Christmas Island Time (Indian Ocean)
- # (Indian/Christmas)
+CCT 23400 # Cocos Islands Time (Indian Ocean) (obsolete)
+CXT 25200 # Christmas Island Time (Indian Ocean) (obsolete)
EAT 10800 # East Africa Time
# (Africa/Addis_Ababa)
# (Africa/Asmera)
@@ -23,17 +21,10 @@ EAT 10800 # East Africa Time
# (Indian/Antananarivo)
# (Indian/Comoro)
# (Indian/Mayotte)
-IOT Indian/Chagos # British Indian Ocean Territory (Chagos)
- # (Indian/Chagos)
-MUT 14400 # Mauritius Island Time
- # (Indian/Mauritius)
-MUST 18000 D # Mauritius Island Summer Time
- # (Indian/Mauritius)
-MVT 18000 # Maldives Island Time
- # (Indian/Maldives)
-RET 14400 # Reunion Time
- # (Indian/Reunion)
-SCT 14400 # Seychelles Time
- # (Indian/Mahe)
-TFT 18000 # Kerguelen Time
- # (Indian/Kerguelen)
+IOT Indian/Chagos # British Indian Ocean Territory (Chagos) (obsolete)
+MUT 14400 # Mauritius Island Time (obsolete)
+MUST 18000 D # Mauritius Island Summer Time (obsolete)
+MVT 18000 # Maldives Island Time (obsolete)
+RET 14400 # Reunion Time (obsolete)
+SCT 14400 # Seychelles Time (obsolete)
+TFT 18000 # Kerguelen Time (obsolete)
diff --git a/src/timezone/tznames/Pacific.txt b/src/timezone/tznames/Pacific.txt
index 67211fcad0..c86248bbc7 100644
--- a/src/timezone/tznames/Pacific.txt
+++ b/src/timezone/tznames/Pacific.txt
@@ -10,72 +10,48 @@
# CONFLICT! BST is not unique
# Other timezones:
# - BST: British Summer Time
-BST 39600 # Bougainville Standard Time (Papua New Guinea)
- # (Pacific/Bougainville)
-CHADT 49500 D # Chatham Daylight Time (New Zealand)
- # (Pacific/Chatham)
-CHAST 45900 # Chatham Standard Time (New Zealand)
- # (Pacific/Chatham)
-ChST 36000 # Chamorro Standard Time (lower case "h" is as in zic)
+BST 39600 # Bougainville Standard Time (Papua New Guinea) (obsolete)
+CHADT 49500 D # Chatham Daylight Time (New Zealand) (obsolete)
+CHAST 45900 # Chatham Standard Time (New Zealand) (obsolete)
+ChST 36000 # Chamorro Standard Time (lower case "h" is as in IANA database)
# (Pacific/Guam)
# (Pacific/Saipan)
-CHUT 36000 # Chuuk Time
- # (Pacific/Chuuk)
-CKT Pacific/Rarotonga # Cook Islands Time
- # (Pacific/Rarotonga)
-EASST Pacific/Easter # Easter Island Summer Time
- # (Pacific/Easter)
+CHUT 36000 # Chuuk Time (obsolete)
+CKT Pacific/Rarotonga # Cook Islands Time (obsolete)
+EASST Pacific/Easter # Easter Island Summer Time (obsolete)
# CONFLICT! EAST is not unique
# Other timezones:
# - EAST: East Australian Standard Time (Australia)
-EAST Pacific/Easter # Easter Island Time (Chile)
- # (Pacific/Easter)
-FJST 46800 D # Fiji Summer Time (caution: this used to mean -46800)
- # (Pacific/Fiji)
-FJT 43200 # Fiji Time (caution: this used to mean -43200)
- # (Pacific/Fiji)
-GALT -21600 # Galapagos Time
- # (Pacific/Galapagos)
-GAMT -32400 # Gambier Time
- # (Pacific/Gambier)
-GILT 43200 # Gilbert Islands Time
- # (Pacific/Tarawa)
+EAST Pacific/Easter # Easter Island Time (Chile) (obsolete)
+FJST 46800 D # Fiji Summer Time (caution: this used to mean -46800) (obsolete)
+FJT 43200 # Fiji Time (caution: this used to mean -43200) (obsolete)
+GALT -21600 # Galapagos Time (obsolete)
+GAMT -32400 # Gambier Time (obsolete)
+GILT 43200 # Gilbert Islands Time (obsolete)
HST -36000 # Hawaiian Standard Time
# (Pacific/Honolulu)
# (Pacific/Johnston)
-KOST Pacific/Kosrae # Kosrae Time
- # (Pacific/Kosrae)
-LINT Pacific/Kiritimati # Line Islands Time (Kiribati)
- # (Pacific/Kiritimati)
-MART -34200 # Marquesas Time
- # (Pacific/Marquesas)
-MHT 43200 # Kwajalein Time
- # (Pacific/Kwajalein)
- # (Pacific/Majuro)
-MPT 36000 # North Mariana Islands Time (not in zic)
-NCT 39600 # New Caledonia Time
- # (Pacific/Noumea)
+KOST Pacific/Kosrae # Kosrae Time (obsolete)
+LINT Pacific/Kiritimati # Line Islands Time (Kiribati) (obsolete)
+MART -34200 # Marquesas Time (obsolete)
+MHT 43200 # Kwajalein Time (obsolete)
+MPT 36000 # North Mariana Islands Time (not in IANA database)
+NCT 39600 # New Caledonia Time (obsolete)
# CONFLICT! NFT is not unique
# Other timezones:
# - NFT: Newfoundland Time (America)
-NFT Pacific/Norfolk # Norfolk Time
- # (Pacific/Norfolk)
-NRT Pacific/Nauru # Nauru Time
- # (Pacific/Nauru)
-NUT Pacific/Niue # Niue Time
- # (Pacific/Niue)
+NFT Pacific/Norfolk # Norfolk Time (obsolete)
+NRT Pacific/Nauru # Nauru Time (obsolete)
+NUT Pacific/Niue # Niue Time (obsolete)
NZDT 46800 D # New Zealand Daylight Time
# (Antarctica/McMurdo)
# (Pacific/Auckland)
NZST 43200 # New Zealand Standard Time
# (Antarctica/McMurdo)
# (Pacific/Auckland)
-PGT 36000 # Papua New Guinea Time
- # (Pacific/Port_Moresby)
-PHOT Pacific/Enderbury # Phoenix Islands Time (Kiribati)
- # (Pacific/Enderbury)
-PONT 39600 # Ponape Time (Micronesia)
- # (Pacific/Ponape)
+PGT 36000 # Papua New Guinea Time (obsolete)
+PHOT Pacific/Enderbury # Phoenix Islands Time (Kiribati) (obsolete)
+PONT 39600 # Ponape Time (Micronesia) (obsolete)
PST -28800 # Pacific Standard Time
# (America/Dawson)
# (America/Los_Angeles)
@@ -83,35 +59,23 @@ PST -28800 # Pacific Standard Time
# (America/Vancouver)
# (America/Whitehorse)
# (Pacific/Pitcairn)
-PWT 32400 # Palau Time
- # (Pacific/Palau)
-SBT 39600 # Solomon Islands Time
- # (Pacific/Guadalcanal)
+PWT 32400 # Palau Time (obsolete)
+SBT 39600 # Solomon Islands Time (obsolete)
SST -39600 # South Sumatran Time
# (Pacific/Midway)
# (Pacific/Pago_Pago)
-TAHT -36000 # Tahiti Time (zic says "TAHT", other sources "THAT")
- # (Pacific/Tahiti)
-TKT Pacific/Fakaofo # Tokelau Time
- # (Pacific/Fakaofo)
-TOT 46800 # Tonga Time
- # (Pacific/Tongatapu)
-TRUT 36000 # Truk Time (zic used to say "TRUT", other sources say "TRUK")
- # (Pacific/Truk)
-TVT 43200 # Tuvalu Time
- # (Pacific/Funafuti)
-VUT 39600 # Vanuata Time
- # (Pacific/Efate)
-WAKT 43200 # Wake Time
- # (Pacific/Wake)
-WFT 43200 # Wallis and Futuna Time
- # (Pacific/Wallis)
-WSDT 50400 D # West Samoa Daylight Time
- # (Pacific/Apia)
-WSST 46800 # West Samoa Standard Time
- # (Pacific/Apia)
+TAHT -36000 # Tahiti Time (obsolete)
+TKT Pacific/Fakaofo # Tokelau Time (obsolete)
+TOT 46800 # Tonga Time (obsolete)
+TRUT 36000 # Truk Time (obsolete)
+TVT 43200 # Tuvalu Time (obsolete)
+VUT 39600 # Vanuata Time (obsolete)
+WAKT 43200 # Wake Time (obsolete)
+WFT 43200 # Wallis and Futuna Time (obsolete)
+WSDT 50400 D # West Samoa Daylight Time (obsolete)
+WSST 46800 # West Samoa Standard Time (obsolete)
# CONFLICT! WST is not unique
# Other timezones:
# - WST: Western Standard Time (Australia)
-WST 46800 # West Samoa Time (caution: this used to mean -39600) (not in zic)
-YAPT 36000 # Yap Time (Micronesia) (not in zic)
+WST 46800 # West Samoa Time (caution: this used to mean -39600) (not in IANA database)
+YAPT 36000 # Yap Time (Micronesia) (not in IANA database)
diff --git a/src/timezone/tznames/README b/src/timezone/tznames/README
index c80caa3786..0058770d19 100644
--- a/src/timezone/tznames/README
+++ b/src/timezone/tznames/README
@@ -29,6 +29,12 @@ see the `Australia' and `India' files.
The files named Africa.txt, etc, are not intended to be used directly as
time zone abbreviation files. They contain reference definitions of time zone
abbreviations that can be copied into a custom abbreviation file as needed.
-Note that these files (*.txt) are already a subset of the IANA timezone
-database files: we tried to list only those time zone abbreviations that
-(according to the IANA timezone database) appear to be still in use.
+These files contain most of the time zone abbreviations that were shown
+in the IANA timezone database circa 2010.
+
+However, it turns out that many of these abbreviations had simply been
+invented by the IANA timezone group, and do not have currency in real-world
+use. The IANA group have changed their policy about that, and now prefer to
+use numeric UTC offsets whenever there's not an abbreviation with known
+real-world popularity. A lot of these abbreviations therefore no longer
+appear in the IANA data, and so are marked "obsolete" in these data files.
diff --git a/src/timezone/zic.c b/src/timezone/zic.c
index b546a17372..5fa0a81262 100644
--- a/src/timezone/zic.c
+++ b/src/timezone/zic.c
@@ -8,9 +8,10 @@
#include "postgres_fe.h"
-#include <locale.h>
+#include <fcntl.h>
#include <sys/stat.h>
#include <time.h>
+#include <unistd.h>
#include "pg_getopt.h"
@@ -35,11 +36,24 @@ typedef int64 zic_t;
#define MKDIR_UMASK 0755
#endif
#endif
+#ifndef AT_SYMLINK_FOLLOW
+#define linkat(fromdir, from, todir, to, flag) \
+ (itssymlink(from) ? (errno = ENOTSUP, -1) : link(from, to))
+#endif
+
+/* The maximum ptrdiff_t value, for pre-C99 platforms. */
+#ifndef PTRDIFF_MAX
+static ptrdiff_t const PTRDIFF_MAX = MAXVAL(ptrdiff_t, TYPE_BIT(ptrdiff_t));
+#endif
+
+/* The type and printf format for line numbers. */
+typedef int lineno_t;
+#define PRIdLINENO "d"
struct rule
{
const char *r_filename;
- int r_linenum;
+ lineno_t r_linenum;
const char *r_name;
zic_t r_loyear; /* for example, 1986 */
@@ -61,7 +75,7 @@ struct rule
zic_t r_stdoff; /* offset from standard time */
const char *r_abbrvar; /* variable part of abbreviation */
- int r_todo; /* a rule to do (used in outzone) */
+ bool r_todo; /* a rule to do (used in outzone) */
zic_t r_temp; /* used in outzone */
};
@@ -76,7 +90,7 @@ struct rule
struct zone
{
const char *z_filename;
- int z_linenum;
+ lineno_t z_linenum;
const char *z_name;
zic_t z_gmtoff;
@@ -87,7 +101,7 @@ struct zone
zic_t z_stdoff;
struct rule *z_rules;
- int z_nrules;
+ ptrdiff_t z_nrules;
struct rule z_untilrule;
zic_t z_untiltime;
@@ -105,7 +119,7 @@ static int addtype(zic_t, char const *, bool, bool, bool);
static void leapadd(zic_t, bool, int, int);
static void adjleap(void);
static void associate(void);
-static void dolink(const char *fromfield, const char *tofield);
+static void dolink(const char *, const char *, bool);
static char **getfields(char *buf);
static zic_t gethms(const char *string, const char *errstring,
bool);
@@ -116,26 +130,36 @@ static void inrule(char **fields, int nfields);
static bool inzcont(char **fields, int nfields);
static bool inzone(char **fields, int nfields);
static bool inzsub(char **, int, bool);
-static int itsdir(const char *name);
+static bool itsdir(char const *);
+static bool itssymlink(char const *);
static bool is_alpha(char a);
static char lowerit(char);
-static bool mkdirs(char *);
+static void mkdirs(char const *, bool);
static void newabbr(const char *abbr);
static zic_t oadd(zic_t t1, zic_t t2);
-static void outzone(const struct zone * zp, int ntzones);
+static void outzone(const struct zone * zp, ptrdiff_t ntzones);
static zic_t rpytime(const struct rule * rp, zic_t wantedy);
static void rulesub(struct rule * rp,
const char *loyearp, const char *hiyearp,
const char *typep, const char *monthp,
const char *dayp, const char *timep);
static zic_t tadd(zic_t t1, zic_t t2);
-static bool yearistype(int year, const char *type);
+static bool yearistype(zic_t year, const char *type);
/* Bound on length of what %z can expand to. */
enum
{
PERCENT_Z_LEN_BOUND = sizeof "+995959" - 1};
+/* If true, work around a bug in Qt 5.6.1 and earlier, which mishandles
+ tz binary files whose POSIX-TZ-style strings contain '<'; see
+ QTBUG-53071 <https://bugreports.qt.io/browse/QTBUG-53071>. This
+ workaround will no longer be needed when Qt 5.6.1 and earlier are
+ obsolete, say in the year 2021. */
+enum
+{
+WORK_AROUND_QTBUG_53071 = true};
+
static int charcnt;
static bool errors;
static bool warnings;
@@ -144,7 +168,7 @@ static int leapcnt;
static bool leapseen;
static zic_t leapminyear;
static zic_t leapmaxyear;
-static int linenum;
+static lineno_t linenum;
static int max_abbrvar_len = PERCENT_Z_LEN_BOUND;
static int max_format_len;
static zic_t max_year;
@@ -153,10 +177,10 @@ static bool noise;
static bool print_abbrevs;
static zic_t print_cutoff;
static const char *rfilename;
-static int rlinenum;
+static lineno_t rlinenum;
static const char *progname;
-static int timecnt;
-static int timecnt_alloc;
+static ptrdiff_t timecnt;
+static ptrdiff_t timecnt_alloc;
static int typecnt;
/*
@@ -241,24 +265,24 @@ static int typecnt;
#define YR_ONLY 2
static struct rule *rules;
-static int nrules; /* number of rules */
-static int nrules_alloc;
+static ptrdiff_t nrules; /* number of rules */
+static ptrdiff_t nrules_alloc;
static struct zone *zones;
-static int nzones; /* number of zones */
-static int nzones_alloc;
+static ptrdiff_t nzones; /* number of zones */
+static ptrdiff_t nzones_alloc;
struct link
{
const char *l_filename;
- int l_linenum;
+ lineno_t l_linenum;
const char *l_from;
const char *l_to;
};
static struct link *links;
-static int nlinks;
-static int nlinks_alloc;
+static ptrdiff_t nlinks;
+static ptrdiff_t nlinks_alloc;
struct lookup
{
@@ -346,6 +370,7 @@ static const int len_years[2] = {
static struct attype
{
zic_t at;
+ bool dontmerge;
unsigned char type;
} *attypes;
static zic_t gmtoffs[TZ_MAX_TYPES];
@@ -404,17 +429,17 @@ ecpyalloc(char const * str)
}
static void *
-growalloc(void *ptr, size_t itemsize, int nitems, int *nitems_alloc)
+growalloc(void *ptr, size_t itemsize, ptrdiff_t nitems, ptrdiff_t *nitems_alloc)
{
if (nitems < *nitems_alloc)
return ptr;
else
{
- int amax = INT_MAX < SIZE_MAX ? INT_MAX : SIZE_MAX;
+ ptrdiff_t amax = PTRDIFF_MAX - WORK_AROUND_QTBUG_53071;
if ((amax - 1) / 3 * 2 < *nitems_alloc)
- memory_exhausted(_("int overflow"));
- *nitems_alloc = *nitems_alloc + (*nitems_alloc >> 1) + 1;
+ memory_exhausted(_("integer overflow"));
+ *nitems_alloc += (*nitems_alloc >> 1) + 1;
return erealloc(ptr, size_product(*nitems_alloc, itemsize));
}
}
@@ -424,7 +449,7 @@ growalloc(void *ptr, size_t itemsize, int nitems, int *nitems_alloc)
*/
static void
-eats(const char *name, int num, const char *rname, int rnum)
+eats(char const * name, lineno_t num, char const * rname, lineno_t rnum)
{
filename = name;
linenum = num;
@@ -433,7 +458,7 @@ eats(const char *name, int num, const char *rname, int rnum)
}
static void
-eat(const char *name, int num)
+eat(char const * name, lineno_t num)
{
eats(name, num, NULL, -1);
}
@@ -446,10 +471,10 @@ verror(const char *string, va_list args)
* "*" -v on BSD systems.
*/
if (filename)
- fprintf(stderr, _("\"%s\", line %d: "), filename, linenum);
+ fprintf(stderr, _("\"%s\", line %" PRIdLINENO ": "), filename, linenum);
vfprintf(stderr, string, args);
if (rfilename != NULL)
- fprintf(stderr, _(" (rule from \"%s\", line %d)"),
+ fprintf(stderr, _(" (rule from \"%s\", line %" PRIdLINENO ")"),
rfilename, rlinenum);
fprintf(stderr, "\n");
}
@@ -478,17 +503,17 @@ warning(const char *string,...)
}
static void
-close_file(FILE *stream, char const * name)
+close_file(FILE *stream, char const * dir, char const * name)
{
char const *e = (ferror(stream) ? _("I/O error")
: fclose(stream) != 0 ? strerror(errno) : NULL);
if (e)
{
- fprintf(stderr, "%s: ", progname);
- if (name)
- fprintf(stderr, "%s: ", name);
- fprintf(stderr, "%s\n", e);
+ fprintf(stderr, "%s: %s%s%s%s%s\n", progname,
+ dir ? dir : "", dir ? "/" : "",
+ name ? name : "", name ? ": " : "",
+ e);
exit(EXIT_FAILURE);
}
}
@@ -503,10 +528,34 @@ usage(FILE *stream, int status)
"Report bugs to %s.\n"),
progname, progname, PACKAGE_BUGREPORT);
if (status == EXIT_SUCCESS)
- close_file(stream, NULL);
+ close_file(stream, NULL, NULL);
exit(status);
}
+/* Change the working directory to DIR, possibly creating DIR and its
+ ancestors. After this is done, all files are accessed with names
+ relative to DIR. */
+static void
+change_directory(char const * dir)
+{
+ if (chdir(dir) != 0)
+ {
+ int chdir_errno = errno;
+
+ if (chdir_errno == ENOENT)
+ {
+ mkdirs(dir, false);
+ chdir_errno = chdir(dir) == 0 ? 0 : errno;
+ }
+ if (chdir_errno != 0)
+ {
+ fprintf(stderr, _("%s: Can't chdir to %s: %s\n"),
+ progname, dir, strerror(chdir_errno));
+ exit(EXIT_FAILURE);
+ }
+ }
+}
+
static const char *psxrules;
static const char *lcltime;
static const char *directory;
@@ -516,9 +565,10 @@ static const char *yitcommand;
int
main(int argc, char *argv[])
{
- int i;
- int j;
- int c;
+ int c,
+ k;
+ ptrdiff_t i,
+ j;
#ifndef WIN32
umask(umask(S_IWGRP | S_IWOTH) | (S_IWGRP | S_IWOTH));
@@ -530,14 +580,14 @@ main(int argc, char *argv[])
_("wild compilation-time specification of zic_t"));
return EXIT_FAILURE;
}
- for (i = 1; i < argc; ++i)
- if (strcmp(argv[i], "--version") == 0)
+ for (k = 1; k < argc; k++)
+ if (strcmp(argv[k], "--version") == 0)
{
printf("zic %s\n", PG_VERSION);
- close_file(stdout, NULL);
+ close_file(stdout, NULL, NULL);
return EXIT_SUCCESS;
}
- else if (strcmp(argv[i], "--help") == 0)
+ else if (strcmp(argv[k], "--help") == 0)
{
usage(stdout, EXIT_SUCCESS);
}
@@ -625,11 +675,12 @@ main(int argc, char *argv[])
adjleap();
}
- for (i = optind; i < argc; ++i)
- infile(argv[i]);
+ for (k = optind; k < argc; k++)
+ infile(argv[k]);
if (errors)
return EXIT_FAILURE;
associate();
+ change_directory(directory);
for (i = 0; i < nzones; i = j)
{
/*
@@ -646,7 +697,7 @@ main(int argc, char *argv[])
for (i = 0; i < nlinks; ++i)
{
eat(links[i].l_filename, links[i].l_linenum);
- dolink(links[i].l_from, links[i].l_to);
+ dolink(links[i].l_from, links[i].l_to, false);
if (noise)
for (j = 0; j < nlinks; ++j)
if (strcmp(links[i].l_to,
@@ -656,12 +707,12 @@ main(int argc, char *argv[])
if (lcltime != NULL)
{
eat(_("command line"), 1);
- dolink(lcltime, TZDEFAULT);
+ dolink(lcltime, TZDEFAULT, true);
}
if (psxrules != NULL)
{
eat(_("command line"), 1);
- dolink(psxrules, TZDEFRULES);
+ dolink(psxrules, TZDEFRULES, true);
}
if (warnings && (ferror(stderr) || fclose(stderr) != 0))
return EXIT_FAILURE;
@@ -675,7 +726,7 @@ componentcheck(char const * name, char const * component,
enum
{
component_len_max = 14};
- size_t component_len = component_end - component;
+ ptrdiff_t component_len = component_end - component;
if (component_len == 0)
{
@@ -693,8 +744,10 @@ componentcheck(char const * name, char const * component,
if (0 < component_len && component_len <= 2
&& component[0] == '.' && component_end[-1] == '.')
{
+ int len = component_len;
+
error(_("file name '%s' contains '%.*s' component"),
- name, (int) component_len, component);
+ name, len, component);
return false;
}
if (noise)
@@ -751,131 +804,160 @@ namecheck(const char *name)
return componentcheck(name, component, cp);
}
+/*
+ * Create symlink contents suitable for symlinking FROM to TO, as a
+ * freshly allocated string. FROM should be a relative file name, and
+ * is relative to the global variable DIRECTORY. TO can be either
+ * relative or absolute.
+ */
+#ifdef HAVE_SYMLINK
static char *
-relname(char const * dir, char const * base)
+relname(char const * from, char const * to)
+{
+ size_t i,
+ taillen,
+ dotdotetcsize;
+ size_t dir_len = 0,
+ dotdots = 0,
+ linksize = SIZE_MAX;
+ char const *f = from;
+ char *result = NULL;
+
+ if (*to == '/')
+ {
+ /* Make F absolute too. */
+ size_t len = strlen(directory);
+ bool needslash = len && directory[len - 1] != '/';
+
+ linksize = len + needslash + strlen(from) + 1;
+ f = result = emalloc(linksize);
+ strcpy(result, directory);
+ result[len] = '/';
+ strcpy(result + len + needslash, from);
+ }
+ for (i = 0; f[i] && f[i] == to[i]; i++)
+ if (f[i] == '/')
+ dir_len = i + 1;
+ for (; to[i]; i++)
+ dotdots += to[i] == '/' && to[i - 1] != '/';
+ taillen = strlen(f + dir_len);
+ dotdotetcsize = 3 * dotdots + taillen + 1;
+ if (dotdotetcsize <= linksize)
+ {
+ if (!result)
+ result = emalloc(dotdotetcsize);
+ for (i = 0; i < dotdots; i++)
+ memcpy(result + 3 * i, "../", 3);
+ memmove(result + 3 * dotdots, f + dir_len, taillen + 1);
+ }
+ return result;
+}
+#endif /* HAVE_SYMLINK */
+
+/* Hard link FROM to TO, following any symbolic links.
+ Return 0 if successful, an error number otherwise. */
+static int
+hardlinkerr(char const * from, char const * to)
{
- if (*base == '/')
- return ecpyalloc(base);
- else
- {
- size_t dir_len = strlen(dir);
- bool needs_slash = dir_len && dir[dir_len - 1] != '/';
- char *result = emalloc(dir_len + needs_slash + strlen(base) + 1);
+ int r = linkat(AT_FDCWD, from, AT_FDCWD, to, AT_SYMLINK_FOLLOW);
- result[dir_len] = '/';
- strcpy(result + dir_len + needs_slash, base);
- return memcpy(result, dir, dir_len);
- }
+ return r == 0 ? 0 : errno;
}
static void
-dolink(char const * fromfield, char const * tofield)
+dolink(char const * fromfield, char const * tofield, bool staysymlink)
{
- char *fromname;
- char *toname;
- int fromisdir;
-
- fromname = relname(directory, fromfield);
- toname = relname(directory, tofield);
+ bool todirs_made = false;
+ int link_errno;
/*
* We get to be careful here since there's a fair chance of root running
* us.
*/
- fromisdir = itsdir(fromname);
- if (fromisdir)
+ if (itsdir(fromfield))
{
- char const *e = strerror(fromisdir < 0 ? errno : EPERM);
+ fprintf(stderr, _("%s: link from %s/%s failed: %s\n"),
+ progname, directory, fromfield, strerror(EPERM));
+ exit(EXIT_FAILURE);
+ }
+ if (staysymlink)
+ staysymlink = itssymlink(tofield);
+ if (remove(tofield) == 0)
+ todirs_made = true;
+ else if (errno != ENOENT)
+ {
+ char const *e = strerror(errno);
- fprintf(stderr, _("%s: link from %s failed: %s"),
- progname, fromname, e);
+ fprintf(stderr, _("%s: Can't remove %s/%s: %s\n"),
+ progname, directory, tofield, e);
exit(EXIT_FAILURE);
}
- if (link(fromname, toname) != 0)
+ link_errno = staysymlink ? ENOTSUP : hardlinkerr(fromfield, tofield);
+ if (link_errno == ENOENT && !todirs_made)
+ {
+ mkdirs(tofield, true);
+ todirs_made = true;
+ link_errno = hardlinkerr(fromfield, tofield);
+ }
+ if (link_errno != 0)
{
- int link_errno = errno;
- bool retry_if_link_supported = false;
+#ifdef HAVE_SYMLINK
+ bool absolute = *fromfield == '/';
+ char *linkalloc = absolute ? NULL : relname(fromfield, tofield);
+ char const *contents = absolute ? fromfield : linkalloc;
+ int symlink_errno = symlink(contents, tofield) == 0 ? 0 : errno;
- if (link_errno == ENOENT || link_errno == ENOTSUP)
+ if (symlink_errno == ENOENT && !todirs_made)
{
- if (!mkdirs(toname))
- exit(EXIT_FAILURE);
- retry_if_link_supported = true;
+ mkdirs(tofield, true);
+ symlink_errno = symlink(contents, tofield) == 0 ? 0 : errno;
}
- if ((link_errno == EEXIST || link_errno == ENOTSUP)
- && itsdir(toname) == 0
- && (remove(toname) == 0 || errno == ENOENT))
- retry_if_link_supported = true;
- if (retry_if_link_supported && link_errno != ENOTSUP)
- link_errno = link(fromname, toname) == 0 ? 0 : errno;
- if (link_errno != 0)
+ free(linkalloc);
+ if (symlink_errno == 0)
{
-#ifdef HAVE_SYMLINK
- const char *s = fromfield;
- const char *t;
- char *p;
- size_t dotdots = 0;
- char *symlinkcontents;
- int symlink_result;
-
- do
- t = s;
- while ((s = strchr(s, '/'))
- && strncmp(fromfield, tofield, ++s - fromfield) == 0);
-
- for (s = tofield + (t - fromfield); *s; s++)
- dotdots += *s == '/';
- symlinkcontents = emalloc(3 * dotdots + strlen(t) + 1);
- for (p = symlinkcontents; dotdots-- != 0; p += 3)
- memcpy(p, "../", 3);
- strcpy(p, t);
- symlink_result = symlink(symlinkcontents, toname);
- free(symlinkcontents);
- if (symlink_result == 0)
- {
- if (link_errno != ENOTSUP)
- warning(_("symbolic link used because hard link failed: %s"),
- strerror(link_errno));
- }
- else
+ if (link_errno != ENOTSUP)
+ warning(_("symbolic link used because hard link failed: %s"),
+ strerror(link_errno));
+ }
+ else
#endif /* HAVE_SYMLINK */
- {
- FILE *fp,
- *tp;
- int c;
+ {
+ FILE *fp,
+ *tp;
+ int c;
- fp = fopen(fromname, "rb");
- if (!fp)
- {
- const char *e = strerror(errno);
+ fp = fopen(fromfield, "rb");
+ if (!fp)
+ {
+ char const *e = strerror(errno);
- fprintf(stderr,
- _("%s: Can't read %s: %s\n"),
- progname, fromname, e);
- exit(EXIT_FAILURE);
- }
- tp = fopen(toname, "wb");
- if (!tp)
- {
- const char *e = strerror(errno);
+ fprintf(stderr, _("%s: Can't read %s/%s: %s\n"),
+ progname, directory, fromfield, e);
+ exit(EXIT_FAILURE);
+ }
+ tp = fopen(tofield, "wb");
+ if (!tp)
+ {
+ char const *e = strerror(errno);
- fprintf(stderr,
- _("%s: Can't create %s: %s\n"),
- progname, toname, e);
- exit(EXIT_FAILURE);
- }
- while ((c = getc(fp)) != EOF)
- putc(c, tp);
- close_file(fp, fromname);
- close_file(tp, toname);
- if (link_errno != ENOTSUP)
- warning(_("copy used because hard link failed: %s"),
- strerror(link_errno));
+ fprintf(stderr, _("%s: Can't create %s/%s: %s\n"),
+ progname, directory, tofield, e);
+ exit(EXIT_FAILURE);
}
+ while ((c = getc(fp)) != EOF)
+ putc(c, tp);
+ close_file(fp, directory, fromfield);
+ close_file(tp, directory, tofield);
+ if (link_errno != ENOTSUP)
+ warning(_("copy used because hard link failed: %s"),
+ strerror(link_errno));
+#ifdef HAVE_SYMLINK
+ else if (symlink_errno != ENOTSUP)
+ warning(_("copy used because symbolic link failed: %s"),
+ strerror(symlink_errno));
+#endif
}
}
- free(fromname);
- free(toname);
}
#define TIME_T_BITS_IN_FILE 64
@@ -888,10 +970,6 @@ static zic_t const max_time = MAXVAL(zic_t, TIME_T_BITS_IN_FILE);
* rounded downward to the negation of a power of two that is
* comfortably outside the error bounds.
*
- * zic does not output time stamps before this, partly because they
- * are physically suspect, and partly because GNOME mishandles them; see
- * GNOME bug 730332 <https://bugzilla.gnome.org/show_bug.cgi?id=730332>.
- *
* For the time of the Big Bang, see:
*
* Ade PAR, Aghanim N, Armitage-Caplan C et al. Planck 2013 results.
@@ -913,28 +991,58 @@ static zic_t const max_time = MAXVAL(zic_t, TIME_T_BITS_IN_FILE);
#define BIG_BANG (- (((zic_t) 1) << 59))
#endif
-static const zic_t big_bang_time = BIG_BANG;
+/* If true, work around GNOME bug 730332
+ <https://bugzilla.gnome.org/show_bug.cgi?id=730332>
+ by refusing to output time stamps before BIG_BANG.
+ Such time stamps are physically suspect anyway.
-/* Return 1 if NAME is a directory, 0 if it's something else, -1 if trouble. */
-static int
+ The GNOME bug is scheduled to be fixed in GNOME 3.22, and if so
+ this workaround will no longer be needed when GNOME 3.21 and
+ earlier are obsolete, say in the year 2021. */
+enum
+{
+WORK_AROUND_GNOME_BUG_730332 = true};
+
+static const zic_t early_time = (WORK_AROUND_GNOME_BUG_730332
+ ? BIG_BANG
+ : MINVAL(zic_t, TIME_T_BITS_IN_FILE));
+
+/* Return true if NAME is a directory. */
+static bool
itsdir(char const * name)
{
struct stat st;
int res = stat(name, &st);
-
#ifdef S_ISDIR
if (res == 0)
return S_ISDIR(st.st_mode) != 0;
#endif
if (res == 0 || errno == EOVERFLOW)
{
- char *nameslashdot = relname(name, ".");
- bool dir = stat(nameslashdot, &st) == 0 || errno == EOVERFLOW;
+ size_t n = strlen(name);
+ char *nameslashdot = emalloc(n + 3);
+ bool dir;
+ memcpy(nameslashdot, name, n);
+ strcpy(&nameslashdot[n], &"/."[!(n && name[n - 1] != '/')]);
+ dir = stat(nameslashdot, &st) == 0 || errno == EOVERFLOW;
free(nameslashdot);
return dir;
}
- return -1;
+ return false;
+}
+
+/* Return true if NAME is a symbolic link. */
+static bool
+itssymlink(char const * name)
+{
+#ifdef HAVE_SYMLINK
+ char c;
+
+ return 0 <= readlink(name, &c, 1);
+#else
+ return false;
+#endif
}
/*
@@ -957,10 +1065,10 @@ associate(void)
{
struct zone *zp;
struct rule *rp;
- int base,
+ ptrdiff_t i,
+ j,
+ base,
out;
- int i,
- j;
if (nrules != 0)
{
@@ -1047,7 +1155,7 @@ infile(const char *name)
const struct lookup *lp;
int nfields;
bool wantcont;
- int num;
+ lineno_t num;
char buf[BUFSIZ];
if (strcmp(name, "-") == 0)
@@ -1098,7 +1206,7 @@ infile(const char *name)
if (lp == NULL)
error(_("input line of unknown type"));
else
- switch ((int) (lp->l_value))
+ switch (lp->l_value)
{
case LC_RULE:
inrule(fields, nfields);
@@ -1129,7 +1237,7 @@ infile(const char *name)
}
free(fields);
}
- close_file(fp, filename);
+ close_file(fp, NULL, filename);
if (wantcont)
error(_("expected continuation line not found"));
}
@@ -1225,7 +1333,7 @@ inrule(char **fields, int nfields)
static bool
inzone(char **fields, int nfields)
{
- int i;
+ ptrdiff_t i;
if (nfields < ZONE_MINFIELDS || nfields > ZONE_MAXFIELDS)
{
@@ -1250,8 +1358,8 @@ inzone(char **fields, int nfields)
if (zones[i].z_name != NULL &&
strcmp(zones[i].z_name, fields[ZF_NAME]) == 0)
{
- error(
- _("duplicate zone name %s (file \"%s\", line %d)"),
+ error(_("duplicate zone name %s"
+ " (file \"%s\", line %" PRIdLINENO ")"),
fields[ZF_NAME],
zones[i].z_filename,
zones[i].z_linenum);
@@ -1313,7 +1421,7 @@ inzsub(char **fields, int nfields, bool iscont)
z.z_filename = filename;
z.z_linenum = linenum;
z.z_gmtoff = gethms(fields[i_gmtoff], _("invalid UT offset"), true);
- if ((cp = strchr(fields[i_format], '%')) != 0)
+ if ((cp = strchr(fields[i_format], '%')) != NULL)
{
if ((*++cp != 's' && *cp != 'z') || strchr(cp, '%')
|| strchr(fields[i_format], '/'))
@@ -1375,7 +1483,7 @@ inleap(char **fields, int nfields)
{
const char *cp;
const struct lookup *lp;
- int i,
+ zic_t i,
j;
/* PG: make year be int not zic_t to avoid sscanf portability issues */
@@ -1491,7 +1599,7 @@ inleap(char **fields, int nfields)
return;
}
t = tadd(t, tod);
- if (t < big_bang_time)
+ if (t < early_time)
{
error(_("leap second precedes Big Bang"));
return;
@@ -1582,7 +1690,7 @@ rulesub(struct rule * rp, const char *loyearp, const char *hiyearp,
lp = byword(cp, begin_years);
rp->r_lowasnum = lp == NULL;
if (!rp->r_lowasnum)
- switch ((int) lp->l_value)
+ switch (lp->l_value)
{
case YR_MINIMUM:
rp->r_loyear = ZIC_MIN;
@@ -1607,7 +1715,7 @@ rulesub(struct rule * rp, const char *loyearp, const char *hiyearp,
lp = byword(cp, end_years);
rp->r_hiwasnum = lp == NULL;
if (!rp->r_hiwasnum)
- switch ((int) lp->l_value)
+ switch (lp->l_value)
{
case YR_MINIMUM:
rp->r_hiyear = ZIC_MIN;
@@ -1757,18 +1865,21 @@ static void
writezone(const char *const name, const char *const string, char version)
{
FILE *fp;
- int i,
+ ptrdiff_t i,
j;
int leapcnt32,
leapi32;
- int timecnt32,
+ ptrdiff_t timecnt32,
timei32;
int pass;
- char *fullname;
static const struct tzhead tzh0;
static struct tzhead tzh;
- zic_t *ats = emalloc(size_product(timecnt, sizeof *ats + 1));
- void *typesptr = ats + timecnt;
+ bool dir_checked = false;
+ zic_t one = 1;
+ zic_t y2038_boundary = one << 31;
+ ptrdiff_t nats = timecnt + WORK_AROUND_QTBUG_53071;
+ zic_t *ats = emalloc(size_product(nats, sizeof *ats + 1));
+ void *typesptr = ats + nats;
unsigned char *types = typesptr;
/*
@@ -1781,12 +1892,12 @@ writezone(const char *const name, const char *const string, char version)
* Optimize.
*/
{
- int fromi;
- int toi;
+ ptrdiff_t fromi,
+ toi;
toi = 0;
fromi = 0;
- while (fromi < timecnt && attypes[fromi].at < big_bang_time)
+ while (fromi < timecnt && attypes[fromi].at < early_time)
++fromi;
for (; fromi < timecnt; ++fromi)
{
@@ -1799,15 +1910,24 @@ writezone(const char *const name, const char *const string, char version)
attypes[fromi].type;
continue;
}
- if (toi == 0 ||
- attypes[toi - 1].type != attypes[fromi].type)
+ if (toi == 0
+ || attypes[fromi].dontmerge
+ || attypes[toi - 1].type != attypes[fromi].type)
attypes[toi++] = attypes[fromi];
}
timecnt = toi;
}
+
if (noise && timecnt > 1200)
- warning(_("pre-2014 clients may mishandle"
- " more than 1200 transition times"));
+ {
+ if (timecnt > TZ_MAX_TIMES)
+ warning(_("reference clients mishandle"
+ " more than %d transition times"),
+ TZ_MAX_TIMES);
+ else
+ warning(_("pre-2014 clients may mishandle"
+ " more than 1200 transition times"));
+ }
/*
* Transfer.
@@ -1819,6 +1939,20 @@ writezone(const char *const name, const char *const string, char version)
}
/*
+ * Work around QTBUG-53071 for time stamps less than y2038_boundary - 1,
+ * by inserting a no-op transition at time y2038_boundary - 1. This works
+ * only for timestamps before the boundary, which should be good enough in
+ * practice as QTBUG-53071 should be long-dead by 2038.
+ */
+ if (WORK_AROUND_QTBUG_53071 && timecnt != 0
+ && ats[timecnt - 1] < y2038_boundary - 1 && strchr(string, '<'))
+ {
+ ats[timecnt] = y2038_boundary - 1;
+ types[timecnt] = types[timecnt - 1];
+ timecnt++;
+ }
+
+ /*
* Correct for leap seconds.
*/
for (i = 0; i < timecnt; ++i)
@@ -1862,51 +1996,59 @@ writezone(const char *const name, const char *const string, char version)
--leapcnt32;
++leapi32;
}
- fullname = relname(directory, name);
/*
* Remove old file, if any, to snap links.
*/
- if (itsdir(fullname) == 0 && remove(fullname) != 0 && errno != ENOENT)
+ if (remove(name) == 0)
+ dir_checked = true;
+ else if (errno != ENOENT)
{
const char *e = strerror(errno);
- fprintf(stderr, _("%s: Cannot remove %s: %s\n"),
- progname, fullname, e);
+ fprintf(stderr, _("%s: Cannot remove %s/%s: %s\n"),
+ progname, directory, name, e);
exit(EXIT_FAILURE);
}
- if ((fp = fopen(fullname, "wb")) == NULL)
+ fp = fopen(name, "wb");
+ if (!fp)
{
- if (!mkdirs(fullname))
- exit(EXIT_FAILURE);
- if ((fp = fopen(fullname, "wb")) == NULL)
- {
- const char *e = strerror(errno);
+ int fopen_errno = errno;
- fprintf(stderr, _("%s: Cannot create %s: %s\n"),
- progname, fullname, e);
+ if (fopen_errno == ENOENT && !dir_checked)
+ {
+ mkdirs(name, true);
+ fp = fopen(name, "wb");
+ fopen_errno = errno;
+ }
+ if (!fp)
+ {
+ fprintf(stderr, _("%s: Cannot create %s/%s: %s\n"),
+ progname, directory, name, strerror(fopen_errno));
exit(EXIT_FAILURE);
}
}
for (pass = 1; pass <= 2; ++pass)
{
- int thistimei,
- thistimecnt;
+ ptrdiff_t thistimei,
+ thistimecnt,
+ thistimelim;
int thisleapi,
- thisleapcnt;
- int thistimelim,
+ thisleapcnt,
thisleaplim;
int writetype[TZ_MAX_TYPES];
int typemap[TZ_MAX_TYPES];
int thistypecnt;
char thischars[TZ_MAX_CHARS];
- char thischarcnt;
+ int thischarcnt;
+ bool toomanytimes;
int indmap[TZ_MAX_CHARS];
if (pass == 1)
{
thistimei = timei32;
thistimecnt = timecnt32;
+ toomanytimes = thistimecnt >> 31 >> 1 != 0;
thisleapi = leapi32;
thisleapcnt = leapcnt32;
}
@@ -1914,9 +2056,12 @@ writezone(const char *const name, const char *const string, char version)
{
thistimei = 0;
thistimecnt = timecnt;
+ toomanytimes = thistimecnt >> 31 >> 31 >> 2 != 0;
thisleapi = 0;
thisleapcnt = leapcnt;
}
+ if (toomanytimes)
+ error(_("too many transition times"));
thistimelim = thistimei + thistimecnt;
thisleaplim = thisleapi + thisleapcnt;
for (i = 0; i < typecnt; ++i)
@@ -2017,8 +2162,7 @@ writezone(const char *const name, const char *const string, char version)
break;
if (j == thischarcnt)
{
- strcpy(&thischars[(int) thischarcnt],
- thisabbr);
+ strcpy(&thischars[thischarcnt], thisabbr);
thischarcnt += strlen(thisabbr) + 1;
}
indmap[abbrinds[i]] = j;
@@ -2130,9 +2274,8 @@ writezone(const char *const name, const char *const string, char version)
putc(ttisgmts[i], fp);
}
fprintf(fp, "\n%s\n", string);
- close_file(fp, fullname);
+ close_file(fp, directory, name);
free(ats);
- free(fullname);
}
static char const *
@@ -2366,13 +2509,13 @@ enum
YEAR_BY_YEAR_ZONE = 1};
static int
-stringzone(char *result, const struct zone * const zpfirst, const int zonecount)
+stringzone(char *result, struct zone const * zpfirst, ptrdiff_t zonecount)
{
const struct zone *zp;
struct rule *rp;
struct rule *stdrp;
struct rule *dstrp;
- int i;
+ ptrdiff_t i;
const char *abbrvar;
int compat = 0;
int c;
@@ -2501,11 +2644,11 @@ stringzone(char *result, const struct zone * const zpfirst, const int zonecount)
}
static void
-outzone(const struct zone * zpfirst, int zonecount)
+outzone(const struct zone * zpfirst, ptrdiff_t zonecount)
{
const struct zone *zp;
struct rule *rp;
- int i,
+ ptrdiff_t i,
j;
bool usestart,
useuntil;
@@ -2527,6 +2670,10 @@ outzone(const struct zone * zpfirst, int zonecount)
int compat;
bool do_extend;
char version;
+ ptrdiff_t lastatmax = -1;
+ zic_t one = 1;
+ zic_t y2038_boundary = one << 31;
+ zic_t max_year0;
max_abbr_len = 2 + max_format_len + max_abbrvar_len;
max_envvar_len = 2 * max_abbr_len + 5 * 9;
@@ -2636,12 +2783,13 @@ outzone(const struct zone * zpfirst, int zonecount)
}
/*
- * For the benefit of older systems, generate data from 1900 through 2037.
+ * For the benefit of older systems, generate data from 1900 through 2038.
*/
if (min_year > 1900)
min_year = 1900;
- if (max_year < 2037)
- max_year = 2037;
+ max_year0 = max_year;
+ if (max_year < 2038)
+ max_year = 2038;
for (i = 0; i < zonecount; ++i)
{
/*
@@ -2649,9 +2797,9 @@ outzone(const struct zone * zpfirst, int zonecount)
*/
stdoff = 0;
zp = &zpfirst[i];
- usestart = i > 0 && (zp - 1)->z_untiltime > big_bang_time;
+ usestart = i > 0 && (zp - 1)->z_untiltime > early_time;
useuntil = i < (zonecount - 1);
- if (useuntil && zp->z_untiltime <= big_bang_time)
+ if (useuntil && zp->z_untiltime <= early_time)
continue;
gmtoff = zp->z_gmtoff;
eat(zp->z_filename, zp->z_linenum);
@@ -2670,7 +2818,7 @@ outzone(const struct zone * zpfirst, int zonecount)
usestart = false;
}
else
- addtt(big_bang_time, type);
+ addtt(early_time, type);
}
else
for (year = min_year; year <= max_year; ++year)
@@ -2691,11 +2839,16 @@ outzone(const struct zone * zpfirst, int zonecount)
year <= rp->r_hiyear &&
yearistype(year, rp->r_yrtype);
if (rp->r_todo)
+ {
rp->r_temp = rpytime(rp, year);
+ rp->r_todo
+ = (rp->r_temp < y2038_boundary
+ || year <= max_year0);
+ }
}
for (;;)
{
- int k;
+ ptrdiff_t k;
zic_t jtime,
ktime = 0;
zic_t offset;
@@ -2792,6 +2945,10 @@ outzone(const struct zone * zpfirst, int zonecount)
offset = oadd(zp->z_gmtoff, rp->r_stdoff);
type = addtype(offset, ab, rp->r_stdoff != 0,
rp->r_todisstd, rp->r_todisgmt);
+ if (rp->r_hiyear == ZIC_MAX
+ && !(0 <= lastatmax
+ && ktime < attypes[lastatmax].at))
+ lastatmax = timecnt;
addtt(ktime, type);
}
}
@@ -2827,6 +2984,8 @@ outzone(const struct zone * zpfirst, int zonecount)
starttime = tadd(starttime, -gmtoff);
}
}
+ if (0 <= lastatmax)
+ attypes[lastatmax].dontmerge = true;
if (do_extend)
{
/*
@@ -2850,22 +3009,8 @@ outzone(const struct zone * zpfirst, int zonecount)
lastat = &attypes[i];
if (lastat->at < rpytime(&xr, max_year - 1))
{
- /*
- * Create new type code for the redundant entry, to prevent it
- * being optimized away.
- */
- if (typecnt >= TZ_MAX_TYPES)
- {
- error(_("too many local time types"));
- exit(EXIT_FAILURE);
- }
- gmtoffs[typecnt] = gmtoffs[lastat->type];
- isdsts[typecnt] = isdsts[lastat->type];
- ttisstds[typecnt] = ttisstds[lastat->type];
- ttisgmts[typecnt] = ttisgmts[lastat->type];
- abbrinds[typecnt] = abbrinds[lastat->type];
- ++typecnt;
addtt(rpytime(&xr, max_year + 1), typecnt - 1);
+ attypes[timecnt - 1].dontmerge = true;
}
}
writezone(zpfirst->z_name, envvar, version);
@@ -2877,8 +3022,8 @@ outzone(const struct zone * zpfirst, int zonecount)
static void
addtt(zic_t starttime, int type)
{
- if (starttime <= big_bang_time ||
- (timecnt == 1 && attypes[0].at < big_bang_time))
+ if (starttime <= early_time
+ || (timecnt == 1 && attypes[0].at < early_time))
{
gmtoffs[0] = gmtoffs[type];
isdsts[0] = isdsts[type];
@@ -2894,6 +3039,7 @@ addtt(zic_t starttime, int type)
}
attypes = growalloc(attypes, sizeof *attypes, timecnt, &timecnt_alloc);
attypes[timecnt].at = starttime;
+ attypes[timecnt].dontmerge = false;
attypes[timecnt].type = type;
++timecnt;
}
@@ -2997,30 +3143,52 @@ adjleap(void)
}
}
+static char *
+shellquote(char *b, char const * s)
+{
+ *b++ = '\'';
+ while (*s)
+ {
+ if (*s == '\'')
+ *b++ = '\'', *b++ = '\\', *b++ = '\'';
+ *b++ = *s++;
+ }
+ *b++ = '\'';
+ return b;
+}
+
static bool
-yearistype(int year, const char *type)
+yearistype(zic_t year, const char *type)
{
- static char *buf;
+ char *buf;
+ char *b;
int result;
if (type == NULL || *type == '\0')
return true;
- buf = erealloc(buf, 132 + strlen(yitcommand) + strlen(type));
- sprintf(buf, "%s %d %s", yitcommand, year, type);
+ buf = emalloc(1 + 4 * strlen(yitcommand) + 2
+ + INT_STRLEN_MAXIMUM(zic_t) +2 + 4 * strlen(type) + 2);
+ b = shellquote(buf, yitcommand);
+ *b++ = ' ';
+ b += sprintf(b, INT64_FORMAT, year);
+ *b++ = ' ';
+ b = shellquote(b, type);
+ *b = '\0';
result = system(buf);
if (WIFEXITED(result))
- switch (WEXITSTATUS(result))
+ {
+ int status = WEXITSTATUS(result);
+
+ if (status <= 1)
{
- case 0:
- return true;
- case 1:
- return false;
+ free(buf);
+ return status == 0;
}
+ }
error(_("Wild result from command execution"));
fprintf(stderr, _("%s: command was '%s', result was %d\n"),
progname, buf, result);
- for (;;)
- exit(EXIT_FAILURE);
+ exit(EXIT_FAILURE);
}
/* Is A a space character in the C locale? */
@@ -3254,7 +3422,7 @@ getfields(char *cp)
else
{
error(_("Odd number of quotation marks"));
- exit(1);
+ exit(EXIT_FAILURE);
}
} while (*cp && *cp != '#' && !is_space(*cp));
if (is_space(*cp))
@@ -3441,53 +3609,57 @@ newabbr(const char *string)
charcnt += i;
}
-static bool
-mkdirs(char *argname)
+/* Ensure that the directories of ARGNAME exist, by making any missing
+ ones. If ANCESTORS, do this only for ARGNAME's ancestors; otherwise,
+ do it for ARGNAME too. Exit with failure if there is trouble.
+ Do not consider an existing non-directory to be trouble. */
+static void
+mkdirs(char const * argname, bool ancestors)
{
char *name;
char *cp;
- if (argname == NULL || *argname == '\0')
- return true;
cp = name = ecpyalloc(argname);
- while ((cp = strchr(cp + 1, '/')) != NULL)
- {
- *cp = '\0';
+
+ /* Do not mkdir a root directory, as it must exist. */
#ifdef WIN32
+ if (is_alpha(name[0]) && name[1] == ':')
+ cp += 2;
+#endif
+ while (*cp == '/')
+ cp++;
- /*
- * DOS drive specifier?
- */
- if (is_alpha(name[0]) && name[1] == ':' && name[2] == '\0')
- {
- *cp = '/';
- continue;
- }
-#endif /* WIN32 */
+ while (cp && ((cp = strchr(cp, '/')) || !ancestors))
+ {
+ if (cp)
+ *cp = '\0';
/*
* Try to create it. It's OK if creation fails because the directory
* already exists, perhaps because some other process just created it.
+ * For simplicity do not check first whether it already exists, as
+ * that is checked anyway if the mkdir fails.
*/
if (mkdir(name, MKDIR_UMASK) != 0)
{
+ /*
+ * For speed, skip itsdir if errno == EEXIST. Since mkdirs is
+ * called only after open fails with ENOENT on a subfile, EEXIST
+ * implies itsdir here.
+ */
int err = errno;
- if (itsdir(name) <= 0)
+ if (err != EEXIST && !itsdir(name))
{
- char const *e = strerror(err);
-
- warning(_("%s: Can't create directory"
- " %s: %s"),
- progname, name, e);
- free(name);
- return false;
+ error(_("%s: Cannot create directory %s: %s"),
+ progname, name, strerror(err));
+ exit(EXIT_FAILURE);
}
}
- *cp = '/';
+ if (cp)
+ *cp++ = '/';
}
free(name);
- return true;
}