diff options
Diffstat (limited to 'timezone')
-rw-r--r-- | timezone/Makefile | 30 | ||||
-rw-r--r-- | timezone/africa | 33 | ||||
-rw-r--r-- | timezone/antarctica | 51 | ||||
-rw-r--r-- | timezone/asia | 355 | ||||
-rw-r--r-- | timezone/australasia | 155 | ||||
-rw-r--r-- | timezone/backward | 34 | ||||
-rw-r--r-- | timezone/checktab.awk | 4 | ||||
-rw-r--r-- | timezone/etcetera | 7 | ||||
-rw-r--r-- | timezone/europe | 213 | ||||
-rw-r--r-- | timezone/factory | 2 | ||||
-rw-r--r-- | timezone/iso3166.tab | 6 | ||||
-rw-r--r-- | timezone/leapseconds | 65 | ||||
-rw-r--r-- | timezone/northamerica | 560 | ||||
-rw-r--r-- | timezone/pacificnew | 2 | ||||
-rw-r--r-- | timezone/private.h | 123 | ||||
-rw-r--r-- | timezone/scheck.c | 9 | ||||
-rw-r--r-- | timezone/solar87 | 8 | ||||
-rw-r--r-- | timezone/solar88 | 8 | ||||
-rw-r--r-- | timezone/solar89 | 8 | ||||
-rw-r--r-- | timezone/southamerica | 79 | ||||
-rw-r--r-- | timezone/systemv | 36 | ||||
-rw-r--r-- | timezone/tst-timezone.c | 6 | ||||
-rw-r--r-- | timezone/tzfile.h | 62 | ||||
-rw-r--r-- | timezone/tzselect.ksh | 4 | ||||
-rwxr-xr-x | timezone/yearistype | 8 | ||||
-rw-r--r-- | timezone/zdump.c | 460 | ||||
-rw-r--r-- | timezone/zic.c | 988 | ||||
-rw-r--r-- | timezone/zone.tab | 43 |
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 |