diff options
author | rgrimes <rgrimes@FreeBSD.org> | 1994-05-30 19:09:18 +0000 |
---|---|---|
committer | rgrimes <rgrimes@FreeBSD.org> | 1994-05-30 19:09:18 +0000 |
commit | 47abdf90aee2335a06750aa4a6252264e8a6877d (patch) | |
tree | 9136bcfb3fcf9f49713585a0a99a23c6c7c8a0b8 | |
download | FreeBSD-src-47abdf90aee2335a06750aa4a6252264e8a6877d.zip FreeBSD-src-47abdf90aee2335a06750aa4a6252264e8a6877d.tar.gz |
BSD 4.4 Lite Share Sources
-rw-r--r-- | share/zoneinfo/Makefile | 138 | ||||
-rw-r--r-- | share/zoneinfo/datfiles/africa | 43 | ||||
-rw-r--r-- | share/zoneinfo/datfiles/antarctica | 4 | ||||
-rw-r--r-- | share/zoneinfo/datfiles/asia | 262 | ||||
-rw-r--r-- | share/zoneinfo/datfiles/australasia | 110 | ||||
-rw-r--r-- | share/zoneinfo/datfiles/etcetera | 55 | ||||
-rw-r--r-- | share/zoneinfo/datfiles/europe | 224 | ||||
-rw-r--r-- | share/zoneinfo/datfiles/factory | 8 | ||||
-rw-r--r-- | share/zoneinfo/datfiles/leapseconds | 31 | ||||
-rw-r--r-- | share/zoneinfo/datfiles/northamerica | 321 | ||||
-rw-r--r-- | share/zoneinfo/datfiles/pacificnew | 21 | ||||
-rw-r--r-- | share/zoneinfo/datfiles/solar87 | 386 | ||||
-rw-r--r-- | share/zoneinfo/datfiles/solar88 | 386 | ||||
-rw-r--r-- | share/zoneinfo/datfiles/solar89 | 391 | ||||
-rw-r--r-- | share/zoneinfo/datfiles/southamerica | 103 | ||||
-rw-r--r-- | share/zoneinfo/datfiles/systemv | 35 | ||||
-rw-r--r-- | share/zoneinfo/datfiles/usno1988 | 111 | ||||
-rw-r--r-- | share/zoneinfo/datfiles/usno1989 | 452 | ||||
-rw-r--r-- | share/zoneinfo/ialloc.c | 140 | ||||
-rw-r--r-- | share/zoneinfo/scheck.c | 99 | ||||
-rw-r--r-- | share/zoneinfo/tzfile.5 | 162 | ||||
-rw-r--r-- | share/zoneinfo/zic.8 | 424 | ||||
-rw-r--r-- | share/zoneinfo/zic.c | 1892 |
23 files changed, 5798 insertions, 0 deletions
diff --git a/share/zoneinfo/Makefile b/share/zoneinfo/Makefile new file mode 100644 index 0000000..710c0d2 --- /dev/null +++ b/share/zoneinfo/Makefile @@ -0,0 +1,138 @@ +# @(#)Makefile 8.1 (Berkeley) 6/8/93 + +# Change the line below for your time zone (after finding the zone you want in +# the time zone files, or adding it to a time zone file). +# Alternately, if you discover you've got the wrong time zone, you can just +# zic -l rightzone + +LOCALTIME= US/Pacific + +# If you want something other than Eastern United States time as a template +# for handling POSIX-style time zone environment variables, +# change the line below (after finding the zone you want in the +# time zone files, or adding it to a time zone file). +# Alternately, if you discover you've got the wrong time zone, you can just +# zic -p rightzone + +POSIXRULES= US/Pacific + +# Use an absolute path name for TZDIR unless you're just testing the software. + +TZDIR= ${DESTDIR}/usr/share/zoneinfo + +# If you always want time values interpreted as "seconds since the epoch +# (not counting leap seconds)", use +# REDO= posix_only +# below. If you always want right time values interpreted as "seconds since +# the epoch" (counting leap seconds)", use +# REDO= right_only +# below. If you want both sets of data available, with leap seconds not +# counted normally, use +# REDO= posix_right +# below. If you want both sets of data available, with leap seconds counted +# normally, use +# REDO= right_posix +# below. + +REDO= right_only + +# If you're running on a System V-style system and don't want lint grief, +# add +# -DUSG +# to the end of the "CFLAGS=" line. +# +# If you're running on a system where "strchr" is known as "index", +# (for example, a 4.[012]BSD system), add +# -Dstrchr=index +# to the end of the "CFLAGS=" line. +# +# If you're running on a system with a "mkdir" function, feel free to add +# -Demkdir=mkdir +# to the end of the "CFLAGS=" line +# +# If you want to use System V compatibility code, add +# -DUSG_COMPAT +# to the end of the "CFLAGS=" line. +# +# If your system has a "GMT offset" field in its "struct tm"s +# (or if you decide to add such a field in your system's "time.h" file), +# add the name to a define such as +# -DTM_GMTOFF=tm_gmtoff +# or +# -DTM_GMTOFF=_tm_gmtoff +# to the end of the "CFLAGS=" line. +# +# If your system has a "GMT offset" field in its "struct tm"s +# (or if you decide to add such a field in your system's "time.h" file), +# add the name to a define such as +# -DTM_ZONE=tm_zone +# or +# -DTM_ZONE=_tm_zone +# to the end of the "CFLAGS=" line. +# +# If you want code inspired by certain emerging standards, add +# -DSTD_INSPIRED +# to the end of the "CFLAGS=" line. +# +# If you want Source Code Control System ID's left out of object modules, add +# -DNOID +# to the end of the "CFLAGS=" line. +# +# If you'll never want to handle solar-time-based time zones, add +# -DNOSOLAR +# to the end of the "CFLAGS=" line +# (and comment out the "SDATA=" line below). +# +# If you want to allocate state structures in localtime, add +# -DALL_STATE +# to the end of the "CFLAGS=" line. +# +# If you want an "altzone" variable (a la System V Release 3.1), add +# -DALTZONE +# to the end of the "CFLAGS=" line. +# +# If you want a "gtime" function (a la MACH), add +# -DCMUCS +# to the end of the "CFLAGS=" line + +.PATH: ${.CURDIR}/datfiles +CFLAGS= -DTM_GMTOFF=tm_gmtoff -DTM_ZONE=tm_zone +PROG= zic +MAN5= tzfile.0 + +SRCS= zic.c scheck.c ialloc.c + +YDATA= africa antarctica asia australasia europe northamerica \ + southamerica pacificnew etcetera factory +NDATA= systemv +#SDATA= solar87 solar88 solar89 +TDATA= ${YDATA} ${NDATA} ${SDATA} +DATA= ${YDATA} ${NDATA} ${SDATA} leapseconds +USNO= usno1988 usno1989 + +posix_only: ${TDATA} + (cd ${.CURDIR}/datfiles; \ + ../obj/zic -d ${TZDIR} -L /dev/null ${TDATA}) + +right_only: leapseconds ${TDATA} + (cd ${.CURDIR}/datfiles; \ + ../obj/zic -d ${TZDIR} -L leapseconds ${TDATA}) + +other_two: leapseconds ${TDATA} + (cd ${.CURDIR}/datfiles; \ + ../obj/zic -d ${TZDIR}/posix -L /dev/null ${TDATA}) + (cd ${.CURDIR}/datfiles; \ + ../obj/zic -d ${TZDIR}/right -L leapseconds ${TDATA}) + +posix_right: posix_only other_two + +right_posix: right_only other_two + +install: maninstall ${DATA} ${REDO} + (cd ${.CURDIR}/datfiles && ../obj/zic -d ${TZDIR} -p ${POSIXRULES}) + install -c -o ${BINOWN} -g ${BINGRP} -m 444 \ + ${TZDIR}/${LOCALTIME} ${DESTDIR}/etc/localtime + chown -R ${BINOWN}.${BINGRP} ${TZDIR} + chmod -R a-w ${TZDIR} + +.include <bsd.prog.mk> diff --git a/share/zoneinfo/datfiles/africa b/share/zoneinfo/datfiles/africa new file mode 100644 index 0000000..bed0252 --- /dev/null +++ b/share/zoneinfo/datfiles/africa @@ -0,0 +1,43 @@ +# @(#)africa 4.3 + +############################################################################### + +# Egypt + +# From Bob Devine (January 28, 1988): +# Egypt: DST from first day of May to first of October (ending may +# also be on Sept 30th not 31st -- you might want to ask one of the +# soc.* groups, you might hit someone who could ask an embassy). +# DST since 1960 except for 1981-82. + +# From U. S. Naval Observatory (January 19, 1989): +# EGYPT 2 H AHEAD OF UTC +# EGYPT 3 H AHEAD OF UTC MAY 17 - SEP 30 (AFTER +# EGYPT RAMADAN) + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Egypt 1960 max - May 1 2:00 1:00 " DST" +Rule Egypt 1960 max - Oct 1 2:00 0 - + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Egypt 2:00 Egypt EET%s 1981 + 2:00 - EET 1983 + 2:00 Egypt EET%s + +############################################################################### + +# Libya + +# From Bob Devine (January 28 1988): +# Libya: Since 1982 April 1st to September 30th (?) + +# From U. S. Naval Observatory (January 19, 1989): +# LIBYAN ARAB 1 H AHEAD OF UTC JAMAHIRIYA/LIBYA +# LIBYAN ARAB 2 H AHEAD OF UTC APR 1 - SEP 30 JAMAHIRIYA/LIBYA + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Libya 1982 max - Apr 1 2:00 1:00 " DST" +Rule Libya 1982 max - Sep 30 2:00 0 - + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Libya 2:00 Libya EET%s diff --git a/share/zoneinfo/datfiles/antarctica b/share/zoneinfo/datfiles/antarctica new file mode 100644 index 0000000..276dda1 --- /dev/null +++ b/share/zoneinfo/datfiles/antarctica @@ -0,0 +1,4 @@ +# @(#)antarctica 4.1 + +# From Arthur David Olson (February 13, 1988): +# No data available. diff --git a/share/zoneinfo/datfiles/asia b/share/zoneinfo/datfiles/asia new file mode 100644 index 0000000..13185b0 --- /dev/null +++ b/share/zoneinfo/datfiles/asia @@ -0,0 +1,262 @@ +# @(#)asia 7.1 + +# From Guy Harris: +# Incorporates data for Singapore from Robert Elz' asia 1.1, as well as +# additional information from Tom Yap, Sun Microsystems Intercontinental +# Technical Support (including a page from the Official Airline Guide - +# Worldwide Edition). The names for time zones are guesses. + +############################################################################### + +# People's Republic of China + +# From Guy Harris: +# People's Republic of China. Yes, they really have only one time zone. + +# From Bob Devine (January 28, 1988): +# No they don't. See TIME mag, February 17, 1986 p.52. Even though +# China is across 4 physical time zones, before Feb 1, 1986 only the +# Peking (Bejing) time zone was recognized. Since that date, China +# has two of 'em -- Peking's and Urumqi (named after the capital of +# the Xinjiang Uighur Autonomous Region). I don't know about DST for it. +# +# . . .I just deleted the DST table and this editor makes it too +# painful to suck in another copy.. So, here is what I have for +# DST start/end dates for Peking's time zone (info from AP): +# +# 1986 May 4 - Sept 14 +# 1987 mid-April - ?? + +# From U. S. Naval Observatory (January 19, 1989): +# CHINA 8 H AHEAD OF UTC ALL OF CHINA, INCL TAIWAN +# CHINA 9 H AHEAD OF UTC APR 17 - SEP 10 + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule PRC 1970 max - Apr Sun<=14 2:00 1:00 D +Rule PRC 1970 max - Sep Sun<=14 3:00 0 S + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone PRC 8:00 PRC C%sT + +############################################################################### + +# Republic of China + +# From Guy Harris + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone ROC 8:00 - CST + +############################################################################### + +# Hongkong + +# From Guy Harris + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Hongkong 8:00 - HKT + +############################################################################### + +# Iran + +# From Bob Devine (January 28, 1988): +# Iran: Last Sunday in March to third (?) Sunday in +# September. Since the revolution, the official calendar is Monarchic +# calendar; I have no idea what the correspondence between dates are. + +# From U. S. Naval Observatory (January 19, 1989): +# IRAN 3.5H AHEAD OF UTC + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Iran 1988 max - Mar lastSun 2:00 1:00 D +Rule Iran 1988 max - Sep Sun>=15 2:00 0 S + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Iran 3:30 Iran I%sT + +############################################################################### + +# Israel + +# From U. S. Naval Observatory (January 19, 1989): +# ISRAEL 2 H AHEAD OF UTC +# ISRAEL 3 H AHEAD OF UTC APR 10 - SEP 3 + +# From Ephraim Silverberg (April 18, 1989): + +# Prior to 1989, the rules concerning Daylight Savings Time changed every +# year; as information, regarding exact times and dates during this period, +# is not readily available at the present time, the rules commence starting +# with the year 1989. + +# From 1989 onwards the rules are as follows: +# +# 1. Daylight Savings Time commences midnight of the first Saturday night +# following the seven-day festival of Pesach (Passover). The transition +# is from midnight Israel Standard Time to 1 a.m. Israel Daylight Savings +# time. As the Pesach festival is dependent on the Lunar calendar (the +# first day is always on the 15th day of the month of Nisan), the rule +# changes every year on the Gregorian calendar. +# +# 2. Standard Time is reinstated on the Saturday night whereupon Jews +# following the Ashkenazi (European) rite begin to recite the Selichot +# (forgiveness) prayers prior to the Jewish Lunar New Year. The transition +# is from midnight Israel Daylight Savings time to 11 p.m. Israel Standard +# Time. The law (according to the Ashkenazi custom) concerning the +# commencement of the Selichot prayers is described in chapter 128, section +# 5 of the "Code of Jewish Law," by Rabbi Shlomo Ganzfried (translated by +# Hyman E. Goldin): +# +# Beginning with the Sunday [**] before Rosh Hashanah [***], +# we rise early for the service of Selichot (supplications for +# forgiveness). If Rosh Hashanah occurs on Monday or Tuesday, we +# begin saying the Selichot from the Sunday of the preceding week. +# +# This, too, varies from year to year on the Gregorian calendar and, thus, +# two explicit timezone rules are required for each Gregorian year. +# +# [**] actually Saturday night as the Jewish day commences at nightfall. +# [***] the Jewish Lunar New Year. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Zion 1989 only - Apr 30 0:00 1:00 D +Rule Zion 1989 only - Sep 24 0:00 0:00 S +Rule Zion 1990 only - Apr 22 0:00 1:00 D +Rule Zion 1990 only - Sep 16 0:00 0:00 S +Rule Zion 1991 only - Apr 7 0:00 1:00 D +Rule Zion 1991 only - Sep 1 0:00 0:00 S +Rule Zion 1992 only - Apr 26 0:00 1:00 D +Rule Zion 1992 only - Sep 20 0:00 0:00 S +Rule Zion 1993 only - Apr 18 0:00 1:00 D +Rule Zion 1993 only - Sep 12 0:00 0:00 S +Rule Zion 1994 only - Apr 3 0:00 1:00 D +Rule Zion 1994 only - Aug 28 0:00 0:00 S +Rule Zion 1995 only - Apr 23 0:00 1:00 D +Rule Zion 1995 only - Sep 17 0:00 0:00 S +Rule Zion 1996 only - Apr 14 0:00 1:00 D +Rule Zion 1996 only - Sep 8 0:00 0:00 S +Rule Zion 1997 only - May 4 0:00 1:00 D +Rule Zion 1997 only - Sep 28 0:00 0:00 S +Rule Zion 1998 only - Apr 19 0:00 1:00 D +Rule Zion 1998 only - Sep 13 0:00 0:00 S +Rule Zion 1999 only - Apr 11 0:00 1:00 D +Rule Zion 1999 only - Sep 5 0:00 0:00 S +Rule Zion 2000 only - Apr 30 0:00 1:00 D +Rule Zion 2000 only - Sep 24 0:00 0:00 S +Rule Zion 2001 only - Apr 15 0:00 1:00 D +Rule Zion 2001 only - Sep 9 0:00 0:00 S +Rule Zion 2002 only - Apr 7 0:00 1:00 D +Rule Zion 2002 only - Sep 1 0:00 0:00 S +Rule Zion 2003 only - Apr 27 0:00 1:00 D +Rule Zion 2003 only - Sep 21 0:00 0:00 S +Rule Zion 2004 only - Apr 18 0:00 1:00 D +Rule Zion 2004 only - Sep 12 0:00 0:00 S +Rule Zion 2005 only - May 1 0:00 1:00 D +Rule Zion 2005 only - Sep 25 0:00 0:00 S +Rule Zion 2006 only - Apr 23 0:00 1:00 D +Rule Zion 2006 only - Sep 17 0:00 0:00 S +Rule Zion 2007 only - Apr 15 0:00 1:00 D +Rule Zion 2007 only - Sep 9 0:00 0:00 S +Rule Zion 2008 only - Apr 27 0:00 1:00 D +Rule Zion 2008 only - Sep 21 0:00 0:00 S +Rule Zion 2009 only - Apr 19 0:00 1:00 D +Rule Zion 2009 only - Sep 13 0:00 0:00 S + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Israel 2:00 Zion I%sT + +# The following is a chart of the day of the week and Gregorian date of +# the first day of Pesach and the first day of Rosh Hashanah for the years +# 1989 through 2009 inclusive. +# +# First Day of Passover +# --------------------- +# Gregorian Year Day of Week Month Day +# -------------- ----------- ----- --- +# 1989 Thursday April 20 +# 1990 Tuesday April 10 +# 1991 Saturday March 30 +# 1992 Saturday April 18 +# 1993 Tuesday April 6 +# 1994 Sunday March 27 +# 1995 Saturday April 15 +# 1996 Thursday April 4 +# 1997 Tuesday April 22 +# 1998 Saturday April 11 +# 1999 Thursday April 1 +# 2000 Thursday April 20 +# 2001 Sunday April 8 +# 2002 Thursday March 28 +# 2003 Thursday April 17 +# 2004 Tuesday April 6 +# 2005 Sunday April 24 +# 2006 Thursday April 13 +# 2007 Tuesday April 3 +# 2008 Sunday April 20 +# 2009 Thursday April 9 +# +# First Day of Rosh Hashanah +# -------------------------- +# Gregorian Year Day of Week Month Day +# -------------- ----------- ----- --- +# 1989 Saturday September 30 +# 1990 Thursday September 20 +# 1991 Monday September 9 +# 1992 Monday September 28 +# 1993 Thursday September 16 +# 1994 Tuesday September 6 +# 1995 Monday September 25 +# 1996 Saturday September 14 +# 1997 Thursday October 2 +# 1998 Monday September 21 +# 1999 Saturday September 11 +# 2000 Saturday September 30 +# 2001 Tuesday September 18 +# 2002 Saturday September 7 +# 2003 Saturday September 27 +# 2004 Thursday September 16 +# 2005 Tuesday October 4 +# 2006 Saturday September 23 +# 2007 Thursday September 13 +# 2008 Tuesday September 30 +# 2009 Saturday September 19 + +############################################################################### + +# Japan + +# From Guy Harris + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Japan 9:00 - JST + +############################################################################### + +# Republic of Korea + +# From Guy Harris: +# According to someone at the Korean Times in San Francisco, +# Daylight Savings Time was not observed until 1987. He did not know +# at what time of day DST starts or ends. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule ROK 1987 max - May Sun<=14 2:00 1:00 D +Rule ROK 1987 max - Oct Sun<=14 3:00 0 S + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone ROK 9:00 ROK K%sT + +############################################################################### + +# Lebanon + +# From Bob Devine (January 28, 1988): +# Lebanon: They do have DST but I don't know the dates. + +############################################################################### + +# Singapore + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Singapore 8:00 - SST diff --git a/share/zoneinfo/datfiles/australasia b/share/zoneinfo/datfiles/australasia new file mode 100644 index 0000000..8aad7e0 --- /dev/null +++ b/share/zoneinfo/datfiles/australasia @@ -0,0 +1,110 @@ +# @(#)australasia 4.4 + +# Incorporates updates for Australia from Robert Elz' australia 1.1 +# and further updates from the Australian consulate. + +############################################################################### + +# Australia + +# Australian Data (for states with DST), standard rules +# Includes shift in 1987 to follow Vic/NSW rules for ending DST, +# and shift in 1986 to start DST earlier. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Oz 1971 1985 - Oct lastSun 2:00 1:00 - +Rule Oz 1986 max - Oct Sun<=24 2:00 1:00 - +Rule Oz 1972 only - Feb 27 3:00 0 - +Rule Oz 1973 1986 - Mar Sun>=1 3:00 0 - +Rule Oz 1987 max - Mar Sun<=21 3:00 0 - + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Australia/Tasmania 10:00 Oz EST +Zone Australia/Queensland 10:00 - EST # No DST here +Zone Australia/North 9:30 - CST # No DST here +Zone Australia/West 8:00 - WST # No DST here +Zone Australia/South 9:30 Oz CST + +# Victoria jumped to a later ending date for DST in 1986 rather than 1987. + +Zone Australia/Victoria 10:00 Oz EST 1985 Oct lastSun 2:00 + 10:00 1:00 EST 1986 Mar Sun<=21 3:00 + 10:00 Oz EST + +# New South Wales and subjurisdictions have their own ideas of a fun time. +# 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'' +# [I mean, of course, Australian EST, not any other kind] are in common +# use, _they have NO REAL MEANING_, as they are not defined in the +# legislation. This is very important to understand. +# I have researched New South Wales time only; . . .I hope that perhaps a +# resident of each state could be found to do it for their own state. +# (And I can guarantee that Victoria and NSW are different, so the link +# between them in the current australasia file must be broken.) + +# From Robert Elz (May 5, 1989): +# +# From next year (1990) NSW will revert to ending DST on the 1st +# Sunday in March (rather than the third, which it appears will +# continue to be what everyone else uses). + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule NSW 1971 1985 - Oct lastSun 2:00 1:00 - +Rule NSW 1972 only - Feb lastSun 3:00 0 - +Rule NSW 1973 1981 - Mar Sun>=1 3:00 0 - +Rule NSW 1982 only - Apr 4 3:00 0 - +Rule NSW 1983 1985 - Mar Sun>=1 3:00 0 - +Rule NSW 1986 only - Mar 16 3:00 0 - +Rule NSW 1986 only - Oct 19 2:00 1:00 - +Rule NSW 1987 only - Mar 15 3:00 0 - +Rule NSW 1987 max - Oct lastSun 2:00 1:00 - +Rule NSW 1988 1989 - Mar Sun<=21 3:00 0 - +Rule NSW 1990 max - Mar Sun>=1 3:00 0 - + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Australia/NSW 10:00 NSW EST +# `Broken Hill' means the County of Yancowinna. [john@basser.cs.su.oz.au,1/4/89] +Zone Australia/Yancowinna 9:30 NSW ??? +Zone Australia/LHI 10:30 NSW ??? + +# A footnote here: +# +# . . . +# Date: Thu, j19 Feb 87 12:02:17 EST +# From: Bradley White <seismo!k.cs.cmu.edu!bww> +# . . . +# I am including a description of Australian time zones. . . +# this stuff is definitely accurate. +# . . . +# a) Australian Eastern Time: (EST = GMT+10:00, EDT = GMT+11:00) +# . . . +# Summer of 86/87 - present (current legislation): +# third Sun Oct 02:00 EST -> third [S]un Mar 02:00 EST +# +# If this turns out to be true, substitute Sun<=21 (third Sunday in October) +# for Sun<=24 (next-to-last Sunday in October) above. . .some time before +# October 1988, the first time it makes a difference. + +############################################################################### + +# New Zealand + +# New Zealand, from Elz' asia 1.1 +# Elz says "no guarantees" +# +# the 1989/90 year was a trial of an extended "daylight saving" period. +# This trial was deemed successful and the extended period adopted for +# subsequent years (with the addition of a further week at the start). +# source -- phone call to Ministry of Internal Affairs Head Office. +# Mark Davies <mark@comp.vuw.ac.nz>, 3 Oct 1990. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule NZ 1974 1988 - Oct lastSun 2:00 1:00 D +Rule NZ 1989 only - Oct 8 2:00 1:00 D +Rule NZ 1990 max - Oct Sun>=1 2:00 1:00 D +Rule NZ 1975 1989 - Mar Sun>=1 3:00 0 S +Rule NZ 1990 max - Mar Sun>=15 3:00 0 S + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone NZ 12:00 NZ NZ%sT # New Zealand diff --git a/share/zoneinfo/datfiles/etcetera b/share/zoneinfo/datfiles/etcetera new file mode 100644 index 0000000..dbda4db --- /dev/null +++ b/share/zoneinfo/datfiles/etcetera @@ -0,0 +1,55 @@ +# @(#)etcetera 4.4 + +# All of these are set up just so people can "zic -l" to a timezone +# that's right for their area, even if it doesn't have a name or dst rules +# (half hour zones are too much to bother with -- when someone asks!) + +Zone GMT 0 - GMT + +Zone GMT-12 -12 - GMT-1200 +Zone GMT-11 -11 - GMT-1100 +Zone GMT-10 -10 - GMT-1000 +Zone GMT-9 -9 - GMT-0900 +Zone GMT-8 -8 - GMT-0800 +Zone GMT-7 -7 - GMT-0700 +Zone GMT-6 -6 - GMT-0600 +Zone GMT-5 -5 - GMT-0500 +Zone GMT-4 -4 - GMT-0400 +Zone GMT-3 -3 - GMT-0300 +Zone GMT-2 -2 - GMT-0200 +Zone GMT-1 -1 - GMT-0100 +Zone GMT+1 1 - GMT+0100 +Zone GMT+2 2 - GMT+0200 +Zone GMT+3 3 - GMT+0300 +Zone GMT+4 4 - GMT+0400 +Zone GMT+5 5 - GMT+0500 +Zone GMT+6 6 - GMT+0600 +Zone GMT+7 7 - GMT+0700 +Zone GMT+8 8 - GMT+0800 +Zone GMT+9 9 - GMT+0900 +Zone GMT+10 10 - GMT+1000 +Zone GMT+11 11 - GMT+1100 +Zone GMT+12 12 - GMT+1200 +Zone GMT+13 13 - GMT+1300 # GMT+12 with DST + +Link GMT UTC +Link GMT UCT +Link GMT Universal +Link GMT Greenwich +Link GMT Zulu +Link GMT GMT-0 +Link GMT GMT+0 +Link GMT GMT0 +Link GMT+1 GMT1 +Link GMT+2 GMT2 +Link GMT+3 GMT3 +Link GMT+4 GMT4 +Link GMT+5 GMT5 +Link GMT+6 GMT6 +Link GMT+7 GMT7 +Link GMT+8 GMT8 +Link GMT+9 GMT9 +Link GMT+10 GMT10 +Link GMT+11 GMT11 +Link GMT+12 GMT12 +Link GMT+13 GMT13 diff --git a/share/zoneinfo/datfiles/europe b/share/zoneinfo/datfiles/europe new file mode 100644 index 0000000..1fdffa3 --- /dev/null +++ b/share/zoneinfo/datfiles/europe @@ -0,0 +1,224 @@ +# @(#)europe 4.10 + +# International country codes are used to identify countries' rules and +# zones +# +# 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 +# ado@ncifcrf.gov for general use in the future). + +############################################################################### + +# United Kingdom + +# From Arthur David Olson (January 19, 1989): +# +# The starting and ending dates below (from which the rules are derived) +# are from Whitaker's Almanack for 1987, page 146. +# 1960 is the earliest year for which dates are given; +# Whitaker's notes that British Summer Time (and, in some years, Double Summer +# Time) was observed in earlier years but does not give start and end dates. +# +# A source at the British Information Office in New York avers that it's +# known as "British" Summer Time in all parts of the United Kingdom. +# 1960 April 10 October 2 (yes, 2, according to the almanac) +# 1961 March 26 October 29 +# 1962 March 25 October 28 +# 1963 March 31 October 27 +# 1964 March 22 October 25 +# 1965 March 21 October 24 +# 1966 March 20 October 23 +# 1967 March 19 October 29 +# 1968 February 18 October 27 +# "British Standard Time, also one hour ahead of G. M. T., was kept between +# 1968 Oct. 27-1971 Oct. 31." +# 1972 March 19 October 29 +# 1973 March 18 October 28 +# 1974 March 17 October 27 +# 1975 March 16 October 26 +# 1976 March 21 October 24 +# 1977 March 20 October 23 +# 1978 March 19 October 29 +# 1979 March 18 October 28 +# 1980 March 16 October 26 +# 1981 March 29 October 25 +# 1982 March 28 October 24 +# 1983 March 27 October 23 +# 1984 March 25 October 28 +# 1985 March 31 October 27 +# 1986 March 30 October 26 +# 1987 March 29 October 25 + +# From an Anonymous U. K. Donor (January 4, 1989): +# +# It is NOT possible to predict when [British Summer Time] will change +# in a future year. +# +# (The admiralty calculate when they think it should be (no more that a couple +# of years in advance) and advise the government who then decide whether or +# not they will take the admiralty's advice) +# +# ...the Gre[e]nwich...observatory...[was] very helpful. +# +# I was not able to track down the Admiralty formula (I tried hard but failed) + +# ... +# Date: 4 Jan 89 08:57:25 GMT (Wed) +# 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. +# +# Summer time ends on Sunday 29 October 1989. + +# ... +# Date: 5 Jan 89 09:50:38 GMT (Thu) +# From: Peter Kendell <nih-csl!uunet!mcvax!tcom.stc.co.uk!pete> +# ... +# +# From my Collins Diary for 1989 - +# +# "At the time of going to press the Home Office was unable to confirm +# the 1989 starting and finishing dates for BST*, but expressed the +# view that 26 March and 29 October were the likeliest dates to be +# adopted" +# +# *British Summer Time. + +# From an Anonymous U. K. Donor (January 5, 1989): +# +# . . .our government is seriously considering applying Double Summer Time - +# putting the clocks forwards and back TWO hours for daylight saving time. +# This is advocated to standardise time in the EEC - we're all supposed to +# keep the same time and to change the clocks on the same dates in the future. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Historic starting rules +Rule GB-Eire 1960 only - Apr 10 1:00s 1:00 BST +Rule GB-Eire 1961 1963 - Mar lastSun 1:00s 1:00 BST +Rule GB-Eire 1964 1967 - Mar Sun>=19 1:00s 1:00 BST +Rule GB-Eire 1968 only - Feb 18 1:00s 1:00 BST +Rule GB-Eire 1972 1980 - Mar Sun>=16 1:00s 1:00 BST +# Historic ending rules +Rule GB-Eire 1960 only - Oct 2 1:00s 0 GMT +Rule GB-Eire 1961 1967 - Oct Sun>=23 1:00s 0 GMT +Rule GB-Eire 1971 only - Oct 31 1:00s 0 GMT +# Current rules +Rule GB-Eire 1981 max - Mar lastSun 1:00s 1:00 BST +Rule GB-Eire 1972 max - Oct Sun>=23 1:00s 0 GMT + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone GB-Eire 0:00 GB-Eire %s 1968 Oct 27 1:00s + 1:00 - BST 1971 Oct 31 1:00s + 0:00 GB-Eire %s + +############################################################################### + +# Continental Europe + +# The use of 1986 as starting years below is conservative. + +Rule W-Eur 1986 max - Mar lastSun 1:00s 1:00 " DST" +Rule W-Eur 1986 max - Sep lastSun 1:00s 0 - + +Rule M-Eur 1986 max - Mar lastSun 2:00s 1:00 " DST" +Rule M-Eur 1986 max - Sep lastSun 2:00s 0 - + +Rule E-Eur 1986 max - Mar lastSun 3:00s 1:00 " DST" +Rule E-Eur 1986 max - Sep lastSun 3:00s 0 - + +Rule Turkey 1986 max - Mar lastSun 1:00 1:00 " DST" +Rule Turkey 1986 max - Sep lastSun 1:00 0 - + +Rule W-SU 1986 max - Mar lastSun 2:00s 1:00 " DST" +Rule W-SU 1986 max - Sep lastSun 2:00s 0 - + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone WET 0:00 W-Eur WET%s +Zone Iceland 0:00 - WET +Zone MET 1:00 M-Eur MET%s +Zone Poland 1:00 W-Eur MET%s +Zone EET 2:00 E-Eur EET%s +Zone Turkey 3:00 Turkey EET%s +Zone W-SU 3:00 M-Eur ???? + +# Tom Hoffman says that MET is also known as Central European Time + +Link MET CET + +############################################################################### + +# One source shows that Bulgaria, Cyprus, Finland, and Greece observe DST from +# the last Sunday in March to the last Sunday in September in 1986. +# The source shows Romania changing a day later than everybody else. +# +# According to Bernard Sieloff's source, Poland is in the MET time zone but +# uses the WE DST rules. The Western USSR uses EET+1 and ME DST rules. +# Bernard Sieloff's source claims Romania switches on the same day, but at +# 00:00 standard time (i.e., 01:00 DST). It also claims that Turkey +# switches on the same day, but switches on at 01:00 standard time +# and off at 00:00 standard time (i.e., 01:00 DST) + +# ... +# Date: Wed, 28 Jan 87 16:56:27 -0100 +# From: seismo!mcvax!cgcha!wtho (Tom Hofmann) +# Message-Id: <8701281556.AA22174@cgcha.uucp> +# ... +# +# ...the European time rules are...standardized since 1981, when +# most European coun[tr]ies started DST. Before that year, only +# a few countries (UK, France, Italy) had DST, each according +# to own national rules. In 1981, however, DST started on +# 'Apr firstSun', and not on 'Mar lastSun' as in the following +# years... +# But also since 1981 there are some more national exceptions +# than listed in 'europe': Switzerland, for example, joined DST +# one year later, Denmark ended DST on 'Oct 1' instead of 'Sep +# lastSun' in 1981---I don't know how they handle now. +# +# Finally, DST ist always from 'Apr 1' to 'Oct 1' in the +# Soviet Union (as far as I know). +# +# Tom Hofmann, Scientific Computer Center, CIBA-GEIGY AG, +# 4002 Basle, Switzerland +# UUCP: ...!mcvax!cernvax!cgcha!wtho + +# ... +# Date: Wed, 4 Feb 87 22:35:22 +0100 +# From: seismo!mcvax!cwi.nl!dik (Dik T. Winter) +# ... +# +# The information from Tom Hofmann is (as far as I know) not entirely correct. +# After a request from chongo at amdahl I tried to retrieve all information +# about DST in Europe. I was able to find all from about 1969. +# +# ...standardization on DST in Europe started in about 1977 with switches on +# first Sunday in April and last Sunday in September... +# In 1981 UK joined Europe insofar that +# the starting day for both shifted to last Sunday in March. And from 1982 +# the whole of Europe used DST, with switch dates April 1 and October 1 in +# the Sov[i]et Union. In 1985 the SU reverted to standard Europe[a]n switch +# dates... +# +# It should also be remembered that time-zones are not constants; e.g. +# Portugal switched in 1976 from MET (or CET) to WET with DST... +# Note also that though there were rules for switch dates not +# all countries abided to these dates, and many individual deviations +# occurred, though not since 1982 I believe. Another note: it is always +# assumed that DST is 1 hour ahead of normal time, this need not be the +# case; at least in the Netherlands there have been times when DST was 2 hours +# in advance of normal time. +# +# ... +# dik t. winter, cwi, amsterdam, nederland +# INTERNET : dik@cwi.nl +# BITNET/EARN: dik@mcvax + +# From Bob Devine (January 28, 1988): +# ... +# Greece: Last Sunday in April to last Sunday in September (iffy on dates). +# Since 1978. Change at midnight. +# ... +# Monaco: has same DST as France. +# ... diff --git a/share/zoneinfo/datfiles/factory b/share/zoneinfo/datfiles/factory new file mode 100644 index 0000000..c1c38c1 --- /dev/null +++ b/share/zoneinfo/datfiles/factory @@ -0,0 +1,8 @@ +# @(#)factory 1.1 + +# For companies who don't want to put time zone specification in +# their installation procedures. When users run date, they'll get the message. +# Also useful for the "comp.sources" version. + +# Zone NAME GMTOFF RULES FORMAT +Zone Factory 0 - "Local time zone must be set--see zic manual page" diff --git a/share/zoneinfo/datfiles/leapseconds b/share/zoneinfo/datfiles/leapseconds new file mode 100644 index 0000000..cc7c6b4 --- /dev/null +++ b/share/zoneinfo/datfiles/leapseconds @@ -0,0 +1,31 @@ +# @(#)leapseconds 8.1 (Berkeley) 6/29/93 + +# Allowance for leapseconds added to each timezone file. + +# The correction (+ or -) is made at the given time, so lines +# will typically look like: +# Leap YEAR MON DAY 23:59:60 + R/S +# or +# Leap YEAR MON DAY 23:59:59 - R/S + +# If the leapsecond is Rolling (R) the given time is local time +# If the leapsecond is Stationary (S) the given time is GMT + +# Leap YEAR MONTH DAY HH:MM:SS CORR R/S +Leap 1972 Jun 30 23:59:60 + S +Leap 1972 Dec 31 23:59:60 + S +Leap 1973 Dec 31 23:59:60 + S +Leap 1974 Dec 31 23:59:60 + S +Leap 1975 Dec 31 23:59:60 + S +Leap 1976 Dec 31 23:59:60 + S +Leap 1977 Dec 31 23:59:60 + S +Leap 1978 Dec 31 23:59:60 + S +Leap 1979 Dec 31 23:59:60 + S +Leap 1981 Jun 30 23:59:60 + S +Leap 1982 Jun 30 23:59:60 + S +Leap 1983 Jun 30 23:59:60 + S +Leap 1985 Jun 30 23:59:60 + S +Leap 1987 Dec 31 23:59:60 + S +Leap 1989 Dec 31 23:59:60 + S +Leap 1990 Dec 31 23:59:60 + S +Leap 1993 Jun 30 23:59:60 + S diff --git a/share/zoneinfo/datfiles/northamerica b/share/zoneinfo/datfiles/northamerica new file mode 100644 index 0000000..53a1df1 --- /dev/null +++ b/share/zoneinfo/datfiles/northamerica @@ -0,0 +1,321 @@ +# @(#)northamerica 4.8 + +############################################################################### + +# United States + +# From Arthur David Olson: +# US Daylight Saving Time ended on the last Sunday of *October* in 1974. +# See, for example, the front page of the Saturday, October 26, 1974 +# and Sunday, October 27, 1974 editions of the Washington Post. + +# From seismo!munnari!kre: +# I recall also being told by someone once that Canada didn't have +# the DST variations in 74/75 that the US did, but I am not nearly +# sure enough of this to add anything. + +# From Arthur David Olson: +# The above has been confirmed by Bob Devine; we'll go with it here. + +# From Arthur David Olson: +# Before the Uniform Time Act of 1966 took effect in 1967, observance of +# Daylight Saving Time in the US was by local option, except during wartime. + +# 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 - Sep 30 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 max - Apr Sun>=1 2:00 1:00 D + +# From Bob Devine (January 28, 1988): +# ...Alaska (and Hawaii) had the timezone names changed in 1967. +# old new +# Pacific Standard Time(PST) -same- +# Yukon Standard Time(YST) -same- +# Central Alaska S.T. (CAT) Alaska-Hawaii St[an]dard Time (AHST) +# Nome Standard Time (NT) Bering Standard Time (BST) +# +# ...Alaska's timezone lines were redrawn in 1983 to give only 2 tz. +# The YST zone now covers nearly all of the state, AHST just part +# of the Aleutian islands. No DST. + +# From U. S. Naval Observatory (January 19, 1989): +# USA EASTERN 5 H BEHIND UTC NEW YORK, WASHINGTON +# USA EASTERN 4 H BEHIND UTC APR 3 - OCT 30 +# USA CENTRAL 6 H BEHIND UTC CHICAGO, HOUSTON +# USA CENTRAL 5 H BEHIND UTC APR 3 - OCT 30 +# USA MOUNTAIN 7 H BEHIND UTC DENVER +# USA MOUNTAIN 6 H BEHIND UTC APR 3 - OCT 30 +# USA PACIFIC 8 H BEHIND UTC L.A., SAN FRANCISCO +# USA PACIFIC 7 H BEHIND UTC APR 3 - OCT 30 +# USA ALASKA STD 9 H BEHIND UTC MOST OF ALASKA (AKST) +# USA ALASKA STD 8 H BEHIND UTC APR 3 - OCT 30 (AKDT) +# USA ALEUTIAN 10 H BEHIND UTC ISLANDS WEST OF 170W +# USA - " - 9 H BEHIND UTC APR 3 - OCT 30 +# USA HAWAII 10 H BEHIND UTC +# USA BERING 11 H BEHIND UTC SAMOA, MIDWAY + +# From Arthur David Olson (January 21, 1989): +# The above dates are for 1988. +# Note the "AKST" and "AKDT" abbreviations, the claim that there's +# no DST in Samoa, and the claim that there is DST in Alaska and the +# Aleutians. + +# From Arthur David Olson (February 13, 1988): +# Legal standard time zone names, from United States Code (1982 Edition and +# Supplement III), Title 15, Chapter 6, Section 260 and forward. First, names +# up to April 1, 1967 (when most provisions of the Uniform Time Act of 1966 +# took effect), as explained in sections 263 and 261: +# (none) +# United States standard eastern time +# United States standard mountain time +# United States standard central time +# United States standard Pacific time +# (none) +# United States standard Alaska time +# (none) +# Next, names from April 1, 1967 until November 30, 1983 (the date for +# public law 98-181): +# Atlantic standard time +# eastern standard time +# central standard time +# mountain standard time +# Pacific standard time +# Yukon standard time +# Alaska-Hawaii standard time +# Bering standard time +# And after November 30, 1983: +# Atlantic standard time +# eastern standard time +# central standard time +# mountain standard time +# Pacific standard time +# Alaska standard time +# Hawaii-Aleutian standard time +# Samoa standard time +# The law doesn't give abbreviations. + +# Easy stuff first--including Alaska, where we ignore history (since we +# can't tell if we should give Yukon time or Alaska-Hawaii time for "old" +# times). + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone US/Eastern -5:00 US E%sT +Zone US/Central -6:00 US C%sT +Zone US/Mountain -7:00 US M%sT +Zone US/Pacific -8:00 US P%sT +Zone US/Alaska -9:00 US AK%sT # Abbreviation per USNO + +# Mainland US areas that are always Standard as of 1986. + +Zone US/East-Indiana -5:00 US E%sT 1946 + -5:00 - EST # Always EST as of 1986 +Zone US/Arizona -7:00 US M%sT 1946 + -7:00 - MST # Always MST as of 1986 + +# From Arthur David Olson (February 13, 1988): +# However. . .a writer from the Inter Tribal Council of Arizona, Inc., +# notes in private correspondence dated 12/28/87 that "Presently, only the +# Navajo Nation participates in the Daylight Saving Time policy, due to its +# large size and location in three states." (The "only" means that other +# tribal nations don't use DST.) + +Link US/Mountain Navajo + +# From Bob Devine (January 28, 1988): +# Michigan didn't observe DST from 1968 to 1973. + +Zone US/Michigan -5:00 US E%sT 1968 + -5:00 - EST 1973 + -5:00 US E%sT + +# Samoa just changes names. No DST, per Naval Observatory. + +Zone US/Samoa -11:00 - NST 1967 Apr 1 # N=Nome + -11:00 - BST 1983 Nov 30 # B=Bering + -11:00 - SST # S=Samoa + +# Aleutian has a name change. DST, per Naval Observatory. + +Zone US/Aleutian -10:00 US AH%sT 1983 Nov 30 + -10:00 US HA%sT + +# From Arthur David Olson: +# And then there's Hawaii. +# DST was observed for one day in 1933; +# Standard time was change by half an hour in 1947; +# it's always standard as of 1986. + +Zone US/Hawaii -10:30 US H%sT 1933 Apr 30 2:00 + -10:30 1:00 HDT 1933 May 1 2:00 + -10:30 US H%sT 1947 Jun 8 2:00 + -10:00 - HST + +# Old names, for S5 users + +# Link LINK-FROM LINK-TO +# Link US/Eastern EST5EDT +# Link US/Central CST6CDT +# Link US/Mountain MST7MDT +# Link US/Pacific PST8PDT +# Link US/East-Indiana EST +# Link US/Arizona MST +# Link US/Hawaii HST + +################################################################################ + +# Canada + +# Canada is reportedly lots easier than the US--leastways since 1951. +# I don't know what they did before then. +# 4.3BSD claims that it's perfectly regular. +# According to a posting in "comp.bugs.misc", "comp.unix.wizards", etc. +# on February 8, 1987, by Dave Sherman of the Law Society of Upper Canada, +# "...Canada (well, Ontario and at least some of the other provinces) are +# adopting the new daylight savings time rules...". We assume all of +# Canada is doing so. + +# From Bob Devine (January 28, 1988): +# All of Canada did have DST from your first rule except Saskatchewan. +# Which parts did not observe DST is hard to pinpoint but most of the +# province follows the rules. +# NOTE: those that didn't have DST for that rule, also +# probably did not have it for several years previous. + +# From U. S. Naval Observatory (January 19, 1989): +# CANADA NEW FDL 3.5H BEHIND UTC ST.JOHN'S +# CANADA NEW FDL 1.5H BEHIND UTC APR 3 - OCT 29 +# CANADA ATLANTIC 4 H BEHIND UTC HALIFAX +# CANADA ATLANTIC 3 H BEHIND UTC APR 3 - OCT 29 +# CANADA EASTERN 5 H BEHIND UTC TORONTO, MONTREAL, OTTAWA +# CANADA EASTERN 4 H BEHIND UTC APR 3 - OCT 29 +# CANADA CENTRAL 6 H BEHIND UTC REGINA, WINNIPEG +# CANADA CENTRAL 5 H BEHIND UTC APR 3 - OCT 29 +# CANADA MOUNTAIN 7 H BEHIND UTC CALGARY, EDMONTON +# CANADA MOUNTAIN 6 H BEHIND UTC APR 3 - OCT 29 +# CANADA PACIFIC 8 H BEHIND UTC VANCOUVER +# CANADA PACIFIC 7 H BEHIND UTC APR 3 - OCT 29 +# CANADA YUKON SAME AS PACIFIC DAWSON + +# From Arthur David Olson (January 21, 1989): +# April 3 fell on a Sunday in 1988; October 29 fell on a Sunday in 1989. Ahem. +# Note claim that there's double DST in Newfoundland and that Yukon should +# be same as Pacific. Stick with rules posted in 1988 until more authoritative +# information is available. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Canada 1969 max - Oct lastSun 2:00 0 S +Rule Canada 1969 1986 - Apr lastSun 2:00 1:00 D +Rule Canada 1987 max - Apr Sun>=1 2:00 1:00 D + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +# Bob Devine says that DST *is* observed in Newfoundland +Zone Canada/Newfoundland -3:30 Canada N%sT +Zone Canada/Atlantic -4:00 Canada A%sT +Zone Canada/Eastern -5:00 Canada E%sT +Zone Canada/Central -6:00 Canada C%sT +Zone Canada/East-Saskatchewan -6:00 - CST # No DST as of 1987 +Zone Canada/Mountain -7:00 Canada M%sT +Zone Canada/Pacific -8:00 Canada P%sT +Zone Canada/Yukon -9:00 Canada Y%sT + +############################################################################### + +# Mexico + +# From Guy Harris: +# Rules are from the Official Airline Guide, Worldwide Edition, for 1987. +# Rules prior to 1987 are unknown. +# The comments in the OAG say "Only Ensenada, Mexicale, San Felipe and Tijuana +# observe DST." This is presumably Baja California Norte, above 28th parallel, +# as listed there; Mexico/BajaSur is for "Baja California Sur and N. Pacific +# Coast (States of Sinaloa and Sonora)." + +# From Bob Devine (January 28, 1988): +# The Federal District (where Mexico City is) has observed [DST] several +# times but not recently. +# +# I don't where to drawn the line in the North Baja area. 28th latitude +# sounds good -- but it may be higher (how far [d]o radio stations from +# San Diego affect culture?). +# +# The dates of DST probably go back to 1981. The rules are the same as +# US's. This is going to be a headache for US presidential electi[o]n years! + +# From Arthur David Olson (February 13, 1988) +# Since the 1981 starting date is only "probable," we'll keep the 1987 +# starting date below. + +# From U. S. Naval Observatory (January 19, 1989): +# MEXICO BAJA CAL N 7 H BEHIND UTC BAJA CALIFORNIA SUR AND +# MEXICO BAJA CAL N N. PACIFIC COAST (STATES +# MEXICO BAJA CAL N OF SINALOA AND SONORA) +# MEXICO BAJA CAL N 8 H BEHIND UTC ABOVE 28TH PARALLAL APR 3 +# MEXICO BAJA CAL N - OCT 29 +# MEXICO BAJA CAL N 7 H BEHIND UTC ABOVE 28TH PARALLAL APR 3 +# MEXICO BAJA CAL N - 0CT 29 +# MEXICO 6 H BEHIND UTC STATES OF DURANGO, +# MEXICO COAHUILA, NUEVO LEON, +# MEXICO TAMAULIPAS +# MEXICO 5 H BEHIND UTC STATES OF DURANGO, +# MEXICO COAHUILA, NUEVO LEON, +# MEXICO TAMAULIPAS APR 3 - OCT 29 +# MEXICO 6 H BEHIND UTC GENERAL MEXICO, STATES OF +# MEXICO CAMPECHE, QUINTANA ROO AND +# MEXICO YUCATAN + +# From Arthur David Olson (January 21, 1989): +# April 3 fell on a Sunday in 1988; October 29 fell on a Sunday in 1989. Ahem. +# USNO claims there should be four Mexican zones rather than three: +# a zone that's GMT-8 with DST; a zone that's always GMT-7; +# a zone that's GMT-6 with DST; and a zone that's always GMT-6. +# Wait for more authoritative information before changing. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Mexico 1987 max - Oct lastSun 2:00 0 S +Rule Mexico 1987 max - Apr Sun>=1 2:00 1:00 D + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Mexico/BajaNorte -8:00 Mexico P%sT +Zone Mexico/BajaSur -7:00 - MST +Zone Mexico/General -6:00 - CST + +############################################################################### + +# Jamaica + +# From Bob Devine (January 28, 1988): +# Follows US rules. + +# From U. S. Naval Observatory (January 19, 1989): +# JAMAICA 5 H BEHIND UTC + +Link US/Eastern Jamaica + +############################################################################### + +# Cuba + +# From Bob Devine (January 28, 1988): +# . . .DST is from 2nd Sunday in May to 2nd Sunday in October since 1981. +# Change at midnight. In 1979 & 1980, started at 3rd Sunday in March +# (I think). + +# From U. S. Naval Observatory (January 19, 1989): +# CUBA 5 H BEHIND UTC +# CUBA 4 H BEHIND UTC MAR 20 - OCT 8 + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Cuba 1979 1980 - Mar Sun>=15 0:00 1:00 D +Rule Cuba 1979 1980 - Oct Sun>=8 0:00 0 S +Rule Cuba 1981 max - May Sun>=8 0:00 1:00 D +Rule Cuba 1981 max - Oct Sun>=8 0:00 0 S + +# Zone NAME GMTOFF RULES/SAVE FORMAT +Zone Cuba -5:00 Cuba C%sT diff --git a/share/zoneinfo/datfiles/pacificnew b/share/zoneinfo/datfiles/pacificnew new file mode 100644 index 0000000..8e6850c --- /dev/null +++ b/share/zoneinfo/datfiles/pacificnew @@ -0,0 +1,21 @@ +# @(#)pacificnew 4.4 + +# From Arthur David Olson (January 18, 1989): +# On November 10, 1987, the U. S. House of Representatives passed a bill +# (H.R. 435), the "Uniform Poll Closing Time Act", establishing +# "Pacific Presidential Election Time"; it was not acted on by the Senate +# before the end of the 100th Congress and so died. +# The bill has been reintroduced in the 101st Congress as H. R. 18; +# H. R. 96 also deals with poll closing time. Either bill would have to be +# passed by both the House and Senate and signed by the President (or have +# the President's veto overridden by the House and Senate) before becoming law. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Twilite 1989 max - Apr Sun>=1 2:00 1:00 D +Rule Twilite 1989 max uspres Oct lastSun 2:00 1:00 PE +Rule Twilite 1989 max uspres Nov Sun>=7 2:00 0 S +Rule Twilite 1989 max nonpres Oct lastSun 2:00 0 S + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone US/Pacific-New -8:00 US P%sT 1989 + -8:00 Twilite P%sT diff --git a/share/zoneinfo/datfiles/solar87 b/share/zoneinfo/datfiles/solar87 new file mode 100644 index 0000000..5067457 --- /dev/null +++ b/share/zoneinfo/datfiles/solar87 @@ -0,0 +1,386 @@ +# @(#)solar87 4.1 + +# So much for footnotes about Saudi Arabia. +# Apparent noon times below are for Riyadh; your mileage will vary. +# Times were computed using formulas in the U.S. Naval Observatory's +# Almanac for Computers 1987; the formulas "will give EqT to an accuracy of +# [plus or minus two] seconds during the current year." +# +# Rounding to the nearest five seconds results in fewer than +# 256 different "time types"--a limit that's faced because time types are +# stored on disk as unsigned chars. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule sol87 1987 only - Jan 1 12:03:20s -0:03:20 - +Rule sol87 1987 only - Jan 2 12:03:50s -0:03:50 - +Rule sol87 1987 only - Jan 3 12:04:15s -0:04:15 - +Rule sol87 1987 only - Jan 4 12:04:45s -0:04:45 - +Rule sol87 1987 only - Jan 5 12:05:10s -0:05:10 - +Rule sol87 1987 only - Jan 6 12:05:40s -0:05:40 - +Rule sol87 1987 only - Jan 7 12:06:05s -0:06:05 - +Rule sol87 1987 only - Jan 8 12:06:30s -0:06:30 - +Rule sol87 1987 only - Jan 9 12:06:55s -0:06:55 - +Rule sol87 1987 only - Jan 10 12:07:20s -0:07:20 - +Rule sol87 1987 only - Jan 11 12:07:45s -0:07:45 - +Rule sol87 1987 only - Jan 12 12:08:10s -0:08:10 - +Rule sol87 1987 only - Jan 13 12:08:30s -0:08:30 - +Rule sol87 1987 only - Jan 14 12:08:55s -0:08:55 - +Rule sol87 1987 only - Jan 15 12:09:15s -0:09:15 - +Rule sol87 1987 only - Jan 16 12:09:35s -0:09:35 - +Rule sol87 1987 only - Jan 17 12:09:55s -0:09:55 - +Rule sol87 1987 only - Jan 18 12:10:15s -0:10:15 - +Rule sol87 1987 only - Jan 19 12:10:35s -0:10:35 - +Rule sol87 1987 only - Jan 20 12:10:55s -0:10:55 - +Rule sol87 1987 only - Jan 21 12:11:10s -0:11:10 - +Rule sol87 1987 only - Jan 22 12:11:30s -0:11:30 - +Rule sol87 1987 only - Jan 23 12:11:45s -0:11:45 - +Rule sol87 1987 only - Jan 24 12:12:00s -0:12:00 - +Rule sol87 1987 only - Jan 25 12:12:15s -0:12:15 - +Rule sol87 1987 only - Jan 26 12:12:30s -0:12:30 - +Rule sol87 1987 only - Jan 27 12:12:40s -0:12:40 - +Rule sol87 1987 only - Jan 28 12:12:55s -0:12:55 - +Rule sol87 1987 only - Jan 29 12:13:05s -0:13:05 - +Rule sol87 1987 only - Jan 30 12:13:15s -0:13:15 - +Rule sol87 1987 only - Jan 31 12:13:25s -0:13:25 - +Rule sol87 1987 only - Feb 1 12:13:35s -0:13:35 - +Rule sol87 1987 only - Feb 2 12:13:40s -0:13:40 - +Rule sol87 1987 only - Feb 3 12:13:50s -0:13:50 - +Rule sol87 1987 only - Feb 4 12:13:55s -0:13:55 - +Rule sol87 1987 only - Feb 5 12:14:00s -0:14:00 - +Rule sol87 1987 only - Feb 6 12:14:05s -0:14:05 - +Rule sol87 1987 only - Feb 7 12:14:10s -0:14:10 - +Rule sol87 1987 only - Feb 8 12:14:10s -0:14:10 - +Rule sol87 1987 only - Feb 9 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 10 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 11 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 12 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 13 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 14 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 15 12:14:10s -0:14:10 - +Rule sol87 1987 only - Feb 16 12:14:10s -0:14:10 - +Rule sol87 1987 only - Feb 17 12:14:05s -0:14:05 - +Rule sol87 1987 only - Feb 18 12:14:00s -0:14:00 - +Rule sol87 1987 only - Feb 19 12:13:55s -0:13:55 - +Rule sol87 1987 only - Feb 20 12:13:50s -0:13:50 - +Rule sol87 1987 only - Feb 21 12:13:45s -0:13:45 - +Rule sol87 1987 only - Feb 22 12:13:35s -0:13:35 - +Rule sol87 1987 only - Feb 23 12:13:30s -0:13:30 - +Rule sol87 1987 only - Feb 24 12:13:20s -0:13:20 - +Rule sol87 1987 only - Feb 25 12:13:10s -0:13:10 - +Rule sol87 1987 only - Feb 26 12:13:00s -0:13:00 - +Rule sol87 1987 only - Feb 27 12:12:50s -0:12:50 - +Rule sol87 1987 only - Feb 28 12:12:40s -0:12:40 - +Rule sol87 1987 only - Mar 1 12:12:30s -0:12:30 - +Rule sol87 1987 only - Mar 2 12:12:20s -0:12:20 - +Rule sol87 1987 only - Mar 3 12:12:05s -0:12:05 - +Rule sol87 1987 only - Mar 4 12:11:55s -0:11:55 - +Rule sol87 1987 only - Mar 5 12:11:40s -0:11:40 - +Rule sol87 1987 only - Mar 6 12:11:25s -0:11:25 - +Rule sol87 1987 only - Mar 7 12:11:15s -0:11:15 - +Rule sol87 1987 only - Mar 8 12:11:00s -0:11:00 - +Rule sol87 1987 only - Mar 9 12:10:45s -0:10:45 - +Rule sol87 1987 only - Mar 10 12:10:30s -0:10:30 - +Rule sol87 1987 only - Mar 11 12:10:15s -0:10:15 - +Rule sol87 1987 only - Mar 12 12:09:55s -0:09:55 - +Rule sol87 1987 only - Mar 13 12:09:40s -0:09:40 - +Rule sol87 1987 only - Mar 14 12:09:25s -0:09:25 - +Rule sol87 1987 only - Mar 15 12:09:10s -0:09:10 - +Rule sol87 1987 only - Mar 16 12:08:50s -0:08:50 - +Rule sol87 1987 only - Mar 17 12:08:35s -0:08:35 - +Rule sol87 1987 only - Mar 18 12:08:15s -0:08:15 - +Rule sol87 1987 only - Mar 19 12:08:00s -0:08:00 - +Rule sol87 1987 only - Mar 20 12:07:40s -0:07:40 - +Rule sol87 1987 only - Mar 21 12:07:25s -0:07:25 - +Rule sol87 1987 only - Mar 22 12:07:05s -0:07:05 - +Rule sol87 1987 only - Mar 23 12:06:50s -0:06:50 - +Rule sol87 1987 only - Mar 24 12:06:30s -0:06:30 - +Rule sol87 1987 only - Mar 25 12:06:10s -0:06:10 - +Rule sol87 1987 only - Mar 26 12:05:55s -0:05:55 - +Rule sol87 1987 only - Mar 27 12:05:35s -0:05:35 - +Rule sol87 1987 only - Mar 28 12:05:15s -0:05:15 - +Rule sol87 1987 only - Mar 29 12:05:00s -0:05:00 - +Rule sol87 1987 only - Mar 30 12:04:40s -0:04:40 - +Rule sol87 1987 only - Mar 31 12:04:25s -0:04:25 - +Rule sol87 1987 only - Apr 1 12:04:05s -0:04:05 - +Rule sol87 1987 only - Apr 2 12:03:45s -0:03:45 - +Rule sol87 1987 only - Apr 3 12:03:30s -0:03:30 - +Rule sol87 1987 only - Apr 4 12:03:10s -0:03:10 - +Rule sol87 1987 only - Apr 5 12:02:55s -0:02:55 - +Rule sol87 1987 only - Apr 6 12:02:35s -0:02:35 - +Rule sol87 1987 only - Apr 7 12:02:20s -0:02:20 - +Rule sol87 1987 only - Apr 8 12:02:05s -0:02:05 - +Rule sol87 1987 only - Apr 9 12:01:45s -0:01:45 - +Rule sol87 1987 only - Apr 10 12:01:30s -0:01:30 - +Rule sol87 1987 only - Apr 11 12:01:15s -0:01:15 - +Rule sol87 1987 only - Apr 12 12:00:55s -0:00:55 - +Rule sol87 1987 only - Apr 13 12:00:40s -0:00:40 - +Rule sol87 1987 only - Apr 14 12:00:25s -0:00:25 - +Rule sol87 1987 only - Apr 15 12:00:10s -0:00:10 - +Rule sol87 1987 only - Apr 16 11:59:55s 0:00:05 - +Rule sol87 1987 only - Apr 17 11:59:45s 0:00:15 - +Rule sol87 1987 only - Apr 18 11:59:30s 0:00:30 - +Rule sol87 1987 only - Apr 19 11:59:15s 0:00:45 - +Rule sol87 1987 only - Apr 20 11:59:05s 0:00:55 - +Rule sol87 1987 only - Apr 21 11:58:50s 0:01:10 - +Rule sol87 1987 only - Apr 22 11:58:40s 0:01:20 - +Rule sol87 1987 only - Apr 23 11:58:25s 0:01:35 - +Rule sol87 1987 only - Apr 24 11:58:15s 0:01:45 - +Rule sol87 1987 only - Apr 25 11:58:05s 0:01:55 - +Rule sol87 1987 only - Apr 26 11:57:55s 0:02:05 - +Rule sol87 1987 only - Apr 27 11:57:45s 0:02:15 - +Rule sol87 1987 only - Apr 28 11:57:35s 0:02:25 - +Rule sol87 1987 only - Apr 29 11:57:25s 0:02:35 - +Rule sol87 1987 only - Apr 30 11:57:15s 0:02:45 - +Rule sol87 1987 only - May 1 11:57:10s 0:02:50 - +Rule sol87 1987 only - May 2 11:57:00s 0:03:00 - +Rule sol87 1987 only - May 3 11:56:55s 0:03:05 - +Rule sol87 1987 only - May 4 11:56:50s 0:03:10 - +Rule sol87 1987 only - May 5 11:56:45s 0:03:15 - +Rule sol87 1987 only - May 6 11:56:40s 0:03:20 - +Rule sol87 1987 only - May 7 11:56:35s 0:03:25 - +Rule sol87 1987 only - May 8 11:56:30s 0:03:30 - +Rule sol87 1987 only - May 9 11:56:25s 0:03:35 - +Rule sol87 1987 only - May 10 11:56:25s 0:03:35 - +Rule sol87 1987 only - May 11 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 12 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 13 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 14 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 15 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 16 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 17 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 18 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 19 11:56:25s 0:03:35 - +Rule sol87 1987 only - May 20 11:56:25s 0:03:35 - +Rule sol87 1987 only - May 21 11:56:30s 0:03:30 - +Rule sol87 1987 only - May 22 11:56:35s 0:03:25 - +Rule sol87 1987 only - May 23 11:56:40s 0:03:20 - +Rule sol87 1987 only - May 24 11:56:45s 0:03:15 - +Rule sol87 1987 only - May 25 11:56:50s 0:03:10 - +Rule sol87 1987 only - May 26 11:56:55s 0:03:05 - +Rule sol87 1987 only - May 27 11:57:00s 0:03:00 - +Rule sol87 1987 only - May 28 11:57:10s 0:02:50 - +Rule sol87 1987 only - May 29 11:57:15s 0:02:45 - +Rule sol87 1987 only - May 30 11:57:25s 0:02:35 - +Rule sol87 1987 only - May 31 11:57:30s 0:02:30 - +Rule sol87 1987 only - Jun 1 11:57:40s 0:02:20 - +Rule sol87 1987 only - Jun 2 11:57:50s 0:02:10 - +Rule sol87 1987 only - Jun 3 11:58:00s 0:02:00 - +Rule sol87 1987 only - Jun 4 11:58:10s 0:01:50 - +Rule sol87 1987 only - Jun 5 11:58:20s 0:01:40 - +Rule sol87 1987 only - Jun 6 11:58:30s 0:01:30 - +Rule sol87 1987 only - Jun 7 11:58:40s 0:01:20 - +Rule sol87 1987 only - Jun 8 11:58:50s 0:01:10 - +Rule sol87 1987 only - Jun 9 11:59:05s 0:00:55 - +Rule sol87 1987 only - Jun 10 11:59:15s 0:00:45 - +Rule sol87 1987 only - Jun 11 11:59:30s 0:00:30 - +Rule sol87 1987 only - Jun 12 11:59:40s 0:00:20 - +Rule sol87 1987 only - Jun 13 11:59:50s 0:00:10 - +Rule sol87 1987 only - Jun 14 12:00:05s -0:00:05 - +Rule sol87 1987 only - Jun 15 12:00:15s -0:00:15 - +Rule sol87 1987 only - Jun 16 12:00:30s -0:00:30 - +Rule sol87 1987 only - Jun 17 12:00:45s -0:00:45 - +Rule sol87 1987 only - Jun 18 12:00:55s -0:00:55 - +Rule sol87 1987 only - Jun 19 12:01:10s -0:01:10 - +Rule sol87 1987 only - Jun 20 12:01:20s -0:01:20 - +Rule sol87 1987 only - Jun 21 12:01:35s -0:01:35 - +Rule sol87 1987 only - Jun 22 12:01:50s -0:01:50 - +Rule sol87 1987 only - Jun 23 12:02:00s -0:02:00 - +Rule sol87 1987 only - Jun 24 12:02:15s -0:02:15 - +Rule sol87 1987 only - Jun 25 12:02:25s -0:02:25 - +Rule sol87 1987 only - Jun 26 12:02:40s -0:02:40 - +Rule sol87 1987 only - Jun 27 12:02:50s -0:02:50 - +Rule sol87 1987 only - Jun 28 12:03:05s -0:03:05 - +Rule sol87 1987 only - Jun 29 12:03:15s -0:03:15 - +Rule sol87 1987 only - Jun 30 12:03:30s -0:03:30 - +Rule sol87 1987 only - Jul 1 12:03:40s -0:03:40 - +Rule sol87 1987 only - Jul 2 12:03:50s -0:03:50 - +Rule sol87 1987 only - Jul 3 12:04:05s -0:04:05 - +Rule sol87 1987 only - Jul 4 12:04:15s -0:04:15 - +Rule sol87 1987 only - Jul 5 12:04:25s -0:04:25 - +Rule sol87 1987 only - Jul 6 12:04:35s -0:04:35 - +Rule sol87 1987 only - Jul 7 12:04:45s -0:04:45 - +Rule sol87 1987 only - Jul 8 12:04:55s -0:04:55 - +Rule sol87 1987 only - Jul 9 12:05:05s -0:05:05 - +Rule sol87 1987 only - Jul 10 12:05:15s -0:05:15 - +Rule sol87 1987 only - Jul 11 12:05:20s -0:05:20 - +Rule sol87 1987 only - Jul 12 12:05:30s -0:05:30 - +Rule sol87 1987 only - Jul 13 12:05:40s -0:05:40 - +Rule sol87 1987 only - Jul 14 12:05:45s -0:05:45 - +Rule sol87 1987 only - Jul 15 12:05:50s -0:05:50 - +Rule sol87 1987 only - Jul 16 12:06:00s -0:06:00 - +Rule sol87 1987 only - Jul 17 12:06:05s -0:06:05 - +Rule sol87 1987 only - Jul 18 12:06:10s -0:06:10 - +Rule sol87 1987 only - Jul 19 12:06:15s -0:06:15 - +Rule sol87 1987 only - Jul 20 12:06:15s -0:06:15 - +Rule sol87 1987 only - Jul 21 12:06:20s -0:06:20 - +Rule sol87 1987 only - Jul 22 12:06:25s -0:06:25 - +Rule sol87 1987 only - Jul 23 12:06:25s -0:06:25 - +Rule sol87 1987 only - Jul 24 12:06:25s -0:06:25 - +Rule sol87 1987 only - Jul 25 12:06:30s -0:06:30 - +Rule sol87 1987 only - Jul 26 12:06:30s -0:06:30 - +Rule sol87 1987 only - Jul 27 12:06:30s -0:06:30 - +Rule sol87 1987 only - Jul 28 12:06:30s -0:06:30 - +Rule sol87 1987 only - Jul 29 12:06:25s -0:06:25 - +Rule sol87 1987 only - Jul 30 12:06:25s -0:06:25 - +Rule sol87 1987 only - Jul 31 12:06:25s -0:06:25 - +Rule sol87 1987 only - Aug 1 12:06:20s -0:06:20 - +Rule sol87 1987 only - Aug 2 12:06:15s -0:06:15 - +Rule sol87 1987 only - Aug 3 12:06:10s -0:06:10 - +Rule sol87 1987 only - Aug 4 12:06:05s -0:06:05 - +Rule sol87 1987 only - Aug 5 12:06:00s -0:06:00 - +Rule sol87 1987 only - Aug 6 12:05:55s -0:05:55 - +Rule sol87 1987 only - Aug 7 12:05:50s -0:05:50 - +Rule sol87 1987 only - Aug 8 12:05:40s -0:05:40 - +Rule sol87 1987 only - Aug 9 12:05:35s -0:05:35 - +Rule sol87 1987 only - Aug 10 12:05:25s -0:05:25 - +Rule sol87 1987 only - Aug 11 12:05:15s -0:05:15 - +Rule sol87 1987 only - Aug 12 12:05:05s -0:05:05 - +Rule sol87 1987 only - Aug 13 12:04:55s -0:04:55 - +Rule sol87 1987 only - Aug 14 12:04:45s -0:04:45 - +Rule sol87 1987 only - Aug 15 12:04:35s -0:04:35 - +Rule sol87 1987 only - Aug 16 12:04:25s -0:04:25 - +Rule sol87 1987 only - Aug 17 12:04:10s -0:04:10 - +Rule sol87 1987 only - Aug 18 12:04:00s -0:04:00 - +Rule sol87 1987 only - Aug 19 12:03:45s -0:03:45 - +Rule sol87 1987 only - Aug 20 12:03:30s -0:03:30 - +Rule sol87 1987 only - Aug 21 12:03:15s -0:03:15 - +Rule sol87 1987 only - Aug 22 12:03:00s -0:03:00 - +Rule sol87 1987 only - Aug 23 12:02:45s -0:02:45 - +Rule sol87 1987 only - Aug 24 12:02:30s -0:02:30 - +Rule sol87 1987 only - Aug 25 12:02:15s -0:02:15 - +Rule sol87 1987 only - Aug 26 12:02:00s -0:02:00 - +Rule sol87 1987 only - Aug 27 12:01:40s -0:01:40 - +Rule sol87 1987 only - Aug 28 12:01:25s -0:01:25 - +Rule sol87 1987 only - Aug 29 12:01:05s -0:01:05 - +Rule sol87 1987 only - Aug 30 12:00:50s -0:00:50 - +Rule sol87 1987 only - Aug 31 12:00:30s -0:00:30 - +Rule sol87 1987 only - Sep 1 12:00:10s -0:00:10 - +Rule sol87 1987 only - Sep 2 11:59:50s 0:00:10 - +Rule sol87 1987 only - Sep 3 11:59:35s 0:00:25 - +Rule sol87 1987 only - Sep 4 11:59:15s 0:00:45 - +Rule sol87 1987 only - Sep 5 11:58:55s 0:01:05 - +Rule sol87 1987 only - Sep 6 11:58:35s 0:01:25 - +Rule sol87 1987 only - Sep 7 11:58:15s 0:01:45 - +Rule sol87 1987 only - Sep 8 11:57:55s 0:02:05 - +Rule sol87 1987 only - Sep 9 11:57:30s 0:02:30 - +Rule sol87 1987 only - Sep 10 11:57:10s 0:02:50 - +Rule sol87 1987 only - Sep 11 11:56:50s 0:03:10 - +Rule sol87 1987 only - Sep 12 11:56:30s 0:03:30 - +Rule sol87 1987 only - Sep 13 11:56:10s 0:03:50 - +Rule sol87 1987 only - Sep 14 11:55:45s 0:04:15 - +Rule sol87 1987 only - Sep 15 11:55:25s 0:04:35 - +Rule sol87 1987 only - Sep 16 11:55:05s 0:04:55 - +Rule sol87 1987 only - Sep 17 11:54:45s 0:05:15 - +Rule sol87 1987 only - Sep 18 11:54:20s 0:05:40 - +Rule sol87 1987 only - Sep 19 11:54:00s 0:06:00 - +Rule sol87 1987 only - Sep 20 11:53:40s 0:06:20 - +Rule sol87 1987 only - Sep 21 11:53:15s 0:06:45 - +Rule sol87 1987 only - Sep 22 11:52:55s 0:07:05 - +Rule sol87 1987 only - Sep 23 11:52:35s 0:07:25 - +Rule sol87 1987 only - Sep 24 11:52:15s 0:07:45 - +Rule sol87 1987 only - Sep 25 11:51:55s 0:08:05 - +Rule sol87 1987 only - Sep 26 11:51:35s 0:08:25 - +Rule sol87 1987 only - Sep 27 11:51:10s 0:08:50 - +Rule sol87 1987 only - Sep 28 11:50:50s 0:09:10 - +Rule sol87 1987 only - Sep 29 11:50:30s 0:09:30 - +Rule sol87 1987 only - Sep 30 11:50:10s 0:09:50 - +Rule sol87 1987 only - Oct 1 11:49:50s 0:10:10 - +Rule sol87 1987 only - Oct 2 11:49:35s 0:10:25 - +Rule sol87 1987 only - Oct 3 11:49:15s 0:10:45 - +Rule sol87 1987 only - Oct 4 11:48:55s 0:11:05 - +Rule sol87 1987 only - Oct 5 11:48:35s 0:11:25 - +Rule sol87 1987 only - Oct 6 11:48:20s 0:11:40 - +Rule sol87 1987 only - Oct 7 11:48:00s 0:12:00 - +Rule sol87 1987 only - Oct 8 11:47:45s 0:12:15 - +Rule sol87 1987 only - Oct 9 11:47:25s 0:12:35 - +Rule sol87 1987 only - Oct 10 11:47:10s 0:12:50 - +Rule sol87 1987 only - Oct 11 11:46:55s 0:13:05 - +Rule sol87 1987 only - Oct 12 11:46:40s 0:13:20 - +Rule sol87 1987 only - Oct 13 11:46:25s 0:13:35 - +Rule sol87 1987 only - Oct 14 11:46:10s 0:13:50 - +Rule sol87 1987 only - Oct 15 11:45:55s 0:14:05 - +Rule sol87 1987 only - Oct 16 11:45:45s 0:14:15 - +Rule sol87 1987 only - Oct 17 11:45:30s 0:14:30 - +Rule sol87 1987 only - Oct 18 11:45:20s 0:14:40 - +Rule sol87 1987 only - Oct 19 11:45:05s 0:14:55 - +Rule sol87 1987 only - Oct 20 11:44:55s 0:15:05 - +Rule sol87 1987 only - Oct 21 11:44:45s 0:15:15 - +Rule sol87 1987 only - Oct 22 11:44:35s 0:15:25 - +Rule sol87 1987 only - Oct 23 11:44:25s 0:15:35 - +Rule sol87 1987 only - Oct 24 11:44:20s 0:15:40 - +Rule sol87 1987 only - Oct 25 11:44:10s 0:15:50 - +Rule sol87 1987 only - Oct 26 11:44:05s 0:15:55 - +Rule sol87 1987 only - Oct 27 11:43:55s 0:16:05 - +Rule sol87 1987 only - Oct 28 11:43:50s 0:16:10 - +Rule sol87 1987 only - Oct 29 11:43:45s 0:16:15 - +Rule sol87 1987 only - Oct 30 11:43:45s 0:16:15 - +Rule sol87 1987 only - Oct 31 11:43:40s 0:16:20 - +Rule sol87 1987 only - Nov 1 11:43:40s 0:16:20 - +Rule sol87 1987 only - Nov 2 11:43:35s 0:16:25 - +Rule sol87 1987 only - Nov 3 11:43:35s 0:16:25 - +Rule sol87 1987 only - Nov 4 11:43:35s 0:16:25 - +Rule sol87 1987 only - Nov 5 11:43:35s 0:16:25 - +Rule sol87 1987 only - Nov 6 11:43:40s 0:16:20 - +Rule sol87 1987 only - Nov 7 11:43:40s 0:16:20 - +Rule sol87 1987 only - Nov 8 11:43:45s 0:16:15 - +Rule sol87 1987 only - Nov 9 11:43:50s 0:16:10 - +Rule sol87 1987 only - Nov 10 11:43:55s 0:16:05 - +Rule sol87 1987 only - Nov 11 11:44:00s 0:16:00 - +Rule sol87 1987 only - Nov 12 11:44:05s 0:15:55 - +Rule sol87 1987 only - Nov 13 11:44:15s 0:15:45 - +Rule sol87 1987 only - Nov 14 11:44:20s 0:15:40 - +Rule sol87 1987 only - Nov 15 11:44:30s 0:15:30 - +Rule sol87 1987 only - Nov 16 11:44:40s 0:15:20 - +Rule sol87 1987 only - Nov 17 11:44:50s 0:15:10 - +Rule sol87 1987 only - Nov 18 11:45:05s 0:14:55 - +Rule sol87 1987 only - Nov 19 11:45:15s 0:14:45 - +Rule sol87 1987 only - Nov 20 11:45:30s 0:14:30 - +Rule sol87 1987 only - Nov 21 11:45:45s 0:14:15 - +Rule sol87 1987 only - Nov 22 11:46:00s 0:14:00 - +Rule sol87 1987 only - Nov 23 11:46:15s 0:13:45 - +Rule sol87 1987 only - Nov 24 11:46:30s 0:13:30 - +Rule sol87 1987 only - Nov 25 11:46:50s 0:13:10 - +Rule sol87 1987 only - Nov 26 11:47:10s 0:12:50 - +Rule sol87 1987 only - Nov 27 11:47:25s 0:12:35 - +Rule sol87 1987 only - Nov 28 11:47:45s 0:12:15 - +Rule sol87 1987 only - Nov 29 11:48:05s 0:11:55 - +Rule sol87 1987 only - Nov 30 11:48:30s 0:11:30 - +Rule sol87 1987 only - Dec 1 11:48:50s 0:11:10 - +Rule sol87 1987 only - Dec 2 11:49:10s 0:10:50 - +Rule sol87 1987 only - Dec 3 11:49:35s 0:10:25 - +Rule sol87 1987 only - Dec 4 11:50:00s 0:10:00 - +Rule sol87 1987 only - Dec 5 11:50:25s 0:09:35 - +Rule sol87 1987 only - Dec 6 11:50:50s 0:09:10 - +Rule sol87 1987 only - Dec 7 11:51:15s 0:08:45 - +Rule sol87 1987 only - Dec 8 11:51:40s 0:08:20 - +Rule sol87 1987 only - Dec 9 11:52:05s 0:07:55 - +Rule sol87 1987 only - Dec 10 11:52:30s 0:07:30 - +Rule sol87 1987 only - Dec 11 11:53:00s 0:07:00 - +Rule sol87 1987 only - Dec 12 11:53:25s 0:06:35 - +Rule sol87 1987 only - Dec 13 11:53:55s 0:06:05 - +Rule sol87 1987 only - Dec 14 11:54:25s 0:05:35 - +Rule sol87 1987 only - Dec 15 11:54:50s 0:05:10 - +Rule sol87 1987 only - Dec 16 11:55:20s 0:04:40 - +Rule sol87 1987 only - Dec 17 11:55:50s 0:04:10 - +Rule sol87 1987 only - Dec 18 11:56:20s 0:03:40 - +Rule sol87 1987 only - Dec 19 11:56:50s 0:03:10 - +Rule sol87 1987 only - Dec 20 11:57:20s 0:02:40 - +Rule sol87 1987 only - Dec 21 11:57:50s 0:02:10 - +Rule sol87 1987 only - Dec 22 11:58:20s 0:01:40 - +Rule sol87 1987 only - Dec 23 11:58:50s 0:01:10 - +Rule sol87 1987 only - Dec 24 11:59:20s 0:00:40 - +Rule sol87 1987 only - Dec 25 11:59:50s 0:00:10 - +Rule sol87 1987 only - Dec 26 12:00:20s -0:00:20 - +Rule sol87 1987 only - Dec 27 12:00:45s -0:00:45 - +Rule sol87 1987 only - Dec 28 12:01:15s -0:01:15 - +Rule sol87 1987 only - Dec 29 12:01:45s -0:01:45 - +Rule sol87 1987 only - Dec 30 12:02:15s -0:02:15 - +Rule sol87 1987 only - Dec 31 12:02:45s -0:02:45 - + +# Riyadh is at about 46 degrees 46 minutes East: 3 hrs, 7 mins, 4 secs +# Before and after 1987, we'll operate on local mean solar time. + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Mideast/Riyadh87 3:07:04 - ?? 1987 + 3:07:04 sol87 ?? 1988 + 3:07:04 - ?? diff --git a/share/zoneinfo/datfiles/solar88 b/share/zoneinfo/datfiles/solar88 new file mode 100644 index 0000000..e7f647e --- /dev/null +++ b/share/zoneinfo/datfiles/solar88 @@ -0,0 +1,386 @@ +# @(#)solar88 4.2 + +# Apparent noon times below are for Riyadh; they're a bit off for other places. +# Times were computed using formulas in the U.S. Naval Observatory's +# Almanac for Computers 1988; the formulas "will give EqT to an accuracy of +# [plus or minus two] seconds during the current year." +# +# Rounding to the nearest five seconds results in fewer than +# 256 different "time types"--a limit that's faced because time types are +# stored on disk as unsigned chars. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule sol88 1988 only - Jan 1 12:03:15s -0:03:15 - +Rule sol88 1988 only - Jan 2 12:03:40s -0:03:40 - +Rule sol88 1988 only - Jan 3 12:04:10s -0:04:10 - +Rule sol88 1988 only - Jan 4 12:04:40s -0:04:40 - +Rule sol88 1988 only - Jan 5 12:05:05s -0:05:05 - +Rule sol88 1988 only - Jan 6 12:05:30s -0:05:30 - +Rule sol88 1988 only - Jan 7 12:06:00s -0:06:00 - +Rule sol88 1988 only - Jan 8 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jan 9 12:06:50s -0:06:50 - +Rule sol88 1988 only - Jan 10 12:07:15s -0:07:15 - +Rule sol88 1988 only - Jan 11 12:07:40s -0:07:40 - +Rule sol88 1988 only - Jan 12 12:08:05s -0:08:05 - +Rule sol88 1988 only - Jan 13 12:08:25s -0:08:25 - +Rule sol88 1988 only - Jan 14 12:08:50s -0:08:50 - +Rule sol88 1988 only - Jan 15 12:09:10s -0:09:10 - +Rule sol88 1988 only - Jan 16 12:09:30s -0:09:30 - +Rule sol88 1988 only - Jan 17 12:09:50s -0:09:50 - +Rule sol88 1988 only - Jan 18 12:10:10s -0:10:10 - +Rule sol88 1988 only - Jan 19 12:10:30s -0:10:30 - +Rule sol88 1988 only - Jan 20 12:10:50s -0:10:50 - +Rule sol88 1988 only - Jan 21 12:11:05s -0:11:05 - +Rule sol88 1988 only - Jan 22 12:11:25s -0:11:25 - +Rule sol88 1988 only - Jan 23 12:11:40s -0:11:40 - +Rule sol88 1988 only - Jan 24 12:11:55s -0:11:55 - +Rule sol88 1988 only - Jan 25 12:12:10s -0:12:10 - +Rule sol88 1988 only - Jan 26 12:12:25s -0:12:25 - +Rule sol88 1988 only - Jan 27 12:12:40s -0:12:40 - +Rule sol88 1988 only - Jan 28 12:12:50s -0:12:50 - +Rule sol88 1988 only - Jan 29 12:13:00s -0:13:00 - +Rule sol88 1988 only - Jan 30 12:13:10s -0:13:10 - +Rule sol88 1988 only - Jan 31 12:13:20s -0:13:20 - +Rule sol88 1988 only - Feb 1 12:13:30s -0:13:30 - +Rule sol88 1988 only - Feb 2 12:13:40s -0:13:40 - +Rule sol88 1988 only - Feb 3 12:13:45s -0:13:45 - +Rule sol88 1988 only - Feb 4 12:13:55s -0:13:55 - +Rule sol88 1988 only - Feb 5 12:14:00s -0:14:00 - +Rule sol88 1988 only - Feb 6 12:14:05s -0:14:05 - +Rule sol88 1988 only - Feb 7 12:14:10s -0:14:10 - +Rule sol88 1988 only - Feb 8 12:14:10s -0:14:10 - +Rule sol88 1988 only - Feb 9 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 10 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 11 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 12 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 13 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 14 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 15 12:14:10s -0:14:10 - +Rule sol88 1988 only - Feb 16 12:14:10s -0:14:10 - +Rule sol88 1988 only - Feb 17 12:14:05s -0:14:05 - +Rule sol88 1988 only - Feb 18 12:14:00s -0:14:00 - +Rule sol88 1988 only - Feb 19 12:13:55s -0:13:55 - +Rule sol88 1988 only - Feb 20 12:13:50s -0:13:50 - +Rule sol88 1988 only - Feb 21 12:13:45s -0:13:45 - +Rule sol88 1988 only - Feb 22 12:13:40s -0:13:40 - +Rule sol88 1988 only - Feb 23 12:13:30s -0:13:30 - +Rule sol88 1988 only - Feb 24 12:13:20s -0:13:20 - +Rule sol88 1988 only - Feb 25 12:13:15s -0:13:15 - +Rule sol88 1988 only - Feb 26 12:13:05s -0:13:05 - +Rule sol88 1988 only - Feb 27 12:12:55s -0:12:55 - +Rule sol88 1988 only - Feb 28 12:12:45s -0:12:45 - +Rule sol88 1988 only - Feb 29 12:12:30s -0:12:30 - +Rule sol88 1988 only - Mar 1 12:12:20s -0:12:20 - +Rule sol88 1988 only - Mar 2 12:12:10s -0:12:10 - +Rule sol88 1988 only - Mar 3 12:11:55s -0:11:55 - +Rule sol88 1988 only - Mar 4 12:11:45s -0:11:45 - +Rule sol88 1988 only - Mar 5 12:11:30s -0:11:30 - +Rule sol88 1988 only - Mar 6 12:11:15s -0:11:15 - +Rule sol88 1988 only - Mar 7 12:11:00s -0:11:00 - +Rule sol88 1988 only - Mar 8 12:10:45s -0:10:45 - +Rule sol88 1988 only - Mar 9 12:10:30s -0:10:30 - +Rule sol88 1988 only - Mar 10 12:10:15s -0:10:15 - +Rule sol88 1988 only - Mar 11 12:10:00s -0:10:00 - +Rule sol88 1988 only - Mar 12 12:09:45s -0:09:45 - +Rule sol88 1988 only - Mar 13 12:09:30s -0:09:30 - +Rule sol88 1988 only - Mar 14 12:09:10s -0:09:10 - +Rule sol88 1988 only - Mar 15 12:08:55s -0:08:55 - +Rule sol88 1988 only - Mar 16 12:08:40s -0:08:40 - +Rule sol88 1988 only - Mar 17 12:08:20s -0:08:20 - +Rule sol88 1988 only - Mar 18 12:08:05s -0:08:05 - +Rule sol88 1988 only - Mar 19 12:07:45s -0:07:45 - +Rule sol88 1988 only - Mar 20 12:07:30s -0:07:30 - +Rule sol88 1988 only - Mar 21 12:07:10s -0:07:10 - +Rule sol88 1988 only - Mar 22 12:06:50s -0:06:50 - +Rule sol88 1988 only - Mar 23 12:06:35s -0:06:35 - +Rule sol88 1988 only - Mar 24 12:06:15s -0:06:15 - +Rule sol88 1988 only - Mar 25 12:06:00s -0:06:00 - +Rule sol88 1988 only - Mar 26 12:05:40s -0:05:40 - +Rule sol88 1988 only - Mar 27 12:05:20s -0:05:20 - +Rule sol88 1988 only - Mar 28 12:05:05s -0:05:05 - +Rule sol88 1988 only - Mar 29 12:04:45s -0:04:45 - +Rule sol88 1988 only - Mar 30 12:04:25s -0:04:25 - +Rule sol88 1988 only - Mar 31 12:04:10s -0:04:10 - +Rule sol88 1988 only - Apr 1 12:03:50s -0:03:50 - +Rule sol88 1988 only - Apr 2 12:03:35s -0:03:35 - +Rule sol88 1988 only - Apr 3 12:03:15s -0:03:15 - +Rule sol88 1988 only - Apr 4 12:03:00s -0:03:00 - +Rule sol88 1988 only - Apr 5 12:02:40s -0:02:40 - +Rule sol88 1988 only - Apr 6 12:02:25s -0:02:25 - +Rule sol88 1988 only - Apr 7 12:02:05s -0:02:05 - +Rule sol88 1988 only - Apr 8 12:01:50s -0:01:50 - +Rule sol88 1988 only - Apr 9 12:01:35s -0:01:35 - +Rule sol88 1988 only - Apr 10 12:01:15s -0:01:15 - +Rule sol88 1988 only - Apr 11 12:01:00s -0:01:00 - +Rule sol88 1988 only - Apr 12 12:00:45s -0:00:45 - +Rule sol88 1988 only - Apr 13 12:00:30s -0:00:30 - +Rule sol88 1988 only - Apr 14 12:00:15s -0:00:15 - +Rule sol88 1988 only - Apr 15 12:00:00s 0:00:00 - +Rule sol88 1988 only - Apr 16 11:59:45s 0:00:15 - +Rule sol88 1988 only - Apr 17 11:59:30s 0:00:30 - +Rule sol88 1988 only - Apr 18 11:59:20s 0:00:40 - +Rule sol88 1988 only - Apr 19 11:59:05s 0:00:55 - +Rule sol88 1988 only - Apr 20 11:58:55s 0:01:05 - +Rule sol88 1988 only - Apr 21 11:58:40s 0:01:20 - +Rule sol88 1988 only - Apr 22 11:58:30s 0:01:30 - +Rule sol88 1988 only - Apr 23 11:58:15s 0:01:45 - +Rule sol88 1988 only - Apr 24 11:58:05s 0:01:55 - +Rule sol88 1988 only - Apr 25 11:57:55s 0:02:05 - +Rule sol88 1988 only - Apr 26 11:57:45s 0:02:15 - +Rule sol88 1988 only - Apr 27 11:57:35s 0:02:25 - +Rule sol88 1988 only - Apr 28 11:57:30s 0:02:30 - +Rule sol88 1988 only - Apr 29 11:57:20s 0:02:40 - +Rule sol88 1988 only - Apr 30 11:57:10s 0:02:50 - +Rule sol88 1988 only - May 1 11:57:05s 0:02:55 - +Rule sol88 1988 only - May 2 11:56:55s 0:03:05 - +Rule sol88 1988 only - May 3 11:56:50s 0:03:10 - +Rule sol88 1988 only - May 4 11:56:45s 0:03:15 - +Rule sol88 1988 only - May 5 11:56:40s 0:03:20 - +Rule sol88 1988 only - May 6 11:56:35s 0:03:25 - +Rule sol88 1988 only - May 7 11:56:30s 0:03:30 - +Rule sol88 1988 only - May 8 11:56:25s 0:03:35 - +Rule sol88 1988 only - May 9 11:56:25s 0:03:35 - +Rule sol88 1988 only - May 10 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 11 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 12 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 13 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 14 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 15 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 16 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 17 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 18 11:56:25s 0:03:35 - +Rule sol88 1988 only - May 19 11:56:25s 0:03:35 - +Rule sol88 1988 only - May 20 11:56:30s 0:03:30 - +Rule sol88 1988 only - May 21 11:56:35s 0:03:25 - +Rule sol88 1988 only - May 22 11:56:40s 0:03:20 - +Rule sol88 1988 only - May 23 11:56:45s 0:03:15 - +Rule sol88 1988 only - May 24 11:56:50s 0:03:10 - +Rule sol88 1988 only - May 25 11:56:55s 0:03:05 - +Rule sol88 1988 only - May 26 11:57:00s 0:03:00 - +Rule sol88 1988 only - May 27 11:57:05s 0:02:55 - +Rule sol88 1988 only - May 28 11:57:15s 0:02:45 - +Rule sol88 1988 only - May 29 11:57:20s 0:02:40 - +Rule sol88 1988 only - May 30 11:57:30s 0:02:30 - +Rule sol88 1988 only - May 31 11:57:40s 0:02:20 - +Rule sol88 1988 only - Jun 1 11:57:50s 0:02:10 - +Rule sol88 1988 only - Jun 2 11:57:55s 0:02:05 - +Rule sol88 1988 only - Jun 3 11:58:05s 0:01:55 - +Rule sol88 1988 only - Jun 4 11:58:15s 0:01:45 - +Rule sol88 1988 only - Jun 5 11:58:30s 0:01:30 - +Rule sol88 1988 only - Jun 6 11:58:40s 0:01:20 - +Rule sol88 1988 only - Jun 7 11:58:50s 0:01:10 - +Rule sol88 1988 only - Jun 8 11:59:00s 0:01:00 - +Rule sol88 1988 only - Jun 9 11:59:15s 0:00:45 - +Rule sol88 1988 only - Jun 10 11:59:25s 0:00:35 - +Rule sol88 1988 only - Jun 11 11:59:35s 0:00:25 - +Rule sol88 1988 only - Jun 12 11:59:50s 0:00:10 - +Rule sol88 1988 only - Jun 13 12:00:00s 0:00:00 - +Rule sol88 1988 only - Jun 14 12:00:15s -0:00:15 - +Rule sol88 1988 only - Jun 15 12:00:25s -0:00:25 - +Rule sol88 1988 only - Jun 16 12:00:40s -0:00:40 - +Rule sol88 1988 only - Jun 17 12:00:55s -0:00:55 - +Rule sol88 1988 only - Jun 18 12:01:05s -0:01:05 - +Rule sol88 1988 only - Jun 19 12:01:20s -0:01:20 - +Rule sol88 1988 only - Jun 20 12:01:30s -0:01:30 - +Rule sol88 1988 only - Jun 21 12:01:45s -0:01:45 - +Rule sol88 1988 only - Jun 22 12:02:00s -0:02:00 - +Rule sol88 1988 only - Jun 23 12:02:10s -0:02:10 - +Rule sol88 1988 only - Jun 24 12:02:25s -0:02:25 - +Rule sol88 1988 only - Jun 25 12:02:35s -0:02:35 - +Rule sol88 1988 only - Jun 26 12:02:50s -0:02:50 - +Rule sol88 1988 only - Jun 27 12:03:00s -0:03:00 - +Rule sol88 1988 only - Jun 28 12:03:15s -0:03:15 - +Rule sol88 1988 only - Jun 29 12:03:25s -0:03:25 - +Rule sol88 1988 only - Jun 30 12:03:40s -0:03:40 - +Rule sol88 1988 only - Jul 1 12:03:50s -0:03:50 - +Rule sol88 1988 only - Jul 2 12:04:00s -0:04:00 - +Rule sol88 1988 only - Jul 3 12:04:10s -0:04:10 - +Rule sol88 1988 only - Jul 4 12:04:25s -0:04:25 - +Rule sol88 1988 only - Jul 5 12:04:35s -0:04:35 - +Rule sol88 1988 only - Jul 6 12:04:45s -0:04:45 - +Rule sol88 1988 only - Jul 7 12:04:55s -0:04:55 - +Rule sol88 1988 only - Jul 8 12:05:05s -0:05:05 - +Rule sol88 1988 only - Jul 9 12:05:10s -0:05:10 - +Rule sol88 1988 only - Jul 10 12:05:20s -0:05:20 - +Rule sol88 1988 only - Jul 11 12:05:30s -0:05:30 - +Rule sol88 1988 only - Jul 12 12:05:35s -0:05:35 - +Rule sol88 1988 only - Jul 13 12:05:45s -0:05:45 - +Rule sol88 1988 only - Jul 14 12:05:50s -0:05:50 - +Rule sol88 1988 only - Jul 15 12:05:55s -0:05:55 - +Rule sol88 1988 only - Jul 16 12:06:00s -0:06:00 - +Rule sol88 1988 only - Jul 17 12:06:05s -0:06:05 - +Rule sol88 1988 only - Jul 18 12:06:10s -0:06:10 - +Rule sol88 1988 only - Jul 19 12:06:15s -0:06:15 - +Rule sol88 1988 only - Jul 20 12:06:20s -0:06:20 - +Rule sol88 1988 only - Jul 21 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jul 22 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jul 23 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jul 24 12:06:30s -0:06:30 - +Rule sol88 1988 only - Jul 25 12:06:30s -0:06:30 - +Rule sol88 1988 only - Jul 26 12:06:30s -0:06:30 - +Rule sol88 1988 only - Jul 27 12:06:30s -0:06:30 - +Rule sol88 1988 only - Jul 28 12:06:30s -0:06:30 - +Rule sol88 1988 only - Jul 29 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jul 30 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jul 31 12:06:20s -0:06:20 - +Rule sol88 1988 only - Aug 1 12:06:15s -0:06:15 - +Rule sol88 1988 only - Aug 2 12:06:15s -0:06:15 - +Rule sol88 1988 only - Aug 3 12:06:10s -0:06:10 - +Rule sol88 1988 only - Aug 4 12:06:05s -0:06:05 - +Rule sol88 1988 only - Aug 5 12:05:55s -0:05:55 - +Rule sol88 1988 only - Aug 6 12:05:50s -0:05:50 - +Rule sol88 1988 only - Aug 7 12:05:45s -0:05:45 - +Rule sol88 1988 only - Aug 8 12:05:35s -0:05:35 - +Rule sol88 1988 only - Aug 9 12:05:25s -0:05:25 - +Rule sol88 1988 only - Aug 10 12:05:20s -0:05:20 - +Rule sol88 1988 only - Aug 11 12:05:10s -0:05:10 - +Rule sol88 1988 only - Aug 12 12:05:00s -0:05:00 - +Rule sol88 1988 only - Aug 13 12:04:50s -0:04:50 - +Rule sol88 1988 only - Aug 14 12:04:35s -0:04:35 - +Rule sol88 1988 only - Aug 15 12:04:25s -0:04:25 - +Rule sol88 1988 only - Aug 16 12:04:15s -0:04:15 - +Rule sol88 1988 only - Aug 17 12:04:00s -0:04:00 - +Rule sol88 1988 only - Aug 18 12:03:50s -0:03:50 - +Rule sol88 1988 only - Aug 19 12:03:35s -0:03:35 - +Rule sol88 1988 only - Aug 20 12:03:20s -0:03:20 - +Rule sol88 1988 only - Aug 21 12:03:05s -0:03:05 - +Rule sol88 1988 only - Aug 22 12:02:50s -0:02:50 - +Rule sol88 1988 only - Aug 23 12:02:35s -0:02:35 - +Rule sol88 1988 only - Aug 24 12:02:20s -0:02:20 - +Rule sol88 1988 only - Aug 25 12:02:00s -0:02:00 - +Rule sol88 1988 only - Aug 26 12:01:45s -0:01:45 - +Rule sol88 1988 only - Aug 27 12:01:30s -0:01:30 - +Rule sol88 1988 only - Aug 28 12:01:10s -0:01:10 - +Rule sol88 1988 only - Aug 29 12:00:50s -0:00:50 - +Rule sol88 1988 only - Aug 30 12:00:35s -0:00:35 - +Rule sol88 1988 only - Aug 31 12:00:15s -0:00:15 - +Rule sol88 1988 only - Sep 1 11:59:55s 0:00:05 - +Rule sol88 1988 only - Sep 2 11:59:35s 0:00:25 - +Rule sol88 1988 only - Sep 3 11:59:20s 0:00:40 - +Rule sol88 1988 only - Sep 4 11:59:00s 0:01:00 - +Rule sol88 1988 only - Sep 5 11:58:40s 0:01:20 - +Rule sol88 1988 only - Sep 6 11:58:20s 0:01:40 - +Rule sol88 1988 only - Sep 7 11:58:00s 0:02:00 - +Rule sol88 1988 only - Sep 8 11:57:35s 0:02:25 - +Rule sol88 1988 only - Sep 9 11:57:15s 0:02:45 - +Rule sol88 1988 only - Sep 10 11:56:55s 0:03:05 - +Rule sol88 1988 only - Sep 11 11:56:35s 0:03:25 - +Rule sol88 1988 only - Sep 12 11:56:15s 0:03:45 - +Rule sol88 1988 only - Sep 13 11:55:50s 0:04:10 - +Rule sol88 1988 only - Sep 14 11:55:30s 0:04:30 - +Rule sol88 1988 only - Sep 15 11:55:10s 0:04:50 - +Rule sol88 1988 only - Sep 16 11:54:50s 0:05:10 - +Rule sol88 1988 only - Sep 17 11:54:25s 0:05:35 - +Rule sol88 1988 only - Sep 18 11:54:05s 0:05:55 - +Rule sol88 1988 only - Sep 19 11:53:45s 0:06:15 - +Rule sol88 1988 only - Sep 20 11:53:25s 0:06:35 - +Rule sol88 1988 only - Sep 21 11:53:00s 0:07:00 - +Rule sol88 1988 only - Sep 22 11:52:40s 0:07:20 - +Rule sol88 1988 only - Sep 23 11:52:20s 0:07:40 - +Rule sol88 1988 only - Sep 24 11:52:00s 0:08:00 - +Rule sol88 1988 only - Sep 25 11:51:40s 0:08:20 - +Rule sol88 1988 only - Sep 26 11:51:15s 0:08:45 - +Rule sol88 1988 only - Sep 27 11:50:55s 0:09:05 - +Rule sol88 1988 only - Sep 28 11:50:35s 0:09:25 - +Rule sol88 1988 only - Sep 29 11:50:15s 0:09:45 - +Rule sol88 1988 only - Sep 30 11:49:55s 0:10:05 - +Rule sol88 1988 only - Oct 1 11:49:35s 0:10:25 - +Rule sol88 1988 only - Oct 2 11:49:20s 0:10:40 - +Rule sol88 1988 only - Oct 3 11:49:00s 0:11:00 - +Rule sol88 1988 only - Oct 4 11:48:40s 0:11:20 - +Rule sol88 1988 only - Oct 5 11:48:25s 0:11:35 - +Rule sol88 1988 only - Oct 6 11:48:05s 0:11:55 - +Rule sol88 1988 only - Oct 7 11:47:50s 0:12:10 - +Rule sol88 1988 only - Oct 8 11:47:30s 0:12:30 - +Rule sol88 1988 only - Oct 9 11:47:15s 0:12:45 - +Rule sol88 1988 only - Oct 10 11:47:00s 0:13:00 - +Rule sol88 1988 only - Oct 11 11:46:45s 0:13:15 - +Rule sol88 1988 only - Oct 12 11:46:30s 0:13:30 - +Rule sol88 1988 only - Oct 13 11:46:15s 0:13:45 - +Rule sol88 1988 only - Oct 14 11:46:00s 0:14:00 - +Rule sol88 1988 only - Oct 15 11:45:45s 0:14:15 - +Rule sol88 1988 only - Oct 16 11:45:35s 0:14:25 - +Rule sol88 1988 only - Oct 17 11:45:20s 0:14:40 - +Rule sol88 1988 only - Oct 18 11:45:10s 0:14:50 - +Rule sol88 1988 only - Oct 19 11:45:00s 0:15:00 - +Rule sol88 1988 only - Oct 20 11:44:45s 0:15:15 - +Rule sol88 1988 only - Oct 21 11:44:40s 0:15:20 - +Rule sol88 1988 only - Oct 22 11:44:30s 0:15:30 - +Rule sol88 1988 only - Oct 23 11:44:20s 0:15:40 - +Rule sol88 1988 only - Oct 24 11:44:10s 0:15:50 - +Rule sol88 1988 only - Oct 25 11:44:05s 0:15:55 - +Rule sol88 1988 only - Oct 26 11:44:00s 0:16:00 - +Rule sol88 1988 only - Oct 27 11:43:55s 0:16:05 - +Rule sol88 1988 only - Oct 28 11:43:50s 0:16:10 - +Rule sol88 1988 only - Oct 29 11:43:45s 0:16:15 - +Rule sol88 1988 only - Oct 30 11:43:40s 0:16:20 - +Rule sol88 1988 only - Oct 31 11:43:40s 0:16:20 - +Rule sol88 1988 only - Nov 1 11:43:35s 0:16:25 - +Rule sol88 1988 only - Nov 2 11:43:35s 0:16:25 - +Rule sol88 1988 only - Nov 3 11:43:35s 0:16:25 - +Rule sol88 1988 only - Nov 4 11:43:35s 0:16:25 - +Rule sol88 1988 only - Nov 5 11:43:40s 0:16:20 - +Rule sol88 1988 only - Nov 6 11:43:40s 0:16:20 - +Rule sol88 1988 only - Nov 7 11:43:45s 0:16:15 - +Rule sol88 1988 only - Nov 8 11:43:45s 0:16:15 - +Rule sol88 1988 only - Nov 9 11:43:50s 0:16:10 - +Rule sol88 1988 only - Nov 10 11:44:00s 0:16:00 - +Rule sol88 1988 only - Nov 11 11:44:05s 0:15:55 - +Rule sol88 1988 only - Nov 12 11:44:10s 0:15:50 - +Rule sol88 1988 only - Nov 13 11:44:20s 0:15:40 - +Rule sol88 1988 only - Nov 14 11:44:30s 0:15:30 - +Rule sol88 1988 only - Nov 15 11:44:40s 0:15:20 - +Rule sol88 1988 only - Nov 16 11:44:50s 0:15:10 - +Rule sol88 1988 only - Nov 17 11:45:00s 0:15:00 - +Rule sol88 1988 only - Nov 18 11:45:15s 0:14:45 - +Rule sol88 1988 only - Nov 19 11:45:25s 0:14:35 - +Rule sol88 1988 only - Nov 20 11:45:40s 0:14:20 - +Rule sol88 1988 only - Nov 21 11:45:55s 0:14:05 - +Rule sol88 1988 only - Nov 22 11:46:10s 0:13:50 - +Rule sol88 1988 only - Nov 23 11:46:30s 0:13:30 - +Rule sol88 1988 only - Nov 24 11:46:45s 0:13:15 - +Rule sol88 1988 only - Nov 25 11:47:05s 0:12:55 - +Rule sol88 1988 only - Nov 26 11:47:20s 0:12:40 - +Rule sol88 1988 only - Nov 27 11:47:40s 0:12:20 - +Rule sol88 1988 only - Nov 28 11:48:00s 0:12:00 - +Rule sol88 1988 only - Nov 29 11:48:25s 0:11:35 - +Rule sol88 1988 only - Nov 30 11:48:45s 0:11:15 - +Rule sol88 1988 only - Dec 1 11:49:05s 0:10:55 - +Rule sol88 1988 only - Dec 2 11:49:30s 0:10:30 - +Rule sol88 1988 only - Dec 3 11:49:55s 0:10:05 - +Rule sol88 1988 only - Dec 4 11:50:15s 0:09:45 - +Rule sol88 1988 only - Dec 5 11:50:40s 0:09:20 - +Rule sol88 1988 only - Dec 6 11:51:05s 0:08:55 - +Rule sol88 1988 only - Dec 7 11:51:35s 0:08:25 - +Rule sol88 1988 only - Dec 8 11:52:00s 0:08:00 - +Rule sol88 1988 only - Dec 9 11:52:25s 0:07:35 - +Rule sol88 1988 only - Dec 10 11:52:55s 0:07:05 - +Rule sol88 1988 only - Dec 11 11:53:20s 0:06:40 - +Rule sol88 1988 only - Dec 12 11:53:50s 0:06:10 - +Rule sol88 1988 only - Dec 13 11:54:15s 0:05:45 - +Rule sol88 1988 only - Dec 14 11:54:45s 0:05:15 - +Rule sol88 1988 only - Dec 15 11:55:15s 0:04:45 - +Rule sol88 1988 only - Dec 16 11:55:45s 0:04:15 - +Rule sol88 1988 only - Dec 17 11:56:15s 0:03:45 - +Rule sol88 1988 only - Dec 18 11:56:40s 0:03:20 - +Rule sol88 1988 only - Dec 19 11:57:10s 0:02:50 - +Rule sol88 1988 only - Dec 20 11:57:40s 0:02:20 - +Rule sol88 1988 only - Dec 21 11:58:10s 0:01:50 - +Rule sol88 1988 only - Dec 22 11:58:40s 0:01:20 - +Rule sol88 1988 only - Dec 23 11:59:10s 0:00:50 - +Rule sol88 1988 only - Dec 24 11:59:40s 0:00:20 - +Rule sol88 1988 only - Dec 25 12:00:10s -0:00:10 - +Rule sol88 1988 only - Dec 26 12:00:40s -0:00:40 - +Rule sol88 1988 only - Dec 27 12:01:10s -0:01:10 - +Rule sol88 1988 only - Dec 28 12:01:40s -0:01:40 - +Rule sol88 1988 only - Dec 29 12:02:10s -0:02:10 - +Rule sol88 1988 only - Dec 30 12:02:35s -0:02:35 - +Rule sol88 1988 only - Dec 31 12:03:05s -0:03:05 - + +# Riyadh is at about 46 degrees 46 minutes East: 3 hrs, 7 mins, 4 secs +# Before and after 1988, we'll operate on local mean solar time. + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Mideast/Riyadh88 3:07:04 - ?? 1988 + 3:07:04 sol88 ?? 1989 + 3:07:04 - ?? diff --git a/share/zoneinfo/datfiles/solar89 b/share/zoneinfo/datfiles/solar89 new file mode 100644 index 0000000..4f25170 --- /dev/null +++ b/share/zoneinfo/datfiles/solar89 @@ -0,0 +1,391 @@ +# @(#)solar89 1.3 + +# Apparent noon times below are for Riyadh; they're a bit off for other places. +# Times were computed using a formula provided by the U. S. Naval Observatory: +# eqt = -105.8 * sin(l) + 596.2 * sin(2 * l) + 4.4 * sin(3 * l) +# -12.7 * sin(4 * l) - 429.0 * cos(l) - 2.1 * cos (2 * l) +# + 19.3 * cos(3 * l); +# where l is the "mean longitude of the Sun" given by +# l = 279.642 degrees + 0.985647 * d +# and d is the interval in days from January 0, 0 hours Universal Time +# (equaling the day of the year plus the fraction of a day from zero hours). +# The accuracy of the formula is plus or minus three seconds. +# +# Rounding to the nearest five seconds results in fewer than +# 256 different "time types"--a limit that's faced because time types are +# stored on disk as unsigned chars. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule sol89 1989 only - Jan 1 12:03:35s -0:03:35 - +Rule sol89 1989 only - Jan 2 12:04:05s -0:04:05 - +Rule sol89 1989 only - Jan 3 12:04:30s -0:04:30 - +Rule sol89 1989 only - Jan 4 12:05:00s -0:05:00 - +Rule sol89 1989 only - Jan 5 12:05:25s -0:05:25 - +Rule sol89 1989 only - Jan 6 12:05:50s -0:05:50 - +Rule sol89 1989 only - Jan 7 12:06:15s -0:06:15 - +Rule sol89 1989 only - Jan 8 12:06:45s -0:06:45 - +Rule sol89 1989 only - Jan 9 12:07:10s -0:07:10 - +Rule sol89 1989 only - Jan 10 12:07:35s -0:07:35 - +Rule sol89 1989 only - Jan 11 12:07:55s -0:07:55 - +Rule sol89 1989 only - Jan 12 12:08:20s -0:08:20 - +Rule sol89 1989 only - Jan 13 12:08:45s -0:08:45 - +Rule sol89 1989 only - Jan 14 12:09:05s -0:09:05 - +Rule sol89 1989 only - Jan 15 12:09:25s -0:09:25 - +Rule sol89 1989 only - Jan 16 12:09:45s -0:09:45 - +Rule sol89 1989 only - Jan 17 12:10:05s -0:10:05 - +Rule sol89 1989 only - Jan 18 12:10:25s -0:10:25 - +Rule sol89 1989 only - Jan 19 12:10:45s -0:10:45 - +Rule sol89 1989 only - Jan 20 12:11:05s -0:11:05 - +Rule sol89 1989 only - Jan 21 12:11:20s -0:11:20 - +Rule sol89 1989 only - Jan 22 12:11:35s -0:11:35 - +Rule sol89 1989 only - Jan 23 12:11:55s -0:11:55 - +Rule sol89 1989 only - Jan 24 12:12:10s -0:12:10 - +Rule sol89 1989 only - Jan 25 12:12:20s -0:12:20 - +Rule sol89 1989 only - Jan 26 12:12:35s -0:12:35 - +Rule sol89 1989 only - Jan 27 12:12:50s -0:12:50 - +Rule sol89 1989 only - Jan 28 12:13:00s -0:13:00 - +Rule sol89 1989 only - Jan 29 12:13:10s -0:13:10 - +Rule sol89 1989 only - Jan 30 12:13:20s -0:13:20 - +Rule sol89 1989 only - Jan 31 12:13:30s -0:13:30 - +Rule sol89 1989 only - Feb 1 12:13:40s -0:13:40 - +Rule sol89 1989 only - Feb 2 12:13:45s -0:13:45 - +Rule sol89 1989 only - Feb 3 12:13:55s -0:13:55 - +Rule sol89 1989 only - Feb 4 12:14:00s -0:14:00 - +Rule sol89 1989 only - Feb 5 12:14:05s -0:14:05 - +Rule sol89 1989 only - Feb 6 12:14:10s -0:14:10 - +Rule sol89 1989 only - Feb 7 12:14:10s -0:14:10 - +Rule sol89 1989 only - Feb 8 12:14:15s -0:14:15 - +Rule sol89 1989 only - Feb 9 12:14:15s -0:14:15 - +Rule sol89 1989 only - Feb 10 12:14:20s -0:14:20 - +Rule sol89 1989 only - Feb 11 12:14:20s -0:14:20 - +Rule sol89 1989 only - Feb 12 12:14:20s -0:14:20 - +Rule sol89 1989 only - Feb 13 12:14:15s -0:14:15 - +Rule sol89 1989 only - Feb 14 12:14:15s -0:14:15 - +Rule sol89 1989 only - Feb 15 12:14:10s -0:14:10 - +Rule sol89 1989 only - Feb 16 12:14:10s -0:14:10 - +Rule sol89 1989 only - Feb 17 12:14:05s -0:14:05 - +Rule sol89 1989 only - Feb 18 12:14:00s -0:14:00 - +Rule sol89 1989 only - Feb 19 12:13:55s -0:13:55 - +Rule sol89 1989 only - Feb 20 12:13:50s -0:13:50 - +Rule sol89 1989 only - Feb 21 12:13:40s -0:13:40 - +Rule sol89 1989 only - Feb 22 12:13:35s -0:13:35 - +Rule sol89 1989 only - Feb 23 12:13:25s -0:13:25 - +Rule sol89 1989 only - Feb 24 12:13:15s -0:13:15 - +Rule sol89 1989 only - Feb 25 12:13:05s -0:13:05 - +Rule sol89 1989 only - Feb 26 12:12:55s -0:12:55 - +Rule sol89 1989 only - Feb 27 12:12:45s -0:12:45 - +Rule sol89 1989 only - Feb 28 12:12:35s -0:12:35 - +Rule sol89 1989 only - Mar 1 12:12:25s -0:12:25 - +Rule sol89 1989 only - Mar 2 12:12:10s -0:12:10 - +Rule sol89 1989 only - Mar 3 12:12:00s -0:12:00 - +Rule sol89 1989 only - Mar 4 12:11:45s -0:11:45 - +Rule sol89 1989 only - Mar 5 12:11:35s -0:11:35 - +Rule sol89 1989 only - Mar 6 12:11:20s -0:11:20 - +Rule sol89 1989 only - Mar 7 12:11:05s -0:11:05 - +Rule sol89 1989 only - Mar 8 12:10:50s -0:10:50 - +Rule sol89 1989 only - Mar 9 12:10:35s -0:10:35 - +Rule sol89 1989 only - Mar 10 12:10:20s -0:10:20 - +Rule sol89 1989 only - Mar 11 12:10:05s -0:10:05 - +Rule sol89 1989 only - Mar 12 12:09:50s -0:09:50 - +Rule sol89 1989 only - Mar 13 12:09:30s -0:09:30 - +Rule sol89 1989 only - Mar 14 12:09:15s -0:09:15 - +Rule sol89 1989 only - Mar 15 12:09:00s -0:09:00 - +Rule sol89 1989 only - Mar 16 12:08:40s -0:08:40 - +Rule sol89 1989 only - Mar 17 12:08:25s -0:08:25 - +Rule sol89 1989 only - Mar 18 12:08:05s -0:08:05 - +Rule sol89 1989 only - Mar 19 12:07:50s -0:07:50 - +Rule sol89 1989 only - Mar 20 12:07:30s -0:07:30 - +Rule sol89 1989 only - Mar 21 12:07:15s -0:07:15 - +Rule sol89 1989 only - Mar 22 12:06:55s -0:06:55 - +Rule sol89 1989 only - Mar 23 12:06:35s -0:06:35 - +Rule sol89 1989 only - Mar 24 12:06:20s -0:06:20 - +Rule sol89 1989 only - Mar 25 12:06:00s -0:06:00 - +Rule sol89 1989 only - Mar 26 12:05:40s -0:05:40 - +Rule sol89 1989 only - Mar 27 12:05:25s -0:05:25 - +Rule sol89 1989 only - Mar 28 12:05:05s -0:05:05 - +Rule sol89 1989 only - Mar 29 12:04:50s -0:04:50 - +Rule sol89 1989 only - Mar 30 12:04:30s -0:04:30 - +Rule sol89 1989 only - Mar 31 12:04:10s -0:04:10 - +Rule sol89 1989 only - Apr 1 12:03:55s -0:03:55 - +Rule sol89 1989 only - Apr 2 12:03:35s -0:03:35 - +Rule sol89 1989 only - Apr 3 12:03:20s -0:03:20 - +Rule sol89 1989 only - Apr 4 12:03:00s -0:03:00 - +Rule sol89 1989 only - Apr 5 12:02:45s -0:02:45 - +Rule sol89 1989 only - Apr 6 12:02:25s -0:02:25 - +Rule sol89 1989 only - Apr 7 12:02:10s -0:02:10 - +Rule sol89 1989 only - Apr 8 12:01:50s -0:01:50 - +Rule sol89 1989 only - Apr 9 12:01:35s -0:01:35 - +Rule sol89 1989 only - Apr 10 12:01:20s -0:01:20 - +Rule sol89 1989 only - Apr 11 12:01:05s -0:01:05 - +Rule sol89 1989 only - Apr 12 12:00:50s -0:00:50 - +Rule sol89 1989 only - Apr 13 12:00:35s -0:00:35 - +Rule sol89 1989 only - Apr 14 12:00:20s -0:00:20 - +Rule sol89 1989 only - Apr 15 12:00:05s -0:00:05 - +Rule sol89 1989 only - Apr 16 11:59:50s 0:00:10 - +Rule sol89 1989 only - Apr 17 11:59:35s 0:00:25 - +Rule sol89 1989 only - Apr 18 11:59:20s 0:00:40 - +Rule sol89 1989 only - Apr 19 11:59:10s 0:00:50 - +Rule sol89 1989 only - Apr 20 11:58:55s 0:01:05 - +Rule sol89 1989 only - Apr 21 11:58:45s 0:01:15 - +Rule sol89 1989 only - Apr 22 11:58:30s 0:01:30 - +Rule sol89 1989 only - Apr 23 11:58:20s 0:01:40 - +Rule sol89 1989 only - Apr 24 11:58:10s 0:01:50 - +Rule sol89 1989 only - Apr 25 11:58:00s 0:02:00 - +Rule sol89 1989 only - Apr 26 11:57:50s 0:02:10 - +Rule sol89 1989 only - Apr 27 11:57:40s 0:02:20 - +Rule sol89 1989 only - Apr 28 11:57:30s 0:02:30 - +Rule sol89 1989 only - Apr 29 11:57:20s 0:02:40 - +Rule sol89 1989 only - Apr 30 11:57:15s 0:02:45 - +Rule sol89 1989 only - May 1 11:57:05s 0:02:55 - +Rule sol89 1989 only - May 2 11:57:00s 0:03:00 - +Rule sol89 1989 only - May 3 11:56:50s 0:03:10 - +Rule sol89 1989 only - May 4 11:56:45s 0:03:15 - +Rule sol89 1989 only - May 5 11:56:40s 0:03:20 - +Rule sol89 1989 only - May 6 11:56:35s 0:03:25 - +Rule sol89 1989 only - May 7 11:56:30s 0:03:30 - +Rule sol89 1989 only - May 8 11:56:30s 0:03:30 - +Rule sol89 1989 only - May 9 11:56:25s 0:03:35 - +Rule sol89 1989 only - May 10 11:56:25s 0:03:35 - +Rule sol89 1989 only - May 11 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 12 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 13 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 14 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 15 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 16 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 17 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 18 11:56:25s 0:03:35 - +Rule sol89 1989 only - May 19 11:56:25s 0:03:35 - +Rule sol89 1989 only - May 20 11:56:30s 0:03:30 - +Rule sol89 1989 only - May 21 11:56:35s 0:03:25 - +Rule sol89 1989 only - May 22 11:56:35s 0:03:25 - +Rule sol89 1989 only - May 23 11:56:40s 0:03:20 - +Rule sol89 1989 only - May 24 11:56:45s 0:03:15 - +Rule sol89 1989 only - May 25 11:56:55s 0:03:05 - +Rule sol89 1989 only - May 26 11:57:00s 0:03:00 - +Rule sol89 1989 only - May 27 11:57:05s 0:02:55 - +Rule sol89 1989 only - May 28 11:57:15s 0:02:45 - +Rule sol89 1989 only - May 29 11:57:20s 0:02:40 - +Rule sol89 1989 only - May 30 11:57:30s 0:02:30 - +Rule sol89 1989 only - May 31 11:57:35s 0:02:25 - +Rule sol89 1989 only - Jun 1 11:57:45s 0:02:15 - +Rule sol89 1989 only - Jun 2 11:57:55s 0:02:05 - +Rule sol89 1989 only - Jun 3 11:58:05s 0:01:55 - +Rule sol89 1989 only - Jun 4 11:58:15s 0:01:45 - +Rule sol89 1989 only - Jun 5 11:58:25s 0:01:35 - +Rule sol89 1989 only - Jun 6 11:58:35s 0:01:25 - +Rule sol89 1989 only - Jun 7 11:58:45s 0:01:15 - +Rule sol89 1989 only - Jun 8 11:59:00s 0:01:00 - +Rule sol89 1989 only - Jun 9 11:59:10s 0:00:50 - +Rule sol89 1989 only - Jun 10 11:59:20s 0:00:40 - +Rule sol89 1989 only - Jun 11 11:59:35s 0:00:25 - +Rule sol89 1989 only - Jun 12 11:59:45s 0:00:15 - +Rule sol89 1989 only - Jun 13 12:00:00s 0:00:00 - +Rule sol89 1989 only - Jun 14 12:00:10s -0:00:10 - +Rule sol89 1989 only - Jun 15 12:00:25s -0:00:25 - +Rule sol89 1989 only - Jun 16 12:00:35s -0:00:35 - +Rule sol89 1989 only - Jun 17 12:00:50s -0:00:50 - +Rule sol89 1989 only - Jun 18 12:01:05s -0:01:05 - +Rule sol89 1989 only - Jun 19 12:01:15s -0:01:15 - +Rule sol89 1989 only - Jun 20 12:01:30s -0:01:30 - +Rule sol89 1989 only - Jun 21 12:01:40s -0:01:40 - +Rule sol89 1989 only - Jun 22 12:01:55s -0:01:55 - +Rule sol89 1989 only - Jun 23 12:02:10s -0:02:10 - +Rule sol89 1989 only - Jun 24 12:02:20s -0:02:20 - +Rule sol89 1989 only - Jun 25 12:02:35s -0:02:35 - +Rule sol89 1989 only - Jun 26 12:02:45s -0:02:45 - +Rule sol89 1989 only - Jun 27 12:03:00s -0:03:00 - +Rule sol89 1989 only - Jun 28 12:03:10s -0:03:10 - +Rule sol89 1989 only - Jun 29 12:03:25s -0:03:25 - +Rule sol89 1989 only - Jun 30 12:03:35s -0:03:35 - +Rule sol89 1989 only - Jul 1 12:03:45s -0:03:45 - +Rule sol89 1989 only - Jul 2 12:04:00s -0:04:00 - +Rule sol89 1989 only - Jul 3 12:04:10s -0:04:10 - +Rule sol89 1989 only - Jul 4 12:04:20s -0:04:20 - +Rule sol89 1989 only - Jul 5 12:04:30s -0:04:30 - +Rule sol89 1989 only - Jul 6 12:04:40s -0:04:40 - +Rule sol89 1989 only - Jul 7 12:04:50s -0:04:50 - +Rule sol89 1989 only - Jul 8 12:05:00s -0:05:00 - +Rule sol89 1989 only - Jul 9 12:05:10s -0:05:10 - +Rule sol89 1989 only - Jul 10 12:05:20s -0:05:20 - +Rule sol89 1989 only - Jul 11 12:05:25s -0:05:25 - +Rule sol89 1989 only - Jul 12 12:05:35s -0:05:35 - +Rule sol89 1989 only - Jul 13 12:05:40s -0:05:40 - +Rule sol89 1989 only - Jul 14 12:05:50s -0:05:50 - +Rule sol89 1989 only - Jul 15 12:05:55s -0:05:55 - +Rule sol89 1989 only - Jul 16 12:06:00s -0:06:00 - +Rule sol89 1989 only - Jul 17 12:06:05s -0:06:05 - +Rule sol89 1989 only - Jul 18 12:06:10s -0:06:10 - +Rule sol89 1989 only - Jul 19 12:06:15s -0:06:15 - +Rule sol89 1989 only - Jul 20 12:06:20s -0:06:20 - +Rule sol89 1989 only - Jul 21 12:06:20s -0:06:20 - +Rule sol89 1989 only - Jul 22 12:06:25s -0:06:25 - +Rule sol89 1989 only - Jul 23 12:06:25s -0:06:25 - +Rule sol89 1989 only - Jul 24 12:06:30s -0:06:30 - +Rule sol89 1989 only - Jul 25 12:06:30s -0:06:30 - +Rule sol89 1989 only - Jul 26 12:06:30s -0:06:30 - +Rule sol89 1989 only - Jul 27 12:06:30s -0:06:30 - +Rule sol89 1989 only - Jul 28 12:06:30s -0:06:30 - +Rule sol89 1989 only - Jul 29 12:06:25s -0:06:25 - +Rule sol89 1989 only - Jul 30 12:06:25s -0:06:25 - +Rule sol89 1989 only - Jul 31 12:06:20s -0:06:20 - +Rule sol89 1989 only - Aug 1 12:06:20s -0:06:20 - +Rule sol89 1989 only - Aug 2 12:06:15s -0:06:15 - +Rule sol89 1989 only - Aug 3 12:06:10s -0:06:10 - +Rule sol89 1989 only - Aug 4 12:06:05s -0:06:05 - +Rule sol89 1989 only - Aug 5 12:06:00s -0:06:00 - +Rule sol89 1989 only - Aug 6 12:05:50s -0:05:50 - +Rule sol89 1989 only - Aug 7 12:05:45s -0:05:45 - +Rule sol89 1989 only - Aug 8 12:05:35s -0:05:35 - +Rule sol89 1989 only - Aug 9 12:05:30s -0:05:30 - +Rule sol89 1989 only - Aug 10 12:05:20s -0:05:20 - +Rule sol89 1989 only - Aug 11 12:05:10s -0:05:10 - +Rule sol89 1989 only - Aug 12 12:05:00s -0:05:00 - +Rule sol89 1989 only - Aug 13 12:04:50s -0:04:50 - +Rule sol89 1989 only - Aug 14 12:04:40s -0:04:40 - +Rule sol89 1989 only - Aug 15 12:04:30s -0:04:30 - +Rule sol89 1989 only - Aug 16 12:04:15s -0:04:15 - +Rule sol89 1989 only - Aug 17 12:04:05s -0:04:05 - +Rule sol89 1989 only - Aug 18 12:03:50s -0:03:50 - +Rule sol89 1989 only - Aug 19 12:03:35s -0:03:35 - +Rule sol89 1989 only - Aug 20 12:03:25s -0:03:25 - +Rule sol89 1989 only - Aug 21 12:03:10s -0:03:10 - +Rule sol89 1989 only - Aug 22 12:02:55s -0:02:55 - +Rule sol89 1989 only - Aug 23 12:02:40s -0:02:40 - +Rule sol89 1989 only - Aug 24 12:02:20s -0:02:20 - +Rule sol89 1989 only - Aug 25 12:02:05s -0:02:05 - +Rule sol89 1989 only - Aug 26 12:01:50s -0:01:50 - +Rule sol89 1989 only - Aug 27 12:01:30s -0:01:30 - +Rule sol89 1989 only - Aug 28 12:01:15s -0:01:15 - +Rule sol89 1989 only - Aug 29 12:00:55s -0:00:55 - +Rule sol89 1989 only - Aug 30 12:00:40s -0:00:40 - +Rule sol89 1989 only - Aug 31 12:00:20s -0:00:20 - +Rule sol89 1989 only - Sep 1 12:00:00s 0:00:00 - +Rule sol89 1989 only - Sep 2 11:59:45s 0:00:15 - +Rule sol89 1989 only - Sep 3 11:59:25s 0:00:35 - +Rule sol89 1989 only - Sep 4 11:59:05s 0:00:55 - +Rule sol89 1989 only - Sep 5 11:58:45s 0:01:15 - +Rule sol89 1989 only - Sep 6 11:58:25s 0:01:35 - +Rule sol89 1989 only - Sep 7 11:58:05s 0:01:55 - +Rule sol89 1989 only - Sep 8 11:57:45s 0:02:15 - +Rule sol89 1989 only - Sep 9 11:57:20s 0:02:40 - +Rule sol89 1989 only - Sep 10 11:57:00s 0:03:00 - +Rule sol89 1989 only - Sep 11 11:56:40s 0:03:20 - +Rule sol89 1989 only - Sep 12 11:56:20s 0:03:40 - +Rule sol89 1989 only - Sep 13 11:56:00s 0:04:00 - +Rule sol89 1989 only - Sep 14 11:55:35s 0:04:25 - +Rule sol89 1989 only - Sep 15 11:55:15s 0:04:45 - +Rule sol89 1989 only - Sep 16 11:54:55s 0:05:05 - +Rule sol89 1989 only - Sep 17 11:54:35s 0:05:25 - +Rule sol89 1989 only - Sep 18 11:54:10s 0:05:50 - +Rule sol89 1989 only - Sep 19 11:53:50s 0:06:10 - +Rule sol89 1989 only - Sep 20 11:53:30s 0:06:30 - +Rule sol89 1989 only - Sep 21 11:53:10s 0:06:50 - +Rule sol89 1989 only - Sep 22 11:52:45s 0:07:15 - +Rule sol89 1989 only - Sep 23 11:52:25s 0:07:35 - +Rule sol89 1989 only - Sep 24 11:52:05s 0:07:55 - +Rule sol89 1989 only - Sep 25 11:51:45s 0:08:15 - +Rule sol89 1989 only - Sep 26 11:51:25s 0:08:35 - +Rule sol89 1989 only - Sep 27 11:51:05s 0:08:55 - +Rule sol89 1989 only - Sep 28 11:50:40s 0:09:20 - +Rule sol89 1989 only - Sep 29 11:50:20s 0:09:40 - +Rule sol89 1989 only - Sep 30 11:50:00s 0:10:00 - +Rule sol89 1989 only - Oct 1 11:49:45s 0:10:15 - +Rule sol89 1989 only - Oct 2 11:49:25s 0:10:35 - +Rule sol89 1989 only - Oct 3 11:49:05s 0:10:55 - +Rule sol89 1989 only - Oct 4 11:48:45s 0:11:15 - +Rule sol89 1989 only - Oct 5 11:48:30s 0:11:30 - +Rule sol89 1989 only - Oct 6 11:48:10s 0:11:50 - +Rule sol89 1989 only - Oct 7 11:47:50s 0:12:10 - +Rule sol89 1989 only - Oct 8 11:47:35s 0:12:25 - +Rule sol89 1989 only - Oct 9 11:47:20s 0:12:40 - +Rule sol89 1989 only - Oct 10 11:47:00s 0:13:00 - +Rule sol89 1989 only - Oct 11 11:46:45s 0:13:15 - +Rule sol89 1989 only - Oct 12 11:46:30s 0:13:30 - +Rule sol89 1989 only - Oct 13 11:46:15s 0:13:45 - +Rule sol89 1989 only - Oct 14 11:46:00s 0:14:00 - +Rule sol89 1989 only - Oct 15 11:45:50s 0:14:10 - +Rule sol89 1989 only - Oct 16 11:45:35s 0:14:25 - +Rule sol89 1989 only - Oct 17 11:45:20s 0:14:40 - +Rule sol89 1989 only - Oct 18 11:45:10s 0:14:50 - +Rule sol89 1989 only - Oct 19 11:45:00s 0:15:00 - +Rule sol89 1989 only - Oct 20 11:44:50s 0:15:10 - +Rule sol89 1989 only - Oct 21 11:44:40s 0:15:20 - +Rule sol89 1989 only - Oct 22 11:44:30s 0:15:30 - +Rule sol89 1989 only - Oct 23 11:44:20s 0:15:40 - +Rule sol89 1989 only - Oct 24 11:44:10s 0:15:50 - +Rule sol89 1989 only - Oct 25 11:44:05s 0:15:55 - +Rule sol89 1989 only - Oct 26 11:44:00s 0:16:00 - +Rule sol89 1989 only - Oct 27 11:43:50s 0:16:10 - +Rule sol89 1989 only - Oct 28 11:43:45s 0:16:15 - +Rule sol89 1989 only - Oct 29 11:43:40s 0:16:20 - +Rule sol89 1989 only - Oct 30 11:43:40s 0:16:20 - +Rule sol89 1989 only - Oct 31 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 1 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 2 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 3 11:43:30s 0:16:30 - +Rule sol89 1989 only - Nov 4 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 5 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 6 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 7 11:43:40s 0:16:20 - +Rule sol89 1989 only - Nov 8 11:43:45s 0:16:15 - +Rule sol89 1989 only - Nov 9 11:43:50s 0:16:10 - +Rule sol89 1989 only - Nov 10 11:43:55s 0:16:05 - +Rule sol89 1989 only - Nov 11 11:44:00s 0:16:00 - +Rule sol89 1989 only - Nov 12 11:44:05s 0:15:55 - +Rule sol89 1989 only - Nov 13 11:44:15s 0:15:45 - +Rule sol89 1989 only - Nov 14 11:44:25s 0:15:35 - +Rule sol89 1989 only - Nov 15 11:44:35s 0:15:25 - +Rule sol89 1989 only - Nov 16 11:44:45s 0:15:15 - +Rule sol89 1989 only - Nov 17 11:44:55s 0:15:05 - +Rule sol89 1989 only - Nov 18 11:45:10s 0:14:50 - +Rule sol89 1989 only - Nov 19 11:45:20s 0:14:40 - +Rule sol89 1989 only - Nov 20 11:45:35s 0:14:25 - +Rule sol89 1989 only - Nov 21 11:45:50s 0:14:10 - +Rule sol89 1989 only - Nov 22 11:46:05s 0:13:55 - +Rule sol89 1989 only - Nov 23 11:46:25s 0:13:35 - +Rule sol89 1989 only - Nov 24 11:46:40s 0:13:20 - +Rule sol89 1989 only - Nov 25 11:47:00s 0:13:00 - +Rule sol89 1989 only - Nov 26 11:47:20s 0:12:40 - +Rule sol89 1989 only - Nov 27 11:47:35s 0:12:25 - +Rule sol89 1989 only - Nov 28 11:47:55s 0:12:05 - +Rule sol89 1989 only - Nov 29 11:48:20s 0:11:40 - +Rule sol89 1989 only - Nov 30 11:48:40s 0:11:20 - +Rule sol89 1989 only - Dec 1 11:49:00s 0:11:00 - +Rule sol89 1989 only - Dec 2 11:49:25s 0:10:35 - +Rule sol89 1989 only - Dec 3 11:49:50s 0:10:10 - +Rule sol89 1989 only - Dec 4 11:50:15s 0:09:45 - +Rule sol89 1989 only - Dec 5 11:50:35s 0:09:25 - +Rule sol89 1989 only - Dec 6 11:51:00s 0:09:00 - +Rule sol89 1989 only - Dec 7 11:51:30s 0:08:30 - +Rule sol89 1989 only - Dec 8 11:51:55s 0:08:05 - +Rule sol89 1989 only - Dec 9 11:52:20s 0:07:40 - +Rule sol89 1989 only - Dec 10 11:52:50s 0:07:10 - +Rule sol89 1989 only - Dec 11 11:53:15s 0:06:45 - +Rule sol89 1989 only - Dec 12 11:53:45s 0:06:15 - +Rule sol89 1989 only - Dec 13 11:54:10s 0:05:50 - +Rule sol89 1989 only - Dec 14 11:54:40s 0:05:20 - +Rule sol89 1989 only - Dec 15 11:55:10s 0:04:50 - +Rule sol89 1989 only - Dec 16 11:55:40s 0:04:20 - +Rule sol89 1989 only - Dec 17 11:56:05s 0:03:55 - +Rule sol89 1989 only - Dec 18 11:56:35s 0:03:25 - +Rule sol89 1989 only - Dec 19 11:57:05s 0:02:55 - +Rule sol89 1989 only - Dec 20 11:57:35s 0:02:25 - +Rule sol89 1989 only - Dec 21 11:58:05s 0:01:55 - +Rule sol89 1989 only - Dec 22 11:58:35s 0:01:25 - +Rule sol89 1989 only - Dec 23 11:59:05s 0:00:55 - +Rule sol89 1989 only - Dec 24 11:59:35s 0:00:25 - +Rule sol89 1989 only - Dec 25 12:00:05s -0:00:05 - +Rule sol89 1989 only - Dec 26 12:00:35s -0:00:35 - +Rule sol89 1989 only - Dec 27 12:01:05s -0:01:05 - +Rule sol89 1989 only - Dec 28 12:01:35s -0:01:35 - +Rule sol89 1989 only - Dec 29 12:02:00s -0:02:00 - +Rule sol89 1989 only - Dec 30 12:02:30s -0:02:30 - +Rule sol89 1989 only - Dec 31 12:03:00s -0:03:00 - + +# Riyadh is at about 46 degrees 46 minutes East: 3 hrs, 7 mins, 4 secs +# Before and after 1989, we'll operate on local mean solar time. + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Mideast/Riyadh89 3:07:04 - ?? 1989 + 3:07:04 sol89 ?? 1990 + 3:07:04 - ?? diff --git a/share/zoneinfo/datfiles/southamerica b/share/zoneinfo/datfiles/southamerica new file mode 100644 index 0000000..abab105 --- /dev/null +++ b/share/zoneinfo/datfiles/southamerica @@ -0,0 +1,103 @@ +# @(#)southamerica 4.3 + +# From Guy Harris: +# From Official Airline Guide - Worldwide Edition (1987). Countries not +# listed here do not observe DST, according to the OAG. Time zone names +# are pure inventions, and none are supplied for countries not observing +# DST; updates from natives would be appreciated. The times that DST +# starts and ends are based on the assumption that they switch a 2AM just +# as everybody else does. + +############################################################################### + +# Brazil + +# From Guy Harris: +# The OAG lists October 25, 1987 and February 12, 1988 as the starting and +# ending dates, giving them as "estimated date(s) based on previous year". We +# infer a rule here from one example, always a dangerous practice.... Yes, +# they really do switch on Saturday, according to the OAG. +# "Brazil/Acre" is for the Territory of Acre; "Brazil/DeNoronha" is for +# Fernando De Noronha. + +# From Bob Devine (January 28, 1988): +# The only information I found is that there was no DST up to 1985. +# But there was some before 1952! + +# From U. S. Naval Observatory (January 16, 1989): +# BRAZIL WEST 5 H BEHIND UTC TERRITORY OF ACRE +# BRAZIL WEST 4 H BEHIND UTC ACRE OCT 23, '88-FEB 11, +# BRAZIL '89 (ESTIMATED) +# BRAZIL CENTRAL 4 H BEHIND UTC MANAUS +# BRAZIL CENTRAL 3 H BEHIND UTC MANAUS OCT 23, '88-FEB 11, +# BRAZIL CENTRAL '89 (ESTIMATED) +# BRAZIL EAST 3 H BEHIND UTC COASTAL STATES, RIO, SAO +# BRAZIL EAST PAULO, BRASILIA +# BRAZIL EAST 2 H BEHIND UTC COASTAL STATES, RIO, SAO +# BRAZIL PAULO, BRASILIA OCT 23, +# BRAZIL '88-FEB 11, '89 +# BRAZIL (ESTIMATED) +# BRAZIL 2 H BEHIND UTC ATLANTIC ISLANDS, FERNANDO +# BRAZIL DE NORONHA +# BRAZIL 1 H BEHIND UTC OCT 23, '88-FEB 11, '89 +# BRAZIL (ESTIMATED) +# BRAZIL 3 H BEHIND UTC FOR MOST MAJOR AIRPORTS. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Brazil 1987 max - Feb Sat<=14 2:00 0 S +Rule Brazil 1987 max - Oct Sat<=28 2:00 1:00 D + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Brazil/East -3:00 Brazil E%sT +Zone Brazil/West -4:00 Brazil W%sT +Zone Brazil/Acre -5:00 Brazil A%sT +Zone Brazil/DeNoronha -2:00 Brazil F%sT + +############################################################################### + +# Chile + +# From Guy Harris: +# The OAG lists October 11, 1987 and March 12, 1988 as the starting and +# ending dates, giving them as "estimated date(s) based on previous year." + +# From Bob Devine (January 28, 1988): +# Chile has had 2nd Sunday in October to 2nd Sunday in March DST since 1977. +# Switch is at midnight. OAG is right. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Chile 1977 max - Oct Sun>=8 0:00 1:00 D +Rule Chile 1978 max - Mar Sun>=8 0:00 0 S + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Chile/Continental -4:00 Chile C%sT +Zone Chile/EasterIsland -6:00 Chile E%sT + +############################################################################### + +# Paraguay + +# From Bob Devine (January 28, 1988): +# Paraguay: First day in October to last in March. Midnight switch?? +# Since 1980. + +# From U. S. Naval Observatory (January 19, 1989): +# PARAGUAY 4 H BEHIND UTC +# PARAGUAY 3 H BEHIND UTC OCT 1, '88-MAR 31, '89 + +# From Arthur David Olson (January 21, 1989): +# Still don't know time of day when switch occurs. Punt. + +############################################################################### + +# Argentina + +# From Bob Devine (January 28, 1988): +# Argentina: first Sunday in October to first Sunday in April since 1976. +# Double Summer time from 1969 to 1974. Switches at midnight. + +# From U. S. Naval Observatory (January 19, 19889): +# ARGENTINA 3 H BEHIND UTC + +# From Arthur David Olson (January 21, 1989): +# OAG, USNO and Bob have different data. Punt. diff --git a/share/zoneinfo/datfiles/systemv b/share/zoneinfo/datfiles/systemv new file mode 100644 index 0000000..8dc7bed --- /dev/null +++ b/share/zoneinfo/datfiles/systemv @@ -0,0 +1,35 @@ +# @(#)systemv 4.1 + +# 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 change in the DST rules in the US in 1987 (can't split between +# Canada, with no changes, and the US) +# +# Be sure to compile this *without* leap second correction for true conformance. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule SystemV min 1973 - Apr lastSun 2:00 1:00 D +Rule SystemV min 1973 - Oct lastSun 2:00 0 S +Rule SystemV 1974 only - Jan 6 2:00 1:00 D +Rule SystemV 1974 only - Nov lastSun 2:00 0 S +Rule SystemV 1975 only - Feb 23 2:00 1:00 D +Rule SystemV 1975 only - Oct lastSun 2:00 0 S +Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D +Rule SystemV 1976 max - Oct lastSun 2:00 0 S + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone SystemV/AST4ADT -4:00 SystemV A%sT +Zone SystemV/EST5EDT -5:00 SystemV E%sT +Zone SystemV/CST6CDT -6:00 SystemV C%sT +Zone SystemV/MST7MDT -7:00 SystemV M%sT +Zone SystemV/PST8PDT -8:00 SystemV P%sT +Zone SystemV/YST9YDT -9:00 SystemV Y%sT +Zone SystemV/AST4 -4:00 - AST +Zone SystemV/EST5 -5:00 - EST +Zone SystemV/CST6 -6:00 - CST +Zone SystemV/MST7 -7:00 - MST +Zone SystemV/PST8 -8:00 - PST +Zone SystemV/YST9 -9:00 - YST +Zone SystemV/HST10 -10:00 - HST diff --git a/share/zoneinfo/datfiles/usno1988 b/share/zoneinfo/datfiles/usno1988 new file mode 100644 index 0000000..12d14ce --- /dev/null +++ b/share/zoneinfo/datfiles/usno1988 @@ -0,0 +1,111 @@ +# @(#)usno1988 1.1 +# +# From Arthur David Olson (January 19, 1989): +# +# Here's some United States Naval Observatory time zone data from +# February 1988. It's here mostly to convince you that the USNO has indeed +# been updating its files (see its 1989 data elsewhere). +# +ANDORRA 1 H AHEAD OF UTC +ARGENTINA 3 H BEHIND UTC +BRASIL WEST 5 H BEHIND UTC (CRUZEIRO DO SUL) +BRASIL CENTRAL 4 H BEHIND UTC (MANAUS) +BRASIL EAST 3 H BEHIND UTC COASTAL STATES, RIO, SP, BRASILIA +BRASIL 2 H BEHIND UTC ATLANTIC ISLANDS +BRAZIL 5 H BEHIND UTC WEST (CRUZEIRO DO SUL) +BRAZIL 4 H BEHIND UTC CENTRAL (MANAUS) +BRAZIL 3 H BEHIND UTC COASTAL STATES, RIO, SP, BRASILIA +BRAZIL 3 H BEHIND UTC FOR MOST MAJOR AIRPORTS. +BRAZIL 2 H BEHIND UTC ATLANTIC ISLANDS +BULGARIA 2 H AHEAD OF UTC WINTER +BULGARIA 3 H AHEAD OF UTC SUMMER MAR31 - SEP 85, 0100 LOCAL +CHINA 8 H AHEAD OF UTC; ALL OF CHINA, INCL TAIWAN +CUBA 5 H BEHIND UTC IN WINTER +CUBA 4 H BEHIND UTC MAY 8 - OCT 8 +CYPRUS 2 H AHEAD UTC IN WINTER +CYPRUS 3 H AHEAD UTC MAR 25 - SEP 30 +DENMARK 1 H AHEAD UTC IN WINTER +DENMARK 2 H AHEAD UTC MAR 31 - SEP 30 , 0200 LOCAL +DENMK. FAEROE IS 1 H AHEAD UTC MAR 31 - SEP 30 , 0200 LOCAL +EGYPT 2 H AHEAD UTC +EGYPT 3 H AHEAD UTC SUMMER (AFTER RAMADAN) +ENGLAND ON UTC IN WINTER; WALES, SCOTLAND, N.I., CH.IS. +ENGLAND 1 H AHEAD OF UTC; SUMMER TIL 28 OCT 0200 LOCAL +FINLAND 2 H AHEAD OF UTC IN WINTER +FINLAND 3 H AHEAD OF UTC MAR 25 - SEP 30 +FRANCE 1 H AHEAD OF UTC IN WINTER +FRANCE 2 H AHEAD OF UTC MAR 31 - SEP 30 , 0100 LOCAL +GREECE 2 H AHEAD OF UTC IN WINTER +GREECE 3 H AHEAD OF UTC IN SUMMER EFF. 31MAR85 02/03 LOCAL +GREECE 3 H AHEAD OF UTC MAR 25 - SEP 30 +GREENLAND 4 H BEHIND UTC IN THULE AIRBASE YEAR ROUND +GREENLAND 3 H BEHIND UTC IN WINTER AT SONDRESTROM +GREENLAND 2 H BEHIND UTC 30 MAR - 30 SEP 2200 LOCAL AT -"- +GREENLAND 2 H BEHIND UTC AROUND SCORESBY SUND +ICELAND ON UTC +IRAN 3.5H AHEAD OF UTC +IRELAND ON UTC IN WINTER +IRELAND 1 H AHEAD OF UTC MAR 31 - OCT 23 0200 LOCAL +ITALY 1 H AHEAD OF UTC IN WINTER +ITALY 2 H AHEAD OF UTC MAR 31 - SEP 30, 0030 LOCAL +JAMAICA 5 H BEHIND UTC IN WINTER +JAMAICA 4 H BEHIND UTC APR 29 - OCT 29 +LIBYA 2 H AHEAD OF UTC +MEXICO BAJA CAL N 8 H BEHIND UTC IN WINTER; NORTH BAJA CAL, TIJUANA +MEXICO BAJA CAL N 7 H BEHIND UTC APR 29 - OCT 29 +MEXICO BAJA CAL S 7 H BEHIND UTC ALL YEAR; MAZATLAN +MEXICO CENTRAL 6 H BEHIND UTC ALL YEAR; MEXICO CITY +MONACO 1 H AHEAD UTC IN WINTER +MONACO 2 H AHEAD UTC MAR 25 - SEP30 +PARAGUAY 4 H BEHIND UTC IN WINTER +PARAGUAY 3 H BEHIND UTC SEP 30 - MAR 30 +POLAND 1 H AHEAD OF UTC IN WINTER +POLAND 2 H AHEAD OF UTC MAR 24 - SEP 0200 LOCAL +PORTUGAL ON UTC IN WINTER +PORTUGAL 1 H AHEAD OF UTC IN SUMMER MAR 31 - SEP 29 0100 LOCAL +PORTUGAL AZORES 1 H BEHIND UTC IN WINTER +PORTUGAL AZORES ON UTC IN SUMMER MAR 31 - SEP 29 +PORTUGAL MADEIRA ON UTC ALL YEAR; +ROMANIA 2 H AHEAD OF UTC IN WINTER +ROMANIA 3 H AHEAD OF UTC APR 3 - SEP 24 +SCOTLAND SEE ENGLAND +SWITZERLAND 1 H AHEAD OF UTC IN WINTER +SWITZERLAND 2 H AHEAD OF UTC MAR 31 - SEP 30 0200 LOCAL +TURKEY 3 H AHEAD OF UTC +USA EASTERN 5 H BEHIND UTC IN WINTER; NEW YORK, WASHINGTON +USA EASTERN 4 H BEHIND UTC APR 29 - OCT 29 +USA CENTRAL 6 H BEHIND UTC IN WINTER; CHICAGO, HOUSTON +USA CENTRAL 5 H BEHIND UTC APR 29 - OCT 29 +USA MOUNTAIN 7 H BEHIND UTC IN WINTER; DENVER +USA MOUNTAIN 6 H BEHIND UTC APR 29 - OCT 29 +USA PACIFIC 8 H BEHIND UTC IN WINTER; L.A., SAN FRANCISCO +USA PACIFIC 7 H BEHIND UTC APR 29 - OCT 29 +USA ALASKA STD 9 H BEHIND UTC IN WINTER; MOST OF ALASKA (AKST) +USA ALASKA STD 8 H BEHIND UTC APR 29 - OCT 29 (AKDT) +USA ALEUTIAN 10 H BEHIND UTC IN WINTER; ISLANDS WEST OF 170W +USA - " - 9 H BEHIND UTC APR 29 - OCT 29 +USA HAWAII 10 H BEHIND UTC ALL YEAR; +USA BERING 11 H BEHIND UTC ALL YEAR; SAMOA, MIDWAY +USSR WEST EUROP 3 H AHEAD OF UTC IN WINTER; LENINGRAD, MOSCOW +USSR WEST EUROP 4 H AHEAD OF UTC APR 1 - SEP 30 +USSR CENTRAL EUR 4 H AHEAD OF UTC IN WINTER; ROSTOV, BAKU +USSR CENTRAL EUR 5 H AHEAD OF UTC APR 1 - SEP 30 +USSR EAST EUROP 5 H AHEAD OF UTC IN WINTER; SVERDLOVSK +USSR EAST EUROP 6 H AHEAD OF UTC APR 1 - SEP 30 +USSR WEST SIBERIAN 6 H AHEAD OF UTC IN WINTER; TASHKENT, ALMA ATA +USSR WEST SIBERIAN 7 H AHEAD OF UTC APR 1 - SEP 30 +USSR WEST-CENTRAL 7 H AHEAD OF UTC IN WINTER; NOVOSIBIRSK +USSR WEST-CENTRAL 8 H AHEAD OF UTC APR 1 - SEP 30 +USSR WEST-CENTRAL 8 H AHEAD OF UTC IN WINTER; IRKUTSK +USSR WEST-CENTRAL 9 H AHEAD OF UTC APR 1 - SEP 30 +USSR CENTRAL SIB 9 H AHEAD OF UTC IN WINTER; YAKUTSK +USSR CENTRAL SIB 10 H AHEAD OF UTC APR 1 - SEP 30 +USSR CENTRAL SIB 10 H AHEAD OF UTC IN WINTER; VLADIVOSTOK +USSR CENTRAL SIB 11 H AHEAD OF UTC APR 1 - SEP 30 +USSR EAST SIBERIA 11 H AHEAD OF UTC IN WINTER; MAGADAN +USSR EAST SIBERIA 12 H AHEAD OF UTC APR 1 - SEP 30 +USSR EAST SIBERIA 12 H AHEAD OF UTC IN WINTER; PETROPAVLOVSK +USSR EAST SIBERIA 13 H AHEAD OF UTC APR 1 - SEP 30 +USSR EAST SIBERIA 13 H AHEAD OF UTC IN WINTER; UELEN +USSR EAST SIBERIA 14 H AHEAD OF UTC APR 1 - SEP 30 +WALES SEE ENGLAND diff --git a/share/zoneinfo/datfiles/usno1989 b/share/zoneinfo/datfiles/usno1989 new file mode 100644 index 0000000..82cc386 --- /dev/null +++ b/share/zoneinfo/datfiles/usno1989 @@ -0,0 +1,452 @@ +# @(#)usno1989 1.3 +# +# From Arthur David Olson (January 19, 1989): +# +# Here's time zone information from the United States Naval Observatory; +# no corrections have been made, and there are some obvious challenges. +# The USNO warns: +# DUE TO FREQUENT CHANGES IN THE LOCAL LAWS GOVERNING DAYLIGHT +# SAVING TIME, WE CANNOT GUARANTEE THE ACCURACY OF THIS +# INFORMATION. PLEASE ALERT US TO ANY DISCREPANCY YOU MAY +# DISCOVER. +# +AFGHANISTAN 4.5H AHEAD OF UTC +ALBANIA 1 H AHEAD OF UTC +ALBANIA 2 H AHEAD OF UTC MAR 27 - SEP 24 +ALBANIA (ESTIMATED) +ALGERIA 1 H AHEAD OF UTC +AMERICAN SAMOA 11 H BEHIND UTC +ANDORRA 1 H AHEAD OF UTC +ANDORRA 2 H AHEAD OF UTC MAR 27 - SEP 24 +ANDORRA (ESTIMATED) +ANGOLA 1 H AHEAD OF UTC +ARGENTINA 3 H BEHIND UTC +ARUBA 4 H BEHIND UTC ALSO BONAIRE, CURACAO, +ARUBA ST.MAARTEN +AUSTRALIA WEST 8 H AHEAD OF UTC PERTH, EXMOUTH +AUSTRALIA N.T. 9.5H AHEAD OF UTC DARWIN NO ADVANCED TIME +AUSTRALIA N.T. IN SUMMER +AUSTRALIA SOUTH 9.5H AHEAD OF UTC ADELAIDE +AUSTRALIA INCLUDING BROKEN HILL, NSW +AUSTRALIA SOUTH 10.5H AHEAD OF UTC ADELAIDE OCT 30, '88-MAR +AUSTRALIA SOUTH 18, '89 INCLUDING BROKEN +AUSTRIALIA SOUTH HILL, NSW +AUSTRALIA QUEENL 10 H AHEAD OF UTC +AUSTRALIA NSW 10 H AHEAD OF UTC SYDNEY +AUSTRALIA NSW 11 H AHEAD OF UTC SYDNEY OCT 30, '88-MAR 18, +AUSTRALIA NSW '89 +AUSTRALIA TASM. 10 H AHEAD OF UTC HOBART +AUSTRALIA TASM. 11 H AHEAD OF UTC HOBART OCT 30, '88-MAR 18, +AUSTRALIA TASM. '89 +AUSTRIA 1 H AHEAD OF UTC +AUSTRIA 2 H AHEAD OF UTC MAR 27 - SEPT 24 +AZORES SEE PORTUGAL +BAHAMAS 5 H BEHIND UTC EXCLUDING TURKS AND CAICOS +BAHAMAS ISLANDS) +BAHAMAS 4 H BEHIND UTC APR 3 - OCT 29 (SAME +BAHAMAS EXCLUSION) +BAHRAIN 3 H AHEAD OF UTC +BANGLADESH 6 H AHEAD OF UTC +BARBADOS 4 H BEHIND UTC +BELGIUM 1 H AHEAD OF UTC +BELGIUM 2 H AHEAD OF UTC MAR 27 - SEP 24 +BELIZE 6 H BEHIND UTC +BENIN PEOPLES REP 1 H AHEAD OF UTC DAHOMEY +BERMUDA 4 H BEHIND UTC +BERMUDA 3 H BEHIND UTC APR 3 - OCT 29 +BHUTAN 6 H AHEAD OF UTC +BOLIVIA 4 H BEHIND UTC +BONAIRE 4 H BEHIND UTC ALSO ARUBA,CURACAO, +BONAIRE ST.MAARTEN, SABA +BOTSWANA 2 H AHEAD OF UTC +BRAZIL WEST 5 H BEHIND UTC TERRITORY OF ACRE +BRAZIL WEST 4 H BEHIND UTC ACRE OCT 23, '88-FEB 11, +BRAZIL '89 (ESTIMATED) +BRAZIL CENTRAL 4 H BEHIND UTC MANAUS +BRAZIL CENTRAL 3 H BEHIND UTC MANAUS OCT 23, '88-FEB 11, +BRAZIL CENTRAL '89 (ESTIMATED) +BRAZIL EAST 3 H BEHIND UTC COASTAL STATES, RIO, SAO +BRAZIL EAST PAULO, BRASILIA +BRAZIL EAST 2 H BEHIND UTC COASTAL STATES, RIO, SAO +BRAZIL PAULO, BRASILIA OCT 23, +BRAZIL '88-FEB 11, '89 +BRAZIL (ESTIMATED) +BRAZIL 2 H BEHIND UTC ATLANTIC ISLANDS, FERNANDO +BRAZIL DE NORONHA +BRAZIL 1 H BEHIND UTC OCT 23, '88-FEB 11, '89 +BRAZIL (ESTIMATED) +BRAZIL 3 H BEHIND UTC FOR MOST MAJOR AIRPORTS. +BRITISH VIRGIN I. 4 H BEHIND UTC +BRUNEI 8 H AHEAD OF UTC +BULGARIA 2 H AHEAD OF UTC +BULGARIA 3 H AHEAD OF UTC MAR 27 - SEP 24 +BURKINA FASO ON UTC +BURMA 6.5H AHEAD OF UTC +BURUNDI 2 H AHEAD OF UTC +CAMBODIA SEE KAMPUCHEA +CAMEROON 1 H AHEAD OF UTC +CANADA NEW FDL 3.5H BEHIND UTC ST.JOHN'S +CANADA NEW FDL 1.5H BEHIND UTC APR 3 - OCT 29 +CANADA ATLANTIC 4 H BEHIND UTC HALIFAX +CANADA ATLANTIC 3 H BEHIND UTC APR 3 - OCT 29 +CANADA EASTERN 5 H BEHIND UTC TORONTO, MONTREAL, OTTAWA +CANADA EASTERN 4 H BEHIND UTC APR 3 - OCT 29 +CANADA CENTRAL 6 H BEHIND UTC REGINA, WINNIPEG +CANADA CENTRAL 5 H BEHIND UTC APR 3 - OCT 29 +CANADA MOUNTAIN 7 H BEHIND UTC CALGARY, EDMONTON +CANADA MOUNTAIN 6 H BEHIND UTC APR 3 - OCT 29 +CANADA PACIFIC 8 H BEHIND UTC VANCOUVER +CANADA PACIFIC 7 H BEHIND UTC APR 3 - OCT 29 +CANADA YUKON SAME AS PACIFIC DAWSON +CAPE VERDE 1 H BEHIND UTC +CAYMAN ISLANDS 5 H BEHIND UTC +CAROLINE ISLAND 10 H AHEAD OF UTC EXCLUDING PONAPE IS., +CAROLINE ISLAND KUSAIE, AND PINGELAP +CENTRAL AFRICA 1 H AHEAD OF UTC +CEYLON 5.5H AHEAD OF UTC, SEE SRI LANKA +CHAD 1 H AHEAD OF UTC +CHANNEL ISLANDS SEE ENGLAND +CHILE 4 H BEHIND UTC CONTINENTAL +CHILE 3 H BEHIND UTC OCT 9, '88-MAR 11, '89 +CHILE 6 H BEHIND UTC EASTER ISLAND +CHILE 5 H BEHIND UTC OCT 9, '88-MAR 11, '89 +CHINA 8 H AHEAD OF UTC ALL OF CHINA, INCL TAIWAN +CHINA 9 H AHEAD OF UTC APR 17 - SEP 10 +COCOS (Keeling) I. 6.5H AHEAD OF UTC +COLOMBIA 5 H BEHIND UTC +COMOROS 3 H AHEAD OF UTC +CONGO 1 H AHEAD OF UTC +COOK ISLANDS 10 H BEHIND UTC +COOK ISLANDS 9.5H BEHIND UTC OCT 30, '88-MAR 24, '89 +COOK ISLANDS (ESTIMATED) +COSTA RICA 6 H BEHIND UTC +COTE D'IVOIRE ON UTC +CUBA 5 H BEHIND UTC +CUBA 4 H BEHIND UTC MAR 20 - OCT 8 +CURACAO 4 H BEHIND UTC ALSO BONAIRE, ARUBA, +CURACAO ST.MAARTEN +CYPRUS 2 H AHEAD OF UTC +CYPRUS 3 H AHEAD OF UTC MAR 27 - SEP 24 +CZECHOSLOVAKIA 1 H AHEAD OF UTC +CZECHOSLOVAKIA 2 H AHEAD OF UTC MAR 27 - SEP 24 +DENMARK 1 H AHEAD OF UTC +DENMARK 2 H AHEAD OF UTC MAR 27 - SEP 24 +DENMK. FAEROE IS 1 H AHEAD OF UTC MAR 27 - SEP 24 +DJIBOUTI 3 H AHEAD OF UTC +DOMINICA 4 H BEHIND UTC +DOMINICAN REP 4 H BEHIND UTC +ECUADOR 5 H BEHIND UTC CONTINENTAL +ECUADOR 6 H BEHIND UTC GALAPAGOS ISLANDS +EGYPT 2 H AHEAD OF UTC +EGYPT 3 H AHEAD OF UTC MAY 17 - SEP 30 (AFTER +EGYPT RAMADAN) +EL SALVADOR 6 H BEHIND UTC +ENGLAND ON UTC (WALES, SCOTLAND, N.I., +ENGLAND CH. IS.) +ENGLAND 1 H AHEAD OF UTC MAR 27 - OCT 22 +ENEZUELA 4 H BEHIND UTC +EQUITORIAL GUINEA 1 H AHEAD OF UTC +ETHIOPIA 3 H AHEAD OF UTC +FALKLAND ISLANDS 4 H BEHIND UTC +FALKLAND ISLANDS 3 H BEHIND UTC SEP 11, '88-APR 15, '89 +FALKLAND ISLANDS (ESTIMATED) +FAROE ISLAND ON UTC +FAROE ISLAND 1 H AHEAD OF UTC MAR 27 - SEP 24 +FIJI 12 H AHEAD OF UTC +FINLAND 2 H AHEAD OF UTC +FINLAND 3 H AHEAD OF UTC MAR 27 - SEP 24 +FRANCE 1 H AHEAD OF UTC +FRANCE 2 H AHEAD OF UTC MAR 27 - SEP 24 +FRENCH GUIANA 3 H BEHIND UTC +FRENCH POLYNESIA 9 H BEHIND UTC GAMBIER ISLAND +FRENCH POLYNESIA 9.5H BEHIND UTC MARQUESAS ISLANDS +FRENCH POLYNESIA 10 H BEHIND UTC SOCIETY ISLANDS, TUBUAI +FRENCH POLYNESIA ISLANDS, TUAMOTU ISLAND, +FRENCH POLYNESIA TAHITI +GABON 1 H AHEAD OF UTC +GAMBIA ON UTC +GERMANY ALL 1 H AHEAD OF UTC +GERMANY ALL 2 H AHEAD OF UTC MAR 27 - SEP 24 +GHANA ON UTC +GIBRALTAR 1 H AHEAD OF UTC +GIBRALTAR 2 H AHEAD OF UTC MAR 27 - SEP 24 +GREECE 2 H AHEAD OF UTC +GREECE 3 H AHEAD OF UTC MAR 27 - SEP 24 +GREENLAND 4 H BEHIND UTC THULE AIRBASE YEAR ROUND +GREENLAND 3 H BEHIND UTC ANGMAGSSALIK AND W. COAST +GREENLAND 2 H BEHIND UTC MAR 27 - SEP 24 +GREENLAND 1 H BEHIND UTC SCORESBYSUND +GREENLAND ON UTC MAR 27 - SEP 24 +GRENADA 4 H BEHIND UTC +GUADELOUPE 4 H BEHIND UTC ST. BARTHELEMY, NORTHERN +GUADELOUPE ST. MARTIN MARTINIQUE +GUAM 10 H AHEAD OF UTC +GUATEMALA 6 H BEHIND UTC +GUINEA ON UTC +GUINEA BISSAU ON UTC +GUINEA REPUBLIC ON UTC +GUINEA EQUATORIAL 1 H AHEAD OF UTC +GUYANA 3 H BEHIND UTC +HAITI 5 H BEHIND UTC +HAITI 4 H BEHIND UTC APR 3 - OCT 29 +HOLLAND SEE NETHERLANDS +HONDURAS 6 H BEHIND UTC +HONG KONG 8 H AHEAD OF UTC +HUNGARY 1 H AHEAD OF UTC +HUNGARY 2 H AHEAD OF UTC MAR 27 - SEP 24 +ICELAND ON UTC +INDIA 5.5H AHEAD OF UTC INCLUDING ANDAMAN ISLANDS +INDONESIA WEST 7 H AHEAD OF UTC SUMATRA, JAVA, BALI, +INDONESIA WEST JAKARTA +INDONESIA CENTRAL 8 H AHEAD OF UTC KALIMANTAN, SULAWESI +INDONESIA EAST 9 H AHEAD OF UTC IRIAN, BARAT +IRAN 3.5H AHEAD OF UTC +IRAQ 3 H AHEAD OF UTC +IRAQ 4 H AHEAD OF UTC APR 1 - SEP 30 +IRELAND ON UTC +IRELAND 1 H AHEAD OF UTC MAR 27 - OCT 22 +ISRAEL 2 H AHEAD OF UTC +ISRAEL 3 H AHEAD OF UTC APR 10 - SEP 3 +ITALY 1 H AHEAD OF UTC +ITALY 2 H AHEAD OF UTC MAR 27 - SEP 24 +IVORY COAST ON UTC +IWAN 8 H AHEAD OF UTC +JAMAICA 5 H BEHIND UTC +JAPAN 9 H AHEAD OF UTC +JOHNSTON ISLAND 10 H BEHIND UTC +JORDAN 2 H AHEAD OF UTC +JORDAN 3 H AHEAD OF UTC APR 1 - OCT 6 +KAMPUCHEA 7 H AHEAD OF UTC +KENYA 3 H AHEAD OF UTC +KIRIBATI, REP OF 12 H AHEAD OF UTC CANTON, ENDERBURY ISLANDS +KIRIBATI, REP OF 11 H AHEAD OF UTC CHRISTMAS ISLAND +KOREA 9 H AHEAD OF UTC +KOREA, REP OF 9 H AHEAD OF UTC +KOREA, REP OF 10 H AHEAD OF UTC MAY 8 - OCT 8 +KUWAIT 3 H AHEAD OF UTC +KUSAIE, PINGELAP 12 H AHEAD OF UTC INCLUDING MARSHALL IS., +KUSAIE, PINGELAP EXCLUDING KWAJALEIN) +KWAJALEIN 12 H BEHIND UTC +LAOS 7 H AHEAD OF UTC +LEBANON 2 H AHEAD OF UTC +LEBANON 3 H AHEAD OF UTC JUN 1 - OCT 31 +LEEWARD ISLANDS 4 H BEHIND UTC ANTIGUA, DOMINICA, +LEEWARD ISLANDS MONTSERRAT, ST. +LEEWARD ISLAANDS CHRISTOPHER, ST. KITTS, +LEEWARD ISLANDS NEVIS, ANGUILLA +LESOTHO 2 H AHEAD OF UTC +LIBERIA ON UTC +LIBYAN ARAB 1 H AHEAD OF UTC JAMAHIRIYA/LIBYA +LIBYAN ARAB 2 H AHEAD OF UTC APR 1 - SEP 30 JAMAHIRIYA/LIBYA +LIECHTENSTEIN 1 H AHEAD OF UTC +LIECHTENSTEIN 2 H AHEAD OF UTC MAR 27 - SEP 24 +LUXEMBOURG 1 H AHEAD OF UTC +LUXEMBOURG 2 H AHEAD OF UTC MAR 27 - SEP 24 +MACAO 8 H AHEAD OF UTC +MADAGASCAR 3 H AHEAD OF UTC +MADEIRA SEE PORTUGAL +MALAWI 2 H AHEAD OF UTC +MALAYSIA 8 H AHEAD OF UTC +MALDIVES 5 H AHEAD OF UTC +MALI ON UTC +MALTA 1 H AHEAD OF UTC +MALTA 2 H AHEAD OF UTC MAR 27 - SEP 24 +MARTINIQUE 4 H BEHIND UTC +MAURITANIA ON UTC +MAURITIUS 4 H AHEAD OF UTC +MARIANA ISLAND 10 H AHEAD OF UTC EXCLUDING GUAM +MEXICO BAJA CAL N 7 H BEHIND UTC BAJA CALIFORNIA SUR AND +MEXICO BAJA CAL N N. PACIFIC COAST (STATES +MEXICO BAJA CAL N OF SINALOA AND SONORA) +MEXICO BAJA CAL N 8 H BEHIND UTC ABOVE 28TH PARALLAL APR 3 +MEXICO BAJA CAL N - OCT 29 +MEXICO BAJA CAL N 7 H BEHIND UTC ABOVE 28TH PARALLAL APR 3 +MEXICO BAJA CAL N - 0CT 29 +MEXICO 6 H BEHIND UTC STATES OF DURANGO, +MEXICO COAHUILA, NUEVO LEON, +MEXICO TAMAULIPAS +MEXICO 5 H BEHIND UTC STATES OF DURANGO, +MEXICO COAHUILA, NUEVO LEON, +MEXICO TAMAULIPAS APR 3 - OCT 29 +MEXICO 6 H BEHIND UTC GENERAL MEXICO, STATES OF +MEXICO CAMPECHE, QUINTANA ROO AND +MEXICO YUCATAN +MIDWAY ISLAND 11 H BEHIND UTC +MONACO 1 H AHEAD OF UTC +MONACO 2 H AHEAD OF UTC MAR 27 - SEP 24 +MONGOLIA 8 H AHEAD OF UTC +MONGOLIA 9 H AHEAD OF UTC MAR 27 - SEP 24 +MONTSERRAT 4 H BEHIND UTC +MOROCCO ON UTC +MOZAMBIQUE 2 H AHEAD OF UTC +NAMIBIA 2 H AHEAD OF UTC +NAURU, REP OF 12 H AHEAD OF UTC +NEPAL 5H45M AHEAD OF UTC +NETHERLANDS 1 H AHEAD OF UTC +NETHERLANDS 2 H AHEAD OF UTC MAR 27 - SEP 24 +NETHERLANDS 4 H BEHIND UTC ANTILLES AND SOUTHERN ST. +NETHERLANDS MAARTEN +NEW CALEDONIA 11 H AHEAD OF UTC +NEW HEBRIDES SEE VANUATU +NEW ZEALAND 12 H AHEAD OF UTC (EXCLUDING CHATHAM ISLAND) +NEW ZEALAND 13 H AHEAD OF UTC OCT 30, '88-MAR 4, '89 +NEW ZEALAND 12H45M AHEAD OF UTC CHATHAM ISLAND +NICARAGUA 6 H BEHIND UTC +NIGER 1 H AHEAD OF UTC +NIGERIA 1 H AHEAD OF UTC +NIUE ISLAND 11 H BEHIND UTC +NORFOLK ISLAND 11H30M AHEAD OF UTC +NORTHERN IRELAND ON UTC WALES, SCOTLAND, N.I., +NORTHERN IRELAND CH.IS. +NORTHERN IRELAND 1 H AHEAD OF UTC MAR 27 - OCT 22 +NORWAY 1 H AHEAD OF UTC +NORWAY 2 H AHEAD OF UTC MAR 27 - SEP 24 +OGO ON UTC +OMAN 4 H AHEAD OF UTC +PACIFIC ISLAND T.T. +PALAU ISLAND 9 H AHEAD OF UTC +PAKISTAN 5 H AHEAD OF UTC +PANAMA 5 H BEHIND UTC +PAPUA NEW GUINEA 10 H AHEAD OF UTC INCLUDING BOUGAINVILLE +PAPUA NEW GUINEA ISLAND +PARAGUAY 4 H BEHIND UTC +PARAGUAY 3 H BEHIND UTC OCT 1, '88-MAR 31, '89 +PERU 5 H BEHIND UTC +PHILIPPINES 8 H AHEAD OF UTC +PONAPE ISLAND 11 H AHEAD OF UTC +POLAND 1 H AHEAD OF UTC +POLAND 2 H AHEAD OF UTC MAR 27 - SEP 24 +PORTUGAL MAINLAND ON UTC +PORTUGAL MAINLAND 1 H AHEAD OF UTC MAR 27 - SEP 24 +PORTUGAL AZORES 1 H BEHIND UTC +PORTUGAL AZORES ON UTC MAR 27 - SEP 24 +PORTUGAL MADEIRA ON UTC +PORTUGAL MADEIRA 1 H AHEAD OF UTC MAR 27 - SEP 24 +PUERTO RICO 4 H BEHIND UTC +QATAR 3 H AHEAD OF UTC +ROMANIA 2 H AHEAD OF UTC +ROMANIA 3 H AHEAD OF UTC MAR 27 - SEP 24 +RUSSIA SEE USSR +RWANDA 2 H AHEAD OF UTC +SABA 4 H BEHIND UTC ALSO BONAIRE, CURACAO, +SAMOA 11 H BEHIND UTC +SAN MARINO 1 H AHEAD OF UTC +SAN MARINO 2 H AHEAD OF UTC MAR 27 - SEP 24 +SAN SALVADOR 6 H BEHIND UTC +SAO TOME ISLAND ON UTC AND PRINCIPE ISLAND +SAUDI ARABIA 3 H AHEAD OF UTC +SCOTLAND SEE ENGLAND +SENEGAL ON UTC +SEYCHELLES 4 H AHEAD OF UTC +SIERRA LEONE ON UTC +SINGAPORE 8 H AHEAD OF UTC +SOLOMON ISLANDS 11 H AHEAD OF UTC EXCLUDING BOUGAINVILLE +SOLOMON ISLANDS ISLAND +SOMALI 3 H AHEAD OF UTC +SOUTH AFRICA 2 H AHEAD OF UTC +SPAIN CANARY IS ON UTC +SPAIN CANARY IS 1 H AHEAD OF UTC MAR 27 - SEP 24 +SPAIN 1 H AHEAD OF UTC CONTINENTAL, BALEARIC AND +SPAIN MALLORCA ISLANDS +SPAIN 2 H AHEAD OF UTC CONTINENTAL, BALEARIC AND +SPAIN MALLORCA ISLANDS MAR 27 - +SPAIN SEP 24 +SPAIN MAINLAND 1 H AHEAD OF UTC MELILLA +SPAIN MAINLAND 2 H AHEAD OF UTC MAR 27 - SEP 24 +SRI LANKA 5H30M AHEAD OF UTC +ST.MAARTEN +ST.KITTS-NEVIS 4 H BEHIND UTC +ST.LUCIA 4 H BEHIND UTC +ST.PIERRE 3 H BEHIND UTC INCLUDING MIQUELON +ST.PIERRE 2 H BEHIND UTC INLCUDING MIQUELON APR 3 +ST.PIERRE - OCT 29 +ST.VINCENT 4 H BEHIND UTC INCLUDING THE GRENADINES +ST. HELENA ON UTC +SURINAME 3 H BEHIND UTC +SWAZILAND 2 H AHEAD OF UTC +SWEDEN 1 H AHEAD OF UTC +SWEDEN 2 H AHEAD OF UTC MAR 27 - SEP 24 +SWITZERLAND 1 H AHEAD OF UTC +SWITZERLAND 2 H AHEAD OF UTC MAR 27 - SEP 24 +SYRIA 2 H AHEAD OF UTC +SYRIA 3 H AHEAD OF UTC MAR 15 - OCT 30 +TAHITI 10 H BEHIND UTC +TANZANIA 3 H AHEAD OF UTC +THAILAND 7 H AHEAD OF UTC +TRINIDAD / TOBAGO 4 H BEHIND UTC +TUNISIA 1 H AHEAD OF UTC +TUNISIA 2 H AHEAD OF UTC APR 10 - SEP 24 +TURKEY 2 H AHEAD OF UTC +TURKEY 3 H AHEAD OF UTC MAR 27 - SEP 24 +TURKS AND CAICOS 5 H BEHIND UTC +TURKS AND CAICOS 4 H BEHIND UTC APR 3 - OCT 29 +TUVALU 12 H AHEAD OF UTC +UDAN 2 H AHEAD OF UTC +UGANDA 3 H AHEAD OF UTC +UNITED ARAB EMIR. 4 H AHEAD OF UTC ABU DHABI, DUBAI, SHARJAH, +UNITED ARAB EMIR RAS AL KHAIMAH +UNITED KINGDOM ON UTC WALES, SCOTLAND, N.I., CH. +UNITED KINGDOM IS. +UNITED KINGDOM 1 H AHEAD OF UTC MAR 27 - OCT 22 +UNITED STATES SEE USA +UPPER VOLTA ON UTC +URUGUAY 3 H BEHIND UTC +URUGUAY 2 H BEHIND UTC DEC 11, '88-FEB 25, '89 +URAGUAY (ESTIMATED) +USA EASTERN 5 H BEHIND UTC NEW YORK, WASHINGTON +USA EASTERN 4 H BEHIND UTC APR 3 - OCT 30 +USA CENTRAL 6 H BEHIND UTC CHICAGO, HOUSTON +USA CENTRAL 5 H BEHIND UTC APR 3 - OCT 30 +USA MOUNTAIN 7 H BEHIND UTC DENVER +USA MOUNTAIN 6 H BEHIND UTC APR 3 - OCT 30 +USA PACIFIC 8 H BEHIND UTC L.A., SAN FRANCISCO +USA PACIFIC 7 H BEHIND UTC APR 3 - OCT 30 +USA ALASKA STD 9 H BEHIND UTC MOST OF ALASKA (AKST) +USA ALASKA STD 8 H BEHIND UTC APR 3 - OCT 30 (AKDT) +USA ALEUTIAN 10 H BEHIND UTC ISLANDS WEST OF 170W +USA - " - 9 H BEHIND UTC APR 3 - OCT 30 +USA HAWAII 10 H BEHIND UTC +USA BERING 11 H BEHIND UTC SAMOA, MIDWAY +USA FOR SPECIFIC INFO ON USA ZONES/TIMES CALL DOT 202-426-4520 +USSR WEST EUROP 3 H AHEAD OF UTC LENINGRAD, MOSCOW +USSR WEST EUROP 4 H AHEAD OF UTC APR 1 - SEP 30 +USSR CENTRAL EUR 4 H AHEAD OF UTC ROSTOV, BAKU +USSR CENTRAL EUR 5 H AHEAD OF UTC APR 1 - SEP 30 +USSR EAST EUROP 5 H AHEAD OF UTC SVERDLOVSK +USSR EAST EUROP 6 H AHEAD OF UTC APR 1 - SEP 30 +USSR WEST SIBERIAN 6 H AHEAD OF UTC TASHKENT, ALMA ATA +USSR WEST SIBERIAN 7 H AHEAD OF UTC APR 1 - SEP 30 +USSR WEST-CENTRAL 7 H AHEAD OF UTC NOVOSIBIRSK +USSR WEST-CENTRAL 8 H AHEAD OF UTC APR 1 - SEP 30 +USSR WEST-CENTRAL 8 H AHEAD OF UTC IRKUTSK +USSR WEST-CENTRAL 9 H AHEAD OF UTC APR 1 - SEP 30 +USSR CENTRAL SIB 9 H AHEAD OF UTC YAKUTSK +USSR CENTRAL SIB 10 H AHEAD OF UTC APR 1 - SEP 30 +USSR CENTRAL SIB 10 H AHEAD OF UTC VLADIVOSTOK +USSR CENTRAL SIB 11 H AHEAD OF UTC APR 1 - SEP 30 +USSR EAST SIBERIA 11 H AHEAD OF UTC MAGADAN +USSR EAST SIBERIA 12 H AHEAD OF UTC APR 1 - SEP 30 +USSR EAST SIBERIA 12 H AHEAD OF UTC PETROPAVLOVSK +USSR EAST SIBERIA 13 H AHEAD OF UTC APR 1 - SEP 30 +USSR EAST SIBERIA 13 H AHEAD OF UTC UELEN +USSR EAST SIBERIA 14 H AHEAD OF UTC APR 1 - SEP 30 +VANUATU 11 H AHEAD OF UTC (NEW HEBRIDES) +VANUATU 12 H AHEAD OF UTC SEP 25, '88-MAR 25, '89 +VANUATU (ESTIMATED) +VATICAN 1 H AHEAD OF UTC +VATICAN 2 H AHEAD OF UTC MAR 27 - SEP 24 +VIETNAM 7 H AHEAD OF UTC +VIRGIN ISLANDS 4 H BEHIND UTC ST.CROIX, ST.THOMAS, +VIRGIN ISLANDS ST.JOHN +WAKE ISLAND 12 H AHEAD OF UTC +WALES SEE ENGLAND +WALLIS/FUTUNA IS. 12 H AHEAD OF UTC +WINDWARD ISLANDS 4 H BEHIND UTC GRENADA, ST. LUCIA +YEMEN 3 H AHEAD OF UTC BOTH REPUBLICS +YUGOSLAVIA 1 H AHEAD OF UTC +YUGOSLAVIA 2 H AHEAD OF UTC MAR 27 - SEP 24 +ZAIRE EAST 1 H AHEAD OF UTC KINSHASA MBANDAKA +ZAIRE WEST 2 H AHEAD OF UTC LUBUMBASHI, KASAI, KIVU, +ZAIRE WEST HAUT-ZAIRE, SHABA +ZAMBIA 2 H AHEAD OF UTC +ZIMBABWE 2 H AHEAD OF UTC diff --git a/share/zoneinfo/ialloc.c b/share/zoneinfo/ialloc.c new file mode 100644 index 0000000..118a97b --- /dev/null +++ b/share/zoneinfo/ialloc.c @@ -0,0 +1,140 @@ +/*- + * Copyright (c) 1991, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Arthur David Olson of the National Cancer Institute. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +static char sccsid[] = "@(#)ialloc.c 8.1 (Berkeley) 6/8/93"; +#endif /* not lint */ + +#ifdef notdef +static char elsieid[] = "@(#)ialloc.c 8.18"; +#endif + +/*LINTLIBRARY*/ + +#include <string.h> +#include <stdlib.h> + +#ifdef MAL +#define NULLMAL(x) ((x) == NULL || (x) == MAL) +#else /* !defined MAL */ +#define NULLMAL(x) ((x) == NULL) +#endif /* !defined MAL */ + +#define nonzero(n) (((n) == 0) ? 1 : (n)) + +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)); +char * irealloc __P((char * pointer, int size)); +void ifree __P((char * pointer)); + +char * +imalloc(n) +const int n; +{ +#ifdef MAL + register char * result; + + result = malloc((size_t) nonzero(n)); + return NULLMAL(result) ? NULL : result; +#else /* !defined MAL */ + return malloc((size_t) nonzero(n)); +#endif /* !defined MAL */ +} + +char * +icalloc(nelem, elsize) +int nelem; +int elsize; +{ + if (nelem == 0 || elsize == 0) + nelem = elsize = 1; + return calloc((size_t) nelem, (size_t) elsize); +} + +char * +irealloc(pointer, size) +char * const pointer; +const int size; +{ + if (NULLMAL(pointer)) + return imalloc(size); + return realloc((void *) pointer, (size_t) nonzero(size)); +} + +char * +icatalloc(old, new) +char * const old; +const char * const new; +{ + register char * result; + register oldsize, newsize; + + newsize = NULLMAL(new) ? 0 : strlen(new); + if (NULLMAL(old)) + oldsize = 0; + else if (newsize == 0) + return old; + else oldsize = strlen(old); + if ((result = irealloc(old, oldsize + newsize + 1)) != NULL) + if (!NULLMAL(new)) + (void) strcpy(result + oldsize, new); + return result; +} + +char * +icpyalloc(string) +const char * const string; +{ + return icatalloc((char *) NULL, string); +} + +void +ifree(p) +char * const p; +{ + if (!NULLMAL(p)) + (void) free(p); +} + +void +icfree(p) +char * const p; +{ + if (!NULLMAL(p)) + (void) free(p); +} diff --git a/share/zoneinfo/scheck.c b/share/zoneinfo/scheck.c new file mode 100644 index 0000000..44a7c3c --- /dev/null +++ b/share/zoneinfo/scheck.c @@ -0,0 +1,99 @@ +/*- + * Copyright (c) 1991, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Arthur David Olson of the National Cancer Institute. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +static char sccsid[] = "@(#)scheck.c 8.1 (Berkeley) 6/8/93"; +#endif /* not lint */ + +#ifdef notdef +static char elsieid[] = "@(#)scheck.c 8.9"; +#endif + +/*LINTLIBRARY*/ + +#include <stdio.h> +#include <ctype.h> +#include <string.h> +#include <stdlib.h> + +char * +scheck(string, format) +const char * const string; +const char * const format; +{ + register char * fbuf; + register const char * fp; + register char * tp; + register int c; + register char * result; + char dummy; + + result = ""; + if (string == NULL || format == NULL) + return result; + fbuf = malloc(2 * strlen(format) + 4); + if (fbuf == NULL) + return result; + fp = format; + tp = fbuf; + while ((*tp++ = c = *fp++) != '\0') { + if (c != '%') + continue; + if (*fp == '%') { + *tp++ = *fp++; + continue; + } + *tp++ = '*'; + if (*fp == '*') + ++fp; + while (isascii(*fp) && isdigit(*fp)) + *tp++ = *fp++; + if (*fp == 'l' || *fp == 'h') + *tp++ = *fp++; + else if (*fp == '[') + do *tp++ = *fp++; + while (*fp != '\0' && *fp != ']'); + if ((*tp++ = *fp++) == '\0') + break; + } + *(tp - 1) = '%'; + *tp++ = 'c'; + *tp = '\0'; + if (sscanf((char *)string, fbuf, &dummy) != 1) + result = (char *) format; + ifree(fbuf); + return result; +} diff --git a/share/zoneinfo/tzfile.5 b/share/zoneinfo/tzfile.5 new file mode 100644 index 0000000..07842cf --- /dev/null +++ b/share/zoneinfo/tzfile.5 @@ -0,0 +1,162 @@ +.\" Copyright (c) 1991, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" This code is derived from software contributed to Berkeley by +.\" Arthur David Olson of the National Cancer Institute. +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)tzfile.5 8.1 (Berkeley) 6/8/93 +.\" +.Dd June 8, 1993 +.Dt TZFILE 5 +.Os +.Sh NAME +.Nm tzfile +.Nd time zone information +.Sh SYNOPSIS +.Fd #include <tzfile.h> +.Sh DESCRIPTION +The time zone information files used by +.Xr tzset 3 +begin with bytes reserved for future use, +followed by four four-byte values of type +.Em long , +written in a ``standard'' byte order +(the high-order byte of the value is written first). +These values are, +in order: +.Bl -tag -width tzh_ttisstdcnt +.It Fa tzh_ttisstdcnt +The number of standard/wall indicators stored in the file. +.It Fa tzh_leapcnt +The number of leap seconds for which data is stored in the file. +.It Fa tzh_timecnt +The number of "transition times" for which data is stored +in the file. +.It Fa tzh_typecnt +The number of "local time types" for which data is stored +in the file (must not be zero). +.It Fa tzh_charcnt +The number of characters of "time zone abbreviation strings" +stored in the file. +.El +.Pp +The above header is followed by +.Fa tzh_timecnt +four-byte values of type +.Em long , +sorted in ascending order. +These values are written in ``standard'' byte order. +Each is used as a transition time (as returned by +.Xr time 2 ) +at which the rules for computing local time change. +Next come +.Fa tzh_timecnt +one-byte values of type +.Fa unsigned char ; +each one tells which of the different types of ``local time'' types +described in the file is associated with the same-indexed transition time. +These values serve as indices into an array of +.Fa ttinfo +structures that appears next in the file; +these structures are defined as follows: +.Bd -literal -offset indent +struct ttinfo { + long tt_gmtoff; + int tt_isdst; + unsigned int tt_abbrind; +}; +.Ed +.Pp +Each structure is written as a four-byte value for +.Fa tt_gmtoff +of type +.Em long , +in a standard byte order, followed by a one-byte value for +.Fa tt_isdst +and a one-byte value for +.Fa tt_abbrind . +In each structure, +.Fa tt_gmtoff +gives the number of seconds to be added to +.Tn GMT , +.Fa tt_isdst +tells whether +.Fa tm_isdst +should be set by +.Xr localtime 3 +and +.Fa tt_abbrind +serves as an index into the array of time zone abbreviation characters +that follow the +.Fa ttinfo +structure(s) in the file. +.Pp +Then there are +.Fa tzh_leapcnt +pairs of four-byte values, written in standard byte order; +the first value of each pair gives the time +(as returned by +.Xr time 2 ) +at which a leap second occurs; +the second gives the +.Em total +number of leap seconds to be applied after the given time. +The pairs of values are sorted in ascending order by time. +.Pp +Finally there are +.Fa tzh_ttisstdcnt +standard/wall indicators, each stored as a one-byte value; +they tell whether the transition times associated with local time types +were specified as standard time or wall clock time, +and are used when a time zone file is used in handling +.Tn POSIX Ns -style +time zone environment variables. +.Pp +.Fa Localtime +uses the first standard-time +.Fa ttinfo +structure in the file +(or simply the first +.Fa ttinfo +structure in the absence of a standard-time structure) +if either +.Fa tzh_timecnt +is zero or the time argument is less than the first transition time recorded +in the file. +.Sh SEE ALSO +.Xr ctime 3 +.Sh HISTORY +The +.Nm tzfile +file format appeared in +.Bx 4.3 tahoe. diff --git a/share/zoneinfo/zic.8 b/share/zoneinfo/zic.8 new file mode 100644 index 0000000..66191c0 --- /dev/null +++ b/share/zoneinfo/zic.8 @@ -0,0 +1,424 @@ +.\" Copyright (c) 1991, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" This code is derived from software contributed to Berkeley by +.\" Arthur David Olson of the National Cancer Institute. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)zic.8 8.1 (Berkeley) 6/8/93 +.\" +.TH ZIC 8 +.SH NAME +zic \- time zone compiler +.SH SYNOPSIS +.B zic +[ +.B \-v +] [ +.B \-d +.I directory +] [ +.B \-l +.I localtime +] [ +.B \-p +.I posixrules +] [ +.B \-L +.I leapsecondfilename +] [ +.B \-s +] [ +.I filename +\&... ] +.SH DESCRIPTION +.if t .ds lq `` +.if t .ds rq '' +.if n .ds lq \&"\" +.if n .ds rq \&"\" +.de q +\\$3\*(lq\\$1\*(rq\\$2 +.. +.I Zic +reads text from the file(s) named on the command line +and creates the time conversion information files specified in this input. +If a +.I filename +is +.BR \- , +the standard input is read. +.PP +These options are available: +.TP +.BI "\-d " directory +Create time conversion information files in the named directory rather than +in the standard directory named below. +.TP +.BI "\-l " timezone +Use the given time zone as local time. +.I Zic +will act as if the input contained a link line of the form +.sp +.ti +.5i +Link \fItimezone\fP localtime +.TP +.BI "\-p " timezone +Use the given time zone's rules when handling POSIX-format +time zone environment variables. +.I Zic +will act as if the input contained a link line of the form +.sp +.ti +.5i +Link \fItimezone\fP posixrules +.TP +.BI "\-L " leapsecondfilename +Read leap second information from the file with the given name. +If this option is not used, +no leap second information appears in output files. +.TP +.B \-v +Complain if a year that appears in a data file is outside the range +of years representable by +.IR time (2) +values. +.TP +.B \-s +Limit time values stored in output files to values that are the same +whether they're taken to be signed or unsigned. +You can use this option to generate SVVS-compatible files. +.sp +Input lines are made up of fields. +Fields are separated from one another by any number of white space characters. +Leading and trailing white space on input lines is ignored. +An unquoted sharp character (#) in the input introduces a comment which extends +to the end of the line the sharp character appears on. +White space characters and sharp characters may be enclosed in double quotes +(") if they're to be used as part of a field. +Any line that is blank (after comment stripping) is ignored. +Non-blank lines are expected to be of one of three types: +rule lines, zone lines, and link lines. +.PP +A rule line has the form +.nf +.B +.ti +.5i +.ta \w'Rule\0\0'u +\w'NAME\0\0'u +\w'FROM\0\0'u +\w'1973\0\0'u +\w'TYPE\0\0'u +\w'Apr\0\0'u +\w'lastSun\0\0'u +\w'2:00\0\0'u +\w'SAVE\0\0'u +.sp +Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +.sp +For example: +.ti +.5i +.sp +Rule USA 1969 1973 \- Apr lastSun 2:00 1:00 D +.sp +.fi +The fields that make up a rule line are: +.TP "\w'LETTER/S'u" +.B NAME +Gives the (arbitrary) name of the set of rules this rule is part of. +.TP +.B FROM +Gives the first year in which the rule applies. +The word +.B minimum +(or an abbreviation) means the minimum year with a representable time value. +The word +.B maximum +(or an abbreviation) means the maximum year with a representable time value. +.TP +.B TO +Gives the final year in which the rule applies. +In addition to +.B minimum +and +.B maximum +(as above), +the word +.B only +(or an abbreviation) +may be used to repeat the value of the +.B FROM +field. +.TP +.B TYPE +Gives the type of year in which the rule applies. +If +.B TYPE +is +.B \- +then the rule applies in all years between +.B FROM +and +.B TO +inclusive; +if +.B TYPE +is +.BR uspres , +the rule applies in U.S. Presidential election years; +if +.B TYPE +is +.BR nonpres , +the rule applies in years other than U.S. Presidential election years. +If +.B TYPE +is something else, then +.I zic +executes the command +.ti +.5i +\fByearistype\fP \fIyear\fP \fItype\fP +.br +to check the type of a year: +an exit status of zero is taken to mean that the year is of the given type; +an exit status of one is taken to mean that the year is not of the given type. +.TP +.B IN +Names the month in which the rule takes effect. +Month names may be abbreviated. +.TP +.B ON +Gives the day on which the rule takes effect. +Recognized forms include: +.nf +.in +.5i +.sp +.ta \w'Sun<=25\0\0'u +5 the fifth of the month +lastSun the last Sunday in the month +lastMon the last Monday in the month +Sun>=8 first Sunday on or after the eighth +Sun<=25 last Sunday on or before the 25th +.fi +.in -.5i +.sp +Names of days of the week may be abbreviated or spelled out in full. +Note that there must be no spaces within the +.B ON +field. +.TP +.B AT +Gives the time of day at which the rule takes effect. +Recognized forms include: +.nf +.in +.5i +.sp +.ta \w'1:28:13\0\0'u +2 time in hours +2:00 time in hours and minutes +15:00 24-hour format time (for times after noon) +1:28:14 time in hours, minutes, and seconds +.fi +.in -.5i +.sp +Any of these forms may be followed by the letter +.B w +if the given time is local +.q "wall clock" +time or +.B s +if the given time is local +.q standard +time; in the absence of +.B w +or +.BR s , +wall clock time is assumed. +.TP +.B SAVE +Gives the amount of time to be added to local standard time when the rule is in +effect. +This field has the same format as the +.B AT +field +(although, of course, the +.B w +and +.B s +suffixes are not used). +.TP +.B LETTER/S +Gives the +.q "variable part" +(for example, the +.q S +or +.q D +in +.q EST +or +.q EDT ) +of time zone abbreviations to be used when this rule is in effect. +If this field is +.BR \- , +the variable part is null. +.PP +A zone line has the form +.sp +.nf +.ti +.5i +.ta \w'Zone\0\0'u +\w'Australia/South\-west\0\0'u +\w'GMTOFF\0\0'u +\w'RULES/SAVE\0\0'u +\w'FORMAT\0\0'u +Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +.sp +For example: +.sp +.ti +.5i +Zone Australia/South\-west 9:30 Aus CST 1987 Mar 15 2:00 +.sp +.fi +The fields that make up a zone line are: +.TP "\w'GMTOFF'u" +.B NAME +The name of the time zone. +This is the name used in creating the time conversion information file for the +zone. +.TP +.B GMTOFF +The amount of time to add to GMT to get standard time in this zone. +This field has the same format as the +.B AT +and +.B SAVE +fields of rule lines; +begin the field with a minus sign if time must be subtracted from GMT. +.TP +.B RULES/SAVE +The name of the rule(s) that apply in the time zone or, +alternately, an amount of time to add to local standard time. +If this field is +.B \- +then standard time always applies in the time zone. +.TP +.B FORMAT +The format for time zone abbreviations in this time zone. +The pair of characters +.B %s +is used to show where the +.q "variable part" +of the time zone abbreviation goes. +.TP +.B UNTIL +The time at which the GMT offset or the rule(s) change for a location. +It is specified as a year, a month, a day, and a time of day. +If this is specified, +the time zone information is generated from the given GMT offset +and rule change until the time specified. +.IP +The next line must be a +.q continuation +line; this has the same form as a zone line except that the +string +.q Zone +and the name are omitted, as the continuation line will +place information starting at the time specified as the +.B UNTIL +field in the previous line in the file used by the previous line. +Continuation lines may contain an +.B UNTIL +field, just as zone lines do, indicating that the next line is a further +continuation. +.PP +A link line has the form +.sp +.nf +.ti +.5i +.if t .ta \w'Link\0\0'u +\w'LINK-FROM\0\0'u +.if n .ta \w'Link\0\0'u +\w'US/Eastern\0\0'u +Link LINK-FROM LINK-TO +.sp +For example: +.sp +.ti +.5i +Link US/Eastern EST5EDT +.sp +.fi +The +.B LINK-FROM +field should appear as the +.B NAME +field in some zone line; +the +.B LINK-TO +field is used as an alternate name for that zone. +.PP +Except for continuation lines, +lines may appear in any order in the input. +.PP +Lines in the file that describes leap seconds have the following form: +.nf +.B +.ti +.5i +.ta \w'Leap\0\0'u +\w'YEAR\0\0'u +\w'MONTH\0\0'u +\w'DAY\0\0'u +\w'HH:MM:SS\0\0'u +\w'CORR\0\0'u +Leap YEAR MONTH DAY HH:MM:SS CORR R/S +.sp +For example: +.ti +.5i +.sp +Leap 1974 Dec 31 23:59:60 + S +.sp +.fi +The +.BR YEAR , +.BR MONTH , +.BR DAY , +and +.B HH:MM:SS +fields tell when the leap second happened. +The +.B CORR +field +should be +.q + +if a second was added +or +.q - +if a second was skipped. +The +.B R/S +field +should be (an abbreviation of) +.q Stationary +if the leap second time given by the other fields should be interpreted as GMT +or +(an abbreviation of) +.q Rolling +if the leap second time given by the other fields should be interpreted as +local wall clock time. +.SH NOTE +For areas with more than two types of local time, +you may need to use local standard time in the +.B AT +field of the earliest transition time's rule to ensure that +the earliest transition time recorded in the compiled file is correct. +.SH FILE +/etc/zoneinfo standard directory used for created files +.SH "SEE ALSO" +newctime(3), tzfile(5), zdump(8) +.. @(#)zic.8 4.4 diff --git a/share/zoneinfo/zic.c b/share/zoneinfo/zic.c new file mode 100644 index 0000000..8d80e63 --- /dev/null +++ b/share/zoneinfo/zic.c @@ -0,0 +1,1892 @@ +/*- + * Copyright (c) 1991, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Arthur David Olson of the National Cancer Institute. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +static char sccsid[] = "@(#)zic.c 8.1 (Berkeley) 7/19/93"; +#endif /* not lint */ + +#ifdef notdef +static char elsieid[] = "@(#)zic.c 4.12"; +#endif + +#include <sys/types.h> +#include <sys/cdefs.h> +#include <sys/stat.h> +#include <time.h> +#include <tzfile.h> +#include <stdio.h> +#include <ctype.h> +#include <string.h> +#include <stdlib.h> + +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif /* !defined TRUE */ + +struct rule { + const char * r_filename; + int r_linenum; + const char * r_name; + + int r_loyear; /* for example, 1986 */ + int r_hiyear; /* for example, 1986 */ + const char * r_yrtype; + + int r_month; /* 0..11 */ + + int r_dycode; /* see below */ + int r_dayofmonth; + int r_wday; + + long r_tod; /* time from midnight */ + int r_todisstd; /* above is standard time if TRUE */ + /* or wall clock time if FALSE */ + long r_stdoff; /* offset from standard time */ + const char * r_abbrvar; /* variable part of abbreviation */ + + int r_todo; /* a rule to do (used in outzone) */ + time_t r_temp; /* used in outzone */ +}; + +/* +** r_dycode r_dayofmonth r_wday +*/ + +#define DC_DOM 0 /* 1..31 */ /* unused */ +#define DC_DOWGEQ 1 /* 1..31 */ /* 0..6 (Sun..Sat) */ +#define DC_DOWLEQ 2 /* 1..31 */ /* 0..6 (Sun..Sat) */ + +struct zone { + const char * z_filename; + int z_linenum; + + const char * z_name; + long z_gmtoff; + const char * z_rule; + const char * z_format; + + long z_stdoff; + + struct rule * z_rules; + int z_nrules; + + struct rule z_untilrule; + time_t z_untiltime; +}; + +extern char * icatalloc __P((char * old, const char * new)); +extern char * icpyalloc __P((const char * string)); +extern void ifree __P((char * p)); +extern char * imalloc __P((int n)); +extern char * irealloc __P((char * old, int n)); +extern int link __P((const char * fromname, const char * toname)); +extern char * optarg; +extern int optind; +extern void perror __P((const char * string)); +extern char * scheck __P((const char * string, const char * format)); +static void addtt __P((time_t starttime, int type)); +static int addtype + __P((long gmtoff, const char * abbr, int isdst, + int ttisstd)); +static void addleap __P((time_t t, int positive, int rolling)); +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 dolink __P((const char * fromfile, const char * tofile)); +static void eat __P((const char * name, int num)); +static void eats __P((const char * name, int num, + const char * rname, int rnum)); +static long eitol __P((int i)); +static void error __P((const char * message)); +static char ** getfields __P((char * buf)); +static long gethms __P((char * string, const char * errstrng, + int signable)); +static void infile __P((const char * filename)); +static void inleap __P((char ** fields, int nfields)); +static void inlink __P((char ** fields, int nfields)); +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 itsabbr __P((const char * abbr, const char * word)); +static int itsdir __P((const char * name)); +static int lowerit __P((int c)); +static char * memcheck __P((char * tocheck)); +static int mkdirs __P((char * filename)); +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 int rcomp __P((const void *leftp, const void *rightp)); +static time_t rpytime __P((const struct rule * rp, int wantedy)); +static void rulesub __P((struct rule * rp, char * loyearp, char * hiyearp, + char * typep, char * monthp, char * dayp, char * timep)); +static void setboundaries __P((void)); +static time_t tadd __P((time_t t1, long t2)); +static void usage __P((void)); +static void writezone __P((const char * name)); +static int yearistype __P((int year, const char * type)); + +static int charcnt; +static int errors; +static const char * filename; +static int leapcnt; +static int linenum; +static time_t max_time; +static int max_year; +static time_t min_time; +static int min_year; +static int noise; +static const char * rfilename; +static int rlinenum; +static const char * progname; +static int timecnt; +static int typecnt; +static int tt_signed; + +/* +** Line codes. +*/ + +#define LC_RULE 0 +#define LC_ZONE 1 +#define LC_LINK 2 +#define LC_LEAP 3 + +/* +** Which fields are which on a Zone line. +*/ + +#define ZF_NAME 1 +#define ZF_GMTOFF 2 +#define ZF_RULE 3 +#define ZF_FORMAT 4 +#define ZF_TILYEAR 5 +#define ZF_TILMONTH 6 +#define ZF_TILDAY 7 +#define ZF_TILTIME 8 +#define ZONE_MINFIELDS 5 +#define ZONE_MAXFIELDS 9 + +/* +** Which fields are which on a Zone continuation line. +*/ + +#define ZFC_GMTOFF 0 +#define ZFC_RULE 1 +#define ZFC_FORMAT 2 +#define ZFC_TILYEAR 3 +#define ZFC_TILMONTH 4 +#define ZFC_TILDAY 5 +#define ZFC_TILTIME 6 +#define ZONEC_MINFIELDS 3 +#define ZONEC_MAXFIELDS 7 + +/* +** Which files are which on a Rule line. +*/ + +#define RF_NAME 1 +#define RF_LOYEAR 2 +#define RF_HIYEAR 3 +#define RF_COMMAND 4 +#define RF_MONTH 5 +#define RF_DAY 6 +#define RF_TOD 7 +#define RF_STDOFF 8 +#define RF_ABBRVAR 9 +#define RULE_FIELDS 10 + +/* +** Which fields are which on a Link line. +*/ + +#define LF_FROM 1 +#define LF_TO 2 +#define LINK_FIELDS 3 + +/* +** Which fields are which on a Leap line. +*/ + +#define LP_YEAR 1 +#define LP_MONTH 2 +#define LP_DAY 3 +#define LP_TIME 4 +#define LP_CORR 5 +#define LP_ROLL 6 +#define LEAP_FIELDS 7 + +/* +** Year synonyms. +*/ + +#define YR_MINIMUM 0 +#define YR_MAXIMUM 1 +#define YR_ONLY 2 + +static struct rule * rules; +static int nrules; /* number of rules */ + +static struct zone * zones; +static int nzones; /* number of zones */ + +struct link { + const char * l_filename; + int l_linenum; + const char * l_from; + const char * l_to; +}; + +static struct link * links; +static int nlinks; + +struct lookup { + const char * l_word; + const int l_value; +}; + +static struct lookup const * byword __P((const char * string, + const struct lookup * lp)); + +static struct lookup const line_codes[] = { + "Rule", LC_RULE, + "Zone", LC_ZONE, + "Link", LC_LINK, + "Leap", LC_LEAP, + NULL, 0 +}; + +static struct lookup const mon_names[] = { + "January", TM_JANUARY, + "February", TM_FEBRUARY, + "March", TM_MARCH, + "April", TM_APRIL, + "May", TM_MAY, + "June", TM_JUNE, + "July", TM_JULY, + "August", TM_AUGUST, + "September", TM_SEPTEMBER, + "October", TM_OCTOBER, + "November", TM_NOVEMBER, + "December", TM_DECEMBER, + NULL, 0 +}; + +static struct lookup const wday_names[] = { + "Sunday", TM_SUNDAY, + "Monday", TM_MONDAY, + "Tuesday", TM_TUESDAY, + "Wednesday", TM_WEDNESDAY, + "Thursday", TM_THURSDAY, + "Friday", TM_FRIDAY, + "Saturday", TM_SATURDAY, + NULL, 0 +}; + +static struct lookup const lasts[] = { + "last-Sunday", TM_SUNDAY, + "last-Monday", TM_MONDAY, + "last-Tuesday", TM_TUESDAY, + "last-Wednesday", TM_WEDNESDAY, + "last-Thursday", TM_THURSDAY, + "last-Friday", TM_FRIDAY, + "last-Saturday", TM_SATURDAY, + NULL, 0 +}; + +static struct lookup const begin_years[] = { + "minimum", YR_MINIMUM, + "maximum", YR_MAXIMUM, + NULL, 0 +}; + +static struct lookup const end_years[] = { + "minimum", YR_MINIMUM, + "maximum", YR_MAXIMUM, + "only", YR_ONLY, + NULL, 0 +}; + +static struct lookup const leap_types[] = { + "Rolling", TRUE, + "Stationary", FALSE, + NULL, 0 +}; + +static const int len_months[2][MONSPERYEAR] = { + 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, + 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 +}; + +static const int len_years[2] = { + DAYSPERNYEAR, DAYSPERLYEAR +}; + +static time_t ats[TZ_MAX_TIMES]; +static unsigned char types[TZ_MAX_TIMES]; +static long gmtoffs[TZ_MAX_TYPES]; +static char isdsts[TZ_MAX_TYPES]; +static char abbrinds[TZ_MAX_TYPES]; +static char ttisstds[TZ_MAX_TYPES]; +static char chars[TZ_MAX_CHARS]; +static time_t trans[TZ_MAX_LEAPS]; +static long corr[TZ_MAX_LEAPS]; +static char roll[TZ_MAX_LEAPS]; + +/* +** Memory allocation. +*/ + +static char * +memcheck(ptr) +char * const ptr; +{ + if (ptr == NULL) { + (void) perror(progname); + (void) exit(EXIT_FAILURE); + } + return ptr; +} + +#define emalloc(size) memcheck(imalloc(size)) +#define erealloc(ptr, size) memcheck(irealloc(ptr, size)) +#define ecpyalloc(ptr) memcheck(icpyalloc(ptr)) +#define ecatalloc(oldp, newp) memcheck(icatalloc(oldp, newp)) + +/* +** Error handling. +*/ + +static void +eats(name, num, rname, rnum) +const char * const name; +const int num; +const char * const rname; +const int rnum; +{ + filename = name; + linenum = num; + rfilename = rname; + rlinenum = rnum; +} + +static void +eat(name, num) +const char * const name; +const int num; +{ + eats(name, num, (char *) NULL, -1); +} + +static void +error(string) +const char * const string; +{ + /* + ** Match the format of "cc" to allow sh users to + ** zic ... 2>&1 | error -t "*" -v + ** on BSD systems. + */ + (void) fprintf(stderr, "\"%s\", line %d: %s", + filename, linenum, string); + if (rfilename != NULL) + (void) fprintf(stderr, " (rule from \"%s\", line %d)", + rfilename, rlinenum); + (void) fprintf(stderr, "\n"); + ++errors; +} + +static void +usage() +{ + (void) fprintf(stderr, +"%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d directory ]\n\ +\t[ -L leapseconds ] [ filename ... ]\n", + progname, progname); + (void) exit(EXIT_FAILURE); +} + +static const char * psxrules = NULL; +static const char * lcltime = NULL; +static const char * directory = NULL; +static const char * leapsec = NULL; +static int sflag = FALSE; + +int +main(argc, argv) +int argc; +char * argv[]; +{ + register int i, j; + register int c; + + (void) umask(umask(022) | 022); + progname = argv[0]; + while ((c = getopt(argc, argv, "d:l:p:L:vs")) != EOF) + switch (c) { + default: + usage(); + case 'd': + if (directory == NULL) + directory = optarg; + else { + (void) fprintf(stderr, +"%s: More than one -d option specified\n", + progname); + (void) exit(EXIT_FAILURE); + } + break; + case 'l': + if (lcltime == NULL) + lcltime = optarg; + else { + (void) fprintf(stderr, +"%s: More than one -l option specified\n", + progname); + (void) exit(EXIT_FAILURE); + } + break; + case 'p': + if (psxrules == NULL) + psxrules = optarg; + else { + (void) fprintf(stderr, +"%s: More than one -p option specified\n", + progname); + (void) exit(EXIT_FAILURE); + } + break; + case 'L': + if (leapsec == NULL) + leapsec = optarg; + else { + (void) fprintf(stderr, +"%s: More than one -L option specified\n", + progname); + (void) exit(EXIT_FAILURE); + } + break; + case 'v': + noise = TRUE; + break; + case 's': + sflag = TRUE; + break; + } + if (optind == argc - 1 && strcmp(argv[optind], "=") == 0) + usage(); /* usage message by request */ + if (directory == NULL) + directory = TZDIR; + + setboundaries(); + + if (optind < argc && leapsec != NULL) { + infile(leapsec); + adjleap(); + } + + zones = (struct zone *) emalloc(0); + rules = (struct rule *) emalloc(0); + links = (struct link *) emalloc(0); + for (i = optind; i < argc; ++i) + infile(argv[i]); + if (errors) + (void) exit(EXIT_FAILURE); + associate(); + for (i = 0; i < nzones; i = j) { + /* + ** Find the next non-continuation zone entry. + */ + for (j = i + 1; j < nzones && zones[j].z_name == NULL; ++j) + ; + outzone(&zones[i], j - i); + } + /* + ** Make links. + */ + for (i = 0; i < nlinks; ++i) + dolink(links[i].l_from, links[i].l_to); + if (lcltime != NULL) + dolink(lcltime, TZDEFAULT); + if (psxrules != NULL) + dolink(psxrules, TZDEFRULES); + return (errors == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +} + +static void +dolink(fromfile, tofile) +const char * const fromfile; +const char * const tofile; +{ + register char * fromname; + register char * toname; + + fromname = ecpyalloc(directory); + fromname = ecatalloc(fromname, "/"); + fromname = ecatalloc(fromname, fromfile); + toname = ecpyalloc(directory); + toname = ecatalloc(toname, "/"); + toname = ecatalloc(toname, tofile); + /* + ** We get to be careful here since + ** there's a fair chance of root running us. + */ + if (!itsdir(toname)) + (void) remove(toname); + if (link(fromname, toname) != 0) { + (void) fprintf(stderr, "%s: Can't link from %s to ", + progname, fromname); + (void) perror(toname); + (void) exit(EXIT_FAILURE); + } + ifree(fromname); + ifree(toname); +} + +static void +setboundaries() +{ + register time_t bit; + + for (bit = 1; bit > 0; bit <<= 1) + ; + if (bit == 0) { /* time_t is an unsigned type */ + tt_signed = FALSE; + min_time = 0; + max_time = ~(time_t) 0; + if (sflag) + max_time >>= 1; + } else { + tt_signed = TRUE; + min_time = bit; + max_time = bit; + ++max_time; + max_time = -max_time; + if (sflag) + min_time = 0; + } + min_year = TM_YEAR_BASE + gmtime(&min_time)->tm_year; + max_year = TM_YEAR_BASE + gmtime(&max_time)->tm_year; +} + +static int +itsdir(name) +const char * const name; +{ + struct stat s; + + return (stat(name, &s) == 0 && S_ISDIR(s.st_mode)); +} + +/* +** Associate sets of rules with zones. +*/ + +/* +** Sort by rule name. +*/ + +static int +rcomp(cp1, cp2) +const void * cp1; +const void * cp2; +{ + return strcmp(((struct rule *) cp1)->r_name, + ((struct rule *) cp2)->r_name); +} + +static void +associate() +{ + register struct zone * zp; + register struct rule * rp; + register int base, out; + register int i; + + if (nrules != 0) + (void) qsort((void *) rules, (size_t) nrules, + (size_t) sizeof *rules, rcomp); + for (i = 0; i < nzones; ++i) { + zp = &zones[i]; + zp->z_rules = NULL; + zp->z_nrules = 0; + } + for (base = 0; base < nrules; base = out) { + rp = &rules[base]; + for (out = base + 1; out < nrules; ++out) + if (strcmp(rp->r_name, rules[out].r_name) != 0) + break; + for (i = 0; i < nzones; ++i) { + zp = &zones[i]; + if (strcmp(zp->z_rule, rp->r_name) != 0) + continue; + zp->z_rules = rp; + zp->z_nrules = out - base; + } + } + for (i = 0; i < nzones; ++i) { + zp = &zones[i]; + if (zp->z_nrules == 0) { + /* + ** Maybe we have a local standard time offset. + */ + eat(zp->z_filename, zp->z_linenum); + zp->z_stdoff = + gethms((char *)zp->z_rule, "unruly zone", TRUE); + /* + ** Note, though, that if there's no rule, + ** a '%s' in the format is a bad thing. + */ + if (strchr(zp->z_format, '%') != 0) + error("%s in ruleless zone"); + } + } + if (errors) + (void) exit(EXIT_FAILURE); +} + +static void +infile(name) +const char * name; +{ + register FILE * fp; + register char ** fields; + register char * cp; + register const struct lookup * lp; + register int nfields; + register int wantcont; + register int num; + char buf[BUFSIZ]; + + if (strcmp(name, "-") == 0) { + name = "standard input"; + fp = stdin; + } else if ((fp = fopen(name, "r")) == NULL) { + (void) fprintf(stderr, "%s: Can't open ", progname); + (void) perror(name); + (void) exit(EXIT_FAILURE); + } + wantcont = FALSE; + for (num = 1; ; ++num) { + eat(name, num); + if (fgets(buf, (int) sizeof buf, fp) != buf) + break; + cp = strchr(buf, '\n'); + if (cp == NULL) { + error("line too long"); + (void) exit(EXIT_FAILURE); + } + *cp = '\0'; + fields = getfields(buf); + nfields = 0; + while (fields[nfields] != NULL) { + if (ciequal(fields[nfields], "-")) + fields[nfields] = ""; + ++nfields; + } + if (nfields == 0) { + /* nothing to do */ + } else if (wantcont) { + wantcont = inzcont(fields, nfields); + } else { + lp = byword(fields[0], line_codes); + if (lp == NULL) + error("input line of unknown type"); + else switch ((int) (lp->l_value)) { + case LC_RULE: + inrule(fields, nfields); + wantcont = FALSE; + break; + case LC_ZONE: + wantcont = inzone(fields, nfields); + break; + case LC_LINK: + inlink(fields, nfields); + wantcont = FALSE; + break; + case LC_LEAP: + if (name != leapsec) + (void) fprintf(stderr, +"%s: Leap line in non leap seconds file %s\n", + progname, name); + else inleap(fields, nfields); + wantcont = FALSE; + break; + default: /* "cannot happen" */ + (void) fprintf(stderr, +"%s: panic: Invalid l_value %d\n", + progname, lp->l_value); + (void) exit(EXIT_FAILURE); + } + } + ifree((char *) fields); + } + if (ferror(fp)) { + (void) fprintf(stderr, "%s: Error reading ", progname); + (void) perror(filename); + (void) exit(EXIT_FAILURE); + } + if (fp != stdin && fclose(fp)) { + (void) fprintf(stderr, "%s: Error closing ", progname); + (void) perror(filename); + (void) exit(EXIT_FAILURE); + } + if (wantcont) + error("expected continuation line not found"); +} + +/* +** Convert a string of one of the forms +** h -h hh:mm -hh:mm hh:mm:ss -hh:mm:ss +** into a number of seconds. +** A null string maps to zero. +** Call error with errstring and return zero on errors. +*/ + +static long +gethms(string, errstring, signable) +char * string; +const char * const errstring; +const int signable; +{ + int hh, mm, ss, sign; + + if (string == NULL || *string == '\0') + return 0; + if (!signable) + sign = 1; + else if (*string == '-') { + sign = -1; + ++string; + } else sign = 1; + if (sscanf(string, scheck(string, "%d"), &hh) == 1) + mm = ss = 0; + else if (sscanf(string, scheck(string, "%d:%d"), &hh, &mm) == 2) + ss = 0; + else if (sscanf(string, scheck(string, "%d:%d:%d"), + &hh, &mm, &ss) != 3) { + error(errstring); + return 0; + } + if (hh < 0 || hh >= HOURSPERDAY || + mm < 0 || mm >= MINSPERHOUR || + ss < 0 || ss > SECSPERMIN) { + error(errstring); + return 0; + } + return eitol(sign) * + (eitol(hh * MINSPERHOUR + mm) * + eitol(SECSPERMIN) + eitol(ss)); +} + +static void +inrule(fields, nfields) +register char ** const fields; +const int nfields; +{ + static struct rule r; + + if (nfields != RULE_FIELDS) { + error("wrong number of fields on Rule line"); + return; + } + if (*fields[RF_NAME] == '\0') { + error("nameless rule"); + return; + } + r.r_filename = filename; + r.r_linenum = linenum; + r.r_stdoff = gethms(fields[RF_STDOFF], "invalid saved time", TRUE); + rulesub(&r, fields[RF_LOYEAR], fields[RF_HIYEAR], fields[RF_COMMAND], + fields[RF_MONTH], fields[RF_DAY], fields[RF_TOD]); + r.r_name = ecpyalloc(fields[RF_NAME]); + r.r_abbrvar = ecpyalloc(fields[RF_ABBRVAR]); + rules = (struct rule *) erealloc((char *) rules, + (int) ((nrules + 1) * sizeof *rules)); + rules[nrules++] = r; +} + +static int +inzone(fields, nfields) +register char ** const fields; +const int nfields; +{ + register int i; + char buf[132]; + + if (nfields < ZONE_MINFIELDS || nfields > ZONE_MAXFIELDS) { + error("wrong number of fields on Zone line"); + return FALSE; + } + if (strcmp(fields[ZF_NAME], TZDEFAULT) == 0 && lcltime != NULL) { + (void) sprintf(buf, + "\"Zone %s\" line and -l option are mutually exclusive", + TZDEFAULT); + error(buf); + return FALSE; + } + if (strcmp(fields[ZF_NAME], TZDEFRULES) == 0 && psxrules != NULL) { + (void) sprintf(buf, + "\"Zone %s\" line and -p option are mutually exclusive", + TZDEFRULES); + error(buf); + return FALSE; + } + for (i = 0; i < nzones; ++i) + if (zones[i].z_name != NULL && + strcmp(zones[i].z_name, fields[ZF_NAME]) == 0) { + (void) sprintf(buf, +"duplicate zone name %s (file \"%s\", line %d)", + fields[ZF_NAME], + zones[i].z_filename, + zones[i].z_linenum); + error(buf); + return FALSE; + } + return inzsub(fields, nfields, FALSE); +} + +static int +inzcont(fields, nfields) +register char ** const fields; +const int nfields; +{ + if (nfields < ZONEC_MINFIELDS || nfields > ZONEC_MAXFIELDS) { + error("wrong number of fields on Zone continuation line"); + return FALSE; + } + return inzsub(fields, nfields, TRUE); +} + +static int +inzsub(fields, nfields, iscont) +register char ** const fields; +const int nfields; +const int iscont; +{ + register char * cp; + static struct zone z; + register int i_gmtoff, i_rule, i_format; + register int i_untilyear, i_untilmonth; + register int i_untilday, i_untiltime; + register int hasuntil; + + if (iscont) { + i_gmtoff = ZFC_GMTOFF; + i_rule = ZFC_RULE; + i_format = ZFC_FORMAT; + i_untilyear = ZFC_TILYEAR; + i_untilmonth = ZFC_TILMONTH; + i_untilday = ZFC_TILDAY; + i_untiltime = ZFC_TILTIME; + z.z_name = NULL; + } else { + i_gmtoff = ZF_GMTOFF; + i_rule = ZF_RULE; + i_format = ZF_FORMAT; + i_untilyear = ZF_TILYEAR; + i_untilmonth = ZF_TILMONTH; + i_untilday = ZF_TILDAY; + i_untiltime = ZF_TILTIME; + z.z_name = ecpyalloc(fields[ZF_NAME]); + } + z.z_filename = filename; + z.z_linenum = linenum; + z.z_gmtoff = gethms(fields[i_gmtoff], "invalid GMT offset", TRUE); + if ((cp = strchr(fields[i_format], '%')) != 0) { + if (*++cp != 's' || strchr(cp, '%') != 0) { + error("invalid abbreviation format"); + return FALSE; + } + } + z.z_rule = ecpyalloc(fields[i_rule]); + z.z_format = ecpyalloc(fields[i_format]); + hasuntil = nfields > i_untilyear; + if (hasuntil) { + z.z_untilrule.r_filename = filename; + z.z_untilrule.r_linenum = linenum; + rulesub(&z.z_untilrule, + fields[i_untilyear], + "only", + "", + (nfields > i_untilmonth) ? fields[i_untilmonth] : "Jan", + (nfields > i_untilday) ? fields[i_untilday] : "1", + (nfields > i_untiltime) ? fields[i_untiltime] : "0"); + z.z_untiltime = rpytime(&z.z_untilrule, z.z_untilrule.r_loyear); + if (iscont && nzones > 0 && z.z_untiltime < max_time && + z.z_untiltime > min_time && + zones[nzones - 1].z_untiltime >= z.z_untiltime) { +error("Zone continuation line end time is not after end time of previous line"); + return FALSE; + } + } + zones = (struct zone *) erealloc((char *) zones, + (int) ((nzones + 1) * sizeof *zones)); + zones[nzones++] = z; + /* + ** If there was an UNTIL field on this line, + ** there's more information about the zone on the next line. + */ + return hasuntil; +} + +static void +inleap(fields, nfields) +register char ** const fields; +const int nfields; +{ + register const char * cp; + register const struct lookup * lp; + register int i, j; + int year, month, day; + long dayoff, tod; + time_t t; + + if (nfields != LEAP_FIELDS) { + error("wrong number of fields on Leap line"); + return; + } + dayoff = 0; + cp = fields[LP_YEAR]; + if (sscanf((char *)cp, scheck(cp, "%d"), &year) != 1 || + year < min_year || year > max_year) { + /* + * Leapin' Lizards! + */ + error("invalid leaping year"); + return; + } + j = EPOCH_YEAR; + while (j != year) { + if (year > j) { + i = len_years[isleap(j)]; + ++j; + } else { + --j; + i = -len_years[isleap(j)]; + } + dayoff = oadd(dayoff, eitol(i)); + } + if ((lp = byword(fields[LP_MONTH], mon_names)) == NULL) { + error("invalid month name"); + return; + } + month = lp->l_value; + j = TM_JANUARY; + while (j != month) { + i = len_months[isleap(year)][j]; + dayoff = oadd(dayoff, eitol(i)); + ++j; + } + cp = fields[LP_DAY]; + if (sscanf((char *)cp, scheck(cp, "%d"), &day) != 1 || + day <= 0 || day > len_months[isleap(year)][month]) { + error("invalid day of month"); + return; + } + dayoff = oadd(dayoff, eitol(day - 1)); + if (dayoff < 0 && !tt_signed) { + error("time before zero"); + return; + } + t = (time_t) dayoff * SECSPERDAY; + /* + ** Cheap overflow check. + */ + if (t / SECSPERDAY != dayoff) { + error("time overflow"); + return; + } + tod = gethms(fields[LP_TIME], "invalid time of day", FALSE); + cp = fields[LP_CORR]; + if (strcmp(cp, "+") != 0 && strcmp(cp, "") != 0) { + /* infile() turned "-" into "" */ + error("illegal CORRECTION field on Leap line"); + return; + } + if ((lp = byword(fields[LP_ROLL], leap_types)) == NULL) { + error("illegal Rolling/Stationary field on Leap line"); + return; + } + addleap(tadd(t, tod), *cp == '+', lp->l_value); +} + +static void +inlink(fields, nfields) +register char ** const fields; +const int nfields; +{ + struct link l; + + if (nfields != LINK_FIELDS) { + error("wrong number of fields on Link line"); + return; + } + if (*fields[LF_FROM] == '\0') { + error("blank FROM field on Link line"); + return; + } + if (*fields[LF_TO] == '\0') { + error("blank TO field on Link line"); + return; + } + l.l_filename = filename; + l.l_linenum = linenum; + l.l_from = ecpyalloc(fields[LF_FROM]); + l.l_to = ecpyalloc(fields[LF_TO]); + links = (struct link *) erealloc((char *) links, + (int) ((nlinks + 1) * sizeof *links)); + links[nlinks++] = l; +} + +static void +rulesub(rp, loyearp, hiyearp, typep, monthp, dayp, timep) +register struct rule * const rp; +char * const loyearp; +char * const hiyearp; +char * const typep; +char * const monthp; +char * const dayp; +char * const timep; +{ + register struct lookup const * lp; + register char * cp; + + if ((lp = byword(monthp, mon_names)) == NULL) { + error("invalid month name"); + return; + } + rp->r_month = lp->l_value; + rp->r_todisstd = FALSE; + cp = timep; + if (*cp != '\0') { + cp += strlen(cp) - 1; + switch (lowerit(*cp)) { + case 's': + rp->r_todisstd = TRUE; + *cp = '\0'; + break; + case 'w': + rp->r_todisstd = FALSE; + *cp = '\0'; + break; + } + } + rp->r_tod = gethms(timep, "invalid time of day", FALSE); + /* + ** Year work. + */ + cp = loyearp; + if ((lp = byword(cp, begin_years)) != NULL) switch ((int) lp->l_value) { + case YR_MINIMUM: + rp->r_loyear = min_year; + break; + case YR_MAXIMUM: + rp->r_loyear = max_year; + break; + default: /* "cannot happen" */ + (void) fprintf(stderr, + "%s: panic: Invalid l_value %d\n", + progname, lp->l_value); + (void) exit(EXIT_FAILURE); + } else if (sscanf(cp, scheck(cp, "%d"), &rp->r_loyear) != 1 || + rp->r_loyear < min_year || rp->r_loyear > max_year) { + if (noise) + error("invalid starting year"); + if (rp->r_loyear > max_year) + return; + } + cp = hiyearp; + if ((lp = byword(cp, end_years)) != NULL) switch ((int) lp->l_value) { + case YR_MINIMUM: + rp->r_hiyear = min_year; + break; + case YR_MAXIMUM: + rp->r_hiyear = max_year; + break; + case YR_ONLY: + rp->r_hiyear = rp->r_loyear; + break; + default: /* "cannot happen" */ + (void) fprintf(stderr, + "%s: panic: Invalid l_value %d\n", + progname, lp->l_value); + (void) exit(EXIT_FAILURE); + } else if (sscanf(cp, scheck(cp, "%d"), &rp->r_hiyear) != 1 || + rp->r_hiyear < min_year || rp->r_hiyear > max_year) { + if (noise) + error("invalid ending year"); + if (rp->r_hiyear < min_year) + return; + } + if (rp->r_hiyear < min_year) + return; + if (rp->r_loyear < min_year) + rp->r_loyear = min_year; + if (rp->r_hiyear > max_year) + rp->r_hiyear = max_year; + if (rp->r_loyear > rp->r_hiyear) { + error("starting year greater than ending year"); + return; + } + if (*typep == '\0') + rp->r_yrtype = NULL; + else { + if (rp->r_loyear == rp->r_hiyear) { + error("typed single year"); + return; + } + rp->r_yrtype = ecpyalloc(typep); + } + /* + ** Day work. + ** Accept things such as: + ** 1 + ** last-Sunday + ** Sun<=20 + ** Sun>=7 + */ + if ((lp = byword(dayp, lasts)) != NULL) { + rp->r_dycode = DC_DOWLEQ; + rp->r_wday = lp->l_value; + rp->r_dayofmonth = len_months[1][rp->r_month]; + } else { + if ((cp = strchr(dayp, '<')) != 0) + rp->r_dycode = DC_DOWLEQ; + else if ((cp = strchr(dayp, '>')) != 0) + rp->r_dycode = DC_DOWGEQ; + else { + cp = dayp; + rp->r_dycode = DC_DOM; + } + if (rp->r_dycode != DC_DOM) { + *cp++ = 0; + if (*cp++ != '=') { + error("invalid day of month"); + return; + } + if ((lp = byword(dayp, wday_names)) == NULL) { + error("invalid weekday name"); + return; + } + rp->r_wday = lp->l_value; + } + if (sscanf(cp, scheck(cp, "%d"), &rp->r_dayofmonth) != 1 || + rp->r_dayofmonth <= 0 || + (rp->r_dayofmonth > len_months[1][rp->r_month])) { + error("invalid day of month"); + return; + } + } +} + +static void +convert(val, buf) +const long val; +char * const buf; +{ + register int i; + register long shift; + + for (i = 0, shift = 24; i < 4; ++i, shift -= 8) + buf[i] = val >> shift; +} + +static void +puttzcode(val, fp) +const long val; +FILE * const fp; +{ + char buf[4]; + + convert(val, buf); + (void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp); +} + +static void +writezone(name) +const char * const name; +{ + register FILE * fp; + register int i, j; + char fullname[BUFSIZ]; + static struct tzhead tzh; + + if (strlen(directory) + 1 + strlen(name) >= sizeof fullname) { + (void) fprintf(stderr, + "%s: File name %s/%s too long\n", progname, + directory, name); + (void) exit(EXIT_FAILURE); + } + (void) sprintf(fullname, "%s/%s", directory, name); + if ((fp = fopen(fullname, "wb")) == NULL) { + if (mkdirs(fullname) != 0) + (void) exit(EXIT_FAILURE); + if ((fp = fopen(fullname, "wb")) == NULL) { + (void) fprintf(stderr, "%s: Can't create ", progname); + (void) perror(fullname); + (void) exit(EXIT_FAILURE); + } + } + 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) fwrite((void *) &tzh, (size_t) sizeof tzh, (size_t) 1, 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; + } + 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); + if (ferror(fp) || fclose(fp)) { + (void) fprintf(stderr, "%s: Write error on ", progname); + (void) perror(fullname); + (void) exit(EXIT_FAILURE); + } +} + +static void +outzone(zpfirst, zonecount) +const struct zone * const zpfirst; +const int zonecount; +{ + register const struct zone * zp; + register struct rule * rp; + register int i, j; + register int usestart, useuntil; + register time_t starttime, untiltime; + register long gmtoff; + register long stdoff; + register int year; + register long startoff; + register int startisdst; + register int startttisstd; + register int type; + char startbuf[BUFSIZ]; + + /* + ** Now. . .finally. . .generate some useful data! + */ + timecnt = 0; + typecnt = 0; + charcnt = 0; + /* + ** Two guesses. . .the second may well be corrected later. + */ + gmtoff = zpfirst->z_gmtoff; + stdoff = 0; + starttime = 0; + startttisstd = FALSE; + for (i = 0; i < zonecount; ++i) { + usestart = i > 0; + useuntil = i < (zonecount - 1); + zp = &zpfirst[i]; + eat(zp->z_filename, zp->z_linenum); + startisdst = -1; + if (zp->z_nrules == 0) { + type = addtype(oadd(zp->z_gmtoff, zp->z_stdoff), + zp->z_format, zp->z_stdoff != 0, + startttisstd); + if (usestart) + addtt(starttime, type); + gmtoff = zp->z_gmtoff; + stdoff = zp->z_stdoff; + } else for (year = min_year; year <= max_year; ++year) { + if (useuntil && year > zp->z_untilrule.r_hiyear) + break; + /* + ** Mark which rules to do in the current year. + ** For those to do, calculate rpytime(rp, year); + */ + for (j = 0; j < zp->z_nrules; ++j) { + rp = &zp->z_rules[j]; + eats(zp->z_filename, zp->z_linenum, + rp->r_filename, rp->r_linenum); + rp->r_todo = year >= rp->r_loyear && + year <= rp->r_hiyear && + yearistype(year, rp->r_yrtype); + if (rp->r_todo) + rp->r_temp = rpytime(rp, year); + } + for ( ; ; ) { + register int k; + register time_t jtime, ktime; + register long offset; + char buf[BUFSIZ]; + + if (useuntil) { + /* + ** Turn untiltime into GMT + ** assuming the current gmtoff and + ** stdoff values. + */ + offset = gmtoff; + if (!zp->z_untilrule.r_todisstd) + offset = oadd(offset, stdoff); + untiltime = tadd(zp->z_untiltime, + -offset); + } + /* + ** Find the rule (of those to do, if any) + ** that takes effect earliest in the year. + */ + k = -1; +#ifdef lint + ktime = 0; +#endif /* defined lint */ + for (j = 0; j < zp->z_nrules; ++j) { + rp = &zp->z_rules[j]; + if (!rp->r_todo) + continue; + eats(zp->z_filename, zp->z_linenum, + rp->r_filename, rp->r_linenum); + offset = gmtoff; + if (!rp->r_todisstd) + offset = oadd(offset, stdoff); + jtime = rp->r_temp; + if (jtime == min_time || + jtime == max_time) + continue; + jtime = tadd(jtime, -offset); + if (k < 0 || jtime < ktime) { + k = j; + ktime = jtime; + } + } + if (k < 0) + break; /* go on to next year */ + rp = &zp->z_rules[k]; + rp->r_todo = FALSE; + if (useuntil && ktime >= untiltime) + break; + if (usestart) { + if (ktime < starttime) { + stdoff = rp->r_stdoff; + startoff = oadd(zp->z_gmtoff, + rp->r_stdoff); + (void) sprintf(startbuf, + zp->z_format, + rp->r_abbrvar); + startisdst = + rp->r_stdoff != 0; + continue; + } + if (ktime != starttime && + startisdst >= 0) +addtt(starttime, addtype(startoff, startbuf, startisdst, startttisstd)); + usestart = FALSE; + } + eats(zp->z_filename, zp->z_linenum, + rp->r_filename, rp->r_linenum); + (void) sprintf(buf, zp->z_format, + rp->r_abbrvar); + offset = oadd(zp->z_gmtoff, rp->r_stdoff); + type = addtype(offset, buf, rp->r_stdoff != 0, + rp->r_todisstd); + if (timecnt != 0 || rp->r_stdoff != 0) + addtt(ktime, type); + gmtoff = zp->z_gmtoff; + stdoff = rp->r_stdoff; + } + } + /* + ** Now we may get to set starttime for the next zone line. + */ + if (useuntil) { + starttime = tadd(zp->z_untiltime, + -gmtoffs[types[timecnt - 1]]); + startttisstd = zp->z_untilrule.r_todisstd; + } + } + writezone(zpfirst->z_name); +} + +static void +addtt(starttime, type) +const time_t starttime; +const int type; +{ + if (timecnt != 0 && type == types[timecnt - 1]) + return; /* easy enough! */ + if (timecnt >= TZ_MAX_TIMES) { + error("too many transitions?!"); + (void) exit(EXIT_FAILURE); + } + ats[timecnt] = starttime; + types[timecnt] = type; + ++timecnt; +} + +static int +addtype(gmtoff, abbr, isdst, ttisstd) +const long gmtoff; +const char * const abbr; +const int isdst; +const int ttisstd; +{ + register int i, j; + + /* + ** See if there's already an entry for this zone type. + ** If so, just return its index. + */ + for (i = 0; i < typecnt; ++i) { + if (gmtoff == gmtoffs[i] && isdst == isdsts[i] && + strcmp(abbr, &chars[abbrinds[i]]) == 0 && + ttisstd == ttisstds[i]) + return i; + } + /* + ** There isn't one; add a new one, unless there are already too + ** many. + */ + if (typecnt >= TZ_MAX_TYPES) { + error("too many local time types"); + (void) exit(EXIT_FAILURE); + } + gmtoffs[i] = gmtoff; + isdsts[i] = isdst; + ttisstds[i] = ttisstd; + + for (j = 0; j < charcnt; ++j) + if (strcmp(&chars[j], abbr) == 0) + break; + if (j == charcnt) + newabbr(abbr); + abbrinds[i] = j; + ++typecnt; + return i; +} + +static void +addleap(t, positive, rolling) +const time_t t; +const int positive; +const int rolling; +{ + register int i, j; + + if (leapcnt >= TZ_MAX_LEAPS) { + error("too many leap seconds"); + (void) exit(EXIT_FAILURE); + } + for (i = 0; i < leapcnt; ++i) + if (t <= trans[i]) { + if (t == trans[i]) { + error("repeated leap second moment"); + (void) exit(EXIT_FAILURE); + } + break; + } + for (j = leapcnt; j > i; --j) { + trans[j] = trans[j-1]; + corr[j] = corr[j-1]; + roll[j] = roll[j-1]; + } + trans[i] = t; + corr[i] = (positive ? 1L : -1L); + roll[i] = rolling; + ++leapcnt; +} + +static void +adjleap() +{ + register int i; + register long last = 0; + + /* + ** propagate leap seconds forward + */ + for (i = 0; i < leapcnt; ++i) { + trans[i] = tadd(trans[i], last); + last = corr[i] += last; + } +} + +static int +yearistype(year, type) +const int year; +const char * const type; +{ + char buf[BUFSIZ]; + int result; + + if (type == NULL || *type == '\0') + return TRUE; + if (strcmp(type, "uspres") == 0) + return (year % 4) == 0; + if (strcmp(type, "nonpres") == 0) + return (year % 4) != 0; + (void) sprintf(buf, "yearistype %d %s", year, type); + result = system(buf); + if (result == 0) + return TRUE; + if (result == (1 << 8)) + return FALSE; + error("Wild result from command execution"); + (void) fprintf(stderr, "%s: command was '%s', result was %d\n", + progname, buf, result); + for ( ; ; ) + (void) exit(EXIT_FAILURE); +} + +static int +lowerit(a) +const int a; +{ + return (isascii(a) && isupper(a)) ? tolower(a) : a; +} + +static int +ciequal(ap, bp) /* case-insensitive equality */ +register const char * ap; +register const char * bp; +{ + while (lowerit(*ap) == lowerit(*bp++)) + if (*ap++ == '\0') + return TRUE; + return FALSE; +} + +static int +itsabbr(abbr, word) +register const char * abbr; +register const char * word; +{ + if (lowerit(*abbr) != lowerit(*word)) + return FALSE; + ++word; + while (*++abbr != '\0') + do if (*word == '\0') + return FALSE; + while (lowerit(*word++) != lowerit(*abbr)); + return TRUE; +} + +static const struct lookup * +byword(word, table) +register const char * const word; +register const struct lookup * const table; +{ + register const struct lookup * foundlp; + register const struct lookup * lp; + + if (word == NULL || table == NULL) + return NULL; + /* + ** Look for exact match. + */ + for (lp = table; lp->l_word != NULL; ++lp) + if (ciequal(word, lp->l_word)) + return lp; + /* + ** Look for inexact match. + */ + foundlp = NULL; + for (lp = table; lp->l_word != NULL; ++lp) + if (itsabbr(word, lp->l_word)) + if (foundlp == NULL) + foundlp = lp; + else return NULL; /* multiple inexact matches */ + return foundlp; +} + +static char ** +getfields(cp) +register char * cp; +{ + register char * dp; + register char ** array; + register int nsubs; + + if (cp == NULL) + return NULL; + array = (char **) emalloc((int) ((strlen(cp) + 1) * sizeof *array)); + nsubs = 0; + for ( ; ; ) { + while (isascii(*cp) && isspace(*cp)) + ++cp; + if (*cp == '\0' || *cp == '#') + break; + array[nsubs++] = dp = cp; + do { + if ((*dp = *cp++) != '"') + ++dp; + else while ((*dp = *cp++) != '"') + if (*dp != '\0') + ++dp; + else error("Odd number of quotation marks"); + } while (*cp != '\0' && *cp != '#' && + (!isascii(*cp) || !isspace(*cp))); + if (isascii(*cp) && isspace(*cp)) + ++cp; + *dp = '\0'; + } + array[nsubs] = NULL; + return array; +} + +static long +oadd(t1, t2) +const long t1; +const long t2; +{ + register long t; + + t = t1 + t2; + if (t2 > 0 && t <= t1 || t2 < 0 && t >= t1) { + error("time overflow"); + (void) exit(EXIT_FAILURE); + } + return t; +} + +static time_t +tadd(t1, t2) +const time_t t1; +const long t2; +{ + register time_t t; + + if (t1 == max_time && t2 > 0) + return max_time; + if (t1 == min_time && t2 < 0) + return min_time; + t = t1 + t2; + if (t2 > 0 && t <= t1 || t2 < 0 && t >= t1) { + error("time overflow"); + (void) exit(EXIT_FAILURE); + } + return t; +} + +/* +** Given a rule, and a year, compute the date - in seconds since January 1, +** 1970, 00:00 LOCAL time - in that year that the rule refers to. +*/ + +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 time_t t; + + dayoff = 0; + m = TM_JANUARY; + y = EPOCH_YEAR; + while (wantedy != y) { + if (wantedy > y) { + i = len_years[isleap(y)]; + ++y; + } else { + --y; + i = -len_years[isleap(y)]; + } + dayoff = oadd(dayoff, eitol(i)); + } + while (m != rp->r_month) { + i = len_months[isleap(y)][m]; + dayoff = oadd(dayoff, eitol(i)); + ++m; + } + i = rp->r_dayofmonth; + if (m == TM_FEBRUARY && i == 29 && !isleap(y)) { + if (rp->r_dycode == DC_DOWLEQ) + --i; + else { + error("use of 2/29 in non leap-year"); + (void) exit(EXIT_FAILURE); + } + } + --i; + dayoff = oadd(dayoff, eitol(i)); + if (rp->r_dycode == DC_DOWGEQ || rp->r_dycode == DC_DOWLEQ) { + register long wday; + +#define LDAYSPERWEEK ((long) DAYSPERWEEK) + wday = eitol(EPOCH_WDAY); + /* + ** Don't trust mod of negative numbers. + */ + if (dayoff >= 0) + wday = (wday + dayoff) % LDAYSPERWEEK; + else { + wday -= ((-dayoff) % LDAYSPERWEEK); + if (wday < 0) + wday += LDAYSPERWEEK; + } + while (wday != eitol(rp->r_wday)) + if (rp->r_dycode == DC_DOWGEQ) { + dayoff = oadd(dayoff, (long) 1); + if (++wday >= LDAYSPERWEEK) + wday = 0; + ++i; + } else { + dayoff = oadd(dayoff, (long) -1); + if (--wday < 0) + wday = LDAYSPERWEEK - 1; + --i; + } + if (i < 0 || i >= len_months[isleap(y)][m]) { + error("no day in month matches rule"); + (void) exit(EXIT_FAILURE); + } + } + if (dayoff < 0 && !tt_signed) { + if (wantedy == rp->r_loyear) + return min_time; + error("time before zero"); + (void) exit(EXIT_FAILURE); + } + t = (time_t) dayoff * SECSPERDAY; + /* + ** Cheap overflow check. + */ + if (t / SECSPERDAY != dayoff) { + if (wantedy == rp->r_hiyear) + return max_time; + if (wantedy == rp->r_loyear) + return min_time; + error("time overflow"); + (void) exit(EXIT_FAILURE); + } + return tadd(t, rp->r_tod); +} + +static void +newabbr(string) +const char * const string; +{ + register int i; + + i = strlen(string) + 1; + if (charcnt + i >= TZ_MAX_CHARS) { + error("too many, or too long, time zone abbreviations"); + (void) exit(EXIT_FAILURE); + } + (void) strcpy(&chars[charcnt], string); + charcnt += eitol(i); +} + +static int +mkdirs(name) +char * const name; +{ + register char * cp; + + if ((cp = name) == NULL || *cp == '\0') + return 0; + while ((cp = strchr(cp + 1, '/')) != 0) { + *cp = '\0'; + if (!itsdir(name)) { + /* + ** It doesn't seem to exist, so we try to create it. + */ + if (mkdir(name, 0755) != 0) { + (void) fprintf(stderr, + "%s: Can't create directory ", + progname); + (void) perror(name); + return -1; + } + } + *cp = '/'; + } + return 0; +} + +static long +eitol(i) +const int i; +{ + long l; + + l = i; + if (i < 0 && l >= 0 || i == 0 && l != 0 || i > 0 && l <= 0) { + (void) fprintf(stderr, "%s: %d did not sign extend correctly\n", + progname, i); + (void) exit(EXIT_FAILURE); + } + return l; +} + +/* +** UNIX is a registered trademark of AT&T. +*/ |