summaryrefslogtreecommitdiff
path: root/timezone
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-12-22 20:10:10 +0000
committerUlrich Drepper <drepper@redhat.com>2004-12-22 20:10:10 +0000
commita334319f6530564d22e775935d9c91663623a1b4 (patch)
treeb5877475619e4c938e98757d518bb1e9cbead751 /timezone
parent0ecb606cb6cf65de1d9fc8a919bceb4be476c602 (diff)
(CFLAGS-tst-align.c): Add -mpreferred-stack-boundary=4.
Diffstat (limited to 'timezone')
-rw-r--r--timezone/Makefile30
-rw-r--r--timezone/africa33
-rw-r--r--timezone/antarctica51
-rw-r--r--timezone/asia355
-rw-r--r--timezone/australasia155
-rw-r--r--timezone/backward34
-rw-r--r--timezone/checktab.awk4
-rw-r--r--timezone/etcetera7
-rw-r--r--timezone/europe213
-rw-r--r--timezone/factory2
-rw-r--r--timezone/iso3166.tab6
-rw-r--r--timezone/leapseconds65
-rw-r--r--timezone/northamerica560
-rw-r--r--timezone/pacificnew2
-rw-r--r--timezone/private.h123
-rw-r--r--timezone/scheck.c9
-rw-r--r--timezone/solar878
-rw-r--r--timezone/solar888
-rw-r--r--timezone/solar898
-rw-r--r--timezone/southamerica79
-rw-r--r--timezone/systemv36
-rw-r--r--timezone/tst-timezone.c6
-rw-r--r--timezone/tzfile.h62
-rw-r--r--timezone/tzselect.ksh4
-rwxr-xr-xtimezone/yearistype8
-rw-r--r--timezone/zdump.c460
-rw-r--r--timezone/zic.c988
-rw-r--r--timezone/zone.tab43
28 files changed, 1009 insertions, 2350 deletions
diff --git a/timezone/Makefile b/timezone/Makefile
index 9947d45b17..cf2c7d7f42 100644
--- a/timezone/Makefile
+++ b/timezone/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1998,1999,2000,2002,2005 Free Software Foundation, Inc.
+# Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or
@@ -190,24 +190,28 @@ $(objpfx)tst-timezone.out: $(addprefix $(testdata)/, \
test-tz-ENV = TZDIR=$(testdata)
tst-timezone-ENV = TZDIR=$(testdata)
-# Note this must come second in the deps list for $(built-program-cmd) to work.
-zic-deps = $(objpfx)zic $(leapseconds) yearistype
-
-$(testdata)/America/New_York: northamerica $(zic-deps)
+$(testdata)/America/New_York: northamerica $(objpfx)zic $(leapseconds) \
+ yearistype
+ $(build-testdata)
+$(testdata)/Etc/UTC: etcetera $(objpfx)zic $(leapseconds) yearistype
+ $(build-testdata)
+$(testdata)/UTC: simplebackw $(objpfx)zic $(testdata)/Etc/UTC \
+ $(leapseconds) yearistype
$(build-testdata)
-$(testdata)/Etc/UTC: etcetera $(zic-deps)
+$(testdata)/Europe/Berlin: europe $(objpfx)zic $(leapseconds) yearistype
$(build-testdata)
-# Use a pattern rule to indicate the command produces both targets at once.
-# Two separate targets built separately can collide if in parallel.
-%/UTC %/Universal: simplebackw $(zic-deps) %/Etc/UTC
+$(testdata)/Universal: simplebackw $(objpfx)zic $(testdata)/Etc/UTC \
+ $(leapseconds) yearistype
$(build-testdata)
-$(testdata)/%/Berlin $(testdata)/%/London: europe $(zic-deps)
+$(testdata)/Australia/Melbourne: australasia $(objpfx)zic $(leapseconds) \
+ yearistype
$(build-testdata)
-$(testdata)/Australia/Melbourne: australasia $(zic-deps)
+$(testdata)/America/Sao_Paulo: southamerica $(objpfx)zic $(leapseconds) \
+ yearistype
$(build-testdata)
-$(testdata)/America/Sao_Paulo: southamerica $(zic-deps)
+$(testdata)/Asia/Tokyo: asia $(objpfx)zic $(leapseconds) yearistype
$(build-testdata)
-$(testdata)/Asia/Tokyo: asia $(zic-deps)
+$(testdata)/Europe/London: europe $(objpfx)zic $(leapseconds) yearistype
$(build-testdata)
diff --git a/timezone/africa b/timezone/africa
index 29625df934..e8223f78f5 100644
--- a/timezone/africa
+++ b/timezone/africa
@@ -1,11 +1,10 @@
-# @(#)africa 8.1
-# <pre>
+# @(#)africa 7.36
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert (1999-03-22):
+# From Paul Eggert <eggert@twinsun.com> (1999-03-22):
#
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks, The International Atlas (5th edition),
@@ -29,7 +28,7 @@
#
# 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
+# but Mark R V Murray <markm@grondar.za> 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
@@ -288,7 +287,7 @@ Zone Africa/Maseru 1:50:00 - LMT 1903 Mar
2:00 - SAST
# Liberia
-# From Paul Eggert (2001-07-17):
+# From Paul Eggert <eggert@twinsun.com> (2001-07-17):
# 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.
@@ -318,7 +317,7 @@ Rule Libya 1985 only - Apr 6 0:00 1:00 S
Rule Libya 1986 only - Apr 4 0:00 1:00 S
Rule Libya 1986 only - Oct 3 0:00 0 -
Rule Libya 1987 1989 - Apr 1 0:00 1:00 S
-Rule Libya 1987 1989 - Oct 1 0:00 0 -
+Rule Libya 1987 1990 - Oct 1 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Tripoli 0:52:44 - LMT 1920
1:00 Libya CE%sT 1959
@@ -349,6 +348,9 @@ Zone Africa/Bamako -0:32:00 - LMT 1912
0:00 - GMT 1934 Feb 26
-1:00 - WAT 1960 Jun 20
0:00 - GMT
+# no longer different from Bamako, but too famous to omit
+Zone Africa/Timbuktu -0:12:04 - LMT 1912
+ 0:00 - GMT
# Mauritania
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -555,23 +557,6 @@ Zone Africa/Lome 0:04:52 - LMT 1893
0:00 - GMT
# Tunisia
-
-# From Gwillim Law (2005-04-30):
-#
-# My correspondent, Risto Nykanen, has alerted me to another adoption of DST,
-# this time in Tunisia. According to Yahoo France News
-# <http://fr.news.yahoo.com/050426/5/4dumk.html>, in a story attributed to AP
-# and dated 2005-04-26, "Tunisia has decided to advance its official time by
-# one hour, starting on Sunday, May 1. Henceforth, Tunisian time will be
-# UTC+2 instead of UTC+1. The change will take place at 23:00 UTC next
-# Saturday." (My translation)
-#
-# From Oscar van Vlijmen (2005-05-02):
-# LaPresse, the first national daily newspaper ...
-# <http://www.lapresse.tn/archives/archives280405/actualites/lheure.html>
-# ... DST for 2005: on: Sun May 1 0h standard time, off: Fri Sept. 30,
-# 1h standard time.
-
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Tunisia 1939 only - Apr 15 23:00s 1:00 S
Rule Tunisia 1939 only - Nov 18 23:00s 0 -
@@ -594,8 +579,6 @@ Rule Tunisia 1988 only - Jun 1 0:00s 1:00 S
Rule Tunisia 1988 1990 - Sep lastSun 0:00s 0 -
Rule Tunisia 1989 only - Mar 26 0:00s 1:00 S
Rule Tunisia 1990 only - May 1 0:00s 1:00 S
-Rule Tunisia 2005 only - May 1 0:00s 1:00 S
-Rule Tunisia 2005 only - Sep 30 1:00s 0 -
# Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21.
# Shanks says the 1911 switch occurred on Mar 9; go with Howse's Mar 11.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
diff --git a/timezone/antarctica b/timezone/antarctica
index 8a9ea939c9..b5c12cbaee 100644
--- a/timezone/antarctica
+++ b/timezone/antarctica
@@ -1,5 +1,4 @@
-# @(#)antarctica 8.1
-# <pre>
+# @(#)antarctica 7.23
# From Paul Eggert (1999-11-15):
# To keep things manageable, we list only locations occupied year-round; see
@@ -60,7 +59,7 @@ Rule ChileAQ 2000 max - Mar Sun>=9 0:00 0 -
# Australia - territories
# Heard Island, McDonald Islands (uninhabited)
# previously sealers and scientific personnel wintered
-# <a href="http://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html">
+# <a href="http://www.dstc.qut.edu.au/DST/marg/daylight.html">
# Margaret Turner reports
# </a> (1999-09-30) that they're UTC+5, with no DST;
# presumably this is when they have visitors.
@@ -91,23 +90,23 @@ Zone Antarctica/Mawson 0 - zzz 1954 Feb 13
# </a>
# Brazil - year-round base
-# Comandante Ferraz, King George Island, -6205+05824, since 1983/4
+# Ferraz, King George Island, since 1983/4
# Chile - year-round bases and towns
# Escudero, South Shetland Is, -621157-0585735, since 1994
-# Presidente Eduadro Frei, King George Island, -6214-05848, since 1969-03-07
-# General Bernardo O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
-# Capitan Arturo Prat, -6230-05941
-# Villa Las Estrellas (a town), around the Frei base, since 1984-04-09
+# Frei, King George Island, -6214-05848, since 1969-03-07
+# O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
+# Prat, -6230-05941
+# Villa Las Estrellas (a town), King George Island, since 1984-04-09
# These locations have always used Santiago time; use TZ='America/Santiago'.
# China - year-round bases
-# Great Wall, King George Island, -6213-05858, since 1985-02-20
-# Zhongshan, Larsemann Hills, Prydz Bay, -6922+07623, since 1989-02-26
+# Great Wall, King George Island, since 1985-02-20
+# Zhongshan, Larsemann Hills, Prydz Bay, since 1989-02-26
# France - year-round bases
#
-# From Antoine Leca (1997-01-20):
+# From Antoine Leca <Antoine.Leca@Renault.FR> (1997-01-20):
# Time data are from Nicole Pailleau at the IFRTP
# (French Institute for Polar Research and Technology).
# She confirms that French Southern Territories and Terre Adelie bases
@@ -140,22 +139,25 @@ Zone Antarctica/DumontDUrville 0 - zzz 1947
0 - zzz 1956 Nov
10:00 - DDUT # Dumont-d'Urville Time
# Reference:
-# <a href="http://en.wikipedia.org/wiki/Dumont_d'Urville_Station">
-# Dumont d'Urville Station (2005-12-05)
+# <a href="http://www.icair.iac.org.nz/science/reports/fr/IFRTP.html">
+# Support and Development of Polar Research and Technology (1997-02-03)
# </a>
+
# Germany - year-round base
-# Georg von Neumayer, -7039-00815
+# Georg von Neumayer
# India - year-round base
-# Dakshin Gangotri, -7005+01200
+# Dakshin Gangotri
# Japan - year-round bases
-# Dome Fuji, -7719+03942
-# Syowa, -690022+0393524
+# Dome Fuji
+# Syowa
#
# From Hideyuki Suzuki (1999-02-06):
-# In all Japanese stations, +0300 is used as the standard time.
+# In all Japanese stations, +0300 is used as the standard time. [See]
+# <a href="http://www.crl.go.jp/uk/uk201/basyo.htm">[reference in Japanese]</a>
+# and information from KAMO Hiroyasu <wd@ics.nara-wu.ac.jp>.
#
# Syowa station, which is the first antarctic station of Japan,
# was established on 1957-01-29. Since Syowa station is still the main
@@ -169,7 +171,7 @@ Zone Antarctica/Syowa 0 - zzz 1957 Jan 29
# </a>
# S Korea - year-round base
-# King Sejong, King George Island, -6213-05847, since 1988
+# King Sejong, King George Island, since 1988
# New Zealand - claims
# Balleny Islands (never inhabited)
@@ -200,8 +202,7 @@ Rule NZAQ 1990 max - Mar Sun>=15 2:00s 0 S
# Russia - year-round bases
# Bellingshausen, King George Island, -621159-0585337, since 1968-02-22
# Mirny, Davis coast, -6633+09301, since 1956-02
-# Molodezhnaya, Alasheyev Bay, -6740+04551,
-# year-round from 1962-02 to 1999-07-01
+# Molodezhnaya, Alasheyev Bay, year-round from 1962-02 to 1999-07-01
# Novolazarevskaya, Queen Maud Land, -7046+01150,
# year-round from 1960/61 to 1992
@@ -233,8 +234,8 @@ Zone Antarctica/Vostok 0 - zzz 1957 Dec 16
6:00 - VOST # Vostok time
# S Africa - year-round bases
-# Marion Island, -4653+03752
-# Sanae, -7141-00250
+# Marion Island
+# Sanae
# UK
#
@@ -269,7 +270,7 @@ Zone Antarctica/Rothera 0 - zzz 1976 Dec 1
#
# Palmer, Anvers Island, since 1965 (moved 2 miles in 1968)
#
-# From Ethan Dicks (1996-10-06):
+# From Ethan Dicks <erd@mcmsun5.mcmurdo.gov> (1996-10-06):
# It keeps the same time as Punta Arenas, Chile, because, just like us
# and the South Pole, that's the other end of their supply line....
# I verified with someone who was there that since 1980,
@@ -294,7 +295,7 @@ Zone Antarctica/McMurdo 0 - zzz 1956
# Normally it wouldn't have a separate entry, since it's like the
# larger Antarctica/McMurdo since 1970, but it's too famous to omit.
#
-# From Chris Carrier (1996-06-27):
+# From Chris Carrier <72157.3334@CompuServe.COM> (1996-06-27):
# Siple, the first commander of the South Pole station,
# stated that he would have liked to have kept GMT at the station,
# but that he found it more convenient to keep GMT+12
diff --git a/timezone/asia b/timezone/asia
index 446cc16e6f..3c2c1a1868 100644
--- a/timezone/asia
+++ b/timezone/asia
@@ -1,11 +1,10 @@
-# @(#)asia 8.1
-# <pre>
+# @(#)asia 7.77
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert (1999-03-22):
+# From Paul Eggert <eggert@twinsun.com> (1999-03-22):
#
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks, The International Atlas (5th edition),
@@ -44,8 +43,8 @@
# 8:00 CST China
# 9:00 CJT Central Japanese Time (1896/1937)*
# 9:00 EIT east Indonesia
-# 9:00 JST JDT Japan
-# 9:00 KST KDT Korea
+# 9:00 JST Japan
+# 9:00 KST Korea
# 9:30 CST (Australian) Central Standard Time
#
# See the `europe' file for Russia and Turkey in Asia.
@@ -86,7 +85,7 @@ Zone Asia/Kabul 4:36:48 - LMT 1890
# Shanks has Yerevan switching to 3:00 (with Russian DST) in spring 1991,
# then to 4:00 with no DST in fall 1995, then readopting Russian DST in 1997.
# Go with Shanks, even when he disagrees with others. Edgar Der-Danieliantz
-# reported (1996-05-04) that Yerevan probably wouldn't use DST
+# <edd@AIC.NET> reported (1996-05-04) that Yerevan probably wouldn't use DST
# in 1996, though it did use DST in 1995. IATA SSIM (1991/1998) reports that
# Armenia switched from 3:00 to 4:00 in 1998 and observed DST after 1991,
# but started switching at 3:00s in 1998.
@@ -100,18 +99,15 @@ Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
4:00 RussiaAsia AM%sT
# Azerbaijan
-# From Rustam Aliyev of the Azerbaijan Internet Forum (2005-10-23):
-# According to the resolution of Cabinet of Ministers, 1997
-# Resolution available at: http://aif.az/docs/daylight_res.pdf
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Azer 1997 max - Mar lastSun 4:00 1:00 S
-Rule Azer 1997 max - Oct lastSun 5:00 0 -
+Rule Azer 1997 max - Mar lastSun 1:00 1:00 S
+Rule Azer 1997 max - Oct lastSun 1: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 lastSat 23:00
+ 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
@@ -141,12 +137,8 @@ Zone Asia/Thimphu 5:58:36 - LMT 1947 Aug 15 # or Thimbu
# British Indian Ocean Territory
# Whitman and the 1995 CIA time zone map say 5:00, but the
# 1997 and later maps say 6:00. Assume the switch occurred in 1996.
-# We have no information as to when standard time was introduced;
-# assume it occurred in 1907, the same year as Mauritius (which
-# then contained the Chagos Archipelago).
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Chagos 4:49:40 - LMT 1907
- 5:00 - IOT 1996 # BIOT Time
+Zone Indian/Chagos 5:00 - IOT 1996 # BIOT Time
6:00 - IOT
# Brunei
@@ -194,7 +186,7 @@ Zone Asia/Phnom_Penh 6:59:40 - LMT 1906 Jun 9
# CHINA 8 H AHEAD OF UTC ALL OF CHINA, INCL TAIWAN
# CHINA 9 H AHEAD OF UTC APR 17 - SEP 10
-# From Paul Eggert (1995-12-19):
+# From Paul Eggert <eggert@twinsun.com> (1995-12-19):
# Shanks writes that China has had a single time zone since 1980 May 1,
# observing summer DST from 1986 through 1991; this contradicts Devine's
# note about Time magazine, though apparently _something_ happened in 1986.
@@ -205,6 +197,7 @@ Zone Asia/Phnom_Penh 6:59:40 - LMT 1906 Jun 9
Rule Shang 1940 only - Jun 3 0:00 1:00 D
Rule Shang 1940 1941 - Oct 1 0:00 0 S
Rule Shang 1941 only - Mar 16 0:00 1:00 D
+Rule PRC 1949 only - Jan 1 0:00 0 S
Rule PRC 1986 only - May 4 0:00 1:00 D
Rule PRC 1986 1991 - Sep Sun>=11 0:00 0 S
Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
@@ -332,19 +325,19 @@ Zone Asia/Nicosia 2:13:28 - LMT 1921 Nov 14
Link Asia/Nicosia Europe/Nicosia
# Georgia
-# From Paul Eggert (1994-11-19):
+# From Paul Eggert <eggert@twinsun.com> (1994-11-19):
# Today's _Economist_ (p 60) reports that Georgia moved its clocks forward
# an hour recently, due to a law proposed by Zurab Murvanidze,
# an MP who went on a hunger strike for 11 days to force discussion about it!
# We have no details, but we'll guess they didn't move the clocks back in fall.
#
-# From Mathew Englander, quoting AP (1996-10-23 13:05-04):
+# From Mathew Englander <mathew@io.org>, quoting AP (1996-10-23 13:05-04):
# Instead of putting back clocks at the end of October, Georgia
# will stay on daylight savings time this winter to save energy,
# President Eduard Shevardnadze decreed Wednesday.
#
# From the BBC via Joseph S. Myers (2004-06-27):
-#
+#
# Georgia moved closer to Western Europe on Sunday... The former Soviet
# republic has changed its time zone back to that of Moscow. As a result it
# is now just four hours ahead of Greenwich Mean Time, rather than five hours
@@ -352,17 +345,6 @@ Link Asia/Nicosia Europe/Nicosia
# Mikhail Saakashvili, who said the change was partly prompted by the process
# of integration into Europe.
-# From Teimuraz Abashidze (2005-11-07):
-# Government of Georgia ... decided to NOT CHANGE daylight savings time on
-# [Oct.] 30, as it was done before during last more than 10 years.
-# Currently, we are in fact GMT +4:00, as before 30 October it was GMT
-# +3:00.... The problem is, there is NO FORMAL LAW or governmental document
-# about it. As far as I can find, I was told, that there is no document,
-# because we just DIDN'T ISSUE document about switching to winter time....
-# I don't know what can be done, especially knowing that some years ago our
-# DST rules where changed THREE TIMES during one month.
-
-
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tbilisi 2:59:16 - LMT 1880
2:59:16 - TBMT 1924 May 2 # Tbilisi Mean Time
@@ -374,8 +356,7 @@ Zone Asia/Tbilisi 2:59:16 - LMT 1880
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 RussiaAsia GE%sT
# East Timor
@@ -402,11 +383,11 @@ Zone Asia/Tbilisi 2:59:16 - LMT 1880
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Dili 8:22:20 - LMT 1912
- 8:00 - TLT 1942 Feb 21 23:00 # E Timor Time
+ 8:00 - TPT 1942 Feb 21 23:00 # E Timor Time
9:00 - JST 1945 Aug
- 9:00 - TLT 1976 May 3
+ 9:00 - TPT 1976 May 3
8:00 - CIT 2000 Sep 17 00:00
- 9:00 - TLT
+ 9:00 - TPT
# India
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -491,33 +472,12 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
# 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
-# that the true solar year is the measure, and there is no arithmetic
-# leap year calculation involved. There has never been any serious
-# plan to change that law....
-#
-# From Paul Eggert (2005-04-05):
+
+# From Paul Eggert (2003-03-15)
# Go with Shanks before September 1991, and with Pournader thereafter.
-# I used Ed Reingold's cal-persia in GNU Emacs 21.2 to check Persian dates,
-# stopping after 2037 when 32-bit time_t's overflow.
-# That cal-persia used Birashk's approximation, which disagrees with the solar
-# calendar predictions for the year 2025, so I corrected those dates by hand.
-#
-# From Oscar van Vlijmen (2005-03-30), writing about future
-# discrepancies between cal-persia and the Iranian calendar:
-# For 2091 solar-longitude-after yields 2091-03-20 08:40:07.7 UT for
-# the vernal equinox and that gets so close to 12:00 some local
-# Iranian time that the definition of the correct location needs to be
-# known exactly, amongst other factors. 2157 is even closer:
-# 2157-03-20 08:37:15.5 UT. But the Gregorian year 2025 should give
-# no interpretation problem whatsoever. By the way, another instant
-# in the near future where there will be a discrepancy between
-# arithmetical and astronomical Iranian calendars will be in 2058:
-# vernal equinox on 2058-03-20 09:03:05.9 UT. The Java version of
-# Reingold's/Dershowitz' calculator gives correctly the Gregorian date
-# 2058-03-21 for 1 Farvardin 1437 (astronomical).
+# I used Ed Reingold's cal-persia in GNU Emacs 21.2 to check Persian dates.
+# The Persian calendar is based on the sun, and dates after around 2050
+# are approximate; stop after 2037 when 32-bit time_t's overflow.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Iran 1978 1980 - Mar 21 0:00 1:00 D
@@ -555,10 +515,10 @@ Rule Iran 2020 only - Mar 21 0:00 1:00 D
Rule Iran 2020 only - Sep 21 0:00 0 S
Rule Iran 2021 2023 - Mar 22 0:00 1:00 D
Rule Iran 2021 2023 - Sep 22 0:00 0 S
-Rule Iran 2024 only - Mar 21 0:00 1:00 D
-Rule Iran 2024 only - Sep 21 0:00 0 S
-Rule Iran 2025 2027 - Mar 22 0:00 1:00 D
-Rule Iran 2025 2027 - Sep 22 0:00 0 S
+Rule Iran 2024 2025 - Mar 21 0:00 1:00 D
+Rule Iran 2024 2025 - Sep 21 0:00 0 S
+Rule Iran 2026 2027 - Mar 22 0:00 1:00 D
+Rule Iran 2026 2027 - Sep 22 0:00 0 S
Rule Iran 2028 2029 - Mar 21 0:00 1:00 D
Rule Iran 2028 2029 - Sep 21 0:00 0 S
Rule Iran 2030 2031 - Mar 22 0:00 1:00 D
@@ -579,7 +539,7 @@ Zone Asia/Tehran 3:25:44 - LMT 1916
# Iraq
#
-# From Jonathan Lennox (2000-06-12):
+# From Jonathan Lennox <lennox@cs.columbia.edu> (2000-06-12):
# An article in this week's Economist ("Inside the Saddam-free zone", p. 50 in
# the U.S. edition) on the Iraqi Kurds contains a paragraph:
# "The three northern provinces ... switched their clocks this spring and
@@ -678,9 +638,8 @@ Rule Zion 1987 only - Sep 13 0:00 0 S
Rule Zion 1988 only - Apr 9 0:00 1:00 D
Rule Zion 1988 only - Sep 3 0:00 0 S
-# From Ephraim Silverberg
-# (1997-03-04, 1998-03-16, 1998-12-28, 2000-01-17, 2000-07-25, 2004-12-22,
-# and 2005-02-17):
+# From Ephraim Silverberg <ephraim@cs.huji.ac.il>
+# (1997-03-04, 1998-03-16, 1998-12-28, 2000-01-17 and 2000-07-25):
# According to the Office of the Secretary General of the Ministry of
# Interior, there is NO set rule for Daylight-Savings/Standard time changes.
@@ -731,13 +690,13 @@ Rule Zion 1995 only - Sep 3 0:00 0 S
# time, Haim Ramon. The official announcement regarding 1996-1998
# (with the dates for 1997-1998 no longer being relevant) can be viewed at:
#
-# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/1996-1998.ramon.ps.gz
+# ftp://ftp.huji.ac.il/pub/tz/announcements/1996-1998.ramon.ps.gz
#
# The dates for 1997-1998 were altered by his successor, Rabbi Eli Suissa.
#
# The official announcements for the years 1997-1999 can be viewed at:
#
-# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/YYYY.ps.gz
+# ftp://ftp.huji.ac.il/pub/tz/announcements/YYYY.ps.gz
#
# where YYYY is the relevant year.
@@ -757,12 +716,12 @@ Rule Zion 1999 only - Sep 3 2:00 0 S
#
# The official announcement for the start date of 2000 can be viewed at:
#
-# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2000-start.ps.gz
+# ftp://ftp.huji.ac.il/pub/tz/announcements/2000-start.ps.gz
#
# The official announcement for the end date of 2000 and the dates
# for the years 2001-2004 can be viewed at:
#
-# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2000-2004.ps.gz
+# ftp://ftp.huji.ac.il/pub/tz/announcements/2000-2004.ps.gz
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Zion 2000 only - Apr 14 2:00 1:00 D
@@ -776,80 +735,52 @@ Rule Zion 2003 only - Oct 3 1:00 0 S
Rule Zion 2004 only - Apr 7 1:00 1:00 D
Rule Zion 2004 only - Sep 22 1:00 0 S
-# The proposed law agreed upon by the Knesset Interior Committee on
-# 2005-02-14 is that, for 2005 and beyond, DST starts at 02:00 the
-# last Friday before April 2nd (i.e. the last Friday in March or April
-# 1st itself if it falls on a Friday) and ends at 02:00 on the Saturday
-# night _before_ the fast of Yom Kippur.
-#
-# Those who can read Hebrew can view the announcement at:
-#
-# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2005+beyond.ps
-
-# From Paul Eggert (2005-02-22):
-# I used Ephraim Silverberg's dst-israel.el program
-# <ftp://ftp.cs.huji.ac.il/pub/tz/software/dst-israel.el> (2005-02-20)
-# along with Ed Reingold's cal-hebrew in GNU Emacs 21.4,
-# to generate the transitions in this list.
-# (I replaced "lastFri" with "Fri>=26" by hand.)
-# The spring transitions below all correspond to the following Rule:
-#
-# Rule Zion 2005 max - Mar Fri>=26 2:00 1:00 D
-#
-# but older zic implementations (e.g., Solaris 8) do not support
-# "Fri>=26" to mean April 1 in years like 2005, so for now we list the
-# springtime transitions explicitly.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Zion 2005 only - Apr 1 2:00 1:00 D
-Rule Zion 2005 only - Oct 9 2:00 0 S
-Rule Zion 2006 2010 - Mar Fri>=26 2:00 1:00 D
-Rule Zion 2006 only - Oct 1 2:00 0 S
-Rule Zion 2007 only - Sep 16 2:00 0 S
-Rule Zion 2008 only - Oct 5 2:00 0 S
-Rule Zion 2009 only - Sep 27 2:00 0 S
-Rule Zion 2010 only - Sep 12 2:00 0 S
-Rule Zion 2011 only - Apr 1 2:00 1:00 D
-Rule Zion 2011 only - Oct 2 2:00 0 S
-Rule Zion 2012 2015 - Mar Fri>=26 2:00 1:00 D
-Rule Zion 2012 only - Sep 23 2:00 0 S
-Rule Zion 2013 only - Sep 8 2:00 0 S
-Rule Zion 2014 only - Sep 28 2:00 0 S
-Rule Zion 2015 only - Sep 20 2:00 0 S
-Rule Zion 2016 only - Apr 1 2:00 1:00 D
-Rule Zion 2016 only - Oct 9 2:00 0 S
-Rule Zion 2017 2021 - Mar Fri>=26 2:00 1:00 D
-Rule Zion 2017 only - Sep 24 2:00 0 S
-Rule Zion 2018 only - Sep 16 2:00 0 S
-Rule Zion 2019 only - Oct 6 2:00 0 S
-Rule Zion 2020 only - Sep 27 2:00 0 S
-Rule Zion 2021 only - Sep 12 2:00 0 S
-Rule Zion 2022 only - Apr 1 2:00 1:00 D
-Rule Zion 2022 only - Oct 2 2:00 0 S
-Rule Zion 2023 2032 - Mar Fri>=26 2:00 1:00 D
-Rule Zion 2023 only - Sep 24 2:00 0 S
-Rule Zion 2024 only - Oct 6 2:00 0 S
-Rule Zion 2025 only - Sep 28 2:00 0 S
-Rule Zion 2026 only - Sep 20 2:00 0 S
-Rule Zion 2027 only - Oct 10 2:00 0 S
-Rule Zion 2028 only - Sep 24 2:00 0 S
-Rule Zion 2029 only - Sep 16 2:00 0 S
-Rule Zion 2030 only - Oct 6 2:00 0 S
-Rule Zion 2031 only - Sep 21 2:00 0 S
-Rule Zion 2032 only - Sep 12 2:00 0 S
-Rule Zion 2033 only - Apr 1 2:00 1:00 D
-Rule Zion 2033 only - Oct 2 2:00 0 S
-Rule Zion 2034 2037 - Mar Fri>=26 2:00 1:00 D
-Rule Zion 2034 only - Sep 17 2:00 0 S
-Rule Zion 2035 only - Oct 7 2:00 0 S
-Rule Zion 2036 only - Sep 28 2:00 0 S
-Rule Zion 2037 only - Sep 13 2:00 0 S
+# From Paul Eggert (2000-07-25):
+# Here are guesses for rules after 2004.
+# They are probably wrong, but they are more likely than no DST at all.
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Zion 2005 max - Apr 1 1:00 1:00 D
+Rule Zion 2005 max - Oct 1 1:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Jerusalem 2:20:56 - LMT 1880
2:20:40 - JMT 1918 # Jerusalem Mean Time?
2:00 Zion I%sT
+# From Ephraim Silverberg (2003-03-23):
+#
+# Minister of Interior Poraz has announced that he will respect the law
+# passed in July 2000 (proposed at the time jointly by himself and
+# then-MK David Azulai [Shas]) fixing the dates for 2000-2004. Hence,
+# the dates for 2003 and 2004 remain unchanged....
+#
+# As far as 2005 and beyond, no dates have been set. However, the
+# minister has mentioned that he wishes to propose to move Israel's
+# timezone in 2005 from GMT+2 to GMT+3 and upon that have DST during
+# the summer months (i.e. GMT+4). However, no legislation in this
+# direction is expected until the latter part of 2004 which is a long
+# time off in terms of Israeli politics.
+
+# (2004-09-20):
+# The latest rumour, however, is that in 2005, when the clock changes to
+# Daylight Saving Time (date as yet unknown), the move will be a two-hour leap
+# forward (from UTC+0200 to UTC+0400) and then, in the fall, the clock will
+# move back only an hour to UTC+0300 thus effectively moving Israel's timezone
+# from UTC+0200 to UTC+0300. However, no actual draft has been put before the
+# Knesset (Israel's Parliament) though the intention is to do so this
+# month [2004-09].
+
+# (2004-09-26):
+# Even though the draft law for the above did pass the Ministerial Committee
+# for Legislative Matters three months ago, it was voted down in today's
+# Cabinet meeting. The current suggestion is to keep the current timezone at
+# UTC+0200 but have an extended period of Daylight Saving Time (UTC+0300) from
+# the beginning of Passover holiday in the spring to after the Tabernacle
+# holiday in the fall (i.e. the dates of which are governed by the Hebrew
+# calendar but this means at least 184 days of DST). However, this is only a
+# suggestion that was raised in today's cabinet meeting and has not yet been
+# drafted.
+
###############################################################################
@@ -858,32 +789,18 @@ Zone Asia/Jerusalem 2:20:56 - LMT 1880
# `9:00' and `JST' is from Guy Harris.
-# From Paul Eggert (1995-03-06):
+# From Paul Eggert <eggert@twinsun.com> (1995-03-06):
# Today's _Asahi Evening News_ (page 4) reports that Japan had
# daylight saving between 1948 and 1951, but ``the system was discontinued
# because the public believed it would lead to longer working hours.''
-
-# From Mayumi Negishi in the 2005-08-10 Japan Times
-# <http://www.japantimes.co.jp/cgi-bin/getarticle.pl5?nn20050810f2.htm>:
-# Occupation authorities imposed daylight-saving time on Japan on
-# [1948-05-01].... But lack of prior debate and the execution of
-# daylight-saving time just three days after the bill was passed generated
-# deep hatred of the concept.... The Diet unceremoniously passed a bill to
-# dump the unpopular system in October 1951, less than a month after the San
-# Francisco Peace Treaty was signed. (A government poll in 1951 showed 53%
-# of the Japanese wanted to scrap daylight-saving time, as opposed to 30% who
-# wanted to keep it.)
-
# Shanks writes that daylight saving in Japan during those years was as follows:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Japan 1948 only - May Sun>=1 2:00 1:00 D
-Rule Japan 1948 1951 - Sep Sat>=8 2:00 0 S
-Rule Japan 1949 only - Apr Sun>=1 2:00 1:00 D
-Rule Japan 1950 1951 - May Sun>=1 2:00 1:00 D
-# but the only locations using it (for birth certificates, presumably, since
-# Shanks's audience is astrologers) were US military bases. For now, assume
-# that for most purposes daylight-saving time was observed; otherwise, what
-# would have been the point of the 1951 poll?
+#Rule Japan 1948 only - May Sun>=1 2:00 1:00 D
+#Rule Japan 1948 1951 - Sep Sat>=8 2:00 0 S
+#Rule Japan 1949 only - Apr Sun>=1 2:00 1:00 D
+#Rule Japan 1950 1951 - May Sun>=1 2:00 1:00 D
+# but the only locations using it were US military bases.
+# We go with Shanks and omit daylight saving in those years for Asia/Tokyo.
# From Hideyuki Suzuki (1998-11-09):
# 'Tokyo' usually stands for the former location of Tokyo Astronomical
@@ -913,7 +830,7 @@ Rule Japan 1950 1951 - May Sun>=1 2:00 1:00 D
Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
9:00 - JST 1896
9:00 - CJT 1938
- 9:00 Japan J%sT
+ 9:00 - JST
# Since 1938, all Japanese possessions have been like Asia/Tokyo.
# Jordan
@@ -931,13 +848,6 @@ Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
# The decision was taken because of the increase in working hours in
# government's departments from six to seven hours.
#
-# From Paul Eggert (2005-11-22):
-# Starting 2003 transitions are from Steffen Thorsen's web site timeanddate.com.
-#
-# From Steffen Thorsen (2005-11-23):
-# For Jordan I have received multiple independent user reports every year
-# about DST end dates, as the end-rule is different every year.
-#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Jordan 1973 only - Jun 6 0:00 1:00 S
Rule Jordan 1973 1975 - Oct 1 0:00 0 -
@@ -960,25 +870,20 @@ Rule Jordan 1993 1998 - Apr Fri>=1 0:00 1:00 S
Rule Jordan 1994 only - Sep Fri>=15 0:00 0 -
Rule Jordan 1995 1998 - Sep Fri>=15 0:00s 0 -
Rule Jordan 1999 only - Jul 1 0:00s 1:00 S
-Rule Jordan 1999 2002 - Sep lastThu 0:00s 0 -
+Rule Jordan 1999 max - Sep lastThu 0:00s 0 -
Rule Jordan 2000 max - Mar lastThu 0:00s 1:00 S
-Rule Jordan 2003 only - Oct 24 0:00s 0 -
-Rule Jordan 2004 only - Oct 15 0:00s 0 -
-Rule Jordan 2005 max - Sep lastFri 0:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Amman 2:23:44 - LMT 1931
2:00 Jordan EE%sT
-
# Kazakhstan
-
# From Paul Eggert (1996-11-22):
-# Andrew Evtichov (1996-04-13) writes that Kazakhstan
+# Andrew Evtichov <evti@chevron.com> (1996-04-13) writes that Kazakhstan
# stayed in sync with Moscow after 1990, and that Aqtobe (formerly Aktyubinsk)
# and Aqtau (formerly Shevchenko) are the largest cities in their zones.
# Guess that Aqtau and Aqtobe diverged in 1995, since that's the first time
# IATA SSIM mentions a third time zone in Kazakhstan.
-
+#
# From Paul Eggert (2001-10-18):
# German Iofis, ELSI, Almaty (2001-10-09) reports that Kazakhstan uses
# RussiaAsia rules, instead of switching at 00:00 as the IATA has it.
@@ -988,24 +893,7 @@ Zone Asia/Amman 2:23:44 - LMT 1931
# - Kazakhstan did not observe DST in 1991.
# - Qyzylorda switched from +5:00 to +6:00 on 1992-01-19 02:00.
# - Oral switched from +5:00 to +4:00 in spring 1989.
-
-# <a href="http://www.kazsociety.org.uk/news/2005/03/30.htm">
-# From Kazakhstan Embassy's News Bulletin #11 (2005-03-21):
-# </a>
-# The Government of Kazakhstan passed a resolution March 15 abolishing
-# daylight saving time citing lack of economic benefits and health
-# complications coupled with a decrease in productivity.
#
-# From Branislav Kojic (in Astana) via Gwillim Law (2005-06-28):
-# ... what happened was that the former Kazakhstan Eastern time zone
-# was "blended" with the Central zone. Therefore, Kazakhstan now has
-# two time zones, and difference between them is one hour. The zone
-# closer to UTC is the former Western zone (probably still called the
-# same), encompassing four provinces in the west: Aqtobe, Atyrau,
-# Mangghystau, 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.
-
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
#
@@ -1014,8 +902,7 @@ Zone Asia/Almaty 5:07:48 - LMT 1924 May 2 # or Alma-Ata
5:00 - ALMT 1930 Jun 21 # Alma-Ata Time
6:00 RussiaAsia ALM%sT 1991
6:00 - ALMT 1992
- 6:00 RussiaAsia ALM%sT 2005 Mar 15
- 6:00 - ALMT
+ 6:00 RussiaAsia ALM%sT
# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.)
Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2
4:00 - KIZT 1930 Jun 21 # Kizilorda Time
@@ -1025,8 +912,7 @@ Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2
5:00 RussiaAsia KIZ%sT 1991
5:00 - KIZT 1991 Dec 16 # independence
5:00 - QYZT 1992 Jan 19 2:00
- 6:00 RussiaAsia QYZ%sT 2005 Mar 15
- 6:00 - QYZT
+ 6:00 RussiaAsia QYZ%sT
# Aqtobe (aka Aktobe, formerly Akt'ubinsk)
Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2
4:00 - AKTT 1930 Jun 21 # Aktyubinsk Time
@@ -1035,8 +921,7 @@ Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2
6:00 - AKTT 1982 Apr 1
5:00 RussiaAsia AKT%sT 1991
5:00 - AKTT 1991 Dec 16 # independence
- 5:00 RussiaAsia AQT%sT 2005 Mar 15 # Aqtobe Time
- 5:00 - AQTT
+ 5:00 RussiaAsia AQT%sT # Aqtobe Time
# Mangghystau
# Aqtau was not founded until 1963, but it represents an inhabited region,
# so include time stamps before 1963.
@@ -1048,8 +933,7 @@ Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2
5:00 RussiaAsia SHE%sT 1991
5:00 - SHET 1991 Dec 16 # independence
5:00 RussiaAsia AQT%sT 1995 Mar lastSun 2:00 # Aqtau Time
- 4:00 RussiaAsia AQT%sT 2005 Mar 15
- 5:00 - AQTT
+ 4:00 RussiaAsia AQT%sT
# West Kazakhstan
Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk
4:00 - URAT 1930 Jun 21 # Ural'sk time
@@ -1059,33 +943,21 @@ Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk
5:00 RussiaAsia URA%sT 1989 Mar 26 2:00
4:00 RussiaAsia URA%sT 1991
4:00 - URAT 1991 Dec 16 # independence
- 4:00 RussiaAsia ORA%sT 2005 Mar 15 # Oral Time
- 5:00 - ORAT
+ 4:00 RussiaAsia ORA%sT # Oral Time
# Kyrgyzstan (Kirgizstan)
# Transitions through 1991 are from Shanks.
-
-# From Paul Eggert (2005-08-15):
-# According to an article dated today in the Kyrgyzstan Development Gateway
-# <http://eng.gateway.kg/cgi-bin/page.pl?id=1&story_name=doc9979.shtml>
-# Kyrgyzstan is canceling the daylight saving time system. I take the article
-# to mean that they will leave their clocks at 6 hours ahead of UTC.
-# From Malik Abdugaliev (2005-09-21):
-# Our government cancels daylight saving time 6th of August 2005.
-# From 2005-08-12 our GMT-offset is +6, w/o any daylight saving.
-
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Kyrgyz 1992 1996 - Apr Sun>=7 0:00s 1:00 S
-Rule Kyrgyz 1992 1996 - Sep lastSun 0:00 0 -
-Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 S
-Rule Kyrgyz 1997 2004 - Oct lastSun 2:30 0 -
+Rule Kirgiz 1992 1996 - Apr Sun>=7 0:00s 1:00 S
+Rule Kirgiz 1992 1996 - Sep lastSun 0:00 0 -
+Rule Kirgiz 1997 max - Mar lastSun 2:30 1:00 S
+Rule Kirgiz 1997 max - 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 Kirgiz KG%sT # Kirgizstan Time
###############################################################################
@@ -1244,7 +1116,7 @@ Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
#
# [The province of Selenge is omitted from the above lists.]
-# From Ganbold Ts., Ulaanbaatar (2004-04-17):
+# From Ganbold Ts., Ulaanbaatar <ganbold@micom.mng.net> (2004-04-17):
# Daylight saving occurs at 02:00 local time last Saturday of March.
# It will change back to normal at 02:00 local time last Saturday of
# September.... As I remember this rule was changed in 2001.
@@ -1253,24 +1125,6 @@ Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
# For now, assume Rives McDow's informant got confused about Friday vs
# Saturday, and that his 2001 dates should have 1 added to them.
-# From Paul Eggert (2005-07-26):
-# We have wildly conflicting information about Mongolia's time zones.
-# Bill Bonnet (2005-05-19) reports that the US Embassy in Ulaanbaatar says
-# there is only one time zone and that DST is observed, citing Microsoft
-# Windows XP as the source. Risto Nykanen (2005-05-16) reports that
-# travelmongolia.org says there are two time zones (UTC+7, UTC+8) with no DST.
-# Oscar van Vlijmen (2005-05-20) reports that the Mongolian Embassy in
-# Washington, DC says there are two time zones, with DST observed.
-# He also found
-# <http://ubpost.mongolnews.mn/index.php?subaction=showcomments&id=1111634894&archive=&start_from=&ucat=1&>
-# which also says that there is DST, and which has a comment by "Toddius"
-# (2005-03-31 06:05 +0700) saying "Mongolia actually has 3.5 time zones.
-# The West (OLGII) is +7 GMT, most of the country is ULAT is +8 GMT
-# and some Eastern provinces are +9 GMT but Sukhbaatar Aimag is SUHK +8.5 GMT.
-# The SUKH timezone is new this year, it is one of the few things the
-# parliament passed during the tumultuous winter session."
-# For now, let's ignore this information, until we have more confirmation.
-
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Mongol 1983 1984 - Apr 1 0:00 1:00 S
Rule Mongol 1983 only - Oct 1 0:00 0 -
@@ -1362,7 +1216,7 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# Palestine
-# From Amos Shapir (1998-02-15):
+# From Amos Shapir <amos@nsof.co.il> (1998-02-15):
#
# From 1917 until 1948-05-15, all of Palestine, including the parts now
# known as the Gaza Strip and the West Bank, was under British rule.
@@ -1434,15 +1288,6 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# For now, let's assume that the spring switch was at 24:00,
# and that they switch at 0:00 on the 3rd Fridays of April and October.
-# From Paul Eggert (2005-11-22):
-# Starting 2004 transitions are from Steffen Thorsen's web site timeanddate.com.
-
-# From Steffen Thorsen (2005-11-23):
-# A user from Gaza reported that Gaza made the change early because of
-# the Ramadan. Next year Ramadan will be even earlier, so I think
-# there is a good chance next year's end date will be around two weeks
-# earlier--the same goes for Jordan.
-
# The rules for Egypt are stolen from the `africa' file.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule EgyptAsia 1957 only - May 10 0:00 1:00 S
@@ -1453,9 +1298,7 @@ Rule EgyptAsia 1959 1965 - Sep 30 3:00 0 -
Rule EgyptAsia 1966 only - Oct 1 3:00 0 -
Rule Palestine 1999 max - Apr Fri>=15 0:00 1:00 S
-Rule Palestine 1999 2003 - Oct Fri>=15 0:00 0 -
-Rule Palestine 2004 only - Oct 1 1:00 0 -
-Rule Palestine 2005 max - Oct 4 2:00 0 -
+Rule Palestine 1999 max - Oct Fri>=15 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
@@ -1635,7 +1478,7 @@ Zone Asia/Tashkent 4:37:12 - LMT 1924 May 2
5:00 - UZT
# Vietnam
-# From Paul Eggert (1993-11-18):
+# From Paul Eggert <eggert@twinsun.com> (1993-11-18):
# Saigon's official name is Thanh-Pho Ho Chi Minh, but it's too long.
# We'll stick with the traditional name for now.
# From Shanks:
diff --git a/timezone/australasia b/timezone/australasia
index 70b845560e..d8a8e36d53 100644
--- a/timezone/australasia
+++ b/timezone/australasia
@@ -1,6 +1,4 @@
-# @(#)australasia 8.1
-# <pre>
-
+# @(#)australasia 7.69
# This file also includes Pacific islands.
# Notes are at the end of this file
@@ -40,7 +38,7 @@ Zone Australia/Perth 7:43:24 - LMT 1895 Dec
8:00 - WST
# Queensland
#
-# From Alex Livingston (1996-11-01):
+# From Alex Livingston <alex@agsm.unsw.edu.au> (1996-11-01):
# I have heard or read more than once that some resort islands off the coast
# of Queensland chose to keep observing daylight-saving time even after
# Queensland ceased to.
@@ -79,9 +77,7 @@ Rule AS 1991 only - Mar Sun>=1 2:00s 0 -
Rule AS 1992 only - Mar Sun>=18 2:00s 0 -
Rule AS 1993 only - Mar Sun>=1 2:00s 0 -
Rule AS 1994 only - Mar Sun>=18 2:00s 0 -
-Rule AS 1995 2005 - Mar lastSun 2:00s 0 -
-Rule AS 2006 only - Apr Sun>=1 2:00s 0 -
-Rule AS 2007 max - Mar lastSun 2:00s 0 -
+Rule AS 1995 max - Mar lastSun 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Australia/Adelaide 9:14:20 - LMT 1895 Feb
9:00 - CST 1899 May
@@ -89,11 +85,6 @@ Zone Australia/Adelaide 9:14:20 - LMT 1895 Feb
9:30 AS CST
# Tasmania
-#
-# From Paul Eggert (2005-08-16):
-# <http://www.bom.gov.au/climate/averages/tables/dst_times.shtml>
-# says King Island didn't observe DST from WWII until late 1971.
-#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule AT 1967 only - Oct Sun>=1 2:00s 1:00 -
Rule AT 1968 only - Mar lastSun 2:00s 0 -
@@ -108,22 +99,15 @@ Rule AT 1987 1990 - Mar Sun>=15 2:00s 0 -
Rule AT 1987 only - Oct Sun>=22 2:00s 1:00 -
Rule AT 1988 1990 - Oct lastSun 2:00s 1:00 -
Rule AT 1991 1999 - Oct Sun>=1 2:00s 1:00 -
-Rule AT 1991 2005 - Mar lastSun 2:00s 0 -
+Rule AT 1991 max - Mar lastSun 2:00s 0 -
Rule AT 2000 only - Aug lastSun 2:00s 1:00 -
Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 -
-Rule AT 2006 only - Apr Sun>=1 2:00s 0 -
-Rule AT 2007 max - Mar lastSun 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Australia/Hobart 9:49:16 - LMT 1895 Sep
10:00 - EST 1916 Oct 1 2:00
10:00 1:00 EST 1917 Feb
10:00 Aus EST 1967
10:00 AT EST
-Zone Australia/Currie 9:35:28 - LMT 1895 Sep
- 10:00 - EST 1916 Oct 1 2:00
- 10:00 1:00 EST 1917 Feb
- 10:00 Aus EST 1971 Jul
- 10:00 AT EST
# Victoria
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -134,11 +118,9 @@ Rule AV 1986 1990 - Mar Sun>=15 2:00s 0 -
Rule AV 1986 1987 - Oct Sun>=15 2:00s 1:00 -
Rule AV 1988 1999 - Oct lastSun 2:00s 1:00 -
Rule AV 1991 1994 - Mar Sun>=1 2:00s 0 -
-Rule AV 1995 2005 - Mar lastSun 2:00s 0 -
+Rule AV 1995 max - Mar lastSun 2:00s 0 -
Rule AV 2000 only - Aug lastSun 2:00s 1:00 -
Rule AV 2001 max - Oct lastSun 2:00s 1:00 -
-Rule AV 2006 only - Apr Sun>=1 2:00s 0 -
-Rule AV 2007 max - Mar lastSun 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Australia/Melbourne 9:39:52 - LMT 1895 Feb
10:00 Aus EST 1971
@@ -155,11 +137,9 @@ Rule AN 1986 1989 - Mar Sun>=15 2:00s 0 -
Rule AN 1986 only - Oct 19 2:00s 1:00 -
Rule AN 1987 1999 - Oct lastSun 2:00s 1:00 -
Rule AN 1990 1995 - Mar Sun>=1 2:00s 0 -
-Rule AN 1996 2005 - Mar lastSun 2:00s 0 -
+Rule AN 1996 max - Mar lastSun 2:00s 0 -
Rule AN 2000 only - Aug lastSun 2:00s 1:00 -
Rule AN 2001 max - Oct lastSun 2:00s 1:00 -
-Rule AN 2006 only - Apr Sun>=1 2:00s 0 -
-Rule AN 2007 max - Mar lastSun 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Australia/Sydney 10:04:52 - LMT 1895 Feb
10:00 Aus EST 1971
@@ -180,11 +160,9 @@ Rule LH 1986 1989 - Mar Sun>=15 2:00 0 -
Rule LH 1986 only - Oct 19 2:00 0:30 -
Rule LH 1987 1999 - Oct lastSun 2:00 0:30 -
Rule LH 1990 1995 - Mar Sun>=1 2:00 0 -
-Rule LH 1996 2005 - Mar lastSun 2:00 0 -
+Rule LH 1996 max - Mar lastSun 2:00 0 -
Rule LH 2000 only - Aug lastSun 2:00 0:30 -
Rule LH 2001 max - Oct lastSun 2:00 0:30 -
-Rule LH 2006 only - Apr Sun>=1 2:00 0 -
-Rule LH 2007 max - Mar lastSun 2:00 0 -
Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
10:00 - EST 1981 Mar
10:30 LH LHST
@@ -221,11 +199,9 @@ Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
-10:00 Cook CK%sT
# Cocos
-# These islands were ruled by the Ross family from about 1830 to 1978.
-# We don't know when standard time was introduced; for now, we guess 1900.
+# From USNO (1989):
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Cocos 6:27:40 - LMT 1900
- 6:30 - CCT # Cocos Islands Time
+Zone Indian/Cocos 6:30 - CCT # Cocos Islands Time
# Fiji
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -286,6 +262,9 @@ Zone Pacific/Kwajalein 11:09:20 - LMT 1901
# Micronesia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Yap 9:12:32 - LMT 1901 # Colonia
+ 9:00 - YAPT 1969 Oct # Yap Time
+ 10:00 - YAPT
Zone Pacific/Truk 10:07:08 - LMT 1901
10:00 - TRUT # Truk Time
Zone Pacific/Ponape 10:32:52 - LMT 1901 # Kolonia
@@ -402,11 +381,11 @@ Zone Pacific/Pago_Pago 12:37:12 - LMT 1879 Jul 5
-11:00 - BST 1983 Nov 30 # B=Bering
-11:00 - SST # S=Samoa
-# Samoa
+# W Samoa
Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5
-11:26:56 - LMT 1911
-11:30 - SAMT 1950 # Samoa Time
- -11:00 - WST # Samoa Time
+ -11:00 - WST # W Samoa Time
# Solomon Is
# excludes Bougainville, for which see Papua New Guinea
@@ -455,17 +434,6 @@ Zone Pacific/Johnston -10:00 - HST
# uninhabited
# Midway
-#
-# From Mark Brader (2005-01-23):
-# [Fallacies and Fantasies of Air Transport History, by R.E.G. Davies,
-# published 1994 by Paladwr Press, McLean, VA, USA; ISBN 0-9626483-5-3]
-# reproduced a Pan American Airways timeables from 1936, for their weekly
-# "Orient Express" flights between San Francisco and Manila, and connecting
-# flights to Chicago and the US East Coast. As it uses some time zone
-# designations that I've never seen before:....
-# Fri. 6:30A Lv. HONOLOLU (Pearl Harbor), H.I. H.L.T. Ar. 5:30P Sun.
-# " 3:00P Ar. MIDWAY ISLAND . . . . . . . . . M.L.T. Lv. 6:00A "
-#
Zone Pacific/Midway -11:49:28 - LMT 1901
-11:00 - NST 1956 Jun 3
-11:00 1:00 NDT 1956 Sep 2
@@ -507,7 +475,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert (1999-10-29):
+# From Paul Eggert <eggert@twinsun.com> (1999-10-29):
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks, The International Atlas (5th edition),
# San Diego: ACS Publications, Inc. (1999).
@@ -553,15 +521,9 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# Australia
-# From Paul Eggert (2005-12-08):
-# <a href="http://www.bom.gov.au/climate/averages/tables/dst_times.shtml">
-# Implementation Dates of Daylight Saving Time within Australia
-# </a> summarizes daylight saving issues in Australia.
-
-# From Arthur David Olson (2005-12-12):
-# <a href="http://www.lawlink.nsw.gov.au/lawlink/Corporate/ll_agdinfo.nsf/pages/community_relations_daylight_saving">
-# Lawlink NSW:Daylight Saving in New South Wales
-# </a> covers New South Wales in particular.
+# <a href="http://www.dstc.qut.edu.au/DST/marg/daylight.html">
+# Australia's Daylight Saving Times
+# </a>, by Margaret Turner, summarizes daylight saving issues in Australia.
# From John Mackin (1991-03-06):
# We in Australia have _never_ referred to DST as `daylight' time.
@@ -670,13 +632,13 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# From Paul Eggert (1995-12-19):
# Shanks reports 2:00 for all autumn changes in Australia and New Zealand.
-# Mark Prior writes that his newspaper
+# Mark Prior <mrp@itd.adelaide.edu.au> writes that his newspaper
# reports that NSW's fall 1995 change will occur at 2:00,
# but Robert Elz says it's been 3:00 in Victoria since 1970
# and perhaps the newspaper's `2:00' is referring to standard time.
# For now we'll continue to assume 2:00s for changes since 1960.
-# From Eric Ulevik (1998-01-05):
+# From Eric Ulevik <eau@zip.com.au> (1998-01-05):
#
# Here are some URLs to Australian time legislation. These URLs are stable,
# and should probably be included in the data file. There are probably more
@@ -695,24 +657,6 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# Standard Time Act, 1898
# </a>
-# From David Grosz (2005-06-13):
-# It was announced last week that Daylight Saving would be extended by
-# one week next year to allow for the 2006 Commonwealth Games.
-# Daylight Saving is now to end for next year only on the first Sunday
-# in April instead of the last Sunday in March.
-#
-# From Gwillim Law (2005-06-14):
-# I did some Googling and found that all of those states (and territory) plan
-# to extend DST together in 2006.
-# ACT: http://www.cmd.act.gov.au/mediareleases/fileread.cfm?file=86.txt
-# New South Wales: http://www.thecouriermail.news.com.au/common/story_page/0,5936,15538869%255E1702,00.html
-# South Australia: http://www.news.com.au/story/0,10117,15555031-1246,00.html
-# Tasmania: http://www.media.tas.gov.au/release.php?id=14772
-# Victoria: I wasn't able to find anything separate, but the other articles
-# allude to it.
-# But not Queensland
-# http://www.news.com.au/story/0,10117,15564030-1248,00.html.
-
# Northern Territory
# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
@@ -899,7 +843,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# 1994 was at +0930 as John Connolly's customer seems to assert, then I can
# only conclude that the actual rule is more complicated....
-# From John Warburton (1994-10-07):
+# From John Warburton <jwarb@SACBH.com.au> (1994-10-07):
# The new Daylight Savings dates for South Australia ...
# was gazetted in the Government Hansard on Sep 26 1994....
# start on last Sunday in October and end in last sunday in March.
@@ -959,7 +903,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# From Arthur David Olson:
# New South Wales and subjurisdictions have their own ideas of a fun time.
-# Based on law library research by John Mackin,
+# Based on law library research by John Mackin (john@basser.cs.su.oz),
# who notes:
# In Australia, time is not legislated federally, but rather by the
# individual states. Thus, while such terms as ``Eastern Standard Time''
@@ -968,7 +912,18 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# legislation. This is very important to understand.
# I have researched New South Wales time only...
-# From Eric Ulevik (1999-05-26):
+# From Paul Eggert (1999-09-27):
+# The Information Service of the Australian National Standards Commission
+# <a href="http://www.nsc.gov.au/InfoServ/Ileaflet/il27.htm">
+# Daylight Saving
+# </a> page (1995-04) has an excellent overall history of Australian DST.
+# The Community Relations Division of the NSW Attorney General's Department
+# publishes a history of daylight saving in NSW. See:
+# <a href="http://www.lawlink.nsw.gov.au/crd.nsf/pages/time2">
+# Lawlink NSW: Daylight Saving in New South Wales
+# </a>
+
+# From Eric Ulevik <eau@ozemail.com.au> (1999-05-26):
# DST will start in NSW on the last Sunday of August, rather than the usual
# October in 2000. [See: Matthew Moore,
# <a href="http://www.smh.com.au/news/9905/26/pageone/pageone4.html">
@@ -1045,7 +1000,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# Lord Howe Island
# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
-# LHI... [ Courtesy of Pauline Van Winsen ]
+# LHI... [ Courtesy of Pauline Van Winsen.. pauline@Aus ]
# [ Dec 1990 ]
# Lord Howe Island is located off the New South Wales coast, and is half an
# hour ahead of NSW time.
@@ -1085,7 +1040,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
# # The Country of New Zealand (Australia's east island -) Gee they hate that!
# # or is Australia the west island of N.Z.
-# # [ courtesy of Geoff Tribble.. Auckland N.Z. ]
+# # [ courtesy of Geoff Tribble.. Geofft@Aus.. Auckland N.Z. ]
# # [ Nov 1990 ]
# ...
# Rule NZ 1974 1988 - Oct lastSun 2:00 1:00 D
@@ -1102,7 +1057,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# From Paul Eggert (1995-12-19);
# Shanks reports 2:00 for all autumn changes in Australia and New Zealand.
-# Robert Uzgalis writes that the New Zealand Daylight
+# Robert Uzgalis <buz@cs.aukuni.ac.nz> writes that the New Zealand Daylight
# Savings Time Order in Council dated 1990-06-18 specifies 2:00 standard
# time on both the first Sunday in October and the third Sunday in March.
# As with Australia, we'll assume the tradition is 2:00s, not 2:00.
@@ -1181,7 +1136,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# Micronesia
-# Alan Eugene Davis writes (1996-03-16),
+# Alan Eugene Davis <adavis@kuentos.guam.net> writes (1996-03-16),
# ``I am certain, having lived there for the past decade, that "Truk"
# (now properly known as Chuuk) ... is in the time zone GMT+10.''
#
@@ -1289,10 +1244,10 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# October to March, which has won approval in principle from the Tongan
# Government.
-# From Steffen Thorsen (1999-09-09):
+# From Steffen Thorsen [straen@thorsen.priv.no] (1999-09-09):
# * Tonga will introduce DST in November
#
-# I was given this link by John Letts:
+# I was given this link by John Letts <johnletts@earthlink.net>:
# <a hef="http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm">
# http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm
# </a>
@@ -1302,7 +1257,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# of UTC as well, but as far as I know Fiji will only be 13 hours ahead
# (12 + 1 hour DST).
-# From Arthur David Olson (1999-09-20):
+# From Arthur David Olson [arthur_david_olson@nih.gov] (1999-09-20):
# According to <a href="http://www.tongaonline.com/news/sept1799.html>
# http://www.tongaonline.com/news/sept1799.html
# </a>:
@@ -1372,30 +1327,12 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# mapmakers redrew the IDL following the boundary of Kiribati. Even that line
# has a rather arbitrary nature. The straight-line boundaries between Pacific
# island nations that are shown on many maps are based on an international
-# convention, but are not legally binding national borders.... The date is
+# convention, but are not legally binding national borders.
+#
+# An Anglo-French Conference on Time-Keeping at Sea (June, 1917) agreed that
+# legal time on the high seas would be zone time, i.e., the standard time at
+# the nearest meridian that is a multiple of fifteen degrees. The date is
# governed by the IDL; therefore, even on the high seas, there may be some
# places as late as fourteen hours later than UTC. And, since the IDL is not
# an international standard, there are some places on the high seas where the
# correct date is ambiguous.
-
-# From Wikipedia <http://en.wikipedia.org/wiki/Time_zone> (2005-08-31):
-# Before 1920, all ships kept local apparent time on the high seas by setting
-# their clocks at night or at the morning sight so that, given the ship's
-# speed and direction, it would be 12 o'clock when the Sun crossed the ship's
-# meridian (12 o'clock = local apparent noon). During 1917, at the
-# Anglo-French Conference on Time-keeping at Sea, it was recommended that all
-# ships, both military and civilian, should adopt hourly standard time zones
-# on the high seas. Whenever a ship was within the territorial waters of any
-# nation it would use that nation's standard time. The captain was permitted
-# to change his ship's clocks at a time of his choice following his ship's
-# entry into another zone time--he often chose midnight. These zones were
-# adopted by all major fleets between 1920 and 1925 but not by many
-# independent merchant ships until World War II.
-
-# From Paul Eggert, using references suggested by Oscar van Vlijmen
-# (2005-03-20):
-#
-# The American Practical Navigator (2002)
-# <http://pollux.nss.nima.mil/pubs/pubs_j_apn_sections.html?rid=187>
-# talks only about the 180-degree meridian with respect to ships in
-# international waters; it ignores the international date line.
diff --git a/timezone/backward b/timezone/backward
index 66fbf30618..6e118c2726 100644
--- a/timezone/backward
+++ b/timezone/backward
@@ -1,31 +1,27 @@
-# @(#)backward 8.1
+# @(#)backward 7.26
# This file provides links between current names for time zones
# and their old names. Many names changed in late 1993.
-Link Africa/Bamako Africa/Timbuktu
-Link America/Argentina/Catamarca America/Argentina/ComodRivadavia
Link America/Adak America/Atka
Link America/Argentina/Buenos_Aires America/Buenos_Aires
Link America/Argentina/Catamarca America/Catamarca
Link America/Argentina/Cordoba America/Cordoba
Link America/Tijuana America/Ensenada
-Link America/Indiana/Indianapolis America/Fort_Wayne
-Link America/Indiana/Indianapolis America/Indianapolis
+Link America/Indianapolis America/Fort_Wayne
Link America/Argentina/Jujuy America/Jujuy
Link America/Indiana/Knox America/Knox_IN
-Link America/Kentucky/Louisville America/Louisville
Link America/Argentina/Mendoza America/Mendoza
Link America/Rio_Branco America/Porto_Acre
-Link America/Argentina/Cordoba America/Rosario
+Link America/Cordoba America/Rosario
Link America/St_Thomas America/Virgin
Link Asia/Ashgabat Asia/Ashkhabad
Link Asia/Chongqing Asia/Chungking
Link Asia/Dhaka Asia/Dacca
Link Asia/Macau Asia/Macao
+Link Asia/Makassar Asia/Ujung_Pandang
Link Asia/Jerusalem Asia/Tel_Aviv
Link Asia/Thimphu Asia/Thimbu
-Link Asia/Makassar Asia/Ujung_Pandang
Link Asia/Ulaanbaatar Asia/Ulan_Bator
Link Australia/Sydney Australia/ACT
Link Australia/Sydney Australia/Canberra
@@ -38,7 +34,7 @@ Link Australia/Hobart Australia/Tasmania
Link Australia/Melbourne Australia/Victoria
Link Australia/Perth Australia/West
Link Australia/Broken_Hill Australia/Yancowinna
-Link America/Rio_Branco Brazil/Acre
+Link America/Porto_Acre Brazil/Acre
Link America/Noronha Brazil/DeNoronha
Link America/Sao_Paulo Brazil/East
Link America/Manaus Brazil/West
@@ -56,14 +52,13 @@ Link Pacific/Easter Chile/EasterIsland
Link America/Havana Cuba
Link Africa/Cairo Egypt
Link Europe/Dublin Eire
-Link Europe/London Europe/Belfast
Link Europe/Chisinau Europe/Tiraspol
Link Europe/London GB
Link Europe/London GB-Eire
-Link Etc/GMT GMT+0
-Link Etc/GMT GMT-0
-Link Etc/GMT GMT0
-Link Etc/GMT Greenwich
+Link Etc/GMT+0 GMT+0
+Link Etc/GMT-0 GMT-0
+Link Etc/GMT0 GMT0
+Link Etc/Greenwich Greenwich
Link Asia/Hong_Kong Hongkong
Link Atlantic/Reykjavik Iceland
Link Asia/Tehran Iran
@@ -75,14 +70,13 @@ Link Africa/Tripoli Libya
Link America/Tijuana Mexico/BajaNorte
Link America/Mazatlan Mexico/BajaSur
Link America/Mexico_City Mexico/General
+Link America/Shiprock Navajo
Link Pacific/Auckland NZ
Link Pacific/Chatham NZ-CHAT
-Link America/Denver Navajo
-Link Asia/Shanghai PRC
Link Pacific/Pago_Pago Pacific/Samoa
-Link Pacific/Truk Pacific/Yap
Link Europe/Warsaw Poland
Link Europe/Lisbon Portugal
+Link Asia/Shanghai PRC
Link Asia/Taipei ROC
Link Asia/Seoul ROK
Link Asia/Singapore Singapore
@@ -92,7 +86,7 @@ Link America/Anchorage US/Alaska
Link America/Adak US/Aleutian
Link America/Phoenix US/Arizona
Link America/Chicago US/Central
-Link America/Indiana/Indianapolis US/East-Indiana
+Link America/Indianapolis US/East-Indiana
Link America/New_York US/Eastern
Link Pacific/Honolulu US/Hawaii
Link America/Indiana/Knox US/Indiana-Starke
@@ -101,6 +95,6 @@ Link America/Denver US/Mountain
Link America/Los_Angeles US/Pacific
Link Pacific/Pago_Pago US/Samoa
Link Etc/UTC UTC
-Link Etc/UTC Universal
+Link Etc/Universal Universal
Link Europe/Moscow W-SU
-Link Etc/UTC Zulu
+Link Etc/Zulu Zulu
diff --git a/timezone/checktab.awk b/timezone/checktab.awk
index 6d532141e6..6a2d19ae00 100644
--- a/timezone/checktab.awk
+++ b/timezone/checktab.awk
@@ -1,8 +1,8 @@
# Check tz tables for consistency.
-# @(#)checktab.awk 1.7
+# @(#)checktab.awk 1.6
-# Contributed by Paul Eggert.
+# Contributed by Paul Eggert <eggert@twinsun.com>.
BEGIN {
FS = "\t"
diff --git a/timezone/etcetera b/timezone/etcetera
index cddbe8a294..f87a76ea48 100644
--- a/timezone/etcetera
+++ b/timezone/etcetera
@@ -1,11 +1,10 @@
-# @(#)etcetera 8.1
+# @(#)etcetera 7.11
# These entries are mostly present for historical reasons, so that
# people in areas not otherwise covered by the tz files could "zic -l"
# to a time zone that was right for their area. These days, the
-# tz files cover almost all the inhabited world, and the only practical
-# need now for the entries that are not on UTC are for ships at sea
-# that cannot use POSIX TZ settings.
+# tz files cover almost all the inhabited world, so there's little
+# need now for the entries that are not on UTC.
Zone Etc/GMT 0 - GMT
Zone Etc/UTC 0 - UTC
diff --git a/timezone/europe b/timezone/europe
index 54146d7400..eeb114f881 100644
--- a/timezone/europe
+++ b/timezone/europe
@@ -1,11 +1,10 @@
-# @(#)europe 8.1
-# <pre>
+# @(#)europe 7.88
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert (1999-10-29):
+# From Paul Eggert <eggert@twinsun.com> (1999-10-29):
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks, The International Atlas (5th edition),
# San Diego: ACS Publications, Inc. (1999).
@@ -56,7 +55,7 @@
# A reliable and entertaining source about time zones, especially in Britain,
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
-# From Peter Ilieve (1994-12-04),
+# From Peter Ilieve <peter@memex.co.uk> (1994-12-04),
# The original six [EU members]: Belgium, France, (West) Germany, Italy,
# Luxembourg, the Netherlands.
# Plus, from 1 Jan 73: Denmark, Ireland, United Kingdom.
@@ -82,7 +81,7 @@
# Britain (United Kingdom) and Ireland (Eire)
-# From Peter Ilieve (1994-07-06):
+# From Peter Ilieve <peter@memex.co.uk> (1994-07-06):
#
# On 17 Jan 1994 the Independent, a UK quality newspaper, had a piece about
# historical vistas along the Thames in west London. There was a photo
@@ -103,7 +102,7 @@
#
# [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.]
-# From Paul Eggert (1993-11-18):
+# From Paul Eggert <eggert@twinsun.com> (1993-11-18):
#
# Howse writes that Britain was the first country to use standard time.
# The railways cared most about the inconsistencies of local mean time,
@@ -169,12 +168,12 @@
# known as "British" Summer Time in all parts of the United Kingdom.
# Date: 4 Jan 89 08:57:25 GMT (Wed)
-# From: Jonathan Leffler
+# From: Jonathan Leffler <nih-csl!uunet!mcvax!sphinx.co.uk!john>
# [British Summer Time] is fixed annually by Act of Parliament.
# If you can predict what Parliament will do, you should be in
# politics making a fortune, not computing.
-# From Chris Carrier (1996-06-14):
+# From Chris Carrier <72157.3334@CompuServe.COM> (1996-06-14):
# I remember reading in various wartime issues of the London Times the
# acronym BDST for British Double Summer Time. Look for the published
# time of sunrise and sunset in The Times, when BDST was in effect, and
@@ -205,15 +204,15 @@
# and follows the more usual convention of putting the location name first,
# so we use `BDST'.
-# Peter Ilieve (1998-04-19) described at length
+# Peter Ilieve <peter@aldie.co.uk> (1998-04-19) described at length
# the history of summer time legislation in the United Kingdom.
-# Since 1998 Joseph S. Myers has been updating
+# Since 1998 Joseph S. Myers <jsm28@cam.ac.uk> has been updating
# and extending this list, which can be found in
# <a href="http://student.cusu.cam.ac.uk/~jsm28/british-time/">
# History of legal time in Britain
# </a>
-# From Joseph S. Myers (1998-01-06):
+# From Joseph S. Myers <jsm28@cam.ac.uk> (1998-01-06):
#
# The legal time in the UK outside of summer time is definitely GMT, not UTC;
# see Lord Tanlaw's speech
@@ -256,35 +255,6 @@
# "Timeball on the ballast office is down. Dunsink time."
# -- James Joyce, Ulysses
-# From Joseph S. Myers (2005-01-26):
-# Irish laws are available online at www.irishstatutebook.ie. These include
-# various relating to legal time, for example:
-#
-# ZZA13Y1923.html ZZA12Y1924.html ZZA8Y1925.html ZZSIV20PG1267.html
-#
-# ZZSI71Y1947.html ZZSI128Y1948.html ZZSI23Y1949.html ZZSI41Y1950.html
-# ZZSI27Y1951.html ZZSI73Y1952.html
-#
-# ZZSI11Y1961.html ZZSI232Y1961.html ZZSI182Y1962.html
-# ZZSI167Y1963.html ZZSI257Y1964.html ZZSI198Y1967.html
-# ZZA23Y1968.html ZZA17Y1971.html
-#
-# ZZSI67Y1981.html ZZSI212Y1982.html ZZSI45Y1986.html
-# ZZSI264Y1988.html ZZSI52Y1990.html ZZSI371Y1992.html
-# ZZSI395Y1994.html ZZSI484Y1997.html ZZSI506Y2001.html
-#
-# [These are all relative to the root, e.g., the first is
-# <http://www.irishstatutebook.ie/ZZA13Y1923.html>.]
-#
-# (These are those I found, but there could be more. In any case these
-# should allow various updates to the comments in the europe file to cover
-# the laws applicable in Ireland.)
-#
-# (Note that the time in the Republic of Ireland since 1968 has been defined
-# in terms of standard time being GMT+1 with a period of winter time when it
-# is GMT, rather than standard time being GMT with a period of summer time
-# being GMT+1.)
-
# From Paul Eggert (1999-03-28):
# Clive Feather (<news:859845706.26043.0@office.demon.net>, 1997-03-31)
# reports that Folkestone (Cheriton) Shuttle Terminal uses Concession Time
@@ -423,6 +393,13 @@ Zone Europe/London -0:01:15 - LMT 1847 Dec 1
1:00 - BST 1971 Oct 31 2:00u
0:00 GB-Eire %s 1996
0:00 EU GMT/BST
+Zone Europe/Belfast -0:23:40 - LMT 1880 Aug 2
+ -0:25:21 - DMT 1916 May 21 2:00 # Dublin/Dunsink MT
+ -0:25:21 1:00 IST 1916 Oct 1 2:00s # Irish Summer Time
+ 0:00 GB-Eire %s 1968 Oct 27
+ 1:00 - BST 1971 Oct 31 2:00u
+ 0:00 GB-Eire %s 1996
+ 0:00 EU GMT/BST
Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2
-0:25:21 - DMT 1916 May 21 2:00
-0:25:21 1:00 IST 1916 Oct 1 2:00s
@@ -530,7 +507,7 @@ Zone EET 2:00 EU EE%sT
# Previous editions of this database used abbreviations like MET DST
# for Central European Summer Time, but this didn't agree with common usage.
-# From Markus Kuhn (1996-07-12):
+# From Markus Kuhn <mskuhn@unrza3.dialin.rrze.uni-erlangen.de> (1996-07-12):
# The official German names ... are
#
# Mitteleuropaeische Zeit (MEZ) = UTC+01:00
@@ -646,7 +623,7 @@ Zone Europe/Minsk 1:50:16 - LMT 1880
# pp 8-9.
# LMT before 1892 was 0:17:30, according to the official journal of Belgium:
# Moniteur Belge, Samedi 30 Avril 1892, N.121.
-# Thanks to Pascal Delmoitie for these references.
+# Thanks to Pascal Delmoitie <pascal@belnet.be> for these references.
# The 1918 rules are listed for completeness; they apply to unoccupied Belgium.
# Assume Brussels switched to WET in 1918 when the armistice took effect.
#
@@ -705,7 +682,7 @@ Zone Europe/Brussels 0:17:30 - LMT 1880
# Bulgaria
#
-# From Plamen Simenov via Steffen Thorsen (1999-09-09):
+# From Plamen Simenov <P.Simeonov@cnsys.bg> via Steffen Thorsen (1999-09-09):
# A document of Government of Bulgaria (No.94/1997) says:
# EET --> EETDST is in 03:00 Local time in last Sunday of March ...
# EETDST --> EET is in 04:00 Local time in last Sunday of October
@@ -731,7 +708,7 @@ Zone Europe/Sofia 1:33:16 - LMT 1880
# see Serbia and Montenegro
# Cyprus
-# Please see the `asia' file for Asia/Nicosia.
+# See the `asia' file.
# Czech Republic
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -750,40 +727,6 @@ Zone Europe/Prague 0:57:44 - LMT 1850
1:00 EU CE%sT
# Denmark, Faeroe Islands, and Greenland
-
-# From Jesper Norgaard Welen (2005-04-26):
-# http://www.hum.aau.dk/~poe/tid/tine/DanskTid.htm says that the law
-# [introducing standard time] was in effect from 1894-01-01....
-# The page http://www.retsinfo.dk/_GETDOCI_/ACCN/A18930008330-REGL
-# confirms this, and states that the law was put forth 1893-03-29.
-#
-# The EU treaty with effect from 1973:
-# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19722110030-REGL
-#
-# This provoked a new law from 1974 to make possible summer time changes
-# in subsequenet decrees with the law
-# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19740022330-REGL
-#
-# It seems however that no decree was set forward until 1980. I have
-# not found any decree, but in another related law, the effecting DST
-# changes are stated explicitly to be from 1980-04-06 at 02:00 to
-# 1980-09-28 at 02:00. If this is true, this differs slightly from
-# the EU rule in that DST runs to 02:00, not 03:00. We don't know
-# when Denmark began using the EU rule correctly, but we have only
-# confirmation of the 1980-time, so I presume it was correct in 1981:
-# The law is about the management of the extra hour, concerning
-# working hours reported and effect on obligatory-rest rules (which
-# was suspended on that night):
-# http://www.retsinfo.dk/_GETDOCI_/ACCN/C19801120554-REGL
-
-# From Jesper Norgaard Welen (2005-06-11):
-# The Herning Folkeblad (1980-09-26) reported that the night between
-# Saturday and Sunday the clock is set back from three to two.
-
-# From Paul Eggert (2005-06-11):
-# Hence the "02:00" of the 1980 law refers to standard time, not
-# wall-clock time, and so the EU rules were in effect in 1980.
-
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Denmark 1916 only - May 14 23:00 1:00 S
Rule Denmark 1916 only - Sep 30 23:00 0 -
@@ -796,10 +739,13 @@ Rule Denmark 1947 only - May 4 2:00s 1:00 S
Rule Denmark 1947 only - Aug 10 2:00s 0 -
Rule Denmark 1948 only - May 9 2:00s 1:00 S
Rule Denmark 1948 only - Aug 8 2:00s 0 -
+# Whitman also gives 1949 Apr 9 to 1949 Oct 1, and disagrees in minor ways
+# about many of the above dates; go with Shanks.
#
+# For 1894, Shanks says Jan, Whitman Apr; go with Whitman.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Copenhagen 0:50:20 - LMT 1890
- 0:50:20 - CMT 1894 Jan 1 # Copenhagen MT
+ 0:50:20 - CMT 1894 Apr # Copenhagen Mean Time
1:00 Denmark CE%sT 1942 Nov 2 2:00s
1:00 C-Eur CE%sT 1945 Apr 2 2:00
1:00 Denmark CE%sT 1980
@@ -808,11 +754,6 @@ Zone Atlantic/Faeroe -0:27:04 - LMT 1908 Jan 11 # Torshavn
0:00 - WET 1981
0:00 EU WE%sT
#
-# From Paul Eggert (2004-10-31):
-# During World War II, Germany maintained secret manned weather stations in
-# East Greenland and Franz Josef Land, but we don't know their time zones.
-# My source for this is Wilhelm Dege's book mentioned under Svalbard.
-#
# From Paul Eggert (1996-11-22):
# Greenland joined the EU as part of Denmark, obtained home rule on 1979-05-01,
# and left the EU on 1985-02-01. It therefore should have been using EU
@@ -899,12 +840,12 @@ Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik air base
-4:00 Thule A%sT
# Estonia
-# From Peter Ilieve (1994-10-15):
+# From Peter Ilieve <peter@memex.co.uk> (1994-10-15):
# A relative in Tallinn confirms the accuracy of the data for 1989 onwards
# [through 1994] and gives the legal authority for it,
# a regulation of the Government of Estonia, No. 111 of 1989....
#
-# From Peter Ilieve (1996-10-28):
+# From Peter Ilieve <peter@aldie.co.uk> (1996-10-28):
# [IATA SSIM (1992/1996) claims that the Baltic republics switch at 01:00s,
# but a relative confirms that Estonia still switches at 02:00s, writing:]
# ``I do not [know] exactly but there are some little different
@@ -914,7 +855,7 @@ Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik air base
# human physiology. It seems that Estonia maybe will not change to
# summer time next spring.''
-# From Peter Ilieve (1998-11-04), heavily edited:
+# From Peter Ilieve <peter@aldie.co.uk> (1998-11-04), heavily edited:
# <a href="http://trip.rk.ee/cgi-bin/thw?${BASE}=akt&${OOHTML}=rtd&TA=1998&TO=1&AN=1390">
# The 1998-09-22 Estonian time law
# </a>
@@ -963,11 +904,11 @@ Zone Europe/Tallinn 1:39:00 - LMT 1880
# Finland
#
-# From Hannu Strang (25 Sep 1994 06:03:37 UTC):
+# From Hannu Strang <chs@apu.fi> (25 Sep 1994 06:03:37 UTC):
# Well, here in Helsinki we're just changing from summer time to regular one,
# and it's supposed to change at 4am...
#
-# From Paul Eggert (25 Sep 1994):
+# From Paul Eggert <eggert@twinsun.com> (25 Sep 1994):
# Shanks says Finland has switched at 02:00 standard time since 1981.
# Go with Strang instead.
#
@@ -1044,7 +985,7 @@ Rule France 1940 only - Feb 25 2:00 1:00 S
# Dole, Morez, St-Claude, and Collognes (Haute-Savioe).
Rule France 1941 only - May 5 0:00 2:00 M # Midsummer
# Shanks says this transition occurred at Oct 6 1:00,
-# but go with Denis Excoffier (1997-12-12),
+# but go with Denis.Excoffier@ens.fr (1997-12-12),
# who quotes the Ephemerides Astronomiques for 1998 from Bureau des Longitudes
# as saying 5/10/41 22hUT.
Rule France 1941 only - Oct 6 0:00 1:00 S
@@ -1078,7 +1019,7 @@ Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01
# Germany
-# From Markus Kuhn (1998-09-29):
+# From Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk> (1998-09-29):
# The German time zone web site by the Physikalisch-Technische
# Bundesanstalt contains DST information back to 1916.
# [See tz-link.htm for the URL.]
@@ -1114,11 +1055,6 @@ Zone Europe/Berlin 0:53:28 - LMT 1893 Apr
1:00 Germany CE%sT 1980
1:00 EU CE%sT
-# Georgia
-# Please see the "asia" file for Asia/Tbilisi.
-# Herodotus (Histories, IV.45) says Georgia north of the Phasis (now Rioni)
-# is in Europe. Our reference location Tbilisi is in the Asian part.
-
# Gibraltar
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2
@@ -1193,7 +1129,7 @@ Zone Europe/Budapest 1:16:20 - LMT 1890 Oct
# Iceland
#
-# From Adam David (1993-11-06):
+# From Adam David <adam@veda.is> (1993-11-06):
# The name of the timezone in Iceland for system / mail / news purposes is GMT.
#
# (1993-12-05):
@@ -1220,7 +1156,7 @@ Zone Europe/Budapest 1:16:20 - LMT 1890 Oct
# might be a reference to the Julian calendar as opposed to Gregorian, or it
# might mean something else (???).
#
-# From Paul Eggert (1999-10-29):
+# From Paul Eggert <eggert@twinsun.com> (1999-10-29):
# The Iceland Almanak, Shanks and Whitman disagree on many points.
# We go with the Almanak, except for one claim from Shanks, namely that
# Reykavik was 21W57 from 1837 to 1908, local mean time before that.
@@ -1336,7 +1272,7 @@ Link Europe/Rome Europe/San_Marino
# Latvia
-# From Liene Kanepe (1998-09-17):
+# From Liene Kanepe <Liene_Kanepe@lm.gov.lv> (1998-09-17):
# I asked about this matter Scientific Secretary of the Institute of Astronomy
# of The University of Latvia Dr. paed Mr. Ilgonis Vilks. I also searched the
@@ -1423,7 +1359,7 @@ Zone Europe/Vaduz 0:38:04 - LMT 1894 Jun
# IATA SSIM (1992/1996) says Lithuania uses W-Eur rules, but since it is
# known to be wrong about Estonia and Latvia, assume it's wrong here too.
-# From Marius Gedminas (1998-08-07):
+# From Marius Gedminas <mgedmin@pub.osf.lt> (1998-08-07):
# I would like to inform that in this year Lithuanian time zone
# (Europe/Vilnius) was changed.
@@ -1530,7 +1466,7 @@ Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 # Valletta
# on 1991-08-27 (the 1992-01-19 date is that of a Russian decree).
# In early 1992 there was large-scale interethnic violence in the area
# and it's possible that some Russophones continued to observe Moscow time.
-# But [two people] separately reported via
+# But moldavizolit@tirastel.md and mk@tirastel.md separately reported via
# Jesper Norgaard that as of 2001-01-24 Tiraspol was like Chisinau.
# The Tiraspol entry has therefore been removed for now.
@@ -1633,10 +1569,12 @@ Zone Europe/Amsterdam 0:19:32 - LMT 1835
1:00 EU CE%sT
# Norway
-# http://met.no/met/met_lex/q_u/sommertid.html (2004-01) agrees with Shanks.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+# Whitman gives 1916 May 21 - 1916 Oct 21; go with Shanks.
Rule Norway 1916 only - May 22 1:00 1:00 S
Rule Norway 1916 only - Sep 30 0:00 0 -
+# Whitman says DST observed 1935-08-11/1942-11-01, then 1943-03-29/10-04,
+# 1944-04-03/10-02, and 1945-04-01/10-01; go with Shanks.
Rule Norway 1945 only - Apr 2 2:00s 1:00 S
Rule Norway 1945 only - Oct 1 2:00s 0 -
Rule Norway 1959 1964 - Mar Sun>=15 2:00s 1:00 S
@@ -1673,7 +1611,7 @@ Zone Europe/Oslo 0:43:00 - LMT 1895 Jan 1
# From Paul Eggert (2001-05-01):
#
# Actually, Jan Mayen was never occupied by Germany during World War II,
-# so it must have diverged from Oslo time during the war, as Oslo was
+# so it must have diverged from Oslo time during the war, as Olso was
# keeping Berlin time.
#
# <http://home.no.net/janmayen/history.htm> says that the meteorologists
@@ -1690,7 +1628,7 @@ Zone Europe/Oslo 0:43:00 - LMT 1895 Jan 1
# <http://www.svalbard.com/SvalbardFAQ.html> says that the Germans were
# expelled on 1942-05-14. However, small parties of Germans did return,
# and according to Wilhelm Dege's book "War North of 80" (1954)
-# <http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html>
+# <http://www.utpress.utoronto.ca/publishing/rights/dege_warnorthof80.htm>
# the German armed forces at the Svalbard weather station code-named
# Haudegen did not surrender to the Allies until September 1945.
#
@@ -1709,26 +1647,19 @@ Rule Poland 1944 only - Oct 4 2:00 0 -
# For 1944-1948 Whitman gives the previous day; go with Shanks.
Rule Poland 1945 only - Apr 29 0:00 1:00 S
Rule Poland 1945 only - Nov 1 0:00 0 -
-# For 1946 on the source is Kazimierz Borkowski,
-# Torun Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U.,
-# <http://www.astro.uni.torun.pl/~kb/Artykuly/U-PA/Czas2.htm#tth_tAb1>
-# Thanks to Przemyslaw Augustyniak (2005-05-28) for this reference.
-# He also gives these further references:
-# Mon Pol nr 13, poz 162 (1995) <http://www.abc.com.pl/serwis/mp/1995/0162.htm>
-# Druk nr 2180 (2003) <http://www.senat.gov.pl/k5/dok/sejm/053/2180.pdf>
-Rule Poland 1946 only - Apr 14 0:00s 1:00 S
-Rule Poland 1946 only - Oct 7 2:00s 0 -
-Rule Poland 1947 only - May 4 2:00s 1:00 S
-Rule Poland 1947 1949 - Oct Sun>=1 2:00s 0 -
-Rule Poland 1948 only - Apr 18 2:00s 1:00 S
-Rule Poland 1949 only - Apr 10 2:00s 1:00 S
+Rule Poland 1946 only - Apr 14 0:00 1:00 S
+Rule Poland 1946 only - Sep 7 0:00 0 -
+Rule Poland 1947 only - May 4 0:00 1:00 S
+Rule Poland 1947 1948 - Oct Sun>=1 0:00 0 -
+Rule Poland 1948 only - Apr 18 0:00 1:00 S
+# Whitman also gives 1949 Apr 9 - 1949 Oct 1; go with Shanks.
Rule Poland 1957 only - Jun 2 1:00s 1:00 S
Rule Poland 1957 1958 - Sep lastSun 1:00s 0 -
Rule Poland 1958 only - Mar 30 1:00s 1:00 S
Rule Poland 1959 only - May 31 1:00s 1:00 S
Rule Poland 1959 1961 - Oct Sun>=1 1:00s 0 -
Rule Poland 1960 only - Apr 3 1:00s 1:00 S
-Rule Poland 1961 1964 - May lastSun 1:00s 1:00 S
+Rule Poland 1961 1964 - May Sun>=25 1:00s 1:00 S
Rule Poland 1962 1964 - Sep lastSun 1:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Warsaw 1:24:00 - LMT 1880
@@ -1737,17 +1668,33 @@ Zone Europe/Warsaw 1:24:00 - LMT 1880
2:00 Poland EE%sT 1922 Jun
1:00 Poland CE%sT 1940 Jun 23 2:00
1:00 C-Eur CE%sT 1944 Oct
- 1:00 Poland CE%sT 1977
- 1:00 W-Eur CE%sT 1988
+ 1:00 Poland CE%sT 1977 Apr 3 1:00
+ 1:00 W-Eur CE%sT 1999
+# IATA SSIM (1991/1996) gives EU rules, but the _The Warsaw Voice_
+# <a href="http://www.warsawvoice.com.pl/v361/NewsInBrief.shtml">
+# http://www.warsawvoice.com/pl/v361/NewsInBrief.shtml (1995-09-24)
+# </a>
+# says the autumn 1995 switch was at 02:00.
+# Stick with W-Eur for now.
+#
+# From Marcin.Kasperski@softax.com.pl (1999-06-10):
+# According to my colleagues someone recently decided, that Poland would
+# follow European Union regulations, so - I think - the matter is not
+# worth further discussion.
+#
+# From Paul Eggert (1999-06-10):
+# Kasperski also writes that the government futzed with the rules in 1997
+# or 1998 but he doesn't remember the details. Assume they switched to
+# EU rules in 1999.
1:00 EU CE%sT
# Portugal
#
-# From Rui Pedro Salgueiro (1992-11-12):
+# From Rui Pedro Salgueiro <rps@inescca.inescc.pt> (1992-11-12):
# Portugal has recently (September, 27) changed timezone
# (from WET to MET or CET) to harmonize with EEC.
#
-# Martin Bruckmann (1996-02-29) reports via Peter Ilieve
+# Martin Bruckmann <martin@ua.pt> (1996-02-29) reports via Peter Ilieve
# that Portugal is reverting to 0:00 by not moving its clocks this spring.
# The new Prime Minister was fed up with getting up in the dark in the winter.
#
@@ -1877,25 +1824,25 @@ Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct
# Russia
-# From Paul Eggert (1999-11-12):
+# From Paul Eggert <eggert@twinsun.com> (1999-11-12):
# 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, except we follow
# Chernov's report that 1992 DST transitions were Sat 23:00, not Sun 02:00s.
#
-# From Stanislaw A. Kuzikowski (1994-06-29):
+# From Stanislaw A. Kuzikowski <S.A.Kuz@iae.nsk.su> (1994-06-29):
# But now it is some months since Novosibirsk is 3 hours ahead of Moscow!
# I do not know why they have decided to make this change;
# as far as I remember it was done exactly during winter->summer switching
# so we (Novosibirsk) simply did not switch.
#
-# From Andrey A. Chernov (1996-10-04):
+# From Andrey A. Chernov <ache@nagual.ru> (1996-10-04):
# `MSK' and `MSD' were born and used initially on Moscow computers with
# UNIX-like OSes by several developer groups (e.g. Demos group, Kiae group)....
# The next step was the UUCP network, the Relcom predecessor
# (used mainly for mail), and MSK/MSD was actively used there.
#
-# From Chris Carrier (1996-10-30):
+# From Chris Carrier <72157.3334@CompuServe.COM> (1996-10-30):
# According to a friend of mine who rode the Trans-Siberian Railroad from
# Moscow to Irkutsk in 1995, public air and rail transport in Russia ...
# still follows Moscow time, no matter where in Russia it is located.
@@ -2083,7 +2030,7 @@ Zone Europe/Belgrade 1:22:00 - LMT 1884
1:00 - CET 1941 Apr 18 23:00
1:00 C-Eur CE%sT 1945 May 8 2:00s
1:00 1:00 CEST 1945 Sep 16 2:00s
-# Metod Kozelj reports that the legal date of
+# Metod Kozelj <metod.kozelj@rzs-hm.si> reports that the legal date of
# transition to EU rules was 1982-11-27, for all of Yugoslavia at the time.
# Shanks doesn't give as much detail, so go with Kozelj.
1:00 - CET 1982 Nov 27
@@ -2357,7 +2304,7 @@ Zone Europe/Simferopol 2:16:24 - LMT 1880
3:00 Russia MSK/MSD 1990
3:00 - MSK 1990 Jul 1 2:00
2:00 - EET 1992
-# From Paul Eggert (1999-11-12):
+# From Paul Eggert <eggert@twinsun.com> (1999-11-12):
# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
# from Kiev to Moscow time sometime after the January 1994 elections.
# Shanks says ``date of change uncertain'', but implies that it happened
@@ -2387,7 +2334,8 @@ Zone Europe/Simferopol 2:16:24 - LMT 1880
# ...
# Date: Wed, 28 Jan 87 16:56:27 -0100
-# From: Tom Hofmann
+# From: seismo!mcvax!cgcha!wtho (Tom Hofmann)
+# Message-Id: <8701281556.AA22174@cgcha.uucp>
# ...
#
# ...the European time rules are...standardized since 1981, when
@@ -2406,11 +2354,11 @@ Zone Europe/Simferopol 2:16:24 - LMT 1880
#
# Tom Hofmann, Scientific Computer Center, CIBA-GEIGY AG,
# 4002 Basle, Switzerland
-# ...
+# UUCP: ...!mcvax!cernvax!cgcha!wtho
# ...
# Date: Wed, 4 Feb 87 22:35:22 +0100
-# From: Dik T. Winter
+# From: seismo!mcvax!cwi.nl!dik (Dik T. Winter)
# ...
#
# The information from Tom Hofmann is (as far as I know) not entirely correct.
@@ -2436,7 +2384,8 @@ Zone Europe/Simferopol 2:16:24 - LMT 1880
#
# ...
# dik t. winter, cwi, amsterdam, nederland
-# ...
+# INTERNET : dik@cwi.nl
+# BITNET/EARN: dik@mcvax
# From Bob Devine (1988-01-28):
# ...
diff --git a/timezone/factory b/timezone/factory
index 946063c0dd..ba27c63269 100644
--- a/timezone/factory
+++ b/timezone/factory
@@ -1,4 +1,4 @@
-# @(#)factory 8.1
+# @(#)factory 7.3
# For companies who don't want to put time zone specification in
# their installation procedures. When users run date, they'll get the message.
diff --git a/timezone/iso3166.tab b/timezone/iso3166.tab
index 1cfaf265c2..b17843ac8e 100644
--- a/timezone/iso3166.tab
+++ b/timezone/iso3166.tab
@@ -1,8 +1,8 @@
# ISO 3166 alpha-2 country codes
#
-# @(#)iso3166.tab 8.1
+# @(#)iso3166.tab 1.15
#
-# From Paul Eggert (2004-06-14):
+# From Paul Eggert <eggert@twinsun.com> (2004-06-14):
#
# This file contains a table with the following columns:
# 1. ISO 3166-1 alpha-2 country code, current as of
@@ -255,7 +255,7 @@ VI Virgin Islands (US)
VN Vietnam
VU Vanuatu
WF Wallis & Futuna
-WS Samoa (western)
+WS Samoa (Western)
YE Yemen
YT Mayotte
ZA South Africa
diff --git a/timezone/leapseconds b/timezone/leapseconds
index d2b506bab5..7add3303f2 100644
--- a/timezone/leapseconds
+++ b/timezone/leapseconds
@@ -1,4 +1,4 @@
-# @(#)leapseconds 8.1
+# @(#)leapseconds 7.17
# Allowance for leapseconds added to each timezone file.
@@ -43,50 +43,39 @@ Leap 1994 Jun 30 23:59:60 + S
Leap 1995 Dec 31 23:59:60 + S
Leap 1997 Jun 30 23:59:60 + S
Leap 1998 Dec 31 23:59:60 + S
-Leap 2005 Dec 31 23:59:60 + S
-# INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE (IERS)
-#
+# INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE (IERS)
+#
# SERVICE INTERNATIONAL DE LA ROTATION TERRESTRE ET DES SYSTEMES DE REFERENCE
-#
+#
# SERVICE DE LA ROTATION TERRESTRE
# OBSERVATOIRE DE PARIS
# 61, Av. de l'Observatoire 75014 PARIS (France)
# Tel. : 33 (0) 1 40 51 22 26
# FAX : 33 (0) 1 40 51 22 91
-# ...
-# http://hpiers.obspm.fr/eop-pc
-#
-# Paris, 4 July 2005
-#
-# Bulletin C 30
-#
-# To authorities responsible
-# for the measurement and
-# distribution of time
-#
-#
-# UTC TIME STEP
-# on the 1st of January 2006
-#
-# A positive leap second will be introduced at the end of December 2005.
-# The sequence of dates of the UTC second markers will be:
-#
-# 2005 December 31, 23h 59m 59s
-# 2005 December 31, 23h 59m 60s
-# 2006 January 1, 0h 0m 0s
-#
+# Internet : services.iers@obspm.fr
+#
+# Paris, 15 January 2004
+#
+# Bulletin C 27
+#
+# To authorities responsible
+# for the measurement and
+# distribution of time
+#
+# INFORMATION ON UTC - TAI
+#
+# NO positive leap second will be introduced at the end of June 2004.
# The difference between UTC and the International Atomic Time TAI is:
-#
-# from 1999 January 1, 0h UTC, to 2006 January 1 0h UTC : UTC-TAI = - 32s
-# from 2006 January 1, 0h UTC, until further notice : UTC-TAI = - 33s
-#
-# Leap seconds can be introduced in UtC at the end of the months of December
+#
+# from 1999 January 1, 0h UTC, until further notice : UTC-TAI = -32 s
+#
+# Leap seconds can be introduced in UTC at the end of the months of December
# or June, depending on the evolution of UT1-TAI. Bulletin C is mailed every
-# six months, either to announce a time step in UTC or to confirm that there
+# six months, either to announce a time step in UTC, or to confirm that there
# will be no time step at the next possible date.
-#
-# Daniel GAMBIS
-# Head
-# Earth Orientation Center of IERS
-# Observatoire de Paris, France
+#
+# Daniel GAMBIS
+# Director
+# Earth Orientation Center of IERS
+# Observatoire de Paris, France
diff --git a/timezone/northamerica b/timezone/northamerica
index 73e2470e0b..6e755b04b3 100644
--- a/timezone/northamerica
+++ b/timezone/northamerica
@@ -1,13 +1,11 @@
-# @(#)northamerica 8.1
-# <pre>
-
+# @(#)northamerica 7.69
# also includes Central America and the Caribbean
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert (1999-03-22):
+# From Paul Eggert <eggert@twinsun.com> (1999-03-22):
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
@@ -26,16 +24,12 @@
# 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 (2005-04-16):
-# That 1883 transition occurred at 12:00 new time, not at 12:00 old time.
-# See p 46 of David Prerau, Seize the daylight, Thunder's Mouth Press (2005).
-
-# From Paul Eggert (1995-12-19):
+# From Paul Eggert <eggert@twinsun.com> (1995-12-19):
# A good source for time zone historical data in the US is
# Thomas G. Shanks, The American Atlas (5th edition),
# San Diego: ACS Publications, Inc. (1991).
# Make sure you have the errata sheet; the book is somewhat useless without it.
-# It is the source for most of the pre-1991 US and Puerto Rico entries below.
+# It is the source for the US and Puerto Rico entries below.
# From Paul Eggert (2001-03-06):
# Daylight Saving Time was first suggested as a joke by Benjamin Franklin
@@ -54,8 +48,7 @@
# to push people into bed earlier, and get them up earlier, to make
# them healthy, wealthy and wise in spite of themselves.
#
-# -- Robertson Davies, The diary of Samuel Marchbanks,
-# Clarke, Irwin (1947), XIX, Sunday
+# -- Robertson Davies, The Diary of Samuel Marchbanks (1947), XIX, Sunday
#
# For more about the first ten years of DST in the United States, see
# Robert Garland's <a href="http://www.clpgh.org/exhibit/dst.html">
@@ -85,7 +78,7 @@
# Time' instead of the old familiar 'Eastern War Time.' Peace is wonderful."
# </a> (August 1945) by way of confirmation.
-# From Joseph Gallant citing
+# From Joseph Gallant <notquite@hotmail.com>, citing
# George H. Douglas, _The Early Days of Radio Broadcasting_ (1987):
# At 7 P.M. (Eastern War Time) [on 1945-08-14], the networks were set
# to switch to London for Attlee's address, but the American people
@@ -112,46 +105,21 @@
#
# He had scored a 20-second scoop on other broadcasters.
-# From Arthur David Olson (2005-08-22):
-# Paul has been careful to use the "US" rules only in those locations
-# that are part of the United States; this reflects the real scope of
-# U.S. government action. So even though the "US" rules have changed
-# in the latest release, other countries won't be affected.
-
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule US 1918 1919 - Mar lastSun 2:00 1:00 D
Rule US 1918 1919 - Oct lastSun 2:00 0 S
Rule US 1942 only - Feb 9 2:00 1:00 W # War
Rule US 1945 only - Aug 14 23:00u 1:00 P # Peace
Rule US 1945 only - Sep 30 2:00 0 S
-Rule US 1967 2006 - Oct lastSun 2:00 0 S
+Rule US 1967 max - Oct lastSun 2:00 0 S
Rule US 1967 1973 - Apr lastSun 2:00 1:00 D
Rule US 1974 only - Jan 6 2:00 1:00 D
Rule US 1975 only - Feb 23 2:00 1:00 D
Rule US 1976 1986 - Apr lastSun 2:00 1:00 D
-Rule US 1987 2006 - Apr Sun>=1 2:00 1:00 D
-Rule US 2007 max - Mar Sun>=8 2:00 1:00 D
-Rule US 2007 max - Nov Sun>=1 2:00 0 S
-
-# From Arthur David Olson, 2005-12-19
-# We generate the files specified below to guard against old files with
-# obsolete information being left in the time zone binary directory.
-# We limit the list to names that have appeared in previous versions of
-# this time zone package.
-# We do these as separate Zones rather than as Links to avoid problems if
-# a particular place changes whether it observes DST.
-# We put these specifications here in the northamerica file both to
-# increase the chances that they'll actually get compiled and to
-# avoid the need to duplicate the US rules in another file.
-
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone EST -5:00 - EST
-Zone MST -7:00 - MST
-Zone HST -10:00 - HST
-Zone EST5EDT -5:00 US E%sT
-Zone CST6CDT -6:00 US C%sT
-Zone MST7MDT -7:00 US M%sT
-Zone PST8PDT -8:00 US P%sT
+Rule US 1987 max - Apr Sun>=1 2:00 1:00 D
+# <a href="http://thomas.loc.gov/cgi-bin/bdquery/z?d106:h.r.00177:">
+# H.R.177
+# </a> (introduced 1999-01-06) would change April to March in the above rule.
# From Bob Devine (1988-01-28):
# ...Alaska (and Hawaii) had the timezone names changed in 1967.
@@ -229,53 +197,17 @@ Zone PST8PDT -8:00 US P%sT
# Public law 106-564 (2000-12-23) introduced the abbreviation
# "Chamorro Standard Time" for time in Guam and the Northern Marianas.
# See the file "australasia".
-
-# From Arthur David Olson, 2005-08-09
-# The following was signed into law on 2005-08-08.
-#
-# H.R. 6, Energy Policy Act of 2005, SEC. 110. DAYLIGHT SAVINGS.
-# (a) Amendment- Section 3(a) of the Uniform Time Act of 1966 (15
-# U.S.C. 260a(a)) is amended--
-# (1) by striking `first Sunday of April' and inserting `second
-# Sunday of March'; and
-# (2) by striking `last Sunday of October' and inserting `first
-# Sunday of November'.
-# (b) Effective Date- Subsection (a) shall take effect 1 year after the
-# date of enactment of this Act or March 1, 2007, whichever is later.
-# (c) Report to Congress- Not later than 9 months after the effective
-# date stated in subsection (b), the Secretary shall report to Congress
-# on the impact of this section on energy consumption in the United
-# States.
-# (d) Right to Revert- Congress retains the right to revert the
-# Daylight Saving Time back to the 2005 time schedules once the
-# Department study is complete.
+
# US eastern time, represented by New York
# Connecticut, Delaware, District of Columbia, most of Florida,
-# Georgia, southeast Indiana (Dearborn and Ohio counties), eastern Kentucky
-# (except America/Kentucky/Louisville below), Maine, Maryland, Massachusetts,
+# Georgia, southeast Indiana (Clark, Dearborn, Floyd, Harrison, and
+# Ohio counties), eastern Kentucky, Maine, Maryland, Massachusetts,
# New Hampshire, New Jersey, New York, North Carolina, Ohio,
# Pennsylvania, Rhode Island, South Carolina, eastern Tennessee,
# Vermont, Virginia, West Virginia
-# From Dave Cantor (2004-11-02):
-# Early this summer I had the occasion to visit the Mount Washington
-# Observatory weather station atop (of course!) Mount Washington [, NH]....
-# One of the staff members said that the station was on Eastern Standard Time
-# and didn't change their clocks for Daylight Saving ... so that their
-# reports will always have times which are 5 hours behind UTC.
-
-# From Paul Eggert (2005-08-26):
-# According to today's Huntsville Times
-# <http://www.al.com/news/huntsvilletimes/index.ssf?/base/news/1125047783228320.xml&coll=1>
-# a few towns on Alabama's "eastern border with Georgia, such as Phenix City
-# in Russell County, Lanett in Chambers County and some towns in Lee County,
-# set their watches and clocks on Eastern time." It quotes H.H. "Bubba"
-# Roberts, city administrator in Phenix City. as saying "We are in the Central
-# time zone, but we do go by the Eastern time zone because so many people work
-# in Columbus."
-
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
Rule NYC 1920 only - Mar lastSun 2:00 1:00 D
Rule NYC 1920 only - Oct lastSun 2:00 0 S
@@ -283,7 +215,7 @@ Rule NYC 1921 1966 - Apr lastSun 2:00 1:00 D
Rule NYC 1921 1954 - Sep lastSun 2:00 0 S
Rule NYC 1955 1966 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/New_York -4:56:02 - LMT 1883 Nov 18 12:03:58
+Zone America/New_York -4:56:02 - LMT 1883 Nov 18 12:00
-5:00 US E%sT 1920
-5:00 NYC E%sT 1942
-5:00 US E%sT 1946
@@ -309,7 +241,7 @@ Rule Chicago 1922 1966 - Apr lastSun 2:00 1:00 D
Rule Chicago 1922 1954 - Sep lastSun 2:00 0 S
Rule Chicago 1955 1966 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 12:09:24
+Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 12:00
-6:00 US C%sT 1920
-6:00 Chicago C%sT 1936 Mar 1 2:00
-5:00 - EST 1936 Nov 15 2:00
@@ -318,17 +250,9 @@ Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 12:09:24
-6:00 Chicago C%sT 1967
-6:00 US C%sT
# Oliver County, ND switched from mountain to central time on 1992-10-25.
-Zone America/North_Dakota/Center -6:45:12 - LMT 1883 Nov 18 12:14:48
+Zone America/North_Dakota/Center -6:45:12 - LMT 1883 Nov 18 12:00
-7:00 US M%sT 1992 Oct 25 02:00
-6:00 US C%sT
-# From Paul Eggert (2006-01-20):
-# The following is not implemented yet.
-# What is the most populous city in that area?
-# From http://www.statoids.com/tus.html (2006-01-20):
-# 2003-10-26 02:00: All of Morton County, ND, and the part of Sioux
-# County, ND east of ND route 31 moved from MT to CT. (The area
-# around Fort Yates in Sioux County and the area around Mandan in
-# Morton County were already in CT.)
# US mountain time, represented by Denver
#
@@ -345,7 +269,7 @@ Rule Denver 1921 only - May 22 2:00 0 S
Rule Denver 1965 1966 - Apr lastSun 2:00 1:00 D
Rule Denver 1965 1966 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Denver -6:59:56 - LMT 1883 Nov 18 12:00:04
+Zone America/Denver -6:59:56 - LMT 1883 Nov 18 12:00
-7:00 US M%sT 1920
-7:00 Denver M%sT 1942
-7:00 US M%sT 1946
@@ -365,7 +289,7 @@ Rule CA 1950 1966 - Apr lastSun 2:00 1:00 D
Rule CA 1950 1961 - Sep lastSun 2:00 0 S
Rule CA 1962 1966 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 12:07:02
+Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 12:00
-8:00 US P%sT 1946
-8:00 CA P%sT 1967
-8:00 US P%sT
@@ -431,26 +355,10 @@ Zone America/Adak 12:13:21 - LMT 1867 Oct 18
-11:00 US B%sT 1983 Oct 30 2:00
-10:00 US AH%sT 1983 Nov 30
-10:00 US HA%sT
-# The following switches don't quite make our 1970 cutoff.
-#
# Shanks writes that part of southwest Alaska (e.g. Aniak)
# switched from -11:00 to -10:00 on 1968-09-22 at 02:00,
# and another part (e.g. Akiak) made the same switch five weeks later.
-#
-# From David Flater (2004-11-09):
-# In e-mail, 2004-11-02, Ray Hudson, historian/liaison to the Unalaska
-# Historic Preservation Commission, provided this information, which
-# suggests that Unalaska deviated from statutory time from early 1967
-# possibly until 1983:
-#
-# Minutes of the Unalaska City Council Meeting, January 10, 1967:
-# "Except for St. Paul and Akutan, Unalaska is the only important
-# location not on Alaska Standard Time. The following resolution was
-# made by William Robinson and seconded by Henry Swanson: Be it
-# resolved that the City of Unalaska hereby goes to Alaska Standard
-# Time as of midnight Friday, January 13, 1967 (1 A.M. Saturday,
-# January 14, Alaska Standard Time.) This resolution was passed with
-# three votes for and one against."
+# These switches don't quite make our 1970 cutoff.
# Hawaii
#
@@ -492,7 +400,7 @@ Zone Pacific/Honolulu -10:31:26 - LMT 1900 Jan 1 12:00
# Shanks says the 1944 experiment came to an end on 1944-03-17.
# Go with the Arizona State Library instead.
-Zone America/Phoenix -7:28:18 - LMT 1883 Nov 18 11:31:42
+Zone America/Phoenix -7:28:18 - LMT 1883 Nov 18 12:00
-7:00 US M%sT 1944 Jan 1 00:01
-7:00 - MST 1944 Apr 1 00:01
-7:00 US M%sT 1944 Oct 1 00:01
@@ -514,9 +422,9 @@ Link America/Denver America/Shiprock
# Lemhi, Lincoln, Madison, Minidoka, Oneida, Owyhee, Payette, Power,
# Teton, Twin Falls, Valley, Washington counties) and eastern Oregon
# switched four weeks late in 1974.
-#
+#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11
+Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:00
-8:00 US P%sT 1923 May 13 2:00
-7:00 US M%sT 1974
-7:00 - MST 1974 Feb 3 2:00
@@ -527,55 +435,40 @@ Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11
# For a map of Indiana's time zone regions, see:
# <a href="http://www.mccsc.edu/time.html">
# What time is it in Indiana?
-# </a> (2005-10-30)
-#
-# From Paul Eggert (2006-01-20):
-# Since 1970, most of Indiana has been like America/Indiana/Indianapolis,
-# with the following exceptions:
-#
-# - Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer,
-# Vandenburgh, and Warrick counties have been like America/Chicago.
-#
-# - Dearborn and Ohio counties have been like America/New_York.
+# </a> (1999-04-06)
#
-# - Clark, Floyd, and Harrison counties have been like
-# America/Kentucky/Louisville.
-#
-# - Daviess, Dubois, Knox, Martin, Perry, and Pulaski counties
-# have been like America/Indiana/Vincennes.
-#
-# - Crawford, Pike, Starke, and Switzerland counties have their own time zone
-# histories as noted below.
-#
-# Shanks partitioned Indiana into 345 regions, each with its own time history,
-# and wrote ``Even newspaper reports present contradictory information.''
+# From Paul Eggert (1995-12-19):
+# Indiana generally observes either EST all year, or CST/CDT,
+# but areas near Cincinnati and Louisville use those cities' timekeeping
+# and in 1969 and 1970 the whole state observed daylight time;
+# and there are other exceptions as noted below.
+# Shanks partitions Indiana into 345 regions, each with its own time history,
+# and writes ``Even newspaper reports present contradictory information.''
# Fortunately, most of the complexity occurred before our cutoff date of 1970.
#
+# Since 1970, EST-only Indiana has been like America/Indianapolis,
+# with exceptions noted below for Crawford, Starke, and Switzerland counties.
+# The parts of Indiana not listed below have been like America/Chicago,
+# America/Louisville, or America/New_York.
+#
# Other than Indianapolis, the Indiana place names are so nondescript
# that they would be ambiguous if we left them at the `America' level.
# So we reluctantly put them all in a subdirectory `America/Indiana'.
+#
+# Most of EST-only Indiana last observed DST in 1970.
-# From Paul Eggert (2005-08-16):
-# http://www.mccsc.edu/time.html says that Indiana will use DST starting 2006.
-
-# From Deborah Goldsmith (2006-01-18):
-# http://dmses.dot.gov/docimages/pdf95/382329_web.pdf
-# From Paul Eggert (2006-01-20):
-# It says "DOT is relocating the time zone boundary in Indiana to move Starke,
-# Pulaski, Knox, Daviess, Martin, Pike, Dubois, and Perry Counties from the
-# Eastern Time Zone to the Central Time Zone.... The effective date of
-# this rule is 2:OO a.m. EST Sunday, April 2, 2006, which is the
-# changeover date from standard time to Daylight Saving Time."
-# Strictly speaking, this means the affected counties will change their
-# clocks twice that night, but this obviously is in error. The intent
-# is that 01:59:59 EST be followed by 02:00:00 CDT.
+# From Paul Eggert (2001-03-06), following a tip by Markus Kuhn:
+# Pam Belluck reported in the New York Times (2001-01-31) that the
+# Indiana Legislature is considering a bill to adopt DST statewide.
+# Her article mentioned Vevay, whose post office observes a different
+# time zone from Danner's Hardware across the street.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
Rule Indianapolis 1941 only - Jun 22 2:00 1:00 D
Rule Indianapolis 1941 1954 - Sep lastSun 2:00 0 S
Rule Indianapolis 1946 1954 - Apr lastSun 2:00 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
+Zone America/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:00
-6:00 US C%sT 1920
-6:00 Indianapolis C%sT 1942
-6:00 US C%sT 1946
@@ -584,66 +477,27 @@ Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
-6:00 - CST 1958 Apr 27 2:00
-5:00 - EST 1969
-5:00 US E%sT 1971
- -5:00 - EST 2006
- -5:00 US E%sT
+ -5:00 - EST
+Link America/Indianapolis America/Indiana/Indianapolis
#
-# Eastern Crawford County, Indiana, left its clocks alone in 1974,
-# as well as from 1976 through 2005.
+# Part of Crawford County, Indiana, last observed DST in 1975,
+# and left its clocks alone in 1974.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
Rule Marengo 1951 only - Apr lastSun 2:00 1:00 D
Rule Marengo 1951 only - Sep lastSun 2:00 0 S
Rule Marengo 1954 1960 - Apr lastSun 2:00 1:00 D
Rule Marengo 1954 1960 - Sep lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Indiana/Marengo -5:45:23 - LMT 1883 Nov 18 12:14:37
+Zone America/Indiana/Marengo -5:45:23 - LMT 1883 Nov 18 12:00
-6:00 US C%sT 1951
-6:00 Marengo C%sT 1961 Apr 30 2:00
-5:00 - EST 1969
-5:00 US E%sT 1974 Jan 6 2:00
-6:00 1:00 CDT 1974 Oct 27 2:00
-5:00 US E%sT 1976
- -5:00 - EST 2006
- -5:00 US E%sT
-#
-# Daviess, Dubois, Knox, Martin, Perry, and Pulaski Counties, Indiana,
-# switched from eastern to central time in April 2006.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-Rule Vincennes 1946 only - Apr lastSun 2:00 1:00 D
-Rule Vincennes 1946 only - Sep lastSun 2:00 0 S
-Rule Vincennes 1953 1954 - Apr lastSun 2:00 1:00 D
-Rule Vincennes 1953 1959 - Sep lastSun 2:00 0 S
-Rule Vincennes 1955 only - May 1 0:00 1:00 D
-Rule Vincennes 1956 1963 - Apr lastSun 2:00 1:00 D
-Rule Vincennes 1960 only - Oct lastSun 2:00 0 S
-Rule Vincennes 1961 only - Sep lastSun 2:00 0 S
-Rule Vincennes 1962 1963 - Oct lastSun 2:00 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Indiana/Vincennes -5:50:07 - LMT 1883 Nov 18 12:09:53
- -6:00 US C%sT 1946
- -6:00 Vincennes C%sT 1964 Apr 26 2:00
- -5:00 - EST 1969
- -5:00 US E%sT 1971
- -5:00 - EST 2006 Apr 2 2:00
- -6:00 US C%sT
-#
-# Pike County, Indiana moved from central to eastern time in 1977,
-# then switched back in 2006.
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-Rule Pike 1955 only - May 1 0:00 1:00 D
-Rule Pike 1955 1960 - Sep lastSun 2:00 0 S
-Rule Pike 1956 1964 - Apr lastSun 2:00 1:00 D
-Rule Pike 1961 1964 - Oct lastSun 2:00 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Indiana/Petersburg -5:49:07 - LMT 1883 Nov 18 12:10:53
- -6:00 US C%sT 1955
- -6:00 Pike C%sT 1965 Apr 25 2:00
- -5:00 - EST 1966 Oct 30 2:00
- -6:00 US C%sT 1977 Oct 30 2:00
- -5:00 - EST 2006 Apr 2 2:00
- -6:00 US C%sT
+ -5:00 - EST
#
-# Starke County, Indiana moved from central to eastern time in 1991,
-# then switched back in 2006.
+# Starke County, Indiana
# From Arthur David Olson (1991-10-28):
# An article on page A3 of the Sunday, 1991-10-27 Washington Post
# notes that Starke County switched from Central time to Eastern time as of
@@ -655,25 +509,23 @@ Rule Starke 1955 1956 - Oct lastSun 2:00 0 S
Rule Starke 1957 1958 - Sep lastSun 2:00 0 S
Rule Starke 1959 1961 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Indiana/Knox -5:46:30 - LMT 1883 Nov 18 12:13:30
+Zone America/Indiana/Knox -5:46:30 - LMT 1883 Nov 18 12:00
-6:00 US C%sT 1947
-6:00 Starke C%sT 1962 Apr 29 2:00
-5:00 - EST 1963 Oct 27 2:00
-6:00 US C%sT 1991 Oct 27 2:00
- -5:00 - EST 2006 Apr 2 2:00
- -6:00 US C%sT
+ -5:00 - EST
#
-# Switzerland County, Indiana, did not observe DST from 1973 through 2005.
+# Switzerland County, Indiana, last observed DST in 1972.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Indiana/Vevay -5:40:16 - LMT 1883 Nov 18 12:19:44
+Zone America/Indiana/Vevay -5:40:16 - LMT 1883 Nov 18 12:00
-6:00 US C%sT 1954 Apr 25 2:00
-5:00 - EST 1969
-5:00 US E%sT 1973
- -5:00 - EST 2006
- -5:00 US E%sT
+ -5:00 - EST
# Part of Kentucky left its clocks alone in 1974.
-# This also includes Clark, Floyd, and Harrison counties in Indiana.
+# This also includes a part of Indiana immediately adjacent to Louisville.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
Rule Louisville 1921 only - May 1 2:00 1:00 D
Rule Louisville 1921 only - Sep 1 2:00 0 S
@@ -683,7 +535,7 @@ Rule Louisville 1946 only - Jun 2 2:00 0 S
Rule Louisville 1950 1955 - Sep lastSun 2:00 0 S
Rule Louisville 1956 1960 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Kentucky/Louisville -5:43:02 - LMT 1883 Nov 18 12:16:58
+Zone America/Louisville -5:43:02 - LMT 1883 Nov 18 12:00
-6:00 US C%sT 1921
-6:00 Louisville C%sT 1942
-6:00 US C%sT 1946
@@ -692,8 +544,9 @@ Zone America/Kentucky/Louisville -5:43:02 - LMT 1883 Nov 18 12:16:58
-5:00 US E%sT 1974 Jan 6 2:00
-6:00 1:00 CDT 1974 Oct 27 2:00
-5:00 US E%sT
+Link America/Louisville America/Kentucky/Louisville
#
-# Wayne County, Kentucky
+# Wayne, Clinton, and Russell Counties, Kentucky
#
# From
# <a href="http://www.lake-cumberland.com/life/archive/news990129time.shtml">
@@ -719,7 +572,7 @@ Zone America/Kentucky/Louisville -5:43:02 - LMT 1883 Nov 18 12:16:58
# Federal Register 65, 160 (2000-08-17), page 50154-50158.
# </a>
#
-Zone America/Kentucky/Monticello -5:39:24 - LMT 1883 Nov 18 12:20:36
+Zone America/Kentucky/Monticello -5:39:24 - LMT 1883 Nov 18 12:00
-6:00 US C%sT 1946
-6:00 - CST 1968
-6:00 US C%sT 2000 Oct 29 2:00
@@ -790,8 +643,7 @@ Zone America/Detroit -5:32:11 - LMT 1905
-5:00 - EST 1975 Apr 27 2:00
-5:00 US E%sT
#
-# Dickinson, Gogebic, Iron, and Menominee Counties, Michigan,
-# switched from EST to CST/CDT in 1973.
+# The Michigan border with Wisconsin switched from EST to CST/CDT in 1973.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
Rule Menominee 1946 only - Apr lastSun 2:00 1:00 D
Rule Menominee 1946 only - Sep lastSun 2:00 0 S
@@ -815,10 +667,21 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
# _Los Angeles Times_ (1998-11-10), A1, A10; it cites
# Jimmy Skaggs, _The Great Guano Rush_ (1994).
+# Old names, for S5 users
+
+# Link LINK-FROM LINK-TO
+Link America/New_York EST5EDT
+Link America/Chicago CST6CDT
+Link America/Denver MST7MDT
+Link America/Los_Angeles PST8PDT
+Link America/Indianapolis EST
+Link America/Phoenix MST
+Link Pacific/Honolulu HST
+
################################################################################
-# From Paul Eggert (1999-10-29):
+# From Paul Eggert <eggert@twinsun.com> (1999-10-29):
# A good source for time zone historical data outside the US is
# Thomas G. Shanks, The International Atlas (5th edition),
# San Diego: ACS Publications, Inc. (1999).
@@ -846,7 +709,7 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
# Canada
-# From Alain LaBont<e'> (1994-11-14):
+# From Alain LaBont<e'> <ALB@immedia.ca> (1994-11-14):
# I post here the time zone abbreviations standardized in Canada
# for both English and French in the CAN/CSA-Z234.4-89 standard....
#
@@ -875,42 +738,23 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
# T: de Terre-Neuve
# Y: du Yukon Yukon
#
-# From Paul Eggert (1994-11-22):
+# From Paul Eggert <eggert@twinsun.com> (1994-11-22):
# Alas, this sort of thing must be handled by localization software.
# Unless otherwise specified, the data for Canada are all from Shanks.
-# From Paul Eggert (2005-12-21):
+# From Paul Eggert (2000-10-02):
# H. David Matthews and Mary Vincent's map
-# <a href="http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp">
+# <a href="http://www.canadiangeographic.ca/SO98/geomap.htm">
# "It's about TIME", _Canadian Geographic_ (September-October 1998)
# </a> contains detailed boundaries for regions observing nonstandard
# time and daylight saving time arrangements in Canada circa 1998.
#
-# INMS, the Institute for National Measurement Standards in Ottawa, has <a
-# href="http://inms-ienm.nrc-cnrc.gc.ca/en/time_services/daylight_saving_e.php">
+# INMS, the Institute for National Measurement Standards in Ottawa, has
+# <a href="http://www.nrc.ca/inms/time/tze.html">
# information about standard and daylight saving time zones in Canada.
# </a> (updated periodically).
# Its unofficial information is often taken from Matthews and Vincent.
-#
-# CBC News reported that Ontario and Manitoba have announced plans to
-# follow the US change, and that Nova Scotia is considering it; see
-# <http://www.cbc.ca/news/background/daylightsavingtime/> (2005-10-21).
-# CBC news also reported that Prince Edward Island is the first
-# province in Atlantic Canada to follow the US change, and that Quebec
-# had agreed; see <http://www.cbc.ca/pei/story/pe_daylight_20051207.html>
-# (2005-12-07).
-#
-# To reflect all this, the Canada and Winn rules have been adjusted to
-# agree with the 2007 US change. This means we assume most of Canada
-# will fall into line. However, Alberta, British Columbia,
-# Newfoundland, Northwest Territories, and Yukon already have separate
-# rules in our database, so for now we'll leave them alone, which
-# means that we currently assume these regions will not change their
-# rules and will disagree with the US starting in 2007. This
-# assumption is probably incorrect, with the possible exception of
-# Newfoundland. We plan to adjust the Edm, Vanc, StJohns, and NT_YK
-# rules as the corresponding provinces make their announcements.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Canada 1918 only - Apr 14 2:00 1:00 D
@@ -919,10 +763,8 @@ Rule Canada 1942 only - Feb 9 2:00 1:00 W # War
Rule Canada 1945 only - Aug 14 23:00u 1:00 P # Peace
Rule Canada 1945 only - Sep 30 2:00 0 S
Rule Canada 1974 1986 - Apr lastSun 2:00 1:00 D
-Rule Canada 1974 2006 - Oct lastSun 2:00 0 S
-Rule Canada 1987 2006 - Apr Sun>=1 2:00 1:00 D
-Rule Canada 2007 max - Mar Sun>=8 2:00 1:00 D
-Rule Canada 2007 max - Nov Sun>=1 2:00 0 S
+Rule Canada 1974 max - Oct lastSun 2:00 0 S
+Rule Canada 1987 max - Apr Sun>=1 2:00 1:00 D
# Newfoundland (and far southeast Labrador)
@@ -987,7 +829,7 @@ Zone America/Goose_Bay -4:01:40 - LMT 1884 # Happy Valley-Goose Bay
-4:00 StJohns A%sT
-# west Labrador, Nova Scotia, Prince Edward I
+# west Labrador, New Brunswick, Nova Scotia, Prince Edward I
# From Paul Eggert (1996-06-12):
# Shanks writes that since 1970 most of this region has been like Halifax.
@@ -996,48 +838,53 @@ Zone America/Goose_Bay -4:01:40 - LMT 1884 # Happy Valley-Goose Bay
# Shanks also writes that Liverpool, NS was the only town in Canada to observe
# DST in 1971 but not 1970; for now we'll assume this is a typo.
+# From Paul Eggert (2000-10-02):
+# INMS (2000-09-12) says that, since 1988 at least, New Brunswick switches
+# at 00:01 local time. FIXME: verify and create a new Zone for this.
+
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Halifax 1916 only - Apr 1 0:00 1:00 D
-Rule Halifax 1916 only - Oct 1 0:00 0 S
-Rule Halifax 1920 only - May 9 0:00 1:00 D
-Rule Halifax 1920 only - Aug 29 0:00 0 S
-Rule Halifax 1921 only - May 6 0:00 1:00 D
-Rule Halifax 1921 1922 - Sep 5 0:00 0 S
-Rule Halifax 1922 only - Apr 30 0:00 1:00 D
-Rule Halifax 1923 1925 - May Sun>=1 0:00 1:00 D
-Rule Halifax 1923 only - Sep 4 0:00 0 S
-Rule Halifax 1924 only - Sep 15 0:00 0 S
-Rule Halifax 1925 only - Sep 28 0:00 0 S
-Rule Halifax 1926 only - May 16 0:00 1:00 D
-Rule Halifax 1926 only - Sep 13 0:00 0 S
-Rule Halifax 1927 only - May 1 0:00 1:00 D
-Rule Halifax 1927 only - Sep 26 0:00 0 S
-Rule Halifax 1928 1931 - May Sun>=8 0:00 1:00 D
-Rule Halifax 1928 only - Sep 9 0:00 0 S
-Rule Halifax 1929 only - Sep 3 0:00 0 S
-Rule Halifax 1930 only - Sep 15 0:00 0 S
-Rule Halifax 1931 1932 - Sep Mon>=24 0:00 0 S
-Rule Halifax 1932 only - May 1 0:00 1:00 D
-Rule Halifax 1933 only - Apr 30 0:00 1:00 D
-Rule Halifax 1933 only - Oct 2 0:00 0 S
-Rule Halifax 1934 only - May 20 0:00 1:00 D
-Rule Halifax 1934 only - Sep 16 0:00 0 S
-Rule Halifax 1935 only - Jun 2 0:00 1:00 D
-Rule Halifax 1935 only - Sep 30 0:00 0 S
-Rule Halifax 1936 only - Jun 1 0:00 1:00 D
-Rule Halifax 1936 only - Sep 14 0:00 0 S
-Rule Halifax 1937 1938 - May Sun>=1 0:00 1:00 D
-Rule Halifax 1937 1941 - Sep Mon>=24 0:00 0 S
-Rule Halifax 1939 only - May 28 0:00 1:00 D
-Rule Halifax 1940 1941 - May Sun>=1 0:00 1:00 D
-Rule Halifax 1946 1949 - Apr lastSun 2:00 1:00 D
-Rule Halifax 1946 1949 - Sep lastSun 2:00 0 S
-Rule Halifax 1951 1954 - Apr lastSun 2:00 1:00 D
-Rule Halifax 1951 1954 - Sep lastSun 2:00 0 S
-Rule Halifax 1956 1959 - Apr lastSun 2:00 1:00 D
-Rule Halifax 1956 1959 - Sep lastSun 2:00 0 S
-Rule Halifax 1962 1973 - Apr lastSun 2:00 1:00 D
-Rule Halifax 1962 1973 - Oct lastSun 2:00 0 S
+Rule Halifax 1916 only - Apr 1 0:00 1:00 D
+Rule Halifax 1916 only - Oct 1 0:00 0 S
+Rule Halifax 1920 only - May 9 0:00 1:00 D
+Rule Halifax 1920 only - Aug 29 0:00 0 S
+Rule Halifax 1921 only - May 6 0:00 1:00 D
+Rule Halifax 1921 1922 - Sep 5 0:00 0 S
+Rule Halifax 1922 only - Apr 30 0:00 1:00 D
+Rule Halifax 1923 1925 - May Sun>=1 0:00 1:00 D
+Rule Halifax 1923 only - Sep 4 0:00 0 S
+Rule Halifax 1924 only - Sep 15 0:00 0 S
+Rule Halifax 1925 only - Sep 28 0:00 0 S
+Rule Halifax 1926 only - May 16 0:00 1:00 D
+Rule Halifax 1926 only - Sep 13 0:00 0 S
+Rule Halifax 1927 only - May 1 0:00 1:00 D
+Rule Halifax 1927 only - Sep 26 0:00 0 S
+Rule Halifax 1928 1931 - May Sun>=8 0:00 1:00 D
+Rule Halifax 1928 only - Sep 9 0:00 0 S
+Rule Halifax 1929 only - Sep 3 0:00 0 S
+Rule Halifax 1930 only - Sep 15 0:00 0 S
+Rule Halifax 1931 1932 - Sep Mon>=24 0:00 0 S
+Rule Halifax 1932 only - May 1 0:00 1:00 D
+Rule Halifax 1933 only - Apr 30 0:00 1:00 D
+Rule Halifax 1933 only - Oct 2 0:00 0 S
+Rule Halifax 1934 only - May 20 0:00 1:00 D
+Rule Halifax 1934 only - Sep 16 0:00 0 S
+Rule Halifax 1935 only - Jun 2 0:00 1:00 D
+Rule Halifax 1935 only - Sep 30 0:00 0 S
+Rule Halifax 1936 only - Jun 1 0:00 1:00 D
+Rule Halifax 1936 only - Sep 14 0:00 0 S
+Rule Halifax 1937 1938 - May Sun>=1 0:00 1:00 D
+Rule Halifax 1937 1941 - Sep Mon>=24 0:00 0 S
+Rule Halifax 1939 only - May 28 0:00 1:00 D
+Rule Halifax 1940 1941 - May Sun>=1 0:00 1:00 D
+Rule Halifax 1946 1949 - Sep lastSun 2:00 0 S
+Rule Halifax 1946 1949 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1951 1954 - Sep lastSun 2:00 0 S
+Rule Halifax 1951 1954 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1956 1959 - Sep lastSun 2:00 0 S
+Rule Halifax 1956 1959 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1962 1973 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1962 1973 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Halifax -4:14:24 - LMT 1902 Jun 15
-4:00 Halifax A%sT 1918
@@ -1053,43 +900,6 @@ Zone America/Glace_Bay -3:59:48 - LMT 1902 Jun 15
-4:00 Halifax A%sT 1974
-4:00 Canada A%sT
-# New Brunswick
-
-# From Paul Eggert (2006-01-20):
-# New Brunswick's Time Definition Act
-# <http://www.gnb.ca/0062/PDF-acts/t-06.pdf> says they change at 00:01, and
-# <http://www.canlii.org/nb/laws/sta/t-6/20030127/whole.html> makes it
-# clear that this has been the case since at least 1993.
-# For now, assume it started in 1993. The Office of the Premier announced
-# <http://www.gnb.ca/cnb/news/pre/2005e1737pr.htm> (2005-12-23)
-# that they will bring forward proposed amendments to harmonize with the US;
-# for now assume that this will happen, but they'll still switch at 00:01.
-
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Moncton 1933 1935 - Jun Sun>=8 1:00 1:00 D
-Rule Moncton 1933 1935 - Sep Sun>=8 1:00 0 S
-Rule Moncton 1936 1938 - Jun Sun>=1 1:00 1:00 D
-Rule Moncton 1936 1938 - Sep Sun>=1 1:00 0 S
-Rule Moncton 1939 only - May 27 1:00 1:00 D
-Rule Moncton 1939 1941 - Sep Sat>=21 1:00 0 S
-Rule Moncton 1940 only - May 19 1:00 1:00 D
-Rule Moncton 1941 only - May 4 1:00 1:00 D
-Rule Moncton 1946 1972 - Apr lastSun 2:00 1:00 D
-Rule Moncton 1946 1956 - Sep lastSun 2:00 0 S
-Rule Moncton 1956 1972 - Oct lastSun 2:00 0 S
-Rule Moncton 1993 2006 - Apr Sun>=1 0:01 1:00 D
-Rule Moncton 1993 2006 - Oct lastSun 0:01 0 S
-Rule Moncton 2007 max - Mar Sun>=8 0:01 1:00 D
-Rule Moncton 2007 max - Nov Sun>=1 0:01 0 S
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
- -5:00 - EST 1902 Jun 15
- -4:00 Canada A%sT 1933
- -4:00 Moncton A%sT 1942
- -4:00 Canada A%sT 1946
- -4:00 Moncton A%sT 1973
- -4:00 Canada A%sT 1993
- -4:00 Moncton A%sT
# Ontario, Quebec
@@ -1280,13 +1090,11 @@ Rule Winn 1963 only - Apr lastSun 2:00 1:00 D
Rule Winn 1963 only - Sep 22 2:00 0 S
Rule Winn 1966 1986 - Apr lastSun 2:00 1:00 D
Rule Winn 1966 1986 - Oct lastSun 2:00 0 S
-Rule Winn 1987 2006 - Apr Sun>=1 2:00s 1:00 D
+Rule Winn 1987 max - Apr Sun>=1 2:00 1:00 D
# From Paul Eggert (2000-10-02):
# INMS (2000-09-12) says that, since 1988 at least, Manitoba switches from
# DST at 03:00 local time. For now, assume it started in 1987.
-Rule Winn 1987 2006 - Oct lastSun 2:00s 0 S
-Rule Winn 2007 max - Mar Sun>=8 2:00s 1:00 D
-Rule Winn 2007 max - Nov Sun>=1 2:00s 0 S
+Rule Winn 1987 max - Oct lastSun 2:00s 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Winnipeg -6:28:36 - LMT 1887 Jul 16
-6:00 Winn C%sT
@@ -1315,7 +1123,7 @@ Zone America/Winnipeg -6:28:36 - LMT 1887 Jul 16
# Matthews and Vincent (1998) write that Denare Beach and Creighton
# are like Winnipeg, in violation of Saskatchewan law.
-# From W. Jones (1992-11-06):
+# From W. Jones <jones@skdad.usask.ca> (1992-11-06):
# The. . .below is based on information I got from our law library, the
# provincial archives, and the provincial Community Services department.
# A precise history would require digging through newspaper archives, and
@@ -1433,7 +1241,7 @@ Zone America/Dawson_Creek -8:00:56 - LMT 1884
# From Paul Eggert (1999-10-29):
# Dawson switched to PST in 1973. Inuvik switched to MST in 1979.
-# Mathew Englander (1996-10-07) gives the following refs:
+# Mathew Englander <mathew@io.org> (1996-10-07) gives the following refs:
# * 1967. Paragraph 28(34)(g) of the Interpretation Act, S.C. 1967-68,
# c. 7 defines Yukon standard time as UTC-9. This is still valid;
# see Interpretation Act, R.S.C. 1985, c. I-21, s. 35(1).
@@ -1458,6 +1266,8 @@ Zone America/Dawson_Creek -8:00:56 - LMT 1884
# </a> (1999) reports that Pangnirtung operates on eastern time,
# and that Coral Harbour does not observe DST. We don't know when
# Pangnirtung switched to eastern time; we'll guess 1995.
+# We'll ignore the claim about Coral Harbour for now,
+# since we have no further info.
# From Rives McDow (1999-11-08):
# On October 31, when the rest of Nunavut went to Central time,
@@ -1532,23 +1342,6 @@ Zone America/Dawson_Creek -8:00:56 - LMT 1884
# more.
# [Also see <http://www.nunatsiaq.com/nunavut/nvt10309_06.html> (2001-03-09).]
-# From Gwillim Law (2005-05-21):
-# According to maps at
-# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SWE.jpg
-# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SSE.jpg
-# (both dated 2003), and
-# http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp
-# (from a 1998 Canadian Geographic article), the de facto and de jure time
-# for Southampton Island (at the north end of Hudson Bay) is UTC-5 all year
-# round. Using Google, it's easy to find other websites that confirm this.
-# I wasn't able to find how far back this time regimen goes, but since it
-# predates the creation of Nunavut, it probably goes back many years....
-# The Inuktitut name of Coral Harbour is Sallit, but it's rarely used.
-#
-# From Paul Eggert (2005-07-26):
-# For lack of better information, assume that Southampton Island observed
-# daylight saving only during wartime.
-
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule NT_YK 1918 only - Apr 14 2:00 1:00 D
Rule NT_YK 1918 only - Oct 27 2:00 0 S
@@ -1572,9 +1365,6 @@ Zone America/Iqaluit -4:33:52 - LMT 1884 # Frobisher Bay before 1987
-5:00 NT_YK E%sT 1999 Oct 31 2:00
-6:00 Canada C%sT 2000 Oct 29 2:00
-5:00 Canada E%sT
-Zone America/Coral_Harbour -5:32:40 - LMT 1884
- -5:00 NT_YK E%sT 1946
- -5:00 - EST
Zone America/Rankin_Inlet -6:08:40 - LMT 1884
-6:00 NT_YK C%sT 2000 Oct 29 2:00
-5:00 - EST 2001 Apr 1 3:00
@@ -1614,7 +1404,7 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
# Shanks reports that Baja was at -8:00 in 1922/1923.
# Shanks says the 1930 transition in Baja was 1930-11-16.
# Shanks reports no DST during summer 1931.
-# Shanks reports a transition at 1932-03-30 23:00, not 1932-04-01.
+# Shanks reports a transition at 1032-03-30 23:00, not 1932-04-01.
# Shanks does not report transitions for Baja in 1945 or 1948.
# Shanks reports southern Mexico transitions on 1981-12-01, not 12-23.
# Shanks says Quintana Roo switched to -6:00 on 1982-12-02, and to -5:00
@@ -1630,7 +1420,7 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
# Shanks gives 1942-04-01 instead of 1942-04-24, and omits the 1981
# and 1988 DST experiments. Go with spin.com.mx.
-# From Alan Perry (1996-02-15):
+# From Alan Perry <alan.perry@eng.sun.com> (1996-02-15):
# A guy from our Mexico subsidiary finally found the Presidential Decree
# outlining the timezone changes in Mexico.
#
@@ -1941,20 +1731,6 @@ Zone America/Costa_Rica -5:36:20 - LMT 1890 # San Jose
# to DST--and one more hour on 1999-04-04--when the announcers will have
# returned to Baltimore, which switches on that date.)
-# From Evert van der Veer via Steffen Thorsen (2004-10-28):
-# Cuba is not going back to standard time this year.
-# From Paul Eggert (2004-10-28):
-# http://www.granma.cu/ingles/2004/septiembre/juev30/41medid-i.html
-# says that it's due to a problem at the Antonio Guiteras
-# thermoelectric plant, and says "This October there will be no return
-# to normal hours (after daylight saving time)".
-# For now, let's assume that it's a one-year temporary measure.
-
-# From Carlos A. Carnero Delgado (2005-11-12):
-# This year (just like in 2004-2005) there's no change in time zone
-# adjustment in Cuba. We will stay in daylight saving time:
-# http://www.granma.cu/espanol/2005/noviembre/mier9/horario.html
-
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Cuba 1928 only - Jun 10 0:00 1:00 D
Rule Cuba 1928 only - Oct 10 0:00 0 S
@@ -1983,9 +1759,8 @@ Rule Cuba 1991 1995 - Oct Sun>=8 0:00s 0 S
Rule Cuba 1996 only - Oct 6 0:00s 0 S
Rule Cuba 1997 only - Oct 12 0:00s 0 S
Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D
-Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S
+Rule Cuba 1998 max - Oct lastSun 0:00s 0 S
Rule Cuba 2000 max - Apr Sun>=1 0:00s 1:00 D
-Rule Cuba 2006 max - Oct lastSun 0:00s 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Havana -5:29:28 - LMT 1890
@@ -2065,26 +1840,6 @@ Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5
-6:00 Guat C%sT
# Haiti
-# From Gwillim Law (2005-04-15):
-# Risto O. Nykanen wrote me that Haiti is now on DST.
-# I searched for confirmation, and I found a
-# <a href="http://www.haitianconsulate.org/time.doc"> press release
-# on the Web page of the Haitian Consulate in Chicago (2005-03-31),
-# </a>. Translated from French, it says:
-#
-# "The Prime Minister's Communication Office notifies the public in general
-# and the press in particular that, following a decision of the Interior
-# Ministry and the Territorial Collectivities [I suppose that means the
-# provinces], Haiti will move to Eastern Daylight Time in the night from next
-# Saturday the 2nd to Sunday the 3rd.
-#
-# "Consequently, the Prime Minister's Communication Office wishes to inform
-# the population that the country's clocks will be set forward one hour
-# starting at midnight. This provision will hold until the last Saturday in
-# October 2005.
-#
-# "Port-au-Prince, March 31, 2005"
-
# 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
@@ -2092,8 +1847,6 @@ Rule Haiti 1983 1987 - Oct lastSun 0:00 0 S
# Shanks says AT is 2:00, but IATA SSIM (1991/1997) says 1:00s. Go with IATA.
Rule Haiti 1988 1997 - Apr Sun>=1 1:00s 1:00 D
Rule Haiti 1988 1997 - Oct lastSun 1:00s 0 S
-Rule Haiti 2005 only - Apr Sun>=1 0:00 1:00 D
-Rule Haiti 2005 only - Oct lastSun 0: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
@@ -2145,44 +1898,11 @@ Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Olveston
# Nicaragua seems to be back at -6:00 but I have not been able to find when
# they changed from -5:00.
#
-# From Steffen Thorsen (2005-04-12):
-# I've got reports from 8 different people that Nicaragua just started
-# DST on Sunday 2005-04-10, in order to save energy because of
-# expensive petroleum. The exact end date for DST is not yet
-# announced, only "September" but some sites also say "mid-September".
-# Some background information is available on the President's official site:
-# http://www.presidencia.gob.ni/Presidencia/Files_index/Secretaria/Notas%20de%20Prensa/Presidente/2005/ABRIL/Gobierno-de-nicaragua-adelanta-hora-oficial-06abril.htm
-# The Decree, no 23-2005 is available here:
-# http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2005/Decreto%2023-2005%20Se%20adelanta%20en%20una%20hora%20en%20todo%20el%20territorio%20nacional%20apartir%20de%20las%2024horas%20del%2009%20de%20Abril.pdf
-#
-# From Paul Eggert (2005-05-01):
-# The decree doesn't say anything about daylight saving, but for now let's
-# assume that it is daylight saving and that they'll switch back on the
-# 3rd Sunday in September.
-#
-# From Gwillim Law (2005-04-21):
-# The Associated Press story on the time change, which can be found at
-# http://www.lapalmainteractivo.com/guias/content/gen/ap/America_Latina/AMC_GEN_NICARAGUA_HORA.html
-# and elsewhere, says (fifth paragraph, translated from Spanish): "The last
-# time that a change of clocks was applied to save energy was in the year 2000
-# during the Arnoldo Aleman administration."...
-# The northamerica file says that Nicaragua has been on UTC-6 continuously
-# since December 1998. I wasn't able to find any details of Nicaraguan time
-# changes in 2000. Perhaps a note could be added to the northamerica file, to
-# the effect that we have indirect evidence that DST was observed in 2000.
-#
-# From Jesper Norgaard Welen (2005-11-02):
-# Nicaragua left DST the 2005-10-02 at 00:00 (local time).
-# http://www.presidencia.gob.ni/presidencia/files_index/secretaria/comunicados/2005/septiembre/26septiembre-cambio-hora.htm
-# (2005-09-26)
-#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Nic 1979 1980 - Mar Sun>=16 0:00 1:00 D
Rule Nic 1979 1980 - Jun Mon>=23 0:00 0 S
-Rule Nic 1992 only - Jan 1 4:00 1:00 D
+Rule Nic 1992 only - Jan 1 4:00 1:00 D
Rule Nic 1992 only - Sep 24 0:00 0 S
-Rule Nic 2005 only - Apr 10 0:00 1:00 D
-Rule Nic 2005 only - Oct 2 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Managua -5:45:08 - LMT 1890
-5:45:12 - MMT 1934 Jun 23 # Managua Mean Time?
@@ -2190,7 +1910,7 @@ Zone America/Managua -5:45:08 - LMT 1890
-5:00 - EST 1975 Feb 16
-6:00 Nic C%sT 1993 Jan 1 4:00
-5:00 - EST 1998 Dec
- -6:00 Nic C%sT
+ -6:00 - CST
# Panama
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
diff --git a/timezone/pacificnew b/timezone/pacificnew
index 667940bf53..86dd688341 100644
--- a/timezone/pacificnew
+++ b/timezone/pacificnew
@@ -1,4 +1,4 @@
-# @(#)pacificnew 8.1
+# @(#)pacificnew 7.10
# From Arthur David Olson (1989-04-05):
# On 1989-04-05, the U. S. House of Representatives passed (238-154) a bill
diff --git a/timezone/private.h b/timezone/private.h
index 2837b70c10..57663052f0 100644
--- a/timezone/private.h
+++ b/timezone/private.h
@@ -4,7 +4,7 @@
/*
** This file is in the public domain, so clarified as of
-** 1996-06-05 by Arthur David Olson.
+** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
*/
/*
@@ -21,12 +21,10 @@
#ifndef lint
#ifndef NOID
-static char privatehid[] = "@(#)private.h 8.2";
+static char privatehid[] = "@(#)private.h 7.54";
#endif /* !defined NOID */
#endif /* !defined lint */
-#define GRANDPARENTED "Local time zone must be set--see zic manual page"
-
/*
** Defaults for preprocessor symbols.
** You can override these in your C compiler options, e.g. `-DHAVE_ADJTIME=0'.
@@ -89,17 +87,17 @@ static char privatehid[] = "@(#)private.h 8.2";
#include "stdio.h"
#include "errno.h"
#include "string.h"
-#include "limits.h" /* for CHAR_BIT et al. */
+#include "limits.h" /* for CHAR_BIT */
#include "time.h"
#include "stdlib.h"
-#if HAVE_GETTEXT
+#if HAVE_GETTEXT - 0
#include "libintl.h"
-#endif /* HAVE_GETTEXT */
+#endif /* HAVE_GETTEXT - 0 */
-#if HAVE_SYS_WAIT_H
+#if HAVE_SYS_WAIT_H - 0
#include <sys/wait.h> /* for WIFEXITED and WEXITSTATUS */
-#endif /* HAVE_SYS_WAIT_H */
+#endif /* HAVE_SYS_WAIT_H - 0 */
#ifndef WIFEXITED
#define WIFEXITED(status) (((status) & 0xff) == 0)
@@ -108,68 +106,37 @@ static char privatehid[] = "@(#)private.h 8.2";
#define WEXITSTATUS(status) (((status) >> 8) & 0xff)
#endif /* !defined WEXITSTATUS */
-#if HAVE_UNISTD_H
+#if HAVE_UNISTD_H - 0
#include "unistd.h" /* for F_OK and R_OK */
-#endif /* HAVE_UNISTD_H */
+#endif /* HAVE_UNISTD_H - 0 */
-#if !HAVE_UNISTD_H
+#if !(HAVE_UNISTD_H - 0)
#ifndef F_OK
#define F_OK 0
#endif /* !defined F_OK */
#ifndef R_OK
#define R_OK 4
#endif /* !defined R_OK */
-#endif /* !HAVE_UNISTD_H */
+#endif /* !(HAVE_UNISTD_H - 0) */
-/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */
+/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */
#define is_digit(c) ((unsigned)(c) - '0' <= 9)
/*
-** Define HAVE_STDINT_H's default value here, rather than at the
-** start, since __GLIBC__'s value depends on previously-included
-** files.
-** (glibc 2.1 and later have stdint.h, even with pre-C99 compilers.)
-*/
-#ifndef HAVE_STDINT_H
-#define HAVE_STDINT_H \
- (199901 <= __STDC_VERSION__ || \
- 2 < (__GLIBC__ + (0 < __GLIBC_MINOR__)))
-#endif /* !defined HAVE_STDINT_H */
-
-#if HAVE_STDINT_H
-#include "stdint.h"
-#endif /* !HAVE_STDINT_H */
-
-#ifndef INT_FAST64_MAX
-/* Pre-C99 GCC compilers define __LONG_LONG_MAX__ instead of LLONG_MAX. */
-#if defined LLONG_MAX || defined __LONG_LONG_MAX__
-typedef long long int_fast64_t;
-#else /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
-#if (LONG_MAX >> 31) < 0xffffffff
-Please use a compiler that supports a 64-bit integer type (or wider);
-you may need to compile with "-DHAVE_STDINT_H".
-#endif /* (LONG_MAX >> 31) < 0xffffffff */
-typedef long int_fast64_t;
-#endif /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
-#endif /* !defined INT_FAST64_MAX */
-
-#ifndef INT32_MAX
-#define INT32_MAX 0x7fffffff
-#endif /* !defined INT32_MAX */
-#ifndef INT32_MIN
-#define INT32_MIN (-1 - INT32_MAX)
-#endif /* !defined INT32_MIN */
-
-/*
** Workarounds for compilers/systems.
*/
/*
-** If your compiler lacks prototypes, "#define P(x) ()".
+** SunOS 4.1.1 cc lacks prototypes.
*/
#ifndef P
+#ifdef __STDC__
#define P(x) x
+#endif /* defined __STDC__ */
+#ifndef __STDC__
+#define P(x) ()
+#endif /* !defined __STDC__ */
#endif /* !defined P */
/*
@@ -241,15 +208,15 @@ extern char * asctime_r();
/*
** Private function declarations.
*/
+char * icalloc P((int nelem, int elsize));
+char * icatalloc P((char * old, const char * new));
+char * icpyalloc P((const char * string));
+char * imalloc P((int n));
+void * irealloc P((void * pointer, int size));
+void icfree P((char * pointer));
+void ifree P((char * pointer));
+char * scheck P((const char *string, const char *format));
-char * icalloc P((int nelem, int elsize));
-char * icatalloc P((char * old, const char * new));
-char * icpyalloc P((const char * string));
-char * imalloc P((int n));
-void * irealloc P((void * pointer, int size));
-void icfree P((char * pointer));
-void ifree P((char * pointer));
-const char * scheck P((const char * string, const char * format));
/*
** Finally, some convenience items.
@@ -271,15 +238,6 @@ const char * scheck P((const char * string, const char * format));
#define TYPE_SIGNED(type) (((type) -1) < 0)
#endif /* !defined TYPE_SIGNED */
-/*
-** Since the definition of TYPE_INTEGRAL contains floating point numbers,
-** it cannot be used in preprocessor directives.
-*/
-
-#ifndef TYPE_INTEGRAL
-#define TYPE_INTEGRAL(type) (((type) 0.5) != 0.5)
-#endif /* !defined TYPE_INTEGRAL */
-
#ifndef INT_STRLEN_MAXIMUM
/*
** 302 / 1000 is log10(2.0) rounded up.
@@ -288,8 +246,7 @@ const char * scheck P((const char * string, const char * format));
** add one more for a minus sign if the type is signed.
*/
#define INT_STRLEN_MAXIMUM(type) \
- ((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + \
- 1 + TYPE_SIGNED(type))
+ ((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + 1 + TYPE_SIGNED(type))
#endif /* !defined INT_STRLEN_MAXIMUM */
/*
@@ -323,11 +280,11 @@ const char * scheck P((const char * string, const char * format));
*/
#ifndef _
-#if HAVE_GETTEXT
+#if HAVE_GETTEXT - 0
#define _(msgid) gettext(msgid)
-#else /* !HAVE_GETTEXT */
+#else /* !(HAVE_GETTEXT - 0) */
#define _(msgid) msgid
-#endif /* !HAVE_GETTEXT */
+#endif /* !(HAVE_GETTEXT - 0) */
#endif /* !defined _ */
#ifndef TZ_DOMAIN
@@ -341,26 +298,6 @@ char *asctime_r P((struct tm const *, char *));
char *ctime_r P((time_t const *, char *));
#endif /* HAVE_INCOMPATIBLE_CTIME_R */
-#ifndef YEARSPERREPEAT
-#define YEARSPERREPEAT 400 /* years before a Gregorian repeat */
-#endif /* !defined YEARSPERREPEAT */
-
-/*
-** The Gregorian year averages 365.2425 days, which is 31556952 seconds.
-*/
-
-#ifndef AVGSECSPERYEAR
-#define AVGSECSPERYEAR 31556952L
-#endif /* !defined AVGSECSPERYEAR */
-
-#ifndef SECSPERREPEAT
-#define SECSPERREPEAT ((int_fast64_t) YEARSPERREPEAT * (int_fast64_t) AVGSECSPERYEAR)
-#endif /* !defined SECSPERREPEAT */
-
-#ifndef SECSPERREPEAT_BITS
-#define SECSPERREPEAT_BITS 34 /* ceil(log2(SECSPERREPEAT)) */
-#endif /* !defined SECSPERREPEAT_BITS */
-
/*
** UNIX was a registered trademark of The Open Group in 2003.
*/
diff --git a/timezone/scheck.c b/timezone/scheck.c
index bc156379a0..39feeba701 100644
--- a/timezone/scheck.c
+++ b/timezone/scheck.c
@@ -1,6 +1,6 @@
#ifndef lint
#ifndef NOID
-static char elsieid[] = "@(#)scheck.c 8.17";
+static char elsieid[] = "@(#)scheck.c 8.15";
#endif /* !defined lint */
#endif /* !defined NOID */
@@ -8,7 +8,7 @@ static char elsieid[] = "@(#)scheck.c 8.17";
#include "private.h"
-const char *
+char *
scheck(string, format)
const char * const string;
const char * const format;
@@ -17,10 +17,11 @@ const char * const format;
register const char * fp;
register char * tp;
register int c;
- register const char * result;
+ register char * result;
char dummy;
+ static char nada;
- result = "";
+ result = &nada;
if (string == NULL || format == NULL)
return result;
fbuf = imalloc((int) (2 * strlen(format) + 4));
diff --git a/timezone/solar87 b/timezone/solar87
index 71839320ad..3f32347973 100644
--- a/timezone/solar87
+++ b/timezone/solar87
@@ -1,4 +1,4 @@
-# @(#)solar87 8.1
+# @(#)solar87 7.3
# So much for footnotes about Saudi Arabia.
# Apparent noon times below are for Riyadh; your mileage will vary.
@@ -381,8 +381,8 @@ Rule sol87 1987 only - Dec 31 12:02:45s -0:02:45 -
# Before and after 1987, we'll operate on local mean solar time.
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone Asia/Riyadh87 3:07:04 - zzz 1987
- 3:07:04 sol87 zzz 1988
- 3:07:04 - zzz
+Zone Asia/Riyadh87 3:07:04 - ?? 1987
+ 3:07:04 sol87 ?? 1988
+ 3:07:04 - ??
# For backward compatibility...
Link Asia/Riyadh87 Mideast/Riyadh87
diff --git a/timezone/solar88 b/timezone/solar88
index b4cfe8e37a..41a64e5023 100644
--- a/timezone/solar88
+++ b/timezone/solar88
@@ -1,4 +1,4 @@
-# @(#)solar88 8.1
+# @(#)solar88 7.3
# Apparent noon times below are for Riyadh; they're a bit off for other places.
# Times were computed using formulas in the U.S. Naval Observatory's
@@ -381,8 +381,8 @@ Rule sol88 1988 only - Dec 31 12:03:05s -0:03:05 -
# Before and after 1988, we'll operate on local mean solar time.
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone Asia/Riyadh88 3:07:04 - zzz 1988
- 3:07:04 sol88 zzz 1989
- 3:07:04 - zzz
+Zone Asia/Riyadh88 3:07:04 - ?? 1988
+ 3:07:04 sol88 ?? 1989
+ 3:07:04 - ??
# For backward compatibility...
Link Asia/Riyadh88 Mideast/Riyadh88
diff --git a/timezone/solar89 b/timezone/solar89
index 8c48531461..a6d3d718d3 100644
--- a/timezone/solar89
+++ b/timezone/solar89
@@ -1,4 +1,4 @@
-# @(#)solar89 8.1
+# @(#)solar89 7.4
# Apparent noon times below are for Riyadh; they're a bit off for other places.
# Times were computed using a formula provided by the U. S. Naval Observatory:
@@ -386,8 +386,8 @@ Rule sol89 1989 only - Dec 31 12:03:00s -0:03:00 -
# Before and after 1989, we'll operate on local mean solar time.
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
-Zone Asia/Riyadh89 3:07:04 - zzz 1989
- 3:07:04 sol89 zzz 1990
- 3:07:04 - zzz
+Zone Asia/Riyadh89 3:07:04 - ?? 1989
+ 3:07:04 sol89 ?? 1990
+ 3:07:04 - ??
# For backward compatibility...
Link Asia/Riyadh89 Mideast/Riyadh89
diff --git a/timezone/southamerica b/timezone/southamerica
index 3a61cd717a..912491049b 100644
--- a/timezone/southamerica
+++ b/timezone/southamerica
@@ -1,11 +1,10 @@
-# @(#)southamerica 8.1
-# <pre>
+# @(#)southamerica 7.54
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert (1999-07-07):
+# From Paul Eggert <eggert@twinsun.com> (1999-07-07):
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks, The International Atlas (5th edition),
# San Diego: ACS Publications, Inc. (1999).
@@ -59,7 +58,7 @@
# From U. S. Naval Observatory (1988-01-199):
# ARGENTINA 3 H BEHIND UTC
-# From Hernan G. Otero (1995-06-26):
+# From Hernan G. Otero <hernan@isoft.com.ar> (1995-06-26):
# I am sending modifications to the Argentine time zone table...
# AR was chosen because they are the ISO letters that represent Argentina.
@@ -87,7 +86,7 @@ Rule Arg 1974 only - Jan 23 0:00 1:00 S
Rule Arg 1974 only - May 1 0:00 0 -
Rule Arg 1988 only - Dec 1 0:00 1:00 S
#
-# From Hernan G. Otero (1995-06-26):
+# From Hernan G. Otero <hernan@isoft.com.ar> (1995-06-26):
# These corrections were contributed by InterSoft Argentina S.A.,
# obtaining the data from the:
# Talleres de Hidrografia Naval Argentina
@@ -97,7 +96,7 @@ Rule Arg 1988 only - Dec 1 0:00 1:00 S
Rule Arg 1989 1993 - Mar Sun>=1 0:00 0 -
Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 S
#
-# From Hernan G. Otero (1995-06-26):
+# From Hernan G. Otero <hernan@isoft.com.ar> (1995-06-26):
# From this moment on, the law that mandated the daylight saving
# time corrections was derogated and no more modifications
# to the time zones (for daylight saving) are now made.
@@ -114,7 +113,7 @@ Rule Arg 2000 only - Mar Sun>=1 0:00 0 -
# Argentina decided not to become one of the countries that go on or off DST.
# So Buenos Aires should be -3 hours from GMT at all times.
#
-# From Fabian L. Arce Jofre (2000-04-04):
+# From Fabian L. Arce Jofre <farcejofre@bigfoot.com> (2000-04-04):
# The law that claimed DST for Argentina was derogated by President Fernando
# de la Rua on March 2, 2000, because it would make people spend more energy
# in the winter time, rather than less. The change took effect on March 3.
@@ -294,7 +293,7 @@ Zone America/Argentina/Jujuy -4:21:12 - LMT 1894 Oct 31
-4:00 Arg AR%sT 2000 Mar 3
-3:00 - ART
#
-# Catamarca (CT), Chubut (CH)
+# Catamarca (CT)
Zone America/Argentina/Catamarca -4:23:08 - LMT 1894 Oct 31
-4:16:48 - CMT 1920 May
-4:00 - ART 1930 Dec
@@ -324,6 +323,20 @@ Zone America/Argentina/Mendoza -4:35:16 - LMT 1894 Oct 31
-4:00 - WART 2004 Sep 26
-3:00 - ART
#
+# Chubut (CH)
+# 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
+#
# Santa Cruz (SC)
Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
-4:16:48 - CMT 1920 May # Cordoba Mean Time
@@ -361,7 +374,7 @@ Zone America/La_Paz -4:32:36 - LMT 1890
# Brazil
-# From Paul Eggert (1993-11-18):
+# From Paul Eggert <eggert@twinsun.com> (1993-11-18):
# The mayor of Rio recently attempted to change the time zone rules
# just in his city, in order to leave more summer time for the tourist trade.
# The rule change lasted only part of the day;
@@ -519,13 +532,19 @@ Rule Brazil 1996 only - Feb 11 0:00 0 -
# adopted by same states, minus AL, SE.
Rule Brazil 1996 only - Oct 6 0:00 1:00 S
Rule Brazil 1997 only - Feb 16 0:00 0 -
-# From Daniel C. Sobral (1998-02-12):
+# From Daniel C. Sobral <dcs@gns.com.br> (1998-02-12):
# In 1997, the DS began on October 6. The stated reason was that
# because international television networks ignored Brazil's policy on DS,
# they bought the wrong times on satellite for coverage of Pope's visit.
# This year, the ending date of DS was postponed to March 1
# to help dealing with the shortages of electric power.
#
+# From Paul Eggert (1998-02-25):
+# <a href="http://churchnet.ucsm.ac.uk/news/files2/news165.htm">
+# Brazil Prepares for Papal Visit
+# </a>,
+# Church Net UK (1997-10-02).
+#
# Decree 2,317 (1997-09-04), adopted by same states.
Rule Brazil 1997 only - Oct 6 0:00 1:00 S
# Decree <a href="http://pcdsh01.on.br/figuras/HV2495.JPG">2,495</a>
@@ -560,12 +579,11 @@ Rule Brazil 2003 only - Oct 19 0:00 1:00 S
# Decree 5,223 (2004-10-01) reestablishes DST in MT.
# <a href="http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm"></a>
Rule Brazil 2004 only - Nov 2 0:00 1:00 S
-# Decree <a href="http://pcdsh01.on.br/DecHV5539.gif">5,539</a> (2005-09-19),
-# adopted by the same states as before.
-Rule Brazil 2005 max - Oct Sun>=15 0:00 1:00 S
# The latest ruleset listed above says that the following states observe DST:
# DF, ES, GO, MG, MS, MT, PR, RJ, RS, SC, SP.
-# For dates after mid-2006, the above rules with TO="max" are guesses
+#
+Rule Brazil 2005 max - Oct Sun>=15 0:00 1:00 S
+# For dates after mid-2005, the above rules with TO="max" are guesses
# and are quite possibly wrong, but are more likely than no DST at all.
@@ -653,7 +671,7 @@ Zone America/Campo_Grande -3:38:28 - LMT 1914
# 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 - AMT 2004 Oct 4
-4:00 Brazil AM%sT
#
# west Para (PA), Rondonia (RO)
@@ -924,16 +942,9 @@ Rule Para 1998 2001 - Mar Sun>=1 0:00 0 -
# A decree was issued in Paraguay (no. 16350) on 2002-02-26 that changed the
# dst method to be from the first Sunday in September to the first Sunday in
# April.
-Rule Para 2002 2004 - Apr Sun>=1 0:00 0 -
-Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 S
-#
-# From Jesper Norgaard Welen (2005-01-02):
-# There are several sources that claim that Paraguay made
-# a timezone rule change in autumn 2004.
-# From Steffen Thorsen (2005-01-05):
-# Decree 1,867 (2004-03-05) <http://www.labor.com.py/noticias.asp?id=27>
-Rule Para 2004 max - Oct Sun>=15 0:00 1:00 S
-Rule Para 2005 max - Mar Sun>=8 0:00 0 -
+Rule Para 2002 max - Apr Sun>=1 0:00 0 -
+Rule Para 2002 max - Sep Sun>=1 0:00 1:00 S
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Asuncion -3:50:40 - LMT 1890
@@ -946,7 +957,7 @@ Zone America/Asuncion -3:50:40 - LMT 1890
#
# <a href="news:xrGmb.39935$gA1.13896113@news4.srv.hcvlny.cv.net">
# From Evelyn C. Leeper via Mark Brader (2003-10-26):</a>
-# When we were in Peru in 1985-1986, they apparently switched over
+# When we were in Peru in 1985-1986, they apparently switched over
# sometime between December 29 and January 3 while we were on the Amazon.
#
# From Paul Eggert (2003-11-02):
@@ -992,7 +1003,7 @@ Zone America/Port_of_Spain -4:06:04 - LMT 1912 Mar 2
-4:00 - AST
# Uruguay
-# From Paul Eggert (1993-11-18):
+# From Paul Eggert <eggert@twinsun.com> (1993-11-18):
# Uruguay wins the prize for the strangest peacetime manipulation of the rules.
# From Shanks:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -1045,18 +1056,8 @@ Rule Uruguay 1993 only - Feb 28 0:00 0 -
# From Eduardo Cota (2004-09-20):
# The uruguayan government has decreed a change in the local time....
# http://www.presidencia.gub.uy/decretos/2004091502.htm
-Rule Uruguay 2004 only - Sep 19 0:00 1:00 S
-# From Steffen Thorsen (2005-03-11):
-# Uruguay's DST was scheduled to end on Sunday, 2005-03-13, but in order to
-# save energy ... it was postponed two weeks....
-# http://www.presidencia.gub.uy/_Web/noticias/2005/03/2005031005.htm
-Rule Uruguay 2005 only - Mar 27 2:00 0 -
-# From Eduardo Cota (2005-09-27):
-# http://www.presidencia.gub.uy/_Web/decretos/2005/09/CM%20119_09%2009%202005_00001.PDF
-# This means that from 2005-10-09 at 02:00 local time, until 2006-03-12 at
-# 02:00 local time, official time in Uruguay will be at GMT -2.
-Rule Uruguay 2005 only - Oct 9 2:00 1:00 S
-Rule Uruguay 2006 only - Mar 12 2:00 0 -
+Rule Uruguay 2004 only - Sep Sun>=15 0:00 1:00 S
+Rule Uruguay 2005 only - Mar Sun>=8 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28
-3:44:44 - MMT 1920 May 1 # Montevideo MT
diff --git a/timezone/systemv b/timezone/systemv
index 6cf9645de0..c6a6b6404b 100644
--- a/timezone/systemv
+++ b/timezone/systemv
@@ -1,24 +1,24 @@
-# @(#)systemv 8.1
+# @(#)systemv 7.3
# Old rules, should the need arise.
# No attempt is made to handle Newfoundland, since it cannot be expressed
# using the System V "TZ" scheme (half-hour offset), or anything outside
# North America (no support for non-standard DST start/end dates), nor
-# the changes in the DST rules in the US after 1976 (which occurred after
+# the change in the DST rules in the US in 1987 (which occurred before
# the old rules were written).
#
-# If you need the old rules, uncomment ## lines.
+# If you need the old rules, uncomment ## lines and comment-out Link lines.
# Compile this *without* leap second correction for true conformance.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule SystemV min 1973 - Apr lastSun 2:00 1:00 D
-Rule SystemV min 1973 - Oct lastSun 2:00 0 S
-Rule SystemV 1974 only - Jan 6 2:00 1:00 D
-Rule SystemV 1974 only - Nov lastSun 2:00 0 S
-Rule SystemV 1975 only - Feb 23 2:00 1:00 D
-Rule SystemV 1975 only - Oct lastSun 2:00 0 S
-Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D
-Rule SystemV 1976 max - Oct lastSun 2:00 0 S
+## Rule SystemV min 1973 - Apr lastSun 2:00 1:00 D
+## Rule SystemV min 1973 - Oct lastSun 2:00 0 S
+## Rule SystemV 1974 only - Jan 6 2:00 1:00 D
+## Rule SystemV 1974 only - Nov lastSun 2:00 0 S
+## Rule SystemV 1975 only - Feb 23 2:00 1:00 D
+## Rule SystemV 1975 only - Oct lastSun 2:00 0 S
+## Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D
+## Rule SystemV 1976 max - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
## Zone SystemV/AST4ADT -4:00 SystemV A%sT
@@ -34,3 +34,17 @@ Rule SystemV 1976 max - Oct lastSun 2:00 0 S
## Zone SystemV/PST8 -8:00 - PST
## Zone SystemV/YST9 -9:00 - YST
## Zone SystemV/HST10 -10:00 - HST
+# For now...
+Link America/Halifax SystemV/AST4ADT
+Link America/New_York SystemV/EST5EDT
+Link America/Chicago SystemV/CST6CDT
+Link America/Denver SystemV/MST7MDT
+Link America/Los_Angeles SystemV/PST8PDT
+Link America/Anchorage SystemV/YST9YDT
+Link America/Puerto_Rico SystemV/AST4
+Link America/Indianapolis SystemV/EST5
+Link America/Regina SystemV/CST6
+Link America/Phoenix SystemV/MST7
+Link Pacific/Pitcairn SystemV/PST8
+Link Pacific/Gambier SystemV/YST9
+Link Pacific/Honolulu SystemV/HST10
diff --git a/timezone/tst-timezone.c b/timezone/tst-timezone.c
index 4c879163cf..127956de29 100644
--- a/timezone/tst-timezone.c
+++ b/timezone/tst-timezone.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Andreas Jaeger <aj@suse.de>, 1998.
@@ -42,9 +42,9 @@ static const struct test_times tests[] =
{ "Australia/Melbourne", 1, -36000, { "EST", "EST" }},
{ "America/Sao_Paulo", 1, 10800, {"BRT", "BRST" }},
{ "America/Chicago", 1, 21600, {"CST", "CDT" }},
- { "America/Indiana/Indianapolis", 1, 18000, {"EST", "EDT" }},
+ { "America/Indianapolis", 1, 18000, {"EST", "EDT" }},
{ "America/Los_Angeles", 1, 28800, {"PST", "PDT" }},
- { "Asia/Tokyo", 1, -32400, {"JST", "JDT" }},
+ { "Asia/Tokyo", 0, -32400, {"JST", "JST" }},
{ "Pacific/Auckland", 1, -43200, { "NZST", "NZDT" }},
{ NULL, 0, 0 }
};
diff --git a/timezone/tzfile.h b/timezone/tzfile.h
index 3a9eee305a..0921c3c339 100644
--- a/timezone/tzfile.h
+++ b/timezone/tzfile.h
@@ -4,7 +4,7 @@
/*
** This file is in the public domain, so clarified as of
-** 1996-06-05 by Arthur David Olson.
+** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
*/
/*
@@ -21,7 +21,7 @@
#ifndef lint
#ifndef NOID
-static char tzfilehid[] = "@(#)tzfile.h 8.1";
+static char tzfilehid[] = "@(#)tzfile.h 7.14";
#endif /* !defined NOID */
#endif /* !defined lint */
@@ -48,9 +48,8 @@ static char tzfilehid[] = "@(#)tzfile.h 8.1";
#define TZ_MAGIC "TZif"
struct tzhead {
- char tzh_magic[4]; /* TZ_MAGIC */
- char tzh_version[1]; /* '\0' or '2' as of 2005 */
- char tzh_reserved[15]; /* reserved--must be zero */
+ char tzh_magic[4]; /* TZ_MAGIC */
+ char tzh_reserved[16]; /* reserved for future use */
char tzh_ttisgmtcnt[4]; /* coded number of trans. time flags */
char tzh_ttisstdcnt[4]; /* coded number of trans. time flags */
char tzh_leapcnt[4]; /* coded number of leap seconds */
@@ -85,22 +84,18 @@ struct tzhead {
*/
/*
-** If tzh_version is '2' or greater, the above is followed by a second instance
-** of tzhead and a second instance of the data in which each coded transition
-** time uses 8 rather than 4 chars,
-** then a POSIX-TZ-environment-variable-style string for use in handling
-** instants after the last transition time stored in the file
-** (with nothing between the newlines if there is no POSIX representation for
-** such instants).
-*/
-
-/*
** In the current implementation, "tzset()" refuses to deal with files that
** exceed any of the limits below.
*/
#ifndef TZ_MAX_TIMES
-#define TZ_MAX_TIMES 1200
+/*
+** The TZ_MAX_TIMES value below is enough to handle a bit more than a
+** year's worth of solar time (corrected daily to the nearest second) or
+** 138 years of Pacific Presidential Election time
+** (where there are three time zone transitions every fourth year).
+*/
+#define TZ_MAX_TIMES 370
#endif /* !defined TZ_MAX_TIMES */
#ifndef TZ_MAX_TYPES
@@ -110,7 +105,7 @@ struct tzhead {
#ifdef NOSOLAR
/*
** Must be at least 14 for Europe/Riga as of Jan 12 1995,
-** as noted by Earl Chew.
+** as noted by Earl Chew <earl@hpato.aus.hp.com>.
*/
#define TZ_MAX_TYPES 20 /* Maximum number of local time types */
#endif /* !defined NOSOLAR */
@@ -161,20 +156,33 @@ struct tzhead {
#define EPOCH_YEAR 1970
#define EPOCH_WDAY TM_THURSDAY
+/*
+** Accurate only for the past couple of centuries;
+** that will probably do.
+*/
+
#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
+#ifndef USG
+
/*
-** 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.
+** Use of the underscored variants may cause problems if you move your code to
+** certain System-V-based systems; for maximum portability, use the
+** underscore-free variants. The underscored variants are provided for
+** backward compatibility only; they may disappear from future versions of
+** this file.
*/
-#define isleap_sum(a, b) isleap((a) % 400 + (b) % 400)
+#define SECS_PER_MIN SECSPERMIN
+#define MINS_PER_HOUR MINSPERHOUR
+#define HOURS_PER_DAY HOURSPERDAY
+#define DAYS_PER_WEEK DAYSPERWEEK
+#define DAYS_PER_NYEAR DAYSPERNYEAR
+#define DAYS_PER_LYEAR DAYSPERLYEAR
+#define SECS_PER_HOUR SECSPERHOUR
+#define SECS_PER_DAY SECSPERDAY
+#define MONS_PER_YEAR MONSPERYEAR
+
+#endif /* !defined USG */
#endif /* !defined TZFILE_H */
diff --git a/timezone/tzselect.ksh b/timezone/tzselect.ksh
index f6e28bfdab..be589240d1 100644
--- a/timezone/tzselect.ksh
+++ b/timezone/tzselect.ksh
@@ -1,11 +1,11 @@
#! @KSH@
-# '@(#)tzselect.ksh 1.8'
+# '@(#)tzselect.ksh 1.7'
# Ask the user about the time zone, and output the resulting TZ value to stdout.
# Interact with the user via stderr and stdin.
-# Contributed by Paul Eggert.
+# Contributed by Paul Eggert <eggert@twinsun.com>.
# Porting notes:
#
diff --git a/timezone/yearistype b/timezone/yearistype
index d3a248032e..8d796f1f21 100755
--- a/timezone/yearistype
+++ b/timezone/yearistype
@@ -1,6 +1,6 @@
#! /bin/sh
-: '@(#)yearistype.sh 7.8'
+: '@(#)yearistype.sh 7.7'
case $#-$1 in
2-|2-0*|2-*[!0-9]*)
@@ -9,7 +9,7 @@ case $#-$1 in
esac
case $#-$2 in
- 2-even)
+ 2-even)
case $1 in
*[24680]) exit 0 ;;
*) exit 1 ;;
@@ -19,7 +19,7 @@ case $#-$2 in
*[02468][048]|*[13579][26]) exit 1 ;;
*) exit 0 ;;
esac ;;
- 2-odd)
+ 2-odd)
case $1 in
*[13579]) exit 0 ;;
*) exit 1 ;;
@@ -29,7 +29,7 @@ case $#-$2 in
*[02468][048]|*[13579][26]) exit 0 ;;
*) exit 1 ;;
esac ;;
- 2-*)
+ 2-*)
echo "$0: wild type - $2" >&2 ;;
esac
diff --git a/timezone/zdump.c b/timezone/zdump.c
index 3c8d179fce..20bb916822 100644
--- a/timezone/zdump.c
+++ b/timezone/zdump.c
@@ -1,4 +1,4 @@
-static char elsieid[] = "@(#)zdump.c 8.2";
+static char elsieid[] = "@(#)zdump.c 7.40";
/*
** This code has been made independent of the rest of the time
@@ -11,19 +11,6 @@ static char elsieid[] = "@(#)zdump.c 8.2";
#include "sys/types.h" /* for time_t */
#include "time.h" /* for struct tm */
#include "stdlib.h" /* for exit, malloc, atoi */
-#include "float.h" /* for FLT_MAX and DBL_MAX */
-#include "ctype.h" /* for isalpha et al. */
-#ifndef isascii
-#define isascii(x) 1
-#endif /* !defined isascii */
-
-#ifndef ZDUMP_LO_YEAR
-#define ZDUMP_LO_YEAR (-500)
-#endif /* !defined ZDUMP_LO_YEAR */
-
-#ifndef ZDUMP_HI_YEAR
-#define ZDUMP_HI_YEAR 2500
-#endif /* !defined ZDUMP_HI_YEAR */
#ifndef MAX_STRING_LENGTH
#define MAX_STRING_LENGTH 1024
@@ -74,20 +61,9 @@ static char elsieid[] = "@(#)zdump.c 8.2";
#endif /* !defined DAYSPERNYEAR */
#ifndef isleap
-#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
+#define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0)
#endif /* !defined isleap */
-#ifndef isleap_sum
-/*
-** See tzfile.h for details on isleap_sum.
-*/
-#define isleap_sum(a, b) isleap((a) % 400 + (b) % 400)
-#endif /* !defined isleap_sum */
-
-#define SECSPERDAY ((long) SECSPERHOUR * HOURSPERDAY)
-#define SECSPERNYEAR (SECSPERDAY * DAYSPERNYEAR)
-#define SECSPERLYEAR (SECSPERNYEAR + SECSPERDAY)
-
#if HAVE_GETTEXT
#include "locale.h" /* for setlocale */
#include "libintl.h"
@@ -130,106 +106,27 @@ static char elsieid[] = "@(#)zdump.c 8.2";
#endif /* !defined TZ_DOMAIN */
#ifndef P
+#ifdef __STDC__
#define P(x) x
+#else /* !defined __STDC__ */
+#define P(x) ()
+#endif /* !defined __STDC__ */
#endif /* !defined P */
extern char ** environ;
extern int getopt P((int argc, char * const argv[],
- const char * options));
+ const char * options));
extern char * optarg;
extern int optind;
extern char * tzname[2];
-static time_t absolute_min_time;
-static time_t absolute_max_time;
-static size_t longest;
-static char * progname;
-static int warned;
-
static char * abbr P((struct tm * tmp));
-static void abbrok P((const char * abbrp, const char * zone));
static long delta P((struct tm * newp, struct tm * oldp));
-static void dumptime P((const struct tm * tmp));
static time_t hunt P((char * name, time_t lot, time_t hit));
-static void setabsolutes P((void));
+static size_t longest;
+static char * progname;
static void show P((char * zone, time_t t, int v));
-static const char * tformat P((void));
-static time_t yeartot P((long y));
-
-#ifndef TYPECHECK
-#define my_localtime localtime
-#else /* !defined TYPECHECK */
-static struct tm *
-my_localtime(tp)
-time_t * tp;
-{
- register struct tm * tmp;
-
- tmp = localtime(tp);
- if (tp != NULL && tmp != NULL) {
- struct tm tm;
- register time_t t;
-
- tm = *tmp;
- t = mktime(&tm);
- if (t - *tp >= 1 || *tp - t >= 1) {
- (void) fflush(stdout);
- (void) fprintf(stderr, "\n%s: ", progname);
- (void) fprintf(stderr, tformat(), *tp);
- (void) fprintf(stderr, " ->");
- (void) fprintf(stderr, " year=%d", tmp->tm_year);
- (void) fprintf(stderr, " mon=%d", tmp->tm_mon);
- (void) fprintf(stderr, " mday=%d", tmp->tm_mday);
- (void) fprintf(stderr, " hour=%d", tmp->tm_hour);
- (void) fprintf(stderr, " min=%d", tmp->tm_min);
- (void) fprintf(stderr, " sec=%d", tmp->tm_sec);
- (void) fprintf(stderr, " isdst=%d", tmp->tm_isdst);
- (void) fprintf(stderr, " -> ");
- (void) fprintf(stderr, tformat(), t);
- (void) fprintf(stderr, "\n");
- }
- }
- return tmp;
-}
-#endif /* !defined TYPECHECK */
-
-static void
-abbrok(abbrp, zone)
-const char * const abbrp;
-const char * const zone;
-{
- register const char * cp;
- register char * wp;
-
- if (warned)
- return;
- cp = abbrp;
- wp = NULL;
- while (isascii((unsigned char) *cp) && isalpha((unsigned char) *cp))
- ++cp;
- if (cp - abbrp == 0)
- wp = _("lacks alphabetic at start");
- else if (cp - abbrp < 3)
- wp = _("has fewer than 3 alphabetics");
- else if (cp - abbrp > 6)
- wp = _("has more than 6 alphabetics");
- if (wp == NULL && (*cp == '+' || *cp == '-')) {
- ++cp;
- if (isascii((unsigned char) *cp) &&
- isdigit((unsigned char) *cp))
- if (*cp++ == '1' && *cp >= '0' && *cp <= '4')
- ++cp;
- if (*cp != '\0')
- wp = _("differs from POSIX standard");
- }
- if (wp == NULL)
- return;
- (void) fflush(stdout);
- (void) fprintf(stderr,
- _("%s: warning: zone \"%s\" abbreviation \"%s\" %s\n"),
- progname, zone, abbrp, wp);
- warned = TRUE;
-}
+static void dumptime P((const struct tm * tmp));
int
main(argc, argv)
@@ -239,24 +136,20 @@ char * argv[];
register int i;
register int c;
register int vflag;
- register char * cutarg;
- register long cutloyear = ZDUMP_LO_YEAR;
- register long cuthiyear = ZDUMP_HI_YEAR;
- register time_t cutlotime;
- register time_t cuthitime;
- register char ** fakeenv;
+ register char * cutoff;
+ register int cutyear;
+ register long cuttime;
+ char ** fakeenv;
time_t now;
time_t t;
time_t newt;
+ time_t hibit;
struct tm tm;
struct tm newtm;
- register struct tm * tmp;
- register struct tm * newtmp;
- INITIALIZE(cutlotime);
- INITIALIZE(cuthitime);
+ INITIALIZE(cuttime);
#if HAVE_GETTEXT
- (void) setlocale(LC_ALL, "");
+ (void) setlocale(LC_MESSAGES, "");
#ifdef TZ_DOMAINDIR
(void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
#endif /* defined TEXTDOMAINDIR */
@@ -266,60 +159,49 @@ char * argv[];
for (i = 1; i < argc; ++i)
if (strcmp(argv[i], "--version") == 0) {
(void) printf("%s\n", elsieid);
- exit(EXIT_SUCCESS);
+ (void) exit(EXIT_SUCCESS);
}
vflag = 0;
- cutarg = NULL;
+ cutoff = NULL;
while ((c = getopt(argc, argv, "c:v")) == 'c' || c == 'v')
if (c == 'v')
vflag = 1;
- else cutarg = optarg;
+ else cutoff = optarg;
if ((c != EOF && c != -1) ||
(optind == argc - 1 && strcmp(argv[optind], "=") == 0)) {
(void) fprintf(stderr,
-_("%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n"),
- progname, progname);
- exit(EXIT_FAILURE);
+_("%s: usage is %s [ --version ] [ -v ] [ -c cutoff ] zonename ...\n"),
+ argv[0], argv[0]);
+ (void) exit(EXIT_FAILURE);
}
- if (vflag) {
- if (cutarg != NULL) {
- long lo;
- long hi;
- char dummy;
-
- if (sscanf(cutarg, "%ld%c", &hi, &dummy) == 1) {
- cuthiyear = hi;
- } else if (sscanf(cutarg, "%ld,%ld%c",
- &lo, &hi, &dummy) == 2) {
- cutloyear = lo;
- cuthiyear = hi;
- } else {
-(void) fprintf(stderr, _("%s: wild -c argument %s\n"),
- progname, cutarg);
- exit(EXIT_FAILURE);
- }
- }
- setabsolutes();
- cutlotime = yeartot(cutloyear);
- cuthitime = yeartot(cuthiyear);
+ if (cutoff != NULL) {
+ int y;
+
+ cutyear = atoi(cutoff);
+ cuttime = 0;
+ for (y = EPOCH_YEAR; y < cutyear; ++y)
+ cuttime += DAYSPERNYEAR + isleap(y);
+ cuttime *= SECSPERHOUR * HOURSPERDAY;
}
(void) time(&now);
longest = 0;
for (i = optind; i < argc; ++i)
if (strlen(argv[i]) > longest)
longest = strlen(argv[i]);
+ for (hibit = 1; (hibit << 1) != 0; hibit <<= 1)
+ continue;
{
register int from;
register int to;
- for (i = 0; environ[i] != NULL; ++i)
+ for (i = 0; environ[i] != NULL; ++i)
continue;
fakeenv = (char **) malloc((size_t) ((i + 2) *
sizeof *fakeenv));
if (fakeenv == NULL ||
(fakeenv[0] = (char *) malloc(longest + 4)) == NULL) {
(void) perror(progname);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
to = 0;
(void) strcpy(fakeenv[to++], "TZ=");
@@ -337,175 +219,85 @@ _("%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n"),
show(argv[i], now, FALSE);
continue;
}
- warned = FALSE;
- t = absolute_min_time;
+ /*
+ ** Get lowest value of t.
+ */
+ t = hibit;
+ if (t > 0) /* time_t is unsigned */
+ t = 0;
show(argv[i], t, TRUE);
t += SECSPERHOUR * HOURSPERDAY;
show(argv[i], t, TRUE);
- if (t < cutlotime)
- t = cutlotime;
- tmp = my_localtime(&t);
- if (tmp != NULL) {
- tm = *tmp;
- (void) strncpy(buf, abbr(&tm), (sizeof buf) - 1);
- }
+ tm = *localtime(&t);
+ (void) strncpy(buf, abbr(&tm), (sizeof buf) - 1);
for ( ; ; ) {
- if (t >= cuthitime)
+ if (cutoff != NULL && t >= cuttime)
break;
newt = t + SECSPERHOUR * 12;
- if (newt >= cuthitime)
+ if (cutoff != NULL && newt >= cuttime)
break;
if (newt <= t)
break;
- newtmp = localtime(&newt);
- if (newtmp != NULL)
- newtm = *newtmp;
- if ((tmp == NULL || newtmp == NULL) ? (tmp != newtmp) :
- (delta(&newtm, &tm) != (newt - t) ||
+ newtm = *localtime(&newt);
+ if (delta(&newtm, &tm) != (newt - t) ||
newtm.tm_isdst != tm.tm_isdst ||
- strcmp(abbr(&newtm), buf) != 0)) {
+ strcmp(abbr(&newtm), buf) != 0) {
newt = hunt(argv[i], t, newt);
- newtmp = localtime(&newt);
- if (newtmp != NULL) {
- newtm = *newtmp;
- (void) strncpy(buf,
- abbr(&newtm),
- (sizeof buf) - 1);
- }
+ newtm = *localtime(&newt);
+ (void) strncpy(buf, abbr(&newtm),
+ (sizeof buf) - 1);
}
t = newt;
tm = newtm;
- tmp = newtmp;
}
- t = absolute_max_time;
+ /*
+ ** Get highest value of t.
+ */
+ t = ~((time_t) 0);
+ if (t < 0) /* time_t is signed */
+ t &= ~hibit;
t -= SECSPERHOUR * HOURSPERDAY;
show(argv[i], t, TRUE);
t += SECSPERHOUR * HOURSPERDAY;
show(argv[i], t, TRUE);
}
if (fflush(stdout) || ferror(stdout)) {
- (void) fprintf(stderr, "%s: ", progname);
- (void) perror(_("Error writing to standard output"));
- exit(EXIT_FAILURE);
+ (void) fprintf(stderr, "%s: ", argv[0]);
+ (void) perror(_("Error writing standard output"));
+ (void) exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
- /* If exit fails to exit... */
- return EXIT_FAILURE;
-}
-
-static void
-setabsolutes()
-{
- if (0.5 == (time_t) 0.5) {
- /*
- ** time_t is floating.
- */
- if (sizeof (time_t) == sizeof (float)) {
- absolute_min_time = (time_t) -FLT_MAX;
- absolute_max_time = (time_t) FLT_MAX;
- } else if (sizeof (time_t) == sizeof (double)) {
- absolute_min_time = (time_t) -DBL_MAX;
- absolute_max_time = (time_t) DBL_MAX;
- } else {
- (void) fprintf(stderr,
-_("%s: use of -v on system with floating time_t other than float or double\n"),
- progname);
- exit(EXIT_FAILURE);
- }
- } else if (0 > (time_t) -1) {
- /*
- ** time_t is signed. Assume overflow wraps around.
- */
- time_t t = 0;
- time_t t1 = 1;
-
- while (t < t1) {
- t = t1;
- t1 = 2 * t1 + 1;
- }
-
- absolute_max_time = t;
- t = -t;
- absolute_min_time = t - 1;
- if (t < absolute_min_time)
- absolute_min_time = t;
- } else {
- /*
- ** time_t is unsigned.
- */
- absolute_min_time = 0;
- absolute_max_time = absolute_min_time - 1;
- }
-}
-static time_t
-yeartot(y)
-const long y;
-{
- register long myy;
- register long seconds;
- register time_t t;
-
- myy = EPOCH_YEAR;
- t = 0;
- while (myy != y) {
- if (myy < y) {
- seconds = isleap(myy) ? SECSPERLYEAR : SECSPERNYEAR;
- ++myy;
- if (t > absolute_max_time - seconds) {
- t = absolute_max_time;
- break;
- }
- t += seconds;
- } else {
- --myy;
- seconds = isleap(myy) ? SECSPERLYEAR : SECSPERNYEAR;
- if (t < absolute_min_time + seconds) {
- t = absolute_min_time;
- break;
- }
- t -= seconds;
- }
- }
- return t;
+ /* gcc -Wall pacifier */
+ for ( ; ; )
+ continue;
}
static time_t
-hunt(char *name, time_t lot, time_t hit)
+hunt(name, lot, hit)
+char * name;
+time_t lot;
+time_t hit;
{
- time_t t;
- long diff;
- struct tm lotm;
- register struct tm * lotmp;
- struct tm tm;
- register struct tm * tmp;
- char loab[MAX_STRING_LENGTH];
-
- lotmp = my_localtime(&lot);
- if (lotmp != NULL) {
- lotm = *lotmp;
- (void) strncpy(loab, abbr(&lotm), (sizeof loab) - 1);
- }
- for ( ; ; ) {
- diff = (long) (hit - lot);
- if (diff < 2)
- break;
- t = lot;
- t += diff / 2;
+ time_t t;
+ struct tm lotm;
+ struct tm tm;
+ static char loab[MAX_STRING_LENGTH];
+
+ lotm = *localtime(&lot);
+ (void) strncpy(loab, abbr(&lotm), (sizeof loab) - 1);
+ while ((hit - lot) >= 2) {
+ t = lot / 2 + hit / 2;
if (t <= lot)
++t;
else if (t >= hit)
--t;
- tmp = my_localtime(&t);
- if (tmp != NULL)
- tm = *tmp;
- if ((lotmp == NULL || tmp == NULL) ? (lotmp == tmp) :
- (delta(&tm, &lotm) == (t - lot) &&
+ tm = *localtime(&t);
+ if (delta(&tm, &lotm) == (t - lot) &&
tm.tm_isdst == lotm.tm_isdst &&
- strcmp(abbr(&tm), loab) == 0)) {
+ strcmp(abbr(&tm), loab) == 0) {
lot = t;
lotm = tm;
- lotmp = tmp;
} else hit = t;
}
show(name, lot, TRUE);
@@ -514,7 +306,7 @@ hunt(char *name, time_t lot, time_t hit)
}
/*
-** Thanks to Paul Eggert for logic used in delta.
+** Thanks to Paul Eggert (eggert@twinsun.com) for logic used in delta.
*/
static long
@@ -522,14 +314,14 @@ delta(newp, oldp)
struct tm * newp;
struct tm * oldp;
{
- register long result;
- register int tmy;
+ long result;
+ int tmy;
if (newp->tm_year < oldp->tm_year)
return -delta(oldp, newp);
result = 0;
for (tmy = oldp->tm_year; tmy < newp->tm_year; ++tmy)
- result += DAYSPERNYEAR + isleap_sum(tmy, TM_YEAR_BASE);
+ result += DAYSPERNYEAR + isleap(tmy + (long) TM_YEAR_BASE);
result += newp->tm_yday - oldp->tm_yday;
result *= HOURSPERDAY;
result += newp->tm_hour - oldp->tm_hour;
@@ -541,36 +333,29 @@ struct tm * oldp;
}
static void
-show(char *zone, time_t t, int v)
+show(zone, t, v)
+char * zone;
+time_t t;
+int v;
{
- register struct tm * tmp;
+ struct tm * tmp;
(void) printf("%-*s ", (int) longest, zone);
if (v) {
- tmp = gmtime(&t);
- if (tmp == NULL) {
- (void) printf(tformat(), t);
- } else {
- dumptime(tmp);
- (void) printf(" UTC");
- }
- (void) printf(" = ");
+ dumptime(gmtime(&t));
+ (void) printf(" UTC = ");
}
- tmp = my_localtime(&t);
+ tmp = localtime(&t);
dumptime(tmp);
- if (tmp != NULL) {
- if (*abbr(tmp) != '\0')
- (void) printf(" %s", abbr(tmp));
- if (v) {
- (void) printf(" isdst=%d", tmp->tm_isdst);
+ if (*abbr(tmp) != '\0')
+ (void) printf(" %s", abbr(tmp));
+ if (v) {
+ (void) printf(" isdst=%d", tmp->tm_isdst);
#ifdef TM_GMTOFF
- (void) printf(" gmtoff=%ld", tmp->TM_GMTOFF);
+ (void) printf(" gmtoff=%ld", tmp->TM_GMTOFF);
#endif /* defined TM_GMTOFF */
- }
}
(void) printf("\n");
- if (tmp != NULL && *abbr(tmp) != '\0')
- abbrok(abbr(tmp), zone);
}
static char *
@@ -586,33 +371,6 @@ struct tm * tmp;
return (result == NULL) ? &nada : result;
}
-/*
-** The code below can fail on certain theoretical systems;
-** it works on all known real-world systems as of 2004-12-30.
-*/
-
-static const char *
-tformat()
-{
- if (0.5 == (time_t) 0.5) { /* floating */
- if (sizeof (time_t) > sizeof (double))
- return "%Lg";
- return "%g";
- }
- if (0 > (time_t) -1) { /* signed */
- if (sizeof (time_t) > sizeof (long))
- return "%lld";
- if (sizeof (time_t) > sizeof (int))
- return "%ld";
- return "%d";
- }
- if (sizeof (time_t) > sizeof (unsigned long))
- return "%llu";
- if (sizeof (time_t) > sizeof (unsigned int))
- return "%lu";
- return "%u";
-}
-
static void
dumptime(timeptr)
register const struct tm * timeptr;
@@ -626,13 +384,7 @@ register const struct tm * timeptr;
};
register const char * wn;
register const char * mn;
- register int lead;
- register int trail;
- if (timeptr == NULL) {
- (void) printf("NULL");
- return;
- }
/*
** The packaged versions of localtime and gmtime never put out-of-range
** values in tm_wday or tm_mon, but since this code might be compiled
@@ -646,23 +398,9 @@ register const struct tm * timeptr;
(int) (sizeof mon_name / sizeof mon_name[0]))
mn = "???";
else mn = mon_name[timeptr->tm_mon];
- (void) printf("%.3s %.3s%3d %.2d:%.2d:%.2d ",
+ (void) printf("%.3s %.3s%3d %.2d:%.2d:%.2d %ld",
wn, mn,
timeptr->tm_mday, timeptr->tm_hour,
- timeptr->tm_min, timeptr->tm_sec);
-#define DIVISOR 10
- trail = timeptr->tm_year % DIVISOR + TM_YEAR_BASE % DIVISOR;
- lead = timeptr->tm_year / DIVISOR + TM_YEAR_BASE / DIVISOR +
- trail / DIVISOR;
- trail %= DIVISOR;
- if (trail < 0 && lead > 0) {
- trail += DIVISOR;
- --lead;
- } else if (lead < 0 && trail > 0) {
- trail -= DIVISOR;
- ++lead;
- }
- if (lead == 0)
- (void) printf("%d", trail);
- else (void) printf("%d%d", lead, ((trail < 0) ? -trail : trail));
+ timeptr->tm_min, timeptr->tm_sec,
+ timeptr->tm_year + (long) TM_YEAR_BASE);
}
diff --git a/timezone/zic.c b/timezone/zic.c
index f7393ea7ba..9bb8662e55 100644
--- a/timezone/zic.c
+++ b/timezone/zic.c
@@ -1,22 +1,9 @@
-/*
-** This file is in the public domain, so clarified as of
-** 2006-07-17 by Arthur David Olson.
-*/
-
-static char elsieid[] = "@(#)zic.c 8.7";
+static char elsieid[] = "@(#)zic.c 7.116";
#include "private.h"
#include "locale.h"
#include "tzfile.h"
-#define ZIC_VERSION '2'
-
-typedef int_fast64_t zic_t;
-
-#ifndef ZIC_MAX_ABBR_LEN_WO_WARN
-#define ZIC_MAX_ABBR_LEN_WO_WARN 6
-#endif /* !defined ZIC_MAX_ABBR_LEN_WO_WARN */
-
#if HAVE_SYS_STAT_H
#include "sys/stat.h"
#endif
@@ -28,7 +15,7 @@ typedef int_fast64_t zic_t;
/*
** On some ancient hosts, predicates like `isspace(C)' are defined
-** only if isascii(C) || C == EOF. Modern hosts obey the C Standard,
+** only if isascii(C) || C == EOF. Modern hosts obey the C Standard,
** which says they are defined only if C == ((unsigned char) C) || C == EOF.
** Neither the C Standard nor Posix require that `isascii' exist.
** For portability, we check both ancient and modern requirements.
@@ -39,11 +26,6 @@ typedef int_fast64_t zic_t;
#define isascii(x) 1
#endif
-#define OFFSET_STRLEN_MAXIMUM (7 + INT_STRLEN_MAXIMUM(long))
-#define RULE_STRLEN_MAXIMUM 8 /* "Mdd.dd.d" */
-
-#define end(cp) (strchr((cp), '\0'))
-
struct rule {
const char * r_filename;
int r_linenum;
@@ -52,8 +34,6 @@ struct rule {
int r_loyear; /* for example, 1986 */
int r_hiyear; /* for example, 1986 */
const char * r_yrtype;
- int r_lowasnum;
- int r_hiwasnum;
int r_month; /* 0..11 */
@@ -70,7 +50,7 @@ struct rule {
const char * r_abbrvar; /* variable part of abbreviation */
int r_todo; /* a rule to do (used in outzone) */
- zic_t r_temp; /* used in outzone */
+ time_t r_temp; /* used in outzone */
};
/*
@@ -96,7 +76,7 @@ struct zone {
int z_nrules;
struct rule z_untilrule;
- zic_t z_untiltime;
+ time_t z_untiltime;
};
extern int getopt P((int argc, char * const argv[],
@@ -105,18 +85,17 @@ extern int link P((const char * fromname, const char * toname));
extern char * optarg;
extern int optind;
-static void addtt P((zic_t starttime, int type));
+static void addtt P((time_t starttime, int type));
static int addtype P((long gmtoff, const char * abbr, int isdst,
int ttisstd, int ttisgmt));
-static void leapadd P((zic_t t, int positive, int rolling, int count));
+static void leapadd P((time_t t, int positive, int rolling, int count));
static void adjleap P((void));
static void associate P((void));
static int ciequal P((const char * ap, const char * bp));
static void convert P((long val, char * buf));
-static void convert64 P((zic_t val, char * buf));
static void dolink P((const char * fromfile, const char * tofile));
static void doabbr P((char * abbr, const char * format,
- const char * letters, int isdst, int doquotes));
+ const char * letters, int isdst));
static void eat P((const char * name, int num));
static void eats P((const char * name, int num,
const char * rname, int rnum));
@@ -132,7 +111,6 @@ static void inrule P((char ** fields, int nfields));
static int inzcont P((char ** fields, int nfields));
static int inzone P((char ** fields, int nfields));
static int inzsub P((char ** fields, int nfields, int iscont));
-static int is32 P((zic_t x));
static int itsabbr P((const char * abbr, const char * word));
static int itsdir P((const char * name));
static int lowerit P((int c));
@@ -142,42 +120,33 @@ static void newabbr P((const char * abbr));
static long oadd P((long t1, long t2));
static void outzone P((const struct zone * zp, int ntzones));
static void puttzcode P((long code, FILE * fp));
-static void puttzcode64 P((zic_t code, FILE * fp));
static int rcomp P((const void * leftp, const void * rightp));
-static zic_t rpytime P((const struct rule * rp, int wantedy));
+static time_t rpytime P((const struct rule * rp, int wantedy));
static void rulesub P((struct rule * rp,
const char * loyearp, const char * hiyearp,
const char * typep, const char * monthp,
const char * dayp, const char * timep));
-static int stringoffset P((char * result, long offset));
-static int stringrule P((char * result, const struct rule * rp,
- long dstoff, long gmtoff));
-static void stringzone P((char * result,
- const struct zone * zp, int ntzones));
static void setboundaries P((void));
-static zic_t tadd P((zic_t t1, long t2));
+static time_t tadd P((time_t t1, long t2));
static void usage P((void));
-static void writezone P((const char * name, const char * string));
+static void writezone P((const char * name));
static int yearistype P((int year, const char * type));
-#if !HAVE_STRERROR
+#if !(HAVE_STRERROR - 0)
static char * strerror P((int));
-#endif /* !HAVE_STRERROR */
+#endif /* !(HAVE_STRERROR - 0) */
static int charcnt;
static int errors;
static const char * filename;
static int leapcnt;
-static int leapseen;
-static int leapminyear;
-static int leapmaxyear;
static int linenum;
-static int max_abbrvar_len;
-static int max_format_len;
-static zic_t max_time;
+static time_t max_time;
static int max_year;
-static zic_t min_time;
+static int max_year_representable;
+static time_t min_time;
static int min_year;
+static int min_year_representable;
static int noise;
static const char * rfilename;
static int rlinenum;
@@ -365,7 +334,7 @@ static const int len_years[2] = {
};
static struct attype {
- zic_t at;
+ time_t at;
unsigned char type;
} attypes[TZ_MAX_TIMES];
static long gmtoffs[TZ_MAX_TYPES];
@@ -374,7 +343,7 @@ static unsigned char abbrinds[TZ_MAX_TYPES];
static char ttisstds[TZ_MAX_TYPES];
static char ttisgmts[TZ_MAX_TYPES];
static char chars[TZ_MAX_CHARS];
-static zic_t trans[TZ_MAX_LEAPS];
+static time_t trans[TZ_MAX_LEAPS];
static long corr[TZ_MAX_LEAPS];
static char roll[TZ_MAX_LEAPS];
@@ -391,7 +360,7 @@ char * const ptr;
(void) fprintf(stderr, _("%s: Memory exhausted: %s\n"),
progname, e);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
return ptr;
}
@@ -405,7 +374,7 @@ char * const ptr;
** Error handling.
*/
-#if !HAVE_STRERROR
+#if !(HAVE_STRERROR - 0)
static char *
strerror(errnum)
int errnum;
@@ -416,7 +385,7 @@ int errnum;
return (errnum > 0 && errnum <= sys_nerr) ?
sys_errlist[errnum] : _("Unknown system error");
}
-#endif /* !HAVE_STRERROR */
+#endif /* !(HAVE_STRERROR - 0) */
static void
eats(name, num, rname, rnum)
@@ -473,11 +442,9 @@ const char * const string;
static void
usage P((void))
{
- (void) fprintf(stderr, _("%s: usage is %s \
-[ --version ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\
-\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"),
+ (void) fprintf(stderr, _("%s: usage is %s [ --version ] [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"),
progname, progname);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
static const char * psxrules;
@@ -485,6 +452,7 @@ static const char * lcltime;
static const char * directory;
static const char * leapsec;
static const char * yitcommand;
+static int sflag = FALSE;
int
main(argc, argv)
@@ -498,23 +466,19 @@ char * argv[];
#ifdef unix
(void) umask(umask(S_IWGRP | S_IWOTH) | (S_IWGRP | S_IWOTH));
#endif /* defined unix */
-#if HAVE_GETTEXT
- (void) setlocale(LC_ALL, "");
+#if HAVE_GETTEXT - 0
+ (void) setlocale(LC_CTYPE, "");
+ (void) setlocale(LC_MESSAGES, "");
#ifdef TZ_DOMAINDIR
(void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
#endif /* defined TEXTDOMAINDIR */
(void) textdomain(TZ_DOMAIN);
-#endif /* HAVE_GETTEXT */
+#endif /* HAVE_GETTEXT - 0 */
progname = argv[0];
- if (TYPE_BIT(zic_t) < 64) {
- (void) fprintf(stderr, "%s: %s\n", progname,
- _("wild compilation-time specification of zic_t"));
- exit(EXIT_FAILURE);
- }
for (i = 1; i < argc; ++i)
if (strcmp(argv[i], "--version") == 0) {
(void) printf("%s\n", elsieid);
- exit(EXIT_SUCCESS);
+ (void) exit(EXIT_SUCCESS);
}
while ((c = getopt(argc, argv, "d:l:p:L:vsy:")) != EOF && c != -1)
switch (c) {
@@ -527,7 +491,7 @@ char * argv[];
(void) fprintf(stderr,
_("%s: More than one -d option specified\n"),
progname);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
break;
case 'l':
@@ -537,7 +501,7 @@ _("%s: More than one -d option specified\n"),
(void) fprintf(stderr,
_("%s: More than one -l option specified\n"),
progname);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
break;
case 'p':
@@ -547,7 +511,7 @@ _("%s: More than one -l option specified\n"),
(void) fprintf(stderr,
_("%s: More than one -p option specified\n"),
progname);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
break;
case 'y':
@@ -557,7 +521,7 @@ _("%s: More than one -p option specified\n"),
(void) fprintf(stderr,
_("%s: More than one -y option specified\n"),
progname);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
break;
case 'L':
@@ -567,14 +531,14 @@ _("%s: More than one -y option specified\n"),
(void) fprintf(stderr,
_("%s: More than one -L option specified\n"),
progname);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
break;
case 'v':
noise = TRUE;
break;
case 's':
- (void) printf("%s: -s ignored\n", progname);
+ sflag = TRUE;
break;
}
if (optind == argc - 1 && strcmp(argv[optind], "=") == 0)
@@ -594,7 +558,7 @@ _("%s: More than one -L option specified\n"),
for (i = optind; i < argc; ++i)
infile(argv[i]);
if (errors)
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
associate();
for (i = 0; i < nzones; i = j) {
/*
@@ -610,11 +574,6 @@ _("%s: More than one -L option specified\n"),
for (i = 0; i < nlinks; ++i) {
eat(links[i].l_filename, links[i].l_linenum);
dolink(links[i].l_from, links[i].l_to);
- if (noise)
- for (j = 0; j < nlinks; ++j)
- if (strcmp(links[i].l_to,
- links[j].l_from) == 0)
- warning(_("link to link"));
}
if (lcltime != NULL) {
eat("command line", 1);
@@ -659,54 +618,85 @@ const char * const tofile;
int result;
if (mkdirs(toname) != 0)
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
result = link(fromname, toname);
-#if HAVE_SYMLINK
+#if (HAVE_SYMLINK - 0)
if (result != 0 &&
- access(fromname, F_OK) == 0 &&
- !itsdir(fromname)) {
- const char *s = tofile;
- register char * symlinkcontents = NULL;
-
- while ((s = strchr(s+1, '/')) != NULL)
- symlinkcontents =
- ecatalloc(symlinkcontents,
- "../");
- symlinkcontents =
- ecatalloc(symlinkcontents,
- fromname);
- result = symlink(symlinkcontents,
- toname);
- if (result == 0)
+ access(fromname, F_OK) == 0 &&
+ !itsdir(fromname)) {
+ const char *s = tofile;
+ register char * symlinkcontents = NULL;
+ while ((s = strchr(s+1, '/')) != NULL)
+ symlinkcontents = ecatalloc(symlinkcontents, "../");
+ symlinkcontents = ecatalloc(symlinkcontents, fromname);
+
+ result = unlink(toname);
+ if (result != 0 && errno != ENOENT) {
+ const char *e = strerror(errno);
+
+ (void) fprintf(stderr,
+ _("%s: Can't unlink %s: %s\n"),
+ progname, toname, e);
+ (void) exit(EXIT_FAILURE);
+ }
+
+ result = symlink(symlinkcontents, toname);
+ if (result == 0)
warning(_("hard link failed, symbolic link used"));
- ifree(symlinkcontents);
+ ifree(symlinkcontents);
}
-#endif /* HAVE_SYMLINK */
+#endif
if (result != 0) {
const char *e = strerror(errno);
(void) fprintf(stderr,
_("%s: Can't link from %s to %s: %s\n"),
progname, fromname, toname, e);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
}
ifree(fromname);
ifree(toname);
}
-#define TIME_T_BITS_IN_FILE 64
+#ifndef INT_MAX
+#define INT_MAX ((int) (((unsigned)~0)>>1))
+#endif /* !defined INT_MAX */
+
+#ifndef INT_MIN
+#define INT_MIN ((int) ~(((unsigned)~0)>>1))
+#endif /* !defined INT_MIN */
+
+/*
+** The tz file format currently allows at most 32-bit quantities.
+** This restriction should be removed before signed 32-bit values
+** wrap around in 2038, but unfortunately this will require a
+** change to the tz file format.
+*/
+
+#define MAX_BITS_IN_FILE 32
+#define TIME_T_BITS_IN_FILE ((TYPE_BIT(time_t) < MAX_BITS_IN_FILE) ? TYPE_BIT(time_t) : MAX_BITS_IN_FILE)
static void
setboundaries P((void))
{
- register int i;
-
- min_time = -1;
- for (i = 0; i < TIME_T_BITS_IN_FILE - 1; ++i)
- min_time *= 2;
- max_time = -(min_time + 1);
+ if (TYPE_SIGNED(time_t)) {
+ min_time = ~ (time_t) 0;
+ min_time <<= TIME_T_BITS_IN_FILE - 1;
+ max_time = ~ (time_t) 0 - min_time;
+ if (sflag)
+ min_time = 0;
+ } else {
+ min_time = 0;
+ max_time = 2 - sflag;
+ max_time <<= TIME_T_BITS_IN_FILE - 1;
+ --max_time;
+ }
+ min_year = TM_YEAR_BASE + gmtime(&min_time)->tm_year;
+ max_year = TM_YEAR_BASE + gmtime(&max_time)->tm_year;
+ min_year_representable = min_year;
+ max_year_representable = max_year;
}
static int
@@ -803,7 +793,7 @@ associate P((void))
*/
eat(zp->z_filename, zp->z_linenum);
zp->z_stdoff = gethms(zp->z_rule, _("unruly zone"),
- TRUE);
+ TRUE);
/*
** Note, though, that if there's no rule,
** a '%s' in the format is a bad thing.
@@ -813,7 +803,7 @@ associate P((void))
}
}
if (errors)
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
static void
@@ -837,7 +827,7 @@ const char * name;
(void) fprintf(stderr, _("%s: Can't open %s: %s\n"),
progname, name, e);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
wantcont = FALSE;
for (num = 1; ; ++num) {
@@ -847,7 +837,7 @@ const char * name;
cp = strchr(buf, '\n');
if (cp == NULL) {
error(_("line too long"));
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
*cp = '\0';
fields = getfields(buf);
@@ -891,7 +881,7 @@ _("%s: Leap line in non leap seconds file %s\n"),
(void) fprintf(stderr,
_("%s: panic: Invalid l_value %d\n"),
progname, lp->l_value);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
}
ifree((char *) fields);
@@ -899,14 +889,14 @@ _("%s: panic: Invalid l_value %d\n"),
if (ferror(fp)) {
(void) fprintf(stderr, _("%s: Error reading %s\n"),
progname, filename);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
if (fp != stdin && fclose(fp)) {
const char *e = strerror(errno);
(void) fprintf(stderr, _("%s: Error closing %s: %s\n"),
progname, filename, e);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
if (wantcont)
error(_("expected continuation line not found"));
@@ -981,8 +971,6 @@ const int nfields;
fields[RF_MONTH], fields[RF_DAY], fields[RF_TOD]);
r.r_name = ecpyalloc(fields[RF_NAME]);
r.r_abbrvar = ecpyalloc(fields[RF_ABBRVAR]);
- if (max_abbrvar_len < strlen(r.r_abbrvar))
- max_abbrvar_len = strlen(r.r_abbrvar);
rules = (struct rule *) (void *) erealloc((char *) rules,
(int) ((nrules + 1) * sizeof *rules));
rules[nrules++] = r;
@@ -1088,8 +1076,6 @@ const int iscont;
}
z.z_rule = ecpyalloc(fields[i_rule]);
z.z_format = ecpyalloc(fields[i_format]);
- if (max_format_len < strlen(z.z_format))
- max_format_len = strlen(z.z_format);
hasuntil = nfields > i_untilyear;
if (hasuntil) {
z.z_untilrule.r_filename = filename;
@@ -1110,9 +1096,7 @@ const int iscont;
zones[nzones - 1].z_untiltime > min_time &&
zones[nzones - 1].z_untiltime < max_time &&
zones[nzones - 1].z_untiltime >= z.z_untiltime) {
- error(_(
-"Zone continuation line end time is not after end time of previous line"
- ));
+ error(_("Zone continuation line end time is not after end time of previous line"));
return FALSE;
}
}
@@ -1136,7 +1120,7 @@ const int nfields;
register int i, j;
int year, month, day;
long dayoff, tod;
- zic_t t;
+ time_t t;
if (nfields != LEAP_FIELDS) {
error(_("wrong number of fields on Leap line"));
@@ -1145,17 +1129,12 @@ const int nfields;
dayoff = 0;
cp = fields[LP_YEAR];
if (sscanf(cp, scheck(cp, "%d"), &year) != 1) {
- /*
- ** Leapin' Lizards!
- */
- error(_("invalid leaping year"));
- return;
+ /*
+ * Leapin' Lizards!
+ */
+ error(_("invalid leaping year"));
+ return;
}
- if (!leapseen || leapmaxyear < year)
- leapmaxyear = year;
- if (!leapseen || leapminyear > year)
- leapminyear = year;
- leapseen = TRUE;
j = EPOCH_YEAR;
while (j != year) {
if (year > j) {
@@ -1185,7 +1164,7 @@ const int nfields;
return;
}
dayoff = oadd(dayoff, eitol(day - 1));
- if (dayoff < 0 && !TYPE_SIGNED(zic_t)) {
+ if (dayoff < 0 && !TYPE_SIGNED(time_t)) {
error(_("time before zero"));
return;
}
@@ -1197,7 +1176,7 @@ const int nfields;
error(_("time too large"));
return;
}
- t = (zic_t) dayoff * SECSPERDAY;
+ t = (time_t) dayoff * SECSPERDAY;
tod = gethms(fields[LP_TIME], _("invalid time of day"), FALSE);
cp = fields[LP_CORR];
{
@@ -1221,9 +1200,7 @@ const int nfields;
return;
}
if ((lp = byword(fields[LP_ROLL], leap_types)) == NULL) {
- error(_(
- "illegal Rolling/Stationary field on Leap line"
- ));
+ error(_("illegal Rolling/Stationary field on Leap line"));
return;
}
leapadd(tadd(t, tod), positive, lp->l_value, count);
@@ -1310,8 +1287,7 @@ const char * const timep;
*/
cp = loyearp;
lp = byword(cp, begin_years);
- rp->r_lowasnum = lp == NULL;
- if (!rp->r_lowasnum) switch ((int) lp->l_value) {
+ if (lp != NULL) switch ((int) lp->l_value) {
case YR_MINIMUM:
rp->r_loyear = INT_MIN;
break;
@@ -1322,15 +1298,18 @@ const char * const timep;
(void) fprintf(stderr,
_("%s: panic: Invalid l_value %d\n"),
progname, lp->l_value);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
} else if (sscanf(cp, scheck(cp, "%d"), &rp->r_loyear) != 1) {
error(_("invalid starting year"));
return;
+ } else if (noise) {
+ if (rp->r_loyear < min_year_representable)
+ warning(_("starting year too low to be represented"));
+ else if (rp->r_loyear > max_year_representable)
+ warning(_("starting year too high to be represented"));
}
cp = hiyearp;
- lp = byword(cp, end_years);
- rp->r_hiwasnum = lp == NULL;
- if (!rp->r_hiwasnum) switch ((int) lp->l_value) {
+ if ((lp = byword(cp, end_years)) != NULL) switch ((int) lp->l_value) {
case YR_MINIMUM:
rp->r_hiyear = INT_MIN;
break;
@@ -1344,10 +1323,15 @@ const char * const timep;
(void) fprintf(stderr,
_("%s: panic: Invalid l_value %d\n"),
progname, lp->l_value);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
} else if (sscanf(cp, scheck(cp, "%d"), &rp->r_hiyear) != 1) {
error(_("invalid ending year"));
return;
+ } else if (noise) {
+ if (rp->r_loyear < min_year_representable)
+ warning(_("ending year too low to be represented"));
+ else if (rp->r_loyear > max_year_representable)
+ warning(_("ending year too high to be represented"));
}
if (rp->r_loyear > rp->r_hiyear) {
error(_("starting year greater than ending year"));
@@ -1362,6 +1346,8 @@ const char * const timep;
}
rp->r_yrtype = ecpyalloc(typep);
}
+ if (rp->r_loyear < min_year && rp->r_loyear > 0)
+ min_year = rp->r_loyear;
/*
** Day work.
** Accept things such as:
@@ -1415,25 +1401,13 @@ const long val;
char * const buf;
{
register int i;
- register int shift;
+ register long shift;
for (i = 0, shift = 24; i < 4; ++i, shift -= 8)
buf[i] = val >> shift;
}
static void
-convert64(val, buf)
-const zic_t val;
-char * const buf;
-{
- register int i;
- register int shift;
-
- for (i = 0, shift = 56; i < 8; ++i, shift -= 8)
- buf[i] = val >> shift;
-}
-
-static void
puttzcode(val, fp)
const long val;
FILE * const fp;
@@ -1444,50 +1418,28 @@ FILE * const fp;
(void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
}
-static void
-puttzcode64(val, fp)
-const zic_t val;
-FILE * const fp;
-{
- char buf[8];
-
- convert64(val, buf);
- (void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
-}
-
static int
atcomp(avp, bvp)
-const void * avp;
-const void * bvp;
+void * avp;
+void * bvp;
{
- const zic_t a = ((const struct attype *) avp)->at;
- const zic_t b = ((const struct attype *) bvp)->at;
-
- return (a < b) ? -1 : (a > b);
-}
-
-static int
-is32(x)
-const zic_t x;
-{
- return INT32_MIN <= x && x <= INT32_MAX;
+ if (((struct attype *) avp)->at < ((struct attype *) bvp)->at)
+ return -1;
+ else if (((struct attype *) avp)->at > ((struct attype *) bvp)->at)
+ return 1;
+ else return 0;
}
static void
-writezone(name, string)
+writezone(name)
const char * const name;
-const char * const string;
{
- register FILE * fp;
- register int i, j;
- register int leapcnt32, leapi32;
- register int timecnt32, timei32;
- register int pass;
- static char * fullname;
- static const struct tzhead tzh0;
- static struct tzhead tzh;
- zic_t ats[TZ_MAX_TIMES];
- unsigned char types[TZ_MAX_TIMES];
+ register FILE * fp;
+ register int i, j;
+ static char * fullname;
+ static struct tzhead tzh;
+ time_t ats[TZ_MAX_TIMES];
+ unsigned char types[TZ_MAX_TIMES];
/*
** Sort.
@@ -1510,13 +1462,14 @@ const char * const string;
while (fromi < timecnt && attypes[fromi].type == 0)
++fromi; /* handled by default rule */
for ( ; fromi < timecnt; ++fromi) {
- if (toi != 0 && ((attypes[fromi].at +
- gmtoffs[attypes[toi - 1].type]) <=
- (attypes[toi - 1].at + gmtoffs[toi == 1 ? 0
- : attypes[toi - 2].type]))) {
- attypes[toi - 1].type =
- attypes[fromi].type;
- continue;
+ if (toi != 0
+ && ((attypes[fromi].at
+ + gmtoffs[attypes[toi - 1].type])
+ <= (attypes[toi - 1].at
+ + gmtoffs[toi == 1 ? 0
+ : attypes[toi - 2].type]))) {
+ attypes[toi - 1].type = attypes[fromi].type;
+ continue;
}
if (toi == 0 ||
attypes[toi - 1].type != attypes[fromi].type)
@@ -1531,36 +1484,6 @@ const char * const string;
ats[i] = attypes[i].at;
types[i] = attypes[i].type;
}
- /*
- ** Correct for leap seconds.
- */
- for (i = 0; i < timecnt; ++i) {
- j = leapcnt;
- while (--j >= 0)
- if (ats[i] > trans[j] - corr[j]) {
- ats[i] = tadd(ats[i], corr[j]);
- break;
- }
- }
- /*
- ** Figure out 32-bit-limited starts and counts.
- */
- timecnt32 = timecnt;
- timei32 = 0;
- leapcnt32 = leapcnt;
- leapi32 = 0;
- while (timecnt32 > 0 && !is32(ats[timecnt32 - 1]))
- --timecnt32;
- while (timecnt32 > 0 && !is32(ats[timei32])) {
- --timecnt32;
- ++timei32;
- }
- while (leapcnt32 > 0 && !is32(trans[leapcnt32 - 1]))
- --leapcnt32;
- while (leapcnt32 > 0 && !is32(trans[leapi32])) {
- --leapcnt32;
- ++leapi32;
- }
fullname = erealloc(fullname,
(int) (strlen(directory) + 1 + strlen(name) + 1));
(void) sprintf(fullname, "%s/%s", directory, name);
@@ -1572,388 +1495,102 @@ const char * const string;
(void) fprintf(stderr, _("%s: Can't remove %s: %s\n"),
progname, fullname, e);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
if ((fp = fopen(fullname, "wb")) == NULL) {
if (mkdirs(fullname) != 0)
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
if ((fp = fopen(fullname, "wb")) == NULL) {
const char *e = strerror(errno);
(void) fprintf(stderr, _("%s: Can't create %s: %s\n"),
progname, fullname, e);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
}
- for (pass = 1; pass <= 2; ++pass) {
- register int thistimei, thistimecnt;
- register int thisleapi, thisleapcnt;
- register int thistimelim, thisleaplim;
- int writetype[TZ_MAX_TIMES];
- int typemap[TZ_MAX_TYPES];
- register int thistypecnt;
- char thischars[TZ_MAX_CHARS];
- char thischarcnt;
- int indmap[TZ_MAX_CHARS];
-
- if (pass == 1) {
- thistimei = timei32;
- thistimecnt = timecnt32;
- thisleapi = leapi32;
- thisleapcnt = leapcnt32;
- } else {
- thistimei = 0;
- thistimecnt = timecnt;
- thisleapi = 0;
- thisleapcnt = leapcnt;
- }
- thistimelim = thistimei + thistimecnt;
- thisleaplim = thisleapi + thisleapcnt;
- for (i = 0; i < typecnt; ++i)
- writetype[i] = thistimecnt == timecnt;
- if (thistimecnt == 0) {
- /*
- ** No transition times fall in the current
- ** (32- or 64-bit) window.
- */
- if (typecnt != 0)
- writetype[typecnt - 1] = TRUE;
- } else {
- for (i = thistimei - 1; i < thistimelim; ++i)
- if (i >= 0)
- writetype[types[i]] = TRUE;
- /*
- ** For America/Godthab and Antarctica/Palmer
- */
- if (thistimei == 0)
- writetype[0] = TRUE;
- }
- thistypecnt = 0;
- for (i = 0; i < typecnt; ++i)
- typemap[i] = writetype[i] ? thistypecnt++ : -1;
- for (i = 0; i < sizeof indmap / sizeof indmap[0]; ++i)
- indmap[i] = -1;
- thischarcnt = 0;
- for (i = 0; i < typecnt; ++i) {
- register char * thisabbr;
-
- if (!writetype[i])
- continue;
- if (indmap[abbrinds[i]] >= 0)
- continue;
- thisabbr = &chars[abbrinds[i]];
- for (j = 0; j < thischarcnt; ++j)
- if (strcmp(&thischars[j], thisabbr) == 0)
- break;
- if (j == thischarcnt) {
- (void) strcpy(&thischars[(int) thischarcnt],
- thisabbr);
- thischarcnt += strlen(thisabbr) + 1;
- }
- indmap[abbrinds[i]] = j;
- }
-#define DO(field) (void) fwrite((void *) tzh.field, \
- (size_t) sizeof tzh.field, (size_t) 1, fp)
- tzh = tzh0;
- (void) strncpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic);
- tzh.tzh_version[0] = ZIC_VERSION;
- convert(eitol(thistypecnt), tzh.tzh_ttisgmtcnt);
- convert(eitol(thistypecnt), tzh.tzh_ttisstdcnt);
- convert(eitol(thisleapcnt), tzh.tzh_leapcnt);
- convert(eitol(thistimecnt), tzh.tzh_timecnt);
- convert(eitol(thistypecnt), tzh.tzh_typecnt);
- convert(eitol(thischarcnt), tzh.tzh_charcnt);
- DO(tzh_magic);
- DO(tzh_version);
- DO(tzh_reserved);
- DO(tzh_ttisgmtcnt);
- DO(tzh_ttisstdcnt);
- DO(tzh_leapcnt);
- DO(tzh_timecnt);
- DO(tzh_typecnt);
- DO(tzh_charcnt);
+ convert(eitol(typecnt), tzh.tzh_ttisgmtcnt);
+ convert(eitol(typecnt), tzh.tzh_ttisstdcnt);
+ convert(eitol(leapcnt), tzh.tzh_leapcnt);
+ convert(eitol(timecnt), tzh.tzh_timecnt);
+ convert(eitol(typecnt), tzh.tzh_typecnt);
+ convert(eitol(charcnt), tzh.tzh_charcnt);
+ (void) strncpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic);
+#define DO(field) (void) fwrite((void *) tzh.field, (size_t) sizeof tzh.field, (size_t) 1, fp)
+ DO(tzh_magic);
+ DO(tzh_reserved);
+ DO(tzh_ttisgmtcnt);
+ DO(tzh_ttisstdcnt);
+ DO(tzh_leapcnt);
+ DO(tzh_timecnt);
+ DO(tzh_typecnt);
+ DO(tzh_charcnt);
#undef DO
- for (i = thistimei; i < thistimelim; ++i)
- if (pass == 1)
- puttzcode((long) ats[i], fp);
- else puttzcode64(ats[i], fp);
- for (i = thistimei; i < thistimelim; ++i) {
- unsigned char uc;
-
- uc = typemap[types[i]];
- (void) fwrite((void *) &uc,
- (size_t) sizeof uc,
- (size_t) 1,
- fp);
- }
- for (i = 0; i < typecnt; ++i)
- if (writetype[i]) {
- puttzcode(gmtoffs[i], fp);
- (void) putc(isdsts[i], fp);
- (void) putc((unsigned char) indmap[abbrinds[i]], fp);
+ for (i = 0; i < timecnt; ++i) {
+ j = leapcnt;
+ while (--j >= 0)
+ if (ats[i] >= trans[j]) {
+ ats[i] = tadd(ats[i], corr[j]);
+ break;
}
- if (thischarcnt != 0)
- (void) fwrite((void *) thischars,
- (size_t) sizeof thischars[0],
- (size_t) thischarcnt, fp);
- for (i = thisleapi; i < thisleaplim; ++i) {
- register zic_t todo;
-
- if (roll[i]) {
- if (timecnt == 0 || trans[i] < ats[0]) {
- j = 0;
- while (isdsts[j])
- if (++j >= typecnt) {
- j = 0;
- break;
- }
- } else {
- j = 1;
- while (j < timecnt &&
- trans[i] >= ats[j])
- ++j;
- j = types[j - 1];
- }
- todo = tadd(trans[i], -gmtoffs[j]);
- } else todo = trans[i];
- if (pass == 1)
- puttzcode((long) todo, fp);
- else puttzcode64(todo, fp);
- puttzcode(corr[i], fp);
- }
- for (i = 0; i < typecnt; ++i)
- if (writetype[i])
- (void) putc(ttisstds[i], fp);
- for (i = 0; i < typecnt; ++i)
- if (writetype[i])
- (void) putc(ttisgmts[i], fp);
- }
- (void) fprintf(fp, "\n%s\n", string);
+ puttzcode((long) ats[i], fp);
+ }
+ if (timecnt > 0)
+ (void) fwrite((void *) types, (size_t) sizeof types[0],
+ (size_t) timecnt, fp);
+ for (i = 0; i < typecnt; ++i) {
+ puttzcode((long) gmtoffs[i], fp);
+ (void) putc(isdsts[i], fp);
+ (void) putc(abbrinds[i], fp);
+ }
+ if (charcnt != 0)
+ (void) fwrite((void *) chars, (size_t) sizeof chars[0],
+ (size_t) charcnt, fp);
+ for (i = 0; i < leapcnt; ++i) {
+ if (roll[i]) {
+ if (timecnt == 0 || trans[i] < ats[0]) {
+ j = 0;
+ while (isdsts[j])
+ if (++j >= typecnt) {
+ j = 0;
+ break;
+ }
+ } else {
+ j = 1;
+ while (j < timecnt && trans[i] >= ats[j])
+ ++j;
+ j = types[j - 1];
+ }
+ puttzcode((long) tadd(trans[i], -gmtoffs[j]), fp);
+ } else puttzcode((long) trans[i], fp);
+ puttzcode((long) corr[i], fp);
+ }
+ for (i = 0; i < typecnt; ++i)
+ (void) putc(ttisstds[i], fp);
+ for (i = 0; i < typecnt; ++i)
+ (void) putc(ttisgmts[i], fp);
if (ferror(fp) || fclose(fp)) {
(void) fprintf(stderr, _("%s: Error writing %s\n"),
progname, fullname);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
}
static void
-doabbr(abbr, format, letters, isdst, doquotes)
+doabbr(abbr, format, letters, isdst)
char * const abbr;
const char * const format;
const char * const letters;
const int isdst;
-const int doquotes;
{
- register char * cp;
- register char * slashp;
- register int len;
-
- slashp = strchr(format, '/');
- if (slashp == NULL) {
+ if (strchr(format, '/') == NULL) {
if (letters == NULL)
(void) strcpy(abbr, format);
else (void) sprintf(abbr, format, letters);
- } else if (isdst) {
- (void) strcpy(abbr, slashp + 1);
- } else {
- if (slashp > format)
- (void) strncpy(abbr, format,
- (unsigned) (slashp - format));
- abbr[slashp - format] = '\0';
- }
- if (!doquotes)
- return;
- for (cp = abbr; *cp != '\0'; ++cp)
- if (strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZ", *cp) == NULL &&
- strchr("abcdefghijklmnopqrstuvwxyz", *cp) == NULL)
- break;
- len = strlen(abbr);
- if (len > 0 && *cp == '\0')
- return;
- abbr[len + 2] = '\0';
- abbr[len + 1] = '>';
- for ( ; len > 0; --len)
- abbr[len] = abbr[len - 1];
- abbr[0] = '<';
-}
-
-static void
-updateminmax(x)
-const int x;
-{
- if (min_year > x)
- min_year = x;
- if (max_year < x)
- max_year = x;
-}
-
-static int
-stringoffset(result, offset)
-char * result;
-long offset;
-{
- register int hours;
- register int minutes;
- register int seconds;
-
- result[0] = '\0';
- if (offset < 0) {
- (void) strcpy(result, "-");
- offset = -offset;
- }
- seconds = offset % SECSPERMIN;
- offset /= SECSPERMIN;
- minutes = offset % MINSPERHOUR;
- offset /= MINSPERHOUR;
- hours = offset;
- if (hours >= HOURSPERDAY) {
- result[0] = '\0';
- return -1;
- }
- (void) sprintf(end(result), "%d", hours);
- if (minutes != 0 || seconds != 0) {
- (void) sprintf(end(result), ":%02d", minutes);
- if (seconds != 0)
- (void) sprintf(end(result), ":%02d", seconds);
- }
- return 0;
-}
-
-static int
-stringrule(result, rp, dstoff, gmtoff)
-char * result;
-const struct rule * const rp;
-const long dstoff;
-const long gmtoff;
-{
- register long tod;
-
- result = end(result);
- if (rp->r_dycode == DC_DOM) {
- register int month, total;
-
- if (rp->r_dayofmonth == 29 && rp->r_month == TM_FEBRUARY)
- return -1;
- total = 0;
- for (month = 0; month < rp->r_month; ++month)
- total += len_months[0][month];
- (void) sprintf(result, "J%d", total + rp->r_dayofmonth);
- } else {
- register int week;
-
- if (rp->r_dycode == DC_DOWGEQ) {
- week = 1 + rp->r_dayofmonth / DAYSPERWEEK;
- if ((week - 1) * DAYSPERWEEK + 1 != rp->r_dayofmonth)
- return -1;
- } else if (rp->r_dycode == DC_DOWLEQ) {
- if (rp->r_dayofmonth == len_months[1][rp->r_month])
- week = 5;
- else {
- week = 1 + rp->r_dayofmonth / DAYSPERWEEK;
- if (week * DAYSPERWEEK - 1 != rp->r_dayofmonth)
- return -1;
- }
- } else return -1; /* "cannot happen" */
- (void) sprintf(result, "M%d.%d.%d",
- rp->r_month + 1, week, rp->r_wday);
- }
- tod = rp->r_tod;
- if (rp->r_todisgmt)
- tod += gmtoff;
- if (rp->r_todisstd && rp->r_stdoff == 0)
- tod += dstoff;
- if (tod < 0) {
- result[0] = '\0';
- return -1;
- }
- if (tod != 2 * SECSPERMIN * MINSPERHOUR) {
- (void) strcat(result, "/");
- if (stringoffset(end(result), tod) != 0)
- return -1;
- }
- return 0;
-}
-
-static void
-stringzone(result, zpfirst, zonecount)
-char * result;
-const struct zone * const zpfirst;
-const int zonecount;
-{
- register const struct zone * zp;
- register struct rule * rp;
- register struct rule * stdrp;
- register struct rule * dstrp;
- register int i;
- register const char * abbrvar;
-
- result[0] = '\0';
- zp = zpfirst + zonecount - 1;
- stdrp = dstrp = NULL;
- for (i = 0; i < zp->z_nrules; ++i) {
- rp = &zp->z_rules[i];
- if (rp->r_hiwasnum || rp->r_hiyear != INT_MAX)
- continue;
- if (rp->r_yrtype != NULL)
- continue;
- if (rp->r_stdoff == 0) {
- if (stdrp == NULL)
- stdrp = rp;
- else return;
- } else {
- if (dstrp == NULL)
- dstrp = rp;
- else return;
- }
- }
- if (stdrp == NULL && dstrp == NULL) {
- /*
- ** There are no rules running through "max".
- ** Let's find the latest rule.
- */
- for (i = 0; i < zp->z_nrules; ++i) {
- rp = &zp->z_rules[i];
- if (stdrp == NULL || rp->r_hiyear > stdrp->r_hiyear ||
- (rp->r_hiyear == stdrp->r_hiyear &&
- rp->r_month > stdrp->r_month))
- stdrp = rp;
- }
- if (stdrp != NULL && stdrp->r_stdoff != 0)
- return; /* We end up in DST (a POSIX no-no). */
- /*
- ** Horrid special case: if year is 2037,
- ** presume this is a zone handled on a year-by-year basis;
- ** do not try to apply a rule to the zone.
- */
- if (stdrp != NULL && stdrp->r_hiyear == 2037)
- return;
- }
- if (stdrp == NULL && zp->z_nrules != 0)
- return;
- abbrvar = (stdrp == NULL) ? "" : stdrp->r_abbrvar;
- doabbr(result, zp->z_format, abbrvar, FALSE, TRUE);
- if (stringoffset(end(result), -zp->z_gmtoff) != 0) {
- result[0] = '\0';
- return;
- }
- if (dstrp == NULL)
- return;
- doabbr(end(result), zp->z_format, dstrp->r_abbrvar, TRUE, TRUE);
- if (dstrp->r_stdoff != SECSPERMIN * MINSPERHOUR)
- if (stringoffset(end(result),
- -(zp->z_gmtoff + dstrp->r_stdoff)) != 0) {
- result[0] = '\0';
- return;
- }
- (void) strcat(result, ",");
- if (stringrule(result, dstrp, dstrp->r_stdoff, zp->z_gmtoff) != 0) {
- result[0] = '\0';
- return;
- }
- (void) strcat(result, ",");
- if (stringrule(result, stdrp, dstrp->r_stdoff, zp->z_gmtoff) != 0) {
- result[0] = '\0';
- return;
+ } else if (isdst)
+ (void) strcpy(abbr, strchr(format, '/') + 1);
+ else {
+ (void) strcpy(abbr, format);
+ *strchr(abbr, '/') = '\0';
}
}
@@ -1966,7 +1603,7 @@ const int zonecount;
register struct rule * rp;
register int i, j;
register int usestart, useuntil;
- register zic_t starttime, untiltime;
+ register time_t starttime, untiltime;
register long gmtoff;
register long stdoff;
register int year;
@@ -1974,17 +1611,8 @@ const int zonecount;
register int startttisstd;
register int startttisgmt;
register int type;
- register char * startbuf;
- register char * ab;
- register char * envvar;
- register int max_abbr_len;
- register int max_envvar_len;
-
- max_abbr_len = 2 + max_format_len + max_abbrvar_len;
- max_envvar_len = 2 * max_abbr_len + 5 * 9;
- startbuf = emalloc(max_abbr_len + 1);
- ab = emalloc(max_abbr_len + 1);
- envvar = emalloc(max_envvar_len + 1);
+ char startbuf[BUFSIZ];
+
INITIALIZE(untiltime);
INITIALIZE(starttime);
/*
@@ -1994,53 +1622,11 @@ const int zonecount;
typecnt = 0;
charcnt = 0;
/*
- ** Thanks to Earl Chew
+ ** Thanks to Earl Chew (earl@dnd.icp.nec.com.au)
** for noting the need to unconditionally initialize startttisstd.
*/
startttisstd = FALSE;
startttisgmt = FALSE;
- min_year = max_year = EPOCH_YEAR;
- if (leapseen) {
- updateminmax(leapminyear);
- updateminmax(leapmaxyear);
- }
- for (i = 0; i < zonecount; ++i) {
- zp = &zpfirst[i];
- updateminmax(zp->z_untilrule.r_loyear);
- for (j = 0; j < zp->z_nrules; ++j) {
- rp = &zp->z_rules[j];
- if (rp->r_lowasnum)
- updateminmax(rp->r_loyear);
- if (rp->r_hiwasnum)
- updateminmax(rp->r_hiyear);
- }
- }
- /*
- ** Generate lots of data if a rule can't cover all future times.
- */
- stringzone(envvar, zpfirst, zonecount);
- if (noise && envvar[0] == '\0') {
- register char * wp;
-
-wp = ecpyalloc(_("no POSIX environment variable for zone"));
- wp = ecatalloc(wp, " ");
- wp = ecatalloc(wp, zpfirst->z_name);
- warning(wp);
- ifree(wp);
- }
- if (envvar[0] == '\0') {
- if (min_year >= INT_MIN + YEARSPERREPEAT)
- min_year -= YEARSPERREPEAT;
- else min_year = INT_MIN;
- if (max_year <= INT_MAX - YEARSPERREPEAT)
- max_year += YEARSPERREPEAT;
- else max_year = INT_MAX;
- }
- /*
- ** For the benefit of older systems, generate data through 2037.
- */
- if (max_year < 2037)
- max_year = 2037;
for (i = 0; i < zonecount; ++i) {
/*
** A guess that may well be corrected later.
@@ -2058,7 +1644,7 @@ wp = ecpyalloc(_("no POSIX environment variable for zone"));
if (zp->z_nrules == 0) {
stdoff = zp->z_stdoff;
doabbr(startbuf, zp->z_format,
- (char *) NULL, stdoff != 0, FALSE);
+ (char *) NULL, stdoff != 0);
type = addtype(oadd(zp->z_gmtoff, stdoff),
startbuf, stdoff != 0, startttisstd,
startttisgmt);
@@ -2086,8 +1672,9 @@ wp = ecpyalloc(_("no POSIX environment variable for zone"));
}
for ( ; ; ) {
register int k;
- register zic_t jtime, ktime;
+ register time_t jtime, ktime;
register long offset;
+ char buf[BUFSIZ];
INITIALIZE(ktime);
if (useuntil) {
@@ -2143,27 +1730,23 @@ wp = ecpyalloc(_("no POSIX environment variable for zone"));
stdoff);
doabbr(startbuf, zp->z_format,
rp->r_abbrvar,
- rp->r_stdoff != 0,
- FALSE);
+ rp->r_stdoff != 0);
continue;
}
if (*startbuf == '\0' &&
- startoff == oadd(zp->z_gmtoff,
- stdoff)) {
- doabbr(startbuf,
- zp->z_format,
- rp->r_abbrvar,
- rp->r_stdoff !=
- 0,
- FALSE);
+ startoff == oadd(zp->z_gmtoff,
+ stdoff)) {
+ doabbr(startbuf, zp->z_format,
+ rp->r_abbrvar,
+ rp->r_stdoff != 0);
}
}
eats(zp->z_filename, zp->z_linenum,
rp->r_filename, rp->r_linenum);
- doabbr(ab, zp->z_format, rp->r_abbrvar,
- rp->r_stdoff != 0, FALSE);
+ doabbr(buf, zp->z_format, rp->r_abbrvar,
+ rp->r_stdoff != 0);
offset = oadd(zp->z_gmtoff, rp->r_stdoff);
- type = addtype(offset, ab, rp->r_stdoff != 0,
+ type = addtype(offset, buf, rp->r_stdoff != 0,
rp->r_todisstd, rp->r_todisgmt);
addtt(ktime, type);
}
@@ -2196,15 +1779,12 @@ error(_("can't determine time zone abbreviation to use just after until time"));
starttime = tadd(starttime, -gmtoff);
}
}
- writezone(zpfirst->z_name, envvar);
- ifree(startbuf);
- ifree(ab);
- ifree(envvar);
+ writezone(zpfirst->z_name);
}
static void
addtt(starttime, type)
-const zic_t starttime;
+const time_t starttime;
int type;
{
if (starttime <= min_time ||
@@ -2223,7 +1803,7 @@ int type;
}
if (timecnt >= TZ_MAX_TIMES) {
error(_("too many transitions?!"));
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
attypes[timecnt].at = starttime;
attypes[timecnt].type = type;
@@ -2242,15 +1822,15 @@ const int ttisgmt;
if (isdst != TRUE && isdst != FALSE) {
error(_("internal error - addtype called with bad isdst"));
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
if (ttisstd != TRUE && ttisstd != FALSE) {
error(_("internal error - addtype called with bad ttisstd"));
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
if (ttisgmt != TRUE && ttisgmt != FALSE) {
error(_("internal error - addtype called with bad ttisgmt"));
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
/*
** See if there's already an entry for this zone type.
@@ -2269,7 +1849,7 @@ const int ttisgmt;
*/
if (typecnt >= TZ_MAX_TYPES) {
error(_("too many local time types"));
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
gmtoffs[i] = gmtoff;
isdsts[i] = isdst;
@@ -2288,7 +1868,7 @@ const int ttisgmt;
static void
leapadd(t, positive, rolling, count)
-const zic_t t;
+const time_t t;
const int positive;
const int rolling;
int count;
@@ -2297,13 +1877,13 @@ int count;
if (leapcnt + (positive ? count : 1) > TZ_MAX_LEAPS) {
error(_("too many leap seconds"));
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
for (i = 0; i < leapcnt; ++i)
if (t <= trans[i]) {
if (t == trans[i]) {
error(_("repeated leap second moment"));
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
break;
}
@@ -2358,7 +1938,7 @@ const char * const type;
(void) fprintf(stderr, _("%s: command was '%s', result was %d\n"),
progname, buf, result);
for ( ; ; )
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
static int
@@ -2439,9 +2019,8 @@ register char * cp;
emalloc((int) ((strlen(cp) + 1) * sizeof *array));
nsubs = 0;
for ( ; ; ) {
- while (isascii((unsigned char) *cp) &&
- isspace((unsigned char) *cp))
- ++cp;
+ while (isascii(*cp) && isspace((unsigned char) *cp))
+ ++cp;
if (*cp == '\0' || *cp == '#')
break;
array[nsubs++] = dp = cp;
@@ -2451,9 +2030,7 @@ register char * cp;
else while ((*dp = *cp++) != '"')
if (*dp != '\0')
++dp;
- else error(_(
- "Odd number of quotation marks"
- ));
+ else error(_("Odd number of quotation marks"));
} while (*cp != '\0' && *cp != '#' &&
(!isascii(*cp) || !isspace((unsigned char) *cp)));
if (isascii(*cp) && isspace((unsigned char) *cp))
@@ -2474,17 +2051,17 @@ const long t2;
t = t1 + t2;
if ((t2 > 0 && t <= t1) || (t2 < 0 && t >= t1)) {
error(_("time overflow"));
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
return t;
}
-static zic_t
+static time_t
tadd(t1, t2)
-const zic_t t1;
+const time_t t1;
const long t2;
{
- register zic_t t;
+ register time_t t;
if (t1 == max_time && t2 > 0)
return max_time;
@@ -2493,7 +2070,7 @@ const long t2;
t = t1 + t2;
if ((t2 > 0 && t <= t1) || (t2 < 0 && t >= t1)) {
error(_("time overflow"));
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
return t;
}
@@ -2503,14 +2080,14 @@ const long t2;
** 1970, 00:00 LOCAL time - in that year that the rule refers to.
*/
-static zic_t
+static time_t
rpytime(rp, wantedy)
register const struct rule * const rp;
register const int wantedy;
{
register int y, m, i;
register long dayoff; /* with a nod to Margaret O. */
- register zic_t t;
+ register time_t t;
if (wantedy == INT_MIN)
return min_time;
@@ -2540,7 +2117,7 @@ register const int wantedy;
--i;
else {
error(_("use of 2/29 in non leap-year"));
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
}
--i;
@@ -2574,15 +2151,18 @@ register const int wantedy;
}
if (i < 0 || i >= len_months[isleap(y)][m]) {
if (noise)
- warning(_("rule goes past start/end of month--\
-will not work with pre-2004 versions of zic"));
+ warning(_("rule goes past start/end of month--will not work with pre-2004 versions of zic"));
}
}
+ if (dayoff < 0 && !TYPE_SIGNED(time_t))
+ return min_time;
if (dayoff < min_time / SECSPERDAY)
return min_time;
if (dayoff > max_time / SECSPERDAY)
return max_time;
- t = (zic_t) dayoff * SECSPERDAY;
+ t = (time_t) dayoff * SECSPERDAY;
+ if (t > 0 && max_time - t < rp->r_tod)
+ return max_time;
return tadd(t, rp->r_tod);
}
@@ -2592,48 +2172,10 @@ const char * const string;
{
register int i;
- if (strcmp(string, GRANDPARENTED) != 0) {
- register const char * cp;
- register char * wp;
-
- /*
- ** Want one to ZIC_MAX_ABBR_LEN_WO_WARN alphabetics
- ** optionally followed by a + or - and a number from 1 to 14.
- */
- cp = string;
- wp = NULL;
- while (isascii((unsigned char) *cp) &&
- isalpha((unsigned char) *cp))
- ++cp;
- if (cp - string == 0)
-wp = _("time zone abbreviation lacks alphabetic at start");
- if (noise && cp - string > 3)
-wp = _("time zone abbreviation has more than 3 alphabetics");
- if (cp - string > ZIC_MAX_ABBR_LEN_WO_WARN)
-wp = _("time zone abbreviation has too many alphabetics");
- if (wp == NULL && (*cp == '+' || *cp == '-')) {
- ++cp;
- if (isascii((unsigned char) *cp) &&
- isdigit((unsigned char) *cp))
- if (*cp++ == '1' &&
- *cp >= '0' && *cp <= '4')
- ++cp;
- }
- if (*cp != '\0')
-wp = _("time zone abbreviation differs from POSIX standard");
- if (wp != NULL) {
- wp = ecpyalloc(wp);
- wp = ecatalloc(wp, " (");
- wp = ecatalloc(wp, string);
- wp = ecatalloc(wp, ")");
- warning(wp);
- ifree(wp);
- }
- }
i = strlen(string) + 1;
if (charcnt + i > TZ_MAX_CHARS) {
error(_("too many, or too long, time zone abbreviations"));
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
(void) strcpy(&chars[charcnt], string);
charcnt += eitol(i);
@@ -2697,7 +2239,7 @@ const int i;
(void) fprintf(stderr,
_("%s: %d did not sign extend correctly\n"),
progname, i);
- exit(EXIT_FAILURE);
+ (void) exit(EXIT_FAILURE);
}
return l;
}
diff --git a/timezone/zone.tab b/timezone/zone.tab
index 09cdf6940a..e3c8e39e1e 100644
--- a/timezone/zone.tab
+++ b/timezone/zone.tab
@@ -1,8 +1,8 @@
-# @(#)zone.tab 8.1
+# @(#)zone.tab 1.30
#
# TZ zone descriptions
#
-# From Paul Eggert (1996-08-05):
+# From Paul Eggert <eggert@twinsun.com> (1996-08-05):
#
# This file contains a table with the following columns:
# 1. ISO 3166 2-character country code. See the file `iso3166.tab'.
@@ -45,17 +45,17 @@ AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF)
AR -3124-06411 America/Argentina/Cordoba most locations (CB, CC, CN, ER, FM, LP, MN, NQ, RN, SA, SE, SF, SL)
AR -2411-06518 America/Argentina/Jujuy Jujuy (JY)
AR -3124-06411 America/Argentina/Tucuman Tucuman (TM)
-AR -2828-06547 America/Argentina/Catamarca Catamarca (CT), Chubut (CH)
+AR -2828-06547 America/Argentina/Catamarca Catamarca (CT)
AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR)
AR -3132-06831 America/Argentina/San_Juan San Juan (SJ)
AR -3253-06849 America/Argentina/Mendoza Mendoza (MZ)
+AR -4552-06730 America/Argentina/ComodRivadavia Chubut (CH)
AR -5138-06913 America/Argentina/Rio_Gallegos Santa Cruz (SC)
AR -5448-06818 America/Argentina/Ushuaia Tierra del Fuego (TF)
AS -1416-17042 Pacific/Pago_Pago
AT +4813+01620 Europe/Vienna
AU -3133+15905 Australia/Lord_Howe Lord Howe Island
-AU -4253+14719 Australia/Hobart Tasmania - most locations
-AU -3956+14352 Australia/Currie Tasmania - King Island
+AU -4253+14719 Australia/Hobart Tasmania
AU -3749+14458 Australia/Melbourne Victoria
AU -3352+15113 Australia/Sydney New South Wales - most locations
AU -3157+14127 Australia/Broken_Hill New South Wales - Yancowinna
@@ -100,18 +100,16 @@ BW -2545+02555 Africa/Gaborone
BY +5354+02734 Europe/Minsk
BZ +1730-08812 America/Belize
CA +4734-05243 America/St_Johns Newfoundland Island
-CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), W Labrador, E Quebec & PEI
+CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), NB, W Labrador, E Quebec & PEI
CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971
-CA +4606-06447 America/Moncton Atlantic Time - New Brunswick
CA +5320-06025 America/Goose_Bay Atlantic Time - E Labrador
CA +4531-07334 America/Montreal Eastern Time - Quebec - most locations
CA +4339-07923 America/Toronto Eastern Time - Ontario - most locations
CA +4901-08816 America/Nipigon Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973
CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario
-CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut
-CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut
-CA +6408-08310 America/Coral_Harbour Eastern Standard Time - Southampton Island
-CA +6245-09210 America/Rankin_Inlet Central Time - central Nunavut
+CA +6608-06544 America/Pangnirtung Eastern Standard Time - Pangnirtung, Nunavut
+CA +6344-06828 America/Iqaluit Eastern Standard Time - east Nunavut
+CA +6245-09210 America/Rankin_Inlet Eastern Standard Time - central Nunavut
CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario
CA +4843-09429 America/Rainy_River Central Time - Rainy River & Fort Frances, Ontario
CA +6903-10505 America/Cambridge_Bay Central Time - west Nunavut
@@ -167,13 +165,15 @@ ET +0902+03842 Africa/Addis_Ababa
FI +6010+02458 Europe/Helsinki
FJ -1808+17825 Pacific/Fiji
FK -5142-05751 Atlantic/Stanley
-FM +0725+15147 Pacific/Truk Truk (Chuuk) and Yap
+FM +0931+13808 Pacific/Yap Yap
+FM +0725+15147 Pacific/Truk Truk (Chuuk)
FM +0658+15813 Pacific/Ponape Ponape (Pohnpei)
FM +0519+16259 Pacific/Kosrae Kosrae
FO +6201-00646 Atlantic/Faeroe
FR +4852+00220 Europe/Paris
GA +0023+00927 Africa/Libreville
-GB +512830-0001845 Europe/London
+GB +512830-0001845 Europe/London Great Britain
+GB +5435-00555 Europe/Belfast Northern Ireland
GD +1203-06145 America/Grenada
GE +4143+04449 Asia/Tbilisi
GF +0456-05220 America/Cayenne
@@ -248,7 +248,8 @@ MG -1855+04731 Indian/Antananarivo
MH +0709+17112 Pacific/Majuro most locations
MH +0905+16720 Pacific/Kwajalein Kwajalein
MK +4159+02126 Europe/Skopje
-ML +1239-00800 Africa/Bamako
+ML +1239-00800 Africa/Bamako southwest Mali
+ML +1446-00301 Africa/Timbuktu northeast Mali
MM +1647+09610 Asia/Rangoon
MN +4755+10653 Asia/Ulaanbaatar most locations
MN +4801+09139 Asia/Hovd Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan
@@ -369,16 +370,14 @@ UM +2813-17722 Pacific/Midway Midway Islands
UM +1917+16637 Pacific/Wake Wake Island
US +404251-0740023 America/New_York Eastern Time
US +421953-0830245 America/Detroit Eastern Time - Michigan - most locations
-US +381515-0854534 America/Kentucky/Louisville Eastern Time - Kentucky - Louisville area
+US +381515-0854534 America/Louisville Eastern Time - Kentucky - Louisville area
US +364947-0845057 America/Kentucky/Monticello Eastern Time - Kentucky - Wayne County
-US +394606-0860929 America/Indiana/Indianapolis Eastern Time - Indiana - most locations
-US +382232-0862041 America/Indiana/Marengo Eastern Time - Indiana - Crawford County
-US +411745-0863730 America/Indiana/Knox Eastern Time - Indiana - Starke County
-US +384452-0850402 America/Indiana/Vevay Eastern Time - Indiana - Switzerland County
+US +394606-0860929 America/Indianapolis Eastern Standard Time - Indiana - most locations
+US +382232-0862041 America/Indiana/Marengo Eastern Standard Time - Indiana - Crawford County
+US +411745-0863730 America/Indiana/Knox Eastern Standard Time - Indiana - Starke County
+US +384452-0850402 America/Indiana/Vevay Eastern Standard Time - Indiana - Switzerland County
US +415100-0873900 America/Chicago Central Time
-US +384038-0873143 America/Indiana/Vincennes Central Time - Indiana - Daviess, Dubois, Knox, Martin, Perry & Pulaski
-US +382931-0871643 America/Indiana/Petersburg Central Time - Indiana - Pike County
-US +450628-0873651 America/Menominee Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties
+US +450628-0873651 America/Menominee Central Time - Michigan - Wisconsin border
US +470659-1011757 America/North_Dakota/Center Central Time - North Dakota - Oliver County
US +394421-1045903 America/Denver Mountain Time
US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon